Am Stram Gram

11

introduction

La chanson d'enfance Eeny, meeny, miny, moe était souvent utilisée pour sélectionner qui était "it" lors de la lecture du tag. Tout le monde se tenait en cercle et désignait une personne choisie au hasard. Ils chantaient:

Eeny, meeny, miny, moe,
Attrapez un tigre par l'orteil.
S'il hurle, laissez-le partir,
Eeny, meeny, miny, moe.

En chantant chaque mot, ils pointèrent la personne suivante dans le cercle. La personne désignée lorsque le "moe" final a été chanté serait "it". Les enfants se levaient immédiatement et se dispersaient.

Objectif

Implémentez le programme le plus court en octets qui prend une entrée, le nombre d'enfants et répertorie les mots qui ont été chantés lorsqu'ils étaient pointés du doigt.

Le gagnant sera sélectionné dans une semaine.

Contribution

De STDIN, un seul entier positif, le nombre d'enfants. Cela peut être plus que le nombre de mots de la chanson.

Production

Écrit dans STDOUT une liste où chaque ligne représente un enfant et contient le mot chanté alors qu'il était pointé du doigt. S'il y a trop d'enfants, les lignes vides peuvent être omises.

Exigences

  • Commencez toujours par le premier enfant.
  • Affichez les mots sans ponctuation.
  • Le "moe" final doit être souligné comme "MOE!" y compris la ponctuation.

Exemple

Contribution

3

Production

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

Contribution

7

Production

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

Contribution

1

Production

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

Contribution

21

Production

Eeny
meeny
miny
moe
Catch
a
tiger
by
the
toe
If
he
hollers
let
him
go
Eeny
meeny
miny
MOE!
Hand-E-Food
la source
1
L'entrée sera-t-elle jamais supérieure au nombre de mots présents?
Poignée de porte
7
Est-ce que «attraper un» et «s'il» et «par son» / «par le» devraient être traités comme deux mots ou un seul? Dans la chanson, ils ne comptent que pour un "point"
OldBunny2800
4
Nous avons toujours fini par "Ma ... mère ... a dit ... de ... choisir ... la ... très ... meilleure ... et ... vous ... êtes ... ...IL!" Ce serait un bonus sympa. Bien sûr, les tricheurs ont toujours traîné le "vous" et le "êtes" sur plusieurs personnes ...
ThisSuitIsBlackNot
1
@ThisSuitIsBlackNot NOOO (voix de Darth Vader)! Tu as volé ma ligne. Je me suis littéralement connecté à PPCG juste pour écrire cela depuis que j'y pense depuis deux jours depuis que j'ai vu ça.
Ashwin Gupta
1
Fait pas si amusant: Tiger était le mot N.
DanTheMan

Réponses:

5

TeaScript , 82 octets

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

Décompresser, fragmenter, transposer, joindre, sortir.

Explication

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

Essayez-le en ligne


81 octets non concurrents

Le αn'était pas enchaîné .donc j'ai dû corriger un bug

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

Pyth, 103 89 84 caractères

18 octets enregistrés avec compression de chaîne, grâce à @Dennis et @FryAmTheEggman Un
autre octet enregistré grâce à @isaacg

Attention: il y a beaucoup de non imprimables dans le code; utilisez les liens ci-dessous pour l'essayer.

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

Essayez-le en ligne | Suite de tests

Pourrait probablement être joué au golf. Suggestions bienvenues!

Comment ça fonctionne

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.
ETHproductions
la source
La réutilisation Eeny meeny minydevrait en quelque sorte économiser quelques octets. De plus, Pyth a deux fonctions intégrées pour la (dé) compression ( .Zet .").
Dennis
@Dennis Merci, ."économise 14 octets!
ETHproductions
Pyth utilise-t-il UTF-8 ou autre chose? Il s'agit de 89 caractères mais de 123 octets
Downgoat
@ Doᴡɴɢᴏᴀᴛ Pyth utilise ISO 8859-1 par défaut, donc chaque caractère fait exactement un octet.
Dennis
FNQ== VQ, au fait.
isaacg
5

Gelée, 84 octets

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

Essayez-le en ligne!

Dennis
la source
4
Compresser la corde à la main était ... amusant. Le score serait bien meilleur si Jelly avait une fonction de séparation lors des événements .
Dennis
5

JavaScript (ES6), 167 octets

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

Explication

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
la source
Ne l=Array(n).fill`` fonctionne pas pour une raison quelconque?
ETHproductions
@ETHproductions Cela fonctionne. J'ai juste oublié de le raccourcir haha! Merci.
user81655
@ user81655 J'adore les fenêtres d'invite JS (). Ils sont tellement amusants. (Je sais que cela semble fou, mais je veux dire par rapport à console.out de toute autre langue ou à une expression de type d'impression équivalente)
Ashwin Gupta
4

Haskell, 160 157 octets

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

Ajouter "Eeny meeny miny "les autres parties ( "moe Catch ..."et "MOE!"), concaténer les deux chaînes, diviser en mots, prendre des morceaux de la taille requise, transposer et concaténer à nouveau en une seule chaîne.

@Mauris a trouvé 3 octets en factorisant la sous-chaîne commune "Eeny meeny miny" et en la rendant sans fpoint.

nimi
la source
Peut-être s="Eeny meeny miny "enregistre quelques octets.
Lynn
@Mauris: J'ai essayé, mais c'était plus long.
nimi
@Mauris: ... oh non, il a la même longueur.
nimi
Que diriez-vousf=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: Nice. Une fois fcomplètement sans point, nous pouvons même omettre le nom.
nimi
4

Python 2, 154 147 octets

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

Cela utilise l'astuce qui [0 :: n] affiche le nième élément de la liste.

Essayez-le ici

TanMath
la source
Aie. Eh bien, vous venez de détruire totalement ma réponse. LOL. Je vais essayer votre astuce plus tard dans la journée sur l'impression ("\ n"). Que fait exactement l' ::opérateur? C'est comme pour en boucle?
Ashwin Gupta
3

Rubis, 160 octets

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

Toutes mes tentatives de "compression" de la chaîne viennent de l'allonger. En train d'essayer...

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
Poignée de porte
la source
3

JavaScript (ES6), 189 octets:

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

Explication:

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`)
Penne
la source
Votre méthode d'entrée est correcte, mais la méthode de sortie n'est pas acceptée. Vous pouvez cependant tout envelopper dans une fonction, en recevant l'entrée en argument. Vous pouvez essayer ce qui suit:, 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)qui fait 172 octets de long. Il renvoie chaque ligne en tant qu'élément du tableau. Je pense que c'est acceptable.
Ismael Miguel du
Par ailleurs, si vous utilisez .map()au lieu de .forEach(), vous pouvez enregistrer 3 octets, ce qui réduit à 169 octets. Avec un peu plus de violon, cela pourrait en fait être tweetable!
Ismael Miguel
@IsmaelMiguel La question demande que l'entrée et la sortie soient spécifiques STDINet STDOUTdonc je pense que cela limite les réponses JavaScript promptet alertmalheureusement.
user81655
Oh je vois. Je mettrai à jour le code lorsque j'en aurai l'occasion. Merci de m'avoir informé :-)
Quill
@ user81655 Vous avez raison. Il devrait y avoir un alert(b.join`<newline>`)à la fin. Mais les dégâts peuvent toujours être réduits avec .map(), au lieu de .forEach().
Ismael Miguel
3

Python 3, 279 278 272 173 octets

(merci à Mathias Ettinger qui m'a littéralement sauvé plus de 100 octets! )

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

Si quelqu'un a des conseils ou des suggestions, je les apprécierais vraiment. Merci!

Ashwin Gupta
la source
Je pense que vous avez mal compris ce que représente l'entrée. Ce n'est pas le numéro de ligne à afficher, c'est le nombre d'enfants parmi lesquels diviser les mots. Chaque ligne doit être affichée. Dans votre code, int(i)devrait remplacer 3, mais il y a d'autres erreurs à corriger après cela.
Hand-E-Food
@ Hand-E-Food ok je crois que cela fonctionne comme vous l'avez spécifié maintenant!
Ashwin Gupta
Ça a l'air mieux! :-) Et si vous voulez de l'aide sur le golf, étudiez l'opérateur Modulo, généralement écrit comme %. Il est idéal pour les compteurs cycliques.
Hand-E-Food
@ Hand-E-Food ok merci! Je pense que je sais où vous voulez en venir. Je vais arranger ça demain. Je pense que je peux raser au moins quelques octets.
Ashwin Gupta
Quelques points qui servent à la fois aux meilleures pratiques et aident à raccourcir le code: 1) .split()se sépareront sur les blancs (espace, nouvelles lignes, tabulations) 2) range(0, x)est mieux écrit comme range(x)3) jetez un oeil à la notation des tranches: w[0::3]renverra une liste de tous les trois mots dedans w.
301_Moved_Permanently
2

Mathematica, 154 octets

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

Utilise la méthode split-chunk-transpose-join-output de la plupart des autres réponses.

LegionMammal978
la source
2

MATLAB, 167 octets / caractères:

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

Explication:

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

Je ne gagnerai aucun prix pour la durée de celui-ci, mais c'était amusant. :-)

Paul Gessler
la source
2

Japt, 90 87 86 octets

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

Beaucoup d'imprimables. Essayez-le en ligne!

Comment ça fonctionne

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

J'ai essayé de compresser la chaîne avec différents délimiteurs. La seule chose plus efficace que les espaces serait une lettre minuscule, mais la plupart d'entre elles sont déjà utilisées et ne peuvent donc pas être utilisées pour diviser la chaîne. Voici la quantité de compression obtenue avec les autres:

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

Actuellement j'utilise d. Il peut être possible d'enregistrer un octet avec s, en remplaçant une autre lettre hollers.

ETHproductions
la source