ASCII Палач в прогрессе


21

(вдохновленный вопросом на 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

неправильные буквы должны сохранять порядок ввода?
Род

@ Род Нет, не нужно сохранять порядок неверных догадок.
AdmBorkBork

2
Пожалуйста, добавьте контрольный пример, в котором все буквы правильно угаданы, и один, в котором все
угаданы

@ Mr.Xcoder Я добавил тестовый пример № 5, в котором человек сразу догадался «ЛОДКА».
AdmBorkBork

Я добавил контрольный пример, в котором есть только 2 неправильные буквы, чтобы различать правильный порядок построения и построение сверху вниз / слева направо.
Джастин Маринер

Ответы:


10

Python 2 , 215 192 184 183 байта

-8 байт благодаря Рафаэлю Коту
-1 байт благодаря Джонатану Фреху

a,b=input()
j=' '.join
s=b-set(a)
print"""  +---+
  |   |
  %s   |
 %s%s%s  |
 %s %s  |
      |
=========
"""%tuple('O/|\/\\'[:len(s)].ljust(6)),j(['_',i][i in b]for i in a),'\n',j(s)

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


Преобразовав все \ n в новые строки и используя многострочную строку с "" ", а также используя" любой удобный формат "ввода и установив набор вызовов обратно на вход, я смог уменьшить размер до 172 байт.
Raphaël Côté

хм, не могли бы вы связать изменения? Мне удалось только достичь 184 байта
Род

184 хорошо: удаление наборов из кода фактически сломало вывод, так что не сработало. Изменение \ n, чтобы они стали символами новой строки, помогло, но я фактически удалил только 3 байта до 189. tio.run/…
Raphaël Côté

1
Я считаю, что вы должны показывать фигуру ( |) вместо левой руки ( /), когда есть 2 неправильные буквы: Попробуйте онлайн
Джастин Маринер,

"\\/"равно "\/".
Джонатан Фрех

8

Древесный уголь , 83 69 68 байт

Fη¿№θι⁰«ι→⊞υι»←⸿Fθ«⎇№ηιι_→»←⸿×=⁸↖=←↑⁵←+←³↓+|FLυ≡ι⁰↓O¹←|²/|³\⁴⸿ /⁵ \«

Попробуйте онлайн! Ссылка на подробную версию кода. Редактировать: 14 байтов сохранены путем переключения на switch. Сохраняется 1 байт, печатая сингл |как литерал. Примечание: В то время был поставлен вопрос, switchне работают вообще в режиме многословного и требуется завершающий «в малообъемном режиме (текущая версия на TIO не имеет ни ошибку, поэтому он показывает Succinct перевода в 67 байт), в то время как Map«с ошибки мешали мне использовать Print(Join(Map(q, Ternary(Count(h, i), i, "_")), " "));. К счастью, мне удалось создать kludge для той же длины (и я также попытался переключить другой цикл на карту, но он тоже вышел на той же длине). Объяснение:

Fη              For each letter in the guess,
  ¿№θι⁰«        if the word to be guessed does not contain the letter,
        ι→      print the failed guess, leave a gap,
          ⊞υι»  and push the letter to the array.

←⸿              Move to the start of the previous line.

Fθ«             For each letter in the word to be guessed,
   ⎇№ηιι        if the letter has been guessed then print it
        _       otherwise print a _.
         →»     Either way, leave a gap.

←⸿              Move to the start of the previous line.

×=⁸             Print 8 =s
   ↖=←          Print a 9th =, moving into position to
      ↑⁵        print 5 |s upwards,
        ←+←³    a + and 3 -s left,
            ↓+| and a + and a | down.

FLυ             Loop once for each incorrect guess.
   ≡ι           Choose what to print based on the loop index.
     ⁰↓O        For the first incorrect guess, print an O.
     ¹←|        For the second incorrect guess, print a |.
     ²/         For the third incorrect guess, print a /.
     ³|\        For the fourth incorrect guess, print a \.
     ⁴⸿ /       For the fifth incorrect guess, print a / on the next line.
     ⁵ \        For the sixth incorrect guess, print another \.

2
этот язык ... это пугает меня.
Сергей Гринев

@SergeyGrinev D: почему это так страшно
только ASCII

@ ASCII-only Я заметил, что вы исправили Map (строка, выражение), но Map (массив, выражение) все еще глючит - он изменяет исходный массив, когда используется как выражение, а не как команда. Попробуйте онлайн!
Нил

@ ASCII-только хе-хе, это отличная идея для языка, но сценарии выглядят как то, что Лавкрафт использовал бы для вызова заклинания Ктулху.
Сергей Гринев

@Neil Это предполагаемое поведение, в основном так, что оно изменяет холст при отображении типа данных Cells, но я думаю, что вам часто нужно использовать исходные данные после карты, они должны быть исправлены к завтрашнему дню
только для ASCII

7

Python 2 , 220 байт

x,y=input()
x=[['_',k][k in y]for k in x]
y-=set(x)
s='''  +---+
  |   |
  0   |
 213  |
 4 5  |
      |
'''
for i in range(6):s=s.replace(`i`,[' ','O|/\\/\\'[i]][len(y)>i])
print s+'='*9+'\n'+' '.join(x)+'\n'+''.join(y)

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

-35 байт благодаря Raphaël Côté
-20 байт с использованием наборов
-1 байт благодаря micsthepick


3
Хорошая идея для «замены» на цифры :)
В. Куртуа

@ V.Courtois Спасибо :) Я собирался использовать, translateно это оказалось дольше лол.
HyperNeutrino

Привет @ HyperNeutrino, хорошая работа с представлением! Я думаю, что 2 цикла в конце могут быть объединены в один, используя это. for i in range(7):s=s.replace(`i`,'O|/\\/\\'[i] if i<c else ' ')Это дает вам один цикл, и вы просто выключаете замену, если вы закончите c. Таким образом, вы можете снизить до 251 байта :)
Raphaël Côté

@ RaphaëlCôté Хороший гольф. Благодарность!
HyperNeutrino

c просто стал бесполезным. Просто используйте len (y) и сохраните 4 байта! Мы "рулим!
Рафаэль Кот

5

Желе ,  72  73 байта

+1 фиксируя туз игры ошибка , которая показала полную повешенного (изменено LNна Lạ6ближе к концу)

e€a⁸o”_$,ḟ@©K€Y,@“¥[$⁼Ż⁸½c¤ṫȷṃl®ḌvNṂeL©?Ḥ’ṃ“ -¶|O/\=+”¤Y⁶“$"÷ȷñŒ‘ḣ®Lạ6¤¤¦

Диадическая ссылка, содержащая слово слева и (уникальные и внутриигровые) буквы справа и возвращающая список символов, или полная программа, принимающая ввод в качестве аргументов командной строки и печатающая результат.

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

Как?

Во-первых:

“¥[$⁼Ż⁸½c¤ṫȷṃl®ḌvNṂeL©?Ḥ’ - base 250 number
                            = 305169639782226039115281574830092231403740634016078676

Является ли числовое значение полного повешенного в основании 9, где каждый из 9 цифр представляют один из символов: <space>, <newline>, -, |, O, /, \, =, или +.

остальная часть программы:

e€a⁸o”_$,ḟ@©K€Y,@“...’ṃ“...”¤Y⁶“...‘ḣ®Lạ6¤¤¦ - Main link word, letters
e€                                           - exists in letters for €ach char in word
  a⁸                                         - and with word (word with 0 at un-guessed)
    o”_$                                     - or with '_' (word with _ at un-guessed)
         ḟ@                                  - filter remove (incorrect guesses)
           ©                                 - copy the result to the register and yield
        ,                                    - pair
            K€                               - join €ach with spaces
              Y                              - join with (a) newlines
                            ¤                - nilad followed by link(s) as a nilad:
                 “...’                       - the number described above
                       “...”                 - list of chars " -¶|O/\=+" (¶ = a newline)
                      ṃ                      - base decompress using the chars as digits
               ,@                            - pair (using swapped @rguments)
                             Y               - join with (a) newlines
                                           ¦ - sparse application:
                              ⁶              -   of: a space character
                                             -   to indexes:
                                          ¤  -     nilad followed by links as a nilad:
                               “...‘         -       literal [36,34,28,26,27,19]
                                         ¤   -       another nilad chain:
                                     ®       -         recall from register
                                      L      -         length (# of bad guesses)
                                       ạ6    -         absolute difference with 6
                                    ḣ        -       head (get the indexes to "erase"
                                             -             by applying the space char)
                                             - as a full program: implicit print

Это терпит неудачу на BOATи ATOBтестовом случае. Попробуйте онлайн!
fireflame241

Ах, спасибо за указание на это, я исправлю это на 2 байта ... просто пишу объяснение.
Джонатан Аллан

сделано, и сделать это 1 байт.
Джонатан Аллан

Примечание: прошедшее время для «повесить», когда речь идет о людях, «повешен», а не «повешен». Просто придурок, так что имейте +1 для компенсации :)
HyperNeutrino

@ ΗγρεŗN̛ευτŗιͷo Хех, я висел в одном месте, висел в другом и менял последнее. (Я также сказал «полностью», как будто неполный человек тоже не был полностью повешен).
Джонатан Аллан

3

Japt v2 , 94 91 83 81 байт

-3 байта от некоторых идей из подхода @ETHproductions к этому .
-8 байт с помощью многострочного вращения строки.
-2 байта с использованием v2.

["+|||||
-
-
-  35
+|01
   24
"r\d_¨VkU l ?S:"O|/\\/\\"gZÃz '=³³¡VøX ?X:'_øVkU]·

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

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

объяснение

Неявные: Uи Vявляются входными массивами символов.

["..."

Запустите массив и нажмите строку формата «зависший человек», повернутую влево на 90 °.

r\d_

Замените ( r) каждую цифру ( \d) следующей функцией:

¨VkU l ?S:"O|/\\/\\"gZÃ

Если цифра равна >=( ¨), количество неправильных догадок ( VkU l), пробел ( S), в противном случае, получите соответствующую часть тела для этой цифры ( "..."gZ).

z '=³³

Поверните подвесного человека вправо на 90 ° и нажмите =3 * 3 ( ³³) раза на массив.

¡VøX ?X:'_Ã

Выдвиньте слово для угадывания с помощью букв mapped ( ¡) либо к себе ( X), если они содержатся в V( VøX), либо, _если нет, и к пробелу добавлены пробелы ( ¸).

VkU]·

Вставьте угаданные буквы с удаленными буквами в слове для угадывания ( k) в выходной массив. Закройте массив и присоединитесь с помощью новой строки ( ·).

Вращение визуализируется:

+|||||      +---+
-           |   |
-      ->   0   |
-  35      213  |
+|01       4 5  |
   24             

У меня было что-то похожее: ethproductions.github.io/japt/… (хотя теперь я замечаю, что средние три сегмента вставлены в неправильном порядке). Я вижу некоторые детали в вашей, которые короче, чем я, возможно, наши ответы могут сочетаться с чем-то еще более коротким.
ETHproductions

@ETHproductions Я не думаю, что ваша идея приращения Wможет сработать, так как части тела не отображаются слева направо / сверху вниз. Мне удалось сохранить несколько байтов из вашей версии.
Джастин Маринер

2

05AB1E , 83 байта

•LO„Ÿ¼Ì‘Šη…ÔÆ#δʒΣ•6B4ÝJ"+ -|="‡²¹SK©Ùg"O/|\/\"s£v5y.;}7ô»„==«5ð:¹D²SKDg'_ׇSðý®Sðý»

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


Растровое изображение:

05AB1E , 18 байт

•LO„Ÿ¼Ì‘Šη…ÔÆ#δʒΣ• # Push number described below in base-10.

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

Это выдвигает следующий растровый план:

1102220
1131113
1151113
1555113
1515113
1111113
4444444

Где следующие дополнительные байты:

05AB1E , 13 байтов

6B            # Convert to base-6.
  4ÝJ         # Push 01234.
     "+ -|="  # Push that string.
            ‡ # Replace numbers with those letters.

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

Замените части растрового изображения соответствующими символами, оставляя 5 для замены частей палача позже:

  +---+
  |   |
  5   |
 555  |
 5 5  |
      |
=======

Висельник:

Затем мы рассчитываем, сколько раз пользователь угадал, захватывая буквы, которые находятся на втором входе, но не на первом входе:

05AB1E , 6 байтов

²¹SK   # Get wrong guesses.
    ©Ù # Store them, and get unique wrong letters.

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


Наконец, мы используем вторичное растровое изображение для замены в зависшем человеке, разделяя его новыми строками и подготавливая его к окончательному выводу:

05AB1E , 26 байт

g                           # Get the number of "messups".                       
 "O/|\/\"s£                 # Only that many chars of the hanged "bitmap".
           v5y.;}           # Replace 5's with "bitmap".
                 7ô»        # Split into rows.
                    „==«5ð: # Remove additional 5's.

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

Это приводит к первым частям, единственные оставшиеся части выводят два слова внизу в формате diff ...


Слова ниже:

Напечатайте первое слово без пропущенных догадок:

05AB1E , 15 байтов

¹D²SK          # Word without the missing guesses.
     Dg'_ׇ    # Replace missing guesses with "_".
           Sðý # Join by spaces.

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


05AB1E , 5 байтов

®     # Print stored missing guesses.
 Sðý  # Separated by spaces.
    » # Print everything in stack with newlines.

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

Вывести рассчитанные пропущенные догадки из ранее мы сохранили в регистре.


1
Мне действительно нравится идея растрового изображения (даже пытаясь реализовать ее в моем собственном ответе), но ваш ответ помещает левую руку ( /) перед body ( |). Две неправильные буквы должны привести к отображению частей головы и тела. Попробуйте онлайн
Джастин Маринер,

1

Желе , 86 байт

3ȷ6Dẋ6Ḍ+“Ȧṇ⁹c’
œ-Lḣ@“Ñæçðøþ‘⁵*$€×“µI,’D¤¤S+¢Dị“+-|/\O ”Us7Y,”=x9¤Y;⁷,œ-ðjɓi@€ị³;”_¤K;⁷

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

Вот так ... это было весело. Я никогда не использовал так много ¤персонажей.

Как это работает

3ȷ6Dẋ6Ḍ+“Ȧṇ⁹c’ (1) the literal 300000030000003000000300000030003001222100
3ȷ6              - literal 3*10^6 = 3000000
   D             - digits
    ẋ6           - repeat six times
      Ḍ          - return to integer: 300000030000003000000300000030000003000000
       +         - add
        “Ȧṇ⁹c’   - literal 2998222100

œ-Lḣ@“Ñæçðøþ‘⁵*$€×“µI,’D¤¤S+¢Dị“+-|/\O ”Us7Y,”=x9¤Y,œ-;⁷ð,ɓi@€ị³;”_¤K;⁷
œ-Lḣ@“Ñæçðøþ‘⁵*$€×“µI,’D¤¤S - representation of the body parts
œ-L                           - wrong letters length
   ḣ@                         - get that many elements from the start of
                        ¤¤    - the literal:
     “Ñæçðøþ‘                   - [16, 22, 23, 24, 29, 31]
             ⁵*$€               - 10 to the power of each of them
                 ×              - multiplies by
                  “µI,’D        - the list [6, 4, 3, 5, 4, 5]
                          S   - sum
+¢Dị“+-|/\O ”Us7Y,”=x9¤;⁷  - complete the man
+                           - add
 ¢                          - the literal 3000000...1222100 calculated by link 1
  D                         - digits
   ị“+-|/\O ”               - index into the string “+-|/\O ”
             Us7Y           - reverse, split into lines of 7, join by linefeeds
                 ,          - append
                  ”=x9¤;⁷     - the string “=========”
                       ;⁷    - add a newline
,œ-                 - append missed letters:
,                      - append
 œ-                    - set difference
ð,ɓi@€ị³;”_¤K;⁷     - append the blanks        
ð,ɓ                   - append
   i@€ị³;”_¤            - each letter if it is included in guesses, _ otherwise
            K         - join by spaces  
             ;⁷       - add a newline

Это привлекает человека в неправильном порядке; торс должен идти за головой, перед левой рукой.
Лохматый

1

C #, 305 296 байт

using System.Linq;w=>g=>{var r=string.Concat(g.Where(c=>!w.Contains(c)));var n=r.Length;return$@"  +---+
  |   |
  {(n>0?"O":" ")}   |
 {(n>2?"/":" ")+(n>1?"|":" ")+(n>3?"\\":" ")}  |
 {(n>4?"/":" ")} {(n>5?"\\":" ")}  |
      |
=========
{string.Join(" ",w.Select(c=>g.Contains(c)?c:'_'))}
"+r;}

Свед 9 байтов благодаря @raznagul.

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

Полная / Отформатированная версия:

using System;
using System.Linq;

class P
{
    static void Main()
    {
        Func<string, Func<string, string>> f = w=>g=>
        {
            var r = string.Concat(g.Select(c => !w.Contains(c) ? c + "" : ""));
            var n = r.Length;

            return $@"  +---+
  |   |
  {(n > 0 ? "O" : " ")}   |
 {(n > 2 ? "/" : " ") + (n > 1 ? "|" : " ") + (n > 3 ? "\\" : " ")}  |
 {(n > 4 ? "/" : " ")} {(n > 5 ? "\\" : " ")}  |
      |
=========
{string.Join(" ", w.Select(c => g.Contains(c) ? c : '_'))}
" + r;
        };

        Console.WriteLine(f("BOAT")("ATG") + "\n");
        Console.WriteLine(f("ZEPPELIN")("") + "\n");
        Console.WriteLine(f("ZEPPELIN")("EATOLINSHR") + "\n");
        Console.WriteLine(f("RHYTHM")("ABCDE") + "\n");
        Console.WriteLine(f("BOAT")("ATOB") + "\n");

        Console.ReadLine();
    }
}

Это также работает для 314 байтов (возможно, еще короче):

using System.Linq;w=>g=>{var r=string.Concat(g.Select(c=>!w.Contains(c)?c+"":""));var s=$@"  +---+
  |   |
  0   |
 213  |
 4 5  |
      |
=========
{string.Join(" ",w.Select(c=>g.Contains(c)?c:'_'))}
"+r;for(int i=0;i<6;++i)s=s.Replace(i+"",i<r.Length?i<1?"O":i<2?"|":i<3?"/":i<4?"\\":i<5?"/":"\\":" ");return s;}

Вы можете заменить g.Select(c=>!w.Contains(c)?c+"":"")на g.Where(c=>!w.Contains(c)).
Разнагул

@raznagul Спасибо!
TheLethalCoder

1

JavaScript (ES6), 203 196 187 186 185 184 180 177 176 байт

Принимает ввод как 2 массива отдельных символов в синтаксисе карри.

a=>g=>`  +---+
  |   |
  1   |
 324  |
 5 6  |
      |
=========
${a.map(x=>g[s="includes"](x)?x:"_")}
`.replace(/\d|,/g,m=>" O|/\\/\\"[!!w[~-m]*~~m],w=g.filter(x=>!a[s](x)))+w

Попробуй поиграй

o.innerText=(f=
a=>g=>`  +---+
  |   |
  1   |
 324  |
 5 6  |
      |
=========
${a.map(x=>g[s="includes"](x)?x:"_")}
`.replace(/\d|,/g,m=>" O|/\\/\\"[!!w[~-m]*~~m],w=g.filter(x=>!a[s](x)))+w)([...i.value="ZEPPELIN"])([...j.value=""])
oninput=_=>o.innerText=f([...i.value.toUpperCase()])([...j.value.toUpperCase()])
label,input{font-family:sans-serif;font-size:14px;height:20px;line-height:20px;vertical-align:middle}input{margin:0 5px 0 0;width:100px;}
<label for=i>Word: </label><input id=i type=password><label for=j>Guesses: </label><input id=j><pre id=o>


Середина «тело» кусок должен прийти второй и третий левый рычаг, так что число часть вашей строки должна быть 1, 324, 5 6(см последнего тестового случая).
Джастин Маринер,

Ой, не знаю, как я это сделал. Спасибо за указание, @JustinMariner
Shaggy

0

Scala , 392 389 байт

Это может все еще быть в большой степени пригодным для игры в гольф.

Это внутри функции, принимающей sи в tкачестве параметров, со sсловом угадывать и tстрокой, содержащей уже опробованные буквы.

var f=s.map(x=>if(t contains x)x else"_") mkString " "
var o="""  +---+
  |   |
  0   |
 213  |
 4 5  |
      |
=========
"""
var c=0
var g=t.filter(x=>if(s contains x){false}else{c match{case 0=>o=o.replace("0","o")
case 1=>o=o.replace("1","|")
case y if y==2|y==5=>o=o.replace(y+"","\\")
case y if y==3|y==4=>o=o.replace(y+"","/")
case _=>()}
c+=1
true})
o.replaceAll("\\d"," ")+f+"\n"+g

РЕДАКТИРОВАТЬ:
-1 байт: t.contains(x) -> t contains x
-1 байт: s.contains(x) -> s contains x
-1 байт:.mkString(" ") -> mkString " "

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


0

PHP 7, 246 байт

for($t="  +---+
  |   |
  1   |
 324  |
 5 6  |
      |
=========
";$c=($w=$argv[1])[$i++];)$t.=strstr($g=$argv[2],$c)?"$c ":"_ ";for($t.="
";$c=$g[$k++];)strstr($w,$c)?:$t.=$c.!++$n." ";for(;$p++<6;)$t=strtr($t,$p," O|/\/\\"[$p>$n?0:$p]);echo$t;

принимает входные данные из аргументов командной строки. Запустите -nrили попробуйте онлайн .

for($t="  +---+\n  |   |\n  1   |\n 324  |\n 5 6  |\n      |\n=========\n";
    $c=($w=$argv[1])[$i++]; # 1. loop $c through word
)
    $t.=strstr($g=$argv[2],$c)  # if guessed,
        ?"$c ":"_ ";                # then append letter, else append underscore
for($t.="\n";$c=$g[$k++];)  # 2. loop through guesses
    strstr($w,$c)?:             # if not in word
        $t.=$c.!++$n." ";           # add to output, increment $n
for(;$p++<6;)               # 3. loop through possible false guesses
    $t=strtr($t,$p," O|/\/\\"[  # replace digit:
        $p>$n                   # if above no. of wrong guesses
            ?0:$p                   # then with space, else with hangman character
    ]);
echo$t;                     # 4. print
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.