Final-Fantasy-13-2
時鐘拼圖的手有什麼簡單的解決方案嗎?
在導致迷你游戲的時間裂縫中,有沒有什麼簡單的方法或有用的技巧來解決時鐘謎題?一般來說,我會隨機選擇一些選項,並希望它們能奏效。我想玩 RPG——不是 Super Magic Happy Clocks,但我離題了……
我了解基本概念,並且我意識到每個謎題都是隨機生成的,因此沒有預先確定的解決方案。非常歡迎任何提示/建議。
那裡有一些時間求解器。
我個人認為這些是最好的:
http://clockpuzzle.pl/(它是線上的,所以沒有什麼可下載的)
或者
手動進行,我發現獲得正確解決方案的最佳方法是查看板上的每個數字,並標記哪些數字可以成為鏈中的下一個數字。我沒有繼續這個鏈條,而是順時針移動到下一個數字,直到我建立了一個值表。該表通常足以找出正確的鏈。
因此,例如,採用以下時鐘:
2 2 2 3 1 1
為每個數字分配一個字母,從頂部的 2 開始並按順時針方向工作,我可以生成如下表格:
A | B | C | D | E | F -------------------------- A x | x | o | x | o | x B o | x | o | x | x | x C x | o | x | o | x | x D x | o | x | x | x | o E x | o | x | x | x | x F x | o | x | o | x | x
由此,我可以看出E必須通向B。通過消除鎖定在鏈條中的其他選擇,我可以得出正確的解決方案,即:
A → E → B → C → D → F
這可以擴展到任何大小的時鐘,但它很乏味。因此,我決定用 PHP 編寫一個自動化解決方案:
<?php // Supply clock values clockwise. // Keys can be anything you want to use to remember the positions. $clock = array( 'a' => 2, 'b' => 1, 'c' => 1, 'd' => 2, 'e' => 3, 'f' => 2, ); $positions = array_keys($clock); $values = array_values($clock); // Test all possible starting positions. for ($i = 0; $i < count($clock); ++$i) { $chain = test_clock($values, $i); // When the solution has all values, it's the right one. if (count($chain) == count($clock)) { break; } } // Use the user-supplied keys. $solution = array(); foreach ($chain as $position) { $solution[] = $positions[$position]; } print 'The solution is: ' . implode($solution, ' → ') . PHP_EOL; /** * Recursively test the clock based on a supplied position. * * @param array $values * The current values of the clock. * @param integer $i * The current position of the clock. * @param array $chain * The current possible solution. * * @return * An array of positions that represents a possible solution. */ function test_clock(array $values, $i, array $chain = array()) { // If the value of the position we're in is 0, we've already tested it. if ($values[$i] == 0) { return $chain; } // Find the next two positions. $position1 = $i + $values[$i]; $position2 = $i - $values[$i]; // Account for wraparound in the array. if ($position1 > count($values) - 1) { $position1 -= count($values); } if ($position2 < 0) { $position2 += count($values); } // Mark this position as tested. $values[$i] = 0; $chain[] = $i; // Test the first position. $solution = test_clock($values, $position1, $chain); // Don't bother checking the second position if the first is correct. if (count($solution) == count($values)) { return $solution; } // Test the second position. return test_clock($values, $position2, $chain); }
把它放到一個文件中,比方說
hands-of-time.php
,然後從網路伺服器或通過 PHP CLI 執行它:$ php hands-of-time.php The solution is: a → e → b → c → d → f
將數組更改
$clock
為拼圖。例如,這是一個較大的時鐘:$clock = array( 'a' => 2, 'b' => 2, 'c' => 2, 'd' => 4, 'e' => 2, 'f' => 2, 'g' => 3, 'h' => 3, 'i' => 6, 'j' => 4, 'k' => 5, 'l' => 3, );
這是輸出:
The solution is: a → k → f → h → e → g → j → b → d → l → i → c