Світова велика доза


37

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

Ви знайдете багатообіцяючий рецепт теста для дози:

  • 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. "tsp" не змінюється. "офіціант", як "чашка", стає множиною.

Вхід:

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. Після цього "ura dal" переповнюється на непарні числа і стає негативним.

В основному, він обчислює правильні суми в міру того, як йде. На щастя, лише насіння мети повинні мати заходи по ч. Л. / Ст. Л. / Склянку; інакше це було б набагато довше. (Лише насіннєва лінія меті - 155 символів!)

Це також було б щонайменше 500 символів у ES5. I ❤ ES6.

Як завжди, пропозиції дуже цінують!

Редагувати 1: Щойно зрозумів, що згідно з правилами, його 1 tspслід замінити на те 1/3 tbspсаме, що 2 tspі 2/3 tbsp, а також 16 tspі 1/3 cup….


1
Math.ceil можна скоротити -~так, b=-~t/2 набагато коротше, Ви також можете виключити дужки
Downgoat

@vihan Дякую за підказку, але це працює лише на цілі числа. -~1призводить до того 2, що не є наміченим результатом. Найкраща альтернатива, яку я міг би знайти, b=-~((n-1e-9)/2)- така ж довга, тому я буду тримати її такою, якою вона є зараз.
ETHproductions

3

Загальна Лісп, 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 повертає істину, коли аргумент можна виразити кратним 1, 1/4, 1/3, 2/3, 4/3 одиниць
  • gперетворює вхід у число tbsp, а кількість tbsp у кількість чашок (як зазначено у питанні). Ми намагаємося роздрукувати спочатку одиниці чашок, або одиниці tbsp, або ще в tps.
  • hвикористовувати вказівки щодо умовного форматування для друку або x, x y/zабо y/zпісля цього форматування sз аргументом m: для чашок - sце те, "cup~P"що плюралізує слово відповідно до 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

Це акуратно. Хороша робота.
Олексій А.

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

Для введення 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 `,`
`)

Спробуйте в Інтернеті!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.