Ich weiß, der Titel macht dich fertig
Bei einer bestimmten Menge an ausgegebenem Geld macht die geringste Anzahl an Münzen diesen Betrag aus
Beispiele
0.1
1 dime
0.01
1 penny
0.28
1 quarter 3 penny
0.56
2 quarter 1 nickel 1 penny
1.43
5 quarter 1 dime 1 nickel 3 penny
Spec
- 100 Cent in einem Dollar.
- Die Werte für jeden Münztyp sind:
penny
1 Centnickel
5 Centdime
10 Centquarter
25 Cent
Built-Ins, die diese Aufgabe trivialisieren, sind nicht erlaubt.
I / O
Die Eingabe ist eine Dezimalstelle, die den Dollarwert der Gesamtsumme darstellt
- Keine Notwendigkeit zu pluralisieren
- Bestellung:
quarter
->penny
- Ausgabe sollte sein
<#_of_coins> <coin type>
- Seperatoren:
,
oder,
oder
Das einzige zulässige Leerzeichen ist ein einzelnes Leerzeichen.
Wenn es eine Null eines Münztyps gibt, sollte dieser Münztyp nicht angezeigt werden . ZB 0.25
-> 1 quarter
nicht 1 quarter 0 dime 0 nickel 0 penny
1.43
, das größer ist als1
(less than 1)
Teil sollte nicht da gewesen sein. Ich habe vergessen, das im Sandkasten zu entfernen2 quarter(2 spaces)1 nickel 1 penny
?13.00
kann eine mögliche Eingabe sein, aber die Eingabe wird es niemals sein13
. Ich werde immer eine Dezimalzahl habenAntworten:
CJam, 60
Dieses Skript scheint viel Raum für Verbesserungen zu haben, aber es ist kürzer als jedes andere. Dies nutzt den eingebauten "md" -Befehl, der sowohl das ganzzahlige Ergebnis einer Division als auch den Rest zurückgibt. Es macht Folgendes:
Probieren Sie es hier aus
frühere Versionen:
quelle
JavaScript ES6, 107 Bytes
Einfache mathematik
quelle
|0
nach demn%5
?Python 2, 120 Bytes
Nur um sicher zu gehen, zu etwas geändert, das definitiv funktioniert, um den Kommentar von @ Ogaday zu korrigieren, zumindest für den Moment. Ich bin mir nicht sicher, ob ich das auch brauche oder nicht
int()
, aber ich habe Probleme, mich davon zu überzeugen, dass ich es nicht brauche.ist ein zusätzliches Byte deaktiviert, gibt jedoch ein zusätzliches Byte
L
für große Eingaben aus (obwohl dieser Code aufgrund der Float-Genauigkeit ohnehin nicht für extrem große Eingaben funktioniert).quelle
a=40/a+5^12
[x^k for x in [10, 5, 1]]
und[k/y for y in [25, 10, 5]]
für verschiedenek
, und sah dann, dass zwei Listen um 5 versetzt waren. Wahrscheinlich suboptimal, aber ich hatte keine Zeit für rohe Gewalt.10.03
und10.04
. Es hängt mit Pythons Darstellung von Floats zusammen und wie sie zu Ints gerundet werden. Versuchen Sie es"print %d"%(10.03*100)
.n=int(''.join(raw_input().split(".")))
kann funktionieren, aber es ist ziemlich ausführlich.dc, 104
Zeilenumbrüche für "Lesbarkeit" hinzugefügt :
quelle
Retina , 97
Vielen Dank (wie immer) an @randomra - 1 Byte gespeichert.
Angenommen, die Eingabe erfolgt entweder in der Form
xxx.yy
oderxxx.y
.Probieren Sie es online aus.
quelle
$&
ist das gleiche wie$0
so dass Sie ein Byte in sparen$0.0
durch$&0
.Vitsy,
11010097 BytesJa, Moment mal, ich methodisiere das immer noch.
Erklärung im bald erscheinenden ausführlichen Modus:
Probieren Sie es online!
quelle
retrauq
scheint fast wie ein Wort ...Java 8 Lambda, 165 Bytes
Erwartet die Eingabe
y
entweder als double oder float.So viel Dreistoff. ; -;
quelle
;-;
Was ist das? Ist das eine Wampa?JavaScript ES6,
202200 BytesIch hoffe, das kann golfen werden ...
Ungolfed-Code:
quelle
LabVIEW, 62 LabVIEW-Grundelemente
Icreated 2 Arrays für die Namen und Werte und durchlaufen sie von oben (Index-Array mit i) mit einem Modulo-Operator (das R IQ-Ding). Die restlichen Münzen werden in das Schieberegister geleitet.
Wenn der Wert größer als 0 ist, konvertiere ich die Zahl in eine Zeichenfolge und verkette die übergebene Zeichenfolge mit der Zahl und dem Namen der Münze und lege sie zurück in das Schieberegister.
Ijus wurde klar, dass mein GIF den falschen Fall nicht zeigt, aber es ist trotzdem nichts zu sehen, es geht einfach durch den eingegangenen String.
quelle
Japt, 77 Bytes
Zum Glück sind alle vier Münznamen komprimierbar. Das
¿
sollte das Literalbyte 0x81 sein. Online testen!quelle
73 quarter 1 nickel 2 penny
. 73 * .25 + 1 * .05 + 2 * .01 = 18,32 anstelle von 18,33.C
147144142140 BytesUngolfed mit Tests:
quelle
char*[]
mitchar**
,int a[]
zu ersetzenint*a
, und setzen Sie dasm%=a[i++]
in den letzten Teil der for-Schleife. Sollte 4 Bytes sparen. Ich habe es noch nicht getestet, versuche es einfach.m%=a[i++]
bisschen, danke.if(m/a[i])
mitm/a[i]&&
zu speichern 2 weitere Bytes."quarter\0dime\0nickel\0penny"
im printf. Jede \ 0 beendet die Zeichenfolge und speichert jeweils 1\0
führt zum Absturz des Programms. Ich bin mir nicht sicher, wie die Iteration über einen solchen String funktionieren soll.MATL , 82
106107Probieren Sie es bei MATL Online!
quelle
JavaScript,
156145144 BytesKeine Übereinstimmung mit der Formelantwort von ETHproduction, aber trotzdem ...
Dies ist eine meiner ersten Golfrunden, daher sind Verbesserungen sehr willkommen! Ich habe bereits den "xor trunc" der ETH gestohlen - sorry man, es war einfach zu schlau :-)
Besser lesbar:
Hinweis: Beim Testen habe ich festgestellt, dass JavaScript (zumindest auf meinem Computer?) Sich
1.13 / 0.01
in teilt1.12999...
, sodass meine (und wahrscheinlich alle anderen JS-Einreichungen) nicht 100% richtig funktionieren ...quelle
Perl 5 -
128124 BytesIch denke, dies kann umgeschrieben werden, um viel kürzer zu sein, aber ich kann es wirklich nicht sehen.
EDIT: Nur ein mathematischer Trick, um 4 Zeichen zu sparen.
quelle
Perl 6 , 96 Bytes
Verwendung:
quelle
Python 2,
167161 BytesUpdate 1: Stola Sp3000 die Idee, input () zu verwenden und meinen Code ein Skript anstelle einer Funktion zu machen.
quelle
C 162 Bytes
Funktioniert leider nicht ohne die
#include
.Ungolfed
quelle
Lua 5.3,
141139132131 BytesBasiert irgendwie auf der Python-Antwort von Sp3000, aber mit meiner eigenen Zauberformel.
Bearbeiten -
a
Formel verbessert . Zuvor war esa=a*3%13~#s%4
.Edit 2 - früher habe ich
math.ceil
gerundet und in eine Ganzzahl konvertiert. Jetzt verwende ich wieder, um//
zu runden und zu addieren~~
, um in Ganzzahl umzuwandeln.Edit 3 - Rasiert ein Zeichen, indem das Muster von
"%w+ "
auf geändert wird".- "
.quelle
K (oK) ,
95 bis78 BytesLösung:
Probieren Sie es online!
Beispiel:
Erläuterung:
Modulieren Sie die Eingabe für jede Münze und dividieren Sie die Münzen durch das Ergebnis.
Tragen Sie jedes Ergebnis zusammen mit dem Namen der Münze in eine Funktion ein und geben Sie den String-Wert von beiden zurück, wenn die Anzahl der Münzen nicht Null ist.
Alles reduzieren und mit Leerzeichen verbinden.
quelle
Kotlin , 147 Bytes
Verschönert
Prüfung
TIO
TryItOnline
quelle