Мир Большой Досы

37

Вы талантливый молодой шеф-повар, которому только что предложили должность су-шеф-повара в самом престижном индийском ресторане в мире. У вас мало опыта в приготовлении индийской кухни, но вы полны решимости, поэтому вы решили проявить себя. Вы решили стать ведущим экспертом Dosa . Для этого вы должны не только овладеть созданием дос, но и иметь возможность масштабировать их до произвольно больших размеров.

Вы найдете многообещающий рецепт для теста Dosa:

  • 1 чашка риса
  • 1 чашка Укда Чавал
  • 1/2 стакана урад даль
  • 1/4 стакана похы
  • 1/4 ч.л. семян мети
  • Солить по вкусу
  • Вода по мере необходимости

Это сделает досу примерно 1/2 метра в длину.

Вызов

Напишите программу или функцию, которая точно скажет персоналу ресторана, что нужно для того, чтобы сделать одну досу из целого числа, кратного данному рецепту . На кухне недостаточно места, поэтому вы хотите, чтобы ваш код был максимально коротким. Самый короткий код выигрывает со связями, идущими к предыдущему посту.

Измерительные ложки и чашки бывают следующих стандартных размеров: 1/4, 1/3, 1/2, 2/3, 3/4 и 1. Чтобы избежать гнева персонала кухни, измерения должны быть представлены в самом большом блоке в который число может быть записано как смешанные числа, используя только стандартные размеры .

Измерения распространяются на большие размеры в соответствии со следующим соглашением:

  • 3 чайные ложки == 1 столовая ложка
  • 4 столовые ложки == 1/4 стакана

Таким образом, для числа, кратного 12, 1/4 чайной ложки мети-семян становится 1 столовой ложкой. Тем не менее, для кратного 13, он становится 3 1/4 ч. Л. В противном случае он не будет представлен в стандартных размерах.

Обслуживающий персонал должен быть в состоянии отнести досу к столам. Чтобы убедиться, что доса не сломается при транспортировке, вы даете им указание нести досу в командах. Каждый человек может нести не более одного метра доса. Таким образом, для одного или двойного рецепта, только один человек необходим для его переноски. Обслуживающий персонал менее эффективен, если он разделен на дробные части, поэтому всегда требуется целое число официантов .

вход

Возьмите положительное целое число через STDIN (или ближайшую альтернативу), аргумент командной строки или аргумент функции. Это число определяет коэффициент масштабирования для рецепта и может быть как 1, но не более 2 32 -1. Это может быть любое целое число в этом диапазоне.

Выход

Распечатайте в STDOUT (или ближайшую альтернативу) список ингредиентов, масштабированный в соответствии с вводом, а также количество официантов, необходимое для переноса ДОСА. Ингредиенты должны быть перечислены в порядке, указанном выше, и в формате, указанном ниже.

Примеры

Входные данные:

2

Выход:

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

Обратите внимание, что «чашка» меняется на «чашки», когда значение больше 1. «чайная ложка» не меняется. «официант», как «чашка», становится множественным числом.

Входные данные:

5

Выход:

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, представляются в виде смешанных чисел, то есть целого числа, за которым следует сокращенная дробь.

Примечание: название взято из соответствующего видео .

Алекс А.
источник
15
Теперь нам нужен кто-то, чтобы сделать ответ от шеф-повара :)
MickyT
11
«Обслуживающий персонал менее эффективен, если его разрезать на дробные части, поэтому всегда требуется целое число официантов». ... Насколько менее эффективно, точно?
LivingInformation
4
@LivingInformation Ну, вы когда-нибудь видели, чтобы пара ног несла еду к вашему столу?
Алекс А.
7
@AlexA. Не так ли?
LivingInformation
7
@MickyT: Я пытался, но, похоже, я столкнулся с некоторыми ошибками в интерпретаторе Chef из CPAN. (a) Выходные значения разделены пробелами, кроме случаев, когда они не являются. (b) Что-то в моем подрецепте «Чатни со смешанными номерами» (или это «Сравнительно мятный йогурт») заставляет переводчика умереть с неясным сообщением об ошибке.
Тим Педерик

Ответы:

9

CJam, 214 байтов

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 .

Деннис
источник
Пока еще не играл в гольф, но уже поздно, и я хотел опубликовать первый ответ.
Деннис
Поскольку ответ шеф-повара не был опубликован, а ваш самый короткий действительный ответ в конце периода вознаграждения, вы выигрываете вознаграждение. Спасибо за участие в моем первом конкурсе. :)
Алекс А.
7

Javascript (ES6), 443 символа

Это было очень весело для гольфа, но результат значительно длиннее, чем я ожидал.

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

Попробуйте это:

Он принимает значения вплоть до и даже включая 2^32, или 4294967296. После этого «урад дал» переполняется нечетными числами и становится отрицательным.

По сути, он вычисляет правильные суммы по ходу дела. К счастью, только мети-семена должны иметь меры tsp / tbsp / cup; в противном случае это было бы намного дольше. (Одна только линия семени мети составляет 155 символов!)

Это также было бы по крайней мере 500 символов в ES5. Я ❤ ES6.

Как всегда, предложения очень ценятся!

Редактировать 1: Просто понял, что в соответствии с правилами, 1 tspдолжны быть заменены 1/3 tbsp, так же , как 2 tspи 2/3 tbsp, а также 16 tspи 1/3 cup....

ETHproductions
источник
1
Math.ceil может быть сокращен до -~так, b=-~t/2 гораздо короче, Вы также можете исключить скобки
Downgoat
@vihan Спасибо за совет, но это работает только для нецелых чисел. -~1результаты 2, что не является намеченным результатом. Лучшая альтернатива, которую я мог найти, это b=-~((n-1e-9)/2)такая же длинная, так что я пока оставлю ее такой, какой она есть.
ETHпродукция
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)))))

Слегка разгульный

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

Все меры выражены в tsp. На основе этой kфункции gрешает, какие единицы использовать для печати, и вызывать функцию форматирования hс соответствующими аргументами.

  • k возвращает значение true, если аргумент может быть выражен как кратное 1, 1/4, 1/3, 2/3, 4/3 единиц
  • gпреобразует входные данные как количество столовых ложек и количество столовых ложек как количество чашек (как указано в вопросе). Мы стараемся печатать сначала по единицам чашек, или единицам столовой ложки, или же в секундах.
  • hИспользуйте условное форматирование директивы для печати либо x, x y/zили с y/zпоследующим форматированием sс аргументом m: для чашек, sесть "cup~P"которые plurializes слова в соответствии с m.

Пример (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
источник
Это аккуратно. Хорошо сделано.
Алекс А.
3

R 602 603 526 байт

Я подозреваю, что у меня еще много возможностей для игры в гольф, но у меня не хватило времени, и я действительно хотел ответить на этот вопрос.

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
источник
Для ввода 5 это имеет, 1/3 tbsp 1/4 tsp methi seedsно он должен быть представлен в единой общей единице. Так и должно быть 1 1/4 tsp methi seeds(если моя психическая математика верна).
Алекс А.
@AlexA. Это тоже хорошо, знаешь. Я исправлю это в ближайшее время. Я предполагаю, что это то же самое с чашками и столовыми ложками.
MickyT
Да, то же правило для всех подразделений. +1 тем временем, по доброй воле, это скоро будет правильно. Спасибо за участие в моем первом конкурсе. :)
Алекс А.
1

JavaScript (Node.js) , 419 байт

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

Попробуйте онлайн!

Мухаммед Салман
источник