Xác định một nửa số thẻ Poker


20

Một sòng bạc sử dụng bộ bài sau đây. ( *Là một trong những bộ quần áo thẻ D, S, Choặc H.)

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

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

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

Sau mỗi đêm, sàn cũ bị loại bỏ, và cắt làm đôi để tránh tái sử dụng. Kết quả là, sòng bạc có một căn phòng lớn đầy những nửa thẻ cắt.

Thật không may nền kinh tế là xấu, và sòng bạc đang gặp rắc rối về tài chính. Điều hợp lý nhất để tiết kiệm tiền dường như là tái chế, vì vậy các chủ sòng bạc quyết định dán lại các thẻ cũ lại với nhau. Vì vậy, họ thuê một đội để chế tạo một cỗ máy sẽ làm việc này.

Bạn là một phần của nhóm và công việc của bạn là giúp xác định thẻ.

Viết chương trình hoặc chức năng sẽ lấy hình ảnh nghệ thuật ASCII của một nửa thẻ dưới dạng một chuỗi và sẽ trả về một chuỗi của thẻ đó là gì.

Đầu vào là một chuỗi 11x5, cộng với các ký tự ngắt dòng (CR, LF hoặc CRLF, bạn chỉ cần hỗ trợ một chuỗi). Bạn có thể giả sử khoảng trắng ở cuối mỗi dòng đầu vào, nếu cần. Đầu vào sẽ không chứa bất kỳ ký tự không hợp lệ nào (bất kỳ ký tự nào ngoài dấu _|-HSCDcách và dấu cách).

Một nửa thẻ sẽ trông như thế này:

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

cần được xác định là Nữ hoàng của những trái tim:

H12

Sòng bạc có ngân sách hạn chế, vì vậy đây là mã golf: chương trình ngắn nhất sẽ thắng.


@Optimizer Vâng, tất cả chúng ta đều biết sòng bạc là những kẻ yếu kém trong xã hội :) Tôi đã thêm một số giải thích về đầu vào.
dùng694733

phương pháp đầu vào nào được chấp nhận?
tfitzger

2
@tfitzger Bạn có thể bỏ qua mọi thẻ không hợp lệ / không thể. Chúng tôi cho rằng chỉ có thẻ hợp lệ. Vì vậy, bạn chỉ cần đưa 13 bố cục được đề cập trước đó để xem xét.
dùng694733

2
Đầu ra có thể có một không gian giữa hai? Thích H 12?
mbomb007

1
@DA chúng tôi quên đề cập đến họ quản lý sòng bạc bị mắc kẹt với các hoạt động kinh doanh năm 1980.
corsiKa

Câu trả lời:


34

CJam, 16 15 13 12 byte

q2*A~<$e`3=(

Kiểm tra nó ở đây.

Giải trình

Ý tưởng cơ bản là thao tác chuỗi sao cho chúng ta có thể làm cho mã hóa độ dài chạy tích hợp của CJam hoạt động cho chúng ta.

Chúng ta hãy đi qua một ví dụ (một từ câu hỏi). Chuỗi đầu vào là

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

Chúng tôi lặp lại điều đó hai lần:

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

Và xóa dòng cuối cùng:

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

Sau đó, chúng tôi sắp xếp chuỗi này. Bây giờ nó sẽ có một loạt các dòng mới khi bắt đầu, và sau đó cái này (rút ngắn một vài khoảng trống để tránh thanh cuộn ngang):

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

Mặc dù ký tự phù hợp sẽ khác nhau, nhưng nó sẽ luôn là một chữ in hoa, được tìm thấy trong lần chạy thứ tư của chuỗi được sắp xếp (chiếm dòng mới). Khi chúng tôi mã hóa chiều dài chạy, chúng tôi nhận được

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

Vì vậy, tất cả những gì chúng ta cần làm là chọn ra phần tử thứ tư và đảo ngược nó.

Đây là một sự cố của mã thực tế:

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 (phiên bản gần đây), 16 byte

p/KsP*2.zJ@S{K2J

Dùng thử trực tuyến: Trình biên dịch / thực thi Pyth

Giải trình:

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

jk@.rSsP*2.z2

Pyth đã có một bản dựng trong mã hóa độ dài chạy. Nhưng chỉ trong thời gian ngắn. Nếu ai đó muốn thử điều này: Sao chép repo Pyth và kiểm tra cam kết 6a6dccd.

Chương trình này hoạt động khá giống với giải pháp CJam của 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 byte

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

Nhìn vào nhiều lựa chọn chơi golf ở đây. Đây là cách nó làm việc:

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.

Dùng thử trực tuyến tại đây


3

Python 2, 80 68 66 byte

Hãy thử nó ở đây

Sao chép đầu vào, tìm tất cả các chữ cái trong tất cả trừ dòng cuối cùng (cặp ký tự đầu tiên trong dòng cuối cùng không thể là chữ cái), sau đó in chữ cái đầu tiên và bao nhiêu chữ cái.

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

Đầu vào :' _________\n| |\n| H H |\n| H H H |\n---H---H---'

Đầu ra :H12

Phiên bản trước sử dụng regex (68):

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

Cảm ơn Sp3000 đã giúp đỡ chơi golf.


@ Sp3000 Đây là ngắn nhất mà tôi có thể có được nó bằng phương pháp đó. Nó dài hơn 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

Ah, tôi không thể tìm ra cách để có được bộ đồ tốt hơn.
mbomb007

3

APL, 39 byte

Tôi chắc chắn rằng điều này có thể được thực hiện ngắn hơn nhiều, nhưng đó là một sự khởi đầu.

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

Điều này tạo ra một hàm đơn âm có tên chấp nhận chuỗi đầu vào và trả về một chuỗi chứa giá trị và giá trị phù hợp của thẻ. Bạn có thể thử trực tuyến !

Giải trình:

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

Đề nghị được chào đón như mọi khi!



Ngắn hơn, nhưng nhiều byte hơn:5⌷{⍺,≢⍵}⌸¯11↓,⍨⍞
Adám

3

J, 26 byte

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

Sử dụng:

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

Đọc mã từ trái sang phải:

  • Chúng ta có được bộ đồ từ đầu vào là ký tự riêng biệt thứ 5 trong đó ( 4{~.).
  • Đếm ( +/) số mà ký tự xuất hiện tổng cộng trong đầu vào ( [) và đầu vào không có 9 ký tự cuối cùng (_9}.[ ).
  • Cuối cùng, chúng tôi nối bộ đồ ( ]) với biểu diễn chuỗi tổng của kết quả ( ":).

3

Perl, 75 byte

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

Phiên bản ung dung

@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

Julia, 58 byte

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

Điều này tạo ra một hàm không tên, lấy một chuỗi làm đầu vào và trả về giá trị và giá trị của thẻ. Để gọi nó, đặt tên cho nó, vdf=s->(...) .

Ungolfed + giải thích:

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

Đề nghị được chào đón như mọi khi!


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.