Eeny, meeny, miny, moe


11

Вступ

Дитяча пісня 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

4
Ми завжди закінчувались: "Моя ... мати ... сказала ... щоб ... вибрати ... дуже ... найкраще ... одне ... і ... ти ... ти" ... ІТ! " Це було б класним бонусом. Звичайно, шахраї завжди перетягували "ти" і "є" над кількома людьми ...
ThisSuitIsBlackNot

1
@ThisSuitIsBlackNot NOOO (голос Дарта Вейдера)! Ви вкрали мою лінію. Я буквально увійшов до PPCG просто для того, щоб написати, що я думав про це останні два дні, відколи це побачив.
Ешвін Гупта

1
Не такий цікавий факт: Тигр раніше був 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

Піта, 103 89 84 ч

Збережено 18 байтів із стисканням рядків завдяки @Dennis та @FryAmTheEggman
Збережено ще один байт завдяки @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 має два вбудовані для (de) стиснення ( .Zі .").
Денніс

@Dennis Спасибі, ."економить 14 байт!
ETHproductions

Чи 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

@ETHproductions Це працює. Я просто забув скоротити це якось ха-ха! Дякую.
користувач81655

@ user81655 Я люблю вікна JS prompt (). Їм просто так весело. (Я знаю, що це звучить божевільно, але я маю на увазі порівняно з консолями будь-якої іншої мови. Або еквівалентним виразом типу друку)
Ашвін Гупта,

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 знайшов 3 байти, розподіливши загальну підрядку "Eeny meeny miny" та зробивши fpointfree.


Можливо, s="Eeny meeny miny "економить кілька байт.
Лінн

@Mauris: Я намагався, але це було довше.
німі

@Mauris: ... о ні, він має однакову довжину.
німі

Як щодоf=unlines.map unwords.transpose.(`chunksOf`(["moe Catch a tiger by the toe If he hollers let him go","MOE!"]>>=words.("Eeny meeny miny "++)))
Лінн

@Mauris: Приємно. Після того, як fце абсолютно безглуздо, ми можемо опустити навіть ім’я.
німі

4

Python 2, 154 147 байт

EDIT: Дякую Джо Вілліс!

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-й елемент списку.

Спробуйте тут


Ой. Ну, ви просто повністю знищили мою відповідь. ЛОЛ. Сьогодні я спробую порадити про друк ("\ n"). Що саме робить ::оператор? Це як у циклі?
Ешвін Гупта

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 , щоб promptі , до alertжаль.
користувач81655

О Я бачу. Я оновлю код, коли отримаю можливість. Дякую за інформування мене :-)
Quill

@ user81655 Ви праві. Вона повинна мати alert(b.join`<newline>`)кінець. Але збиток все ж можна зменшити за допомогою .map(), а не .forEach().
Ісмаїл Мігель

3

Python 3, 279 278 272 173 байт

(спасибі Матіасу Еттінґеру, який буквально врятував мене понад 100 БЮТІВ! )

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 добре, я вважаю, що це працює, як ви вказали зараз!
Ешвін Гупта

Це виглядає краще! :-) І якщо ви хочете отримати допомогу в гольфі, вивчіть оператора Modulo, зазвичай написаного як %. Він ідеально підходить для циклічних лічильників.
Hand-E-Food

@ Hand-E-Food добре дякую! Я думаю, я знаю, до чого ти потрапляєш. Я збираюся це виправити завтра. Я думаю, що можу поголити хоча б пару байт.
Ешвін Гупта

Кілька пунктів, які слугують як найкращим методам, так і допомагають скоротити код: 1) .split()розділиться на пробіли (пробіл, нові рядки, вкладки) 2) range(0, x)найкраще записати як range(x)3) перегляньте позначення фрагментів: w[0::3]поверне список кожні три слова в w.
301_Moved_Постійно

2

Математика, 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-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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.