Фон
Boggle - настольная игра, в которой игроки должны находить английские слова на доске случайных алфавитов 4 на 4. Слова могут быть построены путем выбора последовательно смежных ячеек на доске. («смежный» означает смежный по горизонтали, вертикали или диагонали.) Кроме того, одну и ту же ячейку нельзя использовать более одного раза в слове.
Ниже приведен пример платы:
I L A W
B N G E
I U A O
A S R L
На этой плате BINGO
, ORANGE
и WEARS
являются действительными словами, но SURGE
и RUSSIA
не являются:
SURGE
: На доске нет соседней парыRG
.RUSSIA
:S
нельзя использовать дважды.
Modified Boggle - это модифицированная версия Boggle со следующими правилами:
- Размер доски
n
-by-n
, гдеn
может быть любое положительное целое число. - Каждая ячейка может содержать любой один байт от 0 до 255 включительно.
- Ячейка может использоваться более одного раза, но не два раза подряд .
Использование приведенного выше примера доски, в дополнение к BINGO
, ORANGE
и WEARS
, LANGUAGE
становится допустимой строкой (поскольку G
используется дважды, но не дважды подряд), но RUSSIA
по-прежнему нет (из-за SS
пары).
Вот еще один пример использования фрагмента кода. Строка from itertools import*\n
может быть найдена на следующей доске, но не from itertoosl import*
или from itertools import *
:
f i ' ' s
r t m l
e o o p
\n * t r
Обратите внимание, что вам нужно два o
, чтобы соответствовать oo
последовательности.
Вызов
Напишите функцию или программу, которая по заданной доске Modified Boggle B
(любого размера) и строке s
определяет, s
можно ли ее найти B
.
ограничения
Ваш код должен также помещаться на платформе Modified Boggle b
. Таким образом, вы должны показать доску b
в вашем представлении вместе с вашим кодом, чтобы ваша функция / программа выводила значение true, если оно задано, b
и ваш код в качестве ввода.
счет
Оценка вашего представления - это длина стороны самой маленькой доски, b
где вы можете разместить свой код. Связи нарушаются обычными правилами игры в код , т.е. длиной вашего кода в байтах. Представление с самым низким баллом (по обоим критериям) выигрывает.
Например, from itertools import*\n
имеет оценку 4 (используя плату выше) и длину кода 23 байта.
Вход и выход
Для ввода, вы можете взять любой удобный метод , как B
и s
. Это включает в себя список символов и список кодов, 2D или плоский или все, что имеет смысл. Кроме того, вы можете при желании принять размер платы как часть ввода.
Для вывода вы можете выбрать один из следующих:
- Истинные и ложные значения в соответствии с соглашением вашего языка, или
- Одно предопределенное значение для true и false соответственно.
Пожалуйста, укажите ваш метод ввода / вывода в вашем представлении.
источник
+=+=
что-то вроде этого. Проблема заключается в==
функции вывода ...Ответы:
Python 2, оценка 3, 20972 байта
Полный код является результатом: Попробуйте онлайн!
Устанавливается на доске Boggle:
Расшифровывает и выполняет эту программу:
Который принимает вход как:
['ILAW','BNGE','IUAO','ASRL'], 'LANGUAGE'
источник
CJam , оценка 2, 9351 байт
Попробуйте онлайн! Ожидает ввода, как:
и помещается на доске Boggle:
Создает строку, а
l~:Q,:K;{\:Y;\:X;:C,!_{;QY=X=C0==_{;[X(XX)]K,&[Y(YY)]K,&m*[XY]a-C1>:D;{~DF}%:|}&}|}:F;l:R;K,2m*{~RF}%:|~
затем оценивает ее как код CJam.источник
Чисто , оценка 12 (175 байт)
(Это почти наверняка будет обойдено esolang и, вероятно, нормальными языками.)
Это определяет функцию,
$ :: Int [Char] {#String} -> Bool
которая проверяет, может ли второй аргумент (слово) быть найден в третьем аргументе (на доске) с заданным первым аргументом в виде ширины.На доске, на которой это помещается (см. Ниже),
*
отмечены неиспользуемые места. Есть 16 из них, на плате размером 12 × 12 = 144, то есть 128 эффективно используются (в эффективности на 175/128 ≈ 1,37 ). Может быть возможно получить ту же самую программу на 11 × 11, но это все сделано вручную и очень утомительно; мой босс, вероятно, не был бы счастлив, если бы я попытался получить его на 11 × 11.Попробуйте онлайн (с самой программой в качестве входных данных)!
источник
Java, оценка 23,
538507 байтNSFW
Попробуйте онлайн!
Скомпилировано с JDK 9, но должно работать с 8.
Я не знал, что делать с полями import и static (что на самом деле необходимо), поэтому я решил просто взять весь класс и вставить лямбды в инициализатор. Затем лямбда-выражение
g
может быть применено к двумерному массиву и строке и возвращается,1
если строка находится на доске, а0
если нет (какByte
, 3 символа корочеInteger
).Благодарим этого парня за (в моем случае) более короткий, чем жесткий способ обращения к соседним ячейкам.
Где-то в процессе создания этого чудовища я инвестировал в то, чтобы заставить его работать с лямбдами, и все становилось все хуже и хуже, пока это не произошло. Он даже близко не подходит к другим ответам и, вероятно, даже не близок к оптимальному решению в Java, но, эй, он довольно аккуратно умещается на плате 23x23 (что не оптимально, но, возможно, ближе, чем сама программа) :
Конечно, в тот момент не было никакого смысла пытаться сделать это вручную. В качестве бонуса, вот (наивная) функция, которую я использовал для сжатия кода на доске:
Он отображает свои входные данные на спирали, в которой не работала змеиная реализация , по возможности оставляя символы. Это довольно просто, так что, возможно, его можно улучшить, и я забыл добавить проверку на наличие символов в направлении назад-вправо (обновление: я добавил его, и он дал неправильные результаты) , так что я мог бы, вероятно, сбрить один или два символа, но я сомневаюсь, что это становится на 22x22.
Изменить: Убрал 6 пробелов в местах, где они не должны быть. Сохранено 13 байт, заменив проверку индексов массива на try-catch. Сбрил 12 байтов, переместив размер платы в
int
.источник
Желе , 2316 байт, оценка 3
Попробуйте онлайн!
Совет:
Примечание: это (несколько) тривиальное решение. Благодарим Линн за идею .
Возвращает непустой список, если
s
его можно найтиB
, и пустой список, если нет. Добавленный нижний колонтитул помогает прояснить это.источник
s
не удалось найти, или положительное целое число, если его можно найти. Но правила гласят: «Одно предопределенное значение для true и false соответственно». Или пустые / непустые для ложного / истинного соглашения в желе?