World Big Dosa

37

Vous êtes un jeune chef talentueux à qui on vient de proposer le poste de sous-chef dans le restaurant indien le plus prestigieux au monde. Vous avez peu d'expérience dans la préparation de la cuisine indienne, mais vous êtes déterminé, alors vous vous efforcez de faire vos preuves. Vous décidez de devenir le principal expert de dosa . Pour ce faire, vous devez non seulement maîtriser la création de dosas, mais vous devez également pouvoir les dimensionner pour qu'ils soient arbitrairement volumineux.

Vous trouvez une recette prometteuse pour la pâte dosa:

  • 1 tasse de riz
  • 1 tasse de ukda chawal
  • 1/2 tasse de dal
  • 1/4 tasse de poha
  • 1/4 cuillère à café de graines de methi
  • Sel au goût
  • De l'eau au besoin

Cela fera un dosa d'environ 1/2 mètre de long.

Défi

Ecrivez un programme ou une fonction qui indiquera au personnel du restaurant exactement ce qui est nécessaire pour créer un dosa unique à partir d’un multiple entier de la recette donnée . L'espace est restreint dans la cuisine, vous voulez donc que votre code soit le plus court possible. Le code le plus court gagne, les liens revenant au message précédent.

Les cuillères à mesurer et les tasses sont disponibles dans les formats standard suivants: 1/4, 1/3, 1/2, 2/3, 3/4 et 1. Pour éviter de mettre en colère le personnel de la cuisine, les mesures doivent être consignées dans l' unité la plus grande du pays. lequel le nombre peut être écrit sous forme de nombres mélangés en utilisant uniquement des tailles standard .

Les mesures se propagent à de plus grandes tailles selon la convention suivante:

  • 3 c. À thé == 1 c. À table
  • 4 c. À table == 1/4 tasse

Donc, pour un multiple de 12, 1/4 c. À thé de graines de méthi devient 1 c. Cependant, pour un multiple de 13, il devient 3 1/4 c. Sinon, il ne serait pas représenté dans les tailles standard.

Les serveurs doivent pouvoir porter le dosa sur les tables. Pour vous assurer que le dosa ne casse pas en transit, vous leur demandez de transporter le dosa en équipes. Chaque personne peut porter au plus un mètre de dosa. Donc, pour une recette simple ou double, une seule personne suffit pour la porter. Le personnel d’attente est moins efficace s’il est découpé en fractions, de sorte qu’il faut toujours un nombre entier de serveurs .

Contribution

Prenez un entier positif via STDIN (ou l'alternative la plus proche), un argument de ligne de commande ou un argument de fonction. Ce nombre détermine le facteur de mise à l'échelle de la recette et peut être aussi petit que 1 mais pas plus grand que 2 32 -1. Ce peut être n'importe quel entier dans cette plage.

Sortie

Imprimez sur STDOUT (ou l’alternative la plus proche) la liste des ingrédients mis à l’échelle en fonction de l’entrée, ainsi que le nombre de serveurs requis pour porter le dosa. Les ingrédients doivent être énumérés dans l'ordre indiqué ci-dessus et dans le format indiqué ci-dessous.

Exemples

Contribution:

2

Sortie:

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

Notez que "tasse" devient "tasse" lorsque la valeur est supérieure à 1. "tsp" ne change pas. "serveur", comme "tasse", devient pluriel.

Contribution:

5

Sortie:

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

Les valeurs non entières supérieures à 1 sont représentées par des nombres mélangés, c'est-à-dire un entier suivi d'une fraction réduite.

Remarque: le titre provient d' une vidéo pertinente .

Alex A.
la source
15
Maintenant, nous avons besoin de quelqu'un pour faire une réponse de chef :)
MickyT
11
"Le personnel d’attente est moins efficace s’il est découpé en fractions, de sorte qu’il faut toujours un nombre entier de serveurs." ... Combien moins efficace, exactement?
LivingInformation
4
@LivingInformation Eh bien, avez-vous déjà vu juste une paire de jambes porter de la nourriture à votre table?
Alex A.
7
@Alexa. N'est-ce pas?
LivingInformation
7
@MickyT: J'ai essayé, mais il semble que j'ai rencontré quelques bogues dans l'interprète de chef de CPAN. (a) Les valeurs de sortie sont séparées par des espaces, sauf lorsqu'elles ne le sont pas. (b) Quelque chose à propos de ma sous-recette de mélange de nombres mélangés (ou s'agit-il du yaourt à la menthe à la comparaison?) provoque la mort de l'interprète avec un message d'erreur obscur.
Tim Pederick

Réponses:

9

CJam, 214 octets

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*

Essayez-le en ligne dans l' interprète CJam .

Dennis
la source
Pas encore vraiment au golf, mais il est tard et je voulais poster la première réponse.
Dennis
Étant donné qu'aucune réponse de chef n'a été publiée et que la vôtre est la réponse la plus courte et valide à la fin de la période de prime, vous gagnez la prime. Merci d'avoir participé à mon premier défi. :)
Alex A.
7

Javascript (ES6), 443 caractères

C'était très amusant pour le golf, mais le résultat est considérablement plus long que ce à quoi je m'attendais.

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

Essaye le:

Il accepte les valeurs jusqu’à, y compris 2^32, ou 4294967296. Après cela, le 'urad dal' déborde sur les nombres impairs et devient négatif.

Fondamentalement, il calcule les montants corrects au fur et à mesure. Heureusement, seules les graines de méthi doivent avoir des mesures de cuillère à café / cuillère à soupe / tasse; sinon, cela aurait été beaucoup plus long. (La ligne de graine methi seule est de 155 caractères!)

Cela aurait également eu au moins 500 caractères longs dans ES5. Je ES6.

Comme toujours, les suggestions sont grandement appréciées!

Edit 1: Je viens de me rendre compte que, conformément aux règles, il 1 tspdevrait être remplacé par 1/3 tbsp, idem avec 2 tspet 2/3 tbsp, ainsi que 16 tspet 1/3 cup....

ETHproductions
la source
1
Math.ceil peut être raccourci à -~donc, b=-~t/2 est beaucoup plus court, vous pouvez également exclure la parenthèse
Rédaction
@ vihan Merci pour le conseil, mais cela ne fonctionne que sur les non-entiers. -~1résultats dans 2, qui n'est pas le résultat attendu. La meilleure alternative que j'ai pu trouver b=-~((n-1e-9)/2)est tout aussi longue, je vais donc la garder telle quelle pour le moment.
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)))))

Légèrement non-golfé

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

Toutes les mesures sont exprimées en tsp. En kfonction de la fonction, gdécide des unités à utiliser pour l’impression et appelle la fonction de formatage havec les arguments appropriés.

  • k renvoie true lorsque l'argument peut être exprimé sous la forme d'un multiple de 1, 1/4, 1/3, 2/3, 4/3 unités
  • gconvertit l'entrée en nombre de c. à soupe et le nombre de c. à soupe en nombre de tasses (comme indiqué dans la question). Nous essayons d’imprimer par unités de gobelets d’abord, ou par unités de c.
  • hutiliser une mise en forme conditionnelle directives à imprimer soit x, x y/zou y/zsuivie par la mise en forme savec l' argument m: pour les tasses, sest "cup~P"que le mot plurializes selon m.

Exemple (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
coredump
la source
C'est chouette. Bon travail.
Alex A.
3

R, 602 603 526 octets

Je pense qu'il reste encore beaucoup de place pour jouer au golf, mais je n'ai plus beaucoup de temps et je voulais vraiment répondre à cette question.

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
la source
Pour une entrée de 5 cela a 1/3 tbsp 1/4 tsp methi seedsmais il devrait être représenté dans une seule unité commune. Donc ça devrait être le 1 1/4 tsp methi seedscas (si mes calculs mentaux sont corrects).
Alex A.
@Alexa. C'est bien aussi savoir. Je vais arranger ça bientôt. Je suppose que c'est la même chose avec les tasses et les cuillères à soupe.
MickyT
Oui, même règle pour toutes les unités. +1 dans l'intervalle cependant, en toute bonne foi, ce sera bientôt le cas. Merci d'avoir participé à mon premier défi. :)
Alex A.
1

JavaScript (Node.js) , 419 octets

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

Essayez-le en ligne!

Muhammad Salman
la source