È ora di regolare alcuni prezzi!


19

Sono sicuro che conosci lo schema dei prezzi di $ 9,99, invece di usare $ 10. Bene, nel tuo nuovo lavoro come amministratore di sistema in un grande negozio al dettaglio, vogliono che i prezzi aderiscano a uno schema simile:

  • Tutti i prezzi sono in dollari interi, senza centesimi.
  • Tutti i prezzi dovrebbero terminare con 5 o 9, arrotondando al più vicino ma verso l'alto se l'ultima cifra è compresa tra 5 e 9. (Si applica all'ultima cifra 2 e 7)
  • L'input più basso è $ 1 e il prezzo più basso dovrebbe essere $ 5.

Il tuo input è un elenco di numeri interi:

12
8
41
27
144
99
3

E l'output dovrebbe un elenco dei nuovi prezzi. Nel caso precedente:

15
9
39
29
145
99
5

Possiamo prendere l'input uno per uno? O separati da qualcosa di diverso da una newline?
mınxomaτ,

Per semplicità, penso che il formato specificato sia il migliore, quindi puoi concentrarti sulla risoluzione del problema reale invece di gestire anche la formattazione. Ma ovviamente è consentito un solo numero intero su una riga. :)
ciscoheat,

1
Sì, un elenco specifico della lingua è probabilmente più facile da gestire. Ma per quanto tempo posso continuare a cambiare le specifiche? Questo è uno dei motivi per cui ho esitato a pubblicare qualcosa nel codice golf.
ciscoheat,

2
Newline viene ora eliminato come requisito, specificando solo "un elenco". Spero che migliorerà le cose, non peggio ...!
ciscoheat,

6
"Ma per quanto tempo posso continuare a modificare le specifiche? Questo è uno dei motivi per cui ho esitato a pubblicare qualcosa nel codice golf." Nel caso in cui non ne sia a conoscenza, è possibile pubblicare idee per la sfida nella sandbox in cui è possibile ottenere un feedback della comunità prima che la sfida diventi attiva , in modo che cose come questa possano (si spera) essere evidenziate e risolte prima che le modifiche invalidino le risposte esistenti.
Martin Ender,

Risposte:


13

Brainfuck, 4428 byte (non valido)

Quando ho saputo che l'algoritmo funzionava, ho perso interesse e non ho finito il gestore di input. Ecco perché questa soluzione risolve tecnicamente il problema, ma è molto difficile da usare. Quando avvii il programma in un interprete interattivo (più veloce è meglio), puoi inserire il tuo "numero". Deve essere inserito in Base256 se il tuo interprete non supporta la conversione numerica (la mia lo fa). Il prezzo massimo che puoi inserire è quindi 255.

Esegue quindi un modulo loop se il numero è maggiore di 9 per dividere tutte le cifre tranne l'ultima. I risultati della divisione vengono salvati, mentre l'ultima cifra viene arrotondata a 5 o 9. Quindi vengono aggiunti e stampati. Quindi il programma pulisce tutti i registri utilizzati (probabilmente eccessivo) e chiede il numero successivo.

Gestisce tutti i casi speciali ( $1, $20/$21 -> $19ecc.). Guardalo correre per il numero 4qui (circa 3 minuti, video abbreviato):

demo video

Codice

>+<+[>>>>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<[>[-]+<-]>
[<+>>>>>>>>>>>[-],>>[-]<[-]<[>+<<<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>>>
>>>>[-]>[<+<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>>>>>>[-]+++++++++>[<<<<+
>>>>-]<[<<<<<<+>+<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>[>>[<+<<<+>>>>-]<<<<[>>>>+<<<<-]
+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]>>[>>>>-<<<<[-]]<<<[-]<->>>>>>>>[<<<<<<<<->>>>
>>>>-]<<<<<<<<[>>>>>>>>+<<<<<<<<-]>>>>>>>>[>>>>>+<<<<<<<<<<<<<<<->>>>>>>>>>[-]]<<<<<<<<<
-]>>>>>>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<<<<
<[>[-]+<-]>[<+>>>>>>>>>>>>[-]<[>+<<<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>
>>>>>[-]++++++++++>>>[<<<<<<<+>>>>>>>-]<<<<<<<[>>>>[<<<<<+<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<
<<<<<-]>>[>-[<<+<+>>>-]<<<[>>>+<<<-]+>[<->[-]]<[>>-[>>>>>>>>-<<<<<<<<[-]]+<<[-]]>>-]>>>>
>>>>+<<<<<<<]>>>>>[-]>>[<<+<<<<<<<<+>>>>>>>>>>-]<<<<<<<<<<[>>>>>>>>>>+<<<<<<<<<<-]>>>>>>
>[-]++++++++++>[<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>[>+<<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<
<<<-]>-]>>>>>>>>>[-]<<[>>+<<-][-]>>>[<<<+<<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+<
<<<<<<<<<<-]>>>>>>>[-]>>>[<<<+<<<<<<<+>>>>>>>>>>-]<<<<<<<<<<[>>>>>>>>>>+<<<<<<<<<<-]>>>>
>>>[>+<<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>>>>>>>>>>[-]<<<[>>>+<<<-][-]>[<+<<<<<
<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>>>>>>[-]>>>[<<<+<<<<<<<+>>>>>>>>>>-]<<<<
<<<<<<[>>>>>>>>>>+<<<<<<<<<<-]>>>>>>>[>-<<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>>>>
>>>>[-]<[>+<-]<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>-]
<<<<<<<<<<<<<<<<<<<<[>[-]+<-]>[<+>>>>>>>>>>[-]>>[<<+<<<<<<<<+>>>>>>>>>>-]<<<<<<<<<<[>>>>
>>>>>>+<<<<<<<<<<-]>>>>>>>[-]>[<<<<+>>>>-]<[<<<<<<+>+<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<
-]>>[>>[<+<<<+>>>>-]<<<<[>>>>+<<<<-]+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]>>[>>>>-<<
<<[-]]<<<[-]<->>>>>>>>[<<<<<<<<->>>>>>>>-]<<<<<<<<[>>>>>>>>+<<<<<<<<-]>>>>>>>>[>>>>>>>>>
>>>+<<<<<<<<<<<<<<<<<<<<<<->>>>>>>>>>[-]]<<<<<<<<<-]>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<+>>>>>
>>>>>>>>>>-]<<<<<<<<<<<<<<<[>[-]+<-]>[<+>>>>>>>>>>[-]>[<+<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>
>>>>>>>>+<<<<<<<<<-]>>>>>>>[-]++++>[<<<<+>>>>-]<[<<<<<<+>+<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<
<<<<<-]>>[>>[<+<<<+>>>>-]<<<<[>>>>+<<<<-]+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]>>[>>
>>-<<<<[-]]<<<[-]<->>>>>>>>[<<<<<<<<->>>>>>>>-]<<<<<<<<[>>>>>>>>+<<<<<<<<-]>>>>>>>>[>>>>
>>+<<<<<<<<<<<<<<<<->>>>>>>>>>[-]]<<<<<<<<<-]<[>[-]+<-]>[<+>>>>>>>>>>>[-]+++++++++>>>>>>
>>+<<<<<<<<<<<<<<<<<<<->-]>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>-]<<<<<<<<<<<
<<<<<[>[-]+<-]>[<+>>>>>>>>>>[-]>[<+<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>
>>>>>[-]++>[<<<<+>>>>-]<[<<<<<<+>+<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>[>>[<+<<<+>>>>-
]<<<<[>>>>+<<<<-]+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]<[>>>>>>>-<<<<<<<[-]]>>>[-]>>
>[-]>>>>[<<<<+<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+<<<<<<<<<<<-]>>>>>>>>>>>>[-]+
++++++++<<<<<[<<<+>>>-]>>>>>[<<<<<<<<<<<+>+<<+>>>>>>>>>>>>-]<<<<<<<<<<<<[>>>>>>>>>>>>+<<
<<<<<<<<<<-]>>[>>[<+<<<+>>>>-]<<<<[>>>>+<<<<-]+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]
>>[>>>-<<<[-]]<<<[-]>>>>>>>[<<<<<<<<+>>>>>>>>-]<<<<<<<<[[-]>>>>>>>[<<<<<<<+>+>>>>>>-]<<<
<<<[>>>>>>+<<<<<<-]<[>>>>>>>>-<<<<<<<<[-]]]->>>>>>>>[<<<<<<<<->>>>>>>>-]<<<<<<<<[>>>>>>>
>+<<<<<<<<-]>>>>>>>>[>>>>>>>>+<<<<<<<<<<<<<<<<<<->>>>>>>>>>[-]]<<<<<<<<<-]<[>[-]+<-]>[<+
>>>>>>>>>>[-]>>>[<<<+<<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+<<<<<<<<<<<-]>>>>>>>>
->>>[-]<<<[>>>+<<<-]>[-]>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<->-]>>>>>>>>>>>>>>>>>[<<<<<<
<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<<[>[-]+<-]>[<+>>>>>>>>>>>[-]+++++<<<<<
<<<<<-]>>>>>>>>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>-]<<<<[<<<<
<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<<<[>[-]+<-]>[<+>>>>>>>>>>[-]>>>[<<
<+<<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+<<<<<<<<<<<-]>>>>>>>[-]>>[<<+<<<<<<<+>>>
>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>>>>>>[>+<<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<
<<-]>>>>>>>>>>>[-]<<<[>>>+<<<-][-]>>>[<<<+<<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+
<<<<<<<<<<<-]>[-]>[-]>[-]>[-]>>>>[<<<<<+[>+<<<<+>>>-]<<<[>>>+<<<-]+>>>>----------[<<<<->
>>>[-]]<<<<[>>+>[-]<<<-]>>[>>+<<<<+>>-]<<[>>+<<-]+>>>>----------[<<<<->>>>[-]]<<<<[>+>[-
]<<-]>>>>>>>>-]<<<<<<<[<++++++++[>++++++>++++++<<-]>.>.[-]<[-]]>[<<++++++++[>>++++++<<-]
>>.[-]]<<++++++++[>>>++++++<<<-]>>>.[-]<<<++++++++++.[-]>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<
<->-]<[>[-]+<-]>[<+<->>-]<<]

Otterrai un voto per ambizione, vorrei poterne dare più di uno. :)
ciscoheat

8
Penso che la GIF abbia bisogno di un avviso di epilessia.
Alex A.,

12

CJam, 19 17 byte

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

Provalo qui.

Prende l'input come un elenco in stile CJam e restituisce l'output newline separato.

Spiegazione

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.
}/

11

Python 2, 47

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

Se osserviamo la sequenza di valori arrotondati, vediamo che arrivano in blocchi di 5.

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

Troviamo con quale blocco numerico ci troviamo (n+3)/5(chiama questo valore J). Quindi, otteniamo il multiplo giusto di 5con J*5e adattiamo le cose come in 30basso 29sottraendo 1ogni volta che Jè pari.

Per special-case 1dare 5piuttosto che -1, passiamo il risultato max(5,_).


Per risolvere la versione di meS,-*hJ/-d2K5K%J2KQ
Pyth

2
o 2 byte più brevi:m-|*K5hJ/-d2K6%J2Q
Jakube,

1
@Jakube È intelligente, che ne dici di pubblicarlo?
xnor

Ok lo farò. Ma puoi prendere l'idea per la tua risposta Python. Salva un byte:lambda l:[((n+3)/5*5or 6)-(n-2)/5%2for n in l]
Jakube,

8

Retina, 32 byte

Accetta input in un elenco separato da virgole. Deve esserci una virgola finale. Output nello stesso formato.

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

Spiegazione:

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.

5

R, 51 49 47 43 byte

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

Dovrebbe esserci spazio per migliorarlo, ma penso che una strategia diversa potrebbe essere migliore. Prende un vettore di numeri interi dalla scansione e genera un vettore di numeri interi. In sostanza, utilizza la divisione intera per arrotondare il numero in basso, aggiunge 1 e lo moltiplica per cinque. Qualsiasi cosa divisibile per 10 ha 1 portato via. Se n = 1, aumenta la divisione dei numeri interi di 1.

Prova

> (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
> 

5

Python 3, 74 82 byte

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

Ho lottato per brevità su valori inferiori a 11 e il requisito per 1 di valutare a 5.


Sembra che il tuo programma richieda un solo numero intero?
daniero,

@daniero corretto, risolto ora per accettare l'elenco.
Todd,

4

Pyth, 21 18 29 28 byte

Grazie a @Jakube per il taglio di 3 byte!

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

Provalo qui.

EDIT: apparentemente non era valido. L'ho risolto al costo di 11 byte; Proverò a golf di più.


eQè la stessa cosa di %Q10, inoltre è possibile I<KeQ6+-QK5;E+-QK9
includere

Bene, non lo sapevo!
RK.

Nessun problema. Il tuo approccio è sbagliato però. Dovresti arrotondare per 901
difetto

Ah, ci lavorerò sopra.
RK.

4

Pyth, 21 byte

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

Purtroppo devo spendere 4 byte per gestire correttamente $ 1.


Abbastanza intelligente. 1Tuttavia, è possibile gestire solo 2 byte. mt|t+d@jC"²a<"6ed6Q
Jakube,

4

Pyth, 18 byte

m-|*K5hJ/-d2K6%J2Q

Provalo online: Dimostrazione o Test Suite

Questa risposta si basa sulla soluzione Python / Pyth di @xor. La differenza principale è che gestisco il caso speciale in modo 1diverso. Il risultato effettivo per 1sarebbe 0 - 1 = -1. Usando Python orposso sostituire il 0con un 6, risultante in 6 - 1 = 5. Questo evita il dolore di prendere il massimo 5e il risultato.

Spiegazione:

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)

3

Hassium , 133 byte

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);}}

Esegui e visualizza l'espansione online: http://hassiumlang.com/Hassium/index.php?code=4f1c14f4d699b11da7a6392a74b720c4


Ci scusiamo per il collegamento interrotto, stavamo facendo un po 'di lavoro sul database. Funziona ora
Jacob Misirian,

Come indicato nel wiki del codice golf tag , le risposte devono essere programmi o funzioni completi. Gli snippet che semplicemente codificano l'input non sono consentiti, a meno che la domanda non specifichi diversamente.
Dennis,

3

TI-BASIC, 19 byte

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

Utilizza l'algoritmo di xnor. TI-BASIC ottiene la vettorializzazione e la moltiplicazione gratuitamente, ma spendiamo qualche byte in più perché non ha un modulo.


1

Haskell, 114 byte

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)

Spiegazione:

La funzione grestituisce 9-nif n>6or else 5-nif n>1or else -n-1. gviene data l'ultima cifra e restituisce ciò che deve essere aggiunto al numero di input. fusa gper ottenere la soluzione (oltre a molta manipolazione delle stringhe). maingenera il risultato di fper ogni riga di input.


1

Rubino, 55 50 + 1 byte

Eseguire con la nbandierina, in questo modo: ruby -n prices.rb. Inserisci ogni prezzo su una riga separata.

x=$_.to_i
p x<7?5:(x-2).round(-1)+(~/[2-6]$/?5:-1)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.