Eeny, meeny, miny, moe

11

Wprowadzenie

Piosenka z dzieciństwa Eeny, meeny, miny, moe była często używana do wybrania, kto był „tym” podczas odtwarzania tagu. Każdy stałby w kręgu i wskazywałby losowo wybraną osobę. Śpiewali:

Eeny, meeny, miny, moe,
Złap tygrysa za palec u nogi.
Jeśli krzyczy, pozwól mu odejść,
Eeny, meeny, miny, moe.

Kiedy śpiewali każde słowo, wskazywali na kolejną osobę w kręgu. Osoba, której wskazano, kiedy śpiewano końcowe „moe”, to „to”. Dzieci natychmiast wstały i rozproszyły się.

Cel

Zaimplementuj najkrótszy program w bajtach, który pobiera dane wejściowe, liczbę dzieci i podaje słowa, które zostały zaśpiewane podczas wskazywania.

Zwycięzca zostanie wybrany za tydzień.

Wejście

Od STDIN: pojedyncza, dodatnia liczba całkowita, liczba dzieci. Może to być więcej niż liczba słów w utworze.

Wynik

Zapisuje do STDOUT listę, w której każda linia reprezentuje dziecko i zawiera słowo śpiewane podczas wskazywania. Jeśli jest za dużo dzieci, puste linie mogą zostać pominięte.

Wymagania

  • Zawsze zaczynaj od pierwszego dziecka.
  • Wyświetlaj słowa bez interpunkcji.
  • Ostatnie „moe” należy podkreślić jako „MOE!” w tym interpunkcja.

Przykład

Wejście

3

Wynik

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

Wejście

7

Wynik

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

Wejście

1

Wynik

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

Wejście

21

Wynik

Eeny
meeny
miny
moe
Catch
a
tiger
by
the
toe
If
he
hollers
let
him
go
Eeny
meeny
miny
MOE!
Hand-E-Food
źródło
1
Czy wkład będzie kiedykolwiek większy niż liczba obecnych słów?
Klamka
7
Czy „złapać” i „jeśli on” i „przez jego” / „przez” należy traktować jako dwa słowa czy jedno? W utworze liczą się tylko jako jeden „punkt”
OldBunny2800,
4
Zawsze kończyliśmy się słowami „Moja… matka… powiedziała… aby… wybrać… ten… bardzo… najlepszy… jeden… i… jesteś… jesteś ...TO!" To byłby fajny bonus. Oczywiście, oszuści zawsze ciągnęli „ty” i „jesteś” nad kilkoma osobami ...
ThisSuitIsBlackNot 20.01.2016
1
@ThisSuitIsBlackNot NOOO (głos Dartha Vadera)! Ukradłeś moją linię. Dosłownie zalogowałem się do PPCG tylko po to, żeby to napisać, odkąd myślałem o tym przez ostatnie dwa dni, odkąd to zobaczyłem.
Ashwin Gupta
1
Niezbyt zabawny fakt: Tygrys był kiedyś słowem N.
DanTheMan

Odpowiedzi:

5

TeaScript , 82 bajty

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

Rozpakuj, porcjuj, transponuj, łącz, wyjdź.

Wyjaśnienie

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

Wypróbuj online


81 bajtów niekonkurujących

Nie αbył związany, .więc musiałem to naprawić

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

Pyth, 103 89 84 znaków

Zaoszczędzono 18 bajtów dzięki kompresji ciągów dzięki @Dennis i @FryAmTheEggman
Zaoszczędzono kolejny bajt dzięki @isaacg

Ostrzeżenie: w kodzie jest wiele niedrukowalnych; użyj poniższych linków, aby spróbować.

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

Wypróbuj online | Zestaw testowy

Prawdopodobnie można grać w golfa. Sugestie mile widziane!

Jak to działa

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.
ETHprodukcje
źródło
Ponowne użycie w Eeny meeny minyjakiś sposób powinno zaoszczędzić kilka bajtów. Ponadto Pyth ma dwa wbudowane moduły (de) kompresji ( .Zi .").
Dennis,
@Dennis Dzięki, ."oszczędza 14 bajtów!
ETHprodukcje
Czy Pyth używa UTF-8 czy czegoś innego? To 89 znaków, ale 123 bajty
Downgoat
@ Doᴡɴɢᴏᴀᴛ Pyth domyślnie korzysta z ISO 8859-1, więc każdy znak ma dokładnie jeden bajt.
Dennis,
FNQNawiasem VQmówiąc, ==
isaacg
5

Galaretka, 84 bajty

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

Wypróbuj online!

Dennis
źródło
4
Ręczne kompresowanie sznurka było ... zabawne. Wynik byłby o wiele lepszy, gdyby Jelly miała funkcję podziału przy wystąpieniach .
Dennis
5

JavaScript (ES6), 167 bajtów

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

Wyjaśnienie

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
użytkownik 81655
źródło
Z l=Array(n).fill`` jakiegoś powodu nie działa?
ETHprodukcje
@ETHproductions To działa. Po prostu zapomniałem jakoś to skrócić haha! Dzięki.
user81655,
@ user81655 Uwielbiam okna zachęty JS (). Są po prostu zabawne. (Wiem, że to brzmi szalenie, ale mam na myśli w porównaniu do konsoli każdego innego języka .out lub równoważne wyrażenie typu wydruku)
Ashwin Gupta
4

Haskell, 160 157 bajtów

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

Przygotuj "Eeny meeny miny "do pozostałych części ( "moe Catch ..."i "MOE!"), połącz oba łańcuchy, podziel na słowa, weź kawałki o wymaganym rozmiarze, transponuj i ponownie połącz w jeden łańcuch.

@Mauris znalazł 3 bajty, wyodrębniając typowy podciąg „Eeny meeny miny” i czyniąc go fbezcelowym.

nimi
źródło
Może s="Eeny meeny miny "oszczędza trochę bajtów.
Lynn,
@Mauris: Próbowałem, ale było dłużej.
nimi
@ Mauris: ... och nie, ma tę samą długość.
nimi
Co powiesz na tof=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: Nicea. Kiedy fjest to całkowicie bezcelowe, możemy pominąć nawet nazwę.
nimi
4

Python 2, 154 147 bajtów

EDYCJA: Dzięki 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]) 

Wykorzystuje sztuczkę polegającą na tym, że [0 :: n] drukuje n-ty element listy.

Wypróbuj tutaj

TanMath
źródło
Auć. Właśnie zniszczyłeś moją odpowiedź. LOL. Dzisiaj wypróbuję twoją wskazówkę dotyczącą druku („\ n”). Co dokładnie robi ::operator? Czy to jest jak w pętli?
Ashwin Gupta,
3

Rubin, 160 bajtów

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

Wszystkie moje próby „kompresji” łańcucha spowodowały, że był on dłuższy. Wciąż próbuje...

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
Klamka
źródło
3

JavaScript (ES6), 189 bajtów:

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

Wyjaśnienie:

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`)
Lotka
źródło
Twoja metoda wprowadzania jest poprawna, ale metoda wyjściowa nie jest akceptowana. Możesz jednak wszystko zawinąć w funkcję, otrzymując dane wejściowe jako argument. Możesz spróbować wykonać następujące czynności: o 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ługości 172 bajtów. Zwraca każdą linię jako element tablicy. Myślę, że to jest dopuszczalne.
Ismael Miguel
Nawiasem mówiąc, jeśli używasz .map()zamiast .forEach(), możesz zapisać 3 bajty, zmniejszając do 169 bajtów. Przy odrobinie zabawy, może to być tweetowanie!
Ismael Miguel
@IsmaelMiguel Pytanie prosi o wejście i wyjście za pośrednictwem specjalnie STDINi STDOUTtak myślę, że ogranicza się do odpowiedzi JavaScript prompti alertniestety.
user81655,
Rozumiem. Zaktualizuję kod, gdy będę miał szansę. Dzięki za poinformowanie mnie :-)
Quill
@ user81655 Masz rację. Powinien mieć alert(b.join`<newline>`)na końcu. Ale obrażenia można nadal zmniejszyć .map(), zamiast .forEach().
Ismael Miguel
3

Python 3, 279 278 272 173 bajtów

(dzięki Mathias Ettinger, który dosłownie uratował mnie ponad 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))  

Jeśli ktoś ma jakieś wskazówki lub sugestie, bardzo je doceniam. Dzięki!

Ashwin Gupta
źródło
Myślę, że źle zrozumiałeś, co oznacza wkład. To nie jest numer wiersza do wyświetlenia, to liczba dzieci, między którymi można podzielić słowa. Każda linia powinna być wyświetlana. W twoim kodzie int(i)powinien zająć miejsce 3, ale po tym są inne błędy do naprawienia.
Hand-E-Food
@ Hand-E-Food w porządku. Uważam, że działa tak, jak teraz!
Ashwin Gupta,
To wygląda lepiej! :-) A jeśli potrzebujesz pomocy w grze w golfa, sprawdź operatora Modulo, zwykle zapisanego jako %. Jest idealny do liczników cyklicznych.
Hand-E-Food
@ Hand-E-Food ok dzięki! Myślę, że wiem o co ci chodzi. Naprawię to jutro. Myślę, że mogę ogolić przynajmniej kilka bajtów.
Ashwin Gupta,
Kilka punktów, które służą zarówno najlepszym praktykom i pomagają skrócić kod: 1) .split()podzieli się na spacje (spacja, nowe linie, tabulatory) 2) range(0, x)najlepiej napisać jako range(x)3) spójrz na notację plastra: w[0::3]zwróci listę co trzy słowa w w.
301_Moved_Permanently
2

Mathematica, 154 bajty

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

Używa metody split-chunk-transpose-join-output z większości innych odpowiedzi.

LegionMammal978
źródło
2

MATLAB, 167 bajtów / znaków:

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

Wyjaśnienie:

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

Nie będzie wygrywać żadnych nagród na ten czas, ale było fajnie. :-)

Paul Gessler
źródło
2

Japt, 90 87 86 bajtów

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

Wiele materiałów do drukowania. Wypróbuj online!

Jak to działa

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

Próbowałem skompresować ciąg przy użyciu różnych ograniczników. Jedyną rzeczą bardziej wydajną niż spacje byłaby mała litera, ale większość z nich jest już używana, a zatem nie można jej użyć do podziału łańcucha. Oto, ile kompresji osiąga się z pozostałymi:

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

Obecnie używam d. Możliwe, że można zapisać bajt s, zastępując inną literę w hollers.

ETHprodukcje
źródło