Czas skorygować niektóre ceny!

19

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
Ciscoheat
źródło
Czy możemy przyjmować dane wejściowe jeden po drugim? Lub oddzielone czymś innym niż nowa linia?
mınxomaτ
Dla uproszczenia uważam, że określony format jest najlepszy, więc możesz skupić się na rozwiązaniu rzeczywistego problemu zamiast obsługi formatowania. Ale oczywiście dozwolona jest jedna liczba całkowita w jednym wierszu. :)
ciscoheat
1
Tak, lista specyficzna dla języka jest prawdopodobnie łatwiejsza w obsłudze. Ale jak długo mogę zmieniać specyfikacje? Jest to jeden z powodów, dla których wahałem się publikować cokolwiek w golfie kodowym.
ciscoheat
2
Newline jest teraz usuwany jako wymóg, określając tylko „listę”. Mam nadzieję, że to poprawi sytuację, a nie gorzej ...!
ciscoheat
6
„Ale jak długo mogę zmieniać specyfikacje? Jest to jeden z powodów, dla których wahałem się publikować cokolwiek w golfie kodowym”. W przypadku, gdy nie jesteś tego świadomy, możesz opublikować pomysły na wyzwania w piaskownicy, gdzie możesz uzyskać informacje zwrotne od społeczności przed uruchomieniem wyzwania, tak aby takie rzeczy ((mam nadzieję)) można było wskazać i naprawić, zanim zmiany unieważnią istniejące odpowiedzi.
Martin Ender

Odpowiedzi:

13

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 -> $19etc.). Zobacz, jak wyświetla się 4tutaj liczba (około 3 minut, film skrócony):

demo wideo

Kod

>+<+[>>>>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<[>[-]+<-]>
[<+>>>>>>>>>>>[-],>>[-]<[-]<[>+<<<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>>>
>>>>[-]>[<+<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>>>>>>[-]+++++++++>[<<<<+
>>>>-]<[<<<<<<+>+<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>[>>[<+<<<+>>>>-]<<<<[>>>>+<<<<-]
+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]>>[>>>>-<<<<[-]]<<<[-]<->>>>>>>>[<<<<<<<<->>>>
>>>>-]<<<<<<<<[>>>>>>>>+<<<<<<<<-]>>>>>>>>[>>>>>+<<<<<<<<<<<<<<<->>>>>>>>>>[-]]<<<<<<<<<
-]>>>>>>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<<<<
<[>[-]+<-]>[<+>>>>>>>>>>>>[-]<[>+<<<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>
>>>>>[-]++++++++++>>>[<<<<<<<+>>>>>>>-]<<<<<<<[>>>>[<<<<<+<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<
<<<<<-]>>[>-[<<+<+>>>-]<<<[>>>+<<<-]+>[<->[-]]<[>>-[>>>>>>>>-<<<<<<<<[-]]+<<[-]]>>-]>>>>
>>>>+<<<<<<<]>>>>>[-]>>[<<+<<<<<<<<+>>>>>>>>>>-]<<<<<<<<<<[>>>>>>>>>>+<<<<<<<<<<-]>>>>>>
>[-]++++++++++>[<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>[>+<<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<
<<<-]>-]>>>>>>>>>[-]<<[>>+<<-][-]>>>[<<<+<<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+<
<<<<<<<<<<-]>>>>>>>[-]>>>[<<<+<<<<<<<+>>>>>>>>>>-]<<<<<<<<<<[>>>>>>>>>>+<<<<<<<<<<-]>>>>
>>>[>+<<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>>>>>>>>>>[-]<<<[>>>+<<<-][-]>[<+<<<<<
<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>>>>>>[-]>>>[<<<+<<<<<<<+>>>>>>>>>>-]<<<<
<<<<<<[>>>>>>>>>>+<<<<<<<<<<-]>>>>>>>[>-<<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>>>>
>>>>[-]<[>+<-]<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>-]
<<<<<<<<<<<<<<<<<<<<[>[-]+<-]>[<+>>>>>>>>>>[-]>>[<<+<<<<<<<<+>>>>>>>>>>-]<<<<<<<<<<[>>>>
>>>>>>+<<<<<<<<<<-]>>>>>>>[-]>[<<<<+>>>>-]<[<<<<<<+>+<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<
-]>>[>>[<+<<<+>>>>-]<<<<[>>>>+<<<<-]+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]>>[>>>>-<<
<<[-]]<<<[-]<->>>>>>>>[<<<<<<<<->>>>>>>>-]<<<<<<<<[>>>>>>>>+<<<<<<<<-]>>>>>>>>[>>>>>>>>>
>>>+<<<<<<<<<<<<<<<<<<<<<<->>>>>>>>>>[-]]<<<<<<<<<-]>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<+>>>>>
>>>>>>>>>>-]<<<<<<<<<<<<<<<[>[-]+<-]>[<+>>>>>>>>>>[-]>[<+<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>
>>>>>>>>+<<<<<<<<<-]>>>>>>>[-]++++>[<<<<+>>>>-]<[<<<<<<+>+<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<
<<<<<-]>>[>>[<+<<<+>>>>-]<<<<[>>>>+<<<<-]+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]>>[>>
>>-<<<<[-]]<<<[-]<->>>>>>>>[<<<<<<<<->>>>>>>>-]<<<<<<<<[>>>>>>>>+<<<<<<<<-]>>>>>>>>[>>>>
>>+<<<<<<<<<<<<<<<<->>>>>>>>>>[-]]<<<<<<<<<-]<[>[-]+<-]>[<+>>>>>>>>>>>[-]+++++++++>>>>>>
>>+<<<<<<<<<<<<<<<<<<<->-]>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>-]<<<<<<<<<<<
<<<<<[>[-]+<-]>[<+>>>>>>>>>>[-]>[<+<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>
>>>>>[-]++>[<<<<+>>>>-]<[<<<<<<+>+<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>[>>[<+<<<+>>>>-
]<<<<[>>>>+<<<<-]+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]<[>>>>>>>-<<<<<<<[-]]>>>[-]>>
>[-]>>>>[<<<<+<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+<<<<<<<<<<<-]>>>>>>>>>>>>[-]+
++++++++<<<<<[<<<+>>>-]>>>>>[<<<<<<<<<<<+>+<<+>>>>>>>>>>>>-]<<<<<<<<<<<<[>>>>>>>>>>>>+<<
<<<<<<<<<<-]>>[>>[<+<<<+>>>>-]<<<<[>>>>+<<<<-]+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]
>>[>>>-<<<[-]]<<<[-]>>>>>>>[<<<<<<<<+>>>>>>>>-]<<<<<<<<[[-]>>>>>>>[<<<<<<<+>+>>>>>>-]<<<
<<<[>>>>>>+<<<<<<-]<[>>>>>>>>-<<<<<<<<[-]]]->>>>>>>>[<<<<<<<<->>>>>>>>-]<<<<<<<<[>>>>>>>
>+<<<<<<<<-]>>>>>>>>[>>>>>>>>+<<<<<<<<<<<<<<<<<<->>>>>>>>>>[-]]<<<<<<<<<-]<[>[-]+<-]>[<+
>>>>>>>>>>[-]>>>[<<<+<<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+<<<<<<<<<<<-]>>>>>>>>
->>>[-]<<<[>>>+<<<-]>[-]>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<->-]>>>>>>>>>>>>>>>>>[<<<<<<
<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<<[>[-]+<-]>[<+>>>>>>>>>>>[-]+++++<<<<<
<<<<<-]>>>>>>>>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>-]<<<<[<<<<
<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<<<[>[-]+<-]>[<+>>>>>>>>>>[-]>>>[<<
<+<<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+<<<<<<<<<<<-]>>>>>>>[-]>>[<<+<<<<<<<+>>>
>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>>>>>>[>+<<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<
<<-]>>>>>>>>>>>[-]<<<[>>>+<<<-][-]>>>[<<<+<<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+
<<<<<<<<<<<-]>[-]>[-]>[-]>[-]>>>>[<<<<<+[>+<<<<+>>>-]<<<[>>>+<<<-]+>>>>----------[<<<<->
>>>[-]]<<<<[>>+>[-]<<<-]>>[>>+<<<<+>>-]<<[>>+<<-]+>>>>----------[<<<<->>>>[-]]<<<<[>+>[-
]<<-]>>>>>>>>-]<<<<<<<[<++++++++[>++++++>++++++<<-]>.>.[-]<[-]]>[<<++++++++[>>++++++<<-]
>>.[-]]<<++++++++[>>>++++++<<<-]>>>.[-]<<<++++++++++.[-]>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<
<->-]<[>[-]+<-]>[<+<->>-]<<]
mınxomaτ
źródło
Otrzymasz głos za ambicją, chciałbym dać więcej niż jeden. :)
ciscoheat
8
Myślę, że gif potrzebuje ostrzeżenia o epilepsji.
Alex A.
12

CJam, 19 17 bajtów

q~{2-Ab)4>59s=N}/

Sprawdź to tutaj.

Pobiera dane wejściowe jako listę w stylu CJam i zwraca rozdzielone wyjściowe znaki nowej linii.

Wyjaśnienie

qN/{   e# Run this block for each line of the input...
  ~    e#   Evaluate the current line to get the integer.
  2-   e#   Subtract 2 to get all but the last digit right.
  Ab)  e#   Convert to base 10 (discarding a potential minus sign) and split off
       e#   the last digit.
  4>   e#   Test if it's greater than 4.
  59s= e#   Select the correct digit from the string "59" based on this result.
  N    e#   Push a line feed.
}/
Martin Ender
źródło
11

Python 2, 47

lambda l:[max(5,(n+3)/5*5-(n-2)/5%2)for n in l]

Jeśli spojrzymy na sekwencję zaokrąglonych wartości, zobaczymy, że występują one w blokach po 5.

... 25, 29, 29, 29, 29, 29, 35, 35, 35, 35, 35, 39, ...

Znajdujemy, w jakim bloku liczbowym się znajdujemy (n+3)/5(wywołaj tę wartość J). Następnie otrzymujemy odpowiednią wielokrotność 5z J*5i dostosowujemy takie rzeczy, jak w 30dół 29, odejmując, 1gdy Jjest parzysty.

Aby 1dać specjalny przypadek, 5zamiast -1, przekazujemy wynik do max(5,_).

xnor
źródło
Aby naprawić wersję Pyth, myślę, że możesz to zrobićmeS,-*hJ/-d2K5K%J2KQ
FryAmTheEggman,
2
lub 2 bajty krótsze:m-|*K5hJ/-d2K6%J2Q
Jakube,
1
@Jakube To sprytne, co powiesz na opublikowanie go?
xnor
Dobra zrobię to. Ale możesz wziąć pomysł na swoją odpowiedź w języku Python. Oszczędza jeden bajt:lambda l:[((n+3)/5*5or 6)-(n-2)/5%2for n in l]
Jakube,
8

Siatkówka, 32 bajty

Akceptuje dane wejściowe z listy oddzielonej przecinkami. Musi być przecinek końcowy. Wyjścia w tym samym formacie.

T`d`aa555559`.,
T+`da`ad`\da
a
5

Wyjaśnienie:

T`               #Transliteration mode.
  d`aa555559`    #Map the digits 0-9 to aa55555999
             .,  #Map only the trailing digits.
T+`              #Do until input does not change.
   da`ad`        #Map a to 9, 0 to a, and 1-9 to 0-8
         \da     #Only do this to each a and the character before each a.
a                #Match all leftover a's. This only happens when the input contains the integer 1.
5                #Replace them with 5.
Numer jeden
źródło
5

R, 51 49 47 43 bajtów

(f=((n=scan()-2)%/%5+1+(n<0))*5)-(f%%10==0)

Powinno 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

> (f=((n=scan()-2)%/%5+1+(n<0))*5)-(f%%10==0)
1: 1
2: 12
3: 8
4: 41
5: 27
6: 144
7: 99
8: 3
9: 
Read 8 items
[1]   5  15   9  39  29 145  99   5
> 
MickyT
źródło
5

Python 3, 74 82 bajtów

a=eval(input())
for i in a:print(round(i,-1)+[5,-1][max(4,i-2)%10>4])

Walczyłem o zwięzłość wartości mniejszych niż 11 i wymóg, aby 1 oceniać na 5.

Todd
źródło
Wydaje się, że twój program zajmuje tylko jedną liczbę całkowitą?
daniero
@daniero poprawne, naprawiono teraz, aby zaakceptować listę.
Todd
4

Pyth 21 18 29 28 bajtów

Dzięki @Jakube za skrócenie 3 bajtów!

KeQJ-QKI<K2tJ.q;I<K6+J5;E+J9

Wypróbuj tutaj.

EDYCJA: Najwyraźniej była nieprawidłowa. Naprawiłem to kosztem 11 bajtów; Spróbuję bardziej zagrać w golfa.

RK.
źródło
eQto to samo %Q10, co można również I<KeQ6+-QK5;E+-QK9
wstawić
Fajnie, nie wiedziałem o tym!
RK.
Nie ma problemu. Twoje podejście jest jednak błędne. Powinieneś zaokrąglić w dół do 9, jeśli ostatnia cyfra to 0lub1
Jakube
Ach, popracuję nad tym.
RK.
4

Pyth, 21 bajtów

m?tdtt+d@jC"²a<"6ed5Q

Niestety muszę wydać 4 bajty, aby poprawnie obsłużyć 1 USD.

orlp
źródło
Całkiem sprytne. Możesz jednak obsłużyć 1tylko 2 bajty. mt|t+d@jC"²a<"6ed6Q
Jakube,
4

Pyth, 18 bajtów

m-|*K5hJ/-d2K6%J2Q

Wypróbuj online: pakiet demonstracyjny lub testowy

Ta odpowiedź jest oparta na rozwiązaniu Python / Pyth @ xor. Główną różnicą jest to, że 1inaczej traktuję przypadek specjalny . Rzeczywisty wynik 1byłby 0 - 1 = -1. Używanie Pythona ormogę wymienić 0z 6, w wyniku 6 - 1 = 5. Oszczędza to bólu przy przyjmowaniu maksimum 5i wyniku.

Wyjaśnienie:

m-|*K5hJ/-d2K6%J2Q
m                Q   map each number d of the input list Q to:
    K5                  K = 5
       J/-d2K           J = (d - 2) / K
   *K hJ                   K * (J + 1)
  |                     or
             6             6 # if K*(J+1)==0
 -            %J2       minus (J mod 2)
Jakube
źródło
3

Wapń , 133 bajty

func main(){i=[12,8,41,27,144,99,3];foreach(e in i){f=e%10;if(!(e/10==0))print(e/10);if(f<5)r=5;else if(f>5)r=9;elser=f;println(r);}}

Uruchom i zobacz rozszerzoną wersję online: http://hciumlang.com/Hcium/index.php?code=4f1c14f4d699b11da7a6392a74b720c4

Jacob Misirian
źródło
Przepraszamy za zerwanie linku, pracowaliśmy nad bazą danych. Działa teraz
Jacob Misirian,
Jak opisano w kodzie wiki tagu golfowego , odpowiedzi muszą być pełnymi programami lub funkcjami. Fragmenty, które po prostu kodują wejście, nie są dozwolone, chyba że pytanie wyraźnie mówi inaczej.
Dennis
3

TI-BASIC, 19 bajtów

int(Ans/5+.6
max(5,5Ans-not(fPart(Ans/2

Wykorzystuje algorytm xnor. TI-BASIC pobiera wektoryzację i mnożenie za darmo, ale wydajemy jeszcze kilka bajtów, ponieważ nie ma modulo.

lirtosiast
źródło
1

Haskell, 114 bajtów

g n
 |n>6=9-n
 |n>1=5-n
 |1>0=(-n-1)
f n=show$(read n)+(g$read$(:[])$last n)
main=interact(unlines.(map f).lines)

Wyjaśnienie:

Funkcja gzwraca 9-nif n>6lub else 5-nif n>1lub else -n-1. gotrzymuje ostatnią cyfrę i zwraca to, co należy dodać do liczby wejściowej. fsłuży gdo uzyskania rozwiązania (plus wiele manipulacji ciągami). mainwyprowadza wynik fdla każdego wiersza wejścia.

HEGX64
źródło
1

Rubin, 55 50 + 1 bajtów

Uruchom go z nflagą, tak: ruby -n prices.rb. Wprowadź każdą cenę w osobnym wierszu.

x=$_.to_i
p x<7?5:(x-2).round(-1)+(~/[2-6]$/?5:-1)
daniero
źródło