ระบุครึ่งหนึ่งของไพ่โป๊กเกอร์


20

คาสิโนใช้สำรับไพ่ต่อไปนี้ ( *เป็นหนึ่งในชุดการ์ดD, S, CหรือH.)

 _________    _________    _________    _________    _________
|         |  |         |  |         |  |         |  |         |
|         |  |         |  |    *    |  |  *   *  |  |  *   *  |
|         |  |    *    |  |         |  |         |  |         |
|    *    |  |         |  |    *    |  |         |  |    *    |
|         |  |    *    |  |         |  |         |  |         |
|         |  |         |  |    *    |  |  *   *  |  |  *   *  |
|_________|  |_________|  |_________|  |_________|  |_________|

 _________    _________    _________    _________    _________
|         |  |         |  |         |  |         |  |         |
|  *   *  |  |  *   *  |  |  *   *  |  |  *   *  |  |  *   *  |
|         |  |         |  |  *   *  |  |  *   *  |  |  *   *  |
|  *   *  |  |  * * *  |  |         |  |    *    |  |  *   *  |
|         |  |         |  |  *   *  |  |  *   *  |  |  *   *  |
|  *   *  |  |  *   *  |  |  *   *  |  |  *   *  |  |  *   *  |
|_________|  |_________|  |_________|  |_________|  |_________|

 _________    _________    _________
|         |  |         |  |         |
|  *   *  |  |  *   *  |  |  * * *  |
|  *   *  |  |  * * *  |  |  *   *  |
|  * * *  |  |  *   *  |  |  * * *  |
|  *   *  |  |  * * *  |  |  *   *  |
|  *   *  |  |  *   *  |  |  * * *  |
|_________|  |_________|  |_________|

หลังจากแต่ละคืนดาดฟ้าเก่าจะถูกทิ้งและตัดครึ่งเพื่อหลีกเลี่ยงการใช้ซ้ำ เป็นผลให้คาสิโนมีห้องขนาดใหญ่ที่เต็มไปด้วยครึ่งตัดการ์ด

น่าเสียดายที่เศรษฐกิจไม่ดีและคาสิโนกำลังประสบปัญหาทางการเงิน สิ่งที่สมเหตุสมผลที่สุดในการประหยัดเงินดูเหมือนจะเป็นการรีไซเคิลดังนั้นเจ้าของคาสิโนจึงตัดสินใจที่จะแปะบัตรเก่ากลับมารวมกัน ดังนั้นพวกเขาจึงจ้างทีมเพื่อสร้างเครื่องจักรที่จะทำสิ่งนี้

คุณเป็นส่วนหนึ่งของทีมและงานของคุณคือช่วยระบุบัตร

เขียนโปรแกรมหรือฟังก์ชั่นที่จะถ่ายภาพ ASCII ของการ์ดครึ่งหนึ่งในรูปแบบของสตริงและจะส่งคืนสตริงของการ์ดที่เป็น

อินพุตเป็นสตริง 11x5 รวมถึงอักขระตัวแบ่งบรรทัด (CR, LF หรือ CRLF คุณจะต้องรองรับเท่านั้น) คุณอาจสมมติช่องว่างท้ายท้ายบรรทัดอินพุตแต่ละบรรทัดหากจำเป็น ข้อมูลที่ป้อนจะไม่มีอักขระที่ไม่ถูกต้อง (นอกเหนือจาก_|-HSCDและช่องว่างและตัวแบ่งบรรทัด)

บัตรครึ่งหนึ่งจะมีลักษณะดังนี้:

 _________
|         |
|  H   H  |
|  H H H  |
---H---H---

ซึ่งควรระบุว่าเป็น Queen of Hearts:

H12

คาสิโนมีงบประมาณ จำกัด ดังนั้นนี่คือรหัสกอล์ฟ: โปรแกรมที่สั้นที่สุดชนะ


@Optimizer เราทุกคนรู้ว่าคาสิโนเป็นผู้ด้อยโอกาสในสังคม :) ฉันได้เพิ่มความกระจ่างเกี่ยวกับอินพุต
user694733

วิธีการอินพุตเป็นที่ยอมรับ?
tfitzger

2
@tfitzger คุณสามารถเพิกเฉยต่อบัตรที่ไม่ถูกต้อง / เป็นไปไม่ได้ เราถือว่ามีบัตรที่ถูกต้องเท่านั้น ดังนั้นคุณจำเป็นต้องพิจารณาเฉพาะ 13 เลย์เอาท์ก่อนหน้านี้เพื่อพิจารณา
694733

2
เอาต์พุตสามารถมีช่องว่างระหว่างทั้งสองได้หรือไม่? ชอบH 12ไหม
mbomb007

1
@DA เราลืมที่จะพูดถึงพวกเขาผู้จัดการคาสิโนติดอยู่กับการดำเนินธุรกิจในปี 1980
corsiKa

คำตอบ:


34

CJam, 16 15 13 12 ไบต์

q2*A~<$e`3=(

ทดสอบที่นี่

คำอธิบาย

แนวคิดพื้นฐานคือการจัดการกับสตริงเช่นที่เราสามารถทำให้การเข้ารหัสที่มีความยาวในตัวของ CJam ทำงานได้สำหรับเรา

ลองดูตัวอย่าง (ตัวอย่างจากคำถาม) สตริงอินพุตคือ

 _________
|         |
|  H   H  |
|  H H H  |
---H---H---

เราทำซ้ำสองครั้ง:

 _________
|         |
|  H   H  |
|  H H H  |
---H---H---
 _________
|         |
|  H   H  |
|  H H H  |
---H---H---

และลบบรรทัดสุดท้าย:

 _________
|         |
|  H   H  |
|  H H H  |
---H---H---
 _________
|         |
|  H   H  |
|  H H H  |

จากนั้นเราจัดเรียงสตริงนี้ ตอนนี้จะมีการขึ้นบรรทัดใหม่จำนวนมากในตอนเริ่มต้นและจากนั้นสิ่งนี้ (ย่อด้วยช่องว่างเล็กน้อยเพื่อหลีกเลี่ยงแถบเลื่อนแนวนอน):

                                    ---------HHHHHHHHHHHH__________________||||||||||||

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

[8 '\n] [46 ' ] [9 '-] [12 'H] [18 '_] [12 '|]]

สิ่งที่เราต้องทำก็คือเลือกองค์ประกอบที่สี่แล้วย้อนกลับ

นี่คือรายละเอียดของรหัสจริง:

q              e# Read the input.
 2*            e# Repeat twice.
   A~<         e# Remove the last 11 characters, i.e. the last line.
      $        e# Flatten into a single string and sort its characters.
       e`      e# Run-length encode: turns the sorted string into 5 pairs of numbers
               e# and characters.
         3=    e# Select the one corresponding to the suit.
           (   e# Pull off the number so that its printed after the suit.

7

Pyth (รุ่นล่าสุด), 16 ไบต์

p/KsP*2.zJ@S{K2J

ลองใช้งานออนไลน์: Pyth Compiler / Executor

คำอธิบาย:

       .z           read all lines from input
     *2             duplicate all lines
    P               remove the last line
   s                combine all lines to a big string
  K                 store in K

            {K      set(K), removes duplicate chars
           S        sort, this will result in the list [' ', '-', color, '_', '|']
          @   2     take the element at index 2
         J          and store it in J

p/K      J     J    print J + (count J in K)

Pyth 4.0, 13 ไบต์

jk@.rSsP*2.z2

Pyth มีการสร้างในการเข้ารหัสความยาวรัน แต่เพียงช่วงเวลาสั้น ๆ หากมีคนต้องการลองนี้: Clone the Pyth repo และเช็คเอาต์ commit 6a6dccd

โปรแกรมนี้ทำงานคล้ายกับโซลูชั่น CJam ของ Martin

      sP*2.z        like in the 16 bytes solution
     S              sort
   .r               run-length-encoding
  @         2       element at index 2 
jk                  join by "" and print

6

CJam, 22 ไบต์

qN/)'--\s"_| "-_]s)\,)

ดูตัวเลือกการเล่นกอล์ฟเพิ่มเติมได้ที่นี่ นี่คือวิธีการทำงาน:

qN/                       e# Read the entire input from STDIN and split it on new lines
   )'--                   e# Take out the last line and remove - from it
       \                  e# Stack contains the half HSDC now. We swap this with rest of
                          e# the input
        s                 e# join the rest of the input array to a single string
         "_| "-           e# Remove anything other than HSCD
               _]s        e# Copy this and convert everything on stack into a single
                          e# string. Now we have the total HSCD in the complete card
                  )       e# Take out the last of HSCD. This serves as first character of
                          e# the output
                   \,)    e# Swap and take length of rest of the HSCD. Increment it by 1
                          e# as we removed 1 in the previous step.

ลองออนไลน์ได้ที่นี่


3

Python 2, 80 68 66 ไบต์

ลองที่นี่

ทำสำเนาอินพุตค้นหาตัวอักษรทั้งหมดในทุกบรรทัดยกเว้นบรรทัดสุดท้าย (ตัวอักษรคู่แรกในบรรทัดสุดท้ายไม่สามารถเป็นตัวอักษรได้) จากนั้นพิมพ์ตัวอักษรตัวแรกและจำนวนตัวอักษร

s=(input()*2)[:-9]
for c in"CDHS":
    if c in s:print c+`s.count(c)`

อินพุต :' _________\n| |\n| H H |\n| H H H |\n---H---H---'

ผลผลิต :H12

รุ่นก่อนหน้าที่ใช้ regex (68):

import re
r=re.findall('[C-S]',(input()*2)[:-9])
print r[0]+`len(r)`

ขอบคุณ Sp3000 สำหรับความช่วยเหลือของกอล์ฟ


@ Sp3000 นี่มันสั้นที่สุดเท่าที่จะทำได้โดยใช้วิธีนั้น มันนานกว่า 15 i=input()*2;s="CDSH";r=[i[:-9].count(x)for x in s];n=sum(r);print s[r.index(n)]+`n`
mbomb007

อาฉันไม่สามารถหาวิธีที่จะได้รับชุดที่ดีกว่า
mbomb007

3

APL, 39 ไบต์

ฉันแน่ใจว่านี่อาจสั้นกว่านี้มาก แต่เป็นการเริ่มต้น

f←{X←(∊⍵[⍳46]⍵)∩'HDCS'⋄((⊃X),0⍕⍴X)~' '}

สิ่งนี้จะสร้างฟังก์ชั่น monadic ที่มีชื่อซึ่งยอมรับสตริงอินพุตและส่งคืนสตริงที่มีสูทและค่าของการ์ด คุณสามารถลองออนไลน์ได้ !

คำอธิบาย:

f ← {                         ⍝ Define the function f.
     X←                       ⍝ Assign X as
       (∊⍵[⍳46]⍵)             ⍝ the right input duplicated, no center line
                 ∩ 'HDCS'     ⍝ intersect 'HDCS'.
                              ⍝ X is now a vector like 'HHHHHH'.
     ((⊃X)                    ⍝ Return the first element of X
          ,                   ⍝ concatenated with
           0⍕⍴X)              ⍝ the length of X as a string
                ~' '          ⍝ without a space.
}

ข้อเสนอแนะยินดีต้อนรับเช่นเคย!


แล้วไง(⊃,≢)'HDCS'∩⍨¯11↓,⍨ล่ะ
Adám

สั้นลง แต่มีจำนวนมากขึ้น:5⌷{⍺,≢⍵}⌸¯11↓,⍨⍞
Adám

3

J, 26 ไบต์

(],[:":@(+/)]=[,_9}.[)4{~.

การใช้งาน:

   ((],[:":@(+/)]=[,_9}.[)4{~.) input
H12

อ่านรหัสจากซ้ายไปขวา:

  • เราได้ชุดจากอินพุตเป็นอักขระที่แตกต่างที่ 5 ในนั้น ( 4{~.)
  • นับ ( +/) จำนวนอักขระที่เกิดขึ้นทั้งหมดในอินพุต ( [) และอินพุตที่ไม่มีอักขระ 9 ตัวสุดท้าย ( _9}.[)
  • ในที่สุดเราก็เชื่อมสูท ( ]) เข้ากับการแสดงสตริงของผลรวม ( ":)

3

Perl, 75 ไบต์

@r=();foreach ((<>)[2,2,3,3,4]){push@r,$1 while(/([CDSH])/g)}print $r[0].@r

เวอร์ชันที่ไม่ดี

@r=(); # Collect matches in this array
foreach ((<>)               # Read stdin as a single array of lines
                            # Note that for a subroutine use @_ for (<>)
         [2,2,3,3,4]) {     # Look at the 3rd, 4th rows twice, 5th row once
    push @r, $1             # Collect individual character matches
        while (/([CDSH])/g) # As long as one of the suits matches
}
print $r[0]                 # Each element of array is matching letter
      .@r                   # Array reference in scalar context gives length

2

จูเลีย 58 ไบต์

s->(m=matchall(r"[A-Z]",s*s[1:46]);join([m[1],length(m)]))

สิ่งนี้จะสร้างฟังก์ชั่นที่ไม่มีชื่อที่ใช้สตริงเป็นอินพุตและส่งคืนชุดและค่าของการ์ด f=s->(...)เรียกว่าให้มันชื่อเช่น

คำอธิบาย Ungolfed +:

function f(s)
    # Find all alphabetic characters in the input joined with itself
    # excluding the second center line, which begins at the 47th
    # character

    m = matchall(r"[A-Z]", s * s[1:46])

    # Take the first match and the number of matches as an array,
    # collapse the array into a string, and return it

    join([m[1], length(m)])
end

ข้อเสนอแนะยินดีต้อนรับเช่นเคย!


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.