Свято подяки


27

Завтра, 23 листопада, в День подяки у Сполучених Штатах. Щоб підготуватися, потрібно приготувати кілька індичок ASCII. Однак, оскільки ви запізнюєтесь із плануванням, вам потрібна програма (або функція), яка допоможе вам визначити, скільки птахів потрібно підготувати.

      .---.   _
    .'     './ )
   /   _   _/ /\
 =(_____) (__/_/==
===================

Знайдені вами індички знаходяться на невеликій стороні, тому ви зрозуміли наступні співвідношення - одна індичка буде годувати:

  • четверо людей, які люблять тільки біле м'ясо, і троє людей, які люблять тільки темне м'ясо
  • або семеро людей, яким не байдуже
  • або їх комбінація

Це означає, що в будь-якій даній індичці є 4 порції білого м'яса і 3 порції темного м'яса. Крім того, ви не можете придбати та приготувати часткову індичку.

Наприклад, для 3-х людей, які люблять тільки біле м'ясо, 6 людей, які люблять лише темне м'ясо, і 3-х людей, яким все одно, вам знадобиться дві індички. Це дає 8 порцій білого і 6 порцій темного, що достатньо, щоб задовольнити всіх і мати трохи білого м'яса:

      .---.   _         .---.   _
    .'     './ )      .'     './ )
   /   _   _/ /\     /   _   _/ /\
 =(_____) (__/_/== =(_____) (__/_/==
=====================================

Для 20 людей, яким не байдуже, вам знадобляться три індички, або трохи білого або темного кольору:

      .---.   _         .---.   _         .---.   _
    .'     './ )      .'     './ )      .'     './ )
   /   _   _/ /\     /   _   _/ /\     /   _   _/ /\
 =(_____) (__/_/== =(_____) (__/_/== =(_____) (__/_/==
=======================================================

І так далі.

Правила

  • Три входи можуть бути в будь-якому обраному вами порядку та в будь-якому зручному форматі . Будь ласка, вкажіть у своїй відповіді, як приймаються дані.
  • Ніколи не буде вимоги до більш ніж 25 індичок (тому максимум 175 людей для годування).
  • Провідні / остаточні рядки чи інші пробіли необов’язкові, за умови, що символи розташовуються належним чином.
  • Прийнятна або повна програма, або функція. Якщо функція, ви можете повернути вихід, а не надрукувати його.
  • Вихід може бути на консолі, повернутий у вигляді списку рядків, повернутий як окремий рядок тощо.
  • Стандартні лазівки заборонені.
  • Це тому діють усі звичайні правила гольфу, і найкоротший код (у байтах) виграє.

ваші співвідношення не зовсім мають сенс для мене - вам здається, ви маєте на увазі, що 7 людей, яким не байдуже, отримують лише залишки, але, здається, пишуть, що індичка може годувати 3 + 4 + 7 = 14 людей (або того індички може вистачити лише для того, щоб годувати 3 темних м'ясоїдів).
dzaima

@dzaima З прикладів виходить, що одна індичка має 4 порції білого м’яса і 3 темного. Так він обслуговує (4 людини, які люблять тільки біле м'ясо І 3 людини, які люблять лише темне м'ясо) АБО 7 людей без переваг.
KSmarts

@KSmarts це те, про що я теж говорю в коментарі, але текст не так добре говорить
dzaima

1
Як індичок слід ставити поруч? Схоже, що жодна з нинішніх відповідей не перетинається з прикладами
dzaima

4
Чи отримуємо ми винагороду за рішення в курці?
Уріель

Відповіді:


21

Befunge-93, 231 224 байт

p&:10p3+4/:&:20p2+3/\-:v
v<0-1:+*`0:-\/7+++&g02<0
>"   _   .---.      "vg`
>"  ) /.'     '.    "v0*
>"  \/ /_   _   /   "v1+
>"==/_/__( )_____(= "v6:
v^0-1 _$"v"000g1+:>v v^<
:#,_$:^1,+55:p+1p00< >>>
_$$99+*"=":>,#:\:#->#1_@

Спробуйте в Інтернеті!

Три значення читаються зі stdin у порядку: біле м'ясо, темне м'ясо, байдуже.


17
Я знаю, що я не повинен підтримувати виклик на гольф з кодом для художньо викладеного коду, але ... Це просто так виглядає, як фрекінська індичка в духовці, тому +1!
Рівень річки Св.

1
Я дивлюся на запитання і думаю: "Немає способу гольф-коду зробити це легко", і тоді я побачив, як в духовці готується індичка-індичка, яка готується і вирішує проблему.
MechMK1

6

APL (Dyalog) , 120 118 104 байт

14 байт збережено завдяки @ Adám

{,/(⌈⌈/4 3 7÷⍨⍵,⍺++/⍵)/'='⍪⍨' .-_''/)\=('[4 1910 10⊤¯35+⎕UCS'###(##-:77-&(#F*####+,&0N&&)#,N0Z&d++#']}

Спробуйте в Інтернеті!

Вибагливі білі та темні - справа, ліві - не вимогливі.

На жаль, більша частина байтового рахунку займає поточний рядок.

Як?

⍵,⍺++/⍵ - створює масив whity, darky та суму їх усіх плюс не пікі

4 3 7÷⍨ - діліться на скільки з них отримує свої бажання від однієї курки

⌈/ - візьміть найвищу оцінку з трьох - тому якщо у нас надзвичайно велика кількість шукачів темного м'яса, вони не залишаться осторонь

- стеля, якщо затребувана лише напівкурка

Потім ми створюємо рядок, додаємо її , потім повторюємо закриту матрицю, з якою розраховували курчат /, і, нарешті, з'єднуємо всіх курчат ,/.


4
+1 за дзвінки курчат-індиків. Тому що це вони, прославлені кури. Досі смачний хоч.
J. Sallé


'='⍪⍨' .-_''/)\=('[4 19⍴10 10⊤¯35+⎕UCS'###(##-:77-&(#F*####+,&0N&&)#,N0Z&d++#']з ⎕IO←0.
Адам




2

Вугілля деревне , 76 байт

”{‴∨➙×95;{;C.ÞgF⁷J*←λ|⁸KK][§X⎚¦»Z◧↘gⅉ✳⟧F⎇≧h”×=¹⁹NθNηF⊖⌈⌈⟦∕θ³∕η⁴∕⁺⁺θηN⁷⟧C¹⁸¦⁰

Спробуйте в Інтернеті! Посилання на багатослівну версію коду. Пояснення:

”{‴∨➙×95;{;C.ÞgF⁷J*←λ|⁸KK][§X⎚¦»Z◧↘gⅉ✳⟧F⎇≧h”

Роздрукуйте індичку з пробілом на 1 пробіл.

×=¹⁹

Роздрукуйте таблицю.

NθNη

Введіть кількість тих, хто їсть темне і біле м'ясо.

F⊖⌈⌈⟦∕θ³∕η⁴∕⁺⁺θηN⁷⟧

Повторіть на одну, меншу від максимальної межі а) на третину від кількості їдять темне м'ясо б) на одну чверть від кількості їдців білого м'яса в) на одну сьому частину кількості закусочних.

C¹⁸¦⁰

Зробіть копію індички.


2

Excel VBA, 222 219 211 198 байт

Анонімна функція негайного вікна VBE, яка приймає введення з діапазону [A1:C1]із порядком білого м'яса, темного м’яса та байдужих у такому порядку та виводить на діапазон [D1].

[D1]=[Int(Max((A1+3)/4,(B1+2)/5,Sum(1:1,6)/7))]:For Each s In Split("      .---.   _   1    .'     './ )  1   /   _   _/ /\  1 =(_____) (__/_/==1",1):[E1]=s:?[Rept(E1,D1)]:Next:?[Rept("=",18*D1+1)]

Спочатку рішення знаходить правильну кількість індиків, а потім повторює схему індички багато разів. В ідеалі це було б безпосередньо виведене на безпосереднє вікно VBE, як показано функцією нижче

[D1]=[Int(Max((A1+3)/4,(B1+2)/5,Sum(1:1,6)/7))]:For Each s In Split("      .---.   _   1    .'     './ )  1   /   _   _/ /\  1 =(_____) (__/_/==1",1):[E1]=s:?[Rept(E1,D1)]:Next:?[Rept("=",18*D1+1)]

Ця версія спочатку дає правильну відповідь, однак компілятор негайно автоматично _відформатовується, як і символ продовження рядка, і, таким чином, переміщується, щоб мати лише один (пробіл) символ зліва, порушуючи схему.

Приклад наведений нижче для наочності

[A1:C1]=Array(0,0,20):[D1].Clear
[D1]=[Int(Max((A1+3)/4,(B1+2)/5,Sum(1:1,6)/7))]:For Each s In Split("      .---.   _   1    .'     './ )  1   /   _   _/ /\  1 =(_____) (__/_/==1",1):[E1]=s:?[Rept(E1,D1)]:Next:?[Rept("=",18*D1+1)]

'' Note that the `_` to the right has moved     V
      .---.   _         .---.   _         .---. _
    .'     './ )      .'     './ )      .'     './ )  
   /   _   _/ /\     /   _   _/ /\     /   _   _/ /\  
 =(_____) (__/_/== =(_____) (__/_/== =(_____) (__/_/==
=======================================================

Для виправлення цього останнього символу пробілу ( , символ 32) перед _рядком першого виводу буде замінено пробіл без розриву (  , char 160, Alt + 255)

      .---.   _         .---.   _         .---.   _   
    .'     './ )      .'     './ )      .'     './ )  
   /   _   _/ /\     /   _   _/ /\     /   _   _/ /\  
 =(_____) (__/_/== =(_____) (__/_/== =(_____) (__/_/==
=======================================================

-3 байти для використання 1 оператора розмежуваним розділенням

-8 байт для використання в русі = в розділення та використання додавання рядків над конкатенацією

-13 байт для використання нерозривного простору для запобігання автоматичного форматування виводу



1

JavaScript (ES6), 180 179 байт

Виводить масив рядків.

(a,b,c)=>[...`      .---.   _   
    .'     './ )  
   /   _   _/ /\\  
 =(_____) (__/_/==`.split`
`.map(l=>l.repeat(n=Math.max((6+c+a+b)/7,a+3>>4,(b+2)/3)|0)),'='.repeat(18*n+1)]


JavaScript (ES6), 182 181 байт

Виводить один рядок.

(a,b,c)=>`      .---.   _   
    .'     './ )  
   /   _   _/ /\\  
 =(_____) (__/_/==
${'='.repeat(18)}`.split`
`.map(l=>l.repeat(Math.max((6+c+a+b)/7,a+3>>4,(b+2)/3))).join`
`+'='

-1 байт (Arnauld): a+3>>4замість(a+3)/4)

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