イーニー、ミーニー、ミニー、モー


11

前書き

幼年期の歌Eeny、meeny、miny、moeタグを再生するときに誰が「それ」だったかを選択するためによく使用されました。全員が輪になって、ランダムに選択された1人を指さします。彼らは歌うでしょう:

Eeny、meeny、miny、moe、
つま先でトラを捕まえます。
彼が大声で叫ぶなら、彼を手放しなさい、イーニー、ミーニー、ミニー、モー

彼らはそれぞれの言葉を歌いながら、円の中の次の人を指さしました。最後の「萌え」が歌われたときに指さされるのは「それ」だろう。子どもたちはすぐに立ち上がって散ります。

ゴール

入力、子の数、および指示されたときに歌われた単語をリストする、最短のプログラムをバイト単位で実装します。

勝者は1週間で選出されます。

入力

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
「catch a」と「if he」と「by his」/「by the」は、2つの単語または1つの単語として扱われますか?この曲では、彼らは唯一の「点」としてカウント
OldBunny2800

4
私たちはいつも「私の...母...言った...選ぶ...非常に...最高... 1つ...そして...あなた... ...それ!" それは素晴らしいボーナスです。もちろん、詐欺師は、常に「あなた」をドラッグして...数人の上に「ある」
ThisSuitIsBlackNot

1
@ThisSuitIsBlackNot NOOO(ダースベイダーの声)!あなたは私の行を盗んだ。私はこれを見た後、過去2日間それについて考えていたので、私はそれを書くために文字通りPPCGにログオンしました。
アシュウィングプタ

1
それほど面白くない事実:Tigerはかつて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文字

@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および.")圧縮用の2つのビルトインがあります。
デニス

@Dennisありがとう、."14バイト節約します!
ETHproductions

PythはUTF-8などを使用しますか?これは、89個の文字が、123バイトである
Downgoat

@DoᴡɴɢᴏᴀᴛPythはデフォルトでISO 8859-1を使用するため、各文字は正確に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

@ETHproductions動作します。なんとなく短くするのを忘れただけです(笑)!ありがとう。
user81655

@ user81655 JS prompt()ウィンドウが大好きです。彼らはとても楽しいです。(私はそれがおかしく聞こえるかもしれませんが、他のすべての言語のconsole.outまたは同等の印刷タイプ表現と比較して意味します)
アシュウィングプタ

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」を因数分解し、ポイントフリーにすることで3バイトを見つけましたf


おそらくs="Eeny meeny miny "いくつかのバイトを節約できます。
リン

@Mauris:試しましたが、もっと長くなりました。
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 "++)))
リン

@モーリス:いいですね。一度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ループのようなものですか?
アシュウィングプタ

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バイトの長さです。各行を配列の要素として返します。これは許容できると思います。
イスマエルミゲル

ところで、の.map()代わりにを使用すると.forEach()、3バイトを節約でき、169バイトに削減できます。もう少しいじることで、これは実際にツイート可能になるかもしれません!
イスマエルミゲル

@IsmaelMiguel質問は、具体的を通じてように、入力と出力を要求STDINし、STDOUT私はそれがJavaScriptの答えを制限だと思うので、promptalert、残念ながら。
user81655

ああなるほど。機会があればコードを更新します。お知らせいただきありがとうございます:
クイル

@ user81655あなたは正しいです。alert(b.join`<newline>`)最後にある必要があります。しかし、ダメージはの.map()代わりにで減らすことができ.forEach()ます。
イスマエルミゲル

3

Python 3、279 278 272 173バイト

(文字通り100バイト以上を救ってくれたMathias Ettingerに感謝

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がありますが、その後に修正する他のエラーがあります。
ハンドEフード

@ Hand-E-Foodわかりました、あなたが今指定した通りに動作すると信じています!
アシュウィングプタ

それは良く見えます!:-)ゴルフの手助けが必要な場合は、通常として書かれているモジュロ演算子を調べてください%。周期的なカウンターに最適です。
ハンドEフード

@ Hand-E-Food OKありがとう!私はあなたが何を得ているか知っていると思います。明日これを修正します。少なくとも数バイトは削れると思います。
アシュウィングプタ

コード短縮のベストプラクティスとヘルプの両方で機能しますいくつかのポイント:1)は.split()、ブランク(スペース、改行、タブ)2に分割します)range(0, x)最善のように書かれているrange(x)3)スライス表記を見て:w[0::3]すべての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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.