Święto Dziękczynienia

27

Jutro, 23 listopada, jest Dzień Dziękczynienia w Stanach Zjednoczonych. Aby się przygotować, musisz ugotować kilka indyków ASCII. Ponieważ jednak spóźniasz się z planowaniem, potrzebujesz programu (lub funkcji), który pomoże ci ustalić, ile ptaków musisz przygotować.

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

Znalezione przez ciebie indyki są raczej małe, więc wymyśliłeś następujące proporcje - jeden indyk nakarmi:

  • cztery osoby, które lubią tylko białe mięso i trzy osoby, które lubią tylko ciemne mięso
  • lub siedmiu ludzi, których to nie obchodzi
  • lub ich kombinacja.

Oznacza to, że w każdym indyku są 4 porcje białego mięsa i 3 porcje ciemnego mięsa. Ponadto nie można kupić i ugotować częściowego indyka.

Na przykład dla 3 osób, które lubią tylko białe mięso, 6 osób, które lubią tylko ciemne mięso, i 3 osób, które nie dbają o to, potrzebujesz dwóch indyków. To daje 8 porcji białego i 6 porcji ciemnego, co wystarczy, aby zadowolić wszystkich i mieć trochę białego mięsa:

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

Na 20 osób, które nie przejmują się, będziesz potrzebować trzech indyków i pozostanie odrobina bieli lub ciemności:

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

I tak dalej.

Zasady

  • Trzy dane wejściowe mogą być w dowolnej kolejności i w dowolnym dogodnym formacie . W odpowiedzi proszę wskazać, w jaki sposób dane wejściowe są przyjmowane.
  • Nigdy nie będzie zapotrzebowania na więcej niż 25 indyków (czyli maksymalnie 175 osób do jedzenia).
  • Wiodące / końcowe znaki nowej linii lub inne białe znaki są opcjonalne, pod warunkiem, że znaki są odpowiednio ustawione.
  • Dopuszczalny jest pełny program lub funkcja. Jeśli funkcja, możesz zwrócić dane wyjściowe zamiast je wydrukować.
  • Dane wyjściowe mogą być wysyłane do konsoli, zwracane jako lista ciągów, zwracane jako pojedynczy ciąg itp.
  • Standardowe luki są zabronione.
  • To jest więc obowiązują wszystkie zwykłe zasady gry w golfa, a wygrywa najkrótszy kod (w bajtach).
AdmBorkBork
źródło
twoje proporcje nie mają dla mnie sensu - zdajesz się sugerować, że 7 osób, które nie dbają, dostają tylko resztki, ale wydają się pisać, że indyk może wyżywić 3 + 4 + 7 = 14 osób (lub tamtą indyk może wystarczyć do nakarmienia 3 osób jedzących ciemne mięso).
dzaima,
@dzaima Z przykładów wynika, że ​​jeden indyk ma 4 porcje białego mięsa i 3 ciemne. Więc służy (4 osoby, które lubią tylko białe mięso ORAZ 3 osoby, które lubią tylko ciemne mięso) LUB 7 osób bez preferencji.
KSmarts,
@KSmarts to też mówię w moim komentarzu, ale tekst nie mówi zbyt dobrze
dzaima,
1
Jak należy ustawić indyki obok siebie? Wydaje się, że żadna z obecnych odpowiedzi nie nakłada się na siebie tak, jak przykłady
dzaima
4
Czy dostaniemy nagrodę za rozwiązanie w Chicken?
Uriel

Odpowiedzi:

21

Befunge-93, 231 224 bajtów

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

Wypróbuj online!

Trzy wartości są odczytywane ze standardowego wejścia w kolejności: białe mięso, ciemne mięso, nie przejmuj się.

James Holderness
źródło
17
Wiem, że nie powinienem głosować w golfowym konkursie na kod artystyczny, ale ... To po prostu wygląda jak dziwaczny indyk w piekarniku, więc +1!
Level River St
1
Patrzę na pytanie i myślę: „Nie ma możliwości, aby kod w golfa mógł to zrobić łatwo”, a potem zobaczyłem, że piegowaty indyk w piekarniku gotuje się i rozwiązuje problem.
MechMK1,
6

APL (Dyalog) , 120 118 104 bajtów

14 bajtów zapisanych dzięki @ Adám

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

Wypróbuj online!

Wybredni biali i ciemni są po prawej, a nie wybredni po lewej.

Szkoda, że ​​większość bajtów jest obecnie brana pod ciąg.

W jaki sposób?

⍵,⍺++/⍵ - tworzy tablicę whity, darky i sumę ich wszystkich plus non pickys

4 3 7÷⍨ - podzielić przez ilu z nich ma życzenia od jednego kurczaka

⌈/ - weź najwyższą ocenę spośród wszystkich trzech - więc jeśli mamy bardzo dużą liczbę osób poszukujących ciemnego mięsa, nie zostaną one pominięte

- pułap, na wypadek zapotrzebowania tylko połowy kurczaka

Następnie tworzymy ciąg, otaczamy go , a następnie powtarzamy zamkniętą macierz obliczone czasy kurczaków /, a na koniec łączymy wszystkie kurczaki ,/.

Uriel
źródło
4
+1 za zawołanie kurczaków indyków. Bo takie są, uwielbione kurczaki. Wciąż pyszne.
J. Sallé,
2
@ J.Sallé Nikt nie nazywa mnie kurczakiem
manassehkatz-Reinstate Monica
'='⍪⍨' .-_''/)\=('[4 19⍴10 10⊤¯35+⎕UCS'###(##-:77-&(#F*####+,&0N&&)#,N0Z&d++#']z ⎕IO←0.
Adám
4

Python 2 , 142 bajty

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

Wypróbuj online!

-16 bajtów dzięki Lynn
-4 bajtów dzięki Mr. Xcoder

i z powrotem do lambda xD

HyperNeutrino
źródło
3

SOGL V0.12 , 65 bajtów

N∫4*κ:F3*.-:h+.-¹χ∆>?F"Ωeχ&i[A⁄╔■§‼╗╝│¼ο≠≈⁹,Ρ⁴žγūž℮3zl3βΜ%G‘'³n*←

Wypróbuj tutaj!

Zamówienie jest wejść white, darka następnie either.

dzaima
źródło
2

Węgiel drzewny , 76 bajtów

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

Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:

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

Wydrukuj indyka z jednym wcięciem.

×=¹⁹

Wydrukuj tabelę.

NθNη

Podaj liczbę osób jedzących ciemne i białe mięso.

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

Powtórz jeden raz poniżej pułapu maksimum a) jednej trzeciej liczby osób jedzących mięso ciemne b) jednej czwartej liczby osób jedzących mięso białe c) jednej siódmej liczby osób jedzących mięso.

C¹⁸¦⁰

Zrób kopię indyka.

Neil
źródło
2

Excel VBA, 222 219 211 198 bajtów

Anonimowa funkcja bezpośredniego okna VBE, która pobiera dane wejściowe z zakresu [A1:C1]z porządkiem białego mięsa, ciemnego mięsa i obojętnie w tej kolejności i przekazuje dane do zakresu [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)]

Początkowo rozwiązanie znajduje prawidłową liczbę indyków, a następnie tyle razy powtarza wzór indyka. Idealnie byłoby to wtedy bezpośrednio wyprowadzone do bezpośredniego okna VBE, jak pokazano poniżej

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

Ta wersja początkowo wywołuje prawidłową odpowiedź, jednak jest ona automatycznie formatowana automatycznie przez kompilator, podobnie jak _znak kontynuacji linii, a zatem jest przesuwana tak, aby mieć tylko jeden znak (spacja) po lewej stronie, przerywając wzór.

Przykład pokazany poniżej dla jasności

[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
      .---.   _         .---.   _         .---. _
    .'     './ )      .'     './ )      .'     './ )  
   /   _   _/ /\     /   _   _/ /\     /   _   _/ /\  
 =(_____) (__/_/== =(_____) (__/_/== =(_____) (__/_/==
=======================================================

Aby to poprawić, ostatni znak spacji ( , char 32) przed _wierszem jeden z danych wyjściowych jest zastępowany spacją niełamiącą (  , char 160, Alt + 255)

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

-3 bajty do użycia 1rozdzielonej instrukcji split

-8 bajtów do wykorzystania podczas przenoszenia =do podziału i dodawania łańcucha w celu konkatenacji

-13 bajtów na użycie niełamliwej spacji, aby zapobiec autoformatowaniu danych wyjściowych

Taylor Scott
źródło
2

Kotlin , 207 198 bajtów

dzięki Taylor Scott za -7 bajtów

{a,b,c->val n=maxOf((a+3)/4,(b+2)/3,(6+c+a+b)/7);arrayOf("      .---.   _   ","    .'     './ )  ","   /   _   _/ /\\  "," =(_____) (__/_/==").map{println(it.repeat(n))};println("=".repeat(n*18+1))}

Nie działa to jeszcze w TIO , ponieważ wymaga Kotlin 1.1

Wypróbuj online!

ovs
źródło
1

JavaScript (ES6), 180 179 bajtów

Zwraca tablicę ciągów.

(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 bajtów

Wyprowadza pojedynczy ciąg.

(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 bajt (Arnauld): a+3>>4zamiast(a+3)/4)

darrylyeo
źródło