Праздник благодарения


27

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

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

Индюки, которых вы нашли, довольно малы, поэтому вы вычислили следующие соотношения - одна индейка будет кормить:

  • четыре человека, которые любят только белое мясо, и три человека, которые любят только темное мясо
  • или семь человек, которым все равно
  • или их комбинация.

Это означает, что в каждой индейке есть 4 порции белого мяса и 3 порции темного мяса. Кроме того, вы не можете купить и приготовить частичную индейку.

Например, для 3 человек, которые любят только белое мясо, 6 человек, которые любят только темное мясо, и 3 человек, которым все равно, вам понадобятся две индейки. Это дает 8 порций белого и 6 порций темного, что достаточно, чтобы удовлетворить всех и иметь немного оставшегося белого мяса:

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

Для 20 человек, которым все равно, вам понадобятся три индейки, и у вас останется немного белого или темного остатка:

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

И так далее.

правила

  • Три входа могут быть в любом порядке по вашему выбору и в любом удобном формате . Пожалуйста, укажите в своем ответе, как вводится.
  • Никогда не будет потребности в более чем 25 индюках (таким образом, максимум 175 человек, чтобы накормить).
  • Лидирующие / завершающие символы новой строки или другие пробелы являются необязательными, при условии, что символы выстраиваются соответствующим образом.
  • Допустимы либо полная программа, либо функция. Если функция, вы можете вернуть вывод, а не распечатать его.
  • Вывод может быть на консоль, возвращен в виде списка строк, возвращен в виде одной строки и т. Д.
  • Стандартные лазейки запрещены.
  • Это поэтому применяются все обычные правила игры в гольф, и выигрывает самый короткий код (в байтах).

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

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

Попробуйте онлайн!

Три значения читаются из стандартного ввода в следующем порядке: белое мясо, темное мясо, все равно.


17
Я знаю, что я не должен ставить вызов игре в гольф для художественно выложенного кода, но ... Это просто похоже на чертову индейку в духовке, так что +1!
Уровень Река St

1
Я смотрю на вопрос и думаю: «Нет никакого способа, которым код для игры в гольф может сделать это легко», а затем я увидел, как в духовке жареная индейка готовит и решает проблему.
МечМК1

6

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

14 байтов сохранено благодаря @ Adám

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

Попробуйте онлайн!

Придирчивый белый и темный справа, не придирчивый слева.

Жаль, что большая часть байтов в настоящее время занята строкой.

Как?

⍵,⍺++/⍵ - создает массив белых, темных и суммирует их всех плюс не придирки

4 3 7÷⍨ - разделите, сколько из них получает свои пожелания от одной курицы

⌈/ - возьмите наивысшую оценку из трех - поэтому, если у нас будет очень много искателей темного мяса, они не останутся в стороне

- потолок, если востребована только половина курицы

Затем мы создаем строку, заключаем ее с , затем повторяем закрытую матрицу, с которой рассчитываем количество цыплят /, и, наконец, объединяем все цыплята с ,/.


4
+1 для вызова индюшек кур. Потому что они такие, прославленные цыплята. Тем не менее, вкусно.
J. Sallé


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

4

Python 2 , 142 байта

lambda w,d,n:[min(e)+-min(-w/3,-d/4,-(w+d+n)/7)*e.center(18)for e in"  .---.   _"," .'     './ )","/   _   _/ /\\","=(_____) (__/_/==","="*18]

Попробуйте онлайн!

-16 байтов благодаря Линн
-4 байта благодаря мистеру Xcoder

и обратно к лямбде xD




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) перед _первой строкой в ​​выводе заменяется неразрывным пробелом (  символ 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 байт (Арнаулд): a+3>>4вместо(a+3)/4)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.