パスカルの三角形とシェルピンスキーのギャスケット
コンテンツ
パスカルの3角形は次のコードで生成できる。
pascal = iterate next [1] where next xs = zipWith (+) (:xs) (xs++[]) showPascal n = mapM_ print.take n$pascal
*Main> showPascal 10
とすれば、次のようなパスカルの三角形が得られる。
[1] [1,1] [1,2,1] [1,3,3,1] [1,4,6,4,1] [1,5,10,10,5,1] [1,6,15,20,15,6,1] [1,7,21,35,35,21,7,1] [1,8,28,56,70,56,28,8,1] [1,9,36,84,126,126,84,36,9,1]
まぁ、ここまでは普通(これから後かも普通かもしれないが…)。
ここで、この三角形を Mod 2 してみると、あの有名なシェルピンスキーのギャスケットが現れる。
コードは下のようなもの。
pascalMod n = iterate next [1] where next xs = zipWith addMod (:xs) (xs++[]) addMod x y = (x+y) `mod` n showSierpinski n = mapM_ print.map (map toSign).take n$pascalMod 2 where toSign x | x == = '_' | otherwise = '*'
*Main> showSierpinski 48
とすると、
"*" "**" "*_*" "****" "*___*" "**__**" "*_*_*_*" "********" "*_______*" "**______**" "*_*_____*_*" "****____****" "*___*___*___*" "**__**__**__**" "*_*_*_*_*_*_*_*" "****************" "*_______________*" "**______________**" "*_*_____________*_*" "****____________****" "*___*___________*___*" "**__**__________**__**" "*_*_*_*_________*_*_*_*" "********________********" "*_______*_______*_______*" "**______**______**______**" "*_*_____*_*_____*_*_____*_*" "****____****____****____****" "*___*___*___*___*___*___*___*" "**__**__**__**__**__**__**__**" "*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*" "********************************" "*_______________________________*" "**______________________________**" "*_*_____________________________*_*" "****____________________________****" "*___*___________________________*___*" "**__**__________________________**__**" "*_*_*_*_________________________*_*_*_*" "********________________________********" "*_______*_______________________*_______*" "**______**______________________**______**" "*_*_____*_*_____________________*_*_____*_*" "****____****____________________****____****" "*___*___*___*___________________*___*___*___*" "**__**__**__**__________________**__**__**__**" "*_*_*_*_*_*_*_*_________________*_*_*_*_*_*_*_*" "****************________________****************"
実はMod 2でなくても、Mod 3などでも良い。が、Mod 2が見た目がいい気がする。
作成者 Toru Mano
最終更新時刻 2023-01-01 (c70d5a1)