Hier in Kalifornien sind wir in einer Dürre, daher müssen wir wissen, wie viel Wasser wir noch haben, damit wir so viel Wasser wie möglich sparen können.
Da die Wasserversorgung begrenzt ist, muss Ihr Code so kurz wie möglich sein.
Beispiele
| |
| |
|~~~|
|___|
Output: 0.5
|~~~~~|
| |
| |
|_____|
Output: 1
| |
|__|
Output: 0 (or bonus)
Spezifikation
Die Eingabe besteht ausschließlich aus: |_ ~
und Zeilenumbrüchen. Alle oben genannten ~
gelten als Luft; _
Räume darunter ~
und ~
selbst gelten als Wasser. Der Prozentsatz des verbleibenden Wassers stammt vom Computer water / (air + water)
. Ihre Ausgabe muss auf 4 Dezimalstellen genau sein (es sei denn, Sie streben den Prozentbonus an). Die Eingabe ist immer rechteckig. Das ~
steht nur in einer Zeile, wenn überhaupt. Die Eingabe kann optional auch einen nachgestellten Zeilenvorschub enthalten.
Bonus
Wenn Sie sich für beide Boni entscheiden, wird der Bonus von -15% vor dem Bonus von -35 angewendet
-35 byte Bonus: Wenn Ihr Code "This drought goat out of hand" anstelle von 0 ausgibt, wenn die Ausgabe 0 ist
-15% Bonus: Wenn Sie ein Prozent ausgeben.
Dazu verschieben Sie die Dezimalstelle um zwei Stellen nach links, kürzen führende Nullen und fügen %
am Ende ein hinzu. Nachgestellte Nullen (max. 2) sind zulässig, solange sie den Wert nicht beeinflussen. 0.5
-> eines von:50.00% 50% 50.0%
|~~~|
(kein Unterstrich) gültige Eingabe?Antworten:
Pyth -
17464552 * .85 - 35 = 9,2 BytesFiltert die Eingabe (mit dem neuen
#
Filter Meta-Op!) Nach einer Zeile mit~
darin, indiziert diese dann für die Eingabe und dividiert diese durch die Länge der Eingabe. Wenn keine vorhanden sind~
, wird der Fehler gemeldet und die except-Klausel von ausgelöst, und.x
die Zeichenfolge wird gedruckt.Probieren Sie es hier online aus .
quelle
Python 3, 37 Bytes
Keine Prämien. Nimmt eine Eingabezeichenfolge mit Zeilenumbrüchen an, einschließlich einer nachgestellten Zeile.
Schauen wir uns an, warum die Formel funktioniert. Die Wasserfraktion ist das Komplement der Luftfraktion, die wir ableiten werden.
0, 1, 2, ...
Wir haben die Reihen nummeriertDasselbe gilt, wenn beide mit der Breite jeder Zeile multipliziert werden, wobei die Zeilenumbrüche gezählt werden, was Ausdrücke in der Anzahl der Zeichen vereinfacht.
Der Wasserzeilenstart wird durch Durchsuchen der Eingabezeichenfolge gefunden
x
für|~
, und die Anzahl der Zeichen ist nur die Länge.Zum Schluss fügen wir einen fiktiven Wasserreihenstart hinzu, damit kein Wasser eingespeist werden kann
|~
vor der Suche an das Ende angehängt, sodass der Wasserstand 0 zu sein scheint.Die Boni schienen es nicht wert zu sein. Das Beste, was ich an der Saite bekommen habe, ist 73-35 = 38:
quelle
CJam,
19171658 * 0,85 - 35 = 14,3 BytesProbieren Sie es online aus
Diese Version erhält beide Boni. Die Eingabe muss mit einem nachgestellten Zeilenumbruch versehen sein, damit diese Lösung funktioniert.
Vielen Dank an @Martin Büttner für die Einsparung von 2 Bytes.
Erläuterung:
quelle
JavaScript (ES6), 45 (94 -15% -35)
Als anonyme Funktion. Unter Verwendung von Vorlagenzeichenfolgen gibt es eine Zeilenvorschubzeile, die wichtig ist und in der Byteanzahl enthalten ist
Bearbeite 1 Byte gespeichert dank @ user81655
Weniger golfen
Testschnipsel
quelle
p=~i
mitp=i
,&&-p
mit&&p-q
und1+~p
auf1+p
1 Byte zu speichern.Par , 57 * 85% - 35 = 13,45 Bytes
Erläuterung
quelle
Perl, 70 - 15% - 35 = 24,5 Bytes
beinhaltet +1 für
-p
Mit Kommentaren:
26 + 1 Byte Version, kein Bonus: 27
34 + 1-Byte-Version mit 15% Bonus: 29,75
61 + 1-Byte-Version mit -35 Bonus: 27
69 + 1-Byte-Version, beide Boni: 24,50
quelle
Javascript, 59.3
Ich hoffe, dass zusätzliche Dezimalstellen in Ordnung sind. Nimmt keine nachgestellte Newline an.
quelle
Haskell, 56 Bytes
Anwendungsbeispiel:
f "| |\n|~~|\n| |\n|__|"
->0.75
.l
ist eine benutzerdefinierte Längenfunktion, die erforderlich ist, da das Build-Inlength
ganzzahlige Werte zurückgibt, wir jedoch Gleitkommawerte für die Division benötigen (es gibtgenericLength
auch diese Funktion, aber sie ist länger, geschweige denn die erforderlicheimport Data.List
).f
Teilt die Eingabei
in Zeilen (->s
) und dann in ein Paar, wobei das erste Element eine Liste mit allen Zeilen bis (und mit Ausnahme) der ersten Zeile mit einem~
darin ist. Das zweite Element ist eine Liste mit den restlichen Zeilen. Das Ergebnis ist die Länge des zweiten Elements geteilt durch die Länge vons
.Die Boni zahlen sich nicht aus.
quelle
Python ist wortreich!
Python: 98,45 Bytes
(157 * 0,85) - 35 = 98,45 Bytes
Diese Version liest von stdin und sammelt beide Boni:
quelle
import sys;r=[x[1]for x in sys.stdin];print(1-r.index('~')/len(r))
print
wie eine Funktion, und ich nahm an, dass Sie Python 3 verwenden.Awk, 72 Zeichen - 15% - 35 = 26,2
Probelauf:
(Initiale
1;
nur in diesen Probeläufen verwendet, um den "vom Menschen lesbaren" Tank anzuzeigen.)quelle
PHP, 92 Zeichen - 15% - 35 = 43,2
(88 Zeichen in zwei Codeblöcken + 4 Zeichen in der Befehlszeile)
Geht davon aus
error_reporting
ist auf Standard gesetzt.(Keine große Sache, wollte nur das
-R
und benutzen-E
einmal . Jetzt nur-B
übrig.)Probelauf:
(Anfänglich
echo"$argn\n";
nur in diesen Probeläufen verwendet, um den "vom Menschen lesbaren" Tank anzuzeigen.)quelle
QBIC - 116 - 15% = 98,6 Byte
Ich habe QBIC entwickelt, um QBasic wettbewerbsfähiger zu machen, aber es bedarf noch einiger Verbesserungen. Ab sofort gibt es keine Abkürzungen für die Fehlerbehebung.
THEN
(was für mich ein ziemlich großes Versehen ist) undinput$
. Sie werden in Kürze hinzugefügt.Ich konnte den 0-Bonus nicht knacken, zu teuer ... Ich habe es geschafft, Prozentsätze zu drucken.
Probe ein / ausgeben:
Das Programm liest die Eingabe interaktiv. Wenn der Grund des Sees
_
erkannt wird ( ), wird der Prozentsatz gedruckt und der Vorgang beendet. Auf volle und leere Container getestet.Bearbeiten: Um zu zeigen, wie QBIC im letzten Jahr erweitert wurde, ist hier das gleiche Programm für den aktuellen Interpreter geschrieben:
87 Bytes (Druckprozentsätze) ergeben eine Punktzahl von 74.
quelle