Итак, ваша задача - взять блок 3х3, где -
означают пустые места и *
заполненные пробелы, например:
-**
-*-
*-*
и переставьте блок так, чтобы он *
сформировал X, вот так:
*-*
-*-
*-*
Ввод: квадраты 3х3, как указано выше, они могут быть 3 строками, массивом или как вам угодно.
Вывод: Наименьшее количество ходов для перестановки в X. Каждое движение переворачивает 2 соприкасающихся символа, горизонтальных друг от друга, вертикальных друг от друга или диагональных друг от друга. Если это невозможно, верните любой невозможный вывод, например 999
или -4242
. 5
наименьшее такое число.
Тестовые случаи:
1) Выход: 1
-**
-*-
*-*
2) Выход: -1
-*-
-*-
*-*
3) Выход: 3
---
-**
***
4) Выход: 0
*-*
-*-
*-*
Вы можете заменить пустые и непустые символы, но не забудьте указать, какие именно в вашем сообщении
Код Гольф
Помните, что это кодовый гольф, выигрывает самый короткий код!
источник
*
и наоборот или обменивать их?*
? Можете ли вы добавить еще несколько тестов?*
или меньше 5 делает невозможным.-1
? Например5
(иначе невозможно) или выкидывает ошибку?Ответы:
Python 3 ,
10478 байтПопробуйте онлайн!
Редактировать: применил предложения @Jonathan Allan и @ xnor, чтобы резко уменьшить количество байтов.
Входные данные представляют собой
строковыйсписок длиной 9 с нулями и единицами, из которых единицы -*
s.Вот некоторые наблюдения:
Поэтому мы сначала проверяем, есть ли в строке пять единиц, а затем посчитаем эти вещи:
0124
,0346
,2458
,4678
будучи все из них)n[4]
единицу, и затем проверьте каждую экстракцию диапазона'111'
.max
вместоsum
.источник
count
s наsum
s и'111'
на[1]*3
) TIO (я пытался быть умным сn[i::j]>=[1]*3
циклом, но не нашел более короткого).max(n,n[6:],n[::3],n[2::3])>='1'*3
.Желе , 26 байт
Попробуйте онлайн!
Возьмите плоский список в качестве входных данных.
Жаль, что у Jelly нет «многомерных истинных индексов» ...
T€ṭ€"JẎ
тоже работает, но занимает еще 1 байт.Алгоритм: есть 5 текущих позиций блоков и 5 целей (адресатов), алгоритм пробует каждую из 5! сопоставить и вывести минимальную сумму чебышевского расстояния [источник, пункт назначения].
источник
Хаскелл ,
176132126104 байтаПопробуйте онлайн!
Принимает список целых чисел с 1 как непустой символ. Суммирует количество ненулевых квадратов с четным индексом, затем добавляет 1, если найден какой-либо из шаблонов двойного перемещения (центральный квадрат и крайний столбец / строка полностью заполнены). Я думаю, что последняя часть немного расточительна, возможно, она может быть значительно улучшена по сравнению с этим методом грубой силы. Возвращает 5 (невозможный вывод) для невозможного ввода.
источник
length
тест можно сократить доsum[1|1<-a]
. Функцияs
to:(1-e,n+sum[1|b>e])
которую вы можете встроить для сохранения другого байта. Вы можете использоватьotherwise
охранник в ,m
чтобы сохранить пару()
. Наконец,&&
на верхнем уровне охранник может быть заменен на,
. ...sum
списке понимание, чтобы привести логическое значение к int. Попробуйте онлайн!m
.Попробуйте онлайн!a
должен быть,0
вы не можете использоватьsum a
вместоsum[1|1<-a]
? Попробуйте онлайн!1
s, если не центр0
, вы можете сделать3<-
вместоelem 3$
. Также вы можете использоватьsum.map(a!!)
вместоsum<$>map(a!!)
.Python 2 ,
194192 байтаПопробуйте онлайн!
источник
[0,1,0,1,0,1,1,1,0]
(ожидаемое: 4, фактическое: 13).JavaScript (ES6), 123 байта
Принимает ввод как 9-битное целое число. Решает загадку, наивно применяя правила, которые, как доказано, не являются самым коротким подходом.
Попробуйте онлайн!
комментарии
NB : этот код выполняет некоторые незаконные движения за верхнюю часть доски, когда м умножается на 64. Но они просто игнорируются, поскольку они не могут привести к более короткому решению, чем лучшее юридическое решение.
Ниже приведены 9 битовых масок базового свопа и целевой шаблон. Верхний левый угол - самый важный бит.
источник
Желе , 26 байт
Попробуйте онлайн!
Монадическая ссылка.
Как?
Вдохновленный ответом Bubbler на Python ; игра в гольф, чтобы удовлетворить Jelly ...
источник
JavaScript, 85 байт
Это порт регулярного выражения Bubbler .
Ввод в виде строки 0/1.
Показать фрагмент кода
источник
Stax ,
2322 байтаЗапустите и отладьте его
Эта программа принимает массив
[0, 1]
входных данных и возвращает целое число ходов или пустую строку, если решение невозможно.Рассмотрим это индексы для сетки
1
на входе с, то решения нет, поэтому мы не выводим.1
в этих позициях даст конечный результат.1
в неправильном положении его расстояние равно 1 или 2. Это будет 2, если он окружен другими1
s. Например, если есть1
s в индексах [0, 1, 2, 4], то расстояние для неверного1
равно 2.Имея это в виду, рассмотрим этот псевдокод для получения расстояния, внесенного в результат по индексу 1.
b
от 0 до 15.0 <= b <= 7
расстояние равно 0. Когда8 <= b <= 14
расстояние равно 1. Когдаb == 15
расстояние равно 2. Это можно рассчитать с помощью целочисленного деления наb * 2 / 15
.Таким образом, общее расстояние можно рассчитать, повторив этот процесс 4 раза и вращая сетку между ними.
Запустите этот
источник
Excel,
8681 байтСтарый: когда вывод «невозможно» был
-1
Использует
1
для заполненных и0
для пустых, ввод в диапазонеA1:C3
.Возможно дальше играть в гольф, если мы можем вернуть значения, отличные отВозвращает-1
«невозможно».#DIV/0!
ошибку на невозможных сеткахРаботает по той же логике, что и ответ Bubbler's Python .
источник