World Big Dosa


37

Sei un giovane chef di talento a cui è appena stata offerta la posizione di sous chef nel ristorante indiano più prestigioso del mondo. Hai poca esperienza con la preparazione della cucina indiana, ma sei determinato, quindi hai deciso di metterti alla prova. Decidi di diventare il principale esperto di dosa . Per fare questo, non devi solo padroneggiare la creazione di dosas, ma devi essere in grado di ridimensionarli in modo arbitrario.

Trovi una ricetta promettente per la pastella Dosa:

  • 1 tazza di riso
  • 1 tazza di ukda chawal
  • 1/2 tazza di urad dal
  • 1/4 tazza di poha
  • 1/4 cucchiaino di semi di methi
  • Sale qb
  • Acqua se necessario

Questo farà una dosa di circa 1/2 metro di lunghezza.

Sfida

Scrivi un programma o una funzione che diranno esattamente al personale del ristorante cosa è necessario per creare un singolo dosa da un multiplo intero della ricetta data . Lo spazio è limitato in cucina, quindi vuoi che il tuo codice sia il più corto possibile. Vince il codice più corto, con legami che vanno al post precedente.

I misurini e le tazze sono disponibili nelle seguenti dimensioni standard: 1/4, 1/3, 1/2, 2/3, 3/4 e 1. Per evitare di irritare il personale della cucina, le misurazioni devono essere riportate nell'unità più grande in che il numero può essere scritto come numeri misti usando solo dimensioni standard .

Le misure si propagano a dimensioni maggiori secondo la seguente convenzione:

  • 3 cucchiaini == 1 cucchiaio
  • 4 cucchiai == 1/4 tazza

Quindi per un multiplo di 12 semi da 1/4 cucchiaino di methi diventa 1 cucchiaio. Tuttavia, per un multiplo di 13, diventa 3 1/4 cucchiaino. Altrimenti non verrebbe rappresentato in dimensioni standard.

I camerieri devono essere in grado di portare la dosa ai tavoli. Per garantire che il dosa non si rompa in transito, si ordina loro di trasportare il dosa in squadre. Ogni persona può trasportare al massimo un metro di dosa. Quindi, per una ricetta singola o doppia, è necessaria solo una persona per trasportarla. I camerieri sono meno efficaci se vengono tagliati in pezzi frazionari, quindi è sempre richiesto un numero intero di camerieri .

Ingresso

Prendi un numero intero positivo tramite STDIN (o alternativa più vicina), argomento della riga di comando o argomento della funzione. Questo numero determina il fattore di ridimensionamento per la ricetta e può essere piccolo quanto 1 ma non più grande di 2 32 -1. Può essere qualsiasi numero intero in quell'intervallo.

Produzione

Stampa su STDOUT (o alternativa più vicina) l'elenco degli ingredienti ridimensionato in base all'input e il numero di camerieri necessari per trasportare il dosa. Gli ingredienti devono essere elencati nell'ordine indicato sopra e nel formato indicato di seguito.

Esempi

Ingresso:

2

Produzione:

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

Notare che "cup" cambia in "cups" quando il valore è maggiore di 1. "tsp" non cambia. "cameriere", come "tazza", diventa plurale.

Ingresso:

5

Produzione:

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

I valori non interi maggiori di 1 sono rappresentati come numeri misti, ovvero un numero intero seguito da una frazione ridotta.

Nota: il titolo deriva da un video pertinente .


15
Ora abbiamo bisogno di qualcuno che risponda allo Chef :)
MickyT

11
"I camerieri sono meno efficaci se vengono tagliati in pezzi frazionari, quindi è sempre richiesto un numero intero di camerieri." ... Quanto meno efficace, esattamente?
LivingInformation

4
@LivingInformation Bene, hai mai visto solo un paio di gambe portare cibo sul tuo tavolo?
Alex A.

7
@AlexA. No?
LivingInformation

7
@MickyT: ci ho provato, ma mi sembra di aver riscontrato alcuni bug nell'interprete Chef di CPAN. (a) I valori di output sono separati da spazi, tranne quando non lo sono. (b) Qualcosa sulla mia ricetta secondaria Chutney a numero misto (o è lo yogurt alla menta a confronto?) sta causando la morte dell'interprete con un oscuro messaggio di errore.
Tim Pederick,

Risposte:


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*

Provalo online nell'interprete CJam .


Non ho ancora giocato a golf, ma è tardi e volevo pubblicare la prima risposta.
Dennis,

Poiché nessuna risposta dello Chef è stata pubblicata e la tua è la risposta più breve valida alla fine del periodo di bounty, vinci la bontà. Grazie per aver partecipato alla mia prima sfida. :)
Alex A.

7

Javascript (ES6), 443 caratteri

È stato molto divertente giocare a golf, ma il risultato è considerevolmente più lungo di quanto mi aspettassi.

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

Provalo:

Accetta valori fino a 2^32, incluso , o 4294967296. Successivamente, l'urad dal trabocca su numeri dispari e diventa negativo.

Fondamentalmente, calcola gli importi corretti mentre procede. Fortunatamente, solo i semi di methi devono avere misure di cucchiaino / cucchiaio / tazza; altrimenti, sarebbe stato molto più lungo. (La sola linea di semi di methi è di 155 caratteri!)

Anche questo sarebbe stato lungo almeno 500 caratteri in ES5. I ❤ ES6.

Come sempre, i suggerimenti sono molto apprezzati!

Modifica 1: Ho appena realizzato che, secondo le regole, 1 tspdovrebbe essere sostituito con 1/3 tbsp, lo stesso con 2 tspe 2/3 tbsp, così come 16 tspe 1/3 cup....


1
Math.ceil può essere abbreviato in questo -~modo, b=-~t/2 è molto più breve, puoi anche escludere la parentesi
Downgoat

@vihan Grazie per il suggerimento, ma questo funziona solo su numeri non interi. -~1risulta 2, che non è il risultato desiderato. La migliore alternativa che ho trovato, b=-~((n-1e-9)/2)è altrettanto lunga, quindi la terrò così com'è per ora.
ETHproductions

3

Lisp comune, 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)))))

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

Tutte le misure sono espresse in tsp. In base alla kfunzione, gdecide quali unità utilizzare per la stampa e chiama la funzione di formattazione hcon gli argomenti appropriati.

  • k restituisce vero quando l'argomento può essere espresso come multiplo di 1, 1/4, 1/3, 2/3, 4/3 unità
  • gconverte l'input come numero di cucchiai e il numero di cucchiai in numero di tazze (come indicato nella domanda). Proviamo prima a stampare per unità di tazze, o unità di cucchiaio, oppure in tps.
  • hutilizzare una direttiva di formattazione condizionale per stampare o x, x y/zoppure y/zseguita dalla formattazione di scon argomento m: per cups, sè "cup~P"che plurializza la parola secondo m.

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

Questo è pulito. Bel lavoro.
Alex A.

3

R, 602 603 526 byte

Ho ancora un sacco di spazio per giocare a golf, sospetto, ma ho esaurito il tempo e volevo davvero dare una risposta per questo.

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

Per un input di 5 questo ha, 1/3 tbsp 1/4 tsp methi seedsma dovrebbe essere rappresentato in una singola unità comune. Quindi dovrebbe essere 1 1/4 tsp methi seeds(se la mia matematica mentale è corretta).
Alex A.

@AlexA. Va bene lo so anche. Lo riparerò presto. Presumo che sia lo stesso con tazze e cucchiai.
MickyT

Sì, stessa regola per tutte le unità. +1 nel frattempo, però, in buona fede che presto sarà corretto. Grazie per aver partecipato alla mia prima sfida. :)
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 `,`
`)

Provalo online!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.