Dosa Besar Dunia


37

Anda adalah koki muda berbakat yang baru saja ditawari posisi sous chef di restoran India paling bergengsi di dunia. Anda memiliki sedikit pengalaman dalam menyiapkan masakan India, tetapi Anda bertekad, sehingga Anda ingin membuktikan diri. Anda memutuskan untuk menjadi ahli dosa terkemuka . Untuk melakukan ini, Anda tidak hanya harus menguasai pembuatan Renungan Sepekan, tetapi Anda harus dapat menskala mereka menjadi besar secara sewenang-wenang.

Anda menemukan resep yang menjanjikan untuk dosa adonan:

  • 1 gelas nasi
  • 1 cangkir ukda chawal
  • 1/2 gelas urad dal
  • 1/4 cangkir poha
  • 1/4 sdt biji methi
  • Garam secukupnya
  • Air sesuai kebutuhan

Ini akan membuat dosa sekitar 1/2 meter panjangnya.

Tantangan

Tulis program atau fungsi yang akan memberi tahu staf restoran persis apa yang diperlukan untuk membuat satu dosa dari kelipatan bilangan bulat dari resep yang diberikan . Ruang sempit di dapur, jadi Anda ingin kode Anda sesingkat mungkin. Kode terpendek menang, dengan ikatan menuju ke posting sebelumnya.

Sendok dan gelas pengukur datang dalam ukuran standar berikut: 1/4, 1/3, 1/2, 2/3, 3/4, dan 1. Untuk menghindari kemarahan staf dapur, pengukuran harus dilaporkan dalam unit terbesar di yang nomornya dapat ditulis sebagai angka campuran menggunakan ukuran standar saja .

Pengukuran menyebar ke ukuran yang lebih besar per konvensi berikut:

  • 3 sdt == 1 sdm
  • 4 sdm == 1/4 cangkir

Jadi untuk kelipatan 12, 1/4 sdt biji methi menjadi 1 sdm. Namun, untuk kelipatan 13, menjadi 3 1/4 sdt. Kalau tidak, itu tidak akan diwakili dalam ukuran standar.

Staf menunggu harus mampu membawa dosa ke meja. Untuk memastikan bahwa dosa tidak melanggar dalam perjalanan, Anda memerintahkan mereka untuk membawa dosa dalam tim. Setiap orang dapat membawa paling banyak satu meter dosa. Jadi untuk resep tunggal atau ganda, hanya satu orang yang diperlukan untuk membawanya. Staf menunggu kurang efektif jika mereka dipotong menjadi pecahan, sehingga jumlah pelayan selalu diperlukan.

Memasukkan

Ambil bilangan bulat positif melalui STDIN (atau alternatif terdekat), argumen baris perintah, atau argumen fungsi. Angka ini menentukan faktor penskalaan untuk resep dan bisa sekecil 1 tetapi tidak lebih besar dari 2 32 -1. Itu bisa berupa bilangan bulat apa pun dalam rentang itu.

Keluaran

Cetak ke STDOUT (atau alternatif terdekat) daftar bahan yang diskalakan sesuai dengan input serta jumlah pelayan yang diperlukan untuk membawa dosa. Bahan-bahan harus terdaftar dalam urutan yang diberikan di atas dan dalam format yang diberikan di bawah ini.

Contohnya

Memasukkan:

2

Keluaran:

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

Perhatikan bahwa "cawan" berubah menjadi "cawan" ketika nilainya lebih besar dari 1. "tsp" tidak berubah. "pelayan," seperti "cawan," menjadi jamak.

Memasukkan:

5

Keluaran:

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

Nilai non-integer yang lebih besar dari 1 direpresentasikan sebagai angka campuran, yaitu integer yang diikuti oleh pecahan yang dikurangi.

Catatan: Judul berasal dari video yang relevan .


15
Sekarang kita membutuhkan seseorang untuk melakukan jawaban Chef :)
MickyT

11
"Staf menunggu kurang efektif jika mereka dipotong kecil-kecil, jadi jumlah pelayan selalu diperlukan." ... Sebenarnya, seberapa tidak efektif?
LivingInformation

4
@LivingInformation Nah, pernahkah Anda melihat hanya sepasang kaki membawa makanan ke meja Anda?
Alex A.

7
@AlexA. Apakah kamu tidak
LivingInformation

7
@MickyT: Saya sudah mencoba, tapi sepertinya saya menemukan beberapa bug di juru bahasa Chef dari CPAN. (a) Nilai output dipisahkan oleh spasi, kecuali jika tidak. (B) Sesuatu tentang sub-resep Nomor Campuran Chutney saya (atau itu Yoghurt Perbandingan Perbandingan?) menyebabkan penerjemah mati dengan pesan kesalahan yang tidak jelas.
Tim Pederick

Jawaban:


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*

Cobalah online di juru bahasa CJam .


Belum benar-benar bermain golf, tapi sudah larut dan saya ingin memposting jawaban pertama.
Dennis

Karena tidak ada jawaban Chef yang diposting dan jawaban Anda adalah jawaban valid terpendek pada akhir periode hadiah, Anda memenangkan hadiah. Terima kasih telah berpartisipasi dalam tantangan pertama saya. :)
Alex A.

7

Javascript (ES6), 443 karakter

Ini sangat menyenangkan untuk bermain golf, tetapi hasilnya jauh lebih lama dari yang saya harapkan.

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

Cobalah:

Ia menerima nilai hingga dan bahkan termasuk 2^32, atau 4294967296. Setelah itu, 'urad dal' meluap pada angka ganjil dan menjadi negatif.

Pada dasarnya, ini menghitung jumlah yang benar saat berjalan. Untungnya, hanya biji methi yang perlu memiliki ukuran tsp / tbsp / cup; jika tidak, ini akan menjadi jauh lebih lama. (Garis benih methi sendiri adalah 155 karakter!)

Ini juga akan memiliki setidaknya 500 karakter di ES5. Saya ❤ ES6.

Seperti biasa, saran sangat dihargai!

Sunting 1: Baru menyadari bahwa sesuai aturan, 1 tspharus diganti dengan 1/3 tbsp, sama dengan 2 tspdan 2/3 tbsp, serta 16 tspdan 1/3 cup....


1
Math.ceil dapat disingkat -~jadi, b=-~t/2 jauh lebih pendek, Anda juga dapat mengecualikan kurung
Downgoat

@ Vihan Terima kasih atas tipnya, tetapi ini hanya bekerja pada non-integer. -~1hasil 2, yang bukan hasil yang diinginkan. Alternatif terbaik yang bisa kutemukan,, b=-~((n-1e-9)/2)sama panjangnya, jadi aku akan tetap seperti itu untuk saat ini.
Produk ETH

3

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

Sedikit tidak berbulu

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

Semua tindakan dinyatakan dalam tsp. Berdasarkan kfungsinya, gtentukan unit mana yang akan digunakan untuk mencetak dan panggil fungsi pemformatan hdengan argumen yang sesuai.

  • k mengembalikan true ketika argumen dapat dinyatakan sebagai kelipatan 1, 1/4, 1/3, 2/3, 4/3 unit
  • gmengonversi input sebagai jumlah tbsp dan jumlah tbsp sebagai sejumlah cangkir (seperti yang diberikan dalam pertanyaan). Kami mencoba mencetak berdasarkan unit cangkir terlebih dahulu, atau unit tbsp, atau yang lain dalam tps.
  • hgunakan arahan pemformatan bersyarat untuk mencetak x, x y/zatau y/zdiikuti dengan pemformatan sdengan argumen m: untuk cangkir, sadalah "cup~P"kata-kata yang jamak menurut m.

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

Ini rapi. Kerja bagus.
Alex A.

3

R, 602 603 526 byte

Masih banyak ruang untuk bermain golf ini, saya curiga, tetapi saya sudah kehabisan waktu dan saya benar-benar ingin melakukan jawaban untuk yang ini.

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

Untuk input 5, ini harus 1/3 tbsp 1/4 tsp methi seedstetapi harus diwakili dalam satu unit umum. Jadi seharusnya 1 1/4 tsp methi seeds(jika matematika mental saya benar).
Alex A.

@AlexA. Itu bagus juga tahu. Saya akan memperbaikinya segera. Saya berasumsi bahwa itu sama dengan cangkir dan tbsp.
MickyT

Yap, aturan yang sama untuk semua unit. +1 sementara itu, dengan itikad baik bahwa itu akan segera benar. Terima kasih telah berpartisipasi dalam tantangan pertama saya. :)
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 `,`
`)

Cobalah online!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.