ASCII Hangman กำลังดำเนินการ


21

(ได้รับแรงบันดาลใจจากคำถามในการตรวจสอบโค้ด)

สมมติว่าคนสองคนกำลังเล่นHangman อยู่แต่คุณเพิ่งได้ยินเกมนี้และต้องการที่จะดึงสถานะปัจจุบัน

ให้คำสองคำในการป้อนข้อมูลโดยที่คำแต่ละคำที่ตรงกัน[A-Z]+หรือ[a-z]+(คุณเลือก) ให้แสดงสถานะปัจจุบันของเกมแฮงก์แมนเป็น ASCII art ตามกฎด้านล่าง

  • คำแรกคือคำที่ต้องเดาและคำที่สองคือตัวอักษรที่เดาแล้ว สิ่งเหล่านี้สามารถนำมาเป็นอินพุตในลำดับใดก็ได้
  • คำที่จะเดาได้รับประกันว่าไม่ว่างเปล่า แต่ตัวอักษรที่เดาแล้วอาจว่างเปล่า (เช่นราวกับว่ามันเป็นจุดเริ่มต้นของเกม)
  • เกมดังกล่าวจะเป็นเกมเพชฌฆาตที่ถูกต้องเสมอ (เช่นตัวอักษรที่เดาได้จะไม่ซ้ำกันตัวอักษรจะไม่ถูกเดาเมื่อสิ้นสุดเกมคุณจะได้รับตัวอักษรเป็นเพียงอินพุตเป็นต้น)
  • ด้านล่างภาพวาดเพชฌฆาตนั้นจะต้องเป็นคำที่ต้องเดาโดย_ที่ไม่ทราบตัวอักษรโดยคั่นด้วยช่องว่าง ตัวอย่างเช่นถ้าคำที่จะเดาได้เป็นแล้วด้านล่างวาดภาพเพชฌฆาตจะต้อง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

ตัวอักษรผิดต้องรักษาลำดับการป้อนข้อมูลหรือไม่
ร็อด

@ อดไม่ต้องรักษาลำดับของการเดาที่ไม่ถูกต้อง
AdmBorkBork

2
โปรดเพิ่มกรณีทดสอบที่คาดเดาตัวอักษรทั้งหมดอย่างถูกต้องและอีกหนึ่งตัวอักษรที่เดาได้
Mr. Xcoder

@ Mr.Xcoder ฉันได้เพิ่มกรณีทดสอบ # 5 ซึ่งบุคคลนั้นเดา "เรือ" ได้สำเร็จ
AdmBorkBork

ฉันได้เพิ่มกรณีทดสอบที่มีตัวอักษรไม่ถูกต้องเพียง 2 ตัวเพื่อแยกความแตกต่างระหว่างลำดับการสร้างที่ถูกต้องและการสร้างจากบนลงล่าง / ซ้ายไปขวา
Justin Mariner

คำตอบ:


10

Python 2 , 215 192 184 183 ไบต์

-8 ไบต์ขอบคุณRaphaëlCôté
-1 ไบต์ขอบคุณ 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)

ลองออนไลน์!


ด้วยการแปลง \ n ทั้งหมดเป็นบรรทัดใหม่และใช้สตริงหลายบรรทัดด้วย "" "และโดยใช้" รูปแบบที่สะดวก "ของอินพุตและการตั้งค่าการโทรกลับเข้าไปในอินพุตทำให้ฉันสามารถลดลงถึง 172 ไบต์
RaphaëlCôté

อืมคุณช่วยเชื่อมโยงการเปลี่ยนแปลงนี้ได้ไหม? ฉันจัดการได้ถึง 184 ไบต์
Rod

184 เป็นสิ่งที่ดี: การลบชุดออกจากโค้ดทำให้เอาต์พุตเสียหายดังนั้นจึงไม่ได้ผล เปลี่ยน \ n เพื่อให้พวกเขากลายเป็นบรรทัดใหม่ไม่ได้ช่วย แต่ที่จริงผมลบออกเพียง 3 ไบต์ 189 tio.run/...
ราฟาเอลCôté

1
ฉันเชื่อว่าคุณควรจะแสดงชิ้นส่วนของร่างกาย ( |) แทนที่จะเป็นแขนซ้าย ( /) เมื่อมีตัวอักษรผิด 2 ตัว: ลองออนไลน์
Justin Mariner

"\\/""\/"จะมีค่าเท่ากับ
Jonathan Frech

8

ถ่าน , 83 69 68 ไบต์

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

ลองออนไลน์! การเชื่อมโยงคือการสร้างรหัสเวอร์ชัน แก้ไข: บันทึกไว้ 14 switchไบต์โดยการเปลี่ยนไป บันทึก 1 ไบต์ด้วยการพิมพ์ตัวเดียว|เป็นตัวอักษร หมายเหตุ: ในขณะคำถามที่ถูกตั้งค่าswitchไม่ได้ทำงานที่ทุกคนในโหมด Verbose และจำเป็นต้องต่อท้าย«ในโหมดกะทัดรัด (รุ่นปัจจุบันใน TIO มีข้อผิดพลาดไม่ดังนั้นจึงแสดงให้เห็นว่าการแปลกะทัดรัดเป็น 67 ไบต์) ในขณะที่Map's Print(Join(Map(q, Ternary(Count(h, i), i, "_")), " "));ข้อบกพร่องที่ทำให้ฉันจากการใช้ โชคดีที่ฉันจัดการกับ kludge สำหรับความยาวเท่ากัน (และแน่นอนฉันพยายามสลับลูปอื่นเป็น 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
ภาษานี้ ... มันทำให้ฉันกลัว
Sergey Grinev

@SergeyGrinev D: ทำไมมันน่ากลัวจัง
เท่านั้น

@ ASCII- เพียงฉันสังเกตเห็นว่าคุณแก้ไข Map (string, expression) แต่ Map (array, expression) ยังคงเป็นบั๊ก - มันจะเปลี่ยน array เดิมเมื่อใช้เป็นนิพจน์แทนที่จะเป็นคำสั่ง ลองออนไลน์!
Neil

@ ASCII เพียงเฮ้มันเป็นความคิดที่ดีสำหรับภาษา แต่สคริปต์ดูเหมือนว่าสิ่งที่เลิฟคราฟท์จะใช้เพื่อเรียกคาถาคธูลู
Sergey Grinev

@ 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 bytes ขอบคุณ RaphaëlCôté
-20 bytes ใช้ set
-1 byte ขอบคุณ micsthepick


3
ความคิดที่ดีสำหรับ "แทนที่" กับตัวเลข :)
วี Courtois

@ V.Courtois ขอบคุณ :) ฉันกำลังจะใช้translateแต่นั่นกลับกลายเป็นฮ่า ๆ ๆ อีกต่อไป
HyperNeutrino

สวัสดี @HyperNeutrino ทำได้ดีมากกับการส่ง! ฉันคิดว่า 2 ลูปที่ส่วนท้ายสามารถใส่เข้าไปได้โดยใช้นี่for i in range(7):s=s.replace(`i`,'O|/\\/\\'[i] if i<c else ' ')มันให้ลูปเดียวและคุณแค่เปลี่ยนการแทนที่ถ้าคุณอยู่เหนือ c คุณสามารถลด 251 ไบต์วิธีนี้ :)
ราฟาเอลCôté

@ RaphaëlCôtéสนามกอล์ฟที่ดี ขอบคุณ!
HyperNeutrino

c กลายเป็นไร้ประโยชน์ เพียงใช้ len (y) และบันทึก 4 ไบต์! พวกเราชาวร๊อค!
RaphaëlCôté

5

เจลลี่ ,  72  73 ไบต์

+1 แก้ไขข้อผิดพลาดของเกม ace ที่แสดงคนที่ถูกแขวนเต็ม (เปลี่ยนLNเป็นLạ6ใกล้ถึงจุดสิ้นสุด)

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

ลิงก์ dyadic ที่ใช้คำทางด้านซ้ายและตัวอักษร (ที่ไม่ซ้ำกันและภายในเกม) ทางด้านขวาและส่งคืนรายการของตัวละครหรือโปรแกรมเต็มรูปแบบรับอินพุตเป็นอาร์กิวเมนต์บรรทัดคำสั่งและพิมพ์ผลลัพธ์

ลองออนไลน์!

อย่างไร?

ประการแรก:

“¥[$⁼Ż⁸½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 ไบต์ ... เพียงแค่เขียนคำอธิบาย
Jonathan Allan

เสร็จแล้วและทำให้ 1 ไบต์
Jonathan Allan

หมายเหตุ: อดีตกาลของ "hang" เมื่อพูดถึงผู้คนคือ "แขวนคอ" ไม่ใช่ "หยุด" เพียง nitpick มี +1 เพื่อชดเชย :)
HyperNeutrino

@ ΗγρεŗN Heo Heh ฉันแขวนในที่เดียวและแขวนในที่อื่นและเปลี่ยนหลัง (ฉันก็พูดว่า "เต็มที่" เหมือนคนที่ไม่สมบูรณ์ก็ไม่ได้ถูกแขวนคอเช่นกัน)
Jonathan Allan

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เป็นอินพุตถ่านอาร์เรย์

["..."

เริ่มต้นอาร์เรย์และผลักดันสตริงรูปแบบคนที่แขวนอยู่หมุนไปทางซ้าย 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 ฉันไม่คิดว่าความคิดของคุณในการเพิ่มขึ้นWสามารถทำงานได้เนื่องจากส่วนต่างๆของร่างกายไม่ปรากฏจากซ้ายไปขวา / จากบนลงล่าง แม้ว่าฉันสามารถบันทึกไม่กี่ไบต์จากรุ่นของคุณ
Justin Mariner

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  |
      |
=======

The Hanged Man:

ต่อไปเราคำนวณจำนวนครั้งที่ผู้ใช้เดาผิดโดยการจับตัวอักษรที่อยู่ในอินพุตที่สอง แต่ไม่ใช่ในอินพุตแรก:

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
ฉันชอบแนวคิดบิตแมป (พยายามนำไปใช้ในคำตอบของฉันเอง) แต่คำตอบของคุณวางแขนซ้าย ( /) ไว้หน้าเนื้อความ ( |) ตัวอักษรสองตัวที่ไม่ถูกต้องควรส่งผลให้ส่วนหัวและร่างกายแสดง ลองออนไลน์
Justin Mariner

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

Svaed 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(ดูกรณีทดสอบที่ผ่านมา)
Justin Mariner

โอ๊ะโอไม่ทราบว่าฉันทำอย่างนั้น ขอบคุณที่ชี้ให้เห็น @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

แก้ไข:
-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.