포커 카드의 절반을 식별


20

카지노는 다음과 같은 카드 덱을 사용합니다. ( *카드 한 벌 중 하나입니다 D, S, C또는 H.)

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

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

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

매일 밤, 오래된 데크는 버리고 재사용을 피하기 위해 반으로 자릅니다. 결과적으로 카지노에는 컷 카드 반쪽으로 가득 찬 큰 방이 있습니다.

불행히도 경제는 나쁘고 카지노는 재정적 인 문제에 처해 있습니다. 돈을 절약하는 가장 합리적인 것은 재활용 인 것 같습니다. 따라서 카지노 소유자는 오래된 카드를 다시 테이프로 묶기로 결정합니다. 그래서 그들은 이것을 할 기계를 만들기 위해 팀을 고용합니다.

귀하는 팀의 일원이며 귀하의 임무는 카드 식별을 돕는 것입니다.

문자열의 형태로 카드의 ASCII 아트 이미지를 절반으로 가져 와서 어떤 카드의 문자열을 반환하는 프로그램이나 함수를 작성하십시오.

입력은 11x5 문자열과 줄 바꿈 문자 (CR, LF 또는 CRLF, 하나만 지원하면 됨)입니다. 필요한 경우 각 입력 행의 끝에 공백이 있다고 가정 할 수 있습니다. 입력에 유효하지 않은 문자 ( _|-HSCD공백 및 줄 바꿈 이외의 문자)가 포함되지 않습니다 .

카드 절반은 다음과 같습니다.

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

하트의 여왕으로 식별되어야합니다.

H12

카지노는 예산이 한정되어 있으므로 코드 골프입니다. 가장 짧은 프로그램이 이깁니다.


@Optimizer 글쎄, 우리는 카지노가 사회의 가난한 약자라는 것을 알고 있습니다. :) 입력에 대한 설명을 추가했습니다.
user694733

어떤 입력 방법이 허용됩니까?
tfitzger 2016 년

2
@tfitzger 유효하지 않거나 불가능한 카드는 무시해도됩니다. 유효한 카드 만 있다고 가정합니다. 따라서 앞에서 언급 한 13 가지 레이아웃 만 고려하면됩니다.
user694733

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는 실행 길이 인코딩으로 빌드되었습니다. 그러나 짧은 시간 동안 만. 누군가 이것을 시도하고 싶다면 : Pyth 저장소를 복제하고 커밋 6a6dccd를 체크 아웃하십시오.

이 프로그램은 Martin의 CJam 솔루션과 거의 같은 방식으로 작동합니다.

      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

파이썬 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이 방법을 사용하여 얻을 수있는 한 짧습니다. 더 길다. 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.
}

제안은 언제나처럼 환영합니다!




3

J, 26 바이트

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

용법:

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

왼쪽에서 오른쪽으로 코드 읽기 :

  • 입력에서 5 번째 고유 문자 ( 4{~.) 로 적합을 얻습니다 .
  • (카운트 +/) 문자 입력의 총 발생 수 ( [지난 9 개 문자없이) 입력을 ( _9}.[).
  • 마지막으로 suit ( ])를 결과 합계의 문자열 표현 ( ":)에 연결합니다.

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

제안은 언제나처럼 환영합니다!


2

배쉬 + 코어 유틸리티, 73

sed '$q;s/.*/&&/'|fold -1|sort|uniq -c|sed -nr 's/ +(\w+) ([C-S])/\2\1/p'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.