Dünya Büyük Dosa


37

Sizlere dünyanın en prestijli Hint restoranında sous şefi pozisyonu teklif edilmiş yetenekli bir genç şefsiniz . Hint mutfağı hazırlama konusunda çok az deneyiminiz var, ama kararlısınız, bu yüzden kendinizi kanıtlamaya karar verdiniz. Önde gelen dosa uzmanı olmaya karar verdiniz . Bunu yapmak için, sadece dosas oluşumunda ustalaşmamalı, aynı zamanda keyfi büyüklükte olacak şekilde ölçeklendirebilmelisiniz.

Dosa meyilli için umut verici bir tarif buluyorsunuz :

  • 1 su bardağı pirinç
  • 1 su bardağı ukda chawal
  • 1/2 fincan urad dal
  • 1/4 bardak poha
  • 1/4 çay kaşığı methi tohumları
  • Tat vermek için tuz
  • Gerektiği gibi su

Bu, yaklaşık 1/2 metre uzunluğunda bir dosa yapacaktır .

Meydan okuma

Restoran çalışanlarına verilen tarifin tamsayıdan tek bir dosa çıkarması için tam olarak neyin gerekli olduğunu söyleyecek bir program veya işlev yazın . Mutfakta alan dar, bu nedenle kodunuzun mümkün olduğunca kısa olmasını istiyorsunuz. En kısa kod, bağları önceki yazıya gidiyor, kazanır.

Ölçme kaşık ve bardak aşağıdaki standart boyutlarda gelir: 1/4, 1/3, 1/2, 2/3, 3/4 ve mutfak personeli kızdırmamayı için 1. ölçümler rapor edilmelidir büyük biriminde yer sayının yalnızca standart boyutlar kullanılarak karışık sayılar halinde yazılabilmesi .

Ölçümler aşağıdaki kurallara göre daha büyük boyutlara yayılır:

  • 3 yemek kaşığı == 1 yemek kaşığı
  • 4 yemek kaşığı == 1/4 bardak

Yani 12 kat, 1/4 çay kaşığı methi tohumları 1 yemek kaşığı olur. Bununla birlikte, 13'ün bir katı için, 3 1/4 çay kaşığı olur. Aksi takdirde standart boyutlarda gösterilmez.

Bekleme personeli dosayu masalara taşıyabilmelidir. Dosa'nın transit geçmediğinden emin olmak için dosaları takımlar halinde taşımalarını söyleyin. Her insan en fazla bir metre dosa taşıyabilir. Dolayısıyla, tek veya çift tarif için, onu taşımak için sadece bir kişi gerekir. Bekleme personeli kesirli parçalara ayrılırsa daha az etkilidir, bu nedenle her zaman tam sayıdaki garsona ihtiyaç duyulur.

Giriş

STDIN (veya en yakın alternatif), komut satırı argümanı veya işlev argümanı üzerinden pozitif bir tamsayı alın. Bu sayı tarif için ölçeklendirme faktörünü belirler ve 1 kadar küçük olabilir ancak 2 32 -1'den büyük olamaz . Bu aralıktaki herhangi bir tam sayı olabilir.

Çıktı

STDOUT'a (veya en yakın alternatife) girişe göre ölçeklendirilen bileşenlerin listesini ve dosa taşımak için gereken garsonların sayısını yazdırın. İçerikler yukarıda verilen sırada ve aşağıda verilen formatta listelenmelidir.

Örnekler

Giriş:

2

Çıktı:

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

Değer 1'den büyük olduğunda "cup" un "cup" olarak değiştiğini unutmayın. "Tsp" değişmez. "Garson" gibi "fincan" çoğul olur.

Giriş:

5

Çıktı:

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'den büyük tam sayı olmayan değerler, karışık sayılar, yani azaltılmış bir kesri takip eden bir tam sayı olarak temsil edilir.

Not: Başlık, ilgili bir videodan gelir .


15
Şimdi bir şef cevap yapacak birilerine ihtiyacımız var :)
MickyT

11
"Bekleme personeli kesirli parçalara ayrılırsa daha az etkilidir, bu nedenle tam sayıdaki garsonlar her zaman gereklidir." ... Tam olarak ne kadar az etkili?
LivingInformation

4
@LivingInformation Peki, hiç bir çift bacağınızın masanıza yiyecek taşıdığını gördünüz mü?
Alex A.

7
@AlexA. Yapmadın mı
LivingInformation 23

7
@MickyT: Denedim ama CPAN'dan Chef tercümanında bazı hatalara rastlamış gibiyim. (a) Çıktı değerleri, olmadıkları zaman hariç, boşluklarla ayrılır. (b) Karışık Sayı Chutney alt tarifim hakkında bir şey (veya Kıyaslanmış Darlı Yoğurt mu?) tercümanın belirsiz bir hata mesajı ile ölmesine neden oluyor.
Tim Pederick

Yanıtlar:


9

CJam, 214 bayt

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 tercümanında çevrimiçi olarak deneyin .


Henüz golf oynamadım, ama geç oldu ve ilk cevabı göndermek istedim.
Dennis,

Hiçbir Şef cevabı gönderilmediğinden ve ödül süresi sonunda sizinki en kısa geçerli cevap olduğundan, ödülü kazanırsınız. İlk meydan okumama katıldığın için teşekkür ederim. :)
Alex A.

7

Javascript (ES6), 443 karakter

Golf oynamak çok eğlenceliydi ama sonuç beklediğimden çok daha uzun.

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

Denemek:

2^32, Veya dahil olmak üzere hatta değerleri kabul eder 4294967296. Bundan sonra, 'urad dal' tek sayılara taşar ve negatif olur.

Temel olarak, doğru miktarları olduğu gibi hesaplar. Neyse ki, sadece methi tohumlarının çay kaşığı / yemek kaşığı / kap ölçüsü olması gerekir; Aksi takdirde, bu çok daha uzun olurdu. (Yalnız methi tohum hattı 155 karakterdir!)

Bu aynı zamanda ES5'te en az 500 karakter uzunluğunda olacaktı. Ben ❤ ES6.

Her zaman olduğu gibi, öneriler büyük beğeni topluyor!

Düzenleme 1: Sadece kurallara göre, fark 1 tspile değiştirilmesi gerekir 1/3 tbspile aynı, 2 tspve 2/3 tbspyanı sıra 16 tspve 1/3 cup....


1
Math.ceil için kısaltılabilir -~, böylece b=-~t/2 çok daha kısadır, ayrıca parantez hariç tutabilirsiniz
Downgoat

@vihan Bahşiş için teşekkürler, ama bu sadece tam sayı olmayanlarda çalışıyor. -~1sonuçlanan 2, amaçlanan sonuç değildir. Bulabildiğim en iyi alternatif, b=-~((n-1e-9)/2)uzun süredir, bu yüzden şimdilik olduğu gibi tutacağım.
ETHProductions

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

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

Tüm önlemler içinde ifade edilir tsp. Göre kfonksiyon, gbaskı için kullanılacak ve biçimlendirme işlevini çağırmak üzere hangi birimleri karar huygun argüman.

  • k Argüman 1, 1/4, 1/3, 2/3, 4/3 ünite katı olarak ifade edilebildiğinde true değerini döndürür.
  • ggirdiyi bir çorba kaşığı ve çorba kaşığı sayısını bir bardak şeklinde dönüştürür (soruda belirtildiği gibi). Öncelikle bardaklardan veya yemek kaşığı biriminden veya tps cinsinden yazdırmaya çalışıyoruz.
  • hYa yazdırmak için koşullu biçimlendirme yönergeleri kullanın x, x y/zya da y/zbir biçimlendirme ardından sbağımsız değişkenle m: bardak için, solduğu "cup~P"uygun kelimeyi plurializes hangi m.

Örnek (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

Bu temiz. İyi iş.
Alex A.

3

R, 602 603 526 bayt

Hala golf oynamak için çok fazla alan bu şüpheli, ama zaman tükendi ve gerçekten bunun için bir cevap yapmak istedim.

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 girişi için bu, 1/3 tbsp 1/4 tsp methi seedsancak tek bir ortak birimde gösterilmelidir. Öyle olmalı 1 1/4 tsp methi seeds(zihinsel matematiğim doğru ise).
Alex A.

@AlexA. Bu da iyi biliyor. Yakında düzelteceğim. Bunun bardak ve yemek kaşığı ile aynı olduğunu varsayıyorum.
MickyT

Evet, tüm birimler için aynı kural. Bu arada +1, iyi niyetle yakında doğru olacaktır. İlk meydan okumama katıldığın için teşekkür ederim. :)
Alex A.

1

JavaScript (Node.js) , 419 bayt

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

Çevrimiçi deneyin!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.