В Minecraft есть 21 предмет, который вы можете изготовить, используя только дерево и предметы из дерева:
топор
лодка
чаша
пуговица
сундук
стол стол
дверь
забор
ворота
мотыга
лестница
кирка
доски прижимная
плита
лопата
знак
плита
лестницы
палка
меч
люк
Этот список предполагает, что 6 различных типов деревянных досок / плит / дверей / и т. Д. все считаются одним и тем же предметом. Другой способ думать об этом - предположить, что у вас есть доступ только к одному виду древесины.
У каждого из этих 21 предметов есть свой рецепт крафта . Мы представим каждый из этих рецептов в виде сетки символов 2 × 2 или 3 × 3 .WPS
. .
Является пустым слотом крафта, W
для дерева , P
для деревянных досок , иS
для палок . Никакие другие символы не нужны для этих конкретных предметов.
Например, это рецепт сундука :
PPP
P.P
PPP
Вызов
Напишите программу, которая берет название одного из наших 21 предметов в точности так, как оно указано выше, и печатает действительный рецепт крафта для этого предмета.
Рецепты крафта являются инвариантными для перевода, поэтому, если входные fence
данные являются действительными:
PSP
PSP
...
...
PSP
PSP
Если рецепт помещается в сетку 2 × 2, вы можете вывести его в сетку 2 × 2 или 3 × 3. например stick
:
.P
.P
...
.P.
.P.
Рецепты также могут быть отражены горизонтально (вокруг вертикальной линии симметрии), хотя это имеет значение только для топора, мотыги и лестницы. например hoe
:
.PP
.S.
.S.
PP.
.S.
.S.
Таким образом, вывод любого рецепта, который вписывается в сетку и имеет правильную форму (игнорируя перевод и зеркальное отображение), - это то, что нужно вашей программе. Это все рецепты, которые официальная игра распознает. (Обратите внимание, что рецепты не могут быть повернуты или отражены вертикально.)
Детали
- Возьмите ввод из стандартного ввода или командной строки. Вы можете предположить, что ввод всегда действителен. Требовать кавычки вокруг ввода (например
"chest"
) хорошо. - Вывести на стандартный вывод (или ближайшую альтернативу) с необязательным завершающим переводом строки.
- Самая короткая подача в байтах побеждает.
пример
Вот список всех входов и примеров выходов:
axe
PP.
SP.
S..
boat
P.P
PPP
...
bowl
P.P
.P.
...
button
P.
..
chest
PPP
P.P
PPP
crafting table
PP
PP
door
PP.
PP.
PP.
fence
PSP
PSP
...
gate
SPS
SPS
...
hoe
PP.
S..
S..
ladder
S.S
SSS
S.S
pickaxe
PPP
.S.
.S.
planks
W.
..
pressure plate
PP
..
shovel
P..
S..
S..
sign
PPP
PPP
.S.
slab
PPP
...
...
stairs
P..
PP.
PPP
stick
P.
P.
sword
P..
P..
S..
trapdoor
PPP
PPP
...
источник
Ответы:
CJam,
100969491 байтStackExchange работает с непечатными файлами, поэтому вместо копирования и вставки здесь используется постоянная ссылка . Кроме того, вот тестовая программа .
(Спасибо @Optimizer за то, что рассказали мне,
f
и @ MartinBüttner за то, что они рассказали мне о модульной индексации CJam.)Cygwin's
hexdump
:объяснение
Для построения рецептов мы используем 13 различных строк (также приведены объяснения, почему это минимально):
Мы кодируем строки через
Z"O>HVa=4a"98bZb+"P.SW"f=3/
, что даетПервый бит
"+WcbKF AQH;_{GM8Lyf=_tmTn"141bDb3/
кодирует рецепты, даваяОбратите внимание, как первая запись
[3 3 8]
, которая является рецептомsign
.l72b970%=
читает во входных данных, затем применяет некоторую магию, чтобы решить, какой рецепт взять из списка. Несмотря на то, что у нас есть только 21 рецепт, их в списке 24 - несколько дополнительных мест соответствуют[1 0 0]
s.После прочтения ввода, выбора рецепта и преобразования рецепта в строки, мы вводим некоторые новые строки
N*
и автоматически печатаем.CJam,
898683 байта... оказывается, что жесткое кодирование всех выходов работает немного лучше в CJam. Я очень разочарован.
Еще раз у нас есть несколько непечатаемых, так что вот постоянная ссылка и тестовая программа .
Cygwin's
hexdump
:объяснение
Выходы кодируются с использованием базы 3, с единственным
W
прикрепляется вперед, прежде чем строка разбивается на 3 с, чтобы получить строки, а строки разбиваются на группы по 3 с, чтобы получить рецепты.Как и выше, для выбора рецепта используется базовое преобразование и волшебство по модулю. Существует 22 рецепта (один неиспользованный), но нам нужно взять по модулю 24, поэтому нам нужно явно указать
24%
это время, а не полагаться на индексирование по модулю.источник
xxd
? Постоянные ссылки не работают в Firefox.JavaScript (ES6), 235
241 262Редактировать Злоупотребление еще большим правилом, согласно которому ввод всегда действителен: есть только 1 элемент, для которого требуется W, и это может быть специальный случай. Таким образом, выходная сетка кодируется как 9-значное число из 3 основных.
235 байт с вводом / выводом через всплывающее окно.
221 байт как проверяемая функция.
Вывод всегда в виде сетки 3х3. С 4 доступными символами вывода сетка кодируется как битовое число 3x3x2 (18). И так как ввод должен быть всегда действительным, строка хранится усеченной до минимума.
Тест в консоли Firefox / FireBug
Выход
источник
Python, 305 байт
объяснение
Комментарий
Этот код, конечно, не самый маленький, но он работает просто отлично. Я удовлетворен. :)
Python, 282 байта
Используя ту же технику для генерации уникального идентификатора, но напрямую ищем рецепт в массиве. Это намного проще и немного компактнее, чем мой первый код.
источник
W.\n..