2006-06-13から1日間の記事一覧

言語 Brainf*ck

http://ja.wikipedia.org/wiki/Brainfuck8命令しかないけどチューリング完全な言語Brainf*ck ++++++++[>++++++<-]>[>+>+>+<<<-],>[<->-],>[<->-]<[-<+>]<[->>>+<<<]>>>.2文字の数字入力を受け取りそれぞれの数を足した物を出力するプログラム(1桁のみ) つ…

ビット数を数える4 再帰版2(シンプルバージョン)

bitCount4 :: Int -> Int bitCount4 0 = 0 bitCount4 b = (b .&. 1) + bitCount4(shiftR b 1)いかにも再帰的な感じ。

ビット数を数える3 高階関数版(testBitを使用)

bitCount3 :: Int -> Int bitCount3 b = length $ filter (testBit b) [0..bitSize(b)-1] いかにもビットを数えている感じ。分かりやすい。

ビット数を数える2 再帰版

ここのバージョン3を参考に http://www.nminoru.jp/~nminoru/programming/bitcount.html import Bits bitCount2 :: Int -> Int bitCount2 0 = 0 bitCount2 b = 1 + bitCount2 ( b .&. (b-1))こっちの方が綺麗で好きだなぁ。なんとなく短くしてみたり import…

組み合わせの数 ビットカウントバージョン

import Bits import List bitCount1 :: Int -> Int bitCount1 b = (foldl f) b [(1,0x55555555),(2,0x33333333), (4,0x0f0f0f0f),(8,0x00ff00ff),(16,0x0000ffff)] where f :: Int -> (Int,Int) -> Int f b (n,a) = (b .&. a) + ((shiftR b n).&. a) c n k =…

これを使って2項係数配列を生成

*Main> [0..2^5-1::Int] [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31] *Main> map bitCount1 it [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5] *Main> sort it [0,1,1,1,1,1,2,2,2,2,2,…

ビット数を数える

ここのバージョン5を参考に http://www.nminoru.jp/~nminoru/programming/bitcount.html import Bits bitCount1 :: Int -> Int bitCount1 b = (foldl f) b [(1,0x55555555),(2,0x33333333),(4,0x0f0f0f0f), (8,0x00ff00ff),(16,0x0000ffff)] where f :: Int…