Ᏹ㒔ᐑᏛᩍ⫱Ꮫ㒊 ᩍ⫱ᐇ㊶⥲ྜࢭࣥࢱ࣮⣖せ ➨ ྕ ᖺ ᭶ ᪥
㻝㻡 䝟䝈䝹䛸 㻹㼍㼠㼔㼑㼙㼍㼠㼕㼏㼍
䈂 బ⸨ ⚞ᏹ ࣭㛗⦖ ┤ᓫ Ᏹ㒔ᐑᏛᩍ⫱Ꮫ㒊 ྡྂᒇᏛ⌮Ꮫ◊✲⛉ ᴫせ ࣃࢬࣝࡢᡂྍ⬟ᛶࡢุᐃ࠾ࡼࡧゎࢆồࡵࡿᡭ⥆ࡁࢆᩘᘧฎ⌮ࢯࣇࢺ 0DWKHPDWLFD ࢆ⏝࠸࡚グ㏙ࡋࡓࠋ ࣃࢬࣝࢆ⨨⩌ࡋ࡚ゎ㔘ࡋࣉࣟࢢ࣒ࣛࡢືసࢆ♧ࡍࡇࡣࠊᏛ⏕ࡗ࡚㔞ᏊຊᏛ࠾ࡅࡿ⩌ㄽࡢ┤ឤⓗ ⌮ゎ࠸ᙺ❧ࡘࡶࡢ⪃࠼ࡿࠋ ࣮࣮࢟࣡ࢻ ᩘ⌮ࣔࢹࣝࠊᩍᮦ㛤Ⓨࠊሗฎ⌮ᩍ⫱ࠊ ࣃࢬࣝࠊ⨨ࠊᩘᘧฎ⌮ 㸯㸬ࡣࡌࡵ ࣃࢬࣝࡣࡽ ࡢ␒ྕࡢ࠸ࡓ ಶࡢࢱ ࣝࢆ[ࡢ᱁Ꮚᩜࡁワࡵࡓࡶࡢ࡛ ಶࡢ࣐ ࢫ┠ࡀ✵࠸࡚࠸ࡿࠋ✵࠸ࡓ࣐ࢫ┠ࣈࣛࣥࢡࢆ⏝ ࡋ࡚ࢱࣝࢆࢫࣛࢻࡉࡏࠊ௵ពࡢ㓄⨨ࡽฟⓎࡋ ࡚ᅗ D♧ࡍᡂᙧࡢ㓄⨨ᥞ࠼ࡿࢤ࣮࣒࡛࠶ࡿࠋ ᅗ Eࡣ ࢆࡋࡓࠕ ࣃࢬࣝࠖ ࡤࢀࠊᅗ Dࡢ㓄⨨┤ࡍࡇࡀ࡛ࡁ࡞࠸ࠋṔྐⓗ ࡣࢧ࣒࣭ࣟࢻࡀࡇࡢࠕྍ⬟ࣃࢬࣝࠖ ࡢ≉チࢆ⏦ㄳࡋࡓࡇ࡛᭷ྡ࡞ࡗࡓࠋ ࣃࢬࣝ㛵ࡋ࡚ᩘᏛㄽᩥࡀⓎ⾲ࡉࢀ࡚࠸ࡿࠋ>@ ᩘᏛⓗゎㄝࡣḟヲࡋ࠸ࠋ ࠕ⩌ㄽࡢࢃ࠸ࠖ>@ ࠕ:ROIUDP0DWK:RUOG3X]]OHࠖ>@ ๓⪅ࡣᩘᏛࡢᢳ㇟ᴫᛕࡢ⌮ゎࢆຓࡅࡿࡓࡵࠊィ ⟬ᶵ௦ᩘࢯࣇࢺ࢙࢘6$*(ࢆ⏝࠸ࡓᩍᮦࡀྲྀࡾධ ࢀࡽࢀ࡚࠸ࡿࠋᚋ⪅ࡣ࢙࢘ࣈࡢᩘᏛ㎡࡛࠶ࡾࠊᩘ ᘧฎ⌮ࢯࣇࢺ࢙࢘0DWKHPDWLFDࡢ㢟ࡀ♧ࡉࢀ ࡚࠸ࡿࠋࡇࢀࡽ࡞ࡽࡗ࡚⨨ࡸ⨨⩌ࡢ⌮ゎࢆ῝ ࡵࡿࡓࡵ0DWKHPDWLFDࢆࡗ࡚ᐇ㦂ࢆ⾜ࡗࡓࠋ ࣃࢬࣝ⨨ࢆ 0DWKHPDWLFD ࢆࡗ࡚⾲⌧ࡋࡓᚋࠊ ࣃࢬࣝࡢᡂྍ⬟ᛶࡢุᐃ᪉ἲࣃࢬࣝࢆゎࡃࣉࣟ ࢢ࣒ࣛࡘ࠸࡚㏙ࡿࠋ௨ୗ࡛ࡣ 0DWKHPDWLFDࡢ㛵 ᩘࢆ᫂☜ࡍࡿࡓࡵᮏᩥ␗࡞ࡿᏐయࢆ࠺ࡇ ࡍࡿࠋ͊Yoshihiro Sato㸨, Naotaka Naganawa 㸨㸨: 15 Puzzle and Mathematica
Faculty of Education, Utsunomiya University Graduate School of Science, Nagoya University
ᅗ Dᡂᙧࡢ㓄⨨ ᅗ Eࠕ ࣃࢬࣝࠖ 㸰㸬0DWKHPDWLFDࡼࡿ ࣃࢬࣝࡢ㓄⨨ࡢ⾲⌧ 0DWKHPDWLFDࡣᩘᘧฎ⌮ࡀ࡛ࡁࡿࣥࢱ࣮ࣉࣜࢱ ᆺࡢࢯࣇࢺ࢙࡛࢘࠶ࡿࠋ⡆༢࡞ὀពⅬࢆ♧ࡍࠋ ࣭⤌ࡳ㎸ࡳ㛵ᩘࡢ㛵ᩘྡࡣᩥᏐ࡛ࡣࡌࡲࡾᘬᩘࢆ ♧ࡍࡓࡵゅᣓᘼࢆ⏝ࡍࡿࠋ ࣭࣮ࣘࢨ࣮ࡀᐃ⩏ࡍࡿ㛵ᩘྡࡣ⤌ࡳ㎸ࡳ㛵ᩘ༊ู ࡍࡿࡓࡵᑠᩥᏐ࡛ࡣࡌࡵࡿࠋ ࣭ࢹ࣮ࢱࡣࣜࢫࢺ࡛⾲⌧ࡉࢀࡿࠋせ⣲ࡢ㞟ࡲࡾࢆἼ ᣓᘼ࡛ᣓࡗ࡚ࣜࢫࢺࡍࡿࠋ ࣭࣋ࢡࢺࣝࢆࣜࢫࢺ࡛ࠊ⾜ิࢆࣜࢫࢺࡢࣜࢫࢺ࡛⾲ ⌧ࡍࡿࠋ 0DWKHPDWLFD ࡛ࡣ ࣃࢬࣝࡢ㓄⨨ࢆ⾜ิ࡛⾲ࡍࡇ ࡀ࡛ࡁࡿࠋᅗ Dࡢᡂᙧࡢ㓄⨨ࡣ௨ୗ࡞ࡿࠋ ⤌ࡳ㎸ࡳ㛵ᩘ Rangeࢆࡗ࡚ࣜࢫࢺࢆసࡿࠋ list0 = Range[16] э{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16} ࣜࢫࢺࡢせ⣲ࢆ ಶࡎࡘࡲࡵ࡚⾜ิࢆ⾲⌧ࡍࡿࠋ m0 = Partition[list0,4] э{{1,2,3,4},{5,6,7,8},{9,10,11,12}, {13,14,15,16}} 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 15 14 宇都宮大学教育学部 教育実践総合センター紀要 第35号 2012年 7 月 1 日 † Yoshihiro Sato*, Naotaka Naganawa**: 15 Puzzle and Mathematica * Faculty of Education, Utsunomiya University ** Graduate School of Science, Nagoya University
15 パズルと Mathematica
†
佐藤 禎宏
*・長縄 直崇
**宇都宮大学教育学部
*名古屋大学理学研究科
**ࢆ✵ⓑ࡛⨨ࡁ࠼࡚ࣃࢬࣝࡢ㓄⨨ࢆ⾲⌧ࡍࡿࠋ MatrixForm[ mat0 = m0 /. {16 -> " "} ] 㸱㸬 ࣃࢬࣝ⨨ ✵࠸ࡓ࣐ࢫ┠⾲グୖ ␒ྕࢆࡅࡿࡇ ࡼࡾࠊ ࣃࢬࣝࡢ㓄⨨ࢆ㞟ྜ^`ࡢ ⨨࡛⾲⌧ࡍࡿࡇࡀ࡛ࡁࡿࠋ0DWKHPDWLFD ࡣ⨨ࢆ⾲⌧ࡍࡿ⾲グࡋ࡚ࠕ⨨ࡢࣜࢫࢺࠖ⾲ グࠕᕠᅇ⨨ࠖ⾲グࡀ࠶ࡿࠋᅗ ࡢ㓄⨨ࢆ⾜ิ ࡛⾲⌧ࡋࡑࡢᵓ㐀ࢆᾘࡋ࡚సࡗࡓࣜࢫࢺࡣࠕ⨨ ࡢࣜࢫࢺࠖ࡞ࡗ࡚࠸ࡿࠋ ᅗ 㓄⨨ࡢ 㻌 ᅗ 㻞㻌 䛾㓄⨨䜢⾜ิ䛷⾲⌧䛧䝸䝇䝖䜢స䜛䚹㻌 MatrixForm[ m2 = {{1,2,3,4},{5,6,7,8},{9,10,11,16}, {13,14,15,12}}]㻌 㻌 㻌 㻌 list2 = Flatten[m2] э{1,2,3,4,5,6,7,8,9,10,11,16,13,14,15,12} 㻌 㛵ᩘ㻌PermutationCycles㻌 䜢䛖䛣䛸䛻䜘䜚䛂⨨ 䛾䝸䝇䝖䛃䛛䜙䛂ᕠᅇ⨨䛃䜢ồ䜑䜛䛣䛸䛜䛷䛝䜛䚹⤖ᯝ 䛿 㻝㻞㻌 䛸 㻝㻢㻌 䛸䛾ᕠᅇ⨨䛻䛺䜛䚹ᕠᅇ⨨䛾⾲グ䛻 䛿㻌Cycles㻌 䛜᫂♧䛥䜜䜛䚹㻌 cycles = PermutationCycles[list2] эCycles[{{12,16}}] 㻌 䛂⨨䛾䝸䝇䝖䛃䛻ᑐ䛧䛶⨨䛾₇⟬䜢⾜䛖㛵ᩘ䛿 PermutationReplace䛷䛒䜛䚹㻌 ồ䜑䛯cycles䜢ᡂ ᙧ䛾䛂⨨䛾䝸䝇䝖䛃䛻₇⟬䛥䛫䛯⤖ᯝ䛿 list2䛻䛺 䜛䛣䛸䜢☜ㄆ䛩䜛䚹ᅗ 㻞㻌 䛾㓄⨨䛿௨ୗ䛷䛒䜛䚹㻌 PermutationReplace[Range[16],cycles] 㻌 㻌 㻌 㻌 㻌 䋻{1,2,3,4,5,6,7,8,9,10,11,16,13,14,15,12}㻌 list2 == PermutationReplace[Range[16], 㻌 㻌 㻌 㻌 㻌 㻌 㻌 㻌cycles] эTrue 㻌 㻌 ㄽ⌮ⓗ䛻┿䛺䛾䛷➼䛧䛔䚹㻌 㻌 㸲㸬ᡂྍ⬟ᛶࡢุᐃ᪉ἲ 㻌 㻭㻚㻲㻚㻭㼞㼏㼔㼑㼞㻌 ࡢㄽᩥ㼇㻝㼉㻌 ᭩࠸࡚࠶ࡿุᐃἲࡘ࠸ ࡚㏙ࡿࠋ㓄⨨ࢆ௨ୗ㏙ࡿࠕ㓄ࠖ㻌㻔㻯㼛㼚㼒㼕㼓㼡㼞㼍㼠㼕㼛㼚㻕 ኚࡍࡿࡇࡼࡾࠊࣈࣛࣥࢡࢆືࡍࡇࡣ㓄 ࡢ⨨ᑐᛂࡍࡿࠋࡇࡢ⨨ࢆ⏕ᡂඖࡍࡿ⨨ ⩌ࡣ 㻝㻡 ḟࡢ௦⩌㻌 㻭㻝㻡㻌 ࡞ࡿࠋᚑࡗ࡚ᡂ㓄⨨ࡢ 㓄ࡽ㛤ጞࡢ㓄ࡢ⨨ࡀഅ⨨࡞ࡽࡤᡂྍ ⬟ุᐃ࡛ࡁࡿࠋ㻌 㻌 ᅗ 㻟㻌 ◚⥺ᩘᏐࡣࢭࣝࡢ㡰ᗎࢆ♧ࡍࠋࡇࢀ࡛ࠕ㓄ࠖ ࢆᐃ⩏ࡍࡿࠋ㻌 㻌 㻔㻝㻕㻌 㓄㻌 㻔㻯㼛㼚㼒㼕㼓㼡㼞㼍㼠㼕㼛㼚㻕㻌 㻌 㻠㻌㼤㻌㻠㻌 ࡢࡦࡘࡢ࣐ࢫ┠ࢆࢭࣝࡧࠊᅗ 㻟 ♧ࡍ ࡼ࠺ࢭࣝ⺬≧ࡢ㡰ᗎ࡛␒ྕࢆࡘࡅࡿࠋࢭࣝࡢ␒ ྕ㡰୪ࢇࡔ㐨➽ࣈࣛࣥࢡࢆືࡍሙྜࡣࠊࢱ ࣝࡢࢭࣝࡢ␒ྕࡢ㡰ᗎࡣኚࢃࡽ࡞࠸ࠋᚑࡗ࡚⺬≧ ࡢ㡰ᗎࣈࣛࣥࢡࢆ⛣ືࡋࡓࡁᚓࡽࢀࡿ㓄⨨ࡣ ྠ್㛵ಀ࠶ࡿࠋࡇࡢྠ್㢮ࢆࠕ㓄ࠖࡧࠊ㻝㻢 ✀㢮ࡢ㓄⨨ࢆྵࢇ࡛࠸ࡿࠋ㻌 㻌 㻌 ࣈࣛࣥࢡࡢ⨨㛵㐃ࡋࠊ௨ୗࡢࡘࡢつ๎ᚑ ࡗ࡚ࢭࣝ␒ྕࡽࠕࢫࣟࢵࢺ␒ྕࠖࢆᐃ⩏ࡍࡿࠋ㻔㻝㸧 ࢱࣝࡢࢭࣝ␒ྕࡀࣈࣛࣥࢡࡢࢭࣝ␒ྕࡼࡾᑠࡉ࠸ ሙྜࡣࠊࡑࡢࢭࣝ␒ྕࢆࢫࣟࢵࢺ␒ྕࡍࡿࠋ㻔㻞㻕 ࡑࡢࡢሙྜࡣࢭࣝ␒ྕࡽ㸯ࢆᘬ࠸ࡓࡶࡢࢆࢫ ࣟࢵࢺ␒ྕࡍࡿࠋ㻌 ␒ྕ㻌 㼕㻌 ࡢࢱࣝࡢࢫࣟࢵࢺ␒ ྕࢆ㻌 㼍㻌㼕㻌 ࡋ࡚㓄ࢆ㻌 㼇㼍㻌㻝㻘㻌㻚㻚㻚㻌㻘㻌㼍㻝㻡㼉㻌 ⾲グࡍࡿࠋ㻌 㻌 ࣈࣛࣥࢡࢆືࡍࡇࡣࢱࣝࡢࢫࣟࢵࢺ␒ྕࢆ ኚࡉࡏࡿࡇᑐᛂࡍࡿࠋࡓ࠼ࡤᅗ 㻠㼎 ࡢሙྜࠊ ࢭࣝ 㻝㻜 ࠶ࡿࣈࣛࣥࢡࢆࢭࣝ 㻝㻡 ⛣ືࡍࡿࠊࢭ ࣝ 㻝㻡㻌㻔ࢫࣟࢵࢺ 㻝㻠㻕࠶ࡗࡓࢱࣝࡣࢭࣝ 㻝㻜㻔ࢫࣟࢵ ࢺ 㻝㻜㻕ࡢ⨨࡞ࡿࠋࡲࡓࠊ㻝㻝 ␒ࡽ 㻝㻠 ␒ࡢࢭࣝ ࠶ࡗࡓࢱࣝࡢࢫࣟࢵࢺ␒ྕࡣࡑࢀࡒࢀ㸯ࡔࡅቑ࠼ 1 2 3 4 5 6 7 8 9 10 11 13 14 15 12 1 2 3 4 8 7 6 5 9 10 11 12 16 15 14 13
ࡿࠋࡋࡓࡀࡗ࡚ࢭࣝ 㻝㻜 ࠶ࡿࣈࣛࣥࢡࢆࢭࣝ 㻝㻡 ⛣ືࡍࡿࡇࡣ㓄ࡢ⨨㻌ı= (10,11,12,13,14) 㻌 ᑐᛂࡍࡿࠋ㻌 㻌 㻌 㻌 㻌 㻌 㻌 㻌 㻌 㻌 㻌 ᅗ 㻠㼍 㻌 㻌 㻌 㻌 㻌 㻌 㻌 㻌 ᅗ 㻠㼎㻌 ᅗ 㻠㼍㻌 ࡣᡂᙧࡢ㓄⨨࡛࠶ࡾࠊ㓄ࡣ㻌 㻵㻌㻩㻌㼇㻝㻘㻞㻘㻟㻘㻠㻘㻤㻘㻣㻘㻢㻘㻡㻘㻥㻘㻝㻜㻘㻝㻝㻘㻝㻞㻘㻝㻡㻘㻝㻠㻘㻝㻟㼉㻌 ࡞ࡿࠋ㻌 ᅗ 㻠㼎㻌 ࡢ㓄ࡣ㻌 㻌 㻯㻌㻩㻌㼇㻝㻘㻞㻘㻟㻘㻠㻘㻤㻘㻣㻘㻢㻘㻡㻘㻝㻠㻘㻝㻞㻘㻌㻝㻟㻘㻝㻜㻘㻝㻡㻘㻝㻝㻘㻥㼉㻌 ࡛࠶ࡿࠋ㻌 㻌 ᅗ 㻠 ࡢ㓄⨨ࡘ࠸࡚☜ㄆࢆ⾜࠺ࠋ⾜ิࡢ⨨ࢭࣝ ␒ྕࡢᑐᛂつ๎ࢆ⏝࠸࡚㓄⨨ࡽ㓄ኚࡍࡿ㛵 ᩘ㻌pl2Cf㻌 ࢆసࡿࠋ㻔㻌㻭㼜㼜㼑㼚㼐㼕㼤㻌㻝㻔㻝㻕㻌㻕㻌 㻌 ࡇࢀࢆࡗ࡚ ᅗ 㻠㼍㻌 ࡢ㓄ࢆồࡵࡿࠋ㻌 (placement0 = Partition[Range[16], 4] /. {16 -> " "}) // MatrixForm 㻌 initialCf = pl2Cf[placement0] э{1,2,3,4,8,7,6,5,9,10,11,12,15,14,13} 㻌 ᅗ 㻠㹠㻌 ࡢ㓄ࢆồࡵࡿࠋ㻌 (placement1={{1,2,3,4},{5,6,7,8}, {15," ",12,14},{13,9,11,10}}) // MatrixForm 㻌 startCf = pl2Cf[placement1] э{1,2,3,4,8,7,6,5,14,12,13,10,15,11,9} 㻌 㻔㻞㻕㻌 㓄ࡢ⨨അወᛶ㻌 ⨨ࢆồࡵࡿ㛵ᩘfindPermutationReplaceࢆᐃ ⩏ࡋࠊồࡵࡓᕠᅇ⨨ࡢഅወࢆุᐃࡍࡿ㛵ᩘ㻌 permutationSignatureࢆ 㻭㼜㼜㼑㼚㼐㼕㼤㻌 㻝㻔㻞㻕㻌 ♧ࡍࠋ ࡇ ࢀ ࢆ ࡗ ࡚ ᡂྍ ⬟ ᛶࢆ ㄪ ࡿ ࠋ ඛ ồ ࡵ ࡓ initialCfstartCfࡢ㓄ࢆࡗ࡚ᕠᅇ⨨ࢆồ ࡵࡿࠋ㻌 cycles1 = findPermutationReplace[initialCf, startCf] эCycles[{{9,14,11,13},{10,12}}] ᕠᅇ⨨ࡢഅወࢆㄪࡿࠋ㻌 permutationSignature[cycles1] э㻝㻌 അወᛶࢆㄪࡓ⤖ᯝࡣ 㻝 ࡞ࡢ࡛അ⨨࡛࠶ࡿࠋࡋࡓ ࡀࡗ࡚ࠊᡂྍ⬟࡛࠶ࡿࠋ㻌 㻌 ࠕ㻝㻠㻙㻝㻡 ࣃࢬࣝࠖࡢ㓄⨨㻔ᅗ 㻝㼎㻕㻌 ࡘ࠸࡚ㄪࡿࠋࡇ ࢀࡣᡂ㓄⨨ࡢ 㻝㻠㻌 㻝㻡㻌 ࢆ⨨ࡋࡓ㓄⨨࡛࠶ࡿࠋ㻌 placement2 = {{1,2,3,4},{5,6,7,8}, {9,10,11,12},{13,15,14," "}};㻌 startCf2 = pl2Cf[placement2] э{1,2,3,4,8,7,6,5,9,10,11,12,15,13,14} cycles2 = findPermutationReplace[initialCf, startCf2] эCycles[{{13,14}}] permutationSignature[cycles2] э㻙㻝㻌 ⤖ᯝࡣ㻌 㻙㻝㻌 ࡞ࡢ࡛ወ⨨࡛࠶ࡿࠋࡋࡓࡀࡗ࡚ࠊᡂ ྍ⬟࡛࠶ࡿࠋ㻌 㻌 ⾜ิ࡛⾲ࡋࡓ㓄⨨ࢆᘬᩘࡋ࡚࠼ࡿᡂྍ⬟ᛶࢆ ุᐃࡍࡿ㛵ᩘࡋ࡚㻌parityQ㻌 ࢆ㻌 㻭㼜㼜㼑㼚㼐㼕㼤㻌 㻝㻔㻞㻕㻌 ♧ࡍࠋ parityQ[placement0, placement2] э㻙㻝㻌 㻌 㻔㻟㻕㻌 ௦⩌ࡘ࠸࡚㻌 ࢭࣝ 㼕㻌 ࡽࢭࣝ 㼖㻌 ࣈࣛࣥࢡࢆ⛣ືࡋ࡚ᚓࡽࢀࡿ ⨨ࢆ㻌ıi,j㻌 ⾲グࡍࡿࠊıi,i+1, i = 1,..., 15㻌 ࡣ㓄ࢆኚ࠼࡞࠸⨨࡛࠶ࡾࠊࡲࡓıj,i ıi,j-1㻌࡛ ࠶ࡿࠋࡑࡢ㻌 㻥 ಶࡢ⨨㻌ı1,8 ı2,7 ı3,6 , ı5,12 , ı6,11ı7,10 ı9,16 ı10,15 ı11,14ࡀ࠶ ࡿࠋㄽᩥ㼇㻝㼉㻌 ࡣ 㻥 ಶࡢ⨨ࡢᕠᅇ⨨ࡀ᫂グࡉࢀ ࡚࠾ࡾࠊࡇࢀࡽࡢ⨨ࢆ⏕ᡂඖࡍࡿ⨨⩌ࡣ 㻝㻡 ḟࡢ௦⩌ 㻭㻌㻝㻡࡞ࡿࡇࢆド᫂ࡋ࡚࠸ࡿࠋ㻌 㻹㼍㼠㼔㼑㼙㼍㼠㼕㼏㼍㻌 ࡣ⏕ᡂඖࡽ⨨⩌ࢆసࡿ㛵ᩘ ࡋ࡚PermutationGroup ࡀ࠶ࡾࠊ㻝㻡 ḟࡢ௦⩌ࢆ సࡿ㛵ᩘࡋ࡚ AlternatingGroup[15]㻌 ࡀ࠶ࡿࡢ ࡛ࡇࡢド᫂ࡢ☜ㄆࢆ⾜࠺ࠋ㻌 ࡣࡌࡵࠊᅗ 㻠㼎 ࢆཧ⪃ࡋ࡚ࢭࣝ 㻝㻜 ࠶ࡿࣈࣛ ࣥࢡࢆࢭࣝ 㻝㻡 ⛣ືࡍࡿࡇࡣ㓄ࡢ⨨㻌 ı10,15= (10,11,12,13,14) ᑐᛂࡍࡿࡇࢆ☜ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 8 7 6 5 9 10 11 12 16 15 14 13 1 2 3 4 5 6 7 8 15 12 14 13 9 11 10 1 2 3 4 8 7 6 5 9 10 11 12 16 15 14 13
ࡵࡿࠋࣈࣛࣥࢡࡀࢭࣝ 㻝㻜 ࠶ࡿ㓄ࡣ᪤ồࡵࡓ㻌 startCf࡛࠶ࡿࠋࡲࡓࠊࢭࣝ 㻝㻡 ࣈࣛࣥࢡࢆ⛣ື ࡋࡓ㓄ࡣ௨ୗ࡞ࡿࠋ㻌 pl2 = {{1,2,3,4},{5,6,7,8},{15,9,12,14}, {13, " ",11,10}}; cf2 = pl2Cf[pl2] э{1,2,3,4,8,7,6,5,10,13,14,11,15,12,9} ᚑࡗ࡚ࠊ ı10,15=findPermutationReplace[startCf, cf2] эCycles[{{10,11,12,13,14}}] ྠᵝࡋ࡚ồࡵࡓ⤖ᯝࡣḟ࡞ࡿࠋ㻌 ı1,8 = Cycles[{{1, 2, 3, 4, 5, 6, 7}}]; ı2,7 = Cycles[{{2, 3, 4, 5, 6}}]; ı3,6 = Cycles[{{3, 4, 5}}]; ı5,12= Cycles[{{5, 6, 7, 8, 9, 10, 11}}]; ı6,11 = Cycles[{{6, 7, 8, 9, 10}}]; ı7,10 = Cycles[{{7, 8, 9}}]; ı9,16 = Cycles[{{9, 10, 11, 12, 13, 14, 15}}]; ı11,14 = Cycles[{{11, 12, 13}}]; ⏕ᡂඖࡽసࡗࡓ⩌ࡀ 㻝㻡 ḟࡢ௦⩌㻌 㻭㻝㻡࡞ࡿࡇ ࢆ௨ୗࡢࡼ࠺☜ㄆ࡛ࡁࡿࠋ㻌 list = ^ı1,8ı2,7ı3,6, ı5,12 ı6,11, ı7,10, ı9,16 , ı10,15ı11,14}; PermutationGroup[list] == AlternatingGroup[15] эTrue 㻌 ࣃࢬࣝࡢつ๎ᚑࡗࡓ㓄⨨ࡢᩘࡣᩘ 㻝㻡 ࡢ௦⩌㻌 㻭㻝㻡㻌 ࡢඖᑐᛂࡋ࡚ 㻝㻡㻍㻛㻞 ಶ࡛࠶ࡿࠋ⩌ࡢඖࡢᩘࢆ ồࡵࡿ㛵ᩘ㻌GroupOrderࢆࡗ࡚☜ㄆ࡛ࡁࡿࠋ㻌 GroupOrder[AlternatingGroup[15]]== 15!/2 эTrue 㻌 㸳㸬 ࣃࢬࣝࢆゎࡃࣉࣟࢢ࣒ࣛ 㻌 㻤 ࣃࢬࣝࢆゎࡃ 㻹㼍㼠㼔㼑㼙㼍㼠㼕㼏㼍㻌 ࡢࣉࣟࢢ࣒ࣛࡀࠕᛂ⏝ 㻹㼍㼠㼔㼑㼙㼍㼠㼕㼏㼍ࠖ㼇㻡㼉㻌 ㍕ࡗ࡚࠸ࡿࠋࡇࢀࡣ 㻝㻡 ࣃࢬࣝ ࡶ ࠺ ࡇ ࡀ ࡛ ࡁࡿ ࠋ ࡇࡢ ࣉ ࣟ ࢢ ࣛ ࣒ ࡢ య ࢆ㻌 㻭㼜㼜㼑㼚㼐㼕㼤㻌㻞㻌 ♧ࡍࠋ㻌 ࣃࢬࣝࢆゎࡃࡓࡵࡢ㐨ලࡋ࡚ḟࡢ㛵ᩘࢆసࡿᚲせ ࡀ࠶ࡿࠋࣉࣟࢢ࣒ࣛࡢ᰾ᚰࡣḟࡢ㡯┠ 㻟 ࡢᐇ࠶ ࡿࠋ㻌 㻝㻚ࣈࣛࣥࢡࡢྍ⬟࡞⛣ືࢆồࡵࡿ㛵ᩘ㸸㻌moves㻌 㻞㻚ࣈࣛࣥࢡࡢ⛣ືࡼࡿ᪂ࡓ࡞㓄⨨ࢆసࡿ㛵ᩘ㸸㻌 㻌 㻌 㻌 㻌 㻌 㻌 㻌 㻌 㻌 㻌 㻌 㻌 㻌 㻌 㻌 㻌 㻌 㻌effectmove㻌 㻟㻚௵ពࡢ㓄⨨ࡽᡂᙧࡢ㓄⨨ࡲ࡛ࡢ㏆ࡉࢆ⾲ࡍ㔞㻌 ࢆồࡵࡿ㛵ᩘ㸸㻌manhattandistance㻌 㻠㻚⛣ືࡢ㐃㙐ࢆ᥈⣴ࡍࡿ㛵ᩘ㸸iterate㻌 㻌 ࣃࢬࣝࡢᡂᙧࡢ㓄⨨㸦ᅗ 㻝㼍㸧ࢆḟࡢ⾜ิ࡛⾲⌧ࡍ ࡿࠋ㻌 (desired=Partition[Range[16]/.{16->" "},4]) // MatrixForm 㻌 㻌 㻔㻝㻕ࣈࣛࣥࢡࡢྍ⬟࡞⛣ືࢆồࡵࡿ㛵ᩘ㸸 moves 㻔㻌㻭㼜㼜㼑㼚㼐㼕㼤㻌㻞㻔㻝㻕㻌㻕㻌 ࣈࣛࣥࢡࡀ 㻝 ิ࠶ࡿ࡞ࡽࡤᕥ㻔Left㻕⛣ື࡛ࡁ ࡞࠸ࡋࠊ㻠 ิ࡞ࡽࡤྑ㻔Right㻕㻌 ⛣ື࡛ࡁ࡞࠸ࠋྠ ᵝ࡞つ๎ࡋࡓࡀࡗ࡚௵ពࡢ⨨࠶ࡿࣈࣛࣥࢡ チ ࡉ ࢀ ࡿ ⛣ ື ࢆ Ỵ ࡵ ࡿ 㛵 ᩘ ࡀ moves ࡛ ࠶ ࡿࠋ㻌㻌 desired㻌 ࡢࣈࣛࣥࢡࡢྍ⬟࡞⛣ືࡣ㻌Up㻌 㻌Left㻌 ࡛࠶ࡿࠋ㻌 moves[desired] э{"Up", "Left"} 㻌 㻔㻞㻕㻌 ࣈࣛࣥࢡࡢ⛣ືࡼࡿ᪂ࡓ࡞㓄⨨ࢆసࡿ㛵ᩘ㸸 effectmove 㻔㻌㻭㼜㼜㼑㼚㼐㼕㼤㻌㻞㻔㻞㻕㻌㻕㻌 ⛣ືLeft㻌 ࡗ࡚᪂ࡓ࡞㓄⨨ࢆసࡿࠋ㻌
effectmove[desired, "Left"] // MatrixForm
㻌
⧞ࡾ㏉ࡋ⛣ືࡉࡏࡓᚋࡢ㓄⨨ࡣ௨ୗ࡞ࡿࠋ㻌 (firstmove =
effectmove[desired, "Left", "Left", "Up", "Up"]) // MatrixForm 㻌 㻌 㻔㻟㻕㻌 ㏆ࡉࡢホ౯㛵ᩘ㸸࣐ࣥࣁࢵࢱࣥ㊥㞳ࢆồࡵࡿ㛵ᩘ㸸㻌 manhattandistance 㻔㻌㻭㼜㼜㼑㼚㼐㼕㼤㻌㻞㻔㻟㻕㻌㻕㻌 ⌧ᅾࡢ㓄⨨ࡽᡂᙧࡢ㓄⨨ࡲ࡛ࡢ㏆ࡉࢆ⾲ࡍ㔞 ࡋ࡚࣐ࣥࣁࢵࢱࣥ㊥㞳ࢆ⏝ࡍࡿࠋ㓄⨨desired ࡛ࡣࠊࢱࣝ 㻢 ࡣ㻌 㻞 ⾜ 㻞 ิࡢ⨨࠶ࡾࠊfirstmove
ࡢ㓄⨨࡛ࡣ 㻟 ⾜ 㻞 ิ࠶ࡿࠋࡑࡢ⾜ࡢᕪࡢ⤯ᑐ್ ิࡢᕪࡢ⤯ᑐ್ࡢࢆࡾ㻌 㻝㻌 ࡞ࡿࠋ㻌 㻝 ࡽ 㻝㻡㻌 ࡢࢱࣝࣈࣛࣥࢡࡢࡑࢀࡒࢀࡘ࠸ ࡚ồࡵࡓ್ࢆຍ࠼ࡓࡶࡢࡀ࣐ࣥࣁࢵࢱࣥ㊥㞳࡞ࡿࠋ㻌 ࡋࡓࡀࡗ࡚ィ⟬⤖ᯝࡣ 㻤㻌 ࡞ࡿࠋ㻌 manhattandistance[desired, firstmove] э㻤㻌 㻌 㻔㻠㻕㻌 ⛣ືࡢ㐃㙐ࢆ᥈⣴ࡍࡿᮌࡢ⏕ᡂ㻌 ᭱ึࡢ㓄⨨ࢆ㻌P0㻌 ࡍࡿࠋ㛵ᩘ moves ࢆࡗ࡚ ྍ⬟࡞ࣈࣛࣥࢡࡢ⛣ື㻌 m1, m2㻌 ࢆ᥈ࡍࡇࡀ࡛ࡁ ࡿࠋࡑࢀࡒࢀࡢ⛣ື㻌 ࡼࡗ࡚సࡽࢀࡿ㓄⨨㻌P1, P2㻌 ࡣ㛵ᩘ effectmove㻌 ࡼࡗ࡚ồࡵࡿࡇࡀ࡛ࡁࡿࠋ P0㻌 ࢆᮌࡢ࣮ࣝࢺࡋࠊ⛣ື㻌m1, m2 ࢆᯞࡋࠊ᪂ ࡓసࡽࢀࡓ㓄⨨ࢆࣀ࣮ࢻࡍࡿᮌࡢᵓ㐀ࢆᅗ 㻢 ♧ࡍࠋ⟅࠼ࢆぢࡘࡅࡿࡣࡇࢀࡽࡢࣀ࣮ࢻࡀᡂᙧ ࡢ㓄⨨ྠࡌࠊࢀࡔࡅ㏆࠸ࢆㄪࡿᚲせࡀ࠶ ࡿࠋࡇࢀࢆホ౯ࡍࡿ㛵ᩘࡀ࣐ࣥࣁࢵࢱࣥ㊥㞳࡛࠶ࡿࠋ ࡇࡇ࡛ࡑࢀࡒࢀࡢ⛣ື࣐ࣥࣁࢵࢱࣥ㊥㞳ࢆྵࡵࡓ ࣜࢫࢺࢆసࡿ㛵ᩘࡋ࡚listscores ࢆᐃ⩏ࡍࡿࠋ㻌 㻔㻌㻭㼜㼜㼑㼚㼐㼕㼤㻌㻞㻔㻠㻕㻌㻕㻌 㻌 㻌 㻌 ᅗ 㻢㻌 㻌 ⛣ືࡢ㐃㙐ࢆ᥈⣴ࡍࡿᮌ㻌 㻌 㻌 㓄⨨㻌P1, P2㻌 ⟅࠼ࡀ࠶ࢀࡤ࡞ࡿࠋ⟅࠼ࡀ ࡞ࡗࡓሙྜࠊࡑࢀࡒࢀࡢ㓄⨨ࡘ࠸࡚⛣ືࢆ⧞ࡾ㏉ ࡍࡇࡼࡗ࡚⟅࠼ࢆぢࡘࡅࡿࡇࡀྍ⬟࡛࠶ࡿࠋ ࡋࡋ࡞ࡀࡽグ㘓ᐜ㔞ࡢไ㝈ࡽᅔ㞴ࡀ⏕ࡌࡿࠋゎ Ỵ᪉ἲࡢ㸯ࡘࡋ࡚ࠊ࣐ࣥࣁࢵࢱࣥ㊥㞳ࡀ᭱ࡶᑠࡉ ࠸ࣀ࣮ࢻࡘ࠸࡚ඃඛⓗ⛣ືࡢ᥈⣴ࢆ⧞ࡾ㏉ࡍ᪉ ἲࢆ᥇⏝ࡍࡿࠋ㊥㞳ࡀ➼ࡋ࠸ࡁࡣࡑࡢ୰ࡽࣛࣥ ࢲ࣒㑅ࡧฟࡍࡇࡍࡿࠋ㻌 ᅗ 㻢㻌 ♧ࡍP0 ࡽP1P2 ࡢ⛣ື㻌m1m2㻌 ࡣ㛵ᩘ listscores[P0]㻌 ࢆࡗ࡚࣐ࣥࣁࢵࢱࣥ㊥㞳 ࢆ ྵ ࡵ ࡓ ᙧ ࡛ ồ ࡵ ࡿ ࡇ ࡀ ࡛ ࡁ ࡿ ࠋ ࡇ ࢀ ࢆ㻌 firstmoves ={{a,m1},{b,m2}}㻌 ࡍࡿࠋἼᣓᘼࡣ ࣜࢫࢺࢆ⾲ࡋࠊ࣐ࣥࣁࢵࢱࣥ㊥㞳㻌a㻌 b㻌 ࡣ㻌a < b㻌 ࡢ㛵ಀ࠶ࡿࡶࡢࡍࡿࠋᅗ࡛ࡣ㊥㞳ࡀᑠࡉ࠸㡰 ᕥࡽྑᥥ࠸࡚࠸ࡿࠋ㻌 firstmoves㻌 ࢆධຊࡋ࡚㻌P11P12㻌 ࡢ⛣ືࢆ ồࡵࡿ㛵ᩘ㻌iterate[P0,firstmoves] ࡣ㻌 secondmoves={{c,m1,m11},{d,m1,m12},{b,m2}}, c < d < b ࢆฟຊࡍࡿࠋ᭦ secondmoves㻌 ࢆධຊ ࡋ࡚ 㻌P111㻌 P112㻌 ࡢ⛣ື thirdmoves ࢆ iterate[P0,secondmoves]㻌 ࡛సࡿࡇࡀ࡛ࡁࡿࠋ ࡇࢀࢆ⧞ࡾ㏉ࡋ࡚⟅ࢆぢࡘࡅࡿࡇࡀྍ⬟࡞ࡿࠋ㻌 㻌 ࡇࡢ᥈⣴࠾࠸࡚↓ព࡞⛣ືࠊࡍ࡞ࢃࡕྑ⛣ ືࡋࡓᚋᕥ⛣ືࡍࡿࡇࡸࠊୖ⛣ືࡋࡓᚋୗ ࡢ⛣ືࢆྲྀࡾ㝖ࡃࡓࡵworthwhile㻌 㛵ᩘࢆࡗ࡚ ࠸ࡿࠋࡲࡓࠊ࣐ࣥࣁࢵࢱࣥ㊥㞳ࡀᑠࡉ࠸⛣ືࢆඃඛ ࡋ࡚᥈⣴ࡍࡿࡀࠊ⛣ືิࡢ᥈⣴ࢆㄪᩚࡍࡿࡓࡵࡢ㛵 ᩘ bestscore㻌 ࡶࡗ࡚࠸ࡿࠋ㻔㻌㻭㼜㼜㼑㼚㼐㼕㼤㻌㻞㻔㻠㻕㻌㻕㻌 ᭱⤊ⓗ⛣ືࡢ᥈⣴ࢆ⧞ࡾ㏉ࡋ࡚⟅ࢆぢࡘࡅࡿ㛵 ᩘࡀ㻌try㻌 ࡛࠶ࡿࠋ☜ㄆࡢࡓࡵᐇ⾜⤖ᯝࢆ♧ࡍࠋ㻌 start = effectmove[desired, "Left", "Up",
"Left"]; result = try[start, 10]
The following solution was found э{0, "Right", "Down", "Right"}㻌
࣐ࣥࣁࢵࢱࣥ㊥㞳ࡀ㻌 㻜㻌 ࡢ⛣ືࡢᡭ㡰ࡀồࡵࡽࡓࠋ㻌 ☜ㄆࡢࡓࡵ㓄⨨ࢆ⾲♧ࡍࡿࠋᡭ㡰ᚑࡗࡓࣈࣛࣥࢡ ࡢ⛣ືࡢᵝᏊࡀぢ࡚ྲྀࢀࡿࠋ㻌
puzseq = FoldList[effectmove[#1, #2] &, start, Rest[result]]; viewlolol[puzseq]㻌 㻌 㻌 ࣉࣟࢢ࣒ࣛࡢ᳨ウ 㻝㻡 ࣃࢬࣝࡢ௵ពࡢ㓄⨨ࡣࡘࡂࡢࡼ࠺ᩘࢆࡗ ࡚సࡿࡇࡀ࡛ࡁࡿࠋ㻌 Partition[RandomSample[Range[16]] /. {16 -> " "}, 4]; ᩘ࡛సࡗࡓ㓄⨨ࡢࢆ♧ࡍࠋ㻌 㻌 P0 P1 P2 P11 P12 P111 P112 m1 m2 m11 m12 m111 m112 firstmoves secondmoves thirdmoves
ࡇࡢ㓄⨨ࡢᡂྍ⬟ᛶࢆㄪࡿࠋ㻌 parityQ[desired, realstart] э1㻌 അ࡞ࡢ࡛ᡂྍ⬟࡞㓄⨨࡛࠶ࡿࠋᕠᅇ⨨ࡣḟ ࡞ࡿࠋ㻌 list1= Flatten[realstart /. {" " -> 16}]; list2= Flatten[desired /. {" " -> 16}]; perm1=findPermutationReplace[list1, list2] э Cycles[{{1,15,8,10,16,11,9,6,5,14,2,12,3, 7,4}}] ⡆༢࡞㓄⨨ࡘ࠸࡚ࡣ㛵ᩘ try࡛⛣ືࡢṇゎᡭ㡰 ࢆồࡵࡿࡇࡀ࡛ࡁࡿࠋࡋࡋ࡞ࡀࡽࡇࡢ㓄⨨ࡣ⟅ ࠼ࡀồࡲࡽ࡞࠸࡛࠶ࡗࡓࠋ㻌 try[realstart, 1000]
Solution not found, best sequence was э{28, "Right", "Up", … , "Up", "Up"}
ṇゎᡭ㡰ࡀồࡲࡽ࡞࠸⌮⏤ࡣグ᠈ᐜ㔞ࡢไ⣙࡛ࡣ ࡞ࡃ⛣ືࡢ㐃㙐ࢆ᥈⣴ࡍࡿ᪉ἲ࠶ࡾࠊᨵⰋࡢవᆅ ࡀ࠶ࡿࡇࢆ♧ࡋ࡚࠸ࡿࠋ㻌 㻌 㻔㻢㻕ࣉࣟࢢ࣒ࣛࡢᨵⰋ㻌 ḟࡢࡼ࠺࡞ᨵⰋࢆຍ࠼ࡿࡇ࡛ṇゎᡭ㡰ࢆồࡵࡿ ࡇࡀ࡛ࡁࡓࠋ㻌 㻝㻕ࢱࣝ 㻝 ࢆᥞ࠼ࡿࡇࡽࡣࡌࡵࠊḟ 㻝㻘㻞 ࢆᥞ ࠼ࡉࡽ 㻝㻘㻞㻘㻟 ⧞ࡾ㏉ࡋ࡚࡚ࢆᥞ࠼ࡿࠋ㻌 㻞㻕㸯⾜┠ࡢࢱࣝ 㻝㻘㻞㻘㻟㻘㻠 ࡀᥞࡗࡓᚋࡣࠊࣈࣛࣥࢡࡢ ⛣ືࢆ 㻞㻘㻟㻘㻠 ⾜ไ㝈ࡍࡿࠋࡇࢀࡣ⛣ືࡢ⮬⏤ᗘࢆ ᑠࡉࡃࡍࡿࡓࡵ⟅ࢆồࡵ᫆ࡃࡍࡿຠᯝࡀࡁ࠸ࠋ㻌 㻟㻕㻞 ⾜┠ࡢࢱࣝ 㻡㻘㻢㻘㻣㻘㻤㻌 ࢆᥞ࠼ࡿࡣࣈࣛࣥࢡࡢ ⛣ືࢆ 㻞㻘㻟㻘㻠 ⾜ไ㝈ࡋࠊࡑࡢᚋ 㻞㻘㻌㻟 ⾜⤠ࡾ㎸ࡴࠋ㻌 㻠㻕㻝 ࡽ 㻝㻞㻌 ࡲ࡛ࡢࢱࣝࡀᥞࡗࡓᚋࡣࠊࣈࣛࣥࢡࡢ ⛣ືࢆ 㻟㻘㻠 ⾜ไ㝈ࡍࡿࠋ㻌 㻌 ௨ୖࡢᨵⰋࢆຍ࠼ࡿࡓࡵࡣ㻌moves㻌 㛵ᩘ࣐ࣥࣁ ࢵࢱࣥ㊥㞳ࢆィ⟬ࡍࡿ㛵ᩘಟṇࢆຍ࠼ࡿᚲせࡀ࠶ ࡿࠋࡇࡢᨵⰋࢆຍ࠼ࡿࡇ࡛」㞧࡞ࡿࡀ᪂ࡋ࠸㛵 ᩘ㻌newtryN㻌 ࡢసᡂᡂຌࡋࡓࠋ㻌 㻌 result = newtryN[realstart] 㼀㼔㼑㻌㼒㼛㼘㼘㼛㼣㼕㼚㼓㻌㼟㼛㼘㼡㼠㼕㼛㼚㻌㼣㼍㼟㻌㼒㼛㼡㼚㼐㻚㻌
э{0, "Down", "Left", "Up", ... , "Right", "Right"}
Length[Rest[result]] э㻝㻜㻜㻌 ṇゎࡢᡭ㡰ࡣ 㻝㻜㻜 ᡭࡢ⛣ືࡢิ࡛࠶ࡗࡓࠋࡇࡢ⤖ ᯝࡀඛồࡵࡓᕠᅇ⨨perm1୍⮴ࡍࡿ☜ㄆࢆ ⾜࠺ࠋ⛣ືᡭ㡰ࢆ㛵ᩘ㻌puzseq2cycles ࢆࡗ࡚ᕠ ᅇ⨨ኚࡋࠊ㻝㻜㻜 ಶࡢ⨨ࡢ✚ࢆồࡵࡿࠋ㻌 㻔㻌㻭㼜㼜㼑㼚㼐㼕㼤㻌㻞㻌㻔㻡㻕㻌㻕
puzseq= FoldList[effectmove[#1, #2] &,
realstart, Rest[result]]; cyclesSet = puzseq2cycles[puzseq]; perm2=PermutationProduct @@ cyclesSet э Cycles[{{1,15,8,10,16,11,9,6,5,14,2,12,3, 7,4}}] perm2 == perm1 эTrue ᚑࡗ࡚ࡘࡢ᪉ἲ࡛ồࡵࡓᕠᅇ⨨ࡣ୍⮴ࡍࡿࠋ㻌 㻌 㸴㸬ࡲࡵᚋࡢㄢ㢟 ᢳ㇟ⓗ࡞ᩘᏛⓗᴫᛕ࡛࠶ࡿ⩌ㄽࡢᐇࡢࡦࡘ ࡋ࡚ࠊ㻝㻡 ࣃࢬࣝࡢᡂྍ⬟ᛶࡢุᐃࢆ 㻹㼍㼠㼔㼑㼙㼍㼠㼕㼏㼍 ࢆ⏝ࡋ࡚ㄽࡌࡓࠋḟࣃࢬࣝࢆゎࡃࣉࣟࢢ࣒ࣛࢆ ㄝ᫂ࡋᨵⰋ᪉ἲࢆ♧ࡋࡓࠋ㻌 㻌 ⨨ࡢࢢࣛࣇ⌮ㄽࡢぢᆅࡽ 㻝㻡 ࣃࢬࣝࢆㄽࡌ ࡓᩘᏛㄽᩥ㼇㻞㼉ࡀ࠶ࡿࠋ㻹㼍㼠㼔㼑㼙㼍㼠㼕㼏㼍㻌 ࡣࢢࣛࣇ㛵 ࡍࡿ㛵ᩘࡀ⏝ពࡉࢀ࡚࠸ࡿࡢ࡛ࡇࡢᶵ⬟ࢆᛂ⏝ࡋࡓ ⌮ゎ☜ㄆࢆ⾜࠸ࡓ࠸ࠋ㻌 ࡲࡓࠊᏛ⏕ᐇ⩦➼ᅇసᡂࡋࡓࣉࣟࢢ࣒ࣛࢆ⏝ ࠸ࠊ㔞ᏊຊᏛ࠾ࡅࡿ⩌ㄽ࡞ࡢᢳ㇟ᴫᛕࡢ⌮ゎࢆ ຓࡅࡿྍ⬟ᛶࢆ᥈ࡿࡇࡣᚋࡢㄢ㢟࡛࠶ࡿࠋ 㻌 ཧ⪃ᩥ⊩㻌 㻝㻕 㻭㼞㼏㼔㼑㼞㻘㻭㻚㻲㻚䇿㻭㻌㻹㼛㼐㼑㼞㼚㻌㼀㼞㼑㼍㼠㼙㼑㼚㼠㻌㼛㼒㻌㼠㼔㼑㻌㻝㻡㻌㻼㼡㼦㼦㼘㼑㻚䇿㻌 㻭㼙㼑㼞㻚㻌㻹㼍㼠㼔㻚㻹㼛㼚㼠㼔㼘㼥㻌㻝㻜㻢㻘㻣㻥㻟㻙㻣㻥㻥㻘㻝㻥㻥㻥㻌 㻞㻕 㼃㼕㼘㼟㼛㼚㻘㻾㻚㻹㻚㻌 䇾㻳㼞㼍㼜㼔㻌 㻼㼡㼦㼦㼘㼑㼟㻘㻌 㻴㼛㼙㼛㼠㼛㼜㼥㻘㻌 㼍㼚㼐㻌 㼠㼔㼑㻌 㻭㼘㼠㼑㼞㼚㼍㼠㼕㼚㼓㻌 㻳㼞㼛㼡㼜㻚䇿㻌 㻶㻚㻌 㻯㼛㼙㼎㼕㼚㻚㻌 㼀㼔㻚㻌 㻿㼑㼞㻚㻮㻌 㻝㻢㻘㻌 㻤㻢㻙㻥㻢㻘㻝㻥㻣㻠㻌 㻟㻕 㻰㻚㻶㼛㼥㼚㼑㼞㻌䇾㻭㼐㼢㼑㼚㼠㼡㼞㼑㻌㼕㼚㻌㼓㼞㼛㼡㼜㻌㼠㼔㼑㼛㼞㼥䇿㻌㻞㼚㼐㻌㼑㼐㻘㻌㻞㻜㻜㻤㻌 ࠕ⩌ㄽࡢࢃ࠸ࠖᕝ㎶அヂ㻌 㻠㻕 㼃㼛㼘㼒㼞㼍㼙㻌㻹㼍㼠㼔㼣㼛㼞㼘㼐㻘㻌䇾㻝㻡㻌㻼㼡㼦㼦㼘㼑䇿㻌㻘㻌 KWWSPDWKZRUOGZROIUDPFRP3X]]OHKWPO :76KDZDQG-7LJJ͆$SSOLHG0DWKHPDWLFD͇ ࠕᛂ⏝ 0DWKHPDWLFDࠖᑠ㔝㝧Ꮚヂ
Appendix1
(1) 㓄 (Configuration)
pl2Cf#mat_List? MatrixQ' : Module#rule, cellconf, blank,
rule 1, 1 1, 1, 2 2, 1, 3 3, 1, 4 4, 2, 1 8, 2, 2 7, 2, 3 6, 2, 4 5, 3, 1 9, 3, 2 10, 3, 3 11, 3, 4 12, 4, 1 16, 4, 2 15, 4, 3 14, 4, 4 13;
cellconf +Position#mat, Ó' & s Range#15'/ s. rule; blank Position#mat, Ó' &" " s. rule;
If#Ó ! blank, Ó 1, Ó' & s cellconf'
(2) 㓄ࡢ⨨അወᛶ
findPermutationReplace#lst1_, lst2_' :
Map#lst1##Ó'' &, FindPermutation#lst2, lst1', 3' permutationSignature#perm_?PermutationCyclesQ' :
Apply#Times, +1/^+Length s First#perm' 1/' parityQ#x_List? MatrixQ, y_List? MatrixQ' :
permutationSignature#findPermutationReplace#pl2Cf#x', pl2Cf#y'''
Appendix2 15ࣃࢬࣝࢆゎࡃࣉࣟࢢ࣒ࣛ [ 5 ]
viewlolol#a_List' : Map#MatrixForm#Ó, TableSpacing 1, 1' &, a'; desired Partition# Range#16' s. 16 " ", 4';
(1) ࣈࣛࣥࢡࡢ⨨ࡽྍ⬟࡞ ⛣ື ࢆồࡵࡿ㛵ᩘ㸸moves
moves#current_? MatrixQ' : Module#answer, xdim, ydim, place, xpos, ypos, answer "Up", "Down", "Left", "Right";
ydim Length#current'; xdim Length#current##1'''; place Position#current, " "'; xpos place##1, 2'';
ypos place##1, 1'';
If#xpos m xdim, answer Drop#answer, 4''; If#xpos m 1, answer Drop#answer, 3''; If#ypos m ydim, answer Drop#answer, 2''; If#ypos m 1, answer Drop#answer, 1''; answer'
(2) ࣈࣛࣥࢡࡢ⛣ືࡼࡿ᪂ࡓ࡞㓄⨨ࢆసࡿ㛵ᩘ㸸effectmove
effectmove#a___, b___, " ", c_, d___, e___, "Right"' : a, b, c, " ", d, e effectmove#a___, b___, c_, " ", d___, e___, "Left"' : a, b, " ", c, d, e effectmove#a_, "Up"' : Transpose#effectmove#Transpose#a', "Left"''
effectmove#a_, "Down"' : Transpose#effectmove#Transpose#a', "Right"'' effectmove#a_List, b_String, c__String' : effectmove#effectmove#a, b', c'
(3) ㏆ࡉࡢホ౯㛵ᩘ㸸࣐ࣥࣁࢵࢱࣥ㊥㞳ࢆồࡵࡿ㛵ᩘ : manhattandistance
manhattandistance::incompat "Manhattan distance can only be computed for matrices with tha same dimension"; manhattandistance#x_List, y_List' :
Module#temp, If#Dimensions#x' Dimensions#y', Message#manhattandistance::incompat', temp Map#Flatten#Position#y, Ó'' &, x, 2';
temp temp Map#Flatten#Position#x, Ó'' &, x, 2'; temp Total#Flatten#Abs#temp'''''
(4) ⛣ືࡢ㐃㙐ࢆ᥈⣴ࡍࡿᮌࡢ⏕ᡂ
listscores#x_' : Module#makemoves, ans, makemoves Map#effectmove#x, Ó' &, moves#x'';
ans Flatten#Map#manhattandistance#Ó##1'', desired' &, makemoves''; Transpose#ans, moves#x'''
worthwhile#x___, "Right", "Left"' : False; worthwhile#x___, "Left", "Right"' : False; worthwhile#x___, "Up", "Down"' : False; worthwhile#x___, "Down", "Up"' : False; worthwhile#x___' : True
bestscore#x_List, y_List, delta_: 0.2' :
If#x##1'' y##1'' delta +Length#Rest#y'' Length#Rest#x''/, True, False' iterate#start_, x_, y__, z___' : Module#endnode, newnodes, newseq,
endnode effectmove#start, y'; newnodes listscores#endnode';
newseq Map#Join#First#Ó', y, Rest#Ó'' &, newnodes'; Sort#Join#Select#newseq, worthwhile', z', bestscore''; try#start_, n_' : Module#temp, count, count 0;
temp listscores#start';
While#temp##1, 1'' ! 0 && count n, temp iterate#start, temp'; count count 1';
If#count m n && temp##1, 1'' 0, Print#"Solution not found, best sequence was"', Print#"The following solution was found"'';
temp##1'''
(5) ࣉࣟࢢ࣒ࣛࡢᨵⰋ
findPermutationReplace#lst1_, lst2_' :
Map#lst1##Ó'' &, FindPermutation#lst2, lst1', 3' toList#mat_' : Flatten#mat' s. " " 16
puzseq2cycles#puzseq_' : MapThread#findPermutationReplace#toList#Ó1', toList#Ó2'' &, Most#puzseq', Rest#puzseq''