(To jest moje pierwsze pytanie w golfa)
Kiedy byłem dzieckiem, mój tata i ja wymyśliliśmy grę, w której tablica rejestracyjna, którą widzimy w samochodach, może dawać pewne punkty na podstawie kilku dość prostych zasad:
Liczba X tej samej litery lub cyfry daje punkty X-1, przykłady:
22 = 1 point
aa = 1 point
5555 = 3 points
Liczby muszą znajdować się obok siebie, więc 3353
daje tylko 1 punkt, ponieważ 5 łamie sekwencję 3.
Sekwencja liczb X w porządku rosnącym lub malejącym, co najmniej 3, daje X punktów, przykłady:
123 = 3 points
9753 = 4 points
147 = 3 points
System punktowy działa tylko dla liczb jednocyfrowych, więc 1919
nie daje punktów, a 14710
jedynie 3, (147).
Sekwencje można łączyć, aby uzyskać więcej punktów, przykłady:
1135 = 4 points (1 point for 11 and 3 points for 135)
34543 = 6 points (3 points for 345 and 3 points for 543)
Nie możesz jednak pociąć większej sekwencji na 2 mniejsze sekwencje dla dodatkowych punktów: 1234 = 123, 234 (6 points)
nie jest dozwolone.
Twoim zadaniem jest ustalenie liczby punktów przyznanych przez tablicę rejestracyjną.
W Danii tablice rejestracyjne mają następującą strukturę: CC II III, gdzie C to znak, a I to liczba całkowita, a zatem moje przykładowe dane wejściowe będą odzwierciedlać tę strukturę. Jeśli chcesz, możesz dopasować sekwencję do własnej struktury lub, jeśli czujesz się naprawdę ryzykowny, pozwól programowi przeanalizować strukturę tablicy rejestracyjnej, a tym samym sprawić, by działała na dowolnym typie tablicy rejestracyjnej na całym świecie. Jednak w odpowiedzi wyraźnie określ strukturę, z której zdecydowałeś się skorzystać.
Możesz wziąć dane wejściowe w dowolny sposób, ciąg znaków lub tablica wydają mi się najbardziej sensowne.
Wejście testowe | wydajność:
AA 11 111 | 5
AB 15 436 | 3
OJ 82 645 | 0
UI 65 456 | 6
HH 45 670 | 5
YH 00 244 | 5
AJ 00 754 | 1
Ze względu na charakter wyboru własnej struktury, a nawet obejmowania wszystkich struktur, niekoniecznie widzę, jak można wyraźnie określić zwycięzcę. Przypuszczam, że zwycięzcą będą najkrótsze bajty w strukturze, którą zdecydowano. (I nie bierz takich danych jak CICIC, tylko dla ułatwienia dla siebie)
EDYTOWAĆ:
W związku z pytaniami o komentarze mam kilka dodatkowych informacji: Sekwencja liczb rosnących lub malejących odnosi się do sekwencji arytmetycznej, więc X +/- a * 0, X +/- a * 1, ... X +/- a * n itd. Tak więc na przykład 3-5-7 to 3 + 2 * 0, 3 + 2 * 1, 3 + 2 * 2. Sekwencja nie musi jednak zaczynać się od 0 ani kończyć w 0.
WIĘCEJ EDYCJI:
Możesz podać dane w dowolny sposób, nie musisz wprowadzać spacji, myślników ani żadnych innych rzeczy, które czynią tablicę rejestracyjną bardziej czytelną. Jeśli możesz zaoszczędzić bajty, akceptując tylko wielkie litery lub coś w tym rodzaju, możesz to zrobić również. Jedynym wymaganiem jest to, aby Twój program mógł pobrać ciąg / tablicę / cokolwiek zawierającego zarówno znaki, jak i liczby, i wygenerować odpowiednią liczbę punktów zgodnie z podanymi regułami.
XX 87 654
. Wymyśliłem coś, co było poprawne dla wszystkich twoich przypadków testowych, ale jakoś niepoprawne w tym przypadku. Pracuję nad naprawą.CCIIIII
brak spacji), w przeciwnym razie ten problem nie będzie miał obiektywnego kryterium wygranej, którego tutaj wymagamy. Taki jak jest „(i nie bierz takich danych jak CICIC, tylko dla ułatwienia sobie)” jest bardzo subiektywny. Czym jest i nie jest dopuszczalna struktura?IA99999
(zawiera malejącą sekwencję punktów kodowych, ale nie liczb).Odpowiedzi:
05AB1E ,
25222018 bajtówAkceptuje ciąg małych liter alfabetu i znaków bez spacji.
Wypróbuj online! lub jako pakiet testowy
źródło
Łuska ,
201615 bajtów-1 bajt dzięki @Zgarb
Pobiera dane wejściowe bez spacji i małymi literami.
Wypróbuj online!
Wyjaśnienie
źródło
K0
może¬
tu być .IA99999
.Python 3 ,
19385 bajtów-3 bajty dzięki Lynn
Zajmuje wejście jako bajt-string z literami małymi jak:
b'aa11111'
.Wypróbuj online!
źródło
C=0!=d==c-l
jest jeszcze krótszy.Java 8, 195 bajtów
Można zdecydowanie zagrać w golfa za pomocą innej techniki sprawdzania sekwencji.
Wyjaśnienie:
Wypróbuj tutaj.
źródło
Pyth ,
5150 bajtów ( zataczanie się )Sprawdź wszystkie przypadki testowe lub wypróbuj tutaj.
źródło
R ,
153,145, 143 bajtyAnonimowa funkcja, która pobiera wektor znaków i zwraca liczbę całkowitą.
Oczekiwany wkład
z(c("A", "A", "1", "1", "1", "1", "1"))
Wypróbuj online!
Wersja bez golfa
źródło
C (gcc) , 91 bajtów
Wypróbuj online!
Pomysł skradziony z odpowiedzi Pythona Felipe Nardi Batisty .
źródło
Pyth ,
4842 bajtówBezpośredni port z mojej odpowiedzi na python. Pobiera dane wejściowe jako ciąg bajtów z małymi literami jako: b'aa11111 '.
To jest mój pierwszy kod w Pyth, więc wszelkie wskazówki są mile widziane: D
Wypróbuj tutaj
źródło
JavaScript,
216192186202201 bajtówUnminified
Edytuj historię:
0000 XXX
formatem. (-24 bajty)źródło
0000
daje 7 punktów, czy to prawda? (odczytuje się go jako sekwencję arytmetyczną i powtarzaną sekwencję liczbową w tym samym czasie)