Thế giới lớn


37

Bạn là một đầu bếp trẻ tài năng, người vừa được mời vào vị trí đầu bếp sous tại nhà hàng Ấn Độ uy tín nhất thế giới. Bạn có ít kinh nghiệm trong việc chuẩn bị các món ăn Ấn Độ, nhưng bạn quyết tâm, vì vậy bạn bắt đầu chứng tỏ bản thân. Bạn quyết định trở thành chuyên gia dosa hàng đầu . Để làm điều này, bạn không chỉ phải thành thạo việc tạo ra dosas, mà bạn phải có khả năng mở rộng quy mô của chúng thành lớn tùy ý.

Bạn tìm thấy một công thức đầy hứa hẹn cho bột bánh dosa:

  • 1 chén cơm
  • 1 chén ukda chawal
  • 1/2 chén urad
  • 1/4 chén poha
  • 1/4 muỗng cà phê hạt methi
  • Muối cho vừa ăn
  • Nước khi cần thiết

Điều này sẽ làm cho một dosa dài khoảng 1/2 mét .

Thử thách

Viết chương trình hoặc chức năng sẽ cho nhân viên nhà hàng biết chính xác những gì cần thiết để tạo một dosa duy nhất từ ​​bội số nguyên của công thức đã cho . Không gian chật hẹp trong nhà bếp, vì vậy bạn muốn mã của mình càng ngắn càng tốt. Mã ngắn nhất sẽ thắng, với các mối quan hệ sẽ đến bài viết trước đó.

Thìa và cốc đo có các kích thước tiêu chuẩn sau: 1/4, 1/3, 1/2, 2/3, 3/4 và 1. Để tránh làm phiền nhân viên nhà bếp, các phép đo phải được báo cáo theo đơn vị lớn nhất trong mà số có thể được viết dưới dạng số hỗn hợp chỉ sử dụng kích thước tiêu chuẩn .

Các phép đo lan truyền đến kích thước lớn hơn theo quy ước sau:

  • 3 muỗng cà phê == 1 muỗng canh
  • 4 muỗng canh == 1/4 cốc

Vì vậy, đối với bội số của 12, 1/4 muỗng cà phê hạt methi trở thành 1 muỗng canh. Tuy nhiên, đối với bội số của 13, nó trở thành 3 1/4 muỗng cà phê. Nếu không, nó sẽ không được đại diện trong kích thước tiêu chuẩn.

Nhân viên phục vụ phải có thể mang dosa đến bàn. Để đảm bảo dosa không bị vỡ trong quá cảnh, bạn hướng dẫn họ mang dosa theo đội. Mỗi người có thể mang tối đa một mét dosa. Vì vậy, đối với một công thức đơn hoặc đôi, chỉ cần một người để thực hiện nó. Nhân viên phục vụ sẽ kém hiệu quả hơn nếu họ bị cắt thành các phần nhỏ, do đó luôn cần một số lượng lớn người phục vụ .

Đầu vào

Lấy một số nguyên dương thông qua STDIN (hoặc thay thế gần nhất), đối số dòng lệnh hoặc đối số hàm. Con số này quyết định hệ số tỷ lệ cho công thức và có thể nhỏ bằng 1 nhưng không lớn hơn 2 32 -1. Nó có thể là bất kỳ số nguyên trong phạm vi đó.

Đầu ra

In ra STDOUT (hoặc thay thế gần nhất) danh sách các thành phần được chia tỷ lệ theo đầu vào cũng như số lượng người phục vụ cần thiết để mang dosa. Các thành phần phải được liệt kê theo thứ tự được đưa ra ở trên và trong định dạng được đưa ra dưới đây.

Ví dụ

Đầu vào:

2

Đầu ra:

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

Lưu ý rằng "cốc" thay đổi thành "cốc" khi giá trị lớn hơn 1. "tsp" không thay đổi. "Người phục vụ", như "cốc", trở thành số nhiều.

Đầu vào:

5

Đầu ra:

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

Các giá trị không nguyên lớn hơn 1 được biểu diễn dưới dạng số hỗn hợp, tức là một số nguyên theo sau là một phần giảm.

Lưu ý: Tiêu đề đến từ một video có liên quan .


15
Bây giờ chúng tôi cần ai đó thực hiện câu trả lời của Đầu bếp :)
MickyT

11
"Nhân viên phục vụ sẽ kém hiệu quả hơn nếu họ bị cắt thành các phần nhỏ, do đó, luôn cần một số lượng lớn người phục vụ." ... Chính xác thì kém bao nhiêu?
Thông tin sinh hoạt

4
@LivingIn information Vâng, bạn đã bao giờ thấy chỉ một đôi chân mang thức ăn đến bàn của bạn chưa?
Alex A.

7
@AlexA. Có bạn không
Thông tin sinh hoạt

7
@MickyT: Tôi đã thử, nhưng dường như tôi đã gặp phải một số lỗi trong trình thông dịch Chef từ CPAN. (a) Các giá trị đầu ra được phân tách bằng dấu cách, trừ khi chúng không có. .
Tim Pederick

Câu trả lời:


9

CJam, 214 byte

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*

Hãy thử trực tuyến trong trình thông dịch CJam .


Chưa thực sự chơi golf, nhưng đã muộn và tôi muốn đăng câu trả lời đầu tiên.
Dennis

Vì không có câu trả lời đầu bếp nào được đăng và câu trả lời của bạn là câu trả lời hợp lệ ngắn nhất vào cuối thời kỳ tiền thưởng, bạn sẽ giành được tiền thưởng. Cảm ơn đã tham gia thử thách đầu tiên của tôi. :)
Alex A.

7

Javascript (ES6), 443 ký tự

Điều này rất thú vị khi chơi golf, nhưng kết quả dài hơn đáng kể so với những gì tôi mong đợi.

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')

Dùng thử:

Nó chấp nhận các giá trị lên đến và thậm chí bao gồm 2^32, hoặc 4294967296. Sau đó, 'urad dal' tràn vào các số lẻ và trở thành âm.

Về cơ bản, nó tính toán số tiền chính xác khi nó đi. May mắn thay, chỉ có hạt methi cần phải có các biện pháp muỗng / muỗng / cốc; nếu không, điều này sẽ kéo dài hơn rất nhiều. (Chỉ riêng dòng hạt methi là 155 ký tự!)

Điều này cũng đã có ít nhất 500 ký tự dài trong ES5. Tôi ❤ ES6.

Như mọi khi, đề xuất được đánh giá rất cao!

Chỉnh sửa 1: Chỉ cần nhận ra rằng theo các quy tắc, 1 tspnên được thay thế bằng 1/3 tbsp, cùng với 2 tsp2/3 tbsp, cũng như 16 tsp1/3 cup....


1
Math.ceil có thể được rút ngắn thành -~như vậy, b=-~t/2 ngắn hơn nhiều, Bạn cũng có thể loại trừ dấu ngoặc đơn
Downgoat

@vihan Cảm ơn vì tiền boa, nhưng điều này chỉ hoạt động trên các số nguyên. -~1kết quả 2, đó không phải là kết quả dự định. Sự thay thế tốt nhất mà tôi có thể tìm thấy, b=-~((n-1e-9)/2)chỉ là, vì vậy tôi sẽ giữ nó như hiện tại.
Sản phẩm ETH

3

Lisp thường gặp, 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)))))

Hơi vô dụng

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

Tất cả các biện pháp được thể hiện trong tsp. Dựa trên khàm, gquyết định đơn vị nào sẽ sử dụng để in và gọi hàm định dạng hvới các đối số thích hợp.

  • k trả về giá trị true khi đối số có thể được biểu thị dưới dạng bội của 1, 1/4, 1/3, 2/3, 4/3 đơn vị
  • gchuyển đổi đầu vào dưới dạng một số muỗng canh và số lượng muỗng canh như một số cốc (như được nêu trong câu hỏi). Chúng tôi cố gắng in bằng đơn vị cốc trước, hoặc đơn vị muỗng canh, hoặc các đơn vị khác trong tps.
  • hsử dụng một chỉ thị định dạng có điều kiện để in hoặc x, x y/zhoặc y/ztiếp theo là định dạng của svới lập luận m: cho ly, s"cup~P"mà plurializes từ theo m.

Mẫu mực (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

Đây là gọn gàng. Công việc tốt đẹp.
Alex A.

3

R, 602 603 526 byte

Tôi vẫn còn nhiều chỗ để chơi golf, nhưng tôi đã hết thời gian và tôi thực sự muốn trả lời cho câu hỏi này.

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

Đối với đầu vào là 5, 1/3 tbsp 1/4 tsp methi seedsnhưng nó nên được thể hiện trong một đơn vị chung duy nhất. Vì vậy, nó phải là 1 1/4 tsp methi seeds(nếu toán tinh thần của tôi là chính xác).
Alex A.

@AlexA. Điều đó cũng tốt biết. Tôi sẽ sửa nó sớm thôi. Tôi cho rằng nó giống nhau với cốc và muỗng canh.
MickyT

Đúng, quy tắc tương tự cho tất cả các đơn vị. +1 trong khi đó, với niềm tin rằng điều đó sẽ sớm được sửa. Cảm ơn đã tham gia thử thách đầu tiên của tôi. :)
Alex A.

1

JavaScript (Node.js) , 419 byte

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 `,`
`)

Hãy thử trực tuyến!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.