Eeny, Meeny, Miny, Moe

11

Einführung

Das Kindheitslied Eeny, meeny, miny, moe wurde oft verwendet, um auszuwählen, wer "es" war, wenn man Tag spielte. Jeder würde in einem Kreis stehen und auf eine zufällig ausgewählte Person zeigen. Sie würden singen:

Eeny, meeny, miny, moe,
fang einen Tiger am Zeh.
Wenn er brüllt, lass ihn gehen,
Eeny, meeny, miny, moe.

Während sie jedes Wort sangen, zeigten sie auf die nächste Person im Kreis. Die Person, auf die hingewiesen wird, wenn das letzte "moe" gesungen wird, wäre "es". Die Kinder würden sofort aufstehen und sich zerstreuen.

Tor

Implementieren Sie das kürzeste Programm in Bytes, das eine Eingabe enthält, die Anzahl der untergeordneten Elemente und listet die Wörter auf, die beim Zeigen gesungen wurden.

Der Gewinner wird in einer Woche ausgewählt.

Eingang

Aus STDIN eine einzelne, positive ganze Zahl, die Anzahl der Kinder. Dies kann mehr als die Anzahl der Wörter im Lied sein.

Ausgabe

Schreibt an STDOUT eine Liste, in der jede Zeile ein Kind darstellt und das Wort enthält, auf das gesungen wurde, während auf das gezeigt wurde. Wenn zu viele Kinder vorhanden sind, können leere Zeilen weggelassen werden.

Bedarf

  • Beginnen Sie immer mit dem ersten Kind.
  • Zeigen Sie die Wörter ohne Interpunktion an.
  • Das letzte "moe" sollte als "MOE!" einschließlich Interpunktion.

Beispiel

Eingang

3

Ausgabe

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

Eingang

7

Ausgabe

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

Eingang

1

Ausgabe

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

Eingang

21

Ausgabe

Eeny
meeny
miny
moe
Catch
a
tiger
by
the
toe
If
he
hollers
let
him
go
Eeny
meeny
miny
MOE!
Hand-E-Food
quelle
1
Wird die Eingabe jemals größer sein als die Anzahl der vorhandenen Wörter?
Türknauf
7
Sollte "fangen ein" und "wenn er" und "durch sein" / "durch das" als zwei Wörter oder eines behandelt werden? In dem Lied zählen sie nur als ein "Punkt"
OldBunny2800
4
Wir endeten immer mit "Meine ... Mutter ... sagte ... zu ... wählen ... die ... allerbesten ... eine ... und ... du ... bist ...ES!" Das wäre ein cooler Bonus. Natürlich haben die Betrüger immer das "du" und das "sind" über mehrere Personen gezogen ...
ThisSuitIsBlackNot
1
@ThisSuitIsBlackNot NOOO (Darth Vader Stimme)! Du hast meine Leitung gestohlen. Ich habe mich buchstäblich bei PPCG angemeldet, nur um das zu schreiben, seit ich die letzten zwei Tage darüber nachgedacht habe, seit ich das gesehen habe.
Ashwin Gupta
1
Nicht so lustige Tatsache: Tiger war früher das N-Wort.
DanTheMan

Antworten:

5

TeaScript , 82 Bytes

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

Dekomprimieren, Chunk, Transponieren, Verbinden, Ausgeben.

Erläuterung

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

Probieren Sie es online aus


Nicht konkurrierende 81 Byte

Das αwurde nicht angekettet, .also musste ich das beheben

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

Pyth, 103 89 84 Zeichen

Dank @Dennis und @FryAmTheEggman wurden 18 Bytes mit String-Komprimierung gespeichert. Dank @isaacg wurde ein
weiteres Byte gespeichert

Warnung: Der Code enthält viele nicht druckbare Elemente. Verwenden Sie die folgenden Links, um es zu versuchen.

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

Probieren Sie es online aus | Testsuite

Könnte wahrscheinlich Golf gespielt werden. Vorschläge willkommen!

Wie es funktioniert

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@[email protected]@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.
ETH-Produktionen
quelle
Eine Wiederverwendung Eeny meeny minysollte ein paar Bytes sparen. Außerdem verfügt Pyth über zwei integrierte Funktionen für die (De-) Komprimierung ( .Zund .").
Dennis
@ Tennis Danke, ."spart 14 Bytes!
ETHproductions
Verwendet Pyth UTF-8 oder etwas anderes? Dies ist 89 Zeichen, aber 123 Bytes
Downgoat
@ Doᴡɴɢᴏᴀᴛ Pyth verwendet standardmäßig ISO 8859-1, sodass jedes Zeichen genau ein Byte ist.
Dennis
FNQ== VQübrigens.
isaacg
5

Gelee, 84 Bytes

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

Probieren Sie es online aus!

Dennis
quelle
4
Das Komprimieren der Saite von Hand war ... unterhaltsam. Die Punktzahl wäre viel besser, wenn Jelly bei Ereignissen eine Aufteilung hätte .
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`
`)

Erläuterung

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
user81655
quelle
Funktioniert l=Array(n).fill`` aus irgendeinem Grund nicht?
ETHproductions
@ETHproductions Es funktioniert. Ich habe nur vergessen, es irgendwie zu verkürzen, haha! Vielen Dank.
user81655
@ user81655 Ich liebe JS prompt () Windows. Sie sind einfach so lustig. (Ich weiß, das klingt verrückt, aber ich meine im Vergleich zur Konsole jeder anderen Sprache. Out oder gleichwertiger Ausdruck vom Drucktyp)
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 "++)))

Stellen Sie "Eeny meeny miny "die anderen Teile ( "moe Catch ..."und "MOE!") voran , verketten Sie beide Zeichenfolgen, teilen Sie sie in Wörter auf, nehmen Sie Teile der erforderlichen Größe, transponieren Sie und verketten Sie sie erneut in eine einzelne Zeichenfolge.

@Mauris hat 3 Bytes gefunden, indem er den gemeinsamen Teilstring "Eeny meeny miny" herausgerechnet und fpunktfrei gemacht hat.

Nimi
quelle
Spart vielleicht ein s="Eeny meeny miny "paar Bytes.
Lynn
@ Mauris: Ich habe es versucht, aber es war länger.
Nimi
@ Mauris: ... oh nein, es hat die gleiche Länge.
Nimi
Wie wäre esf=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: Schön. Sobald fes völlig sinnlos ist, können wir sogar den Namen weglassen.
Nimi
4

Python 2, 154 147 Bytes

EDIT: Danke 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]) 

Dies verwendet den Trick, dass [0 :: n] das n-te Element der Liste druckt.

Probieren Sie es hier aus

TanMath
quelle
Autsch. Nun, du hast meine Antwort einfach total zerstört. LOL. Ich werde Ihren Tipp später heute über den Druck ("\ n") versuchen. Was genau macht der ::Bediener? Ist das wie in In-Loop?
Ashwin Gupta
3

Ruby, 160 Bytes

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

Alle meine Versuche, den String zu "komprimieren", haben ihn nur länger gemacht. Versuche immer noch...

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
Türknauf
quelle
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`)

Erläuterung:

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`)
Feder
quelle
Ihre Eingabemethode ist korrekt, aber die Ausgabemethode wird nicht akzeptiert. Sie können jedoch alles in eine Funktion einschließen und die Eingabe als Argument empfangen. Sie können Folgendes versuchen : 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), Das ist 172 Byte lang. Es gibt jede Zeile als Element im Array zurück. Ich denke das ist akzeptabel.
Ismael Miguel
Übrigens, wenn Sie .map()anstelle von verwenden .forEach(), können Sie 3 Bytes sparen und auf 169 Bytes reduzieren. Mit ein bisschen mehr Fummelei könnte dies tatsächlich tweetbar sein!
Ismael Miguel
@IsmaelMiguel Die Frage verlangt, dass die Eingabe und Ausgabe spezifisch erfolgt, STDINund STDOUTdaher denke ich, dass sie die JavaScript-Antworten auf promptund alertleider einschränkt .
user81655
Oh, ich verstehe. Ich werde den Code aktualisieren, wenn ich die Gelegenheit dazu bekomme. Danke, dass du mich informiert hast :-)
Quill
@ user81655 Du bist richtig. Es sollte alert(b.join`<newline>`)am Ende eine haben. Aber der Schaden kann trotzdem mit reduziert werden .map(), anstatt .forEach().
Ismael Miguel
3

Python 3, 279 278 272 173 Bytes

(Danke an Mathias Ettinger, der mir buchstäblich 100+ BYTES gerettet hat ! )

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

Wenn jemand Tipps oder Vorschläge hat, würde ich sie wirklich schätzen. Vielen Dank!

Ashwin Gupta
quelle
Ich denke, Sie haben falsch verstanden, was die Eingabe darstellt. Es ist nicht die Zeilennummer, die angezeigt werden soll, sondern die Anzahl der Kinder, unter denen die Wörter aufgeteilt werden sollen. Jede Zeile sollte angezeigt werden. In Ihrem Code int(i)sollte an die Stelle von 3treten, aber es gibt andere Fehler, die danach behoben werden müssen.
Hand-E-Food
@ Hand-E-Food okay, ich glaube, es funktioniert so, wie Sie es jetzt angegeben haben!
Ashwin Gupta
Das sieht besser aus! :-) Und wenn Sie Hilfe beim Golfen benötigen, untersuchen Sie den Modulo-Operator, der normalerweise als geschrieben ist %. Es ist ideal für zyklische Zähler.
Hand-E-Food
@ Hand-E-Food ok danke! Ich glaube, ich weiß, worauf du hinaus willst. Ich werde das morgen reparieren. Ich denke, ich kann mindestens ein paar Bytes sparen.
Ashwin Gupta
Einige Punkte, die sowohl bewährten Methoden dienen als auch zur Verkürzung des Codes beitragen: 1) .split()werden in Leerzeichen (Leerzeichen, Zeilenumbrüche, Tabulatoren) aufgeteilt. 2) werden range(0, x)am besten als range(x)3) geschrieben. Sehen Sie sich die Slice-Notation an: Gibt w[0::3]eine Liste von jeweils drei zurück Wörter in w.
301_Moved_Permanent
2

Mathematica, 154 Bytes

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

Verwendet die Split-Chunk-Transponierungs-Join-Ausgabemethode der meisten anderen Antworten.

LegionMammal978
quelle
2

MATLAB, 167 Bytes / Zeichen:

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

Erläuterung:

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

Ich werde keine Preise für die Länge dieses Stücks gewinnen, aber es hat Spaß gemacht. :-)

Paul Gessler
quelle
2

Japt, 90 87 86 Bytes

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

Viele nicht druckbare Dateien. Probieren Sie es online aus!

Wie es funktioniert

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

Ich habe versucht, die Zeichenfolge mit verschiedenen Trennzeichen zu komprimieren. Das einzige, was effizienter als Leerzeichen ist, ist ein Kleinbuchstabe, aber die meisten davon werden bereits verwendet und können daher nicht zum Teilen der Zeichenfolge verwendet werden. So viel Komprimierung wird mit den verbleibenden erreicht:

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

Zur Zeit benutze ich d. Es kann möglich sein, ein Byte mit zu sersetzen und einen anderen Buchstaben in zu ersetzen hollers.

ETH-Produktionen
quelle