このディレクトリの索引

# 出典 :: プログラミングのお題スレ Part3 #435 # # お題:10進数を2進数にしてビットごとに反転したものを10進数に戻す。 # 例 # 1 -> 0 # 12345 -> 4038 # 256 -> 255 '10進数を2進数にしてビットごとに反転したものを10進数に戻す。'(_10進数を,_2進数にしてビットごとに反転したものを10進数戻す) :- '10進数を2進数にして'(_10進数を,[],_2進数にして), ビットごとに反転したものを(_2進数にして,_ビットごとに反転したものを), '10進数に戻す'(_ビットごとに反転したものを,0,_2進数にしてビットごとに反転したものを10進数戻す). '10進数を2進数にして'(0,_2進数にして,_2進数にして) :- !. '10進数を2進数にして'(_10進数,_2進数ならび,_2進数にして) :- '2進数を下位桁から積み上げる'(_10進数,_2進数ならび,_2進数にして). '2進数を下位桁から積み上げる'(_10進数,_2進数ならび,_2進数にして) :- 最下位桁のビットを切り取る(_10進数,_ビット,_10進数_1), '10進数を2進数にして'(_10進数_1,[_ビット|_2進数ならび],_2進数にして). 最下位桁のビットを切り取る(_10進数,_ビット,_10進数_1) :- _ビット is _10進数 mod 2, _10進数_1 is _10進数 // 2. ビットごとに反転したものを(_2進数にして,_ビットごとに反転したものを) :- findall(_反転した,( ビットを反転した(_2進数にして,_反転した)),_ビットごとに反転したものを). ビットを反転した(_2進数にして,_反転した) :- ビットを(_2進数にして,_ビットを), 反転した(_ビットを,_反転した). ビットを(_2進数にして,_ビットを) :- nth1(_,_2進数にして,_ビットを). 反転した(0,1). 反転した(1,0). '10進数に戻す'([],_10進数に戻す,_10進数に戻す). '10進数に戻す'(_二進数ビットならび,_10進数の積み上げ_1,_10進数に戻す) :- '10進数を積み上げて行く'(_二進数ビットならび,_10進数の積み上げ_1,_10進数に戻す). '10進数を積み上げて行く'([_ビット|R],_10進数の積み上げ_1,_10進数に戻す) :- _10進数の積み上げ_2 is _10進数の積み上げ_1 * 2 + _ビット, '10進数に戻す'(R,_10進数の積み上げ_2,_10進数に戻す).