Şükran Günü Bayramı


27

Yarın, 23 Kasım , Amerika Birleşik Devletleri'nde Şükran Günü . Hazırlanmak için bazı ASCII hindilerini pişirmelisin. Ancak, planlamaya geç kaldığınız için, kaç kuş hazırlamanız gerektiğine dair size yardımcı olacak bir programa (veya işleve) ihtiyacınız vardır.

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

Bulduğunuz hindiler oldukça küçük taraflardır, bu nedenle aşağıdaki oranları belirlediniz - bir hindi beslenecek:

  • sadece beyaz eti seven dört kişi ve sadece kara eti seven üç kişi
  • ya da iki şekilde umursamayan yedi kişi
  • veya bunların bir kombinasyonu.

Yani, belirli bir hindide toplam 4 porsiyon beyaz et ve 3 porsiyon kara et vardır. Ayrıca kısmi bir hindi alıp pişiremezsiniz.

Örneğin, sadece beyaz eti seven 3 kişi, sadece kara eti seven 6 kişi ve umursamayan 3 kişi için iki hindiye ihtiyacınız olacak. Bu, 8 porsiyon beyaz ve 6 porsiyon karanlık verir; bu, herkesi tatmin etmek ve artık beyaz et için yeterlidir:

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

Umursamayan 20 kişi için üç hindiye ihtiyacınız olacak ve biraz beyaz veya koyu artıklar olacak:

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

Ve bunun gibi.

kurallar

  • Üç giriş, istediğiniz sırada ve uygun biçimde olabilir . Lütfen cevabınızda girişin nasıl alındığını belirtiniz.
  • Asla 25'ten fazla hindi (bu nedenle en fazla 175 kişi besleme) gerekmeyecek.
  • Lider / izleyen yeni satırlar veya diğer boşluklar, karakterlerin uygun şekilde sıralanması şartıyla isteğe bağlıdır.
  • Tam bir program veya bir işlev kabul edilebilir. Bir işlev varsa, çıktıyı yazdırmak yerine geri gönderebilirsiniz.
  • Çıktı konsola olabilir, dizelerin listesi olarak döndürülür, tek bir dizge olarak döndürülür vb.
  • Standart boşluklar yasaktır.
  • Bu olduğundan, tüm normal golf kuralları geçerlidir ve en kısa kod (bayt cinsinden) kazanır.

oranların bana pek anlam ifade etmiyor - görünüşe göre umursamayan 7 kişinin yalnızca artıkları elde ettiğini, ancak bir hindiin 3 + 4 + 7 = 14 kişiyi besleyebileceğini yazıyor gibi görünüyor. türkiye sadece 3 kara et yiyiciyi beslemek için yeterli olabilir).
dzaima

@dzaima Örneklerden, bir hindide 4 porsiyon beyaz et ve 3 karanlığın olduğu görülüyor. Bu yüzden hizmet vermektedir (sadece beyaz eti seven 4 kişi ve sadece kara eti seven 3 kişi) VEYA tercihi olmayan 7 kişi.
KSmarts

@KSmarts da benim
yorumumda

1
Hindiler yan yana nasıl yerleştirilmelidir? Şu anki cevapların hiçbiri örneklerin üst üste bindiği gibi
görünmüyor

4
Chicken'da bir çözüm için lütuf alıyor muyuz?
Uriel

Yanıtlar:


21

Befunge-93, 231 224 bayt

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

Çevrimiçi deneyin!

Üç değer sırasıyla stdin'den okunur: beyaz et, koyu et, umrumda değil.


17
Sanatsal olarak ortaya konulan kod için bir golf golf yarışmasını yükseltmemem gerektiğini biliyorum ama ... Bu sadece fırında hindi gibi bir hindi gibi görünüyor, yani +1!
Seviye Nehri St

1
Şu soruya bakıyorum ve "Golf kodunu kolayca yapabilme imkânı yok" diye düşünüyorum ve sonra fırında bir hindi hindiyi pişirilirken ve sorunu çözerken gördüm.
MechMK1

6

APL (Dyalog) , 120 118 104 bayt

@ Adám sayesinde 14 bayt kaydedildi

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

Çevrimiçi deneyin!

Seçici beyaz ve karanlık sağda, seçimsiz solda.

Çok fazla sayıda bayt sayısı, şu anda dize tarafından alınır.

Nasıl?

⍵,⍺++/⍵ - beyazlık, karanlık ve hepsinin toplamının yanı sıra seçici olmayan bir dizi oluşturur

4 3 7÷⍨ - bir tavustan dileklerini kaç tanesine kavuşturarak böl

⌈/ - en yüksek üç tahmininizi yapın - eğer çok fazla miktarda koyu et arayan varsa, bir kenara bırakılmaz

- tavan, sadece yarı tavuk talep edildiğinde

Sonra bir dize yaratır, içine alırız , sonra hesaplanan tavukların katlanmış matrisini tekrarlar /ve sonunda tüm tavukları bir araya getiririz ,/.


4
Hindi tavuklarını aradığınız için +1. Çünkü onlar bu, yüceltilmiş tavuklar. Yine de lezzetli.
J. Sallé


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

4

Python 2 , 142 bayt

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

Çevrimiçi deneyin!

Xcoder sayesinde Lynn
-4 byte sayesinde -16 byte Mr.

ve bir lambda xD'ye dönüş


3

SOGL V0.12 , 65 bayt

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

Burada dene!

Girdilerin Sipariş olduğunu white, darkve sonra either.



2

Kömür , 76 bayt

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

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı bir versiyonudur. Açıklama:

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

1 boşluklu bir hindi yazdırın.

×=¹⁹

Masayı yazdır.

NθNη

Koyu ve beyaz et yiyenlerin sayısını girin.

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

Tavandan en az bir kat daha az a) karanlık et yiyenlerin sayısının üçte biri b) beyaz et yiyenlerin sayısının dörtte biri c) diners sayısının beşte biri.

C¹⁸¦⁰

Türkiyenin bir kopyasını alın.


2

Excel VBA, 222 219 211 198 Bayt

[A1:C1]Beyaz et, koyu et ve kayıtsız sırayla girdi alanını alan ve aralığa çıktı sağlayan anonim VBE acil pencere işlevi [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)]

Başlangıçta çözüm doğru hindi sayısını bulur ve ardından hindi düzenini birçok kez tekrarlar. İdeal olarak, bu daha sonra aşağıdaki fonksiyonda gösterildiği gibi doğrudan VBE acil durum penceresine gönderilir.

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

Bu sürüm başlangıçta doğru cevabı üretir, ancak, derleyici tarafından, _satır devam karakteri gibi hemen otomatik olarak biçimlendirilir ve böylece sola doğru yalnızca bir (boşluk) karaktere sahip olacak şekilde taşınır .

Netlik için aşağıda gösterilen örnek

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

Bunu düzeltmek için , çıktının bir satırındaki satırdan önceki son boşluk karakteri ( , char 32), aralıksız _bir boşlukla (  , char 160, Alt + 255) değiştirilir.

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

1Ayrılmış split deyiminin kullanımı için -3 bayt

-8 bayt kullanımı =bölmenin içine taşımak ve birleştirme üzerinde dize ekleme kullanmak

Çıktının otomatik biçimlendirmesini önlemek için kesilmez bir alanın kullanılması için -13 bayt


2

Kotlin , 207 198 bayt

-7 baytlık Taylor Scott'a teşekkürler

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

Bu henüz TIO üzerinde çalışmıyor , Kotlin 1.1 gerektiriyor

Çevrimiçi deneyin!


1

JavaScript (ES6), 180 179 bayt

Bir dizi dizge çıktılar.

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

Tek bir dizge çıktılar.

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

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.