(вдохновленный вопросом на Code Review)
Предположим, что два человека играют в Hangman , но вы только подслушали игру и хотите нарисовать текущий статус.
Если в качестве входных данных указать два слова, каждое из которых совпадает со словом [A-Z]+
или [a-z]+
(по вашему выбору), вывести текущее состояние игры палача как искусство ASCII, следуя приведенным ниже правилам.
- Первое слово - это слово, которое нужно угадать, а второе слово - это уже угаданные буквы. Они могут быть приняты в качестве входных данных в любом порядке.
- Предполагаемое слово гарантировано непустое, но уже угаданные буквы могут быть пустыми (т. Е. Как будто это начало игры).
- Игра всегда будет действительной игрой на палачах (т. Е. Угаданные буквы не будут дублироваться, буквы не будут угаданы после окончания игры, вы будете получать только буквы в качестве ввода и т. Д.).
- Ниже рисунка палача должно быть слово, которое нужно угадать,
_
вместо букв еще неизвестных, разделенных пробелами. Например, если нужно угадать словоBOAT
, то под рисунком палача должно быть_ _ _ _
. Если слово былоBOAT
сA
угаданным, то под рисунком должно быть_ _ A _
. - Под словом, которое нужно угадать, должны быть угаданные буквы, которых нет в слове. Они могут быть в любом порядке и могут быть разделены любым неалфавитным разделителем, если это необходимо.
Вот состояния игры палача, от начала до конца игры. Каждое ошибочно угаданное письмо продвигает государство на единицу. Итак, первая ошибочно угаданная буква заставляет голову O
появиться, следующая - тело |
, и т.д.
+---+
| |
|
|
|
|
=========
+---+
| |
O |
|
|
|
=========
+---+
| |
O |
| |
|
|
=========
+---+
| |
O |
/| |
|
|
=========
+---+
| |
O |
/|\ |
|
|
=========
+---+
| |
O |
/|\ |
/ |
|
=========
+---+
| |
O |
/|\ |
/ \ |
|
=========
вход
- Две строки в любом удобном формате , причем первая гарантированно непустая.
- Вы можете принять ввод в любом порядке (например, слово угадать и затем угадать буквы, или наоборот). Пожалуйста, укажите в заявке порядок ввода.
Выход
Результирующее ASCII художественное представление игры палача в процессе, как описано выше, снова в любом удобном формате.
правила
- Начальные или завершающие символы новой строки или пробелы являются необязательными, при условии, что сами символы выстроены правильно.
- Либо полная программа или функция приемлемы. Если функция, вы можете вернуть вывод, а не распечатать его.
- Если возможно, укажите ссылку на среду онлайн-тестирования, чтобы другие люди могли опробовать ваш код!
- Стандартные лазейки запрещены.
- Это код-гольф, поэтому применяются все обычные правила игры в гольф, и выигрывает самый короткий код (в байтах).
Примеры
# 1
BOAT
а также ATG
+---+
| |
O |
|
|
|
=========
_ _ A T
G
# 2
ZEPPELIN
а также
+---+
| |
|
|
|
|
=========
_ _ _ _ _ _ _ _
# 3
ZEPPELIN
а также EATOLINSHR
+---+
| |
O |
/|\ |
/ \ |
|
=========
_ E _ _ E L I N
A T O S H R
# 4
RHYTHM
а также ABCDE
+---+
| |
O |
/|\ |
/ |
|
=========
_ _ _ _ _ _
EDCBA
# 5
BOAT
а также ATOB
+---+
| |
|
|
|
|
=========
B O A T
# 6
AIRPLANE
а также AJKEI
+---+
| |
O |
| |
|
|
=========
A I _ _ _ A _ E
KJ
Ответы:
Python 2 ,
215192184183 байта-8 байт благодаря Рафаэлю Коту
-1 байт благодаря Джонатану Фреху
Попробуйте онлайн!
источник
|
) вместо левой руки (/
), когда есть 2 неправильные буквы: Попробуйте онлайн"\\/"
равно"\/"
.Древесный уголь ,
836968 байтПопробуйте онлайн! Ссылка на подробную версию кода. Редактировать: 14 байтов сохранены путем переключения на
switch
. Сохраняется 1 байт, печатая сингл|
как литерал. Примечание: В то время был поставлен вопрос,switch
не работают вообще в режиме многословного и требуется завершающий«
в малообъемном режиме (текущая версия на TIO не имеет ни ошибку, поэтому он показывает Succinct перевода в 67 байт), в то время какMap
«с ошибки мешали мне использоватьPrint(Join(Map(q, Ternary(Count(h, i), i, "_")), " "));
. К счастью, мне удалось создать kludge для той же длины (и я также попытался переключить другой цикл на карту, но он тоже вышел на той же длине). Объяснение:источник
Python 2 , 220 байт
Попробуйте онлайн!
-35 байт благодаря Raphaël Côté
-20 байт с использованием наборов
-1 байт благодаря micsthepick
источник
translate
но это оказалось дольше лол.for i in range(7):s=s.replace(`i`,'O|/\\/\\'[i] if i<c else ' ')
Это дает вам один цикл, и вы просто выключаете замену, если вы закончите c. Таким образом, вы можете снизить до 251 байта :)Желе ,
7273 байта+1 фиксируя туз игры ошибка , которая показала полную повешенного (изменено
LN
наLạ6
ближе к концу)Диадическая ссылка, содержащая слово слева и (уникальные и внутриигровые) буквы справа и возвращающая список символов, или полная программа, принимающая ввод в качестве аргументов командной строки и печатающая результат.
Попробуйте онлайн!
Как?
Во-первых:
Является ли числовое значение полного повешенного в основании 9, где каждый из 9 цифр представляют один из символов:
<space>
,<newline>
,-
,|
,O
,/
,\
,=
, или+
.остальная часть программы:
источник
BOAT
иATOB
тестовом случае. Попробуйте онлайн!Japt v2 ,
94918381 байт-3 байта от некоторых идей из подхода @ETHproductions к этому .
-8 байт с помощью многострочного вращения строки.
-2 байта с использованием v2.
Принимает оба ввода слов в виде массивов символов, причем сначала вводится слово гадания, а после - угаданные буквы. Неправильные буквы показываются через
,
s. Когда нет неправильных букв, последняя строка пуста (это означает, что вывод содержит дополнительный завершающий перевод строки).Попробуйте онлайн!
объяснение
Неявные:
U
иV
являются входными массивами символов.Запустите массив и нажмите строку формата «зависший человек», повернутую влево на 90 °.
Замените (
r
) каждую цифру (\d
) следующей функцией:Если цифра равна
>=
(¨
), количество неправильных догадок (VkU l
), пробел (S
), в противном случае, получите соответствующую часть тела для этой цифры ("..."gZ
).Поверните подвесного человека вправо на 90 ° и нажмите
=
3 * 3 (³³
) раза на массив.Выдвиньте слово для угадывания с помощью букв mapped (
¡
) либо к себе (X
), если они содержатся вV
(VøX
), либо,_
если нет, и к пробелу добавлены пробелы (¸
).Вставьте угаданные буквы с удаленными буквами в слове для угадывания (
k
) в выходной массив. Закройте массив и присоединитесь с помощью новой строки (·
).Вращение визуализируется:
источник
W
может сработать, так как части тела не отображаются слева направо / сверху вниз. Мне удалось сохранить несколько байтов из вашей версии.05AB1E , 83 байта
Попробуйте онлайн!
Растровое изображение:
05AB1E , 18 байт
Попробуйте онлайн!
Это выдвигает следующий растровый план:
Где следующие дополнительные байты:
05AB1E , 13 байтов
Попробуйте онлайн!
Замените части растрового изображения соответствующими символами, оставляя 5 для замены частей палача позже:
Висельник:
Затем мы рассчитываем, сколько раз пользователь угадал, захватывая буквы, которые находятся на втором входе, но не на первом входе:
05AB1E , 6 байтов
Попробуйте онлайн!
Наконец, мы используем вторичное растровое изображение для замены в зависшем человеке, разделяя его новыми строками и подготавливая его к окончательному выводу:
05AB1E , 26 байт
Попробуйте онлайн!
Это приводит к первым частям, единственные оставшиеся части выводят два слова внизу в формате diff ...
Слова ниже:
Напечатайте первое слово без пропущенных догадок:
05AB1E , 15 байтов
Попробуйте онлайн!
05AB1E , 5 байтов
Попробуйте онлайн!
Вывести рассчитанные пропущенные догадки из ранее мы сохранили в регистре.
источник
/
) перед body (|
). Две неправильные буквы должны привести к отображению частей головы и тела. Попробуйте онлайнЖеле , 86 байт
Попробуйте онлайн!
Вот так ... это было весело. Я никогда не использовал так много
¤
персонажей.Как это работает
источник
C #,
305296 байтСвед 9 байтов благодаря @raznagul.
Попробуйте онлайн!
Полная / Отформатированная версия:
Это также работает для 314 байтов (возможно, еще короче):
источник
g.Select(c=>!w.Contains(c)?c+"":"")
наg.Where(c=>!w.Contains(c))
.JavaScript (ES6),
203196187186185184180177176 байтПринимает ввод как 2 массива отдельных символов в синтаксисе карри.
Попробуйпоиграйисточник
1
,324
,5 6
(см последнего тестового случая).Scala ,
392389 байтЭто может все еще быть в большой степени пригодным для игры в гольф.
Это внутри функции, принимающей
s
и вt
качестве параметров, соs
словом угадывать иt
строкой, содержащей уже опробованные буквы.РЕДАКТИРОВАТЬ:
-1 байт:
t.contains(x) -> t contains x
-1 байт:
s.contains(x) -> s contains x
-1 байт:
.mkString(" ") -> mkString " "
Попробуйте онлайн!
источник
PHP 7, 246 байт
принимает входные данные из аргументов командной строки. Запустите
-nr
или попробуйте онлайн .источник