ASCII Hangman dalam Progress


21

(terinspirasi oleh pertanyaan lebih lanjut tentang Tinjauan Kode)

Misalkan dua orang bermain Hangman , tetapi Anda hanya mendengar permainan dan ingin menggambar status saat ini.

Diberi dua kata sebagai input, di mana kata-kata tersebut cocok [A-Z]+atau [a-z]+(pilihan Anda), menampilkan kondisi permainan hangman saat ini sebagai seni ASCII, mengikuti aturan di bawah ini.

  • Kata pertama adalah kata yang harus ditebak, dan kata kedua adalah huruf yang sudah bisa ditebak. Ini dapat diambil sebagai input dalam urutan apa pun.
  • Kata yang akan ditebak dijamin tidak kosong, tetapi huruf yang sudah ditebak mungkin kosong (yaitu, seolah-olah ini adalah awal permainan).
  • Gim akan selalu menjadi gim hangman yang valid (yaitu, huruf yang diprediksi tidak akan diduplikasi, huruf tidak akan ditebak melewati akhir permainan, Anda hanya akan menerima huruf sebagai masukan, dll.).
  • Di bawah gambar algojo haruslah kata yang akan ditebak, dengan _pengganti huruf yang tidak diketahui, dipisahkan oleh spasi. Misalnya, jika kata yang akan ditebak adalah BOAT, maka di bawah gambar algojo harus _ _ _ _. Jika kata itu BOATdengan Atebakan, maka di bawah gambar harus _ _ A _.
  • Di bawah kata yang akan ditebak haruslah huruf yang sudah menebak yang tidak ada dalam kata. Ini dapat dalam urutan apa pun, dan dapat dipisahkan oleh pemisah non-alfabet, jika diinginkan.

Berikut adalah kondisi permainan hangman, dari awal hingga akhir pertandingan. Setiap huruf yang ditebak salah mengajukan status satu per satu. Jadi, huruf yang salah duga pertama membuat kepala Omuncul, selanjutnya membuat tubuh |muncul, dll.

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

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

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

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

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

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

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

Memasukkan

  • Dua string dalam format apa pun yang nyaman , dengan yang pertama dijamin tidak kosong.
  • Anda dapat mengambil input dalam urutan apa pun (mis., Kata untuk menebak dan kemudian menebak huruf, atau sebaliknya). Silakan sebutkan dalam kiriman Anda, pesanan input.

Keluaran

Representasi seni ASCII yang dihasilkan dari permainan algojo sedang berlangsung, seperti yang dijelaskan di atas, lagi dalam format yang mudah.

Aturan

  • Leading atau trailing newlines atau whitespace semuanya opsional, asalkan karakter itu sendiri berbaris dengan benar.
  • Program lengkap atau fungsi dapat diterima. Jika suatu fungsi, Anda dapat mengembalikan output daripada mencetaknya.
  • Jika memungkinkan, harap sertakan tautan ke lingkungan pengujian online agar orang lain dapat mencoba kode Anda!
  • Celah standar dilarang.
  • Ini adalah sehingga semua aturan golf biasa berlaku, dan kode terpendek (dalam byte) menang.

Contohnya

# 1

BOAT dan ATG

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

# 2

ZEPPELIN dan

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

# 3

ZEPPELIN dan EATOLINSHR

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

# 4

RHYTHM dan ABCDE

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

# 5

BOAT dan ATOB

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

# 6

AIRPLANE dan AJKEI

  +---+
  |   |
  O   |
  |   |
      |
      |
=========
A I _ _ _ A _ E
KJ

huruf yang salah harus mempertahankan urutan input?
Rod

@Rod Tidak, tidak perlu menjaga urutan tebakan yang salah.
AdmBorkBork

2
Tolong tambahkan test case di mana semua huruf menebak dengan benar dan satu di mana semua telah ditebak
Mr. Xcoder

@ Mr.Xcoder Saya telah menambahkan test case # 5 di mana orang tersebut berhasil menebak "BOAT" segera.
AdmBorkBork

Saya telah menambahkan test case yang hanya memiliki 2 huruf yang salah untuk membedakan antara urutan bangunan yang benar dan bangunan dari atas ke bawah / kiri-ke-kanan.
Justin Mariner

Jawaban:


10

Python 2 , 215 192 184 183 byte

-8 byte terima kasih kepada Raphaël Côté
-1 byte terima kasih kepada Jonathan Frech

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)

Cobalah online!


Dengan mengonversi semua \ n ke baris baru dan menggunakan string multiline dengan "" ", dan juga dengan menggunakan" format apa pun yang nyaman "dari input dan mengatur set panggilan kembali ke input, saya dapat turun ke 172 byte.
Raphaël Côté

hmm, bisakah Anda menautkan perubahan? Saya hanya berhasil mencapai 184 byte
Rod

184 bagus: menghapus set dari kode benar-benar merusak output, sehingga tidak berfungsi. Mengubah \ n sehingga mereka menjadi baris baru memang membantu tetapi saya sebenarnya hanya menghapus 3 byte menjadi 189. tio.run/…
Raphaël Côté

1
Saya percaya Anda harus menunjukkan potongan tubuh ( |) alih-alih lengan kiri ( /) ketika ada 2 huruf yang salah: Cobalah secara online
Justin Mariner

"\\/"sama dengan "\/".
Jonathan Frech

8

Arang , 83 69 68 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Sunting: Disimpan 14 byte dengan beralih ke switch. Disimpan 1 byte dengan mencetak tunggal |sebagai literal. Catatan: Pada saat pertanyaan itu ditetapkan, switchtidak berfungsi sama sekali dalam mode Verbose dan membutuhkan trailing «dalam mode Succinct (versi saat ini pada TIO tidak memiliki bug, jadi itu menunjukkan terjemahan Ringkas sebagai 67 byte), sementara Mapitu bug mencegah saya menggunakan Print(Join(Map(q, Ternary(Count(h, i), i, "_")), " "));. Untungnya saya berhasil membuat kludge dengan panjang yang sama (dan memang saya juga mencoba mengalihkan loop lain ke Peta tetapi juga keluar dengan panjang yang sama). Penjelasan:

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
bahasa ini ... itu membuatku takut.
Sergey Grinev

@SergeyGrinev D: kenapa begitu menyeramkan
ASCII

@ ASCII-saja saya perhatikan Anda memperbaiki Peta (string, ekspresi) tetapi Peta (array, ekspresi) masih buggy - ini mengubah array asli saat digunakan sebagai ekspresi daripada sebagai perintah. Cobalah online!
Neil

@ ASCII -hanya hehe, itu ide bagus untuk sebuah bahasa, tapi skrip sepertinya sesuatu yang Lovecraft akan gunakan untuk memanggil mantra Cthulhu.
Sergey Grinev

@Neil Itu perilaku yang dimaksudkan, sebagian besar sehingga memodifikasi kanvas ketika memetakan datatype Sel, tapi saya kira ya Anda sering perlu menggunakan data asli setelah peta, itu harus diperbaiki besok
ASCII-only

7

Python 2 , 220 byte

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)

Cobalah online!

-35 byte berkat Raphaël Côté
-20 byte menggunakan set
-1 byte berkat micsthepick


3
ide yang bagus untuk "ganti" dengan angka :)
V. Courtois

@ V.Courtois Terima kasih :) Saya akan menggunakan translatetapi itu ternyata lebih lama lol.
HyperNeutrino

Hai @HyperNeutrino, kerja bagus dengan pengiriman! Saya pikir bahwa 2 loop pada akhirnya dapat dimasukkan ke dalam satu, menggunakan ini for i in range(7):s=s.replace(`i`,'O|/\\/\\'[i] if i<c else ' '). Ini memberi Anda satu loop dan Anda hanya mengganti ganti jika Anda lebih dari c. Anda dapat menurunkan hingga 251 byte dengan cara ini :)
Raphaël Côté

@ RaphaëlCôté Golf yang bagus. Terima kasih!
HyperNeutrino

c menjadi tidak berguna. Cukup gunakan len (y) dan simpan 4 byte! Kami batu!
Raphaël Côté

5

Jelly ,  72  73 byte

+1 memperbaiki bug permainan ace yang menunjukkan orang yang digantung penuh (diubah LNmenjadi Lạ6mendekati akhir)

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

Tautan diad yang mengambil kata di sebelah kiri dan huruf (unik dan dalam gim) di sebelah kanan dan mengembalikan daftar karakter, atau program lengkap yang mengambil input sebagai argumen baris perintah dan mencetak hasilnya.

Cobalah online!

Bagaimana?

Pertama:

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

Apakah nilai numerik dari orang digantung penuh di dasar 9, di mana masing-masing dari 9 digit merupakan salah satu karakter: <space>, <newline>, -, |, O, /, \, =, atau +.

sisa program:

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

Ini gagal pada BOATdan ATOBuji kasus. Cobalah online!
fireflame241

Ah terima kasih telah menunjukkan itu, saya akan memperbaikinya selama 2 byte ... hanya menulis penjelasan.
Jonathan Allan

dilakukan, dan membuatnya 1 byte.
Jonathan Allan

Catatan: Bentuk lampau untuk "hang" ketika menyangkut orang adalah "hanged", bukan "hung". Hanya nitpick jadi
beri

@ ΗγρεŗN̛ευτŗιͷo Heh, saya telah menggantung di satu tempat dan menggantung di tempat lain dan mengubah yang terakhir. (Saya juga mengatakan "sepenuhnya", seolah-olah orang yang tidak lengkap belum digantung sepenuhnya).
Jonathan Allan

3

Japt v2 , 94 91 83 81 byte

-3 byte dari beberapa ide dari pendekatan @ETHproductions untuk ini .
-8 byte dengan menggunakan rotasi string multiline.
-2 byte dengan menggunakan v2.

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

Membawa input kata sebagai array karakter, dengan kata menebak terlebih dahulu dan huruf menebak kedua. Huruf yang salah ditampilkan dipisahkan oleh ,s. Ketika tidak ada huruf yang salah, baris terakhir kosong (artinya keluaran berisi baris tambahan tambahan).

Cobalah online!

Penjelasan

Tersirat: Udan Vmerupakan array char input.

["..."

Mulai array dan dorong string format man menggantung, diputar ke kiri 90 °.

r\d_

Ganti ( r) setiap digit ( \d) dengan fungsi berikut:

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

Jika digitnya adalah >=( ¨) jumlah tebakan yang salah ( VkU l), spasi ( S), jika tidak, dapatkan bagian tubuh yang sesuai untuk digit itu ( "..."gZ).

z '=³³

Putar pria yang menggantung ke kanan 90 ° dan tekan =berulang 3 * 3 ( ³³) kali ke array.

¡VøX ?X:'_Ã

Dorong kata-ke-tebakan, dengan huruf yang dipetakan ( ¡) ke diri mereka sendiri ( X) jika terdapat dalam V( VøX), atau _jika tidak, dan bergabung dengan spasi ( ¸), ke array.

VkU]·

Dorong huruf-huruf yang ditebak, dengan huruf-huruf dalam kata-ke-tebakan dihapus ( k), ke larik keluaran. Tutup array dan gabungkan dengan baris baru ( ·).

Rotasi divisualisasikan:

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

Saya memiliki sesuatu yang serupa: ethproductions.github.io/japt/… (meskipun sekarang saya perhatikan saya memiliki tiga segmen tengah dimasukkan ke dalam urutan yang salah). Saya melihat beberapa bagian dalam Anda yang lebih pendek dari bagaimana saya melakukannya, mungkin jawaban kami dapat digabungkan ke sesuatu yang lebih pendek.
ETHproduksi

@ ETHproductions Saya tidak berpikir ide kenaikan Anda Wdapat bekerja karena bagian-bagian tubuh tidak muncul kiri-ke-kanan / atas-ke-bawah. Saya dapat menyimpan beberapa byte dari versi Anda.
Justin Mariner

2

05AB1E , 83 byte

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

Cobalah online!


Bitmap:

05AB1E , 18 byte

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

Cobalah online!

Ini mendorong rencana bitmap berikut:

1102220
1131113
1151113
1555113
1515113
1111113
4444444

Di mana byte tambahan berikut:

05AB1E , 13 byte

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

Cobalah online!

Ganti potongan bitmap dengan karakter yang sesuai, tinggalkan 5 untuk mengganti potongan hangman nanti:

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

The Hanged Man:

Selanjutnya, kami menghitung berapa kali pengguna salah menebak dengan mengambil huruf yang ada di input kedua, tetapi tidak di input pertama:

05AB1E , 6 byte

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

Cobalah online!


Akhirnya, kami menggunakan bitmap sekunder untuk menggantikan orang yang digantung, dipisahkan oleh baris baru dan menyiapkannya untuk cetakan akhir:

05AB1E , 26 byte

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.

Cobalah online!

Ini menghasilkan potongan pertama, hanya potongan yang tersisa yang menghasilkan dua kata di bagian bawah dalam format berbeda ...


Kata-kata Di Bawah Ini:

Cetak kata pertama tanpa tebakan yang hilang:

05AB1E , 15 byte

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

Cobalah online!


05AB1E , 5 byte

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

Cobalah online!

Cetak perkiraan tak terjawab yang dihitung dari sebelumnya kami simpan dalam register.


1
Saya sangat menyukai ide bitmap (mencoba mengimplementasikannya dalam jawaban saya sendiri, bahkan), tetapi jawaban Anda menempatkan lengan kiri ( /) di depan badan ( |). Dua huruf yang salah akan menghasilkan bagian kepala dan tubuh yang ditampilkan. Cobalah online
Justin Mariner

1

Jelly , 86 byte

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

Cobalah online!

Wah ... ini menyenangkan. Saya tidak pernah menggunakan banyak ¤karakter.

Bagaimana itu bekerja

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

Ini menarik pria itu dalam urutan yang salah; batang tubuh harus mengikuti kepala, sebelum lengan kiri.
Shaggy

1

C #, 305 296 byte

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 byte berkat @raznagul.

Cobalah online!

Versi Lengkap / Diformat:

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

Ini juga berfungsi untuk 314 byte (mungkin masih bisa lebih pendek):

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

Anda bisa menggantinya g.Select(c=>!w.Contains(c)?c+"":"")dengan g.Where(c=>!w.Contains(c)).
raznagul

@raznagul Terima kasih!
TheLethalCoder

1

JavaScript (ES6), 203 196 187 186 185 184 180 177 176 byte

Mengambil input sebagai 2 array karakter individual dalam sintaks 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

Coba Mainkan

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>


Tengah "tubuh" sepotong harus datang kedua dan lengan kiri ketiga, sehingga angka bagian dari string Anda harus 1, 324, 5 6(lihat kasus tes terakhir).
Justin Mariner

Ups, tidak tahu bagaimana saya melakukannya. Terima kasih telah menunjukkannya, @JustinMariner
Shaggy

0

Scala , 392 389 byte

Ini mungkin masih sangat golf.

Ini ada di dalam fungsi pengambilan sdan tsebagai parameter, dengans kata untuk menebak dant string yang berisi huruf yang sudah dicoba.

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 byte:t.contains(x) -> t contains x
-1 byte:s.contains(x) -> s contains x
-1 byte:.mkString(" ") -> mkString " "

Cobalah online!


0

PHP 7, 246 byte

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;

mengambil input dari argumen baris perintah. Jalankan dengan -nratau coba 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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.