感恩节盛宴


27

明天,11月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
我们是否可以从Chicken中获得解决方案的赏金?
乌列尔

Answers:


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字节

@Adám节省了14个字节

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

在线尝试!

挑剔的白色和深色在右侧,非挑剔的在左侧。

不幸的是,大多数字节计数当前被字符串占用。

怎么样?

⍵,⍺++/⍵ -创建白色,深色和它们的总和加上非挑剔的数组

4 3 7÷⍨ -除以其中的几只鸡得到他们的希望

⌈/ -以三者中的最高估算值-因此,如果我们有大量的黑肉搜寻者,他们将不会被抛在一边

-天花板,如果只需要半只鸡

然后,我们创建一个字符串,将其用括起来,然后将计算出的小鸡的封闭矩阵重复一次/,最后用将所有小鸡串联起来,/


4
+1叫火鸡。因为那就是它们,所以赞美的鸡。虽然还是好吃。
J.Sallé17年

2
@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字节的感谢Lynn
-Xcoder先生 -4字节

回到lambda 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⁷⟧

重复以下操作,使其不超过最大值的上限:a)深色肉食者数量的三分之一b)白色食肉者数量的四分之一c)食客者数量的七分之一。

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

若要更正此问题,请用不间断的空格(,char 160,)替换输出的第一行之前的最后一个空格字符(,char 32 )。_ Alt + 255

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

-3个字节供使用 1分隔分隔符语句

-8个字节供使用移动 = '移入拆分并在连接时使用字符串加法

-13个字节,用于使用不间断空格以防止输出自动格式化


2

科特林207 198字节

感谢泰勒·斯科特 -7个字节

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

目前尚不适用于TIO,因为它需要Kotlin 1.1

在线尝试!


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)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.