Wprowadzenie i zaliczenie
Załóżmy, że jesteś barmanem. W twoim barze jest wielu szczęśliwych ludzi, ale wielu z nich pije tylko ten sam napój i za mało dla twojego smaku i chcesz to zmienić. Wprowadzasz więc system, w którym cena napoju jest zmienna, w zależności od tego, ile już zostało sprzedanych, ale nigdy nie jest droższe niż pewne progi. Z jakiegoś dziwnego powodu zawsze zapominasz o właściwym śledzeniu wszystkich sprzedawanych napojów i cen, dlatego musisz pomyśleć o krótkim (= niezapomnianym!) Fragmencie kodu, który robi matematykę dla ciebie biorąc pod uwagę ilość wypitych napojów.
Wyzwanie to pojawiło się już podczas egzaminu śródokresowego w 2012 r. Na kursie programowania funkcjonalnego na moim uniwersytecie i mam zgodę profesora na opublikowanie go tutaj. Dostaliśmy przykładowe rozwiązanie w języku egzaminu.
Wejście
Twój wkład to lista ciągów znaków, które nie zawierają spacji - są to nazwy sprzedawanych napojów. Wprowadź dane wejściowe, używając preferowanej, ogólnie akceptowanej metody wprowadzania danych.
Wynik
Twój wynik będzie pojedynczą liczbą - to przychód, który wygenerowałeś dziś wieczorem. Podaj dane wyjściowe przy użyciu preferowanej, ogólnie akceptowanej metody wydruku.
Co robić?
Dotyczy to każdego drinka z osobna:
- Cena wywoławcza wynosi 10.
- Za każdym razem, gdy napój jest kupowany, jego cena jest podwyższana o 1 dla następnego nabywcy.
- Maksymalna cena to 50. Jeśli napój został kupiony za 50, nowa cena ponownie wyniesie 10.
Twoim zadaniem jest znaleźć całkowity dochód wygenerowany przez listę wejściową napojów przy powyższych zasadach.
Jeśli zastanawiasz się: „50 dolców jest naprawdę cholernie drogie za drinka!”, To 50 dolców za decy, więc 50 * 0,1 * Jednostka, ale zdecydowałem się na 10-50, aby nie wykluczać języków bez arytmetyka zmiennoprzecinkowa.
Kto wygrywa?
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach! Obowiązują standardowe zasady.
Potencjalne narożne skrzynki
Jeżeli lista wejściowa jest pusta, wartość wyjściowa powinna wynosić 0.
Nie można zakładać, że lista wejściowa jest posortowana według napoju.
Przykłady
[] -> 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