ワールドビッグドーサ


37

あなたは才能のある若いシェフであり、世界で最も権威のあるインド料理レストランでスーシェフの地位を与えられたばかりです。あなたはインド料理を準備した経験はほとんどありませんが、あなたは決意しているので、あなたは自分自身を証明しようとしました。あなたは一流のドーサの専門家になることを決めます。これを行うには、ドーサの作成をマスターするだけでなく、それらを任意に大きくすることができる必要があります。

あなたはドーサバッターのための有望なレシピを見つけます:

  • ご飯1カップ
  • 1カップukda chawal
  • 1/2カップウラドダル
  • 1/4カップのポハ
  • 1/4小さじメティ種子
  • 味の塩
  • 必要に応じて水

これにより、ドーサの長さが約1/2メートルになります。

チャレンジ

指定されたレシピの整数倍から単一のドーサを作成するために必要なものを正確にレストランスタッフに伝えるプログラムまたは関数を作成します。キッチンのスペースは狭いので、コードをできるだけ短くする必要があります。最も短いコードが優先され、以前の投稿につながります。

計量スプーンとカップの標準サイズは、1 / 4、1 / 3、1 / 2、2 / 3、3 / 4、1です。キッチンスタッフの怒りを避けるため、測定値は最大の単位で報告する必要があります。標準サイズのみを使用して数を混合数として書くことができます。

次の規則に従って、測定値はより大きなサイズに伝播します。

  • 3 tsp == 1大さじ
  • 大さじ4 == 1/4カップ

したがって、12の倍数の場合、1/4杯のメティシードは1杯になります。ただし、13の倍数では、3 1/4 tspになります。それ以外の場合は、標準サイズで表されません。

待機スタッフは、ドーサをテーブルに運ぶことができなければなりません。ドーサが移動中に壊れないようにするには、ドーサをチームで運ぶように指示します。一人一人がドーサを1メートルまで運ぶことができます。したがって、1つまたは2つのレシピの場合、1人で運ぶことができます。待機スタッフは、小数に分割されると効果が低下するため、常に整数個の待機スタッフが必要です。

入力

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まあ、あなたはあなたのテーブルに食べ物を運ぶ足のペアを見たことがありますか?
アレックスA.

7
@AlexA。しませんか?
-LivingInformation

7
@MickyT:試しましたが、CPANからChefインタープリターのバグに遭遇したようです。(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インタプリタでオンラインで試してください。


まだゴルフはしていませんが、遅いので最初の答えを投稿したかったです。
デニス

シェフの回答は掲載されておらず、バウンティ期間の終了時にあなたの回答が最短の有効な回答であるため、バウンティを獲得します。最初のチャレンジに参加してくれてありがとう。:)
アレックスA.

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。その後、「urad dal」は奇数でオーバーフローし、負になります。

基本的に、正しい量を計算します。幸いなことに、メティの種だけが小さじ/大さじ/カップの対策が必要です。そうでなければ、これはずっと長くなっていたでしょう。(メティシードラインだけで155文字です!)

また、これはES5では少なくとも500文字の長さでした。❤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

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 引数が1、1 / 4、1 / 3、2 / 3、4 / 3単位の倍数として表現できる場合にtrueを返します
  • g入力をtbspの数として変換し、tbspの数をカップの数として変換します(質問で示したとおり)。最初にカップ単位、または大さじ単位、またはtps単位で印刷しようとします。
  • hいずれか印刷する条件付き書式のディレクティブを使用しxx 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

これはきちんとしている。よくやった。
アレックスA.

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(私の数学が正しければ)。
アレックスA.

@AlexA。それも知っています。すぐに修正します。カップや大さじでも同じだと思います。
MickyT

うん、すべてのユニットに同じルール。ただし、間もなく+1になることを誠実に考えて+1します。最初のチャレンジに参加してくれてありがとう。:)
アレックスA.

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

オンラインでお試しください!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.