Соревнование
Рассмотрим следующую диаграмму Пятнадцатой головоломки в ее решенном состоянии:
_____________________
| | | | |
| 1 | 2 | 3 | 4 |
|____|____|____|____|
| | | | |
| 5 | 6 | 7 | 8 |
|____|____|____|____|
| | | | |
| 9 | 10 | 11 | 12 |
|____|____|____|____|
| | | | |
| 13 | 14 | 15 | |
|____|____|____|____|
При каждом движении возбужденная головоломка имеет возможность переместить один кусок, прилегающий к пустому пространству, в пустое пространство. Например, после 1
перемещения у нас есть 2
возможные сценарии (пусть 0
будет пустое место):
1 2 3 4 1 2 3 4
5 6 7 8 5 6 7 8
9 10 11 12 and 9 10 11 0
13 14 0 15 13 14 15 12
После 2
ходов головоломка имеет 5
разные результаты (обратите внимание, что два вышеупомянутых случая исключены, поскольку они не могут быть достигнуты за 2 хода). Одна из этих ситуаций является исходным разрешенным состоянием, и ее можно достичь двумя различными способами.
Ваша задача в этой задаче состоит в том, чтобы получить количество различных результатов, к которым может привести определенное количество ходов. В качестве входных данных возьмите число N >= 0
и выведите количество уникальных ситуаций, которые могут появиться после N
ходов.
правила
- Это код-гольф. Самый короткий код выигрывает!
- Стандартные лазейки запрещены.
- Ваш код должен быть в состоянии вычислить случай в
N = 10
течение нескольких минут. Я, скорее всего, не проверю это правило, если в ответе не будет очевидного злоупотребления временем.
Тестовые случаи
(Результаты, полученные в результате суммирования OEIS A089484 (как описано в Geobits в чате ), автоматизировано по сценарию Мартина Бюттнера . Спасибо за помощь!)
0 moves: 1
1 moves: 2
2 moves: 5
3 moves: 12
4 moves: 29
5 moves: 66
6 moves: 136
7 moves: 278
8 moves: 582
9 moves: 1224
10 moves: 2530
11 moves: 5162
12 moves: 10338
13 moves: 20706
14 moves: 41159
15 moves: 81548
16 moves: 160159
17 moves: 313392
18 moves: 607501
19 moves: 1173136
20 moves: 2244884
21 moves: 4271406
22 moves: 8047295
23 moves: 15055186
24 moves: 27873613
25 moves: 51197332
26 moves: 93009236
27 moves: 167435388
28 moves: 297909255
29 moves: 524507316
30 moves: 911835416
31 moves: 1566529356
источник
s.add
Возможно, псевдонимы спасут некоторых персонажей.t
приводить аргументы. Кроме того, я думаю, что, скорее всего, у меня будет больше возможностей для совершенствования, если у меня будут лучшие навыки Python.if
отчетность в короткие замыкания выражения с побочным эффектом , как ,j%4and e(j-1,j)
так что вы можете поместить их в одну строку как логическое кортежем:j%4and e(j-1,j),j%4>2or e(j,j+1),j<4or e(j-4,j),j>11or e(j,j+4)
.if
утверждений. Мне также интересно, есть ли более короткий способ создания кортежа с двумя замененными элементами.def e(a,b):*l,=t;l[a],l[b]=l[b],l[a];s.add(tuple(l))
.Perl, 148
Пример:
источник