World Big Dosa


37

Sie sind ein talentierter junger Koch, dem gerade die Position eines Sous-Chefs im renommiertesten indischen Restaurant der Welt angeboten wurde . Sie haben wenig Erfahrung mit der Zubereitung indischer Gerichte, aber Sie sind entschlossen, sich zu beweisen. Sie entscheiden sich, der führende dosa- Experte zu werden. Dazu müssen Sie nicht nur die Erstellung von Dosas beherrschen, sondern auch in der Lage sein, diese beliebig groß zu skalieren.

Sie finden ein vielversprechendes Rezept für Dosa Teig:

  • 1 Tasse Reis
  • 1 Tasse Ukda Chawal
  • 1/2 Tasse Urad dal
  • 1/4 Tasse Poha
  • 1/4 TL Methi Samen
  • Salz nach Geschmack
  • Wasser nach Bedarf

Dies ergibt eine Dosa von ungefähr 1/2 Meter Länge.

Herausforderung

Schreiben Sie ein Programm oder eine Funktion, die dem Restaurantpersonal genau sagt, was erforderlich ist, um eine einzelne Dosa aus einem ganzzahligen Vielfachen des angegebenen Rezepts zu erstellen . Der Platz in der Küche ist eng, daher soll Ihr Code so kurz wie möglich sein. Der kürzeste Code gewinnt mit Gleichstand zum vorherigen Beitrag.

Messlöffel und Tassen sind in den folgenden Standardgrößen erhältlich: 1/4, 1/3, 1/2, 2/3, 3/4 und 1. Um das Küchenpersonal nicht zu verärgern, müssen die Messwerte in der größten Einheit in angegeben werden Die Zahl kann nur mit Standardgrößen als gemischte Zahl geschrieben werden .

Messungen breiten sich nach der folgenden Konvention zu größeren Größen aus:

  • 3 TL == 1 EL
  • 4 Esslöffel == 1/4 Tasse

Also für ein Vielfaches von 12, 1/4 TL Methi Samen wird 1 EL. Für ein Vielfaches von 13 wird es jedoch 3 1/4 TL. Sonst wäre es nicht in Standardgrößen dargestellt.

Das Personal muss in der Lage sein, die Dosa zu den Tischen zu tragen. Um sicherzustellen, dass die Dosa während des Transports nicht abbricht, weisen Sie sie an, die Dosa in Teams zu tragen. Jede Person kann höchstens einen Meter Dosa tragen. Für ein Einzel- oder Doppelrezept wird also nur eine Person benötigt, um es zu tragen. Das Bedienungspersonal ist weniger effektiv, wenn es in Bruchstücke geschnitten wird, so dass immer eine ganze Anzahl von Bedienern erforderlich ist.

Eingang

Nehmen Sie eine positive Ganzzahl über STDIN (oder die nächstgelegene Alternative), ein Befehlszeilenargument oder ein Funktionsargument. Diese Zahl bestimmt den Skalierungsfaktor für das Rezept und kann 1 sein, aber nicht größer als 2 32 -1. Es kann eine beliebige Ganzzahl in diesem Bereich sein.

Ausgabe

Drucken Sie die Liste der Zutaten, die gemäß der Eingabe skaliert sind, sowie die Anzahl der Kellner, die zum Tragen der Dosa erforderlich sind, auf STDOUT (oder einer nächstgelegenen Alternative). Die Zutaten müssen in der oben angegebenen Reihenfolge und im unten angegebenen Format aufgeführt sein.

Beispiele

Eingang:

2

Ausgabe:

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

Beachten Sie, dass sich "cup" in "cups" ändert, wenn der Wert größer als 1 ist. "Tsp" ändert sich nicht. "Kellner" wird wie "Tasse" zum Plural.

Eingang:

5

Ausgabe:

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

Nicht ganzzahlige Werte größer als 1 werden als gemischte Zahlen dargestellt, dh eine ganze Zahl, gefolgt von einem reduzierten Bruch.

Hinweis: Der Titel stammt aus einem relevanten Video .


15
Jetzt brauchen wir jemanden, der eine Antwort des Küchenchefs macht :)
MickyT

11
"Das Personal ist weniger effektiv, wenn es in Bruchstücke geschnitten wird, sodass immer eine ganze Zahl von Kellnern erforderlich ist." ... Wie viel weniger effektiv genau?
LivingInformation

4
@LivingInformation Nun, haben Sie jemals gesehen, dass nur ein Paar Beine Essen zu Ihrem Tisch tragen?
Alex A.

7
@AlexA. Hast du nicht
LivingInformation

7
@ MickyT: Ich habe es versucht, aber ich habe anscheinend einige Fehler im Chef-Interpreter von CPAN gefunden. (a) Ausgabewerte werden durch Leerzeichen getrennt, sofern dies nicht der Fall ist. (b) Irgendetwas an meinem Unterrezept für Chutney mit gemischten Nummern (oder ist es das Vergleichsrezept für geprägten Joghurt?) lässt den Interpreter mit einer undurchsichtigen Fehlermeldung sterben.
Tim Pederick

Antworten:


9

CJam, 214 Bytes

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*

Probieren Sie es online im CJam-Interpreter aus .


Noch nicht richtig golfen, aber es ist spät und ich wollte die erste Antwort posten.
Dennis

Da keine Antwort des Chefs veröffentlicht wurde und Ihre Antwort am Ende des Kopfgeldzeitraums die kürzeste gültige Antwort ist, gewinnen Sie das Kopfgeld. Vielen Dank für die Teilnahme an meiner ersten Herausforderung. :)
Alex A.

7

Javascript (ES6), 443 Zeichen

Das Golfen hat sehr viel Spaß gemacht, aber das Ergebnis ist erheblich länger als erwartet.

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

Versuch es:

Es akzeptiert Werte bis einschließlich 2^32, oder 4294967296. Danach läuft der 'Urad Dal' bei ungeraden Zahlen über und wird negativ.

Grundsätzlich werden dabei die korrekten Beträge berechnet. Zum Glück müssen nur die Methi-Samen TL / EL / Cup-Maßnahmen haben; Andernfalls wäre dies viel länger gewesen. (Die Methisamenlinie allein ist 155 Zeichen!)

Dies wäre auch in ES5 mindestens 500 Zeichen lang gewesen. Ich ❤ ES6.

Wie immer sind Vorschläge sehr willkommen!

Edit 1: Habe gerade gemerkt, dass nach den Regeln 1 tspmit 1/3 tbsp, gleich mit 2 tspund 2/3 tbsp, sowie 16 tspund ersetzt werden soll 1/3 cup....


1
Math.ceil kann so gekürzt -~werden, b=-~t/2 ist viel kürzer, Sie können auch die Klammer ausschließen
Downgoat

@vihan Danke für den Tipp, aber das funktioniert nur bei Nicht-Ganzzahlen. -~1ergibt 2, was nicht das beabsichtigte Ergebnis ist. Die beste Alternative, die ich finden konnte b=-~((n-1e-9)/2), ist genauso lang, also werde ich es so lassen, wie es jetzt ist.
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)))))

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

Alle Maße sind in ausgedrückt tsp. Entscheiden Sie anhand der kFunktion, gwelche Einheiten zum Drucken verwendet werden sollen, und rufen Sie die Formatierungsfunktion hmit den entsprechenden Argumenten auf.

  • k Gibt true zurück, wenn das Argument als Vielfaches von 1, 1/4, 1/3, 2/3, 4/3 Einheiten ausgedrückt werden kann
  • gkonvertiert die Eingabe als eine Anzahl von Esslöffeln und die Anzahl von Esslöffeln als eine Anzahl von Tassen (wie in der Frage angegeben). Wir versuchen, zuerst in Einheiten von Tassen oder in Einheiten von Esslöffeln oder auch in tps zu drucken.
  • hverwenden eine bedingte Formatierungsanweisungen entweder zu drucken x, x y/zoder y/zgefolgt von der Formatierung der smit dem Argument m: für Becher, sist "cup~P"die dem Wort plurializes entsprechend m.

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

Das ist ordentlich. Gute Arbeit.
Alex A.

3

R, 602 603 526 Bytes

Ich vermute immer noch viel Platz zum Golfen, aber mir ist die Zeit ausgegangen und ich wollte wirklich eine Antwort auf diese Frage geben.

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

Bei einer Eingabe von 5 muss diese 1/3 tbsp 1/4 tsp methi seedsaber in einer einzigen gemeinsamen Einheit dargestellt werden. So sollte es sein 1 1/4 tsp methi seeds(wenn meine mentale Mathematik stimmt).
Alex A.

@AlexA. Das ist auch gut zu wissen. Ich werde es bald beheben. Ich gehe davon aus, dass es mit Tassen und Esslöffel genauso ist.
MickyT

Ja, dieselbe Regel für alle Einheiten. +1 in der Zwischenzeit aber nach Treu und Glauben, dass es bald richtig sein wird. Vielen Dank für die Teilnahme an meiner ersten Herausforderung. :)
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 `,`
`)

Probieren Sie es online!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.