Eeny, meeny, miny, moe


11

Giới thiệu

Bài hát thời thơ ấu Eeny, meeny, miny, moe thường được sử dụng để chọn ai là "nó" khi chơi bài. Mọi người sẽ đứng thành một vòng tròn và chỉ vào một người được chọn ngẫu nhiên. Họ sẽ hát:

Eeny, meeny, miny, moe,
Bắt một con hổ bằng ngón chân.
Nếu anh ta hollers, hãy để anh ta đi,
Eeny, meeny, miny, moe.

Khi họ hát từng từ, họ chỉ vào người tiếp theo trong vòng tròn. Người được chỉ vào khi "moe" cuối cùng được hát sẽ là "nó". Những đứa trẻ sẽ ngay lập tức đứng dậy và phân tán.

Mục tiêu

Thực hiện chương trình ngắn nhất theo byte lấy đầu vào, số lượng con và liệt kê các từ được hát khi chúng được trỏ vào.

Người chiến thắng sẽ được chọn trong một tuần.

Đầu vào

Từ STDIN, một số nguyên duy nhất, dương, số lượng trẻ em. Điều này có thể nhiều hơn số lượng từ trong bài hát.

Đầu ra

Viết cho STDOUT một danh sách trong đó mỗi dòng đại diện cho một đứa trẻ và chứa từ được hát trong khi chúng được chỉ vào. Nếu có quá nhiều trẻ em, các dòng trống có thể được bỏ qua.

Yêu cầu

  • Luôn luôn bắt đầu với đứa trẻ đầu tiên.
  • Hiển thị các từ không có dấu chấm câu.
  • "Moe" cuối cùng nên được nhấn mạnh là "MOE!" bao gồm cả dấu câu.

Thí dụ

Đầu vào

3

Đầu ra

Eeny moe tiger toe hollers go miny
meeny Catch by If let Eeny MOE!
miny a the he him meeny

Đầu vào

7

Đầu ra

Eeny by him
meeny the go
miny toe Eeny
moe If meeny
Catch he miny
a hollers MOE!
tiger let

Đầu vào

1

Đầu ra

Eeny meeny miny moe Catch a tiger by the toe If he hollers let him go Eeny meeny miny MOE!

Đầu vào

21

Đầu ra

Eeny
meeny
miny
moe
Catch
a
tiger
by
the
toe
If
he
hollers
let
him
go
Eeny
meeny
miny
MOE!

1
Đầu vào bao giờ sẽ lớn hơn số lượng từ hiện tại?
Doorknob

7
Nên "bắt một" và "nếu anh ta" và "bởi anh ta" / "bởi" được coi là hai từ hay một? Trong bài hát, họ chỉ được tính là một "điểm"
OldBunny2800

4
Chúng tôi luôn kết thúc với "Mẹ ... mẹ tôi ... đã nói ... chọn ... ... rất ... tốt nhất ... một ... và ... bạn ... là ... NÓ! " Đó sẽ là một phần thưởng tuyệt vời. Tất nhiên, những kẻ gian lận luôn lôi ra "bạn" và "là" trên nhiều người ...
ThisSuitIsBlackNot

1
@ ThisSuitIsBlackNot NOOO (giọng nói của Darth Vader)! Bạn đã đánh cắp dòng của tôi. Tôi thực sự đã đăng nhập vào PPCG chỉ để viết rằng vì tôi đã suy nghĩ về nó trong hai ngày qua kể từ khi tôi thấy điều này.
Ashwin Gupta

1
Thực tế không vui lắm: Tiger từng là từ N.
DanTheMan

Câu trả lời:


5

TeaScript , 82 byte

D`${a="Ey Ú9y ·ny "}¶e C® a g by e e If  Ò@s ¤t m go ${a}MOE!`q.KαtΣj═)j╝

Giải nén, chunk, chuyển vị, tham gia, đầu ra.

Giải trình

              // Implicit: x = input
D`...blah...` // Decompress "Eeny miny moe..."
q             // Split
Kα            // chunk into x-size blocks (α == x)
t             // Transpose
Σ             // Loop through lines
j═)             // Join with spaces
j╝            // Join with newline

Dùng thử trực tuyến


81 byte không cạnh tranh

Việc αkhông bị xiềng xích .nên tôi phải sửa lỗi này

D`${a="Ey Ú9y ·ny "}¶e C® a g by e e If  Ò@s ¤t m go ${a}MOE!`qKαtΣj═)j╝

6

Bình, 103 89 84 ký tự

Đã lưu 18 byte với nén chuỗi, nhờ @Dennis và @FryAmTheEggman
Đã lưu một byte khác nhờ @isaacg

Cảnh báo: có nhiều dấu vết trong mã; sử dụng các liên kết dưới đây để thử nó.

VQjd%Q>cs[J."@y)òÎ5O¹c×Ú"."@yæ\J}ÇZH66¥ÓÀD¸¶=ðÉ §J%ÔþÖúÅ="J"MOE!")\@N

Dùng thử trực tuyến | Bộ kiểm tra

Có lẽ có thể được đánh golf. Đề nghị chào mừng!

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

VQjd%Q>cs[J."..."."..."J"MOE!")\@N    Implicit: Q = eval(input)
VQ                                    For each item N in range 0...int(Q):
         [                    )        Create an array out of the following:
          J."..."                       Set J to this string, decompressed. ("Eeny@meeny@miny@")
                 ."..."                 This string, decompressed. ("moe@Catch@...let@him@go@")
                       J                J.
                        "MOE!"          "MOE!".
        s                              Join the array with the empty string.
       c                       \@      Split the result on "@".
      >                          N     Cut off the first N items.
    %Q                                 Take every Qth item.
  jd                                   Join with spaces.

Sử dụng lại Eeny meeny minybằng cách nào đó nên tiết kiệm một vài byte. Ngoài ra, Pyth có hai phần tử tích hợp cho (de) nén ( .Z.").
Dennis

@Dennis Cảm ơn, ."tiết kiệm 14 byte!
Sản phẩm ETH

Pyth có sử dụng UTF-8 hay cái gì khác không? Đây là 89 ký tự nhưng 123 byte
Downgoat

@ Doᴡɴɢᴏᴀᴛ Pyth sử dụng ISO 8859-1 theo mặc định, vì vậy mỗi ký tự chính xác là một byte.
Dennis

FNQ== VQ, nhân tiện.
isaacg

5

Thạch, 84 byte

“£Dṡ“Ṙ©“Ė“¡Ḳ⁵“=U“¡Ẹ⁵“¡Ṇm“ȯf“ŀQ“ÞṖċ¥“ṅ_“Ẉ1“¡æḷ“¡ƒmxĠ“¡ṇƭEỤr“¡Þ¦»ṫ-2;;“MOE!”W¤sƓZj€⁶j⁷

Hãy thử trực tuyến!


4
Nén chuỗi bằng tay là ... giải trí. Điểm số sẽ tốt hơn rất nhiều nếu Jelly có sự phân chia tại chức năng.
Dennis

5

JavaScript (ES6), 167 byte

l=Array(n=+prompt()).fill``;`${s=`Eeny meeny miny `}moe Catch a tiger by the toe If he hollers let him go ${s}MOE!`.split` `.map((w,i)=>l[i%n]+=w+` `);alert(l.join`
`)

Giải trình

l=Array(              // l = array of lines
  n=+prompt()         // n = input number
).fill``;             // initialise l as empty strings

`${s=`Eeny meeny miny `}moe Catch a tiger by the toe If he hollers let him go ${s}MOE!`

.split` `.map((w,i)=> // for each word w
  l[i%n]+=w+` `       // add it to the lines
);
alert(l.join`
`)                    // output the lines

Không l=Array(n).fill`` làm việc vì một số lý do?
Sản phẩm ETH

@ETHproductions Nó hoạt động. Tôi chỉ quên rút ngắn nó bằng cách nào đó haha! Cảm ơn.
dùng81655

@ user81655 Tôi yêu các cửa sổ nhắc nhở () của JS. Họ chỉ là rất vui vẻ. (Tôi biết điều đó nghe có vẻ điên rồ nhưng ý tôi là so với mọi biểu thức console.out hoặc tương đương của mọi ngôn ngữ khác)
Ashwin Gupta

4

Haskell, 160 157 byte

import Data.Lists
unlines.map unwords.transpose.(`chunksOf`(["moe Catch a tiger by the toe If he hollers let him go","MOE!"]>>=words.("Eeny meeny miny "++)))

Chuẩn bị "Eeny meeny miny "cho các phần khác ( "moe Catch ...""MOE!"), nối cả hai chuỗi, chia thành các từ, lấy các đoạn có kích thước theo yêu cầu, hoán vị và nối lại thành một chuỗi.

@Mauris đã tìm thấy 3 byte bằng cách bao gồm chuỗi con chung "Eeny meeny miny" và tạo ra fpointfree.


Có thể s="Eeny meeny miny "tiết kiệm một số byte.
Lynn

@Mauris: Tôi đã thử, nhưng nó dài hơn.
nimi

@Mauris: ... oh không, nó có cùng độ dài.
nimi

Còn vềf=unlines.map unwords.transpose.(`chunksOf`(["moe Catch a tiger by the toe If he hollers let him go","MOE!"]>>=words.("Eeny meeny miny "++)))
Lynn

@Mauris: Hay đấy. Một khi flà hoàn toàn miễn phí, chúng ta có thể bỏ qua ngay cả tên.
nimi

4

Python 2, 154 147 byte

EDIT: Cảm ơn Joe Willis!

i=input()
s='Eeny meeny miny '
for j in range(i):print' '.join((s+'moe Catch a tiger by the toe If he hollers let him go '+s+'MOE!').split()[j::i]) 

Điều này sử dụng mẹo mà [0 :: n] in phần tử thứ n của danh sách.

Hãy thử nó ở đây


Ôi. Vâng, bạn hoàn toàn phá hủy câu trả lời của tôi. CƯỜI LỚN. Hôm nay tôi sẽ thử mẹo của bạn về bản in ("\ n"). Chính xác thì người ::vận hành làm gì? Có giống như trong vòng lặp?
Ashwin Gupta

3

Ruby, 160 byte

puts (a=[*%w[Eeny meeny miny moe Catch a tiger by the toe If he hollers let him go Eeny meeny miny MOE!].each_slice(gets.to_i)])[0].zip(*a[1..-1]).map{|x|x*' '}

Tất cả những nỗ lực của tôi trong việc "nén" chuỗi đã làm cho nó dài hơn. Vẫn đang cố gắng ...

puts                      # output to STDOUT...
(a=                       # assign this stuff to the variable a
 [*                       # convert to array...
  %w[blah blah]           # %w splits on spaces
  .each_slice(gets.to_i)  # split into slices of input number
 ]
)[0]                      # take the first element of a
.zip(*a[1..-1])           # zip it with the remaining elements
                          #   because transpose complains about ragged 2D arrays
.map{|x|x*' '}            # join all sub-arrays on space
                          #   puts automatically inserts newlines for us

3

JavaScript (ES6), 189 byte:

a=prompt(),b=Array(a--).fill``,c=0;"Eeny meeny miny moe Catch a tiger by the toe If he hollers let him go Eeny meeny miny MOE!".split` `.map(v=>(b[c]+=v+' ',c+=c>a-1?-c:1));alert(b.join`\n`)

Giải trình:

a=prompt(), //Get the STDIN
b=Array(a--).fill``, //Make an array based on how many kids there are
c=0; //Start the iteration variable
"Eeny meeny miny moe Catch a tiger by the toe If he hollers let him go Eeny meeny miny MOE!"
.split` `.map(
    v=>(
        b[c] += v + ' ',
        c += c > a - 1 ? -c : 1
    )
);alert(b.join`\n`)

Phương thức nhập của bạn là chính xác, nhưng phương thức đầu ra không được chấp nhận. Tuy nhiên, bạn có thể bọc tất cả trong một hàm, nhận đầu vào làm đối số. Bạn có thể thử như sau : I=>(b=Array(I--).fill``,c=0,"Eeny meeny miny moe Catch a tiger by the toe If he hollers let him go Eeny meeny miny MOE!".split` `.forEach(v=>(b[c]+=v+' ',c+=c>I-1?-c:1)),b), dài 172 byte. Nó trả về mỗi dòng như là một phần tử trong mảng. Tôi nghĩ rằng điều này là chấp nhận được.
Ismael Miguel

Nhân tiện, nếu bạn sử dụng .map()thay vì .forEach(), bạn có thể tiết kiệm 3 byte, giảm xuống còn 169 byte. Với một chút khó khăn hơn, điều này thực sự có thể được tweet!
Ismael Miguel

@IsmaelMiguel Câu hỏi yêu cầu đầu vào và đầu ra phải cụ thể thông qua STDINSTDOUTvì vậy tôi nghĩ rằng nó giới hạn các câu trả lời JavaScript promptalertkhông may.
dùng81655

Ồ, tôi hiểu rồi. Tôi sẽ cập nhật mã khi có cơ hội. Cảm ơn đã thông báo cho tôi :-)
Quill

@ user81655 Bạn đã đúng. Nó nên có một alert(b.join`<newline>`)ở cuối. Nhưng thiệt hại vẫn có thể được giảm với .map(), thay vì .forEach().
Ismael Miguel

3

Python 3, 279 278 272 173 byte

(cảm ơn Mathias Ettinger, người đã cứu tôi hơn 100 BYTES! )

s=" Eeny meeny miny moe Catch a tiger by the toe If he hollers let him go Eeny meeny miny moe!";w=s.split();i=input();i=int(i)
for z in range(i):W=w[z::i];print(" ".join(W))  

Nếu bất cứ ai có lời khuyên hoặc đường, tôi thực sự đánh giá cao họ. Cảm ơn!


Tôi nghĩ rằng bạn đã hiểu sai những gì đầu vào đại diện. Đây không phải là số dòng để hiển thị, đó là số trẻ em trong số đó để phân chia các từ. Mỗi dòng nên được hiển thị. Trong mã của bạn, int(i)nên thay thế 3, nhưng có những lỗi khác cần sửa sau đó.
Thực phẩm điện tử

@ Hand-E-Food tôi tin rằng nó hoạt động như bạn đã chỉ định bây giờ!
Ashwin Gupta

Điều đó có vẻ tốt hơn! :-) Và nếu bạn muốn một số trợ giúp chơi gôn, hãy điều tra toán tử Modulo, thường được viết là %. Đó là lý tưởng cho các quầy tuần hoàn.
Thực phẩm điện tử

@ Hand-E-Food ok cảm ơn! Tôi nghĩ rằng tôi biết những gì bạn đang nhận được. Tôi sẽ sửa nó vào ngày mai. Tôi nghĩ rằng tôi có thể cạo ít nhất một vài byte.
Ashwin Gupta

Một vài điểm phục vụ cả hai cách thực hành tốt nhất và giúp rút ngắn mã: 1) .split()sẽ phân chia trên các khoảng trống (dấu cách, dòng mới, tab) 2) range(0, x)được viết tốt nhất là range(x)3) hãy xem ký hiệu lát: w[0::3]sẽ trả về danh sách của ba từ trong w.
301_Mond_P vĩnh viễn

2

Toán học, 154 byte

StringRiffle[Thread@Partition[StringSplit@"Eeny meeny miny moe Catch a tiger by the toe If he hollers let him go Eeny meeny miny MOE!",#,#,1,""],"
"," "]&

Sử dụng phương pháp split-chunk-transpose-jo-output của hầu hết các câu trả lời khác.


2

MATLAB, 167 byte / ký tự:

n=input('');s='Eeny meeny miny ';s=strsplit([s 'moe Catch a tiger by the toe If he hollers let him go ' s 'MOE!']);f=@fprintf;for i=1:n f('%s ',s{i:n:end});f('\n');end

Giải trình:

n=input('');             % Grab the input (number of children)
s='Eeny meeny miny ';    % Common string portion
% Build the full string and split into cell array at spaces
s=strsplit([s 'moe Catch a tiger by the toe If he hollers let him go ' s 'MOE!']);
f=@fprintf;              % Just a shorthand for later (only saves 1 char here)
for i=1:n                % Loop to the number of children
    f('%s ',s{i:n:end}); % Print each nth word, shifted by child
    f('\n');             % Start each child's words on a new line
end

Sẽ không giành được bất kỳ giải thưởng nào cho chiều dài của giải thưởng này, nhưng điều đó thật thú vị. :-)


2

Japt, 90 87 86 byte

Uo mW{V=`EydÚ9yd·nyd` +`¶C®»dgdbydÈIfddÒ@sd¤tdmdgod{V}MOE!` qd f@Y%U¥W} m¸·

Rất nhiều không thể in được. Hãy thử trực tuyến!

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

              // Implicit: U = input
Uo mW{     }  // Create the range 0...U and map each item W to:
V=`...`       //  Set V to this string, decompressed. "Eenydmeenydmined"
+`...{V}MOE!` //  Concatenate it with this string, decompressed, with V inserted.
qd            //  Split at "d"s.
f@Y%U¥W       //  Filter to only the items where (index % U == W).
m¸            // Map each item by joining with spaces.
·             // Join the result with newlines.

Tôi đã thử nén chuỗi với các dấu phân cách khác nhau. Điều duy nhất hiệu quả hơn không gian sẽ là một chữ cái viết thường, nhưng hầu hết trong số này đã được sử dụng, và do đó, không thể được sử dụng để phân tách chuỗi. Đây là mức độ nén đạt được với những cái còn lại:

space -> 69 bytes
c -> 66 (including a null byte)
d -> 65
j -> 69
k -> 69
p -> 68
q -> 69
s -> 61 (but there's an s in "hollers")
u -> 65
w -> 67
x -> 69
y -> 69

Hiện tại tôi đang sử dụng d. Có thể lưu một byte bằng s, thay thế một số chữ cái khác trong hollers.

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.