Xáo trộn đều


8

Một số thẻ giao dịch có giá trị thực và có thể được bán để lấy tiền. Uốn các thẻ được nhăn mặt vì nó lấy đi giá trị của chúng và làm cho chúng trông ít mới hơn. Giả sử bạn có một cỗ bài giao dịch (Pokemon, Magic, v.v.) và bạn muốn xáo trộn chúng. Thay vì làm cây cầu uốn cong tất cả các thẻ, một cách đơn giản khác để xáo trộn thẻ là đặt chúng thành đống. Ý tôi là đây.

Lý lịch

Với một cỗ bài 60 lá cần xáo trộn, bạn có thể tách 60 lá bài thành ba chồng 20 lá bài. Có nhiều cách để làm điều này, cách đơn giản nhất là đặt thẻ vào cọc A, rồi một vào cọc B, rồi một vào cọc C. Một cách khác là đặt thẻ vào cọc C, rồi B, rồi A. cũng là những cách để trải đều các thẻ trên các cọc không đều nhau. Đây là: đặt một thẻ vào đống A, đặt một thẻ khác vào A, sau đó đặt một thẻ vào đống B, sau đó đặt một thẻ vào cọc C.

Thử thách

Tạo một chương trình đầy đủ sẽ xuất ra evennếu một cách nhất định xáo trộn thành các cọc trải đều các thẻ trong các cọc, và đầu ra unevenvà số lượng thẻ trong mỗi cọc khác.

Đầu vào

Đầu vào sẽ được thực hiện thông qua STDIN hoặc thay thế gần nhất (không có chức năng).

[sequence] [deck size]
  • sequencelà một chuỗi các ký tự. Nó nói với mô hình các thẻ được đặt vào các cọc. Mỗi nhân vật khác nhau tương ứng với một đống. Chuỗi này sẽ luôn ở dưới kích thước boong và sẽ chỉ chứa chữ in hoa AZ.
  • deck sizelà một số nguyên xác định có bao nhiêu thẻ trong bộ bài. Nếu kích thước bộ bài là 60, số lượng thẻ trong bộ bài là 60.

Đầu ra

even

Nếu số lượng thẻ trong mỗi cọc ở cuối xáo trộn là như nhau, chương trình của bạn sẽ xuất ra thẻ này.

uneven [pile1] [pile2] [...]

Nếu số thẻ trong mỗi cọc ở cuối xáo trộn không giống nhau, chương trình của bạn sẽ xuất ra unevenvà số lượng thẻ trong mỗi cọc như thế này: uneven 20 30nếu cọc A chứa 20 canrd và cọc B chứa 30. Thứ tự của số cọc không quan trọng.

Thông tin khác

  • Đây là một thử thách golf mã, vì vậy mã ngắn nhất tính bằng byte vào ngày 25 tháng 9 sẽ thắng. Nếu có một ràng buộc về số byte, mã được gửi trước sẽ thắng.
  • Chương trình của bạn phải là một chương trình, không phải là một chức năng.
  • Nếu có thể, vui lòng bao gồm một liên kết đến một thông dịch viên trực tuyến hoặc một liên kết đến một nơi mà tôi có thể tải xuống một thông dịch viên cho ngôn ngữ của bạn trong câu trả lời của bạn.
  • Bất cứ điều gì tôi không chỉ định trong thử thách này là trò chơi công bằng, có nghĩa là nếu tôi không nói, điều đó tùy thuộc vào bạn. Nếu bất cứ điều gì mơ hồ, cho tôi biết và tôi sẽ chỉnh sửa câu trả lời cho phù hợp. (Hy vọng điều này diễn ra suôn sẻ hơn thử thách cuối cùng của tôi.)

Ví dụ

     Input | Output | Alternate outputs (if uneven)
           |
    ABC 30 | even
    ABC 31 | uneven 11 10 10 | uneven 10 11 10 | uneven 10 10 11
    BCA 60 | even
    BBA 24 | uneven 8 16 | uneven 16 8
ABACBC 120 | even
  BBABA 50 | uneven 20 30 | uneven 30 20
  AABBB 12 | even

1
Tôi không hiểu nó sequencetrông như thế nào hoặc nó hoạt động như thế nào. Bạn có thể vui lòng thêm một số trường hợp thử nghiệm?
xnor

@xnor Có, thêm ngay bây giờ.
The_Basset_Hound

2
... Tôi không bao giờ chơi bài với bạn. :P
Conor O'Brien

@ThomasKwa Đầu vào nên được thực hiện thông qua đầu vào tiêu chuẩn hoặc thay thế gần nhất.
The_Basset_Hound

ABDD 12một đầu vào hợp lệ? Điều gì nên là đầu ra? Ngoài ra, tôi có hiểu đúng AABBB 12không?
xnor

Câu trả lời:


5

Bình thường, 33 31 byte

jd+>"uneven"yK!tl{J/L@LzQ{z*J!K

Ví dụ đầu vào:

ABACBC
120

4

Python 3.x, 106 128 138 byte

s,n=input().split()
n=int(n)
t=(s*n)[:n]
*z,=map(t.count,set(t))
b=z[:-1]!=z[1:];print("un"*b+"even",*z*b)

Điều này sao chép chuỗi đầu vào (nhiều lần hơn mức cần thiết, đủ tốt) và sau đó chỉ lấy các nký tự đầu tiên . Đây là những tính và một trong hai unevenhoặc evenđược chọn, và nếu trước đây, số lượng cũng được in print(*z), tự động giải nén zđối với tôi.

Đã lưu 32 byte nhờ xnor và Sp3000!

Ngoài ra, Python 3.5 có một tính năng mới cho phép giải pháp 102 byte này:

s,n=input().split()
n=int(n)
t=(s*n)[:n]
*z,=map(t.count,{*t})
b=len({*z})>1;print("un"*b+"even",*z*b)

len({*z})>1giải nén danh sách z, tạo một bộ từ nó, sau đó kiểm tra xem nó có nhiều hơn một phần tử không. Nó {*z}đặc biệt mới.


1
Rất vui khi thấy một tay golf Python mới! Một số mẹo nhanh. Danh sách comp [t.count(x) for x in set(t)]có thể được thực hiện như một map: map(t.count,set(t)). Câu hỏi cho phép các cọc theo bất kỳ thứ tự nào, vì vậy tôi nghĩ bạn có thể tránh làm sorted, ngay cả khi điều đó có nghĩa là bạn phải làm một cái gì đó lâu hơn một chút so với z==z[::-1]thích z[1:]==z[:-1].
xnor

Ngoài ra, Python 3 cho phép bạn print*in các phần tử của một danh sách được phân tách bằng dấu cách. Điều này thường ngắn hơn ' '.join.
xnor

@xnor: Được đánh giá cao!
El'endia Starman

2

CJam, 35 byte

rri_@*<$e`0f=_)-"uneven":Ua@+S*U2>?

Hãy thử trực tuyến trong trình thông dịch CJam .

Làm thế nào nó hoạt động

rri      e# Read a string (s) and an integer (n) from STDIN.
_@       e# Push a copy of n and rotate s on top of it.
*        e# Repeat s n times.
<        e# Keep only the first n characters.
$e`      e# Sort and perform run-length encoding.
0f=      e# Keep only the multiplicities.
_)-      e# Push a copy, pop the last element and remove its remaining occurrences.
         e# The result with be an empty array (falsy) iff all elements are equal.
"uneven" e# Push that string.
:Ua      e# Save it in U and wrap it in an array.
@+       e# Concatenate ["uneven"] with the array of multiplicities.
S*       e# Join, separating by spaces.
U2>      e# Push "even".
?        e# Select the result depending on whether _)- pushed an empty array.
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.