पोकर कार्ड के हिस्सों की पहचान करें


20

एक कैसीनो कार्ड के निम्नलिखित डेक का उपयोग करता है। ( *कार्ड सूट में से एक है D, S, Cया H।)

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

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

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

प्रत्येक रात के बाद, पुराने डेक को छोड़ दिया जाता है, और पुन: उपयोग से बचने के लिए आधे में काट दिया जाता है। नतीजतन, कसीनो में कट कार्ड हाफ से भरा एक बड़ा कमरा है।

दुर्भाग्य से अर्थव्यवस्था खराब है, और कैसीनो वित्तीय संकट में है। पैसे बचाने के लिए सबसे उचित चीज रीसाइक्लिंग है, इसलिए कैसीनो मालिक पुराने कार्डों को एक साथ वापस करने का फैसला करते हैं। इसलिए वे एक मशीन बनाने के लिए एक टीम को नियुक्त करते हैं जो ऐसा करेगी।

आप टीम का हिस्सा हैं, और आपका काम कार्ड की पहचान करने में मदद करना है।

एक प्रोग्राम या फ़ंक्शन लिखें जो एक स्ट्रिंग के रूप में एक कार्ड की ASCII कला छवि को आधे में ले जाएगा, और यह किस कार्ड का एक स्ट्रिंग लौटाएगा।

इनपुट एक 11x5 स्ट्रिंग, प्लस लाइन ब्रेक वर्ण (सीआर, एलएफ या सीआरएलएफ, आपको केवल एक का समर्थन करने की आवश्यकता है)। यदि आवश्यक हो तो आप प्रत्येक इनपुट लाइन के अंत में अनुगामी व्हाट्सएप मान सकते हैं। इनपुट में कोई भी अमान्य वर्ण ( _|-HSCDस्पेस और लाइन ब्रेक के अलावा) नहीं होगा।

एक कार्ड आधा इस तरह दिखेगा:

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

जिसे दिल की रानी के रूप में पहचाना जाना चाहिए:

H12

कैसीनो सीमित बजट पर है, इसलिए यह कोड गोल्फ है: सबसे छोटा कार्यक्रम जीतता है।


@ ओप्टिमाइज़र खैर, हम सभी जानते हैं कि केसिनो समाज के गरीब वर्ग हैं :) मैंने इनपुट पर कुछ स्पष्टीकरण दिया है।
user694733

इनपुट के कौन से तरीके स्वीकार्य हैं?
tfitzger

2
@tfitzger आप किसी भी अमान्य / असंभव कार्ड को अनदेखा कर सकते हैं। हम मानते हैं कि केवल वैध कार्ड हैं। इसलिए आपको केवल पहले से उल्लेखित 13 लेआउट्स पर विचार करने की आवश्यकता है।
user694733

2
क्या आउटपुट में दोनों के बीच जगह हो सकती है? पसंद है H 12?
mbomb007

1
@DA हम यह उल्लेख करना भूल गए कि कैसीनो प्रबंधक 1980 के व्यवसाय प्रथाओं के साथ फंस गए हैं।
corsiKa

जवाबों:


34

CJam, 16 15 13 12 बाइट्स

q2*A~<$e`3=(

इसका परीक्षण यहां करें।

व्याख्या

मूल विचार स्ट्रिंग में हेरफेर करना है ताकि हम सीजेएम के अंतर्निहित रन-इन एन्कोडिंग कार्य को हमारे लिए कर सकें।

आइए एक उदाहरण (प्रश्न से एक) के माध्यम से चलते हैं। इनपुट स्ट्रिंग है

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

पायथ (हालिया संस्करण), 16 बाइट्स

p/KsP*2.zJ@S{K2J

इसे ऑनलाइन आज़माएं: पायथ कंपाइलर / एक्ज़ीक्यूटर

स्पष्टीकरण:

       .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)

पायथ 4.0, 13 बाइट्स

jk@.rSsP*2.z2

पायथ में रन-लेंथ-एन्कोडिंग में एक बिल्ड था। लेकिन केवल थोड़े समय के लिए। अगर कोई इसे आज़माना चाहता है: पायथ रेपो को क्लोन करें और कमिट 6a6dccd चेकआउट करें।

यह कार्यक्रम मार्टिन के सीजेएम समाधान के समान ही बहुत काम करता है।

      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

सीजेएम, 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

पायथन 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

पिछला संस्करण जो रेगेक्स (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

एपीएल, 39 बाइट्स

मुझे यकीन है कि इसे बहुत कम बनाया जा सकता है, लेकिन यह एक शुरुआत है।

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

यह एक नामित मौद्रिक फ़ंक्शन बनाता है जो एक इनपुट स्ट्रिंग को स्वीकार करता है और कार्ड के सूट और मूल्य से युक्त स्ट्रिंग लौटाता है। आप इसे ऑनलाइन आज़मा सकते हैं !

स्पष्टीकरण:

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

जे, 26 बाइट्स

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

उपयोग:

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

कोड को बाएं से दाएं पढ़ना:

  • हम इनपुट से सूट को उसमें 5 वें विशिष्ट चरित्र के रूप में प्राप्त करते हैं ( 4{~.)।
  • गणना ( +/) वह संख्या जो वर्ण में कुल होती है ( [) और अंतिम 9 वर्णों के बिना इनपुट ( _9}.[)।
  • अंत में हम सूट ( ]) को परिणामी राशि के स्ट्रिंग निरूपण ( ":) में सम्‍मिलित करते हैं ।

3

पर्ल, 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->(...)

असंगठित + स्पष्टीकरण:

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

सुझावों का हमेशा की तरह स्वागत है!


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.