Hintergrund
Es ist später Freitagnachmittag, und Sie und Ihre Freunde beschließen, später am Abend in die Kneipe zu gehen, aber bevor Sie in die Kneipe gehen, sollten Sie ein paar Getränke zu sich nehmen. Die Dinge eskalieren jedoch schnell; Ihr Freund Shaddock Pamplemousse gewann Anfang dieser Woche die Lotterie und beschloss, Kisten mit verschiedenen Getränken über Kisten zu bringen. Die Sicherheit in der Kneipe ist sehr streng, und wenn Sie vor dem Betreten der Räumlichkeiten zu viel konsumieren, ist der Zutritt nicht gestattet. Sie sind aber alle Programmierer - Sie glauben also, dass die Dinge sich trotzdem als großartig herausstellen werden.
Herausforderung
Sie müssen einen Alkoholmesser programmieren, der Wahres / Falsches ausgibt, wenn Sie über / unter dem angemessenen Pub-Limit sind. Bevor Sie in die Kneipe gehen, geben Sie die Menge und die Getränkesorte ein, die Sie am Abend konsumiert haben und auf stdin
die Ihr Messprogramm verweist. Wenn es wahrheitsgemäß ausgibt, sind Sie über der Kneipengrenze und bleiben zu Hause. Wenn es falsch ausgibt, können Sie loslegen.
Eingang
Eine ganze Zahl, die größer ist als 0
Ihr Körpergewicht in Kilogramm, gefolgt von einem Zeilenumbruch. Dieser Eingabe folgt eine Reihe von einstelligen Mengen und Getränken in der folgenden Form:
<amount><amount type>o<beverage type>
Für eine Flasche Bier sieht das so aus:
1Bob
Jede Eingabe ist durch ein Leerzeichen getrennt.
Eingangsspezifikation
Jedes Getränk hat eine Einheit, die der von ihm verursachten Wirkung entspricht. Wenn Sie mehr Einheiten als Ihr durch zwei geteiltes Gewicht verbrauchen, ist die Kneipe keine Option mehr.
(Dies kann oder kann nicht die Realität widerspiegeln)
Folgendes sind gültige Getränke und die entsprechenden alkoholischen Einheiten des Getränks:
Bier:
b
,1
EinheitEnergy - Drink:
e
,0
EinheitenHot Sauce:
h
,2
Einheiten (starker Tobak)Saft (aus Bio - Früchte usw.):
j
,0
EinheitenRum:
r
,6
EinheitenTequila:
t
,7
EinheitenWodka:
v
,6
EinheitenWein:
w
,3
Einheiten
Es gibt verschiedene Betragsarten:
Flasche:
B
Kiste:
C
Glas:
G
Fass:
K
Schluck:
S
Jede Mengenart hat einen Multiplikator, der die alkoholischen Einheiten des darin enthaltenen Getränks multipliziert:
Flasche:
3
Kiste:
25
Glas:
2
Fass:
50
Schluck:
0.2
Ausgabe
Ihr Programm gibt " wahr" / "falsch" aus , stdout
wenn die konsumierte Menge über / unter Ihrem Körpergewicht geteilt durch 2 liegt. Wenn die konsumierte Menge gleich Ihrem Gewicht geteilt durch 2 ist, sollten Sie "falsch" ausgeben.
Beispiele für mögliche Ein- und Ausgaben
Eingang
70
1Bob 3Soj
Ausgabe
False
Eingang
2
1Cov
Ausgabe
1
Eingang
50
1Cob
Ausgabe
0
Eingang
100
4Gow 1Koe 1Bov 1Gow 2Sot
Ausgabe
True
Das kürzeste Programm in Bytes gewinnt!
quelle
o
ein Format-Zeichen ist, obwohl Sie es nicht ausdrücklich gesagt haben. Sie sollten dies klarstellen (dies gilto
auch für Olivenöl). 2. Was geben wir aus, wenn wir genau am Limit sind? oder spielt es keine rolle43Gow
?Antworten:
CJam, 53 Bytes
Probieren Sie es online im CJam-Interpreter aus .
Wie es funktioniert
quelle
Python 3, 131
Jetzt golfen wir mit Schlangen!
Dank shebang 18 Bytes gespart.
4 weitere Bytes dank DSM gespart.
Dank tzaman konnten viele Bytes gespart werden.
Vielen Dank an tzaman für seinen brillanten Trick, die
.find()
Rückkehr zu missbrauchen ,-1
wenn sie keinen Wert findet.Derzeit wird davon ausgegangen, dass dieses Getränkeformat genau so ist, wie es in der Herausforderung angegeben ist, z. B. nur eine Ziffer pro Getränk.
quelle
m
dasm[p[-1]]
Bit und ersetzen Sie es[3,25,2,50,.2]['BCGKS'.find(p[-1])]
durchd
. Mit diesen Änderungen an Ihrem Code bin ich auf 168 gekommen.Minkolang 0,11 , 59 Bytes
Probieren Sie es hier aus.
Erläuterung
quelle
CJam, 54 Bytes
Etwas umständlich und wahrscheinlich suboptimal, aber ich denke, das funktioniert in Ordnung. Probieren Sie es online aus .
Erläuterung
Beachten Sie, dass das numerische Array am Ende 2 enthält, was bedeutet, dass
Gho
die in der ersten Zeichenfolge fehlenden Zeichen 2 zugeordnet werden.quelle
CJam, 77
quelle
VBA, 251 Bytes
Lesbares Format
Ziemlich sicher, das kann man Golf spielen. meine String Manipulation mit
Mid(Right())
scheint übermäßig wortreich zu sein, aber das Ausführen des ArraysStrReverse
macht es länger. Wenn wir davon ausgehen, dass Sie jeweils nur 0-9 eines bestimmten Getränks trinken, können wir eine Handvoll Bytes sparenNehmen Sie die Eingabe als eine Zeichenfolge mit einem durch ein Leerzeichen getrennten Gewicht, da
VBA
Mehrzeileneingaben nicht unterstützt werdenquelle
Rubin, 153 Bytes
Ich muss die gsubs irgendwie loswerden
quelle
JavaScript, 131
134139BytesDies ist ein vollständiges Programm und im Grunde eine Anpassung meiner PHP-Antwort :
Es liest zwei Werte mit
prompt
undalert
s das Ergebnis als[true|false]
.Bearbeitungen
||0
anstatt die Getränke in0
Einheiten anzugeben. Vielen Dank an user81655 .prompt
in einer Variablen und die Initialisierung zu verkürzen. Danke an Stefnotch .quelle
,e:0,j:0}[b[++i]]
zu}[b[++i]]|0
.0
. Daran habe ich nicht gedacht. Musste||
anstelle des bitweisen Operators verwenden. Noch 5 Bytes weniger. Vielen Dank.for(s=i=0,a=prompt(),b=prompt();
kann geändert werden zu:for(c=prompt,b=c(a=c(s=i=0));
Bash (+ bc + GNU sed),
200196194 Bytesquelle
Javascript, 159 Bytes
Da Javascript eine Bibliothek benötigt, um auf STDIN zuzugreifen, ist dieser Code nur eine Funktion, die die gesamte Eingabe akzeptiert, d. H
b("100\n4Gow 1Koe 1Bov 1Gow 2Sot")
quelle
prompt()
wird in der Regel als eine gültige Alternative zu akzeptiertSTDIN
in JavaScript .b=t=>(a={B:3,C:25,G:2,K:50,S:.2,b:1,h:2,w:3,r:6,v:6,t:7},t.split(/\W/).reduceRight((t,n,r)=>r?n[0]*a[n[1]]*a[n[3]]+t||t:t>n/2,0))
.Python 3, 157 Bytes
quelle
PHP, 163
169BytesAusgänge
1
oder nichts, funktioniert für alle Testfälle.Ich frage mich immer noch, was diese scharfe Sauce mit 2 Einheiten ist .
Bearbeitungen
0
aus0.2
.quelle
Fass , 165 Bytes (SBCS)
Probieren Sie es online!
Ich habe das Gefühl, als wäre eine Keg-Antwort nie passender gewesen! Dies könnte wahrscheinlich Golf sein, aber ich denke nicht, dass es kann.
Erklärt
quelle