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 >

2020年6月27日土曜日

200627

JavaScript


Sum_{n = 1..24} n^2 = 70^2(3)

Sum_{n = 1..24} n^2 = 70^2
Sum_{n = 15..34} n^3 = 70^3
に関するHTMLを書いてみた。

<!DOCTYPE html>
<html>
  <head>
    <meta charset='utf-8'>
    <title>Sum_{n = 1..24} n^2 = 70^2</title>
  </head>
  <body>
    <script>
      function showSum(from, to, power){
        var sum = from ** power;
        var formula = from + '^' + power;
        for(var i=from + 1; i<=to + 1; i++){
          document.write('<p>' + formula + ' = ' + sum + '</p>');
sum += i ** power; formula += '+' + i + '^' + power;
} } showSum(1, 24, 2) showSum(15, 34, 3) </script> </body> </html>

2020年6月20日土曜日

200620

Ruby


1 / n の性質について(4)

n が99...9 の約数のとき、
1 / n の小数表示が面白い。

require 'bigdecimal'

def A(n)
  puts "1/#{n}"
  if n == 1
    print "= 0." + "9" * 50
  else
    print "= " + BigDecimal(1r / n, 50).to_s("F")[0..51]
  end
  puts "..."
end

def B(n)
  m = 10 ** n - 1
  (1..Math.sqrt(m)).each{|i|
    if m % i == 0
      A(i)
      A(m / i)
    end
  }
end

(1..7).each{|i| B(i)}

出力結果
1/1
= 0.99999999999999999999999999999999999999999999999999...
1/9
= 0.11111111111111111111111111111111111111111111111111...
1/3
= 0.33333333333333333333333333333333333333333333333333...
1/3
= 0.33333333333333333333333333333333333333333333333333...
1/1
= 0.99999999999999999999999999999999999999999999999999...
1/99
= 0.01010101010101010101010101010101010101010101010101...
1/3
= 0.33333333333333333333333333333333333333333333333333...
1/33
= 0.03030303030303030303030303030303030303030303030303...
1/9
= 0.11111111111111111111111111111111111111111111111111...
1/11
= 0.09090909090909090909090909090909090909090909090909...
1/1
= 0.99999999999999999999999999999999999999999999999999...
1/999
= 0.00100100100100100100100100100100100100100100100100...
1/3
= 0.33333333333333333333333333333333333333333333333333...
1/333
= 0.00300300300300300300300300300300300300300300300300...
1/9
= 0.11111111111111111111111111111111111111111111111111...
1/111
= 0.00900900900900900900900900900900900900900900900900...
1/27
= 0.03703703703703703703703703703703703703703703703703...
1/37
= 0.02702702702702702702702702702702702702702702702702...
1/1
= 0.99999999999999999999999999999999999999999999999999...
1/9999
= 0.00010001000100010001000100010001000100010001000100...
1/3
= 0.33333333333333333333333333333333333333333333333333...
1/3333
= 0.00030003000300030003000300030003000300030003000300...
1/9
= 0.11111111111111111111111111111111111111111111111111...
1/1111
= 0.00090009000900090009000900090009000900090009000900...
1/11
= 0.09090909090909090909090909090909090909090909090909...
1/909
= 0.00110011001100110011001100110011001100110011001100...
1/33
= 0.03030303030303030303030303030303030303030303030303...
1/303
= 0.00330033003300330033003300330033003300330033003300...
1/99
= 0.01010101010101010101010101010101010101010101010101...
1/101
= 0.00990099009900990099009900990099009900990099009900...
1/1
= 0.99999999999999999999999999999999999999999999999999...
1/99999
= 0.00001000010000100001000010000100001000010000100001...
1/3
= 0.33333333333333333333333333333333333333333333333333...
1/33333
= 0.00003000030000300003000030000300003000030000300003...
1/9
= 0.11111111111111111111111111111111111111111111111111...
1/11111
= 0.00009000090000900009000090000900009000090000900009...
1/41
= 0.02439024390243902439024390243902439024390243902439...
1/2439
= 0.00041000410004100041000410004100041000410004100041...
1/123
= 0.00813008130081300813008130081300813008130081300813...
1/813
= 0.00123001230012300123001230012300123001230012300123...
1/271
= 0.00369003690036900369003690036900369003690036900369...
1/369
= 0.00271002710027100271002710027100271002710027100271...
1/1
= 0.99999999999999999999999999999999999999999999999999...
1/999999
= 0.00000100000100000100000100000100000100000100000100...
1/3
= 0.33333333333333333333333333333333333333333333333333...
1/333333
= 0.00000300000300000300000300000300000300000300000300...
1/7
= 0.14285714285714285714285714285714285714285714285714...
1/142857
= 0.00000700000700000700000700000700000700000700000700...
1/9
= 0.11111111111111111111111111111111111111111111111111...
1/111111
= 0.00000900000900000900000900000900000900000900000900...
1/11
= 0.09090909090909090909090909090909090909090909090909...
1/90909
= 0.00001100001100001100001100001100001100001100001100...
1/13
= 0.07692307692307692307692307692307692307692307692307...
1/76923
= 0.00001300001300001300001300001300001300001300001300...
1/21
= 0.04761904761904761904761904761904761904761904761904...
1/47619
= 0.00002100002100002100002100002100002100002100002100...
1/27
= 0.03703703703703703703703703703703703703703703703703...
1/37037
= 0.00002700002700002700002700002700002700002700002700...
1/33
= 0.03030303030303030303030303030303030303030303030303...
1/30303
= 0.00003300003300003300003300003300003300003300003300...
1/37
= 0.02702702702702702702702702702702702702702702702702...
1/27027
= 0.00003700003700003700003700003700003700003700003700...
1/39
= 0.02564102564102564102564102564102564102564102564102...
1/25641
= 0.00003900003900003900003900003900003900003900003900...
1/63
= 0.01587301587301587301587301587301587301587301587301...
1/15873
= 0.00006300006300006300006300006300006300006300006300...
1/77
= 0.01298701298701298701298701298701298701298701298701...
1/12987
= 0.00007700007700007700007700007700007700007700007700...
1/91
= 0.01098901098901098901098901098901098901098901098901...
1/10989
= 0.00009100009100009100009100009100009100009100009100...
1/99
= 0.01010101010101010101010101010101010101010101010101...
1/10101
= 0.00009900009900009900009900009900009900009900009900...
1/111
= 0.00900900900900900900900900900900900900900900900900...
1/9009
= 0.00011100011100011100011100011100011100011100011100...
1/117
= 0.00854700854700854700854700854700854700854700854700...
1/8547
= 0.00011700011700011700011700011700011700011700011700...
1/143
= 0.00699300699300699300699300699300699300699300699300...
1/6993
= 0.00014300014300014300014300014300014300014300014300...
1/189
= 0.00529100529100529100529100529100529100529100529100...
1/5291
= 0.00018900018900018900018900018900018900018900018900...
1/231
= 0.00432900432900432900432900432900432900432900432900...
1/4329
= 0.00023100023100023100023100023100023100023100023100...
1/259
= 0.00386100386100386100386100386100386100386100386100...
1/3861
= 0.00025900025900025900025900025900025900025900025900...
1/273
= 0.00366300366300366300366300366300366300366300366300...
1/3663
= 0.00027300027300027300027300027300027300027300027300...
1/297
= 0.00336700336700336700336700336700336700336700336700...
1/3367
= 0.00029700029700029700029700029700029700029700029700...
1/333
= 0.00300300300300300300300300300300300300300300300300...
1/3003
= 0.00033300033300033300033300033300033300033300033300...
1/351
= 0.00284900284900284900284900284900284900284900284900...
1/2849
= 0.00035100035100035100035100035100035100035100035100...
1/407
= 0.00245700245700245700245700245700245700245700245700...
1/2457
= 0.00040700040700040700040700040700040700040700040700...
1/429
= 0.00233100233100233100233100233100233100233100233100...
1/2331
= 0.00042900042900042900042900042900042900042900042900...
1/481
= 0.00207900207900207900207900207900207900207900207900...
1/2079
= 0.00048100048100048100048100048100048100048100048100...
1/693
= 0.00144300144300144300144300144300144300144300144300...
1/1443
= 0.00069300069300069300069300069300069300069300069300...
1/777
= 0.00128700128700128700128700128700128700128700128700...
1/1287
= 0.00077700077700077700077700077700077700077700077700...
1/819
= 0.00122100122100122100122100122100122100122100122100...
1/1221
= 0.00081900081900081900081900081900081900081900081900...
1/999
= 0.00100100100100100100100100100100100100100100100100...
1/1001
= 0.00099900099900099900099900099900099900099900099900...
1/1
= 0.99999999999999999999999999999999999999999999999999...
1/9999999
= 0.00000010000001000000100000010000001000000100000010...
1/3
= 0.33333333333333333333333333333333333333333333333333...
1/3333333
= 0.00000030000003000000300000030000003000000300000030...
1/9
= 0.11111111111111111111111111111111111111111111111111...
1/1111111
= 0.00000090000009000000900000090000009000000900000090...
1/239
= 0.00418410041841004184100418410041841004184100418410...
1/41841
= 0.00002390000239000023900002390000239000023900002390...
1/717
= 0.00139470013947001394700139470013947001394700139470...
1/13947
= 0.00007170000717000071700007170000717000071700007170...
1/2151
= 0.00046490004649000464900046490004649000464900046490...
1/4649
= 0.00021510002151000215100021510002151000215100021510...

2020年5月24日日曜日

200524

GitHub


芝生への反映

プライベートリポジトリへの貢献を外部に見えるようにするには、
Contribution settings で設定を変えておきましょう。

2020年5月10日日曜日

200510

PARI


百五減算

塵劫記にある問題を解いてみた。

(00:11) gp > f(x, y, z) = chinese(chinese(Mod(x, 3), Mod(y, 5)), Mod(z, 7));
(00:12) gp > f(2, 1, 2)
%2 = Mod(86, 105)
(00:12) gp >

2020年5月2日土曜日

200502(2)

PARI


A330905とA330906(2)

B_n をベルヌーイ数とし、
b(n) = (1-2^(n-1)) * B_n / n! とおく。
以下の式が成り立つ。
Sum_{k>0} (-1)^(k+1) / (k^(4*n+3) * sinh(Pi * k))
= Pi^(4*n+3) * Sum_{k=0..2*n+2} (-1)^k * b(2*k) * b(4*n+4-2*k).

この式を確かめたいので、以下のように変形しておく。
Pi^(4*n+3) / Sum_{k>0} (-1)^(k+1) / (k^(4*n+3) * sinh(Pi * k))
= 1 / Sum_{k=0..2*n+2} (-1)^k * b(2*k) * b(4*n+4-2*k).

PARI で以下を計算してみた。
・左辺の近似
・右辺の小数点表示
・右辺

(20:07) gp > a(n) = Pi^(4*n+3)/sum(k=1, 1e3, (-1)^(k+1)/(k^(4*n+3)*sinh(Pi*k)));
(20:07) gp > b(n) = (1-2^(n-1))*bernfrac(n)/n!;
(20:07) gp > c(n) = 1./sum(k=0, 2*n+2, (-1)^k*b(2*k)*b(4*n+4-2*k));
(20:07) gp > for(n=0, 15, print(n, " ", a(n), ", ", c(n)))
0 360.00000000000000000000000000000000000, 360.00000000000000000000000000000000000
1 34892.307692307692307692307692307692307, 34892.307692307692307692307692307692308
2 3397757.0466450486405587428286355699675, 3397757.0466450486405587428286355699676
3 330965893.87873935512046000436713006769, 330965893.87873935512046000436713006769
4 32239047105.289252291789907094360794212, 32239047105.289252291789907094360794212
5 3140376032121.1543878520200862031670201, 3140376032121.1543878520200862031670202
6 305901173319289.18736149200209787146546, 305901173319289.18736149200209787146547
7 29797555230289305.236886951798435957311, 29797555230289305.236886951798435957311
8 2902552769963310768.7081963347143234222, 2902552769963310768.7081963347143234222
9 282735027000019326514.75198821663551665, 282735027000019326514.75198821663551666
10 27540961983543993800640.575424040179925, 27540961983543993800640.575424040179926
11 2682740073019024892772930.4983112005454, 2682740073019024892772930.4983112005455
12 261323271993276466380937060.90503864062, 261323271993276466380937060.90503864063
13 25455262390896446399109395243.853963842, 25455262390896446399109395243.853963843
14 2479573971529250477868053848163.8705205, 2479573971529250477868053848163.8705206
15 241533046718235727283534125686156.70937, 241533046718235727283534125686156.70938
(20:07) gp > d(n) = 1/sum(k=0, 2*n+2, (-1)^k*b(2*k)*b(4*n+4-2*k));
(20:07) gp > for(n=0, 15, print(n, " ", d(n)))
0 360
1 453600/13
2 13621608000/4009
3 4547140416000/13739
4 844351508246400000/26190337
5 2481187700290640140800000/790092547807
6 4625642784113264833920000000/15121363327643
7 72771380848009396571232614400000000/2442193001593535677
8 121040492221732333298138065066291200000000/41701392468830919939353
9 4859044199288026228257452368062289920000000000/17185858614142258665062467
10 470948281883394078095168798417333263626240000000000/17099921279612182344285033157
11 75909503357294871843169209382788539223253261516800000000000/28295511786898541163838004665601843
12 190237458979356401675743287858178427370130402222080000000000000/727977487532189566289706245511979571
13 577353186156120578296926710267088574653027718747008368640000000000000/22681093492188834346091000609641534617709
14 293380052164647034026484708090366002657453465071092270541520150528000000000000000/118318733594266620784339626611081721895773642441001
15 142060424380033042937835408541691071880198126207611096803753229811712000000000000000/588161439232602912110323381690338959839367310791017
(20:07) gp >

200502

PARI


A330905とA330906(1)

B_n をベルヌーイ数とし、
b(n) = B_n / n! とおく。
Ramanujan は以下の式を証明している。
Sum_{k>0} 1 / (k^(4*n+3) * tanh(Pi * k))
= 1/2 * (2*Pi)^(4*n+3) * Sum_{k=0..2*n+2} (-1)^(k+1) * b(2*k) * b(4*n+4-2*k).

この式を確かめたいので、以下のように変形しておく。
(2*Pi)^(4*n+3) / (2 * Sum_{k>0} 1 / (k^(4*n+3) * tanh(Pi * k)))
= 1 / Sum_{k=0..2*n+2} (-1)^(k+1) * b(2*k) * b(4*n+4-2*k).

PARI で以下を計算してみた。
・左辺の近似
・右辺の小数点表示
・右辺

(20:01) gp > a(n) = (2*Pi)^(4*n+3)/(2*sum(k=1, 1e5, 1/(k^(4*n+3)*tanh(Pi*k))));
(20:01) gp > b(n) = bernfrac(n)/n!;
(20:01) gp > c(n) = 1./sum(k=0, 2*n+2, (-1)^(k+1)*b(2*k)*b(4*n+4-2*k));
(20:01) gp > for(n=0, 15, print(n, " ", a(n), ", ", c(n)))
0 102.85714286140791537238401578455415888, 102.85714285714285714285714285714285714
1 190989.47368421052631578947368424203205, 190989.47368421052631578947368421052632
2 299994119.75223675154852030282174811046, 299994119.75223675154852030282174810736
3 467770417602.68868269160517279170015397, 467770417602.68868269160517279170015343
4 729062290145074.01339579741266079413018, 729062290145074.01339579741266079412994
5 1136278745069845523.6788794377714389477, 1136278745069845523.6788794377714389475
6 1770942272696454712718.5728260712558869, 1770942272696454712718.5728260712558868
7 2760094052120487610477090.9028015566731, 2760094052120487610477090.9028015566730
8 4301732046437584164240285656.1584123002, 4301732046437584164240285656.1584123001
9 6704444936427436938855870102292.5590515, 6704444936427436938855870102292.5590516
10 10449182194336422920902110427614039.942, 10449182194336422920902110427614039.942
11 1.6285525433585632742121198283458288818 E37, 1.6285525433585632742121198283458288818 E37
12 2.5381731671947447046974678469684691899 E40, 2.5381731671947447046974678469684691900 E40
13 3.9558582576533644484189622424332846786 E43, 3.9558582576533644484189622424332846787 E43
14 6.1653849141978696979807423115405833693 E46, 6.1653849141978696979807423115405833693 E46
15 9.6090326458682495355731770685878697235 E49, 9.6090326458682495355731770685878697236 E49
(20:01) gp > d(n) = 1/sum(k=0, 2*n+2, (-1)^(k+1)*b(2*k)*b(4*n+4-2*k));
(20:01) gp > for(n=0, 15, print(n, " ", d(n)))
0 720/7
1 3628800/19
2 435891456000/1453
3 6402373705728000/13687
4 5620003638888038400000/7708537
5 5081472410195231008358400000/4472029801
6 265252859812191058636308480000000/149780635937
7 30999443899158434788999954012569600000000/11231299844779783
8 15865019396486900390053552464368920166400000000/3688053840923281541
9 17832769956094244866124502310026493003038720000000000/2659842854283579394387
10 12839451706228207549650712667200594750243854090240000000000/1228751826452728351300837
11 1099884206876507435068099593496415004208493256012044697600000000000/67537532722660373286810600661
12 6383309881175603783793414201893673685057979412493432258560000000000000/251492292317888012003479295207
13 1007383427692662245069774961649317721640940993506204110466014248960000000000000/25465609788816025420512226447159951
14 8289853482539033016625993546659398645289550810014602743251403004228665344000000000000000/134458003805226512911690964066005527717583
15 2135507068688430481860783942510767721912226637217595584705835882334863472197632000000000000000/22223954766213317384532039590736747648635617
(20:01) gp >