Мы любим наши странные головоломки, нас, британцев

16

В нескольких британских газетах есть игра, известная как Хидато . Он чем-то похож на судоку , хотя вместо строки 1-9 в строке и в блоке речь идет о размещении чисел таким образом, чтобы они соединялись по порядку от 01всех до самых высоких, чтобы все они касались по горизонтали, по диагонали или по вертикали. ,

Входные данные будут содержать несколько разделенных строк \n, содержащих блоки, разделенные пробелом, который можно считать шириной в два символа. Каждый блок будет числом, пустым пространством для заполнения (обозначено --) или стеной, в которой не может быть чисел в ( XX).

Ваш вывод должен соответствовать предоставленному, хотя с пустыми блоками, снабженными числами. Обратите внимание, что не может быть единственного или даже существующего решения - некоторые могут дать многократное из-за их неоднозначности, во многом как Судоку, а некоторые могут быть буквально неразрешимыми, и в этом случае вы должны дать вывод фальси , но вы Можно предположить, что входные данные отформатированы, как показано ниже.

Используйте стандартный заголовок Language: XX bytes. Удачного игры в гольф!

Примеры

Входы 01 XX 03, 01 -- 04, 01 --и т.д. все должны вернуть что - то falsey .

Входные данные:

01 -- --
-- XX 05

Выход:

01 03 04
02 XX 05

Входные данные:

-- 33 35 -- -- XX XX XX    
-- -- 24 22 -- XX XX XX      
-- -- -- 21 -- -- XX XX
-- 26 -- 13 40 11 XX XX
27 -- -- -- 09 -- 01 XX
XX XX -- -- 18 -- -- XX
XX XX XX XX -- 07 -- --
XX XX XX XX XX XX 05 --

Выход:

32 33 35 36 37 XX XX XX
31 34 24 22 38 XX XX XX
30 25 23 21 12 39 XX XX
29 26 20 13 40 11 XX XX
27 28 14 19 09 10 01 XX
XX XX 15 16 18 08 02 XX
XX XX XX XX 17 07 06 03
XX XX XX XX XX XX 05 04

Входные данные:

XX XX XX XX -- 53 XX XX XX XX
XX XX XX XX -- -- XX XX XX XX
XX XX 56 -- -- -- 30 -- XX XX
XX XX -- -- -- -- -- -- XX XX
XX -- -- 20 22 -- -- -- -- XX
XX 13 -- 23 47 -- 41 -- 34 XX
-- -- 11 18 -- -- -- 42 35 37
-- -- -- -- 05 03 01 -- -- --
XX XX XX XX -- -- XX XX XX XX
XX XX XX XX 07 -- XX XX XX XX

Выход:

XX XX XX XX 52 53 XX XX XX XX
XX XX XX XX 54 51 XX XX XX XX
XX XX 56 55 28 50 30 31 XX XX
XX XX 26 27 21 29 49 32 XX XX
XX 25 24 20 22 48 45 44 33 XX
XX 13 19 23 47 46 41 43 34 XX
14 12 11 18 04 02 40 42 35 37
15 16 17 10 05 03 01 39 38 36
XX XX XX XX 09 06 XX XX XX XX
XX XX XX XX 07 08 XX XX XX XX
Миа Юн Русе
источник
Убедившись, что я понимаю: учитывая сетку с некоторыми неприступными ячейками, найдите гамильтонову траекторию, которая соответствует предварительно заполненным ячейкам?
Geobits
@ AmiRuse Вау. Это выглядит сложно. (Конечно, это исходит от человека, который ненавидит редактирование фотографий.) Приятно знать кого-то еще, у кого в качестве логотипа есть персонаж VG. : O
kirbyfan64sos
Можем ли мы увидеть решение для примера? Другие примеры также будут полезны.
Kade,
Гениально :). У вас также может возникнуть проблема с генератором
Beta Decay
3
Можно ли упростить метод ввода? Может быть, использовать двумерный массив целых чисел, и -1быть стеной, и 0быть пустым? Это облегчило бы задачу сосредоточиться на реальной задаче головоломки, и тогда не было бы сложностей с заполнением чисел нулями или разбором строк.
mbomb007

Ответы:

1

JavaScript (Node.js) , 482 байта

Это решение с использованием грубой силы, оно начинается с 01каждой соседней ячейки и проверяет ее на наличие пустых ячеек ( --) или нужного числа и следование по пути к завершению или невозможности. Если нужный номер существует и не является соседом, он сокращает это решение. Занимает несколько секунд для самой большой сетки.

Это, вероятно, не особенно интересно, но я подумал, что попробую свои силы в поиске решения, прежде чем смотреть на ответы, связанные с Кодексом Розетты, и мне понравилось решать чуть более сложную задачу!

Находит все решения, когда многие существуют . Тело - это функция, которая принимает двумерный массив, и нижний колонтитул обрабатывает ввод в желаемый формат и возвращает результат также в желаемый формат. С радостью предоставлю больше информации (и менее интересную реализацию, если есть интерес).

f=a=>{F=(D,n,j)=>[Z=[].concat(...D),z=Z.indexOf(j),z>-1&&[x=z%w,y=z/w|0],z>-1&&[[x-1,y-1],[x,y-1],[x+1,y-1],[x-1,y],[x+1,y],[x-1,y+1],[x,y+1],[x+1,y+1]]][n];C=q=>q.map(Q=>Q.slice());w=a[0][L='length'];l=F(a,0).filter(c=>c!='XX')[L];R=[];r=(s,d)=>{let n=`0${+s+1}`.slice(-2);N=F(d,2,n);n>l?R.push(C(d)):~F(d,1,s)?(p=F(d,3,s),p.filter(P=>P==N+'')[L]?r(n,C(d)):!~F(d,1,n)?p.map(I=>{[x,y]=I,(x<0||x>w-1||y<0||y>d[L]-1)||d[y][x]=='--'&&(D=C(d),r(D[y][x]=n,D))}):0):0};r('01',a);return R}

Попробуйте онлайн!

Дом Гастингс
источник