World Big Dosa


37

คุณเป็นพ่อครัวหนุ่มที่มีความสามารถซึ่งเพิ่งได้รับการเสนอตำแหน่งเป็นเชฟที่เก่งที่ร้านอาหารอินเดียที่มีชื่อเสียงที่สุดในโลก คุณมีประสบการณ์น้อยในการเตรียมอาหารอินเดีย แต่คุณตั้งใจแน่วแน่ดังนั้นคุณจึงตั้งใจพิสูจน์ตัวเอง คุณตัดสินใจที่จะเป็นผู้เชี่ยวชาญด้านdosaชั้นนำ ในการทำเช่นนี้คุณจะต้องไม่เพียงสร้างต้นแบบของการสร้าง dosas แต่คุณต้องสามารถปรับขนาดให้ใหญ่โดยพลการ

คุณพบสูตรที่มีแนวโน้มสำหรับแป้ง Dosa:

  • ข้าว 1 ถ้วย
  • 1 ถ้วยยูเครน
  • 1/2 ถ้วย urad dal
  • poha 1/4 ถ้วย
  • เมล็ดเมธี 1/4 ช้อนชา
  • เกลือเพื่อลิ้มรส
  • น้ำตามต้องการ

นี้จะทำให้ Dosa ประมาณ1/2 เมตรยาว

ท้าทาย

เขียนโปรแกรมหรือฟังก์ชั่นที่จะบอกพนักงานร้านอาหารว่าสิ่งที่จำเป็นที่จะทำให้ Dosa เดียวออกจากจำนวนเต็มของสูตรที่กำหนด พื้นที่ในครัวแน่นคุณต้องการให้รหัสของคุณสั้นที่สุดเท่าที่จะเป็นไปได้ รหัสที่สั้นที่สุดชนะด้วยความสัมพันธ์ไปที่โพสต์ก่อนหน้า

การวัดช้อนและถ้วยมีขนาดมาตรฐานดังต่อไปนี้: 1/4, 1/3, 1/2, 2/3, 3/4 และ 1 เพื่อหลีกเลี่ยงการขุ่นเคืองพนักงานในครัวจะต้องรายงานการวัดในหน่วยที่ใหญ่ที่สุดใน ซึ่งจำนวนที่สามารถเขียนเป็นตัวเลขผสมโดยใช้ขนาดมาตรฐานเท่านั้น

การวัดขยายไปสู่ขนาดที่ใหญ่ขึ้นตามแบบแผนต่อไปนี้

  • 3 ช้อนชา == 1 ช้อนโต๊ะ
  • 4 ช้อนโต๊ะ == 1/4 ถ้วย

ดังนั้นสำหรับหลาย 12, 1/4 ช้อนชาเมล็ดเมธีกลายเป็น 1 ช้อนโต๊ะ อย่างไรก็ตามสำหรับผลคูณของ 13 มันจะกลายเป็น 3 1/4 tsp มิฉะนั้นจะไม่ถูกแสดงในขนาดมาตรฐาน

เจ้าหน้าที่รอจะต้องสามารถนำโดซาไปที่โต๊ะได้ เพื่อให้แน่ใจว่าโดซาไม่แตกหักในระหว่างการขนส่งคุณสั่งให้พวกเขาพกโดซาเป็นทีม แต่ละคนสามารถบรรทุกโดซาได้มากที่สุดหนึ่งเมตร ดังนั้นสำหรับสูตรเดี่ยวหรือสองครั้งจำเป็นต้องมีเพียงคนเดียวเท่านั้นในการพกพา พนักงานรอจะมีประสิทธิภาพน้อยลงหากพวกเขาถูกตัดเป็นเศษส่วนดังนั้นจำเป็นต้องใช้พนักงานจำนวนเต็มเสมอ

อินพุต

รับจำนวนเต็มบวกผ่าน 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

โปรดทราบว่า "cup" เปลี่ยนเป็น "cups" เมื่อค่ามากกว่า 1 "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
ตอนนี้เราต้องการใครซักคนที่จะตอบเชฟ :)
มิคกี้

11
"พนักงานรอมีประสิทธิภาพน้อยกว่าหากพวกเขาถูกตัดเป็นเศษส่วนดังนั้นจำเป็นต้องใช้พนักงานจำนวนเต็มเสมอ" ... มีประสิทธิภาพน้อยกว่านี้จริงไหม?
LivingInformation

4
@LivingInformation ทีนี้คุณเคยเห็นแค่ขาคู่หนึ่งที่พกอาหารไปที่โต๊ะของคุณหรือไม่?
Alex A.

7
@AlexA คุณไม่ได้
LivingInformation

7
@MickyT: ฉันพยายามแล้ว แต่ดูเหมือนว่าฉันจะพบข้อบกพร่องบางอย่างในล่าม Chef จาก CPAN (a) ค่าเอาต์พุตถูกคั่นด้วยช่องว่างยกเว้นเมื่อไม่มี (b) บางอย่างเกี่ยวกับสูตรย่อย Chutney ของฉันที่มีหมายเลขผสม (หรือเป็นโยเกิร์ตมิ้นต์เปรียบเทียบหรือไม่) เป็นสาเหตุให้ล่ามตายด้วยข้อความแสดงข้อผิดพลาดที่คลุมเครือ
ทิม Pederick

คำตอบ:


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^32 4294967296หลังจากนั้น 'urad dal' จะล้นในจำนวนคี่และกลายเป็นค่าลบ

โดยทั่วไปมันจะคำนวณจำนวนเงินที่ถูกต้องตามที่มันไป โชคดีที่มีเพียงเมล็ดเมธีเท่านั้นที่ต้องมีมาตรการช้อนชา / ช้อนโต๊ะ / ถ้วย ไม่เช่นนั้นจะนานกว่านี้มาก (สายพันธุ์เมธีเพียงอย่างเดียวคือ 155 ตัวอักษร!)

สิ่งนี้จะมีความยาวอย่างน้อย 500 ตัวอักษรใน ES5 ฉัน❤ ES6

เช่นเคยข้อเสนอแนะได้รับการชื่นชมอย่างมาก!

แก้ไข 1:เพิ่งรู้ว่าตามกฎ1 tspควรถูกแทนที่ด้วย1/3 tbspเหมือนกันกับ2 tspและ2/3 tbspเช่นเดียวกับ16 tspและ1/3 cup....


1
Math.ceil สามารถทำให้สั้นลงได้-~ดังนั้นb=-~t/2 จะสั้นกว่ามากนอกจากนี้คุณยังสามารถยกเว้นวงเล็บได้
Downgoat

@vihan ขอบคุณสำหรับเคล็ดลับ แต่ใช้ได้เฉพาะกับจำนวนเต็มเท่านั้น -~1ผลลัพธ์2ซึ่งไม่ใช่ผลลัพธ์ที่ต้องการ ทางเลือกที่ดีที่สุดที่ฉันสามารถหาได้b=-~((n-1e-9)/2)คือเพียงแค่ยาวดังนั้นฉันจะเก็บไว้ในแบบที่เป็นอยู่ตอนนี้
ETHproductions

3

เสียงกระเพื่อมสามัญ 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)))))

ungolfed เล็กน้อย

(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
  • gแปลงอินพุตเป็นจำนวนช้อนโต๊ะและจำนวนช้อนโต๊ะเป็นจำนวนถ้วย (ตามที่กำหนดในคำถาม) เราพยายามพิมพ์โดยหน่วยของถ้วยก่อนหรือหน่วยของช้อนโต๊ะหรือหน่วยเป็น tps
  • hใช้เงื่อนไขคำสั่งการจัดรูปแบบการพิมพ์อย่างใดอย่างหนึ่งx, x y/zหรือy/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

ใช่กฎเดียวกันสำหรับทุกหน่วย +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 `,`
`)

ลองออนไลน์!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.