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

неправильні букви повинні зберігати порядок введення?
Прут

@Rod Ні, не потрібно зберігати порядок неправильних здогадок.
AdmBorkBork

2
Будь ласка, додайте тестовий випадок, коли всі букви правильно вгадуються та один, де всі були
здогадані

@ Mr.Xcoder Я додав тестовий випадок №5, де людина успішно здогадався про "БОРТ".
AdmBorkBork

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

Відповіді:


10

Python 2 , 215 192 184 183 байт

-8 байт завдяки Raphaël Côté
-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 байт
Rod

184 добре: видалення наборів з коду насправді порушило вихід, так що це не вийшло. Змінення \ n, щоб вони стали новими рядками, допомогло, але я фактично видалив лише 3 байти до 189. tio.run/…
Рафаель Кот

1
Я вважаю, що вам слід показувати частину тіла ( |) замість лівої руки ( /), коли є дві неправильні літери: Спробуйте це в Інтернеті
Джастін Марінер

"\\/"дорівнює "\/".
Джонатан Фрех

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, "_")), " "));. На щастя, мені вдалося придумати клудж такої ж довжини (і справді я також спробував переключити інший цикл на Map, але він також вийшов однаковою довжиною). Пояснення:

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 лише я помітив, що ви виправили Map (рядок, вираз), але Map (масив, вираз) все ще баггі - він змінює оригінальний масив, коли використовується як вираз, а не як команда. Спробуйте в Інтернеті!
Ніл

@ ASCII-тільки hehe, це чудова ідея для мови, але сценарії схожі на те, що Lovecraft використовував би, щоб викликати заклинання Cthulhu.
Сергій Гринєв

@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але це виявилося довше lol.
HyperNeutrino

Привіт @HyperNeutrino, хороша робота з поданням! Я думаю, що дві петлі в кінці можна поставити в одну, використовуючи це for i in range(7):s=s.replace(`i`,'O|/\\/\\'[i] if i<c else ' '). Це дає вам одну петлю, і ви просто вимкніть заміну, якщо у вас є c. Таким чином можна опуститись до 251 байта :)
Рафаель Кот

@ 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вводяться масиви вхідних даних.

["..."

Запустіть масив і натисніть на висячу рядок формату man, повернуту ліворуч на 90 °.

r\d_

Замініть ( r) кожну цифру ( \d) на наступну функцію:

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

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

z '=³³

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

¡VøX ?X:'_Ã

Натисніть слово на здогадку, з літерами, зіставленими ( ¡), або на себе ( 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.

Спробуйте в Інтернеті!

Це призводить до отримання перших фрагментів, причому єдині залишилися фрагменти виводять два слова внизу в різному форматі ...


Слова нижче:

Роздрукуйте перше слово без пропусків:

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
Мені дуже подобається растрова ідея (намагаюся реалізувати її навіть у власній відповіді), але ваша відповідь ставить ліву руку ( /) перед тілом ( |). Дві неправильні букви мають призвести до відображення шматочків голови та тіла. Спробуйте в Інтернеті
Джастін Марінер

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

@raznagul Дякую!
TheLethalCoder

1

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

Приймає введення як 2 масиви окремих символів у синтаксисі currying.

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

EDIT:
-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.