ASCII Hangman Devam Ediyor


21

( Kod İnceleme konulu bir sorudan ilham aldı )

İki kişinin Hangman oynadığını , ancak yalnızca oyunu duyduktan ve mevcut durumu çizmek istediğinizi varsayalım .

Girdi olarak iki kelime verildiğinde, her birinin [A-Z]+ya da [a-z]+(sizin seçiminiz) kelimelerinin eşleştiği yerde , aşağıdaki kuralları izleyerek, cellat oyununun mevcut durumunu ASCII sanatı olarak gösterir.

  • İlk kelime tahmin edilmesi gereken kelime, ikinci kelime ise önceden tahmin edilen harflerdir. Bunlar herhangi bir sırayla girdi olarak alınabilir.
  • Tahmin edilecek kelimenin boş olmadığı garantilidir, ancak önceden tahmin edilen harfler boş olabilir (örneğin, oyunun başlangıcı gibi).
  • Oyun her zaman geçerli bir cellat oyunudur (yani, tahmin edilen harfler çoğaltılmayacak, harfler oyunun sonundan önce tahmin edilemeyecek, yalnızca girdi olarak harfler alacaksınız).
  • Cellatçı çiziminin altında, _henüz bilinmeyen harfler yerine, boşluklarla ayrılmış, tahmin edilmesi gereken bir kelime olmalı . Örneğin, tahmin edilecek kelime ise BOAT, cellat çiziminin altında olmalıydı _ _ _ _. Kelimesi ise BOATile Atahmin etti sonra çizim olmalıdır aşağıda _ _ A _.
  • Zaten tahmin harfler olmalıdır tahmin edilecek kelimenin altında değil kelime. Bunlar herhangi bir sırada olabilir ve istenirse alfabetik olmayan herhangi bir ayırıcı ile ayrılabilir.

İşte cellat oyununun durumları, başlangıçtan oyun sonuna kadar. Yanlış tahmin edilen her harf devleti birer birer ilerletir. Böylece yanlış tahmin edilen ilk harf başın Ogörünmesini, diğerinin bedenin |görünmesini vb. Sağlar.

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

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

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

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

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

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

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

Giriş

  • İlk boş olmayan garantili, herhangi bir uygun biçimde iki dizeleri .
  • Girişi ya sırayla alabilirsiniz (örneğin, tahmin edilecek kelime ve sonra tahmin edilen harfler veya tersi). Lütfen giriş sırasını gönderiminizde belirtiniz.

Çıktı

Cellat oyununun sonuçta ortaya çıkan ASCII sanat temsili, yukarıda açıklandığı gibi, tekrar uygun bir formatta.

kurallar

  • Lider ya da izleyen yeni satırlar ya da boşluklar, karakterlerin kendileri doğru bir şekilde hizalandığı sürece isteğe bağlıdır.
  • Tam bir program veya bir işlev kabul edilebilir. Bir işlevse, çıktıyı yazdırmak yerine geri gönderebilirsiniz.
  • Mümkünse, lütfen başkalarının kodunuzu deneyebilmesi için çevrimiçi bir test ortamına bir bağlantı ekleyin!
  • Standart boşluklar yasaktır.
  • Bu olduğundan, tüm normal golf kuralları geçerlidir ve en kısa kod (bayt cinsinden) kazanır.

Örnekler

1.

BOAT ve ATG

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

2.

ZEPPELIN ve

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

3.

ZEPPELIN ve EATOLINSHR

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

4.

RHYTHM ve ABCDE

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

5.

BOAT ve ATOB

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

6.

AIRPLANE ve AJKEI

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

yanlış harfler giriş sırasını korumalıdır?
Rod,

@Rod Hayır, yanlış tahminlerin sırasını korumanız gerekmez.
AdmBorkBork

2
Lütfen tüm harflerin doğru tahmin edilebildiği ve hepsinin tahmin edildiği bir test durumu ekleyin
Bay Xcoder

@ Mr.Xcoder, kişinin hemen "BOAT" ı başarıyla tahmin ettiği 5 numaralı test senaryosunu ekledim.
AdmBorkBork

Doğru bina düzeni ile bina yukarıdan aşağıya / soldan sağa arasında ayrım yapmak için yalnızca 2 yanlış harf içeren bir test durumu ekledim.
Justin Mariner

Yanıtlar:


10

Python 2 , 215 192 184 183 bayt

Raphaël Côté -1 byte sayesinde -8 bayt
Jonathan Frech sayesinde

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)

Çevrimiçi deneyin!


Tüm \ n öğelerini satırsonuna dönüştürerek ve "" "ile çok satırlı bir dize kullanarak ve ayrıca girişin" uygun herhangi bir biçimini "kullanarak ve ayarlanmış aramaları tekrar girişe ayarlayarak 172 bayta bırakmayı başardım.
Raphaël Côté

hmm, değişiklikleri bağlayabilir misin? Sadece 184 bayta ulaşmayı başardım
Rod

184 iyidir: setleri koddan kaldırmak aslında çıktıyı bozdu, böylece çalışmadı. \ N'yi
Raphaël Côté

1
2 yanlış harf varken |sol kolun ( ) yerine vücut parçasını ( ) göstermeniz gerektiğine inanıyorum /: Çevrimiçi deneyin
Justin Mariner

"\\/"eşittir "\/".
Jonathan Frech

8

Kömür , 83 69 68 bayt

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

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı bir versiyonudur. Düzenleme: Geçiş yaparak 14 bayt kaydedildi switch. Tek |bir yazı tipi olarak yazdırarak 1 bayt kaydedildi . Not: anda soru kuruldu switchAyrıntılı modunda hiç işi yoktu ve bir sondaki gerekli «, Özlü moduna (67 bayt olarak Özlü çeviri gösterecek şekilde TIO geçerli sürümü, ne hata vardır) iken Maps' böcek kullanmamı engelledi Print(Join(Map(q, Ternary(Count(h, i), i, "_")), " "));. Neyse ki, aynı uzunlukta bir tortu bulmayı başardım (ve aslında diğer döngüyü bir Haritaya değiştirmeyi de denedim ama aynı uzunlukta da çıktı). Açıklama:

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
bu dil ... beni korkutuyor.
Sergey Grinev

@SergeyGrinev D: neden bu kadar korkutucu
ASCII-yalnızca

@ ASCII-Yalnızca sizi Sabit Harita (dize, ifade) fark ettim ama Harita (dizi, ifade) hala sorunlu - komut yerine ifade olarak kullanıldığında orijinal diziyi değiştiriyor. Çevrimiçi deneyin!
Neil,

@ ASCII-sadece hehe, bir dil için harika bir fikir, fakat senaryolar Lovecraft'ın Cthulhu büyüsünü çağırmak için kullanacağı bir şeye benziyor.
Sergey Grinev

Bu davranışını amaçlanan @Neil, çoğunlukla bu yüzden Hücreler veri türü haritalama zaman tuvale değiştirir ama evet sık sık harita sonra orijinal verileri kullanmak gerekirdi yarına kadar hallolacağını tahmin
ASCII sadece

7

Python 2 , 220 bayt

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)

Çevrimiçi deneyin!

-35 Raphael Cote sayesinde bayt
-20 setleri kullanılarak bayt
-1 bayt sayesinde micsthepick için


3
numaraları ile "yerine" için güzel bir fikir :)
V. Courtois

@ V.Courtois Teşekkürler :) Kullanacaktım translateama daha uzun lol olduğu ortaya çıktı.
HyperNeutrino

Merhaba @HyperNeutrino, başvuru ile iyi iş! Sondaki 2 for i in range(7):s=s.replace(`i`,'O|/\\/\\'[i] if i<c else ' ')döngünün bir tane içine konulabileceğini düşünüyorum, bunu kullanarak . Size tek bir döngü verir ve sadece c'yi aşarsanız yenisini değiştirirsiniz. Bu şekilde 251 bayta kadar düşürebilirsiniz :)
Raphaël Côté

@ RaphaëlCôté Güzel golf. Teşekkürler!
HyperNeutrino,

c sadece işe yaramaz hale geldi. Sadece len (y) kullanın ve 4 bayttan tasarruf edin! Sallıyoruz!
Raphaël Côté

5

Jöle ,  72  73 bayt

Tam Asılmış kişiyi gösterdi as oyun hatayı düzeltmeye 1 (değişti LNiçin Lạ6sonuna yakın)

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

Soldaki kelimeyi alan ve sağdaki (benzersiz ve oyun içi) harfleri alan ve bir karakter listesi döndüren ve girişi komut satırı argümanları olarak alan ve sonucu basan tam bir program içeren ikili bir bağlantı.

Çevrimiçi deneyin!

Nasıl?

İlk olarak:

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

9, her basamak karakterlerden birini temsil taban 9, tam Asılı kişinin sayısal değeri: <space>, <newline>, -, |, O, /, \, =, ya da +.

programın geri kalanı:

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

Bu BOATve ATOBtest durumunda başarısız olur . Çevrimiçi deneyin!
fireflame241

Buna dikkat çektiğiniz için teşekkür ederim, 2 byte için düzelteceğim ... sadece bir açıklama yazdım.
Jonathan Allan,

bitti ve bu 1 baytı yapın.
Jonathan Allan,

Not: İnsanlara gelince "asılma" için geçmiş zaman, "asılma" değil "asılma" dır. Sadece bir nitpick yani tazminat için +1 var :)
HyperNeutrino

@ ,Ρ oneN hungτŗιͷo Heh, bir yere asıldım ve başka yere asıldım ve ikincisini değiştirdim. (Ben de "tamamen" dedim, sanki eksik kişi de tamamen asılmamış gibi).
Jonathan Allan,

3

Japt v2 , 94 91 83 81 bayt

@ETHproductions'un bu konuya yaklaşımından bazı fikirlerden -3 bayt .
Çok satırlı döndürme kullanarak -8 bayt.
V2 kullanarak -2 bayt.

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

Her iki sözcük girişini de karakter dizisi olarak alır, ilk önce tahmin sözcüğü ve ikinci harfleri tahmin eder. Hatalı harfler ,s ile ayrılarak gösterilir . Yanlış harfler olmadığında, son satır boştur (çıktının ekstra bir takip eden yeni satır içerdiği anlamına gelir).

Çevrimiçi deneyin!

açıklama

Örtülü: Uve Vgirdi karakter dizileridir.

["..."

Bir diziyi başlatın ve asılı adam biçim dizesini 90 ° sola döndürerek itin.

r\d_

rHer basamağı ( \d) aşağıdaki işlevle değiştirin ( ) :

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

Basamak >=( ¨) ise, yanlış tahminlerin miktarı ( VkU l), boşluk ( S), aksi takdirde, o basamak için uygun vücut kısmını ( "..."gZ) alın.

z '=³³

Asılı adamı 90 ° sağa döndürün ve =tekrar tekrar 3 * 3 ( ³³) kez diziye basın.

¡VøX ?X:'_Ã

¡Tahmini ( X) harfini , V( VøX) içinde ( ) içeriyorsa ya _da boşluklarla ( ¸) birleştirilmişse kendilerine ( ) eşlenen harflerle ( ) karakterlerine, diziye itin .

VkU]·

Tahmini harfleri, tahminde bulunacak sözcük (to to guess k) (çıkarılan sözcük) harfleriyle çıktı dizisine doğru itin . Diziyi kapatın ve newlines ( ·) ile birleştirin .

Rotasyon görselleştirildi:

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

Benzer bir şeyim vardı: ethproductions.github.io/japt/… (şu anda orta sıradaki üç bölümü yanlış sıraya koyduğumu fark ettim). Sizinkinde yaptığımdan daha kısa bazı parçalar görüyorum, belki de cevaplarımız daha da kısa olanlarla birleşebilir.
ETHProductions

@ETHproductions Artış fikrinizin Wişe yarayacağını sanmıyorum çünkü vücut parçaları soldan sağa / yukarıdan aşağıya görünmüyor. Yine de, sürümünüzden birkaç bayt kaydedebildim.
Justin Mariner

2

05AB1E , 83 bayt

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

Çevrimiçi deneyin!


Bitmap:

05AB1E , 18 bayt

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

Çevrimiçi deneyin!

Bu, aşağıdaki bitmap planını zorlar:

1102220
1131113
1151113
1555113
1515113
1111113
4444444

Aşağıdaki ek bayt nerede:

05AB1E , 13 bayt

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

Çevrimiçi deneyin!

Bitmap parçalarını uygun karakterlerle değiştirin, daha sonra cellat parçalarını değiştirmek için 5'leri bırakın:

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

Asılmış Adam:

Daha sonra, kullanıcının ikinci girişteki harfleri yakalayarak kaç kez yanlış tahmin ettiğini hesaplıyoruz, ancak ilk girişte değil:

05AB1E , 6 bayt

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

Çevrimiçi deneyin!


Son olarak, asılan erkeğin yerini almak, yeni satırlarla ayırmak ve son baskıya hazırlamak için ikincil bir bitmap kullanıyoruz:

05AB1E , 26 bayt

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.

Çevrimiçi deneyin!

Bu ilk parçalara neden olur, geriye kalan tek parça alt kısımdaki iki kelimeyi farklı bir formatta çıkarır ...


Aşağıdaki Kelimeler:

Eksiksiz tahminler olmadan ilk kelimeyi yazdır:

05AB1E , 15 bayt

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

Çevrimiçi deneyin!


05AB1E , 5 bayt

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

Çevrimiçi deneyin!

Hesaplanan cevapsız tahminleri daha önce kayıt defterinde sakladığımızdan yazdırın.


1
Bitmap fikrini gerçekten seviyorum (hatta kendi cevabımla uygulamaya çalışıyorum), ama cevabınız sol kolu ( /) gövdeden ( |) önce yerleştirir . İki yanlış harf baş ve vücut parçalarının görünmesine neden olmalıdır. Çevrimiçi deneyin
Justin Mariner,

1

Jöle , 86 bayt

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

Çevrimiçi deneyin!

Vay canına ... bu eğlenceliydi. Hiç bu kadar çok ¤karakter kullanmadım.

Nasıl çalışır

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

Bu, adamı yanlış sıraya göre çeker; gövde, sol koldan önce kafadan sonra gelmelidir.
Shaggy,

1

C #, 305 296 bayt

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

@Raznagul sayesinde 9 bayt svaed.

Çevrimiçi deneyin!

Tam / Biçimli Sürüm:

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

Bu aynı zamanda 314 bayt için de geçerlidir (muhtemelen daha kısa olabilir):

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

Sen yerini alabilir g.Select(c=>!w.Contains(c)?c+"":"")ile g.Where(c=>!w.Contains(c)).
raznagul

@raznagul Teşekkürler!
TheLethalCoder

1

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

Körme sözdiziminde girdiyi ayrı ayrı karakter dizileri olarak alır.

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

Oynatmayı dene

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>


Orta "beden" parçası ikinci gelmeli ve dize sayılar parçası olmalıdır böylece sol kol üçüncü, 1, 324, 5 6(son test vakası bakınız).
Justin Mariner

Hata! Bunu nasıl yaptığımı bilmiyorum. İşaret ettiğiniz için teşekkür ederiz, @JustinMariner
Shaggy

0

Scala , 392 389 bayt

Bu hala ağır golf oynayabilir.

Bu bir fonksiyonun içindedir sve tparametre solarak tahmin etmek için ve tzaten denenmiş harfleri içeren dize ile.

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

Çevrimiçi deneyin!


0

PHP 7, 246 bayt

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;

komut satırı argümanlarından girdi alır. Çevrimiçi olarak çalıştırın -nrveya deneyin .

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.