ASCII Hangman in Progress

21

(zainspirowany pytaniem dotyczącym recenzji kodu)

Załóżmy, że dwie osoby grają w Wisielca , ale podsłuchałeś tylko grę i chcesz narysować obecny status.

Biorąc pod uwagę dwa słowa jako dane wejściowe, przy czym słowa pasują do siebie ( [A-Z]+lub [a-z]+twój wybór), wyświetlają bieżący stan gry kata jako grafikę ASCII, zgodnie z poniższymi zasadami.

  • Pierwsze słowo to słowo do odgadnięcia, a drugie słowo to już odgadnięte litery. Można je traktować jako dane wejściowe w dowolnej kolejności.
  • Słowo, które należy odgadnąć, jest gwarantowane jako niepuste, ale już odgadnięte litery mogą być puste (tj. Jakby to był początek gry).
  • Gra zawsze będzie prawidłową grą kata (tzn. Odgadnięte litery nie będą duplikowane, litery nie będą odgadnięte po zakończeniu gry, otrzymasz tylko litery jako dane wejściowe itp.).
  • Pod rysunkiem wisielca musi znajdować się słowo do odgadnięcia, _w miejscu nieznanych jeszcze liter, oddzielone spacjami. Na przykład, jeśli zgadywanym słowem było BOAT, to poniżej rysunku kata musi być _ _ _ _. Jeśli słowo było BOATz Aodgadnięciem, to poniżej rysunku musi być _ _ A _.
  • Pod słowem do odgadnięcia muszą znajdować się już odgadnięte litery, których nie ma w słowie. Mogą być w dowolnej kolejności i, jeśli to pożądane, mogą być oddzielone dowolnym separatorem niealfabetycznym.

Oto stany gry kata, od początkowego początku do końca gry. Każda błędnie odgadnięta litera przesuwa stan o jeden. Tak więc pierwsza błędnie odgadnięta litera powoduje Opojawienie się głowy , następna sprawia, że |pojawia się ciało itp.

  +---+
  |   |
      |
      |
      |
      |
=========

  +---+
  |   |
  O   |
      |
      |
      |
=========

  +---+
  |   |
  O   |
  |   |
      |
      |
=========

  +---+
  |   |
  O   |
 /|   |
      |
      |
=========

  +---+
  |   |
  O   |
 /|\  |
      |
      |
=========

  +---+
  |   |
  O   |
 /|\  |
 /    |
      |
=========

  +---+
  |   |
  O   |
 /|\  |
 / \  |
      |
=========

Wkład

  • Dwa ciągi w dowolnym wygodnym formacie , z pierwszym gwarantowanym niepustym.
  • Możesz wziąć dane wejściowe w dowolnej kolejności (np. Słowo do odgadnięcia, a następnie odgadnięte litery lub odwrotnie). Podaj w swoim zgłoszeniu kolejność wprowadzania.

Wydajność

Wynikowa reprezentacja ASCII sztuki gry kata w toku, jak opisano powyżej, ponownie w dowolnym dogodnym formacie.

Zasady

  • Wiodące lub końcowe znaki nowej linii lub białe znaki są opcjonalne, o ile same znaki są poprawnie ustawione w linii.
  • Dopuszczalny jest pełny program lub funkcja. Jeśli funkcja, możesz zwrócić dane wyjściowe zamiast je drukować.
  • Jeśli to możliwe, dołącz link do internetowego środowiska testowego, aby inni mogli wypróbować Twój kod!
  • Standardowe luki są zabronione.
  • To jest więc obowiązują wszystkie zwykłe zasady gry w golfa, a wygrywa najkrótszy kod (w bajtach).

Przykłady

# 1

BOAT i ATG

  +---+
  |   |
  O   |
      |
      |
      |
=========
_ _ A T
G

# 2

ZEPPELIN i

  +---+
  |   |
      |
      |
      |
      |
=========
_ _ _ _ _ _ _ _

# 3

ZEPPELIN i EATOLINSHR

  +---+
  |   |
  O   |
 /|\  |
 / \  |
      |
=========
_ E _ _ E L I N
A T O S H R

# 4

RHYTHM i ABCDE

  +---+
  |   |
  O   |
 /|\  |
 /    |
      |
=========
_ _ _ _ _ _
EDCBA

# 5

BOAT i ATOB

  +---+
  |   |
      |
      |
      |
      |
=========
B O A T

# 6

AIRPLANE i AJKEI

  +---+
  |   |
  O   |
  |   |
      |
      |
=========
A I _ _ _ A _ E
KJ
AdmBorkBork
źródło
złe litery muszą zachować porządek wprowadzania?
Rod
@Rod Nie, nie musisz zachowywać kolejności niepoprawnych domysłów.
AdmBorkBork
2
Proszę dodać przypadek testowy, w którym wszystkie litery są poprawnie odgadnięte, i jeden, w którym wszystkie zostały odgadnięte
Pan Xcoder
@ Mr.Xcoder Dodałem przypadek testowy nr 5, w którym osoba od razu zgadła „BOAT”.
AdmBorkBork
Dodałem przypadek testowy, który ma tylko 2 niepoprawne litery, aby odróżnić prawidłową kolejność budowy od budowy od góry do dołu / od lewej do prawej.
Justin Mariner

Odpowiedzi:

10

Python 2 , 215 192 184 183 bajtów

-8 bajtów dzięki Raphaël Côté
-1 bajtów dzięki Jonathanowi Frechowi

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)

Wypróbuj online!

Pręt
źródło
Konwertując wszystkie \ n na nowe wiersze i używając ciągu wieloliniowego z „” ”, a także używając„ dowolnego dogodnego formatu ”wejścia i ustawiając wywołania zestawu z powrotem na wejście, mogłem upuścić do 172 bajtów.
Raphaël Côté
hmm, czy możesz połączyć zmiany? Udało mi się dotrzeć do 184 bajtów
Rod
184 jest dobre: ​​usunięcie zestawów z kodu faktycznie zepsuło wyjście, więc nie działało. Zmiana \ n, aby stały się nowymi wierszami, pomogła, ale w rzeczywistości usunąłem tylko 3 bajty do 189. tio.run/…
Raphaël Côté
1
Uważam, że powinieneś pokazywać ciało ( |) zamiast lewego ramienia ( /), gdy są 2 błędne litery: Wypróbuj online
Justin Mariner
"\\/"jest równy "\/".
Jonathan Frech
8

Węgiel drzewny , 83 69 68 bajtów

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

Wypróbuj online! Link jest do pełnej wersji kodu. Edycja: Zapisano 14 bajtów, przechodząc do switch. Zaoszczędzono 1 bajt, drukując singiel |jako literał. Uwaga: W czasie kwestia została ustalona, switchnie działał w ogóle w trybie gadatliwym i potrzebowała końcowego znaku «w trybie zwięzły (aktualna wersja na TIO ma ani błąd, więc to pokazuje tłumaczenie Zwięzły jako 67 bajtów), natomiast Map„s błędy uniemożliwiły mi użycie Print(Join(Map(q, Ternary(Count(h, i), i, "_")), " "));. Na szczęście udało mi się wymyślić kludge dla tej samej długości (i rzeczywiście próbowałem również zamienić drugą pętlę na mapę, ale ona też wyszła z tej samej długości). Wyjaśnienie:

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 \.
Neil
źródło
2
ten język ... przeraża mnie.
Sergey Grinev,
@SergeyGrinev D: dlaczego to takie straszne
tylko ASCII
@ Tylko ASCII Zauważyłem, że naprawiłeś Mapę (ciąg, wyrażenie), ale Mapa (tablica, wyrażenie) nadal jest wadliwa - zmienia oryginalną tablicę, gdy jest używana jako wyrażenie, a nie polecenie. Wypróbuj online!
Neil
@ Tylko ASCII hehe, to świetny pomysł na język, ale skrypty wyglądają jak coś, czego Lovecraft użyłby do przywołania zaklęcia Cthulhu.
Sergey Grinev
@Neil Takie jest zamierzone zachowanie, głównie dlatego, że modyfikuje płótno podczas mapowania typu danych Komórki, ale myślę, że tak, często trzeba będzie użyć oryginalnych danych po mapie, należy to naprawić do jutra
tylko ASCII
7

Python 2 , 220 bajtów

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)

Wypróbuj online!

-35 bajtów dzięki Raphaël Côté
-20 bajtów przy użyciu zestawów
-1 bajtów dzięki micsthepick

HyperNeutrino
źródło
3
fajny pomysł na „zastąpienie” liczbami :)
V. Courtois
@ V.Courtois Dzięki :) Miałem zamiar użyć, translateale okazało się, że jest to dłuższy lol.
HyperNeutrino
Cześć @HyperNeutrino, dobra robota ze zgłoszeniem! Myślę, że 2 pętle na końcu można połączyć w jedną, używając tego for i in range(7):s=s.replace(`i`,'O|/\\/\\'[i] if i<c else ' '). Daje to pojedynczą pętlę i po prostu wyłączasz zamiennik, jeśli jesteś ponad c. W ten sposób możesz zmniejszyć do 251 bajtów :)
Raphaël Côté
@ RaphaëlCôté Nice golf. Dzięki!
HyperNeutrino
c właśnie stał się bezużyteczny. Wystarczy użyć len (y) i zaoszczędzić 4 bajty! Rządzimy!
Raphaël Côté
5

Galaretka ,  72  73 bajty

+1 ustalające błąd ace gry, które wykazały pełną powieszono osobę (zmieniła LNsię Lạ6pod koniec)

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

Dyadyczny link, który bierze słowo po lewej stronie i litery (unikalne i wewnątrz gry) po prawej stronie i zwraca listę znaków, lub pełny program przyjmujący dane wejściowe jako argumenty wiersza poleceń i wypisujący wynik.

Wypróbuj online!

W jaki sposób?

Po pierwsze:

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

Jest to wartość liczbowa pełnej powieszono osoby w bazie 9, gdzie każdy z 9 cyfr stanowią jedną z postaci: <space>, <newline>, -, |, O, /, \, =, lub +.

reszta programu:

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
Jonathan Allan
źródło
To nie na BOATa ATOBprzypadku testowego. Wypróbuj online!
fireflame241
Ach, dziękuję za wskazanie tego, naprawię to na 2 bajty ... po prostu pisząc wyjaśnienie.
Jonathan Allan
gotowe i uczyń ten 1 bajt.
Jonathan Allan
Uwaga: Czas przeszły dla „zawieszenia” w przypadku ludzi to „powieszenie”, a nie „zawieszenie”. Tylko nitpick, więc +1 dla rekompensaty :)
HyperNeutrino
@ ΗγρεŗN̛ευτŗιͷo Heh, zawiesiłem się w jednym miejscu, powiesiłem w innym i zmieniłem to drugie. (Powiedziałem też „w pełni”, tak jakby niekompletna osoba również nie została całkowicie powieszona).
Jonathan Allan
3

Japt v2 , 94 91 83 81 bajtów

-3 bajty z niektórych pomysłów z podejścia @ETHproductions do tego .
-8 bajtów przy użyciu wielowierszowego obrotu ciągów.
-2 bajty przy użyciu v2.

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

Traktuje oba wprowadzone słowa jako tablice znaków, z odgadnięciem słowa jako pierwszym, a odgadnięciem liter jako drugim. Niepoprawne litery są oddzielone ,s. Gdy nie ma niepoprawnych liter, ostatni wiersz jest pusty (co oznacza, że ​​wynik zawiera dodatkowy znak nowej linii).

Wypróbuj online!

Wyjaśnienie

Domniemane: Ui Vsą tablicami znaków wejściowych.

["..."

Uruchom tablicę i pchnij wiszący łańcuch formatu man, obrócony w lewo o 90 °.

r\d_

Zamień ( r) każdą cyfrę ( \d) na następującą funkcję:

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

Jeśli cyfra to >=( ¨), liczba błędnych zgadnięć ( VkU l), spacja ( S), w przeciwnym razie uzyskaj odpowiednią część ciała dla tej cyfry ( "..."gZ).

z '=³³

Obróć wiszącego mężczyznę w prawo o 90 ° i wciśnij =powtórzone 3 * 3 ( ³³) razy do tablicy.

¡VøX ?X:'_Ã

Wciśnij słowo do zgadnięcia, używając liter odwzorowanych ( ¡) na siebie ( X), jeśli są zawarte w V( VøX), lub _jeśli nie, i połączone spacjami ( ¸) do tablicy.

VkU]·

Wciśnij odgadnięte litery, usuwając litery w zgadywaniu słów ( k), do tablicy wyjściowej. Zamknij tablicę i połącz z newlines ( ·).

Wizualizacja rotacji:

+|||||      +---+
-           |   |
-      ->   0   |
-  35      213  |
+|01       4 5  |
   24             
Justin Mariner
źródło
Miałem coś podobnego: ethproductions.github.io/japt/… (choć teraz zauważam, że środkowe trzy segmenty są ułożone w niewłaściwej kolejności). Widzę w tobie niektóre części, które są krótsze niż to, co zrobiłem, może nasze odpowiedzi mogą połączyć się w coś jeszcze krótszego.
ETHprodukcje
@ETHproductions Nie sądzę, że twój pomysł na zwiększenie Wmoże działać, ponieważ części ciała nie pojawiają się od lewej do prawej / od góry do dołu. Udało mi się jednak zapisać kilka bajtów z twojej wersji.
Justin Mariner
2

05AB1E , 83 bajty

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

Wypróbuj online!


Mapa bitowa:

05AB1E , 18 bajtów

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

Wypróbuj online!

Spycha to następujący plan bitmapy:

1102220
1131113
1151113
1555113
1515113
1111113
4444444

Gdzie następujące dodatkowe bajty:

05AB1E , 13 bajtów

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

Wypróbuj online!

Zamień fragmenty mapy bitowej na odpowiednie znaki, pozostawiając cyfry 5 w celu późniejszego zastąpienia fragmentów kata:

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

Wisielec:

Następnie obliczamy, ile razy użytkownik pomylił się, chwytając litery, które znajdują się w drugim wejściu, ale nie w pierwszym:

05AB1E , 6 bajtów

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

Wypróbuj online!


Na koniec używamy dodatkowej mapy bitowej, aby zastąpić zawieszonego mężczyznę, oddzielając ją znakami nowej linii i przygotowując ją do ostatecznego wydruku:

05AB1E , 26 bajtów

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.

Wypróbuj online!

Powoduje to powstanie pierwszych elementów, a jedynymi pozostałymi fragmentami są dwa słowa na dole w formacie diff ...


Słowa poniżej:

Wydrukuj pierwsze słowo bez brakujących domysłów:

05AB1E , 15 bajtów

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

Wypróbuj online!


05AB1E , 5 bajtów

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

Wypróbuj online!

Wydrukuj obliczone pominięte przypuszczenia z wcześniejszych zapisów w rejestrze.

Urna Magicznej Ośmiornicy
źródło
1
Naprawdę podoba mi się pomysł na bitmapę (nawet próbuję zaimplementować ją w mojej własnej odpowiedzi), ale twoja odpowiedź umieszcza lewe ramię ( /) przed ciałem ( |). Dwie błędne litery powinny spowodować wyświetlenie części głowy i ciała. Wypróbuj online
Justin Mariner
1

Galaretka , 86 bajtów

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

Wypróbuj online!

Uff ... było fajnie. Nigdy nie używałem tylu ¤postaci.

Jak to działa

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
fireflame241
źródło
To pociąga człowieka w niewłaściwej kolejności; tułów powinien podążać za głową, przed lewym ramieniem.
Shaggy,
1

C #, 305 296 bajtów

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;}

Svaed 9 bajtów dzięki @raznagul.

Wypróbuj online!

Pełna / sformatowana wersja:

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();
    }
}

Działa to również dla 314 bajtów (prawdopodobnie może być jeszcze krótszy):

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;}
TheLethalCoder
źródło
Można wymienić g.Select(c=>!w.Contains(c)?c+"":"")z g.Where(c=>!w.Contains(c)).
raznagul
@raznagul Thanks!
TheLethalCoder
1

JavaScript (ES6), 203 196 187 186 185 184 180 180 177 176 bajtów

Pobiera dane wejściowe jako 2 tablice pojedynczych znaków w składni curry.

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

Spróbuj zagrać

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>

Kudłaty
źródło
Środkowa „ciało” kawałek powinien przyjść drugi i trzeci lewa ręka, więc numery częścią łańcucha powinno być 1, 324, 5 6(patrz ostatni przypadek testowy).
Justin Mariner,
Ups, nie wiem jak to zrobiłem. Dzięki za zwrócenie uwagi, @JustinMariner
Shaggy
0

Scala , 392 389 bajtów

To wciąż może być trudne do gry w golfa.

Jest to funkcja przyjmująca si tjako parametry, z sodgadywanym słowem i tciągiem zawierającym wypróbowane litery.

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

EDYCJA:
-1 bajt: t.contains(x) -> t contains x
-1 bajt: s.contains(x) -> s contains x
-1 bajt:.mkString(" ") -> mkString " "

Wypróbuj online!

V. Courtois
źródło
0

PHP 7, 246 bajtów

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;

pobiera dane wejściowe z argumentów wiersza poleceń. Uruchom -nrlub wypróbuj online .

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
Tytus
źródło