Skróć ten stan USA! było fajnie, ale dowiedzieliśmy się, że skuteczne skracanie nazw stanów USA jest trudne w obecnym systemie. Wymyślmy alternatywny schemat kodu stanu dla wydajnego grania w golfa.
Twoje zadanie:
Napisz funkcję (lub program), która podając prawidłową nazwę stanu USA (wymagane tylko 50 stanów normalnych), zwraca unikalny dwuliterowy kod identyfikujący go wielkimi literami. Kod musi spełniać następujące wymagania:
- Pierwsza litera musi być taka sama jak pierwsza litera państwa.
- Druga litera musi być jedną z pozostałych liter państwa (nie może być spacją).
- Zawsze musi dawać to samo wyjście dla tego samego wejścia i nigdy nie może dawać tego samego wyjścia dla dwóch różnych ważnych wejść.
Na przykład, biorąc pod uwagę „Alabama”, twoja funkcja może zwrócić „AL”, „AA”, „AB” lub „AM” - pod warunkiem, że nie zwróci tej wartości dla żadnej z Alaski, Arkansas itp. („AA „jest możliwe tylko dlatego, że„ A ”pojawia się więcej niż jeden raz w nazwie stanu).
Standardowe luki zabronione. Standardowe wejścia / wyjścia są w porządku. To jest kod golfowy, więc wygrywa najkrótsze rozwiązanie w bajtach.
Pełna lista możliwych danych wejściowych znajduje się tutaj:
Alabama
Alaska
Arizona
Arkansas
California
Colorado
Connecticut
Delaware
Florida
Georgia
Hawaii
Idaho
Illinois
Indiana
Iowa
Kansas
Kentucky
Louisiana
Maine
Maryland
Massachusetts
Michigan
Minnesota
Mississippi
Missouri
Montana
Nebraska
Nevada
New Hampshire
New Jersey
New Mexico
New York
North Carolina
North Dakota
Ohio
Oklahoma
Oregon
Pennsylvania
Rhode Island
South Carolina
South Dakota
Tennessee
Texas
Utah
Vermont
Virginia
Washington
West Virginia
Wisconsin
Wyoming
Odpowiedzi:
Galaretka ,
1312 bajtówMonadyczny link pobierający i zwracający listy znaków.
Wypróbuj online! lub zobacz zestaw testowy
W jaki sposób?
Indeksowanie w galarecie jest 1-indeksowane i modułowy, więc 907 th indeks czegoś o długości L jest (907-modulo-L) th poz. Na przykład dla „Alabama” długość wynosi 7, więc pozycja o indeksie 907 to (907-modulo-7) th , a 907-modulo-7 to 4 (907 = 129 * 7 + 4 ), więc pozycja o indeksie 907 to „b”.
907 jest pierwszym dodatnim indeksem, w którym skróty stanu używające indeksu 1 i tego indeksu we wszystkich 50 stanach stają się unikalne.
Nazwy stanów, w tym ich spacje, mają długość od 4 do 14 włącznie, a 907-modulo-6 wynosi 1 (podczas gdy dla wszystkich innych długości wartość nie wynosi 1). Oznacza to, że gdybyśmy użyli 1 i 907. znaków dla skrótów, które Alaska, Hawaje, Kansas, Nevada i Oregon byłyby odpowiednio AA, HH, KK, NN i OO - nie jest to dopuszczalne w przypadku Hawajów, Kansas, lub Nevada; więc należy dokonać korekty; jest to powód połączenia, dublowania, przejścia do indeksu 2 i sortowania, dzięki czemu Alaska, Hawaje, Kansas, Nevada i Oregon stają się odpowiednio AL, HA, KA, NA i OR i nie kolidują z istniejącymi skrótami państwowymi .
źródło
Rubinowy, 34 bajty
Zacząłem od
s[0]+s*99999[x].upcase
i znalazłem wiele wartości od x do x = 100000, które zwróciły unikalne kody dla wszystkich 50 stanów. Niestety wszyscy mieli przypadki, w których druga litera skrótu była pierwszą literą stanu powielonego, co jest niedozwolone (chyba że litera pojawia się dwukrotnie w nazwie stanu). Postanowiłem więc użyć wyrażenias[0]+s[1,8]*999[x]
i znalazłem najmniejszą wartość x, który zadziałał, wynosił 445.Skomentowane w programie testowym i na wyjściu
źródło
The second letter must be one of the other letters of the state.
AA dla Alabamy jest w porządku, ponieważ Alabama ma dwa A. KK jest w porządku dla Kentucky, ale nie na przykład dla Kansas.Python 2 , 39 bajtów
Wypróbuj online!
Python 2 , 39 bajtów
Wypróbuj online!
źródło
JavaScript (ES6), 46 bajtów
Próbny
Pokaż fragment kodu
źródło
Siatkówka ,
4946 bajtówWypróbuj online! Jeśli stan zawiera drugą wielką literę lub jedną z liter
flmpxz
, staje się to drugą literą kodu. W przeciwnym razie, jeśli zawiera jedną z literhru
, staje się drugą literą kodu, w przeciwnym razie wystarczy użyć pierwszych dwóch liter stanu.źródło
JavaScript (ES6), 52 bajty
Pokaż fragment kodu
JavaScript (ES6), 52 bajty
Pokaż fragment kodu
źródło