Zeit, einige Preise anzupassen!

19

Ich bin sicher, Sie kennen das Preisschema für 9,99 USD, anstatt 10 USD zu verwenden. Nun, in Ihrem neuen Job als Systemadministrator in einem großen Einzelhandelsgeschäft möchten sie, dass die Preise einem ähnlichen Schema folgen:

  • Alle Preise verstehen sich in ganzen Dollars, ohne Cent.
  • Alle Preise sollten mit 5 oder 9 enden und auf die nächsthöhere Ziffer aufrunden, wenn die letzte Ziffer zwischen 5 und 9 liegt. (Gilt für die letzte Ziffer 2 und 7)
  • Der niedrigste Input beträgt 1 USD, und der niedrigste Output sollte 5 USD betragen.

Ihre Eingabe ist eine Liste von ganzen Zahlen:

12
8
41
27
144
99
3

Und die Ausgabe sollte eine Liste der neuen Preise enthalten. Im obigen Fall:

15
9
39
29
145
99
5
Ciscoheat
quelle
Können wir die Eingaben einzeln übernehmen? Oder durch etwas anderes als einen Zeilenumbruch getrennt?
Mittwoch,
Der Einfachheit halber halte ich das angegebene Format für das beste, sodass Sie sich auf die Lösung des eigentlichen Problems konzentrieren können, anstatt auch die Formatierung zu übernehmen. Aber natürlich ist eine einzelne Ganzzahl in einer Zeile erlaubt. :)
ciscoheat
1
Ja, eine sprachspezifische Liste ist wahrscheinlich einfacher zu handhaben. Aber wie lange kann ich die technischen Daten noch ändern? Dies ist einer der Gründe, warum ich gezögert habe, irgendetwas in Code Golf zu posten.
Ciscoheat
2
Zeilenvorschub wird nun als Anforderung gelöscht, wobei nur "eine Liste" angegeben wird. Ich hoffe es wird alles besser machen, nicht schlechter ...!
Ciscoheat
6
"Aber wie lange kann ich die Spezifikationen noch ändern? Dies ist einer der Gründe, warum ich gezögert habe, irgendetwas im Codegolf zu veröffentlichen." Falls Sie sich dessen nicht bewusst sind, können Sie Challenge-Ideen in der Sandbox veröffentlichen, wo Sie Community-Feedback erhalten, bevor die Challenge live geht, sodass (hoffentlich) auf solche Dinge hingewiesen und sie behoben werden können, bevor Änderungen vorhandene Antworten ungültig machen.
Martin Ender

Antworten:

13

Brainfuck, 4428 Bytes (ungültig)

Sobald ich wusste, dass der Algorithmus funktioniert, verlor ich das Interesse und beendete den Eingabehandler nicht. Das ist der Grund, warum diese Lösung das Problem technisch löst, aber sehr schwer zu verwenden ist. Wenn Sie das Programm in einem interaktiven Interpreter starten (schneller ist besser), können Sie Ihre "Nummer" eingeben. Es muss in Base256 eingegeben werden, wenn Ihr Interpreter keine Nummernkonvertierung unterstützt (meins). Der maximale Preis, den Sie eingeben können, ist daher 255.

Wenn die Zahl größer als 9 ist, führt es eine Modulo-Schleife durch, um alle Ziffern mit Ausnahme der letzten abzuspalten. Die Divisionsergebnisse werden gespeichert, während die letzte Ziffer auf 5 oder 9 gerundet wird. Anschließend werden sie hinzugefügt und gedruckt. Dann bereinigt das Programm alle verwendeten Register (wahrscheinlich zuviel) und fragt nach der nächsten Nummer.

Es kümmert sich um alle Sonderfälle ( $1, $20/$21 -> $19etc.). Schau es dir 4hier an (ca. 3 Minuten, Video gekürzt):

Video-Demo

Code

>+<+[>>>>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<[>[-]+<-]>
[<+>>>>>>>>>>>[-],>>[-]<[-]<[>+<<<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>>>
>>>>[-]>[<+<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>>>>>>[-]+++++++++>[<<<<+
>>>>-]<[<<<<<<+>+<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>[>>[<+<<<+>>>>-]<<<<[>>>>+<<<<-]
+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]>>[>>>>-<<<<[-]]<<<[-]<->>>>>>>>[<<<<<<<<->>>>
>>>>-]<<<<<<<<[>>>>>>>>+<<<<<<<<-]>>>>>>>>[>>>>>+<<<<<<<<<<<<<<<->>>>>>>>>>[-]]<<<<<<<<<
-]>>>>>>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<<<<
<[>[-]+<-]>[<+>>>>>>>>>>>>[-]<[>+<<<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>
>>>>>[-]++++++++++>>>[<<<<<<<+>>>>>>>-]<<<<<<<[>>>>[<<<<<+<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<
<<<<<-]>>[>-[<<+<+>>>-]<<<[>>>+<<<-]+>[<->[-]]<[>>-[>>>>>>>>-<<<<<<<<[-]]+<<[-]]>>-]>>>>
>>>>+<<<<<<<]>>>>>[-]>>[<<+<<<<<<<<+>>>>>>>>>>-]<<<<<<<<<<[>>>>>>>>>>+<<<<<<<<<<-]>>>>>>
>[-]++++++++++>[<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>[>+<<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<
<<<-]>-]>>>>>>>>>[-]<<[>>+<<-][-]>>>[<<<+<<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+<
<<<<<<<<<<-]>>>>>>>[-]>>>[<<<+<<<<<<<+>>>>>>>>>>-]<<<<<<<<<<[>>>>>>>>>>+<<<<<<<<<<-]>>>>
>>>[>+<<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>>>>>>>>>>[-]<<<[>>>+<<<-][-]>[<+<<<<<
<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>>>>>>[-]>>>[<<<+<<<<<<<+>>>>>>>>>>-]<<<<
<<<<<<[>>>>>>>>>>+<<<<<<<<<<-]>>>>>>>[>-<<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>>>>
>>>>[-]<[>+<-]<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>-]
<<<<<<<<<<<<<<<<<<<<[>[-]+<-]>[<+>>>>>>>>>>[-]>>[<<+<<<<<<<<+>>>>>>>>>>-]<<<<<<<<<<[>>>>
>>>>>>+<<<<<<<<<<-]>>>>>>>[-]>[<<<<+>>>>-]<[<<<<<<+>+<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<
-]>>[>>[<+<<<+>>>>-]<<<<[>>>>+<<<<-]+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]>>[>>>>-<<
<<[-]]<<<[-]<->>>>>>>>[<<<<<<<<->>>>>>>>-]<<<<<<<<[>>>>>>>>+<<<<<<<<-]>>>>>>>>[>>>>>>>>>
>>>+<<<<<<<<<<<<<<<<<<<<<<->>>>>>>>>>[-]]<<<<<<<<<-]>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<+>>>>>
>>>>>>>>>>-]<<<<<<<<<<<<<<<[>[-]+<-]>[<+>>>>>>>>>>[-]>[<+<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>
>>>>>>>>+<<<<<<<<<-]>>>>>>>[-]++++>[<<<<+>>>>-]<[<<<<<<+>+<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<
<<<<<-]>>[>>[<+<<<+>>>>-]<<<<[>>>>+<<<<-]+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]>>[>>
>>-<<<<[-]]<<<[-]<->>>>>>>>[<<<<<<<<->>>>>>>>-]<<<<<<<<[>>>>>>>>+<<<<<<<<-]>>>>>>>>[>>>>
>>+<<<<<<<<<<<<<<<<->>>>>>>>>>[-]]<<<<<<<<<-]<[>[-]+<-]>[<+>>>>>>>>>>>[-]+++++++++>>>>>>
>>+<<<<<<<<<<<<<<<<<<<->-]>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>-]<<<<<<<<<<<
<<<<<[>[-]+<-]>[<+>>>>>>>>>>[-]>[<+<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>
>>>>>[-]++>[<<<<+>>>>-]<[<<<<<<+>+<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>[>>[<+<<<+>>>>-
]<<<<[>>>>+<<<<-]+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]<[>>>>>>>-<<<<<<<[-]]>>>[-]>>
>[-]>>>>[<<<<+<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+<<<<<<<<<<<-]>>>>>>>>>>>>[-]+
++++++++<<<<<[<<<+>>>-]>>>>>[<<<<<<<<<<<+>+<<+>>>>>>>>>>>>-]<<<<<<<<<<<<[>>>>>>>>>>>>+<<
<<<<<<<<<<-]>>[>>[<+<<<+>>>>-]<<<<[>>>>+<<<<-]+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]
>>[>>>-<<<[-]]<<<[-]>>>>>>>[<<<<<<<<+>>>>>>>>-]<<<<<<<<[[-]>>>>>>>[<<<<<<<+>+>>>>>>-]<<<
<<<[>>>>>>+<<<<<<-]<[>>>>>>>>-<<<<<<<<[-]]]->>>>>>>>[<<<<<<<<->>>>>>>>-]<<<<<<<<[>>>>>>>
>+<<<<<<<<-]>>>>>>>>[>>>>>>>>+<<<<<<<<<<<<<<<<<<->>>>>>>>>>[-]]<<<<<<<<<-]<[>[-]+<-]>[<+
>>>>>>>>>>[-]>>>[<<<+<<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+<<<<<<<<<<<-]>>>>>>>>
->>>[-]<<<[>>>+<<<-]>[-]>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<->-]>>>>>>>>>>>>>>>>>[<<<<<<
<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<<[>[-]+<-]>[<+>>>>>>>>>>>[-]+++++<<<<<
<<<<<-]>>>>>>>>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>-]<<<<[<<<<
<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<<<[>[-]+<-]>[<+>>>>>>>>>>[-]>>>[<<
<+<<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+<<<<<<<<<<<-]>>>>>>>[-]>>[<<+<<<<<<<+>>>
>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>>>>>>[>+<<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<
<<-]>>>>>>>>>>>[-]<<<[>>>+<<<-][-]>>>[<<<+<<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+
<<<<<<<<<<<-]>[-]>[-]>[-]>[-]>>>>[<<<<<+[>+<<<<+>>>-]<<<[>>>+<<<-]+>>>>----------[<<<<->
>>>[-]]<<<<[>>+>[-]<<<-]>>[>>+<<<<+>>-]<<[>>+<<-]+>>>>----------[<<<<->>>>[-]]<<<<[>+>[-
]<<-]>>>>>>>>-]<<<<<<<[<++++++++[>++++++>++++++<<-]>.>.[-]<[-]]>[<<++++++++[>>++++++<<-]
>>.[-]]<<++++++++[>>>++++++<<<-]>>>.[-]<<<++++++++++.[-]>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<
<->-]<[>[-]+<-]>[<+<->>-]<<]
mınxomaτ
quelle
Sie erhalten eine Stimme für Ehrgeiz, ich wünschte, ich könnte mehr als eine geben. :)
ciscoheat
8
Ich denke, dass GIF eine Epilepsiewarnung braucht.
Alex A.
12

CJam, 19 17 Bytes

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

Teste es hier.

Übernimmt die Eingabe als eine CJam-artige Liste und gibt die Ausgabe in Zeilenumbrüchen getrennt zurück.

Erläuterung

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
quelle
11

Python 2, 47

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

Wenn wir uns die Reihenfolge der gerundeten Werte ansehen, sehen wir, dass sie in 5er-Blöcken vorliegen.

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

Wir finden, in welchem ​​Nummernblock wir uns befinden (n+3)/5(nennen Sie diesen Wert J). Dann erhalten wir das richtige Vielfache von 5with J*5und passen Dinge wie 30down to an, 29indem wir subtrahieren, 1wann immer gerade Jist.

Um einen speziellen Fall 1geben , 5anstatt -1, übergeben wir das Ergebnis an max(5,_).

xnor
quelle
Um die Pyth-Version zu reparieren, denke ich, können SiemeS,-*hJ/-d2K5K%J2KQ
FryAmTheEggman
2
oder 2 Bytes kürzer:m-|*K5hJ/-d2K6%J2Q
Jakube
1
@ Jakube Das ist klug, wie wäre es, wenn du es postest?
Xnor
Ok, ich werde. Aber Sie können die Idee für Ihre Python-Antwort übernehmen. Es speichert ein Byte:lambda l:[((n+3)/5*5or 6)-(n-2)/5%2for n in l]
Jakube
8

Netzhaut, 32 Bytes

Akzeptiert Eingaben in einer durch Kommas getrennten Liste. Es muss ein Nachkomma stehen. Ausgaben im selben Format.

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

Erläuterung:

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.
Die Nummer eins
quelle
5

R, 51 49 47 43 Bytes

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

Es sollte Raum geben, dies zu verbessern, aber ich denke, eine andere Strategie könnte besser sein. Nimmt einen Vektor von ganzen Zahlen aus dem Scan und gibt einen Vektor von ganzen Zahlen aus. Im Wesentlichen wird dabei eine Ganzzahldivision verwendet, um die Zahl abzurunden, um 1 zu addieren und sie mit fünf zu multiplizieren. Alles, was durch 10 teilbar ist, hat 1 weggenommen. Wenn n = 1, wird die Ganzzahldivision um 1 erhöht.

Testlauf

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

Python 3, 74 82 Bytes

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

Ich kämpfte für die Kürze auf Werten unter 11 und die Voraussetzung für 1 zu 5 zu bewerten.

Todd
quelle
Scheint, als würde Ihr Programm nur eine einzige Ganzzahl annehmen?
Daniero
@daniero korrekt, jetzt behoben, um Liste zu akzeptieren.
Todd
4

Pyth, 21 18 29 28 Bytes

Danke an @Jakube für das Schneiden von 3 Bytes!

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

Probieren Sie es hier aus.

BEARBEITEN: Anscheinend war es ungültig. Ich habe es auf Kosten von 11 Bytes behoben; Ich werde versuchen, mehr Golf zu spielen.

RK.
quelle
eQist das gleiche wie %Q10, auch können Sie die Zuordnung inline:I<KeQ6+-QK5;E+-QK9
Jakube
Cool, das wusste ich nicht!
RK.
Kein Problem. Ihr Ansatz ist jedoch falsch. Sie sollten 901
abrunden
Ah, ich werde daran arbeiten.
RK.
4

Pyth, 21 Bytes

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

Leider muss ich 4 Bytes ausgeben, um $ 1 richtig zu handhaben.

orlp
quelle
Ziemlich schlau. Sie können jedoch 1nur mit 2 Bytes umgehen . mt|t+d@jC"²a<"6ed6Q
Jakube,
4

Pyth, 18 Bytes

m-|*K5hJ/-d2K6%J2Q

Probieren Sie es online aus: Demo oder Test Suite

Diese Antwort basiert auf der Python / Pyth-Lösung von @ xor. Der Hauptunterschied ist, dass ich den Sonderfall 1anders behandle. Das tatsächliche Ergebnis für 1wäre 0 - 1 = -1. Mit Pythons orkann ich das 0durch ein ersetzen 6, was dazu führt 6 - 1 = 5. Dies erspart den Schmerz, das Maximum 5und das Ergebnis zu erzielen.

Erläuterung:

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
quelle
3

Hassium , 133 Bytes

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

Rufen Sie die erweiterte Online- Version auf : http://hassiumlang.com/Hassium/index.php?code=4f1c14f4d699b11da7a6392a74b720c4

Jacob Misirian
quelle
Es tut uns leid, dass der Link unterbrochen wurde. Wir haben einige Datenbankarbeiten durchgeführt. Funktioniert jetzt.
Jacob Misirian
Wie im Code Golf Tag Wiki beschrieben , müssen Antworten vollständige Programme oder Funktionen sein. Ausschnitte, die die Eingabe lediglich fest codieren, sind nicht zulässig, sofern in der Frage nicht ausdrücklich etwas anderes angegeben ist.
Dennis
3

TI-BASIC, 19 Bytes

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

Verwendet den Algorithmus von xnor. TI-BASIC erhält die Vektorisierung und Multiplikation kostenlos, aber wir geben ein paar Bytes mehr aus, weil es kein Modulo hat.

Lirtosiast
quelle
1

Haskell, 114 Bytes

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)

Erläuterung:

Die Funktion ggibt 9-nif n>6oder else 5-nif n>1oder else zurück -n-1. gerhält die letzte Ziffer und gibt zurück, was zur eingegebenen Nummer hinzugefügt werden soll. fverwendet g, um die Lösung zu erhalten (plus viel String-Manipulation). maingibt das Ergebnis ffür jede Eingabezeile aus.

HEGX64
quelle
1

Rubin, 55 50 + 1 Bytes

Führen Sie es mit der nFahne, etwa so: ruby -n prices.rb. Geben Sie jeden Preis in eine separate Zeile ein.

x=$_.to_i
p x<7?5:(x-2).round(-1)+(~/[2-6]$/?5:-1)
daniero
quelle