Ich bin sicher, Sie kennen das Preisschema für 9,99 USD, anstatt 10 USD zu verwenden. Nun, in Ihrem neuen Job als Systemadministrator in einem großen Einzelhandelsgeschäft möchten sie, dass die Preise einem ähnlichen Schema folgen:
- Alle Preise verstehen sich in ganzen Dollars, ohne Cent.
- Alle Preise sollten mit 5 oder 9 enden und auf die nächsthöhere Ziffer aufrunden, wenn die letzte Ziffer zwischen 5 und 9 liegt. (Gilt für die letzte Ziffer 2 und 7)
- Der niedrigste Input beträgt 1 USD, und der niedrigste Output sollte 5 USD betragen.
Ihre Eingabe ist eine Liste von ganzen Zahlen:
12
8
41
27
144
99
3
Und die Ausgabe sollte eine Liste der neuen Preise enthalten. Im obigen Fall:
15
9
39
29
145
99
5
Antworten:
Brainfuck, 4428 Bytes (ungültig)
Sobald ich wusste, dass der Algorithmus funktioniert, verlor ich das Interesse und beendete den Eingabehandler nicht. Das ist der Grund, warum diese Lösung das Problem technisch löst, aber sehr schwer zu verwenden ist. Wenn Sie das Programm in einem interaktiven Interpreter starten (schneller ist besser), können Sie Ihre "Nummer" eingeben. Es muss in Base256 eingegeben werden, wenn Ihr Interpreter keine Nummernkonvertierung unterstützt (meins). Der maximale Preis, den Sie eingeben können, ist daher 255.
Wenn die Zahl größer als 9 ist, führt es eine Modulo-Schleife durch, um alle Ziffern mit Ausnahme der letzten abzuspalten. Die Divisionsergebnisse werden gespeichert, während die letzte Ziffer auf 5 oder 9 gerundet wird. Anschließend werden sie hinzugefügt und gedruckt. Dann bereinigt das Programm alle verwendeten Register (wahrscheinlich zuviel) und fragt nach der nächsten Nummer.
Es kümmert sich um alle Sonderfälle (
$1
,$20/$21 -> $19
etc.). Schau es dir4
hier an (ca. 3 Minuten, Video gekürzt):Code
quelle
CJam,
1917 BytesTeste es hier.
Übernimmt die Eingabe als eine CJam-artige Liste und gibt die Ausgabe in Zeilenumbrüchen getrennt zurück.
Erläuterung
quelle
Python 2, 47
Wenn wir uns die Reihenfolge der gerundeten Werte ansehen, sehen wir, dass sie in 5er-Blöcken vorliegen.
Wir finden, in welchem Nummernblock wir uns befinden
(n+3)/5
(nennen Sie diesen WertJ
). Dann erhalten wir das richtige Vielfache von5
withJ*5
und passen Dinge wie30
down to an,29
indem wir subtrahieren,1
wann immer geradeJ
ist.Um einen speziellen Fall
1
geben ,5
anstatt-1
, übergeben wir das Ergebnis anmax(5,_)
.quelle
meS,-*hJ/-d2K5K%J2KQ
m-|*K5hJ/-d2K6%J2Q
lambda l:[((n+3)/5*5or 6)-(n-2)/5%2for n in l]
Netzhaut, 32 Bytes
Akzeptiert Eingaben in einer durch Kommas getrennten Liste. Es muss ein Nachkomma stehen. Ausgaben im selben Format.
Erläuterung:
quelle
R,
51494743 BytesEs sollte Raum geben, dies zu verbessern, aber ich denke, eine andere Strategie könnte besser sein. Nimmt einen Vektor von ganzen Zahlen aus dem Scan und gibt einen Vektor von ganzen Zahlen aus. Im Wesentlichen wird dabei eine Ganzzahldivision verwendet, um die Zahl abzurunden, um 1 zu addieren und sie mit fünf zu multiplizieren. Alles, was durch 10 teilbar ist, hat 1 weggenommen. Wenn n = 1, wird die Ganzzahldivision um 1 erhöht.
Testlauf
quelle
Python 3,
7482 BytesIch kämpfte für die Kürze auf Werten unter 11 und die Voraussetzung für 1 zu 5 zu bewerten.
quelle
Pyth,
21182928 BytesDanke an @Jakube für das Schneiden von 3 Bytes!
Probieren Sie es hier aus.
BEARBEITEN: Anscheinend war es ungültig. Ich habe es auf Kosten von 11 Bytes behoben; Ich werde versuchen, mehr Golf zu spielen.
quelle
eQ
ist das gleiche wie%Q10
, auch können Sie die Zuordnung inline:I<KeQ6+-QK5;E+-QK9
9
0
1
Pyth, 21 Bytes
Leider muss ich 4 Bytes ausgeben, um $ 1 richtig zu handhaben.
quelle
1
nur mit 2 Bytes umgehen .mt|t+d@jC"²a<"6ed6Q
Pyth, 18 Bytes
Probieren Sie es online aus: Demo oder Test Suite
Diese Antwort basiert auf der Python / Pyth-Lösung von @ xor. Der Hauptunterschied ist, dass ich den Sonderfall
1
anders behandle. Das tatsächliche Ergebnis für1
wäre0 - 1 = -1
. Mit Pythonsor
kann ich das0
durch ein ersetzen6
, was dazu führt6 - 1 = 5
. Dies erspart den Schmerz, das Maximum5
und das Ergebnis zu erzielen.Erläuterung:
quelle
Hassium , 133 Bytes
Rufen Sie die erweiterte Online- Version auf : http://hassiumlang.com/Hassium/index.php?code=4f1c14f4d699b11da7a6392a74b720c4
quelle
TI-BASIC, 19 Bytes
Verwendet den Algorithmus von xnor. TI-BASIC erhält die Vektorisierung und Multiplikation kostenlos, aber wir geben ein paar Bytes mehr aus, weil es kein Modulo hat.
quelle
Haskell, 114 Bytes
Erläuterung:
Die Funktion
g
gibt9-n
ifn>6
oder else5-n
ifn>1
oder else zurück-n-1
.g
erhält die letzte Ziffer und gibt zurück, was zur eingegebenen Nummer hinzugefügt werden soll.f
verwendetg
, um die Lösung zu erhalten (plus viel String-Manipulation).main
gibt das Ergebnisf
für jede Eingabezeile aus.quelle
Rubin,
5550 + 1 BytesFühren Sie es mit der
n
Fahne, etwa so:ruby -n prices.rb
. Geben Sie jeden Preis in eine separate Zeile ein.quelle