Eeny, meeny, miny, moe


11

Giriş

Çocukluk şarkısı Eeny, meeny, miny, moe genellikle etiket oynarken kimin "o" olduğunu seçmek için kullanılıyordu. Herkes bir daire içinde durur ve rastgele seçilen bir kişiyi işaret eder. Şarkı söylerlerdi:

Eeny, meeny, miny, moe,
Toe tarafından bir kaplan yakala.
Eğer kaçarsa, bırak gitsin,
Eeny, meeny, miny, moe.

Her kelimeyi söylediklerinde, dairedeki bir sonraki kişiye işaret ettiler. Son "moe" söylenirken işaret edilen kişi "o" olacaktır. Çocuklar hemen ayağa kalktı ve dağıldı.

Hedef

En kısa programı girdi alan baytlarda, çocuk sayısında uygulayın ve işaret edildiğinde söylenen kelimeleri listeler.

Kazanan bir hafta içinde seçilecek.

Giriş

STDIN'den, tek, pozitif bir tam sayı, çocuk sayısı. Bu, şarkıdaki kelime sayısından fazla olabilir.

Çıktı

Her satırın bir çocuğu temsil ettiği ve işaret edilirken söylenen kelimeyi içerdiği bir listeye STDOUT yazar. Çok fazla çocuk varsa, boş çizgiler atlanabilir.

Gereksinimler

  • Her zaman ilk çocukla başlayın.
  • Kelimeleri noktalama olmadan görüntüleyin.
  • Son "moe", "MOE!" Olarak vurgulanmalıdır. noktalama işaretleri dahil.

Misal

Giriş

3

Çıktı

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

Giriş

7

Çıktı

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

Giriş

1

Çıktı

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

Giriş

21

Çıktı

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

1
Girdi hiç mevcut kelime sayısından daha fazla olacak mı?
Kapı tokmağı

7
"Yakala" ve "eğer" ve "onunla" / "ile" iki kelime mi yoksa bir kelime mi olarak ele alınmalı? Şarkıda, sadece bir "nokta" olarak
sayılırlar

4
Her zaman "Annem ... annem ..." dedi ... ... ... ... çok ... en iyi ... bir ... ve ... sen ... ...O!" Bu harika bir bonus olurdu. Tabii ki, dolandırıcıların her zaman "sen" ve "vardır" dışarı sürükledi birkaç kişi üzerinde ...
ThisSuitIsBlackNot

1
@ThisSuitIsBlackNot NOOO (Darth Vader sesi)! Sen benim hattımı çaldın. Tam anlamıyla PPCG'de oturum açtım, çünkü bunu gördüğümden beri son iki gündür düşündüğümden beri.
Ashwin Gupta

1
Çok eğlenceli değil aslında: Tiger eskiden N kelimesiydi.
DanTheMan

Yanıtlar:


5

TeaScript , 82 bayt

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

Açma, yığın, devrik, birleştirme, çıktı.

açıklama

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

Çevrimiçi deneyin


Rakip olmayan 81 bayt

αZincirleme elde değildi .Böcek bu Fix zorunda

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 karakter

@Dennis ve @FryAmTheEggman sayesinde dize sıkıştırma ile 18 bayt kaydedildi @isaacg
sayesinde başka bir bayt kaydedildi

Uyarı: Kodda birçok yazdırılamaz var; denemek için aşağıdaki bağlantıları kullanın.

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

Çevrimiçi deneyin | Test odası

Muhtemelen golf edilebilir. Öneriler hoş geldiniz!

Nasıl çalışır

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 minyBir şekilde yeniden kullanmak birkaç bayt tasarruf etmelidir. Ayrıca, Pyth (de) sıkıştırma ( .Zve .") için iki yerleşik içerir .
Dennis

@Dennis Teşekkürler, ."14 bayt kaydeder!
ETHproductions 20:16

Pyth UTF-8 veya başka bir şey kullanıyor mu? Bu 89 karakter ama 123 bayt
Downgoat

@ Doᴡɴɢᴏᴀᴛ Pyth varsayılan olarak ISO 8859-1 kullanır, bu nedenle her karakter tam olarak bir bayttır.
Dennis

FNQ== VQ, bu arada.
isaacg

5

Jöle, 84 bayt

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

Çevrimiçi deneyin!


4
Dizeyi elle sıkıştırmak ... eğlenceliydi. Jelly'in oluşumlar fonksiyonunda bir bölünmesi olsaydı, skor çok daha iyi olurdu .
Dennis

5

JavaScript (ES6), 167 bayt

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

açıklama

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

Herhangi bir l=Array(n).fill`` nedenle çalışmıyor mu ?
ETHproductions 20:16

@ETHproductions Çalışır. Bir şekilde kısaltmayı unuttum haha! Teşekkürler.
user81655

@ user81655 JS istemi () pencerelerini seviyorum. Onlar çok eğlenceli. (Kulağa çılgınca geldiğini biliyorum ama demek istediğim her dilin konsolu ile karşılaştırıldığında. Dışarıda veya eşdeğeri bir baskı türü ifadesi)
Ashwin Gupta

4

Haskell'in 160 157 bayt

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 "Diğer bölümlere ( "moe Catch ..."ve "MOE!") ekleyin , her iki dizeyi birleştirin, kelimelere bölün, gerekli boyuttaki parçaları alın, dönüştürün ve tekrar tek bir dizeye birleştirin.

@Mauris, ortak "Eeny meeny miny" alt dizisini çarpanlara ayırıp noktasız hale fgetirerek 3 bayt buldu .


Belki s="Eeny meeny miny "bazı baytlar kaydedebilir.
Lynn

@Mauris: Denedim, ama daha uzundu.
nimi

@Mauris: ... oh hayır, aynı uzunlukta.
nimi

Nasıl olurf=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: Güzel. Bir kez ftamamen biz bile adını atlayabilirsiniz pointfree edilir.
nimi

4

Python 2, 154147 bayt

EDIT: Teşekkürler 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]) 

Bu, [0 :: n] öğesinin listenin n. Öğesini yazdırdığı hileyi kullanır.

Burada deneyin


Ahh. Cevabımı tamamen yok ettin. LOL. Bugün baskı hakkında daha sonra ipucunuzu deneyeceğim ("\ n"). ::Operatör tam olarak ne yapar ? Döngü için böyle mi?
Ashwin Gupta

3

Yakut, 160 bayt

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

Dizeyi "sıkıştırmak" için yaptığım tüm girişimler onu daha da uzattı. Hala deniyorum ...

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 bayt:

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çıklama:

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

Giriş yönteminiz doğru, ancak çıkış yöntemi kabul edilmiyor. Bununla birlikte, girdiyi bağımsız değişken olarak alarak, hepsini bir işlevde sarabilirsiniz. Aşağıdakileri deneyebilirsiniz: 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 bayt uzunluğunda. Her satırı dizideki bir öğe olarak döndürür. Bence bu kabul edilebilir.
Ismael Miguel

Bu arada, .map()yerine kullanırsanız .forEach(), 3 bayt kaydederek 169 bayta düşebilirsiniz. Biraz daha uğraşmakla, bu aslında tweetable olabilir!
Ismael Miguel

@IsmaelMiguel Soru giriş ve çıkış özellikle üzerinden olmak istiyor STDINve STDOUTbu yüzden promptve alertne yazık ki JavaScript cevapları sınırladığını düşünüyorum .
user81655

Ah anlıyorum. Şansım olduğunda kodu güncelleyeceğim. Beni bilgilendirdiğiniz için teşekkürler :-)
Quill

@ user81655 Doğru. Sonunda bir olmalıdır alert(b.join`<newline>`). Ancak .map()bunun yerine hasar hala azaltılabilir .forEach().
Ismael Miguel

3

Python 3, 279 278 272 173 bayt

(tam anlamıyla beni 100+ BYTES kurtardı Mathias Ettinger sayesinde ! )

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

Herhangi birinin ipuçları veya önerileri varsa, onları gerçekten takdir ediyorum. Teşekkürler!


Bence girdinin neyi temsil ettiğini yanlış anladınız. Gösterilecek satır numarası değil, kelimelerin bölüneceği çocuk sayısı. Her satır gösterilmelidir. Kodunuzda, int(i)yerini almalı 3, ancak bundan sonra düzeltilecek başka hatalar var.
El-E-Yiyecek

@ El-E-Gıda tamam Şimdi belirttiğiniz gibi çalıştığına inanıyorum!
Ashwin Gupta

Daha iyi görünüyor! :-) Ve biraz golf yardımı istiyorsanız, genellikle olarak yazılan Modulo operatörünü araştırın %. Döngüsel sayaçlar için idealdir.
El-E-Gıda

@ El-E-Gıda tamam teşekkürler! Sanırım ne elde ettiğini biliyorum. Bunu yarın halledeceğim. Sanırım en az birkaç bayt tıraş edebilirim.
Ashwin Gupta

Hem en iyi uygulamalarda hem de kodun kısaltılmasına yardımcı olan birkaç nokta: 1) .split()boşluklara bölünecektir (boşluk, satırsonları, sekmeler) 2) range(0, x)en iyi range(x)3 olarak yazılır ) dilim gösterimlerine bir göz atın: w[0::3]her üçünün bir listesini döndürür içindeki kelimeler w.
301_Moved_Permanently

2

Mathematica, 154 bayt

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

Diğer cevapların çoğunun split-chunk-transpose-join-output yöntemini kullanır.


2

MATLAB, 167 bayt / karakter:

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

Açıklama:

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

Bu süre boyunca ödül kazanmayacak, ama eğlenceliydi. :-)


2

Japt, 90 87 86 bayt

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

Yazdırılamaz bir sürü. Çevrimiçi deneyin!

Nasıl çalışır

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

Dizeyi farklı sınırlayıcılarla sıkıştırmayı denedim. Boşluklardan daha etkili olan tek şey küçük harf olacaktır, ancak bunların çoğu zaten kullanılmaktadır ve bu nedenle dizeyi bölmek için kullanılamaz. Kalanlarla ne kadar sıkıştırma elde edildiğini aşağıda görebilirsiniz:

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

Şu anda kullanıyorum d. İçindeki bir sharfin yerine bir bayt kaydedilebilir hollers.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.