Eeny, meeny, miny, moe


11

บทนำ

เพลงในวัยเด็กEeny, meeny, miny, moeมักถูกใช้เพื่อเลือกผู้ที่ "มัน" เมื่อเล่นแท็ก ทุกคนจะยืนเป็นวงกลมและชี้ไปที่บุคคลหนึ่งคนที่เลือกโดยการสุ่ม พวกเขาจะร้องเพลง:

Eeny, meeny, miny, moe,
จับเสือด้วยนิ้วเท้า
ถ้าเขาหยุดขอให้เขาไป
Eeny, meeny, miny, moe

เมื่อพวกเขาร้องแต่ละคำพวกเขาชี้ไปที่คนต่อไปในวงกลม บุคคลที่ถูกชี้ไปเมื่อ "โมเอะ" คนสุดท้ายร้องว่า "มัน" เด็ก ๆ จะลุกขึ้นยืนและแพร่กระจายทันที

เป้าหมาย

ใช้โปรแกรมที่สั้นที่สุดเป็นไบต์ที่รับอินพุตจำนวนลูกและแสดงรายการคำที่ร้องเมื่อพวกเขาถูกชี้ไปที่

ผู้ชนะจะได้รับการคัดเลือกในหนึ่งสัปดาห์

อินพุต

จาก STDIN จำนวนเต็มบวกจำนวนเด็ก นี่อาจจะมากกว่าจำนวนคำในเพลง

เอาท์พุต

เขียนไปที่ STDOUT รายการที่แต่ละบรรทัดแสดงถึงเด็กและมีคำว่าร้องขณะที่ถูกชี้ไปที่ หากมีลูกมากเกินไปอาจเว้นบรรทัดว่างไว้ได้

ความต้องการ

  • เริ่มต้นด้วยลูกคนแรกเสมอ
  • แสดงคำที่ไม่มีเครื่องหมายวรรคตอน
  • ควรเน้น "moe" สุดท้ายเป็น "MOE!" รวมถึงเครื่องหมายวรรคตอน

ตัวอย่าง

อินพุต

3

เอาท์พุต

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

อินพุต

7

เอาท์พุต

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

อินพุต

1

เอาท์พุต

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

อินพุต

21

เอาท์พุต

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

1
อินพุตจะมากกว่าจำนวนคำที่มีอยู่หรือไม่
Doorknob

7
ควร "จับ" และ "ถ้า" และ "โดย" / "ของเขาโดย" ควรถือว่าเป็นคำสองคำหรือหนึ่ง? ในเพลงพวกเขาเพียงนับเป็น "จุด"
OldBunny2800

4
เรามักจะจบลงด้วย "แม่ ... ของฉัน ... พูดว่า ... เลือก ... ... ... ... ... ดีที่สุด ... หนึ่ง ... และ ... คุณ ... คือ ...มัน!" นั่นจะเป็นโบนัสที่ยอดเยี่ยม แน่นอนคนขี้โกงมักจะลาก "คุณ" และ "เป็น" ไปหลายคน ...
ThisSuitIsBlackNot

1
@ ThisSuitIsBlackNot NOOO (เสียง Darth Vader)! คุณขโมยสายของฉัน แท้จริงฉันเข้าสู่ PPCG เพียงเพื่อเขียนว่าเนื่องจากฉันได้คิดเกี่ยวกับมันสำหรับสองวันที่ผ่านมาตั้งแต่ฉันเห็นสิ่งนี้
Ashwin Gupta

1
ไม่ใช่เรื่องสนุกจริง: เสือเคยเป็นคำว่า N
DanTheMan

คำตอบ:


5

TeaScript , 82 ไบต์

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

ขยาย, บีบอัด, ขนย้าย, เข้าร่วม, เอาท์พุท

คำอธิบาย

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

ลองออนไลน์


ไม่ใช่การแข่งขัน 81 ไบต์

αไม่ได้รับการถูกล่ามโซ่.เพื่อให้ฉันได้แก้ไขข้อผิดพลาดนี้

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

6

Pyth, 103 89 84 ตัวอักษร

บันทึกแล้ว 18 ไบต์ด้วยการบีบอัดสตริงขอบคุณ @Dennis และ @FryAmTheEggman
บันทึกอีกไบต์ด้วย @isaacg

คำเตือน: มีรหัส unprintables จำนวนมาก ใช้ลิงก์ด้านล่างเพื่อลอง

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

ลองใช้ออนไลน์ | ชุดทดสอบ

อาจจะเป็นกอล์ฟ ยินดีต้อนรับข้อเสนอแนะ!

มันทำงานอย่างไร

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.

การนำกลับมาใช้Eeny meeny minyอย่างใดควรบันทึกไม่กี่ไบต์ นอกจากนี้ Pyth ยังมีบิวด์อินสองตัวสำหรับ (de) การบีบอัด ( .Zและ.")
Dennis

@Dennis ขอบคุณ."บันทึก 14 ไบต์!
ETHproductions

Pyth ใช้ UTF-8 หรืออย่างอื่นหรือไม่ นี่คือ 89 ตัวอักษร แต่ 123 ไบต์
Downgoat

@ Doᴡɴɢᴏᴀᴛ Pyth ใช้ ISO 8859-1 ตามค่าเริ่มต้นดังนั้นอักขระแต่ละตัวมีขนาดหนึ่งไบต์
Dennis

FNQ== VQโดยวิธีการ
isaacg

5

เยลลี่, 84 ไบต์

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

ลองออนไลน์!


4
การบีบอัดสตริงด้วยมือคือ ... สนุกสนาน คะแนนจะดีขึ้นมากถ้า Jelly มีฟังก์ชั่นการแยกที่เกิดขึ้น
Dennis

5

JavaScript (ES6), 167 ไบต์

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

คำอธิบาย

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

ใช้งานไม่l=Array(n).fill`` ได้ด้วยเหตุผลบางอย่าง?
ETHproductions

@ETHproductions ใช้งานได้ ฉันลืมที่จะตัดให้สั้นลงฮ่าฮ่า! ขอบคุณ
user81655

@ user81655 ฉันรัก windows JS prompt () พวกเขาสนุกมาก (ฉันรู้ว่ามันฟังดูบ้า แต่ฉันหมายถึงเมื่อเทียบกับ console.out ของภาษาอื่น ๆ หรือการแสดงออกประเภทการพิมพ์ที่เทียบเท่า)
Ashwin Gupta

4

Haskell, 160 157 bytes

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 "++)))

ย่อหน้า"Eeny meeny miny "ไปยังส่วนอื่น ๆ ( "moe Catch ..."และ"MOE!") concatenate สตริงทั้งสองแยกเป็นคำที่ใช้ชิ้นขนาดต้องไขว้และ concatenate อีกครั้งในสายเดียว

@Mauris พบ 3 ไบต์โดยการแยกสตริงย่อยทั่วไป "Eeny meeny miny" และทำให้fpointfree


อาจs="Eeny meeny miny "บันทึกบางไบต์
Lynn

@Mauris: ฉันพยายาม แต่มันอีกต่อไป
nimi

@Mauris: ... โอ้ไม่มันมีความยาวเท่ากัน
nimi

วิธีการเกี่ยวกับ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: ดี เมื่อfเป็นอิสระอย่างสมบูรณ์เราสามารถละเว้นแม้แต่ชื่อ
nimi

4

Python 2, 154 147 ไบต์

แก้ไข:ขอบคุณ 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]) 

ใช้วิธีการที่ [0 :: n] พิมพ์องค์ประกอบที่ n ของรายการ

ลองที่นี่


อุ๊ยตาย คุณเพียงแค่ทำลายคำตอบของฉันทั้งหมด ฮ่า ๆ. ฉันจะลองเคล็ดลับของคุณในวันนี้เกี่ยวกับการพิมพ์ ("\ n") ไม่ว่าสิ่งที่::ผู้ประกอบการจะทำอย่างไร ที่ชอบในวง?
Ashwin Gupta

3

ทับทิม 160 ไบต์

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*' '}

ความพยายามทั้งหมดของฉันที่ "บีบอัด" สตริงทำให้มันนานขึ้น ยังคงพยายาม ...

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 ไบต์:

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

คำอธิบาย:

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

วิธีการป้อนข้อมูลของคุณถูกต้อง แต่วิธีการส่งออกไม่เป็นที่ยอมรับ อย่างไรก็ตามคุณสามารถรวมทุกอย่างไว้ในฟังก์ชันเพื่อรับอินพุตเป็นอาร์กิวเมนต์ คุณสามารถลองสิ่งต่อไปนี้: 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)ซึ่งมีความยาว 172 ไบต์ มันจะส่งกลับแต่ละบรรทัดเป็นองค์ประกอบในอาร์เรย์ ฉันคิดว่านี่เป็นที่ยอมรับ
Ismael Miguel

โดยวิธีการถ้าคุณใช้.map()แทนคุณ.forEach()สามารถบันทึก 3 ไบต์ลดลงถึง 169 ไบต์ ด้วยการเล่นซอเพิ่มเติมนี้อาจทวีต!
Ismael Miguel

@IsmaelMiguel คำถามจะขอให้ป้อนข้อมูลและส่งออกโดยเฉพาะSTDINและSTDOUTดังนั้นฉันคิดว่ามัน จำกัด คำตอบ JavaScript promptและalertน่าเสียดาย
user81655

อ้อเข้าใจแล้ว. ฉันจะอัปเดตรหัสเมื่อมีโอกาส ขอขอบคุณที่แจ้งให้ฉันทราบ :-)
ขนนก

@ user81655 คุณถูกต้อง มันควรจะมีalert(b.join`<newline>`)ในตอนท้าย แต่ความเสียหายยังสามารถลดลงด้วยแทน.map() .forEach()
Ismael Miguel

3

Python 3, 279 278 272 173 ไบต์

(ขอบคุณ Mathias Ettinger ที่ช่วยฉันได้มากกว่า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))  

หากใครมีเคล็ดลับหรือ sugestions ฉันขอขอบคุณพวกเขาจริงๆ ขอบคุณ!


ฉันคิดว่าคุณเข้าใจผิดว่าข้อมูลที่ป้อนเข้านั้นหมายถึงอะไร ไม่ใช่หมายเลขบรรทัดที่จะแสดง แต่เป็นจำนวนเด็กที่แบ่งคำ ทุกบรรทัดควรแสดง ในรหัสของคุณint(i)ควรแทนที่3แต่มีข้อผิดพลาดอื่น ๆ ที่จะแก้ไขหลังจากนั้น
Hand-E-Food

@ Hand-E-Food โอเคฉันเชื่อว่ามันใช้งานได้ตามที่คุณระบุตอนนี้!
Ashwin Gupta

นั่นดูดีกว่า! :-) และถ้าคุณต้องการความช่วยเหลือในการเล่นกอล์ฟตรวจสอบผู้ประกอบการ Modulo %มักจะเขียนเป็น เหมาะสำหรับตัวนับแบบวนรอบ
Hand-E-Food

@ Hand-E-Food โอเคขอบคุณ! ฉันคิดว่าฉันรู้ว่าคุณกำลังทำอะไรอยู่ พรุ่งนี้ฉันจะแก้ไขเรื่องนี้ ฉันคิดว่าฉันสามารถโกนได้อย่างน้อยสองสามไบต์
Ashwin Gupta

บางจุดที่ให้บริการทั้งแนวปฏิบัติที่ดีที่สุดและช่วยย่อรหัส: 1) .split()จะแบ่งเป็นช่องว่าง (เว้นวรรคบรรทัดใหม่แท็บ) 2) range(0, x)เขียนได้ดีที่สุดในขณะที่range(x)3) ดูเครื่องหมายชิ้น: w[0::3]จะส่งกลับรายการทุกสาม wคำใน
301_Moved_Permanently

2

Mathematica, 154 ไบต์

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,""],"
"," "]&

ใช้วิธีแยกคำตอบโดยส่วนใหญ่ของคำตอบอื่น ๆ


2

MATLAB, 167 ไบต์ / ตัวอักษร:

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

คำอธิบาย:

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

จะไม่ได้รับรางวัลใด ๆ สำหรับความยาวของอันนี้ แต่มันสนุก :-)


2

Japt, 90 87 86 ไบต์

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

ไม่สามารถพิมพ์ได้จำนวนมาก ลองออนไลน์!

มันทำงานอย่างไร

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

ฉันพยายามบีบอัดสตริงด้วยตัวคั่นอื่น สิ่งเดียวที่มีประสิทธิภาพมากกว่าการเว้นวรรคจะเป็นตัวอักษรตัวเล็ก แต่ส่วนใหญ่เหล่านี้ถูกใช้ไปแล้วและไม่สามารถใช้แยกสตริงได้ นี่คือความสำเร็จในการบีบอัดที่เหลืออยู่:

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

dขณะนี้ฉันกำลังใช้ มันอาจจะเป็นไปได้ที่จะบันทึกไบต์กับsแทนบางตัวอักษรอื่น hollers

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.