Vorstellung und Anerkennung
Angenommen, Sie sind ein Barkeeper. Sie haben meistens viele fröhliche Menschen in Ihrer Bar, aber viele trinken immer nur das gleiche Getränk und zu wenig für Ihren Geschmack, und das möchten Sie ändern. Sie führen also ein System ein, bei dem der Preis eines Getränks variabel ist, je nachdem, wie viele bereits verkauft wurden, jedoch niemals mehr oder weniger als bestimmte Schwellenwerte. Aus seltsamen Gründen vergessen Sie immer, alle verkauften Getränke und Preise im Auge zu behalten, und müssen sich daher einen kurzen (= einprägsamen!) Code überlegen, der die Berechnung für Sie in Anbetracht der konsumierten Getränkemenge durchführt.
Diese Herausforderung ist bereits in der Zwischenprüfung im Jahr 2012 im Rahmen des Kurses für funktionale Programmierung an meiner Uni aufgetreten, und ich habe die Berechtigung meines Professors, sie hier zu veröffentlichen. Wir haben eine Musterlösung in der Prüfungssprache erhalten.
Eingang
Ihre Eingabe wird eine Liste von Zeichenfolgen sein, die keine Leerzeichen enthalten - dies sind die Namen der verkauften Getränke. Verwenden Sie für die Eingabe Ihre bevorzugte, allgemein akzeptierte Eingabemethode.
Ausgabe
Ihre Ausgabe wird eine einzelne Zahl sein - dies ist das Einkommen, das Sie an diesem Abend generiert haben. Geben Sie die Ausgabe mit Ihrer bevorzugten, allgemein akzeptierten Ausgabemethode an.
Was ist zu tun?
Dies gilt für jedes Getränk einzeln:
- Der Einstiegspreis beträgt 10.
- Jedes Mal, wenn das Getränk gekauft wird, wird der Preis für den nächsten Käufer um 1 erhöht.
- Der Höchstpreis beträgt 50. Wenn das Getränk für 50 gekauft wurde, beträgt der neue Preis wieder 10.
Ihre Aufgabe ist es, das Gesamteinkommen zu ermitteln, das aus der eingegebenen Getränkeliste nach den oben genannten Regeln generiert wird.
Falls Sie sich fragen: "50 Dollar sind wirklich verdammt teuer für ein Getränk!", Das sind 50-Dezi-Dollar, also 50 * 0,1 * Einheiten, aber ich habe mich für 10-50 entschieden, um Sprachen nicht auszuschließen, ohne Gleitkomma-Arithmetik.
Wer gewinnt?
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes! Es gelten Standardregeln.
Mögliche Eckfälle
Wenn die Eingabeliste leer ist, muss die Ausgabe 0 sein.
Es kann nicht davon ausgegangen werden, dass die Eingabeliste nach Getränken sortiert ist.
Beispiele
[] -> 0
["A"] -> 10
["A","B"] -> 20
["A","A","B"] -> 31
["A","B","A"] -> 31
["A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A"] -> 1240
["A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","B","B","B","C","C","D"] -> 1304
["D","A","A","C","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","B","B","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","B","C"] -> 1304
["A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","B","B","B","C","C","D","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A"] -> 1304
Antworten:
JavaScript (ES6), 50 Byte
quelle
d[x]
bis 10 anfangen ?d[x]
nicht gesetzt, ist esundefined
; dies machtd[x]<50
return false,d[x]=d[x]<50?d[x]+1:10
setzt alsod[x]
auf10
.undefined
. :)Python 2,
79745448 BytesDie Anzahl der massiven Bytes erhöht sich, indem das Problem überarbeitet wird.
Ich möchte die. Die Nutzung vonint
Besetzung loswerden , aber mein Gehirn funktioniert nichtl.pop()
zu vermeiden , dass die Liste Trimmen zweimal und einige gute alte Lambda Rekursion :)Danke an Jonathan Allan für das Speichern von 6 Bytes :)
Auf meine alte 54-Byte-Version war ich sehr stolz :)
quelle
...l>[]and 1*~...
um diese 3 Bytes zu speichern, von denen du wusstest, dass du es kannst.f=lambda l:l and~-l.count(l[0])%41+10+f(l[1:])or 0
f=lambda l:l and l.count(l.pop())%41+10+f(l)or 0
Pyth, 15 Bytes
Ein Programm, das eine Liste eingibt und das Ergebnis druckt.
Testsuite (Erste Zeile, um mehrere Eingaben zuzulassen)
Wie es funktioniert
quelle
Jelly ,
14 1110 BytesTryItOnline!
Wie?
quelle
05AB1E ,
1615 BytesDanke an Emigna für das Speichern eines Bytes!
Verwendet die CP-1252- Codierung. Probieren Sie es online!
quelle
ÎÙv¹y¢L<41%T+OO
sollte für 1 BytePerl 41 Bytes
Beinhaltet +1 für
-p
Nimmt Eingaben in Zeilenumbrüchen vor.
Inkrementiert einen Hash-Wert um:
10
Wenn jaundef
,-40
wenn> 49
ja50
, oder auf1
andere Weise. Dies wird dann zum$\
Ausgabetrenner hinzugefügt , den der Drucker-p
druckt.Beispiel:
quelle
05AB1E , 13 Bytes
Erläuterung
["A","B","A"]
als Beispiel verwendet.quelle
C ++ 14, 105 Bytes
Als generisches unbenanntes Lambda, das über den Referenzparameter zurückgegeben wird. Benötigt Eingabe, um ein Container zu sein
string
, der hatpush_back
, wievector<string>
.Verwenden Sie den
%41+10
Trick aus Kades Python-Antwort .Erstellt einen leeren Container
P
als Speicher, der bereits bedient wurde. Der Preis wird durch Zählen derx
In berechnetP
.Ungolfed und Nutzung:
quelle
Mathematica, 64 Bytes
Das Gefühl, es sollte kürzer sein.
Length/@Gather@#
zählt die Wiederholungen jedes Getränks.//.z_/;z>41:>Sequence[41,z-41]
Teilt eine ganze Zahlz
über 41 in41
undz-41
, um den Preisverfall widerzuspiegeln. Dann wird jede der Zählungen in die Formel eingefügt(19+#)#/2
, bei der es sich um die Gesamtkosten von#
Getränken handelt, solange sie#
höchstens 41Tr
betragen. Fasst schließlich diese Kosten zusammen.quelle
k, 22 Bytes
Das Argument kann eine beliebige Liste sein - Zeichenfolgen, Zahlen usw.
Die
q
Übersetzung ist leichter zu lesen:quelle
C #, 193 Bytes + 33
Weitere 33 Bytes für
using System.Collections.Generic;
Ich bin mir sicher, dass dies in Vergessenheit geraten kann. Wörterbücher sind definitiv nicht der beste Weg, dies zu tun, und ich könnte wahrscheinlich einen Ternär in mein Wenn einarbeiten. Ansonsten finde ich es okay!
Beispiele:
Ungolfed
quelle
Clojure, 79 Bytes
Zählt die Häufigkeit von Getränken und berechnet dann den Grundpreis als
10 + (i % 41)
.mapcat
verkettet sie undapply +
berechnet die Summe.quelle
PHP, 47 Bytes
Nimmt Eingaben von Befehlszeilenargumenten entgegen. renn mit
-r
.quelle