World Big Dosa

37

Jesteś utalentowanym młodym szefem kuchni, któremu właśnie zaproponowano stanowisko szefa kuchni w najbardziej prestiżowej indyjskiej restauracji na świecie. Masz niewielkie doświadczenie w przygotowywaniu kuchni indyjskiej, ale jesteś zdeterminowany, więc postanowiłeś się wykazać. Zdecydujesz się zostać wiodącym ekspertem dosa . Aby to zrobić, musisz nie tylko opanować tworzenie dosów, ale także mieć możliwość skalowania ich do dowolnych rozmiarów.

Znajdziesz obiecujący przepis na ciasto dosa:

  • 1 szklanka ryżu
  • 1 szklanka ukda chawal
  • 1/2 szklanki urad dal
  • 1/4 szklanki poha
  • 1/4 łyżeczki nasion methi
  • Sól dla smaku
  • Woda w razie potrzeby

To da dosa około 1/2 metra długości.

Wyzwanie

Napisz program lub funkcję, która powie personelowi restauracji dokładnie, co jest potrzebne, aby zrobić jedną dosę z całkowitej liczby wielokrotności podanego przepisu . W kuchni jest mało miejsca, więc chcesz, aby Twój kod był jak najkrótszy. Najkrótszy kod wygrywa, a więzi trafiają do wcześniejszego postu.

Łyżki i kubki pomiarowe są dostępne w następujących standardowych rozmiarach: 1/4, 1/3, 1/2, 2/3, 3/4 i 1. Aby uniknąć gniewu personelu kuchennego, pomiary należy zgłaszać w największej jednostce w której liczbę można zapisać jako liczby mieszane przy użyciu wyłącznie standardowych rozmiarów .

Pomiary rozprzestrzeniają się na większe rozmiary zgodnie z następującą konwencją:

  • 3 łyżeczki == 1 łyżka
  • 4 łyżki == 1/4 szklanki

Tak więc dla wielokrotności 12, 1/4 łyżeczki nasion methi staje się 1 łyżką. Jednak dla wielokrotności 13 staje się 3 1/4 łyżeczki. W przeciwnym razie nie byłby reprezentowany w standardowych rozmiarach.

Kelnerzy muszą być w stanie przenieść dosa na stoliki. Aby upewnić się, że Dosa nie psuje się podczas transportu, instruujesz ich, aby nosili Dosę w zespołach. Każda osoba może nosić najwyżej jeden metr dosa. Tak więc w przypadku pojedynczego lub podwójnego przepisu potrzebna jest tylko jedna osoba. Personel kelnerski jest mniej skuteczny, jeśli jest pocięty na części ułamkowe, dlatego zawsze wymagana jest liczba całkowita kelnerów .

Wkład

Weź dodatnią liczbę całkowitą przez STDIN (lub najbliższą alternatywę), argument wiersza poleceń lub argument funkcji. Liczba ta określa współczynnik skalowania receptury i może być tak mała jak 1, ale nie większa niż 2 32 -1. Może to być dowolna liczba całkowita w tym zakresie.

Wydajność

Wydrukuj do STDOUT (lub najbliższej alternatywy) listę składników przeskalowaną zgodnie z danymi wejściowymi, a także liczbę kelnerów wymaganych do przeprowadzenia dosa. Składniki muszą być wymienione w kolejności podanej powyżej oraz w formacie podanym poniżej.

Przykłady

Wkład:

2

Wydajność:

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

Zauważ, że „filiżanka” zmienia się w „filiżanki”, gdy wartość jest większa niż 1. „łyżeczka” nie zmienia się. „kelner”, jak „kielich”, staje się liczbą mnogą.

Wkład:

5

Wydajność:

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

Wartości niecałkowite większe niż 1 są reprezentowane jako liczby mieszane, tj. Liczba całkowita, po której następuje ułamek zredukowany.

Uwaga: tytuł pochodzi z odpowiedniego filmu .

Alex A.
źródło
15
Teraz potrzebujemy kogoś, kto zrobi odpowiedź szefa kuchni :)
MickyT,
11
„Personel kelnerski jest mniej skuteczny, jeśli jest pocięty na części ułamkowe, dlatego zawsze wymagana jest liczba całkowita kelnerów”. ... Ile dokładnie mniej skutecznych?
LivingInformation
4
@LivingInformation Cóż, czy widziałeś kiedyś tylko parę nóg niosących jedzenie na stół?
Alex A.
7
@AlexA. Czy ty nie
LivingInformation
7
@MickyT: Próbowałem, ale wydaje mi się, że napotkałem kilka błędów w tłumaczu szefa kuchni z CPAN. (a) Wartości wyjściowe są oddzielone spacjami, chyba że nie są. (b) Coś w moim sub-przepisie Chutney z mieszanymi numerami (lub czy to jest jogurt porównawczy?) powoduje, że tłumacz umiera z niejasnym komunikatem o błędzie.
Tim Pederick

Odpowiedzi:

9

CJam, 214 bajtów

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*

Wypróbuj online w interpretatorze CJam .

Dennis
źródło
Jeszcze nie grałem w golfa, ale jest już późno i chciałem opublikować pierwszą odpowiedź.
Dennis
Ponieważ nie opublikowano żadnej odpowiedzi Szefa kuchni, a Twoja jest najkrótszą prawidłową odpowiedzią na koniec okresu nagrody, wygrywasz nagrodę. Dzięki za udział w moim pierwszym wyzwaniu. :)
Alex A.,
7

JavaScript (ES6), 443 znaki

Gra w golfa była bardzo przyjemna, ale wynik jest znacznie dłuższy niż się spodziewałem.

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

Wypróbuj to:

Akceptuje wartości do, a nawet włącznie 2^32, lub 4294967296. Następnie „urad dal” przelewa się na liczbach nieparzystych i staje się ujemny.

Zasadniczo oblicza prawidłowe kwoty w miarę upływu czasu. Na szczęście tylko nasiona methi muszą mieć łyżeczkę / łyżkę / miarkę; inaczej byłoby to o wiele dłużej. (Sama linia nasion methi ma 155 znaków!)

W ES5 byłoby to również co najmniej 500 znaków. I ❤ ES6.

Jak zawsze sugestie są bardzo mile widziane!

Edycja 1: Właśnie zdałem sobie sprawę, że zgodnie z zasadami, 1 tspnależy zastąpić 1/3 tbsp, tak samo z 2 tspi 2/3 tbsp, a także 16 tspi 1/3 cup...

ETHprodukcje
źródło
1
Math.ceil można skrócić, -~więc b=-~t/2 jest znacznie krótszy, można również wykluczyć nawias
Downgoat
@vihan Dzięki za wskazówkę, ale działa to tylko na liczbach innych niż całkowite. -~1powoduje 2, co nie jest zamierzonym wynikiem. Najlepsza alternatywa, jaką mogłem znaleźć, b=-~((n-1e-9)/2)jest równie długa, więc zachowam ją taką, jaka jest na razie.
ETHprodukcje
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)))))

Nieco golfa

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

Wszystkie miary wyrażone są w tsp. Na podstawie kfunkcji gdecyduje, których jednostek użyć do drukowania i wywołać funkcję formatowania hz odpowiednimi argumentami.

  • k zwraca true, gdy argument można wyrazić jako wielokrotność 1, 1/4, 1/3, 2/3, 4/3 jednostek
  • gkonwertuje dane wejściowe jako liczbę łyżek, a liczbę łyżek jako liczbę filiżanek (jak podano w pytaniu). Najpierw staramy się drukować według jednostek kubków lub jednostek łyżki, albo w tps.
  • hużyć formatowania warunkowego dyrektyw albo wydrukować x, x y/zlub y/znastępuje formatowanie sz argumentem m: do kubków, sto "cup~P"który plurializes słowo według m.

Przykład (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
rdzeń rdzeniowy
źródło
To jest miłe. Dobra robota.
Alex A.,
3

R, 602 603 526 bajtów

Podejrzewam, że nadal mam dużo miejsca na grę w golfa, ale zabrakło mi czasu i naprawdę chciałem odpowiedzieć na to pytanie.

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'))))))))}
MickyT
źródło
Dla wejścia 5 ma to, 1/3 tbsp 1/4 tsp methi seedsale powinno być reprezentowane w jednej wspólnej jednostce. Tak powinno być 1 1/4 tsp methi seeds(jeśli moja matematyka mentalna jest poprawna).
Alex A.,
@AlexA. To też dobrze wiedzieć. Zaraz to naprawię. Zakładam, że tak samo jest z filiżankami i łyżkami.
MickyT,
Tak, ta sama zasada dla wszystkich jednostek. Tymczasem +1, w dobrej wierze, że wkrótce będzie to poprawne. Dzięki za udział w moim pierwszym wyzwaniu. :)
Alex A.,
1

JavaScript (Node.js) , 419 bajtów

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

Wypróbuj online!

Muhammad Salman
źródło