それは週末です、そして週末にクールな人は何をしていますか?もちろん飲みます!しかし、あなたはそれほどクールではないものを知っていますか?飲むと運転。それで、あなたはあなたがどれほどの負荷がかかっているか、そしていつあなたが警官に引っ張られてあなたの免許を失うことなく再び運転することができるかを知らせるプログラムを書くことに決めました。
チャレンジ
今夜あなたが楽しんだ飲み物のリストを考えて、あなたの血中アルコール濃度と、あなたがあなたの車に飛び乗って家に帰れるまで待つ必要がある時間を計算してください。
入力
入力は、今夜あなたが飲んだ飲み物のリストになります。これは次のようになります。
4ショット酒 グラスワイン1杯 ビール2本 3杯の水
コンテナは常に複数になります。
ご覧のとおり、各エントリは次の要素で構成されています。
- 飲み物の種類(酒、ワイン、ビール、水)
- 飲み物の容器(ショット、グラス、ボトル)
- x> 0の整数としてそのタイプの飲み物の量x、
ドリンクの種類ごとに、一定量のアルコールが血液に追加されます。
酒-> 0.5‰/ 100 ml ビール-> 0.1‰/ 100 ml ワイン-> 0.2‰/ 100 ml 水-> -0.1‰/ 100 ml
水はあなたの血を薄くし、あなたのアルコールレベルを下げるので、水はここでは例外です(それが実際にうまくいけばとてもいいでしょう...)。
各コンテナには特定の容量があります:
ショット-> 20 ml グラス-> 200 ml ボトル-> 500 ml
出力
次の2つの数値を出力する必要があります。
- inのアルコールレベル
- 0.5‰以下になるまで待機する必要がある時間単位の時間。これにより、再び運転できます。1時間あたり0.1 loose緩みます。
ノート
- アルコールレベルは決してゼロを下回ることはありません。
- 待ち時間も同様です。0.5‰以下の場合は、ゼロを出力します。
- 飲み物の順序は関係ないので、飲料水は計算の過程でアルコールレベルをゼロ未満に下げる可能性があります。残っている場合は、ゼロに置き換える必要があります。
上記の例のアルコールレベルは次のように計算されます。
4ショット酒-> 0.4‰ 1杯のワイン-> 0.4‰ ビール2本-> 1.0‰ 3杯の水-> -0.6‰ => 0.4 + 0.4 + 1-0.6 = 1.2‰
0.5 reachに到達するには、0.7 looseを緩める必要があります。1時間あたり0.1 looseを失うため、再び運転するには7時間待つ必要があります。
ルール
- 入力は任意の形式で取得できますが、上記のとおり正確な文字列を使用する必要があります。あなたは整数として数を取ることができます。
- 2つの数値は任意の順序で出力できます。回答でどちらを使用するか明確にしてください。
- 入力には常に少なくとも1つのエントリがあると想定できます。
- 機能または完全なプログラムが許可されています。
- 入力/出力のデフォルトのルール。
- 標準の抜け穴が適用されます。
- これはcode-golfなので、最小のバイト数が優先されます。タイブレーカーは以前の提出です。
テストケース
文字列のリストとして入力します。アルコールレベルを最初に出力します。値はカンマで区切られます。
["4ショットの酒"、 "1グラスのワイン"、 "2ボトルのビール"、 "3グラスの水"]-> 1.2、7 ["10ショットの酒"、 "1ボトルの水"]-> 0.5、0 ["3グラスのワイン"、 "2ボトルの酒"]-> 6.2、57 ["6ショットビール"、 "3杯の水"]-> 0、0 ["10杯のビール"]-> 2.0、15
ハッピーコーディング!
function drive(a) { if (a.every(v=>/water/.test(v))) return [0, 0]; throw new TeetotalException; }