Wiem, że tytuł cię kręci
Biorąc pod uwagę wielkość produkcji pieniężnej, najmniejsza liczba monet stanowi tę kwotę
Przykłady
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ów za dolara.
- Wartości każdego rodzaju monety to:
penny
1 centnickel
5 centówdime
10 centówquarter
25 centów
Wbudowane, które trywializują to zadanie, nie są dozwolone.
I / O
Dane wejściowe to liczba dziesiętna reprezentująca wartość dolara sumy
- Nie ma potrzeby mnożenia
- Zamówienie:
quarter
->penny
- Wyjście powinno być
<#_of_coins> <coin type>
- Separatory:
,
lub,
lub
Jedyne dozwolone białe znaki końcowe to pojedyncza nowa linia / spacja.
Jeśli jest zero typu monety, tego typu monety nie powinny być wyświetlane . Np. 0.25
-> 1 quarter
nie 1 quarter 0 dime 0 nickel 0 penny
1.43
, który jest większy niż1
(less than 1)
część nie powinna tam być. Zapomniałem wyjąć że w piaskownicy Myślę2 quarter(2 spaces)1 nickel 1 penny
?13.00
może być możliwym wejściem, ale wejście nigdy nie będzie13
. Zawsze będę miał po przecinkuOdpowiedzi:
CJam, 60
Wydaje się, że w tym skrypcie jest dużo miejsca na ulepszenia, ale jest on krótszy niż jak dotąd. Wykorzystuje to wbudowaną komendę „md”, która zwraca zarówno liczbę całkowitą wyniku dzielenia, jak i resztę. Wykonuje następujące czynności:
Wypróbuj tutaj
wcześniejsze wersje:
źródło
JavaScript ES6, 107 bajtów
Proste matematyki.
źródło
|0
pon%5
?Python 2, 120 bajtów
Na wszelki wypadek zmieniono na coś, co zdecydowanie poprawia komentarz @ Ogadaya, przynajmniej na razie. Nie jestem pewien, czy ja też tego potrzebuję
int()
, ale mam trudności z przekonaniem siebie, że nie.jest dodatkowym bajtem wyłączonym, ale drukuje dodatkowy
L
dla dużych danych wejściowych (chociaż ten kod i tak nie działa dla bardzo dużych danych wejściowych, ze względu na precyzję zmiennoprzecinkową).źródło
a=40/a+5^12
[x^k for x in [10, 5, 1]]
I[k/y for y in [25, 10, 5]]
dla różnychk
, a potem zobaczyłem, że dwie listy zostały przesunięte o 5. Prawdopodobnie nieoptymalne, ale nie miałem czasu na brutalną siłę.10.03
i10.04
. Ma to związek z reprezentacją liczb zmiennoprzecinkowych w Pythonie i sposobem, w jaki zaokrągla je do liczb całkowitych. Spróbować"print %d"%(10.03*100)
.n=int(''.join(raw_input().split(".")))
może działać, ale jest dość gadatliwy.dc, 104
Dodano nowe linie dla „czytelności” :
źródło
Retina , 97
Dzięki (jak zawsze) @randomra - zapisano 1 bajt.
Zakłada, że dane wejściowe są w formie
xxx.yy
lubxxx.y
.Wypróbuj online.
źródło
$&
jest taki sam jak,$0
więc możesz zapisać bajt$0.0
przez$&0
.Vitsy,
11010097 bajtówTak, poczekaj, nadal to metodycznie.
Objaśnienie w trybie pełnym, który wkrótce będzie dostępny:
Wypróbuj online!
źródło
retrauq
prawie wydaje się słowem ...Java 8 lambda, 165 bajtów
Oczekuje, że dane wejściowe będą
y
podwójne lub zmiennoprzecinkowe.Tyle trójki. ; -;
źródło
;-;
Co to jest? Czy to wampa?JavaScript ES6,
202200 bajtówMam nadzieję, że można to zagrać w golfa ...
Nieskluczony kod:
źródło
LabVIEW, 62 LabVIEW Prymitywy
Tworzyłem 2 tablice dla nazw i wartości i przeglądałem je od góry (tablica indeksu z i) za pomocą operatora modulo (rzecz R IQ). Pozostałe monety są przekazywane do rejestru przesuwnego.
Jeśli wartość jest większa niż 0, przekształcam liczbę na ciąg znaków i konkatenuję przekazany ciąg znaków numer i nazwę monety i umieszczam z powrotem w rejestrze przesuwnym.
Ijus zdał sobie sprawę, że mój gif nie pokazuje fałszywego przypadku, ale i tak nie ma nic do zobaczenia, po prostu przechodzi przez ciąg, który wszedł.
źródło
Japt, 77 bajtów
Na szczęście wszystkie cztery nazwy monet można skompresować.
¿
Powinny być dosłowne bajt 0x81. Przetestuj online!źródło
73 quarter 1 nickel 2 penny
. 73 * .25 + 1 * .05 + 2 * .01 = 18,32 zamiast 18,33.C,
147144142140 140 bajtówNiepoddane testom:
źródło
char*[]
zchar**
,int a[]
zint*a
, i umieścićm%=a[i++]
w ostatniej części pętli for. Powinny zaoszczędzić 4 bajty. Jeszcze go nie testowałem, więc po prostu spróbuj każdego z nich.m%=a[i++]
trochę, dzięki.if(m/a[i])
wm/a[i]&&
celu oszczędzania 2 więcej bajtów."quarter\0dime\0nickel\0penny"
w printf. Każdy \ 0 kończy ciąg, oszczędzając po 1 znaku\0
powoduje awarię programu. W każdym razie nie jestem pewien, jak iteracja powinna działać na takim łańcuchu.MATL , 82
106107Wypróbuj w MATL Online!
źródło
JavaScript,
156145144 bajtówNie pasuje do odpowiedzi na formułę ETHproduction, ale w każdym razie ...
To jedna z moich pierwszych rund golfa, więc wszelkie ulepszenia są bardzo mile widziane! Już ukradłem „Xor trunc” ETH - przepraszam, to było po prostu zbyt mądre :-)
Bardziej czytelny:
Uwaga: podczas testów zdałem sobie sprawę, że JavaScript (przynajmniej na moim komputerze?) Dzieli się
1.13 / 0.01
na1.12999...
, powodując, że moje (i prawdopodobnie wszystkie inne zgłoszenia JS) nie działają w 100% poprawnie ...źródło
Perl 5 -
128124 bajtówWydaje mi się, że można to napisać ponownie, aby było o wiele krótsze, ale naprawdę tego nie widzę.
EDYCJA: Tylko sztuczka matematyczna, aby zapisać 4 znaki.
źródło
Perl 6 , 96 bajtów
Stosowanie:
źródło
Python 2,
167161 bajtówAktualizacja 1: Pomysł Stole Sp3000 na użycie input () i uczynienie mojego kodu skryptem zamiast funkcji.
źródło
C, 162 bajty
Niestety nie działa bez
#include
.Nie golfił
źródło
Lua 5.3,
141139132131 bajtówCoś w oparciu o odpowiedź Python na Sp3000, ale z moją własną magiczną formułą.
Edytuj - poprawiono
a
formułę. Wcześniej byłoa=a*3%13~#s%4
.Edycja 2 - poprzednio używałem
math.ceil
do zaokrąglania i konwersji na liczbę całkowitą. Teraz ponownie używam//
do zaokrąglania i dodawania~~
do konwersji na liczbę całkowitą.Edycja 3 - ogolił postać, zmieniając wzór z
"%w+ "
na".- "
.źródło
K (oK) ,
9578 bajtówRozwiązanie:
Wypróbuj online!
Przykład:
Wyjaśnienie:
Zmoduluj dane wejściowe według każdej monety, a następnie podziel monety według wyniku.
Wprowadź każdy wynik wraz z nazwą monety do funkcji, zwracając wartość ciągu obu, jeśli liczba monet jest różna od zera.
Spłaszcz wszystko w dół i połącz razem z białymi znakami.
źródło
Kotlin , 147 bajtów
Upiększony
Test
TIO
TryItOnline
źródło