進行中のASCIIハングマン


21

(コードレビューに関する質問に触発された)

2人がHangmanをプレイしているが、ゲームを聞いたことがあるだけで、現在のステータスを表示したいとします。

入力として2つの単語が与えられ、各単語が一致する[A-Z]+[a-z]+(選択)、以下のルールに従って、ハングマンゲームの現在の状態をASCIIアートとして出力します。

  • 最初の単語は推測される単語で、2番目の単語はすでに推測された文字です。これらは、任意の順序で入力として取得できます。
  • 推測される単語は空でないことが保証されていますが、すでに推測された文字は空である可能性があります(つまり、ゲームの開始のように)。
  • ゲームは常に有効な絞首刑執行人のゲームになります(つまり、推測された文字は複製されず、ゲームの終了後に文字が推測されることはありません。入力としてのみ文字を受け取ります)。
  • 絞首刑執行人の図面の下には、推測する単語を_、スペースで区切られた未知の文字の代わりに配置する必要があります。たとえば、推測される単語がであったBOAT場合、絞首刑執行人の絵の下はでなければなりません_ _ _ _。単語が推測さBOATれた場合、A図面の下にある必要があります_ _ A _
  • 推測される単語の下は、その単語に含まれていない既に推測された文字でなければなりません。これらは任意の順序で指定でき、必要に応じてアルファベット以外の区切り文字で区切ることができます。

ハングマンゲームの最初の開始から終了までの状態を以下に示します。誤って推測された各文字は、状態を1つ進めます。したがって、最初に誤って推測された文字は頭をO表示し、次の文字は体を|表示します。

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

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

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

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

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

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

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

入力

  • 任意の便利な形式の 2つの文字列、最初に空でないことが保証されています。
  • どちらの順序でも入力できます(たとえば、単語を推測してから文字を推測する、またはその逆)。提出物に入力順序を明記してください。

出力

上記のように、進行中の絞首刑執行人ゲームの結果として得られる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
すべての文字が正しく、すべてが推測されている推測して一つであり、テストケースを追加してください
氏Xcoder

@ Mr.Xcoderテストケース#5を追加しました。このテストケースでは、人が「ボート」をすぐに推測できました。
AdmBorkBork

正しい構築順序と上から下へ/左から右への構築を区別するために、間違った文字が2つしかないテストケースを追加しました。
ジャスティンマリナー

回答:


10

Pythonの2215の 192 184 183バイト

ラファエル・コテのおかげで-8バイト
ジョナサン・フレッシュのおかげで-1バイト

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

オンラインでお試しください!


入力の任意の便利なフォーマット『を入力に戻すセットコール設定「、また使用して、』すべての\ n改行に変換し、「」で複数行の文字列を使用して、私は172バイトにドロップすることができた
ラファエルコテ

うーん、変更をリンクできますか?私は184バイトにしか到達できませんでした
ロッド

184は良いことです。コードからセットを削除すると、実際に出力が破損するため、機能しませんでした。改行になるように\ nを変更すると役立ちましたが、実際には3バイトのみを189に削除しました。tio.run/…
ラファエル

1
間違った文字が2つある場合、|左腕()ではなくボディピース()を表示する必要があると思います。オンラインで試してください/
ジャスティンマリナー

"\\/"に等しい"\/"
ジョナサンフレッチ

8

83 69 68バイト

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

オンラインでお試しください!リンクは、コードの詳細バージョンです。編集:に切り替えて14バイトを保存しましたswitch。シングル|をリテラルとして出力することにより、1バイトを保存しました。注:当時の質問が設定された、switch冗長モードですべての作業をしておらず、末尾に必要な«簡潔モードでは(それが67のバイトとして簡潔翻訳を示してTIO上の現在のバージョンは、どちらのバグを持っている)、一方Mapのバグが原因で私は使用できませんPrint(Join(Map(q, Ternary(Count(h, i), i, "_")), " "));でした。幸いなことに、私は同じ長さのクラッジを思いつくことができました(実際、他のループをマップに切り替えようとしましたが、同じ長さで出てきました)。説明:

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(string、expression)を修正したことに気付きましたが、Map(array、expression)はまだバグがあります-コマンドとしてではなく式として使用すると、元の配列が変更されます。オンラインでお試しください!
ニール

@ASCIIのみ、これは言語にとって素晴らしいアイデアですが、スクリプトはLovecraftがクトゥルフの呪文を呼び出すために使用するもののように見えます。
セルゲイグリネフ

それのは、セルのデータ型をマッピングするとき、それはキャンバスを変更し、主にので、行動を意図し、私はあなたが頻繁にマップした後、元のデータを使用する必要があると思いますええ、それは明日で固定する必要がありますね@Neil
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)

オンラインでお試しください!

RaphaëlCôtéに感謝-35バイト
セットを使用して-20バイト
micsthepickに感謝-1バイト


3
数字で「置換」するための良いアイデア:)
V.コートワ

@ V.Courtoisありがとう:)私は使用するつもりでしたtranslateが、それはもっと長くなることが判明しました。
ハイパーニュートリノ

こんにちは、@ HyperNeutrino、投稿でお疲れ様です!これを使用して、最後の2つのループを1つに入れることができると思います。1つのfor i in range(7):s=s.replace(`i`,'O|/\\/\\'[i] if i<c else ' ')ループを提供し、cを超えている場合は、置換を切り替えるだけです。この方法で251バイトまで下げることができます:)
ラファエルコーテ

@RaphaëlCôté素敵なゴルフ。ありがとう!
ハイパーニュートリノ

cは役に立たなくなった。len(y)を使用して4バイト節約するだけです!私たちはロックする!
ラファエルコーテ

5

ゼリー 72  73 バイト

(変更完全絞首刑人示しエースゲームバグ固定+1 LNLạ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 V294の 91 83 81バイト

これに対する@ETHproductionsのアプローチからのいくつかのアイデアからの-3バイト。
複数行の文字列ローテーションを使用して-8バイト。
v2を使用して-2バイト。

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

両方の単語入力を文字の配列として、最初に推測する単語、次に推測する文字を受け取ります。誤った文字は,sで区切られて表示されます。誤った文字がない場合、最後の行は空白です(つまり、出力には余分な末尾の改行が含まれます)。

オンラインでお試しください!

説明

暗黙:UおよびVは入力文字配列です。

["..."

配列を開始し、垂れ下がった男の形式の文字列を左に90度回転して押します。

r\d_

r)すべての数字(\d)を次の関数に置き換えます:

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

数字が>=¨)間違った推測の量(VkU l)、スペース(S)の場合、そうでない場合、その数字の適切な身体部分を取得します("..."gZ)。

z '=³³

垂れ下がった男を右に90°回転させ、=繰り返し3 * 3(³³)回アレイに押し込みます。

¡VøX ?X:'_Ã

単語と推測をプッシュします。文字は()に含まれている場合は文字(¡)にX含まれ、含まれていない場合は空白に結合され()、配列に挿入されます。VVøX_¸

VkU]·

単語から推測への文字が削除された推測文字(k)を出力配列にプッシュします。配列を閉じて、改行(·)で結合します。

視覚化された回転:

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

ethproductions.github.io/japt/…に似たものがありました(ただし、真ん中の3つのセグメントが間違った順序で配置されていることに気付きました)。私はあなたの一部が私がやったよりも短い部分を見ています、おそらく私たちの答えはもっと短いものに結合することができます。
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  |
      |
=======

絞首刑の男:

次に、最初の入力ではなく2番目の入力にある文字をつかむことで、ユーザーが間違った推測をした回数を計算します。

05AB1E、6バイト

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

オンラインでお試しください!


最後に、2番目のビットマップを使用して、絞首刑になった人を代替し、改行で区切り、最終印刷用に準備します。

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.

オンラインでお試しください!

これにより、最初のピースが残り、残りのピースのみが2つの単語をdiff形式で出力します...


以下の言葉:

欠落している推測なしで最初の単語を印刷します。

05AB1E、15バイト

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

オンラインでお試しください!


05AB1E、5バイト

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

オンラインでお試しください!

先にレジスタに保存した計算済みの逃した推測を出力します。


1
私はビットマップのアイデアが本当に好きです(私自身の答えにそれを実装しようとしています)が、あなたの答えは左腕(/)を体(|)の前に置きます。2つの間違った文字を使用すると、頭と体の部分が表示されます。オンラインで試してください
ジャスティンマリナー

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

@raznagulのおかげで9バイトを節約しました。

オンラインでお試しください!

完全/フォーマット済みバージョン:

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つの配列として入力を受け取ります。

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>


中央の「ボディ」ピースが2番目、左腕が3番目になるはずです。したがって、文字列の数字部分は 13245 6(最後のテストケースを参照してください)。
ジャスティンマリナー

おっと、どうやってやったんだ。指摘してくれてありがとう、@ JustinMariner
Shaggy

0

Scala392 389バイト

これはまだかなりゴルフできるかもしれません。

これは、推測する単語と既に試された文字を含む文字列を使用して、パラメータとして、sおよびtを取る関数内にあります。st

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

編集:
-1バイト:t.contains(x) -> t contains x
-1バイト:s.contains(x) -> s contains x
-1バイト:.mkString(" ") -> mkString " "

オンラインでお試しください!


0

PHP 7、246バイト

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

コマンドライン引数から入力を受け取ります。で実行する-nr、オンラインで試してください

for($t="  +---+\n  |   |\n  1   |\n 324  |\n 5 6  |\n      |\n=========\n";
    $c=($w=$argv[1])[$i++]; # 1. loop $c through word
)
    $t.=strstr($g=$argv[2],$c)  # if guessed,
        ?"$c ":"_ ";                # then append letter, else append underscore
for($t.="\n";$c=$g[$k++];)  # 2. loop through guesses
    strstr($w,$c)?:             # if not in word
        $t.=$c.!++$n." ";           # add to output, increment $n
for(;$p++<6;)               # 3. loop through possible false guesses
    $t=strtr($t,$p," O|/\/\\"[  # replace digit:
        $p>$n                   # if above no. of wrong guesses
            ?0:$p                   # then with space, else with hangman character
    ]);
echo$t;                     # 4. print
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.