世界大披萨


37

您是一位才华横溢的年轻厨师,您刚刚在世界上最负盛名的印度餐厅担任过副厨师长。您几乎没有准备印度美食的经验,但是您下定决心,因此着手证明自己。您决定成为领先的dosa专家。为此,您不仅必须掌握dosas的创建,而且还必须能够将它们缩放到任意大小。

您会发现Dosa面糊有希望的配方

  • 1杯饭
  • 1杯ukda chawal
  • 1/2杯乌拉尔·达尔
  • 1/4杯poha
  • 1/4茶匙methi种子
  • 盐调味
  • 需要的水

这将使dosa的长度约为1/2米

挑战

编写一个程序或函数,该程序或函数将告诉餐厅工作人员从给定食谱的整数倍中制作一个披萨的确切条件厨房空间狭窄,因此您希望代码尽可能短。以最短的代码为准,并联系更早的职位。

量匙和量杯具有以下标准尺寸:1 / 4、1 / 3、1 / 2、2 / 3、3 / 4和1。为避免激怒厨房工作人员,必须以最大单位报告测量结果。该数字只能用标准尺寸写成混合数。

根据以下约定,测量结果会传播到更大的尺寸:

  • 3茶匙== 1汤匙
  • 4汤匙== 1/4杯

因此,对于12的倍数,1/4 tsp methi种子变为1 tbsp。但是,对于13的倍数,它变为3 1/4 tsp。否则,它将不会以标准尺寸表示。

服务员必须能够将dosa抬到桌子上。为确保dosa不会在运输过程中中断,请指示他们将dosa随身携带。每个人最多可以携带一米的dosa。因此,对于单一或双重配方,只需一个人即可携带。如果将服务员切成小块,效率会降低,因此始终需要整数个服务员

输入值

通过STDIN(或最接近的替代方法),命令行参数或函数参数获取正整数。此数字决定配方的缩放比例,并且可以小至1但不大于2 32 -1。它可以是该范围内的任何整数。

输出量

打印到STDOUT(或最接近的替代品)的列表是根据输入的比例以及随身携带dosa所需的服务员数量缩放的。成分必须按照上面给出的顺序和下面给出的格式列出。

例子

输入:

2

输出:

2 cups rice
2 cups ukda chawal
1 cup urad dal
1/2 cup poha
1/2 tsp methi seeds
Salt to taste
Water as needed
1 waiter

请注意,当值大于1时,“ cup”变为“ cups”。“ tsp”不变。像“杯子”一样,“服务员”变得复数。

输入:

5

输出:

5 cups rice
5 cups ukda chawal
2 1/2 cups urad dal
1 1/4 cups poha
1 1/4 tsp methi seeds
Salt to taste
Water as needed
3 waiters

大于1的非整数值表示为混合数,即整数后跟减小的分数。

注意:标题来自相关视频


15
现在我们需要某人做厨师回答:)
MickyT 2015年

11
“如果将服务员切成小块,效率会降低,因此总是需要整数个服务员。” ...效果到底差了多少?
LivingInformation

4
@LivingInformation好吧,您是否见过只有一条腿将食物运到您的桌子上?
Alex A.

7
@AlexA。你不是吗
LivingInformation

7
@MickyT:我尝试过,但似乎在CPAN的Chef解释器中遇到了一些错误。(a)输出值用空格隔开,除非不是。(b)关于我的混合酸辣酱子食谱(或者是比较薄荷酸奶)的某件事导致解释器因模糊的错误消息而死亡。
蒂姆·皮德里克

Answers:


9

CJam,214个字节

ri[48_24C.25]{[48ZX]f{:DW$@*\md_D{_@\%}h;:M/iDM/}3/_{W=5<}#:I=[(\'/*]{S+_0e=!*}/["cup"2$2a>'s*+"tbsp"_'b-]I=S}%4/"rice
ukda chawal
urad dal
poha
methi seeds
Salt to taste
Water as needed"N/.+N*N@)2/" waiter"1$1>'s*

CJam解释器中在线尝试。


还没打高尔夫球,但是已经晚了,我想发表第一个答案。
丹尼斯

由于没有发布厨师答案,而您的奖励是赏金期结束时最短的有效答案,因此您将赢得赏金。感谢您参加我的第一个挑战。:)
Alex A.

7

Javascript(ES6),443个字符

这对高尔夫来说非常有趣,但是结果却比我期望的更长。

d=n=>(y=s=>n<s?' cup':' cups',z=s=>n/s|0,A=' 1/4',B=' 1/2',C=' 3/4',n+y(2)+` rice
${n+y(2)} ukda chawal
${(n%2<1?n/2:z(2)+B)+y(3)} urad dal
${((e=n%4)<1?n/4:z(4)+(e<2?A:e<3?B:C))+y(5)} poha
${(n%48<1?z(192)+((c=n/48%4)>2?C:c>1?B:c>0?A:'')+y(193):n%3<1?z(12)+((f=n/3%4)>2?C:f>1?B:f>0?A:'')+' tbsp':(z(4)+(e>2?C:e>1?B:e>0?A:''))+' tsp')} methi seeds
Salt to taste
Water as needed
${(b=Math.ceil(n/2))} waiter`+(b<2?'':'s')).replace(/\n0 /g,'\n')

试试看:

它接受的值最大为,甚至包括2^324294967296。此后,“ urad dal”溢出奇数并变为负数。

基本上,它会计算正确的金额。幸运的是,只有二甲种子需要茶匙/汤匙/杯的措施;否则,这将需要更长的时间。(单独的methi种子行为155个字符!)

在ES5中,该长度也至少为500个字符。我❤ES6。

一如既往,建议不胜感激!

编辑1:刚刚意识到,根据规则,1 tsp应将替换为1/3 tbsp,与2 tsp2/3 tbsp,以及16 tsp1/3 cup...相同。


1
Math.ceil可以缩短为-~这样,b=-~t/2 更短一些,也可以排除括号
Downgoat 2015年

@vihan感谢您的提示,但这仅适用于非整数用户。-~1结果为2,这不是预期的结果。我所能找到的最佳选择b=-~((n-1e-9)/2)就是一样长,所以我将保持目前的状态。
ETHproductions 2015年

3

常见的Lisp,435

(lambda(n)(labels((k(y)(some(lambda(x)(integerp(* y x)))'(1 4/3 3/2 2 3 4)))(h(s m)(multiple-value-bind(q r)(floor m)(format()"~[~:;~:*~A ~]~[~:;~:*~A ~]~@? " q r s m)))(g(o &aux(h(/ o 3))(c(/ h 4)))(cond((k c)(h"cup~P"c))((k h)(h"tbsp"h))(t(h"tsp"o)))))(format t"~&~A rice
~Aukda chawal
~Aurad dal
~Apoha
~Amethi seeds
Salt to taste
Water as needed
~A waiter~:P
"(g(* n 12))(g(* n 12))(g(* n 6))(g(* n 3))(g(/ n 4))(ceiling(/ n 2)))))

略松一口

(lambda (n)
  (labels ((k (y)
             (some (lambda (x) (integerp (* y x))) '(1 4/3 3/2 2 3 4)))
           (h (s m)
             (multiple-value-bind (q r)
                 (floor m)
               (format nil "~[~:;~:*~A ~]~[~:;~:*~A ~]~@?" q r s m)))
           (g (o &aux (h (/ o 3)) (c (/ h 4)))
             (cond ((k c) (h "cup~P" c)) ((k h) (h "tbsp" h)) (t (h "tsp" o)))))
    (format t "~&~A rice
~A ukda chawal
~A urad dal
~A poha
~A methi seeds
Salt to taste
Water as needed
~A waiter~:P
"
            (g (* n 12)) (g (* n 12)) (g (* n 6)) (g (* n 3)) (g (/ n 4))
            (ceiling (/ n 2)))))

所有度量均以表示tsp。根据该k函数,g确定要用于打印的单元,并使用h适当的参数调用格式化函数。

  • k 当参数可以表示为1、1 / 4、1 / 3、2 / 3、4 / 3单位的倍数时返回true
  • g将输入转换为tbsp的数量,并将tbsp的数量转换为杯子的数量(如问题中所述)。我们尝试先以杯子为单位,或者以汤匙为单位打印,或者以tps为单位打印。
  • h使用条件格式化指令以打印任一xx y/zy/z随后的格式化s与参数m:用于杯子,s"cup~P"根据该plurializes字m

范例(n = 17)

17 cups rice
17 cups ukda chawal
8 1/2 cups urad dal
4 1/4 cups poha
4 1/4 tsp methi seeds
Salt to taste
Water as needed
9 waiters

这很整齐。辛苦了
Alex A.

3

R,602个 603 526字节

我怀疑还有很多打高尔夫球的空间,但是我已经没时间了,我真的很想为此做一个答案。

function(i){S=gsub
M=i/c(1,5,60)
A=list(c(2,1),c(4,3),c(64,48))[[I<-max(which(M>=1))]]
B=c(4,12,192)[I]
V=c(' tsp',' tbsp',' cup')[I]
C=i%/%B
C=C+max((i%%B)%/%A*c(.3,.25))
cat(S('([ ]*)0 ','\\1',S('\\.3',' 1/3',S('\\.6',' 2/3',S('\\.5',' 1/2',S('\\.25',' 1/4',S('\\.75',' 3/4',paste0(i,' cup',if(i>1)'s',' rice
',i,' cup',if(i>1)'s',' ukda chawal
',i*.5,' cup',if(i>2)'s',' urad dal
',i*.25,' cup',if(i>4)'s',' poha
',C,V,if(C>1&I>2)'s',' methi seeds
Salt to taste
Water as needed
',ceiling(i*.5),' waiter',if(i>2)'s'))))))))}

输入为5时有,1/3 tbsp 1/4 tsp methi seeds但应以单个公共单位表示。应该是这样1 1/4 tsp methi seeds(如果我的心算正确)。
Alex A.

@AlexA。那也很好知道。我会尽快修复。我认为杯子和汤匙也一样。
MickyT,2015年

是的,所有单位的规则相同。不过,与此同时+1是基于真诚,很快就会正确。感谢您参加我的第一个挑战。:)
Alex A.

1

JavaScript(Node.js),419字节

a=>(y=g=>a<g?" cup":" cups",z=g=>a/g|0,a+y(2)+` rice
${a+y(2)} ukda chawal
${(1>a%2?a/2:z(2)+(B=" 1/2"))+y(3)} urad dal
${(1>(e=a%4)?a/4:z(4)+(2>e?A=" 1/4":3>e?B:C=" 3/4"))+y(5)} poha
${1>a%48?z(192)+(2<(c=a/48%4)?C:1<c?B:0<c?A:"")+y(193):1>a%3?z(12)+(2<(f=a/3)?C:1<f?B:0<f?A:"")+" tbsp":z(4)+(2<e?C:1<e?B:0<e?A:"")+" tsp"} methi seeds
Salt to taste
Water as needed
${b=-~a/2|0} waiter`+(2>b?"":"s")).replace(`
0 `,`
`)

在线尝试!

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.