2020年7月25日土曜日

200725

Ruby


Martin Gardner のlucky number について

2187 + 1234 = 3421
2187 + 12345 = 14532
2187 + 123456 = 125643
2187 + 1234567 = 1236754
2187 + 12345678 = 12347865
2187 + 123456789 = 123458976
のうち、
2187 + 1234 = 3421
2187 + 2345 = 4532
2187 + 3456 = 5643
2187 + 4567 = 6754
2187 + 5678 = 7865
2187 + 6789 = 8976
の部分が大事だと思うので、このような数字を見つけてみた。

def A(digit)
  ary = []
  (10 ** (digit - 1)..10 ** digit - 1).each{|i|
    flag = true
    (1..10 - digit).each{|j|
      a = (j..j + digit - 1).to_a
      k = a.join.to_i
      l = i + k
      if l.to_s.split('').map(&:to_i).sort != a
        flag = false
        break
      end
    }
    ary << i if flag
  }
  ary
end

def B(ary, digit)
  p ary
  puts
  ary.each{|i|
    (1..10 - digit).each{|j|
      k = (j..j + digit - 1).to_a.join.to_i
      puts "#{i} + #{k} = #{i + k}"
    }
    puts "-" * (digit * 3 + 6)
  }
end

(1..5).each{|i| B(A(i), i)}

出力結果
[]

[]

[108, 189, 198]

108 + 123 = 231
108 + 234 = 342
108 + 345 = 453
108 + 456 = 564
108 + 567 = 675
108 + 678 = 786
108 + 789 = 897
---------------
189 + 123 = 312
189 + 234 = 423
189 + 345 = 534
189 + 456 = 645
189 + 567 = 756
189 + 678 = 867
189 + 789 = 978
---------------
198 + 123 = 321
198 + 234 = 432
198 + 345 = 543
198 + 456 = 654
198 + 567 = 765
198 + 678 = 876
198 + 789 = 987
---------------
[1080, 1107, 1179, 1197, 1890, 1908, 1980, 2007, 2178, 2187, 2889, 2898, 2979, 2997, 3078, 3087]

1080 + 1234 = 2314
1080 + 2345 = 3425
1080 + 3456 = 4536
1080 + 4567 = 5647
1080 + 5678 = 6758
1080 + 6789 = 7869
------------------
1107 + 1234 = 2341
1107 + 2345 = 3452
1107 + 3456 = 4563
1107 + 4567 = 5674
1107 + 5678 = 6785
1107 + 6789 = 7896
------------------
1179 + 1234 = 2413
1179 + 2345 = 3524
1179 + 3456 = 4635
1179 + 4567 = 5746
1179 + 5678 = 6857
1179 + 6789 = 7968
------------------
1197 + 1234 = 2431
1197 + 2345 = 3542
1197 + 3456 = 4653
1197 + 4567 = 5764
1197 + 5678 = 6875
1197 + 6789 = 7986
------------------
1890 + 1234 = 3124
1890 + 2345 = 4235
1890 + 3456 = 5346
1890 + 4567 = 6457
1890 + 5678 = 7568
1890 + 6789 = 8679
------------------
1908 + 1234 = 3142
1908 + 2345 = 4253
1908 + 3456 = 5364
1908 + 4567 = 6475
1908 + 5678 = 7586
1908 + 6789 = 8697
------------------
1980 + 1234 = 3214
1980 + 2345 = 4325
1980 + 3456 = 5436
1980 + 4567 = 6547
1980 + 5678 = 7658
1980 + 6789 = 8769
------------------
2007 + 1234 = 3241
2007 + 2345 = 4352
2007 + 3456 = 5463
2007 + 4567 = 6574
2007 + 5678 = 7685
2007 + 6789 = 8796
------------------
2178 + 1234 = 3412
2178 + 2345 = 4523
2178 + 3456 = 5634
2178 + 4567 = 6745
2178 + 5678 = 7856
2178 + 6789 = 8967
------------------
2187 + 1234 = 3421
2187 + 2345 = 4532
2187 + 3456 = 5643
2187 + 4567 = 6754
2187 + 5678 = 7865
2187 + 6789 = 8976
------------------
2889 + 1234 = 4123
2889 + 2345 = 5234
2889 + 3456 = 6345
2889 + 4567 = 7456
2889 + 5678 = 8567
2889 + 6789 = 9678
------------------
2898 + 1234 = 4132
2898 + 2345 = 5243
2898 + 3456 = 6354
2898 + 4567 = 7465
2898 + 5678 = 8576
2898 + 6789 = 9687
------------------
2979 + 1234 = 4213
2979 + 2345 = 5324
2979 + 3456 = 6435
2979 + 4567 = 7546
2979 + 5678 = 8657
2979 + 6789 = 9768
------------------
2997 + 1234 = 4231
2997 + 2345 = 5342
2997 + 3456 = 6453
2997 + 4567 = 7564
2997 + 5678 = 8675
2997 + 6789 = 9786
------------------
3078 + 1234 = 4312
3078 + 2345 = 5423
3078 + 3456 = 6534
3078 + 4567 = 7645
3078 + 5678 = 8756
3078 + 6789 = 9867
------------------
3087 + 1234 = 4321
3087 + 2345 = 5432
3087 + 3456 = 6543
3087 + 4567 = 7654
3087 + 5678 = 8765
3087 + 6789 = 9876
------------------
[10800, 10809, 11070, 11106, 11169, 11196, 11790, 11808, 11970, 12006, 12168, 12186, 12789, 12798, 12969, 12996, 13068, 13086, 18900, 18909, 19080, 19107, 19179, 19197, 19800, 19809, 20070, 20106, 20169, 20196, 21780, 21807, 21870, 21906, 22167, 22176, 22779, 22797, 22869, 22896, 23067, 23076, 28890, 28908, 28980, 29007, 29178, 29187, 29790, 29808, 29970, 30006, 30168, 30186, 30780, 30807, 30870, 30906, 31167, 31176, 32778, 32787, 32868, 32886, 32967, 32976, 38889, 38898, 38979, 38997, 39078, 39087, 39789, 39798, 39969, 39996, 40068, 40086, 40779, 40797, 40869, 40896, 41067, 41076, 41778, 41787, 41868, 41886, 41967, 41976]

10800 + 12345 = 23145
10800 + 23456 = 34256
10800 + 34567 = 45367
10800 + 45678 = 56478
10800 + 56789 = 67589
---------------------
10809 + 12345 = 23154
10809 + 23456 = 34265
10809 + 34567 = 45376
10809 + 45678 = 56487
10809 + 56789 = 67598
---------------------
11070 + 12345 = 23415
11070 + 23456 = 34526
11070 + 34567 = 45637
11070 + 45678 = 56748
11070 + 56789 = 67859
---------------------
11106 + 12345 = 23451
11106 + 23456 = 34562
11106 + 34567 = 45673
11106 + 45678 = 56784
11106 + 56789 = 67895
---------------------
11169 + 12345 = 23514
11169 + 23456 = 34625
11169 + 34567 = 45736
11169 + 45678 = 56847
11169 + 56789 = 67958
---------------------
11196 + 12345 = 23541
11196 + 23456 = 34652
11196 + 34567 = 45763
11196 + 45678 = 56874
11196 + 56789 = 67985
---------------------
11790 + 12345 = 24135
11790 + 23456 = 35246
11790 + 34567 = 46357
11790 + 45678 = 57468
11790 + 56789 = 68579
---------------------
11808 + 12345 = 24153
11808 + 23456 = 35264
11808 + 34567 = 46375
11808 + 45678 = 57486
11808 + 56789 = 68597
---------------------
11970 + 12345 = 24315
11970 + 23456 = 35426
11970 + 34567 = 46537
11970 + 45678 = 57648
11970 + 56789 = 68759
---------------------
12006 + 12345 = 24351
12006 + 23456 = 35462
12006 + 34567 = 46573
12006 + 45678 = 57684
12006 + 56789 = 68795
---------------------
12168 + 12345 = 24513
12168 + 23456 = 35624
12168 + 34567 = 46735
12168 + 45678 = 57846
12168 + 56789 = 68957
---------------------
12186 + 12345 = 24531
12186 + 23456 = 35642
12186 + 34567 = 46753
12186 + 45678 = 57864
12186 + 56789 = 68975
---------------------
12789 + 12345 = 25134
12789 + 23456 = 36245
12789 + 34567 = 47356
12789 + 45678 = 58467
12789 + 56789 = 69578
---------------------
12798 + 12345 = 25143
12798 + 23456 = 36254
12798 + 34567 = 47365
12798 + 45678 = 58476
12798 + 56789 = 69587
---------------------
12969 + 12345 = 25314
12969 + 23456 = 36425
12969 + 34567 = 47536
12969 + 45678 = 58647
12969 + 56789 = 69758
---------------------
12996 + 12345 = 25341
12996 + 23456 = 36452
12996 + 34567 = 47563
12996 + 45678 = 58674
12996 + 56789 = 69785
---------------------
13068 + 12345 = 25413
13068 + 23456 = 36524
13068 + 34567 = 47635
13068 + 45678 = 58746
13068 + 56789 = 69857
---------------------
13086 + 12345 = 25431
13086 + 23456 = 36542
13086 + 34567 = 47653
13086 + 45678 = 58764
13086 + 56789 = 69875
---------------------
18900 + 12345 = 31245
18900 + 23456 = 42356
18900 + 34567 = 53467
18900 + 45678 = 64578
18900 + 56789 = 75689
---------------------
18909 + 12345 = 31254
18909 + 23456 = 42365
18909 + 34567 = 53476
18909 + 45678 = 64587
18909 + 56789 = 75698
---------------------
19080 + 12345 = 31425
19080 + 23456 = 42536
19080 + 34567 = 53647
19080 + 45678 = 64758
19080 + 56789 = 75869
---------------------
19107 + 12345 = 31452
19107 + 23456 = 42563
19107 + 34567 = 53674
19107 + 45678 = 64785
19107 + 56789 = 75896
---------------------
19179 + 12345 = 31524
19179 + 23456 = 42635
19179 + 34567 = 53746
19179 + 45678 = 64857
19179 + 56789 = 75968
---------------------
19197 + 12345 = 31542
19197 + 23456 = 42653
19197 + 34567 = 53764
19197 + 45678 = 64875
19197 + 56789 = 75986
---------------------
19800 + 12345 = 32145
19800 + 23456 = 43256
19800 + 34567 = 54367
19800 + 45678 = 65478
19800 + 56789 = 76589
---------------------
19809 + 12345 = 32154
19809 + 23456 = 43265
19809 + 34567 = 54376
19809 + 45678 = 65487
19809 + 56789 = 76598
---------------------
20070 + 12345 = 32415
20070 + 23456 = 43526
20070 + 34567 = 54637
20070 + 45678 = 65748
20070 + 56789 = 76859
---------------------
20106 + 12345 = 32451
20106 + 23456 = 43562
20106 + 34567 = 54673
20106 + 45678 = 65784
20106 + 56789 = 76895
---------------------
20169 + 12345 = 32514
20169 + 23456 = 43625
20169 + 34567 = 54736
20169 + 45678 = 65847
20169 + 56789 = 76958
---------------------
20196 + 12345 = 32541
20196 + 23456 = 43652
20196 + 34567 = 54763
20196 + 45678 = 65874
20196 + 56789 = 76985
---------------------
21780 + 12345 = 34125
21780 + 23456 = 45236
21780 + 34567 = 56347
21780 + 45678 = 67458
21780 + 56789 = 78569
---------------------
21807 + 12345 = 34152
21807 + 23456 = 45263
21807 + 34567 = 56374
21807 + 45678 = 67485
21807 + 56789 = 78596
---------------------
21870 + 12345 = 34215
21870 + 23456 = 45326
21870 + 34567 = 56437
21870 + 45678 = 67548
21870 + 56789 = 78659
---------------------
21906 + 12345 = 34251
21906 + 23456 = 45362
21906 + 34567 = 56473
21906 + 45678 = 67584
21906 + 56789 = 78695
---------------------
22167 + 12345 = 34512
22167 + 23456 = 45623
22167 + 34567 = 56734
22167 + 45678 = 67845
22167 + 56789 = 78956
---------------------
22176 + 12345 = 34521
22176 + 23456 = 45632
22176 + 34567 = 56743
22176 + 45678 = 67854
22176 + 56789 = 78965
---------------------
22779 + 12345 = 35124
22779 + 23456 = 46235
22779 + 34567 = 57346
22779 + 45678 = 68457
22779 + 56789 = 79568
---------------------
22797 + 12345 = 35142
22797 + 23456 = 46253
22797 + 34567 = 57364
22797 + 45678 = 68475
22797 + 56789 = 79586
---------------------
22869 + 12345 = 35214
22869 + 23456 = 46325
22869 + 34567 = 57436
22869 + 45678 = 68547
22869 + 56789 = 79658
---------------------
22896 + 12345 = 35241
22896 + 23456 = 46352
22896 + 34567 = 57463
22896 + 45678 = 68574
22896 + 56789 = 79685
---------------------
23067 + 12345 = 35412
23067 + 23456 = 46523
23067 + 34567 = 57634
23067 + 45678 = 68745
23067 + 56789 = 79856
---------------------
23076 + 12345 = 35421
23076 + 23456 = 46532
23076 + 34567 = 57643
23076 + 45678 = 68754
23076 + 56789 = 79865
---------------------
28890 + 12345 = 41235
28890 + 23456 = 52346
28890 + 34567 = 63457
28890 + 45678 = 74568
28890 + 56789 = 85679
---------------------
28908 + 12345 = 41253
28908 + 23456 = 52364
28908 + 34567 = 63475
28908 + 45678 = 74586
28908 + 56789 = 85697
---------------------
28980 + 12345 = 41325
28980 + 23456 = 52436
28980 + 34567 = 63547
28980 + 45678 = 74658
28980 + 56789 = 85769
---------------------
29007 + 12345 = 41352
29007 + 23456 = 52463
29007 + 34567 = 63574
29007 + 45678 = 74685
29007 + 56789 = 85796
---------------------
29178 + 12345 = 41523
29178 + 23456 = 52634
29178 + 34567 = 63745
29178 + 45678 = 74856
29178 + 56789 = 85967
---------------------
29187 + 12345 = 41532
29187 + 23456 = 52643
29187 + 34567 = 63754
29187 + 45678 = 74865
29187 + 56789 = 85976
---------------------
29790 + 12345 = 42135
29790 + 23456 = 53246
29790 + 34567 = 64357
29790 + 45678 = 75468
29790 + 56789 = 86579
---------------------
29808 + 12345 = 42153
29808 + 23456 = 53264
29808 + 34567 = 64375
29808 + 45678 = 75486
29808 + 56789 = 86597
---------------------
29970 + 12345 = 42315
29970 + 23456 = 53426
29970 + 34567 = 64537
29970 + 45678 = 75648
29970 + 56789 = 86759
---------------------
30006 + 12345 = 42351
30006 + 23456 = 53462
30006 + 34567 = 64573
30006 + 45678 = 75684
30006 + 56789 = 86795
---------------------
30168 + 12345 = 42513
30168 + 23456 = 53624
30168 + 34567 = 64735
30168 + 45678 = 75846
30168 + 56789 = 86957
---------------------
30186 + 12345 = 42531
30186 + 23456 = 53642
30186 + 34567 = 64753
30186 + 45678 = 75864
30186 + 56789 = 86975
---------------------
30780 + 12345 = 43125
30780 + 23456 = 54236
30780 + 34567 = 65347
30780 + 45678 = 76458
30780 + 56789 = 87569
---------------------
30807 + 12345 = 43152
30807 + 23456 = 54263
30807 + 34567 = 65374
30807 + 45678 = 76485
30807 + 56789 = 87596
---------------------
30870 + 12345 = 43215
30870 + 23456 = 54326
30870 + 34567 = 65437
30870 + 45678 = 76548
30870 + 56789 = 87659
---------------------
30906 + 12345 = 43251
30906 + 23456 = 54362
30906 + 34567 = 65473
30906 + 45678 = 76584
30906 + 56789 = 87695
---------------------
31167 + 12345 = 43512
31167 + 23456 = 54623
31167 + 34567 = 65734
31167 + 45678 = 76845
31167 + 56789 = 87956
---------------------
31176 + 12345 = 43521
31176 + 23456 = 54632
31176 + 34567 = 65743
31176 + 45678 = 76854
31176 + 56789 = 87965
---------------------
32778 + 12345 = 45123
32778 + 23456 = 56234
32778 + 34567 = 67345
32778 + 45678 = 78456
32778 + 56789 = 89567
---------------------
32787 + 12345 = 45132
32787 + 23456 = 56243
32787 + 34567 = 67354
32787 + 45678 = 78465
32787 + 56789 = 89576
---------------------
32868 + 12345 = 45213
32868 + 23456 = 56324
32868 + 34567 = 67435
32868 + 45678 = 78546
32868 + 56789 = 89657
---------------------
32886 + 12345 = 45231
32886 + 23456 = 56342
32886 + 34567 = 67453
32886 + 45678 = 78564
32886 + 56789 = 89675
---------------------
32967 + 12345 = 45312
32967 + 23456 = 56423
32967 + 34567 = 67534
32967 + 45678 = 78645
32967 + 56789 = 89756
---------------------
32976 + 12345 = 45321
32976 + 23456 = 56432
32976 + 34567 = 67543
32976 + 45678 = 78654
32976 + 56789 = 89765
---------------------
38889 + 12345 = 51234
38889 + 23456 = 62345
38889 + 34567 = 73456
38889 + 45678 = 84567
38889 + 56789 = 95678
---------------------
38898 + 12345 = 51243
38898 + 23456 = 62354
38898 + 34567 = 73465
38898 + 45678 = 84576
38898 + 56789 = 95687
---------------------
38979 + 12345 = 51324
38979 + 23456 = 62435
38979 + 34567 = 73546
38979 + 45678 = 84657
38979 + 56789 = 95768
---------------------
38997 + 12345 = 51342
38997 + 23456 = 62453
38997 + 34567 = 73564
38997 + 45678 = 84675
38997 + 56789 = 95786
---------------------
39078 + 12345 = 51423
39078 + 23456 = 62534
39078 + 34567 = 73645
39078 + 45678 = 84756
39078 + 56789 = 95867
---------------------
39087 + 12345 = 51432
39087 + 23456 = 62543
39087 + 34567 = 73654
39087 + 45678 = 84765
39087 + 56789 = 95876
---------------------
39789 + 12345 = 52134
39789 + 23456 = 63245
39789 + 34567 = 74356
39789 + 45678 = 85467
39789 + 56789 = 96578
---------------------
39798 + 12345 = 52143
39798 + 23456 = 63254
39798 + 34567 = 74365
39798 + 45678 = 85476
39798 + 56789 = 96587
---------------------
39969 + 12345 = 52314
39969 + 23456 = 63425
39969 + 34567 = 74536
39969 + 45678 = 85647
39969 + 56789 = 96758
---------------------
39996 + 12345 = 52341
39996 + 23456 = 63452
39996 + 34567 = 74563
39996 + 45678 = 85674
39996 + 56789 = 96785
---------------------
40068 + 12345 = 52413
40068 + 23456 = 63524
40068 + 34567 = 74635
40068 + 45678 = 85746
40068 + 56789 = 96857
---------------------
40086 + 12345 = 52431
40086 + 23456 = 63542
40086 + 34567 = 74653
40086 + 45678 = 85764
40086 + 56789 = 96875
---------------------
40779 + 12345 = 53124
40779 + 23456 = 64235
40779 + 34567 = 75346
40779 + 45678 = 86457
40779 + 56789 = 97568
---------------------
40797 + 12345 = 53142
40797 + 23456 = 64253
40797 + 34567 = 75364
40797 + 45678 = 86475
40797 + 56789 = 97586
---------------------
40869 + 12345 = 53214
40869 + 23456 = 64325
40869 + 34567 = 75436
40869 + 45678 = 86547
40869 + 56789 = 97658
---------------------
40896 + 12345 = 53241
40896 + 23456 = 64352
40896 + 34567 = 75463
40896 + 45678 = 86574
40896 + 56789 = 97685
---------------------
41067 + 12345 = 53412
41067 + 23456 = 64523
41067 + 34567 = 75634
41067 + 45678 = 86745
41067 + 56789 = 97856
---------------------
41076 + 12345 = 53421
41076 + 23456 = 64532
41076 + 34567 = 75643
41076 + 45678 = 86754
41076 + 56789 = 97865
---------------------
41778 + 12345 = 54123
41778 + 23456 = 65234
41778 + 34567 = 76345
41778 + 45678 = 87456
41778 + 56789 = 98567
---------------------
41787 + 12345 = 54132
41787 + 23456 = 65243
41787 + 34567 = 76354
41787 + 45678 = 87465
41787 + 56789 = 98576
---------------------
41868 + 12345 = 54213
41868 + 23456 = 65324
41868 + 34567 = 76435
41868 + 45678 = 87546
41868 + 56789 = 98657
---------------------
41886 + 12345 = 54231
41886 + 23456 = 65342
41886 + 34567 = 76453
41886 + 45678 = 87564
41886 + 56789 = 98675
---------------------
41967 + 12345 = 54312
41967 + 23456 = 65423
41967 + 34567 = 76534
41967 + 45678 = 87645
41967 + 56789 = 98756
---------------------
41976 + 12345 = 54321
41976 + 23456 = 65432
41976 + 34567 = 76543
41976 + 45678 = 87654
41976 + 56789 = 98765
---------------------

2020年7月23日木曜日

200723

PARI


A307883 とA307884

diagonal of the rational function R(r, k) = r / ((1-r*x)*(1-r*y) + r-1 - (k+r-1)*r*x*y)
がr (≠0) の値に依存しないことは、以下のように展開すれば確認できる。
R(r, k)
= r / ((1-r*x-r*y+r^2*x*y) + r-1 - (k+r-1)*r*x*y)
= r / (r * (1-x-y-(k-1)*x*y))
= 1 / ((1-x)*(1-y) - k*x*y)
= R(1, k)

実際計算でも確かめてみた。

(00:00) gp > N=10;
(00:00) gp > diag(n, expr, var=variables(expr)) = {
  my(a=vector(n));
  for(i=1, #var, expr=taylor(expr, var[#var-i+1], n));
  for(j=1, n, a[j]=expr;
    for(i=1, #var, a[j]=polcoeff(a[j], j-1)));
  return(a);
};
(00:00) gp > R(r, k) = r/((1-r*x)*(1-r*y)+r-1-(k+r-1)*r*x*y);
(00:00) gp > for(k=-10, 10, for(r=-5, 5, if(r!=0, print("(r,k) = (", r, ",", k, ") ", diag(N, R(r, k))))))
(r,k) = (-5,-10) [1, -9, 61, -189, -2559, 59751, -727859, 5968611, -23658239, -239767209]
(r,k) = (-4,-10) [1, -9, 61, -189, -2559, 59751, -727859, 5968611, -23658239, -239767209]
(r,k) = (-3,-10) [1, -9, 61, -189, -2559, 59751, -727859, 5968611, -23658239, -239767209]
(r,k) = (-2,-10) [1, -9, 61, -189, -2559, 59751, -727859, 5968611, -23658239, -239767209]
(r,k) = (-1,-10) [1, -9, 61, -189, -2559, 59751, -727859, 5968611, -23658239, -239767209]
(r,k) = (1,-10) [1, -9, 61, -189, -2559, 59751, -727859, 5968611, -23658239, -239767209]
(r,k) = (2,-10) [1, -9, 61, -189, -2559, 59751, -727859, 5968611, -23658239, -239767209]
(r,k) = (3,-10) [1, -9, 61, -189, -2559, 59751, -727859, 5968611, -23658239, -239767209]
(r,k) = (4,-10) [1, -9, 61, -189, -2559, 59751, -727859, 5968611, -23658239, -239767209]
(r,k) = (5,-10) [1, -9, 61, -189, -2559, 59751, -727859, 5968611, -23658239, -239767209]
(r,k) = (-5,-9) [1, -8, 46, -80, -2330, 39952, -391796, 2396512, -1665530, -187855280]
(r,k) = (-4,-9) [1, -8, 46, -80, -2330, 39952, -391796, 2396512, -1665530, -187855280]
(r,k) = (-3,-9) [1, -8, 46, -80, -2330, 39952, -391796, 2396512, -1665530, -187855280]
(r,k) = (-2,-9) [1, -8, 46, -80, -2330, 39952, -391796, 2396512, -1665530, -187855280]
(r,k) = (-1,-9) [1, -8, 46, -80, -2330, 39952, -391796, 2396512, -1665530, -187855280]
(r,k) = (1,-9) [1, -8, 46, -80, -2330, 39952, -391796, 2396512, -1665530, -187855280]
(r,k) = (2,-9) [1, -8, 46, -80, -2330, 39952, -391796, 2396512, -1665530, -187855280]
(r,k) = (3,-9) [1, -8, 46, -80, -2330, 39952, -391796, 2396512, -1665530, -187855280]
(r,k) = (4,-9) [1, -8, 46, -80, -2330, 39952, -391796, 2396512, -1665530, -187855280]
(r,k) = (5,-9) [1, -8, 46, -80, -2330, 39952, -391796, 2396512, -1665530, -187855280]
(r,k) = (-5,-8) [1, -7, 33, -7, -1919, 24633, -186591, 715449, 3834369, -102211207]
(r,k) = (-4,-8) [1, -7, 33, -7, -1919, 24633, -186591, 715449, 3834369, -102211207]
(r,k) = (-3,-8) [1, -7, 33, -7, -1919, 24633, -186591, 715449, 3834369, -102211207]
(r,k) = (-2,-8) [1, -7, 33, -7, -1919, 24633, -186591, 715449, 3834369, -102211207]
(r,k) = (-1,-8) [1, -7, 33, -7, -1919, 24633, -186591, 715449, 3834369, -102211207]
(r,k) = (1,-8) [1, -7, 33, -7, -1919, 24633, -186591, 715449, 3834369, -102211207]
(r,k) = (2,-8) [1, -7, 33, -7, -1919, 24633, -186591, 715449, 3834369, -102211207]
(r,k) = (3,-8) [1, -7, 33, -7, -1919, 24633, -186591, 715449, 3834369, -102211207]
(r,k) = (4,-8) [1, -7, 33, -7, -1919, 24633, -186591, 715449, 3834369, -102211207]
(r,k) = (5,-8) [1, -7, 33, -7, -1919, 24633, -186591, 715449, 3834369, -102211207]
(r,k) = (-5,-7) [1, -6, 22, 36, -1434, 13644, -73604, 71688, 3315334, -41652036]
(r,k) = (-4,-7) [1, -6, 22, 36, -1434, 13644, -73604, 71688, 3315334, -41652036]
(r,k) = (-3,-7) [1, -6, 22, 36, -1434, 13644, -73604, 71688, 3315334, -41652036]
(r,k) = (-2,-7) [1, -6, 22, 36, -1434, 13644, -73604, 71688, 3315334, -41652036]
(r,k) = (-1,-7) [1, -6, 22, 36, -1434, 13644, -73604, 71688, 3315334, -41652036]
(r,k) = (1,-7) [1, -6, 22, 36, -1434, 13644, -73604, 71688, 3315334, -41652036]
(r,k) = (2,-7) [1, -6, 22, 36, -1434, 13644, -73604, 71688, 3315334, -41652036]
(r,k) = (3,-7) [1, -6, 22, 36, -1434, 13644, -73604, 71688, 3315334, -41652036]
(r,k) = (4,-7) [1, -6, 22, 36, -1434, 13644, -73604, 71688, 3315334, -41652036]
(r,k) = (5,-7) [1, -6, 22, 36, -1434, 13644, -73604, 71688, 3315334, -41652036]
(r,k) = (-5,-6) [1, -5, 13, 55, -959, 6475, -20195, -84425, 1657345, -11975525]
(r,k) = (-4,-6) [1, -5, 13, 55, -959, 6475, -20195, -84425, 1657345, -11975525]
(r,k) = (-3,-6) [1, -5, 13, 55, -959, 6475, -20195, -84425, 1657345, -11975525]
(r,k) = (-2,-6) [1, -5, 13, 55, -959, 6475, -20195, -84425, 1657345, -11975525]
(r,k) = (-1,-6) [1, -5, 13, 55, -959, 6475, -20195, -84425, 1657345, -11975525]
(r,k) = (1,-6) [1, -5, 13, 55, -959, 6475, -20195, -84425, 1657345, -11975525]
(r,k) = (2,-6) [1, -5, 13, 55, -959, 6475, -20195, -84425, 1657345, -11975525]
(r,k) = (3,-6) [1, -5, 13, 55, -959, 6475, -20195, -84425, 1657345, -11975525]
(r,k) = (4,-6) [1, -5, 13, 55, -959, 6475, -20195, -84425, 1657345, -11975525]
(r,k) = (5,-6) [1, -5, 13, 55, -959, 6475, -20195, -84425, 1657345, -11975525]
(r,k) = (-5,-5) [1, -4, 6, 56, -554, 2376, -804, -67344, 530406, -1852504]
(r,k) = (-4,-5) [1, -4, 6, 56, -554, 2376, -804, -67344, 530406, -1852504]
(r,k) = (-3,-5) [1, -4, 6, 56, -554, 2376, -804, -67344, 530406, -1852504]
(r,k) = (-2,-5) [1, -4, 6, 56, -554, 2376, -804, -67344, 530406, -1852504]
(r,k) = (-1,-5) [1, -4, 6, 56, -554, 2376, -804, -67344, 530406, -1852504]
(r,k) = (1,-5) [1, -4, 6, 56, -554, 2376, -804, -67344, 530406, -1852504]
(r,k) = (2,-5) [1, -4, 6, 56, -554, 2376, -804, -67344, 530406, -1852504]
(r,k) = (3,-5) [1, -4, 6, 56, -554, 2376, -804, -67344, 530406, -1852504]
(r,k) = (4,-5) [1, -4, 6, 56, -554, 2376, -804, -67344, 530406, -1852504]
(r,k) = (5,-5) [1, -4, 6, 56, -554, 2376, -804, -67344, 530406, -1852504]
(r,k) = (-5,-4) [1, -3, 1, 45, -255, 477, 2689, -25203, 82945, 90045]
(r,k) = (-4,-4) [1, -3, 1, 45, -255, 477, 2689, -25203, 82945, 90045]
(r,k) = (-3,-4) [1, -3, 1, 45, -255, 477, 2689, -25203, 82945, 90045]
(r,k) = (-2,-4) [1, -3, 1, 45, -255, 477, 2689, -25203, 82945, 90045]
(r,k) = (-1,-4) [1, -3, 1, 45, -255, 477, 2689, -25203, 82945, 90045]
(r,k) = (1,-4) [1, -3, 1, 45, -255, 477, 2689, -25203, 82945, 90045]
(r,k) = (2,-4) [1, -3, 1, 45, -255, 477, 2689, -25203, 82945, 90045]
(r,k) = (3,-4) [1, -3, 1, 45, -255, 477, 2689, -25203, 82945, 90045]
(r,k) = (4,-4) [1, -3, 1, 45, -255, 477, 2689, -25203, 82945, 90045]
(r,k) = (5,-4) [1, -3, 1, 45, -255, 477, 2689, -25203, 82945, 90045]
(r,k) = (-5,-3) [1, -2, -2, 28, -74, -92, 1324, -3656, -4826, 70228]
(r,k) = (-4,-3) [1, -2, -2, 28, -74, -92, 1324, -3656, -4826, 70228]
(r,k) = (-3,-3) [1, -2, -2, 28, -74, -92, 1324, -3656, -4826, 70228]
(r,k) = (-2,-3) [1, -2, -2, 28, -74, -92, 1324, -3656, -4826, 70228]
(r,k) = (-1,-3) [1, -2, -2, 28, -74, -92, 1324, -3656, -4826, 70228]
(r,k) = (1,-3) [1, -2, -2, 28, -74, -92, 1324, -3656, -4826, 70228]
(r,k) = (2,-3) [1, -2, -2, 28, -74, -92, 1324, -3656, -4826, 70228]
(r,k) = (3,-3) [1, -2, -2, 28, -74, -92, 1324, -3656, -4826, 70228]
(r,k) = (4,-3) [1, -2, -2, 28, -74, -92, 1324, -3656, -4826, 70228]
(r,k) = (5,-3) [1, -2, -2, 28, -74, -92, 1324, -3656, -4826, 70228]
(r,k) = (-5,-2) [1, -1, -3, 11, 1, -81, 141, 363, -1791, 479]
(r,k) = (-4,-2) [1, -1, -3, 11, 1, -81, 141, 363, -1791, 479]
(r,k) = (-3,-2) [1, -1, -3, 11, 1, -81, 141, 363, -1791, 479]
(r,k) = (-2,-2) [1, -1, -3, 11, 1, -81, 141, 363, -1791, 479]
(r,k) = (-1,-2) [1, -1, -3, 11, 1, -81, 141, 363, -1791, 479]
(r,k) = (1,-2) [1, -1, -3, 11, 1, -81, 141, 363, -1791, 479]
(r,k) = (2,-2) [1, -1, -3, 11, 1, -81, 141, 363, -1791, 479]
(r,k) = (3,-2) [1, -1, -3, 11, 1, -81, 141, 363, -1791, 479]
(r,k) = (4,-2) [1, -1, -3, 11, 1, -81, 141, 363, -1791, 479]
(r,k) = (5,-2) [1, -1, -3, 11, 1, -81, 141, 363, -1791, 479]
(r,k) = (-5,-1) [1, 0, -2, 0, 6, 0, -20, 0, 70, 0]
(r,k) = (-4,-1) [1, 0, -2, 0, 6, 0, -20, 0, 70, 0]
(r,k) = (-3,-1) [1, 0, -2, 0, 6, 0, -20, 0, 70, 0]
(r,k) = (-2,-1) [1, 0, -2, 0, 6, 0, -20, 0, 70, 0]
(r,k) = (-1,-1) [1, 0, -2, 0, 6, 0, -20, 0, 70, 0]
(r,k) = (1,-1) [1, 0, -2, 0, 6, 0, -20, 0, 70, 0]
(r,k) = (2,-1) [1, 0, -2, 0, 6, 0, -20, 0, 70, 0]
(r,k) = (3,-1) [1, 0, -2, 0, 6, 0, -20, 0, 70, 0]
(r,k) = (4,-1) [1, 0, -2, 0, 6, 0, -20, 0, 70, 0]
(r,k) = (5,-1) [1, 0, -2, 0, 6, 0, -20, 0, 70, 0]
(r,k) = (-5,0) [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
(r,k) = (-4,0) [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
(r,k) = (-3,0) [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
(r,k) = (-2,0) [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
(r,k) = (-1,0) [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
(r,k) = (1,0) [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
(r,k) = (2,0) [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
(r,k) = (3,0) [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
(r,k) = (4,0) [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
(r,k) = (5,0) [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
(r,k) = (-5,1) [1, 2, 6, 20, 70, 252, 924, 3432, 12870, 48620]
(r,k) = (-4,1) [1, 2, 6, 20, 70, 252, 924, 3432, 12870, 48620]
(r,k) = (-3,1) [1, 2, 6, 20, 70, 252, 924, 3432, 12870, 48620]
(r,k) = (-2,1) [1, 2, 6, 20, 70, 252, 924, 3432, 12870, 48620]
(r,k) = (-1,1) [1, 2, 6, 20, 70, 252, 924, 3432, 12870, 48620]
(r,k) = (1,1) [1, 2, 6, 20, 70, 252, 924, 3432, 12870, 48620]
(r,k) = (2,1) [1, 2, 6, 20, 70, 252, 924, 3432, 12870, 48620]
(r,k) = (3,1) [1, 2, 6, 20, 70, 252, 924, 3432, 12870, 48620]
(r,k) = (4,1) [1, 2, 6, 20, 70, 252, 924, 3432, 12870, 48620]
(r,k) = (5,1) [1, 2, 6, 20, 70, 252, 924, 3432, 12870, 48620]
(r,k) = (-5,2) [1, 3, 13, 63, 321, 1683, 8989, 48639, 265729, 1462563]
(r,k) = (-4,2) [1, 3, 13, 63, 321, 1683, 8989, 48639, 265729, 1462563]
(r,k) = (-3,2) [1, 3, 13, 63, 321, 1683, 8989, 48639, 265729, 1462563]
(r,k) = (-2,2) [1, 3, 13, 63, 321, 1683, 8989, 48639, 265729, 1462563]
(r,k) = (-1,2) [1, 3, 13, 63, 321, 1683, 8989, 48639, 265729, 1462563]
(r,k) = (1,2) [1, 3, 13, 63, 321, 1683, 8989, 48639, 265729, 1462563]
(r,k) = (2,2) [1, 3, 13, 63, 321, 1683, 8989, 48639, 265729, 1462563]
(r,k) = (3,2) [1, 3, 13, 63, 321, 1683, 8989, 48639, 265729, 1462563]
(r,k) = (4,2) [1, 3, 13, 63, 321, 1683, 8989, 48639, 265729, 1462563]
(r,k) = (5,2) [1, 3, 13, 63, 321, 1683, 8989, 48639, 265729, 1462563]
(r,k) = (-5,3) [1, 4, 22, 136, 886, 5944, 40636, 281488, 1968934, 13875544]
(r,k) = (-4,3) [1, 4, 22, 136, 886, 5944, 40636, 281488, 1968934, 13875544]
(r,k) = (-3,3) [1, 4, 22, 136, 886, 5944, 40636, 281488, 1968934, 13875544]
(r,k) = (-2,3) [1, 4, 22, 136, 886, 5944, 40636, 281488, 1968934, 13875544]
(r,k) = (-1,3) [1, 4, 22, 136, 886, 5944, 40636, 281488, 1968934, 13875544]
(r,k) = (1,3) [1, 4, 22, 136, 886, 5944, 40636, 281488, 1968934, 13875544]
(r,k) = (2,3) [1, 4, 22, 136, 886, 5944, 40636, 281488, 1968934, 13875544]
(r,k) = (3,3) [1, 4, 22, 136, 886, 5944, 40636, 281488, 1968934, 13875544]
(r,k) = (4,3) [1, 4, 22, 136, 886, 5944, 40636, 281488, 1968934, 13875544]
(r,k) = (5,3) [1, 4, 22, 136, 886, 5944, 40636, 281488, 1968934, 13875544]
(r,k) = (-5,4) [1, 5, 33, 245, 1921, 15525, 127905, 1067925, 9004545, 76499525]
(r,k) = (-4,4) [1, 5, 33, 245, 1921, 15525, 127905, 1067925, 9004545, 76499525]
(r,k) = (-3,4) [1, 5, 33, 245, 1921, 15525, 127905, 1067925, 9004545, 76499525]
(r,k) = (-2,4) [1, 5, 33, 245, 1921, 15525, 127905, 1067925, 9004545, 76499525]
(r,k) = (-1,4) [1, 5, 33, 245, 1921, 15525, 127905, 1067925, 9004545, 76499525]
(r,k) = (1,4) [1, 5, 33, 245, 1921, 15525, 127905, 1067925, 9004545, 76499525]
(r,k) = (2,4) [1, 5, 33, 245, 1921, 15525, 127905, 1067925, 9004545, 76499525]
(r,k) = (3,4) [1, 5, 33, 245, 1921, 15525, 127905, 1067925, 9004545, 76499525]
(r,k) = (4,4) [1, 5, 33, 245, 1921, 15525, 127905, 1067925, 9004545, 76499525]
(r,k) = (5,4) [1, 5, 33, 245, 1921, 15525, 127905, 1067925, 9004545, 76499525]
(r,k) = (-5,5) [1, 6, 46, 396, 3606, 33876, 324556, 3151896, 30915046, 305543556]
(r,k) = (-4,5) [1, 6, 46, 396, 3606, 33876, 324556, 3151896, 30915046, 305543556]
(r,k) = (-3,5) [1, 6, 46, 396, 3606, 33876, 324556, 3151896, 30915046, 305543556]
(r,k) = (-2,5) [1, 6, 46, 396, 3606, 33876, 324556, 3151896, 30915046, 305543556]
(r,k) = (-1,5) [1, 6, 46, 396, 3606, 33876, 324556, 3151896, 30915046, 305543556]
(r,k) = (1,5) [1, 6, 46, 396, 3606, 33876, 324556, 3151896, 30915046, 305543556]
(r,k) = (2,5) [1, 6, 46, 396, 3606, 33876, 324556, 3151896, 30915046, 305543556]
(r,k) = (3,5) [1, 6, 46, 396, 3606, 33876, 324556, 3151896, 30915046, 305543556]
(r,k) = (4,5) [1, 6, 46, 396, 3606, 33876, 324556, 3151896, 30915046, 305543556]
(r,k) = (5,5) [1, 6, 46, 396, 3606, 33876, 324556, 3151896, 30915046, 305543556]
(r,k) = (-5,6) [1, 7, 61, 595, 6145, 65527, 712909, 7863667, 87615745, 983726695]
(r,k) = (-4,6) [1, 7, 61, 595, 6145, 65527, 712909, 7863667, 87615745, 983726695]
(r,k) = (-3,6) [1, 7, 61, 595, 6145, 65527, 712909, 7863667, 87615745, 983726695]
(r,k) = (-2,6) [1, 7, 61, 595, 6145, 65527, 712909, 7863667, 87615745, 983726695]
(r,k) = (-1,6) [1, 7, 61, 595, 6145, 65527, 712909, 7863667, 87615745, 983726695]
(r,k) = (1,6) [1, 7, 61, 595, 6145, 65527, 712909, 7863667, 87615745, 983726695]
(r,k) = (2,6) [1, 7, 61, 595, 6145, 65527, 712909, 7863667, 87615745, 983726695]
(r,k) = (3,6) [1, 7, 61, 595, 6145, 65527, 712909, 7863667, 87615745, 983726695]
(r,k) = (4,6) [1, 7, 61, 595, 6145, 65527, 712909, 7863667, 87615745, 983726695]
(r,k) = (5,6) [1, 7, 61, 595, 6145, 65527, 712909, 7863667, 87615745, 983726695]
(r,k) = (-5,7) [1, 8, 78, 848, 9766, 116208, 1411404, 17383584, 216294534, 2712176048]
(r,k) = (-4,7) [1, 8, 78, 848, 9766, 116208, 1411404, 17383584, 216294534, 2712176048]
(r,k) = (-3,7) [1, 8, 78, 848, 9766, 116208, 1411404, 17383584, 216294534, 2712176048]
(r,k) = (-2,7) [1, 8, 78, 848, 9766, 116208, 1411404, 17383584, 216294534, 2712176048]
(r,k) = (-1,7) [1, 8, 78, 848, 9766, 116208, 1411404, 17383584, 216294534, 2712176048]
(r,k) = (1,7) [1, 8, 78, 848, 9766, 116208, 1411404, 17383584, 216294534, 2712176048]
(r,k) = (2,7) [1, 8, 78, 848, 9766, 116208, 1411404, 17383584, 216294534, 2712176048]
(r,k) = (3,7) [1, 8, 78, 848, 9766, 116208, 1411404, 17383584, 216294534, 2712176048]
(r,k) = (4,7) [1, 8, 78, 848, 9766, 116208, 1411404, 17383584, 216294534, 2712176048]
(r,k) = (5,7) [1, 8, 78, 848, 9766, 116208, 1411404, 17383584, 216294534, 2712176048]
(r,k) = (-5,8) [1, 9, 97, 1161, 14721, 192969, 2582881, 35066313, 481003009, 6649718409]
(r,k) = (-4,8) [1, 9, 97, 1161, 14721, 192969, 2582881, 35066313, 481003009, 6649718409]
(r,k) = (-3,8) [1, 9, 97, 1161, 14721, 192969, 2582881, 35066313, 481003009, 6649718409]
(r,k) = (-2,8) [1, 9, 97, 1161, 14721, 192969, 2582881, 35066313, 481003009, 6649718409]
(r,k) = (-1,8) [1, 9, 97, 1161, 14721, 192969, 2582881, 35066313, 481003009, 6649718409]
(r,k) = (1,8) [1, 9, 97, 1161, 14721, 192969, 2582881, 35066313, 481003009, 6649718409]
(r,k) = (2,8) [1, 9, 97, 1161, 14721, 192969, 2582881, 35066313, 481003009, 6649718409]
(r,k) = (3,8) [1, 9, 97, 1161, 14721, 192969, 2582881, 35066313, 481003009, 6649718409]
(r,k) = (4,8) [1, 9, 97, 1161, 14721, 192969, 2582881, 35066313, 481003009, 6649718409]
(r,k) = (5,8) [1, 9, 97, 1161, 14721, 192969, 2582881, 35066313, 481003009, 6649718409]
(r,k) = (-5,9) [1, 10, 118, 1540, 21286, 304300, 4443580, 65830600, 985483270, 14869654300]
(r,k) = (-4,9) [1, 10, 118, 1540, 21286, 304300, 4443580, 65830600, 985483270, 14869654300]
(r,k) = (-3,9) [1, 10, 118, 1540, 21286, 304300, 4443580, 65830600, 985483270, 14869654300]
(r,k) = (-2,9) [1, 10, 118, 1540, 21286, 304300, 4443580, 65830600, 985483270, 14869654300]
(r,k) = (-1,9) [1, 10, 118, 1540, 21286, 304300, 4443580, 65830600, 985483270, 14869654300]
(r,k) = (1,9) [1, 10, 118, 1540, 21286, 304300, 4443580, 65830600, 985483270, 14869654300]
(r,k) = (2,9) [1, 10, 118, 1540, 21286, 304300, 4443580, 65830600, 985483270, 14869654300]
(r,k) = (3,9) [1, 10, 118, 1540, 21286, 304300, 4443580, 65830600, 985483270, 14869654300]
(r,k) = (4,9) [1, 10, 118, 1540, 21286, 304300, 4443580, 65830600, 985483270, 14869654300]
(r,k) = (5,9) [1, 10, 118, 1540, 21286, 304300, 4443580, 65830600, 985483270, 14869654300]
(r,k) = (-5,10) [1, 11, 141, 1991, 29761, 460251, 7272861, 116619591, 1889815041, 30869546411]
(r,k) = (-4,10) [1, 11, 141, 1991, 29761, 460251, 7272861, 116619591, 1889815041, 30869546411]
(r,k) = (-3,10) [1, 11, 141, 1991, 29761, 460251, 7272861, 116619591, 1889815041, 30869546411]
(r,k) = (-2,10) [1, 11, 141, 1991, 29761, 460251, 7272861, 116619591, 1889815041, 30869546411]
(r,k) = (-1,10) [1, 11, 141, 1991, 29761, 460251, 7272861, 116619591, 1889815041, 30869546411]
(r,k) = (1,10) [1, 11, 141, 1991, 29761, 460251, 7272861, 116619591, 1889815041, 30869546411]
(r,k) = (2,10) [1, 11, 141, 1991, 29761, 460251, 7272861, 116619591, 1889815041, 30869546411]
(r,k) = (3,10) [1, 11, 141, 1991, 29761, 460251, 7272861, 116619591, 1889815041, 30869546411]
(r,k) = (4,10) [1, 11, 141, 1991, 29761, 460251, 7272861, 116619591, 1889815041, 30869546411]
(r,k) = (5,10) [1, 11, 141, 1991, 29761, 460251, 7272861, 116619591, 1889815041, 30869546411]
(00:00) gp >

2020年7月19日日曜日

200719

Python


棒倒し法で迷路生成

「棒を格子状に配置し、倒す」というシンプルなアルゴリズムなので、
簡単に実装できる。

import random

class Maze():
    """ 迷路を作るクラス"""
    # 壁は1、道は0
    PATH = 0
    WALL = 1

    def __init__(self, col, row):
        self.maze = []
        self.col = col
        self.row = row
        self.start_X = 1
        self.start_Y = 1
        self.goal_X = col - 2
        self.goal_Y = row - 2

        # 迷路は、幅および高さ5以上の奇数で生成する。
        if(self.row < 5 or self.col < 5):
            print('at least 5...')
            exit()
        if (self.col % 2) == 0:
            self.col += 1
            self.goal_X += 1
        if (self.row % 2) == 0:
            self.row += 1
            self.goal_Y += 1

    def set_maze(self):
        """ 迷路を作る。"""
        for x in range(0, self.col):
            row = []
            for y in range(0, self.row):
                if (x == 0 or y == 0 or x == self.col - 1 or y == self.row - 1):
                    cell = self.WALL
                else:
                    cell = self.PATH
                row.append(cell)
            self.maze.append(row)

        self.maze[self.start_X][self.start_Y] = 'S'
        self.maze[self.goal_X][self.goal_Y] = 'G'

        # 棒を倒す向き
        points = [[0, -1], [0, 1], [1, 0], [-1, 0]]

        # 一つおきに棒を配置
        for x in range(2, self.col - 1, 2):
            for y in range(2, self.row - 1, 2):
                self.maze[x][y] = self.WALL

                while True:
                    if x == 2:
                        r = points[random.randrange(0, 4)]
                    else:
                        r = points[random.randrange(0, 3)]

                    # 壁にする方向が壁でない場合は壁にする。
                    if self.maze[x + r[0]][y + r[1]] != self.WALL:
                        self.maze[x + r[0]][y + r[1]] = self.WALL
                        break

        return self.maze

    def show_maze(self):
        """ 迷路を出力する。"""
        for row in self.maze:
            for cell in row:
                if cell == self.PATH:
                    print('  ', end='')
                elif cell == self.WALL:
                    print('##', end='')
                elif cell == 'S':
                    print('S ', end='')
                elif cell == 'G':
                    print(' G', end='')
            print()


maze = Maze(10, 15)
maze.set_maze()
maze.show_maze()

2020年7月11日土曜日

200711

PARI


A336163 とA336179

A268545 のGheorghe Coserea さんのコード参考に
diagonal of the rational function 1 / (1 + y + z + x*y + y*z + k*z*x + (k+1)*x*y*z)
diagonal of the rational function 1 / ((1-x)*(1-y)*(1-z) - k*x*y*z)
が一致することを確認してみた。

(21:46) gp > N=10;
(21:46) gp > diag(n, expr, var=variables(expr)) = {
  my(a=vector(n));
  for(i=1, #var, expr=taylor(expr, var[#var-i+1], n));
  for(j=1, n, a[j]=expr;
    for(i=1, #var, a[j]=polcoeff(a[j], j-1)));
  return(a);
};
(21:46) gp > R_1(k) = 1/(1+y+z+x*y+y*z+k*z*x+(k+1)*x*y*z);
(21:46) gp > R_2(k) = 1/((1-x)*(1-y)*(1-z)-k*x*y*z);
(21:46) gp > for(k=-10, 10, v_1=diag(N, R_1(k)); v_2=diag(N, R_2(k)); if(v_1==v_2, print(v_1)))
[1, -9, 21, 1431, -33039, 248751, 5485341, -206302329, 2626974081, 17422114311]
[1, -8, 10, 1216, -23174, 111952, 4359664, -118557440, 1014582682, 17402599792]
[1, -7, 1, 1001, -15359, 30233, 3126529, -61392247, 259448833, 11970181433]
[1, -6, -6, 792, -9414, -11556, 2010576, -27431424, -20457702, 6451563924]
[1, -5, -11, 595, -5135, -26525, 1133245, -9654125, -75662975, 2718080875]
[1, -4, -14, 416, -2294, -25624, 533296, -1992064, -52440134, 824947256]
[1, -3, -15, 261, -639, -17523, 188049, 284085, -21320703, 137339037]
[1, -2, -14, 136, 106, -8492, 35344, 395008, -4547462, -4838372]
[1, -1, -11, 47, 241, -2281, -3779, 104831, -110207, -4415281]
[1, 0, -6, 0, 90, 0, -1680, 0, 34650, 0]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[1, 2, 10, 56, 346, 2252, 15184, 104960, 739162, 5280932]
[1, 3, 21, 171, 1521, 14283, 138909, 1385163, 14072193, 145039923]
[1, 4, 34, 352, 3946, 46744, 573616, 7217536, 92527738, 1203467464]
[1, 5, 49, 605, 8065, 113525, 1656145, 24774125, 377601025, 5839329125]
[1, 6, 66, 936, 14346, 231876, 3885456, 66767616, 1169068986, 20769386796]
[1, 7, 85, 1351, 23281, 422527, 7951069, 153458935, 3018043777, 60225528727]
[1, 8, 106, 1856, 35386, 709808, 14762224, 314931968, 6846486298, 151025959568]
[1, 9, 129, 2457, 51201, 1121769, 25477761, 593640441, 14095941633, 339631646409]
[1, 10, 154, 3160, 71290, 1690300, 41536720, 1047232000, 26908298650, 701590424500]
[1, 11, 181, 3971, 96241, 2451251, 64689661, 1751654531, 48341416321, 1353802736891]
(21:46) gp >