Eeny,meeny,miny,moe


11

介绍

童年时代的歌曲Eeny,meeny,miny,moe经常被用来在演奏标签时选择谁是“ it”。每个人都会围成一个圈,指向一个随机选择的人。他们会唱歌:

Eeny,meeny,miny,moe,
用脚趾抓住老虎。
如果他
嘶哑,那就放开他,Eeny,meeny,miny,moe。

当他们唱出每个单词时,他们指向圈子中的下一个人。当最后的“萌”被演唱时被指向的人就是“它”。孩子们会立即站起来散落。

目标

实现最短的程序(以字节为单位),该程序接受输入,子代数并列出指向它们时唱出的单词。

获胜者将在一周内被选中。

输入值

来自STDIN的单个正整数子级数。这可能比歌曲中的单词数还多。

输出量

将一个列表写入STDOUT,其中每行代表一个孩子,并包含指向该单词时唱的单词。如果孩子过多,则可以省略空行。

要求

  • 始终从第一个孩子开始。
  • 显示的单词不带标点。
  • 最后的“萌”应该强调为“萌!”。包括标点符号。

输入值

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
输入的字数是否会大于出现的字数?
门把手

7
应该将“抓住一个”,“如果他”,“被他的” /“被那个”视为两个单词还是一个?在歌曲中,它们仅算作一个“点”
OldBunny2800'1

4
我们总是以“我……母亲……说……去……挑选……最好……一个……而……你…… ...它!” 那将是一个很酷的奖励。当然,作弊者总是将“你”和“是”
拖出

1
@ThisSuitIsBlackNot NOOO(Darth Vader声音)!你偷了我的电话。我从字面上登录到PPCG只是为了写这封信,因为自从看到此消息以来的两天里我一直在思考它。
Ashwin Gupta

1
并不是那么有趣的事实:老虎曾经是N字。
DanTheMan

Answers:


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个字节

α没有得到链接.,所以我不得不bug修复这个

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个字符

感谢@Dennis和@FryAmTheEggman,使用字符串压缩节省了18个字节感谢@isaacg,
节省了另一个字节

警告:代码中有许多不可打印的内容;使用下面的链接尝试一下。

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具有两个用于(解压缩)(.Z.")的内置函数。
丹尼斯

@Dennis谢谢,."节省了14个字节!
ETHproductions 2016年

Pyth是否使用UTF-8或其他?这是89个字符,但123个字节
下乡

@DoᴡɴɢᴏᴀᴛPyth默认情况下使用ISO 8859-1,因此每个字符正好是一个字节。
丹尼斯,

FNQ== VQ,顺便说一句。
isaacg

5

果冻,84个字节

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

在线尝试!


4
用手压缩琴弦很有趣。如果Jelly 在出现次数函数上有拆分,则得分会好得多。
丹尼斯,

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 2016年

@ETHproductions有效。我只是忘了缩短它哈哈!谢谢。
user81655 '16

@ user81655我爱JS hint()窗口。他们真有趣。(我知道这听起来很疯狂,但与其他每种语言的console.out或等效的打印类型表达相比,我的意思是)
Ashwin Gupta,

4

Haskell中,160个 157字节

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!"),串联两个串,分割成单词,再取所需的大小,转置并连接的组块到一个单一的字符串。

@Mauris通过剔除公共子字符串“ Eeny meeny miny”并使其f无指向,发现了3个字节。


也许s="Eeny meeny miny "节省一些字节。
林恩

@毛里斯:我尝试过,但是时间更长。
nimi

@毛里斯:...哦,不,它的长度是一样的。
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

@毛里斯:很好。一旦f完全没有意义,我们甚至可以省略名称。
nimi

4

Python 2中,154个 147字节

编辑:谢谢乔威利斯!

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个元素的技巧。

在这里尝试


哎哟。好吧,你完全毁了我的答案。大声笑。我将在今天晚些时候尝试您的提示有关print(“ \ n”)的信息。::运算符到底是做什么的?就像for循环吗?
Ashwin Gupta,

3

Ruby,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的问题问的输入和输出,通过进行具体STDINSTDOUT,所以我认为它限制了JavaScript的答案promptalert不幸。
user81655 2016年

原来如此。如果有机会,我将更新代码。感谢您通知我:-)
羽毛笔

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

如果有人有提示或建议,我将不胜感激。谢谢!


我认为您误解了输入的含义。不是要显示的行号,而是要在其中划分单词的子级数。每行应显示。在您的代码中,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,""],"
"," "]&

使用其他大多数答案的split-chunk-transpose-join-output方法。


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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.