Jestem pewien, że wiesz o schemacie cen 9,99 USD zamiast 10 USD. Cóż, w nowej pracy jako administrator systemu w dużym sklepie detalicznym chcą, aby ceny były zgodne z podobnym schematem:
- Wszystkie ceny są w pełnych dolarach, bez centów.
- Wszystkie ceny powinny kończyć się cyfrą 5 lub 9, zaokrąglając do najbliższej, ale w górę, jeśli ostatnia cyfra ma wartość między 5 a 9. (Dotyczy ostatniej cyfry 2 i 7)
- Najniższa cena wejściowa to 1 USD, a najniższa cena wyjściowa powinna wynosić 5 USD.
Twoje dane wejściowe to lista liczb całkowitych:
12
8
41
27
144
99
3
Produkcja powinna zawierać listę nowych cen. W powyższym przypadku:
15
9
39
29
145
99
5
Odpowiedzi:
Brainfuck, 4428 bajtów (nieprawidłowy)
Gdy już wiedziałem, że algorytm działa, straciłem zainteresowanie i nie zakończyłem procedury obsługi danych wejściowych. Dlatego to rozwiązanie technicznie rozwiązuje problem, ale jest bardzo trudne w użyciu. Po uruchomieniu programu w interaktywnym tłumaczu (im szybciej, tym lepiej), możesz wpisać swój „numer”. Musi zostać wpisany w Base256, jeśli twój tłumacz nie obsługuje konwersji liczb (moja robi). Maksymalna cena, którą możesz wprowadzić, wynosi zatem 255.
Następnie wykonuje moduł zapętlenia, jeśli liczba jest większa niż 9, aby oddzielić wszystkie cyfry oprócz ostatniej. Wyniki podziału są zapisywane, a ostatnia cyfra jest zaokrąglana do 5 lub 9. Następnie są one dodawane i drukowane. Następnie program czyści wszystkie używane rejestry (prawdopodobnie przesada) i prosi o kolejny numer.
Obsługuje on wszystkie szczególnych przypadkach (
$1
,$20/$21 -> $19
etc.). Zobacz, jak wyświetla się4
tutaj liczba (około 3 minut, film skrócony):Kod
źródło
CJam,
1917 bajtówSprawdź to tutaj.
Pobiera dane wejściowe jako listę w stylu CJam i zwraca rozdzielone wyjściowe znaki nowej linii.
Wyjaśnienie
źródło
Python 2, 47
Jeśli spojrzymy na sekwencję zaokrąglonych wartości, zobaczymy, że występują one w blokach po 5.
Znajdujemy, w jakim bloku liczbowym się znajdujemy
(n+3)/5
(wywołaj tę wartośćJ
). Następnie otrzymujemy odpowiednią wielokrotność5
zJ*5
i dostosowujemy takie rzeczy, jak w30
dół29
, odejmując,1
gdyJ
jest parzysty.Aby
1
dać specjalny przypadek,5
zamiast-1
, przekazujemy wynik domax(5,_)
.źródło
meS,-*hJ/-d2K5K%J2KQ
m-|*K5hJ/-d2K6%J2Q
lambda l:[((n+3)/5*5or 6)-(n-2)/5%2for n in l]
Siatkówka, 32 bajty
Akceptuje dane wejściowe z listy oddzielonej przecinkami. Musi być przecinek końcowy. Wyjścia w tym samym formacie.
Wyjaśnienie:
źródło
R,
51494743 bajtówPowinno być miejsce na poprawę, ale myślę, że inna strategia może być lepsza. Pobiera ze skanowania wektor liczb całkowitych i wysyła wektor liczb całkowitych. Zasadniczo wykorzystuje to dzielenie liczb całkowitych w celu zaokrąglenia liczby w dół, dodaje 1 i mnoży ją przez pięć. Coś podzielnego przez 10 ma 1 zabrane. Jeśli n = 1, zwiększa dzielenie liczb całkowitych o 1.
Testowe uruchomienie
źródło
Python 3,
7482 bajtówWalczyłem o zwięzłość wartości mniejszych niż 11 i wymóg, aby 1 oceniać na 5.
źródło
Pyth
21182928 bajtówDzięki @Jakube za skrócenie 3 bajtów!
Wypróbuj tutaj.
EDYCJA: Najwyraźniej była nieprawidłowa. Naprawiłem to kosztem 11 bajtów; Spróbuję bardziej zagrać w golfa.
źródło
eQ
to to samo%Q10
, co można równieżI<KeQ6+-QK5;E+-QK9
9
, jeśli ostatnia cyfra to0
lub1
Pyth, 21 bajtów
Niestety muszę wydać 4 bajty, aby poprawnie obsłużyć 1 USD.
źródło
1
tylko 2 bajty.mt|t+d@jC"²a<"6ed6Q
Pyth, 18 bajtów
Wypróbuj online: pakiet demonstracyjny lub testowy
Ta odpowiedź jest oparta na rozwiązaniu Python / Pyth @ xor. Główną różnicą jest to, że
1
inaczej traktuję przypadek specjalny . Rzeczywisty wynik1
byłby0 - 1 = -1
. Używanie Pythonaor
mogę wymienić0
z6
, w wyniku6 - 1 = 5
. Oszczędza to bólu przy przyjmowaniu maksimum5
i wyniku.Wyjaśnienie:
źródło
Wapń , 133 bajty
Uruchom i zobacz rozszerzoną wersję online: http://hciumlang.com/Hcium/index.php?code=4f1c14f4d699b11da7a6392a74b720c4
źródło
TI-BASIC, 19 bajtów
Wykorzystuje algorytm xnor. TI-BASIC pobiera wektoryzację i mnożenie za darmo, ale wydajemy jeszcze kilka bajtów, ponieważ nie ma modulo.
źródło
Haskell, 114 bajtów
Wyjaśnienie:
Funkcja
g
zwraca9-n
ifn>6
lub else5-n
ifn>1
lub else-n-1
.g
otrzymuje ostatnią cyfrę i zwraca to, co należy dodać do liczby wejściowej.f
służyg
do uzyskania rozwiązania (plus wiele manipulacji ciągami).main
wyprowadza wynikf
dla każdego wiersza wejścia.źródło
Rubin,
5550 + 1 bajtówUruchom go z
n
flagą, tak:ruby -n prices.rb
. Wprowadź każdą cenę w osobnym wierszu.źródło