パーソナルブログメモリ

a = [1, 1]
for _ in "*" * 999: a += [sum(a[-2:])]
print(a)

プログラムに何ができるのかと考えて、とりあえず一番簡単な魔法陣を作ってみる。

2018-09-14 | python入門(すぐさまマスター)
個人的なプログラムで実生活に役立ったものは皆無かもしれない。
何かあったかもしれないけど覚えていない。

大量にデータなどあると分析してみたりするのは楽しい時もある。
ちょっとしたアルゴリズムのちょっとした改良で高速化すると面白い。
しかしそのアルゴリズムが実生活で役立つものかといわれるとゲームなどで少し役立つ程度。

それでも何か役立つのではと思っていろいろ試行錯誤している。
なんとなくhaskellの流れで「ガロアの数学「体」入門」という本を読んでみる。
延々と魔法陣について記述されている。

魔法陣なんてグルグルまわせば一発なんじゃないのと思ったけどこれがとんでもなく甘かったです。


#3x3
import itertools
import time

st=time.time()

n = itertools.permutations([1,2,3,4,5,6,7,8,9], 9)

c=0
for i in n:
    a=list(i)
    if sum(a[0:3])==sum(a[3:6])==sum(a[6:9])==sum(a[0:9:3])==sum(a[1:9:3])==sum(a[2:9:3])==sum(a[2:7:2])==sum(a[0:9:4]):
        print(a[0:3])
        print(a[3:6])
        print(a[6:9])
        print(" ")

print(time.time()-st)


#4x4
import itertools
import time

st=time.time()

n = itertools.permutations([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16], 16)

c=0
for i in n:
    c+=1
    a=list(i)
    if c%10000000==0:
        print(c,":",time.time()-st)
        print(a)
    if a[3]>4:
        if sum(a[0:4])==34:
            if sum(a[4:8])==sum(a[8:12])==sum(a[12:16])==sum(a[0:16:4])==sum(a[1:16:4])==sum(a[2:16:4])==sum(a[3:16:4])==sum(a[0:16:5])==sum(a[3:13:3]):
                print(a[0:4])
                print(a[4:8])
                print(a[8:12])
                print(a[12:16])
                print(" ")


本によると6x6が難しいとあったのでそれを目指してみました。

3x3はとけます。

4x4は最初の一つまで何時間かかるやら(そこまで実験していないのでバグありそうです。)

4x4で読み飛ばさせようとして
n = list(itertools.permutations([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16], 16))
なんてしてみたら、ubuntuしばらくハングしました。

4x4でifがやたらネストしているのは少しでも高速化を図ったあとです。

[2, 7, 6]
[9, 5, 1]
[4, 3, 8]

[2, 9, 4]
[7, 5, 3]
[6, 1, 8]

[4, 3, 8]
[9, 5, 1]
[2, 7, 6]

[4, 9, 2]
[3, 5, 7]
[8, 1, 6]

[6, 1, 8]
[7, 5, 3]
[2, 9, 4]

[6, 7, 2]
[1, 5, 9]
[8, 3, 4]

[8, 1, 6]
[3, 5, 7]
[4, 9, 2]

[8, 3, 4]
[1, 5, 9]
[6, 7, 2]

0.40970540046691895



最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。