Zasady
Biorąc pod uwagę kod kraju ISO3166-1-Alpha-2, Twoim zadaniem jest określenie kierunku ruchu w tym kraju:
- Podany zostanie prawidłowy kod kraju (ważny, ponieważ jest to element dwóch podanych list)
- Dane wejściowe mogą być listą dwóch znaków zamiast ciągu, jeśli to pomaga
- Możesz zdecydować się na zapisywanie małymi literami
- Wybierz jedną wartość, powiedz na prawo (twój wybór) i przekaże tę wartość, jeśli ruch w tym kraju jest prawostronny, a wszystko inne w innym przypadku
- Musisz obsługiwać tylko kody krajów zawarte na jednej z tych list:
Są to wszystkie kraje, w których ruch jest leworęczny:
['AI', 'AG', 'AU', 'BS', 'BD', 'BB', 'BM', 'BT', 'BW', 'VG', 'BN', 'KY', 'CX', 'CC', 'CK', 'CY', 'DM', 'FK', 'FJ', 'GD', 'GG', 'GY', 'HK', 'IN', 'ID', 'IE', 'IM', 'JM', 'JP', 'JE', 'KE', 'KI', 'LS', 'MO', 'MW', 'MY', 'MV', 'MT', 'MU', 'MS', 'MZ', 'NA', 'NR', 'NP', 'NZ', 'NU', 'NF', 'PK', 'PG', 'PN', 'SH', 'KN', 'LC', 'VC', 'WS', 'SC', 'SG', 'SB', 'SO', 'ZA', 'GS', 'LK', 'SR', 'SZ', 'TH', 'TL', 'TK', 'TO', 'TT', 'TC', 'TV', 'UG', 'GB', 'TZ', 'VI', 'ZM', 'ZW']
A oto wszystkie kraje, w których ruch jest prawostronny:
['AF', 'AX', 'AL', 'DZ', 'AS', 'AD', 'AO', 'AQ', 'AR', 'AM', 'AW', 'AT', 'AZ', 'BH', 'BY', 'BE', 'BZ', 'BJ', 'BO', 'BA', 'BV', 'BR', 'IO', 'BG', 'BF', 'BI', 'CV', 'KH', 'CM', 'CA', 'CF', 'TD', 'CL', 'CN', 'CO', 'KM', 'CG', 'CR', 'CI', 'HR', 'CU', 'CW', 'CZ', 'KP', 'CD', 'DK', 'DJ', 'DO', 'EC', 'EG', 'SV', 'GQ', 'ER', 'EE', 'ET', 'FO', 'FI', 'FR', 'GF', 'PF', 'TF', 'GA', 'GM', 'GE', 'DE', 'GH', 'GI', 'GR', 'GL', 'GP', 'GU', 'GT', 'GW', 'GN', 'HT', 'HM', 'VA', 'HN', 'HU', 'IS', 'IR', 'IQ', 'IL', 'IT', 'JO', 'KZ', 'KW', 'KG', 'LA', 'LV', 'LB', 'LR', 'LY', 'LI', 'LT', 'LU', 'MG', 'ML', 'MH', 'MQ', 'MR', 'YT', 'MX', 'FM', 'MC', 'MN', 'ME', 'MA', 'MM', 'NL', 'NC', 'NI', 'NG', 'NE', 'MP', 'NO', 'OM', 'PW', 'PA', 'PY', 'PE', 'PH', 'PL', 'PT', 'PR', 'QA', 'KR', 'MD', 'RE', 'RO', 'RU', 'RW', 'BL', 'MF', 'PM', 'SM', 'ST', 'SA', 'SN', 'RS', 'SL', 'BQ', 'SX', 'SK', 'SI', 'SS', 'ES', 'PS', 'SD', 'SJ', 'SE', 'CH', 'SY', 'TW', 'TJ', 'MK', 'TG', 'TN', 'TR', 'TM', 'UA', 'AE', 'UM', 'US', 'UY', 'UZ', 'VU', 'VE', 'VN', 'WF', 'EH', 'YE']
Dla zachowania kompletności, oto plik CSV, który zawiera wszystkie wartości wraz z nazwami krajów.
Przypadki testowe
Zakładając, że wybrałeś wyjście L
dla ruchu leworęcznego, oto kilka ważnych przypadków testowych:
'PY' -> 'python'
'PN' -> 'L'
'CN' -> 33
'GY' -> 'L'
Uwaga: istnieje niewielka szansa, że spóźniłem się na jakiś kraj lub że istnieje niewłaściwa klasyfikacja i nie zmienię specyfikacji, ponieważ może to unieważnić odpowiedzi. Jeśli popełniłem błąd, szczerze przepraszam, proszę się nie obrażać!
CountryData
może podać liczbę utwardzonych i nieutwardzonych dróg i linii kolejowych itp. W danym kraju, ale nieOdpowiedzi:
Python 2 ,
145136112109 bajtówWypróbuj online!
Wyjścia
-1
dla ruchu praworęcznego.Ciąg jest generowany automatycznie za pomocą tego skryptu Retina .Dzięki całkowicie ludzki za 9 bajtów krótszy ciąg wyszukiwania. Byłem w stanie uzyskać 24 bajty więcej dzięki sugestii AdmBorkBork .Skrócony ciąg znaków został skrócony o 3 bajty za pomocą skryptu python.
źródło
OT
nie istnieją, czy możesz pozbyć się niektórych miejsc, takich jakTO TC
idzie doTOTC
?Galaretka , 61 bajtów
Ogromne podziękowania dla @ Mr.Xcodera za pomoc w zebraniu tego Zapisałem
1 bajt dzięki @JonathanAllan
Zwraca
0
dla osób praworęcznych lub1
leworęcznych.Wypróbuj online!
W jaki sposób?
Konwertujemy każdy kod kraju na liczbę całkowitą N , analizując go jako base-256 i stosujemy następującą funkcję skrótu, która jest wolna od kolizji dla ruchu leworęcznego i praworęcznego:
Prowadzi to do następującej listy wartości dla ruchu leworęcznego:
Średnia różnica między dwoma kolejnymi wpisami jest bliska 8. Kodujemy listę w delcie z przyrostami w zakresie [1 ... 16]. Oznacza to, że ilekroć przyrost jest większy niż 16, musimy wstawić wartość pośrednią do nieużywanego slotu (musimy upewnić się, że nie zostanie uderzony przez ruch praworęczny). Ale funkcja skrótu została wybrana w taki sposób, że musimy to zrobić tylko dla kilku pozycji. To daje:
Konwertujemy tę listę z bijective base-16 na następującą liczbę całkowitą:
która staje się
“ŒỴ¬Ʋ>r¤dị|®ædHẇ⁸ɗH^CŒ³ẇPḷgȤƲȥƓƑ®Ƭṅḅ4ṛḟṄ’
kodowana przez galaretkę base-250.Pierwsze łącze odbudowuje oryginalną listę z tej liczby całkowitej, a drugie sprawdza, czy zawiera skrót danych wejściowych.
źródło
“ŒỴ¬Ʋ>r¤dị|®ædHẇ⁸ɗH^CŒ³ẇPḷgȤƲȥƓƑ®Ƭṅḅ4ṛḟṄ’ḃ⁴
(unikając w ten sposób przyrostu) ... także (nie zapisywanie bajtów, ale)¢
wywołuje ostatni link jako nilad.PowerShell ,
161148 bajtówWypróbuj online!
Naiwnedopasowanie wzorca wyrażenia regularnego. WyjściaTrue
dla osób leworęcznych iFalse
praworęcznych.Zaoszczędzono 13 bajtów dzięki mercatorowi grającemu w regex.
źródło
[CFHW][CJKSXY]
(-5), I i J do[IJ][DEMNP]
(-3), skrócić N doN[AFP-Z]
(-1) i Z doZ.
(-4), w sumie -13 bajtów. Nowe wyrażenie regularne =A[GIU]|B[BDMNSTW]|[CFHW][CJKSXY]|DM|G[BDGSY]|[IJ][DEMNP]|K[EINY]|L[CKS]|M[OS-WYZ]|N[AFP-Z]|P[GKN]|S[BCGHORZ]|T[CHKLOTVZ]|UG|V[CGI]|Z.
Haskell , 137 bajtów
-5 bajtów dzięki ovs.
Wypróbuj online!
Ręcznie wygenerowano oryginalny ciąg.
źródło
TTHSZWMSGSONPKNZMWVIDFKELSCYJPNFJMTVCXBNRBWSHKYAUGGYBTLCCKIMVGBSBBMZAINAGDMOBDIEJEMYMUNUPGSRLKTKTOTCTZ
SZAINAGGDMOAUGBBSCCKIMWSHKYLSBMVGSGYBDBTHBWBNRMZMTLCXSRTVCYPNFKNPKEFJMYVIDIEJPGJEMUNZWMSONULKTKTOTTCTZ
- Wypróbuj online!05AB1E ,
8268 bajtówWyjścia 1 dla ruchu lewostronnego i 0 dla ruchu prawostronnego.
Wypróbuj online! lub jako pakiet testowy
Wykorzystuje ciąg wygenerowany przez całkowicie ludzki i ulepszony przez ovs
źródło
05AB1E , 76 bajtów
Wypróbuj online!
Wysyła następujący ciąg:
Jeśli podzielę to na spacje i przeplatam alfabet na każdy ciąg, spowoduje to powstanie wszystkich stanów, które prowadzą po lewej stronie.
1 dla lewej, 0 dla prawej; Emigna's jest lepsza, ale wydawało się, że jest wystarczająco inna, aby opublikować :).
źródło
Galaretka , 69 bajtów
Monadyczny link pobierający listę znaków i zwracający się,
1
jeśli jest lewy (0
jeśli prawy).Wypróbuj online!
W jaki sposób?
Wykorzystuje metodę w pełni zaimplementowaną przez człowieka / ows .
Ponadto to, co zrobiłem niezależnie, przyszło z 72 bajtami :
Również monadyczny link, który pobiera listę znaków i zwraca,
1
jeśli jest lewy (0
jeśli prawy).Wypróbuj online!
W jaki sposób?
źródło
Befunge,
155152147146 bajtówWypróbuj online!
Wyniki
80
dla kraju praworęcznego, a wszystko inne wskazuje na kraj leworęczny.Wyjaśnienie
Dolna linia kodu zawiera reprezentację wszystkich krajów leworęcznych. To jest lista pierwszych znaków kodów krajów, pogrupowanych według drugiego znaku. Koniec każdej grupy jest oznaczony przez opuszczenie dolnej litery ostatniego znaku w grupie.
Na przykład pierwsza grupa
Nz
,, reprezentujeNA
iZA
. Druga grupaBSg
, oznaczaBB
,SB
iGB
. Istnieje jedna grupa na każdą literę w alfabecie, z wyjątkiem literyQ
(bez kodów krajów po lewej stronieQ
). Ta pusta grupa jest reprezentowana przez znak{
, ponieważ oczywiście nie pasuje do żadnego poprawnego kodu kraju.Aby ustalić, czy dany kod kraju pasuje do jednego z tych wpisów, iterujemy listę, sprawdzając, czy którykolwiek ze znaków na liście odpowiada pierwszemu znakowi naszego wpisu (mod 32, aby uwzględnić przypadek), a także, czy odpowiadająca mu grupa , dopasowuje drugi znak wejścia. Znak grupy zaczyna się od
A
i jest zwiększany za każdym razem, gdy napotykamy małą literę na liście.Wychodzimy, gdy znajdziemy dopasowanie, wypisując ostatnią wartość znaku na stosie (który będzie pierwszym znakiem kodu kraju - być może małymi literami). W przeciwnym razie wyjdziemy, gdy przejdziemy przez całą listę, w którym to przypadku wypiszemy ostatnią liczbę na stosie, która zawsze wynosi 80.
źródło
Pakiet Windows,
289279199193181130118 bajtówZwraca ciąg znaków ovs dla ruchu lewostronnego, w przeciwnym razie nic nie wyprowadza.
Uwaga: Zauważyłem, że jeśli dane wejściowe zawierają kod kraju z powyższej listy, nadal będą generować L. Jednak nie narusza to reguły wyzwania, ponieważ OP wspomniał, że należy traktować tylko kody krajów.
Wyjaśnienie:
źródło
C (gcc) ,
181169165 bajtówWypróbuj online!
źródło
82
zapisać bajt?9
, na przykład wypisuje znak tabulacji.Python 2 , 144 bajty
Wypróbuj online!
Drukuje
True
dla lewej,False
dla prawej.źródło
Retina ,
150117 bajtówWypróbuj online!
źródło
Excel VBA, 118 bajtów
Anonimowa funkcja bezpośredniego okna VBE, która pobiera dane wejściowe z komórki
[A1]
i dane wyjściowe,0
jeśli kraj jest po prawej stronieużywa ciągu ovs
źródło
Japt,
12610097 bajtówUżywa ciągu odnośników
totalnieludzkich . Pobiera dane wprowadzane małymi literami i dane wyjściowefalse
dla RHD lub wtrue
inny sposób.Spróbuj
Wszystko pomiędzy backticks jest łańcuch odnośnika małe litery i kompresowane i
ø
sprawdza, czy zawiera on wejście,U
.źródło
Pyth ,
60575550474644 bajtówUruchom online
Pobiera dane wejściowe jako ciąg znaków (
'AI'
). Zwraca3
dla lewej i nie3
dla prawej.Jak to działa
Generowanie magicznego ciągu
źródło
sed,
148 + 1145 + 1143 + 1142 + 1 bajtówJeden dodatkowy bajt dla
-r
flagi (rozszerzone wyrażenia regularne POSIX).Zwraca pusty ciąg dla ruchu leworęcznego, oryginalny kod kraju dla ruchu prawostronnego.
Przykład:
Wyjaśniona historia edycji:
sed,
158 + 1155 + 1153 + 1152 + 1 bajtów, niepusta odpowiedźNiewielka odmiana poprzedniego. Zwraca
L
za ruch leworęczny.źródło
J[^O]
zamiastJ[EMP]
?[^L]B|[^EMN]C|GD|[I-K]E|[AGPSUV]G|[AKV]I|FJ|[^DMS]K|TL|JM|[KP]N|JP|SR|[BGLW]S|[BT]T|AU|TV|CX|[CGK]Y|M[OS-WYZ]|N[AFP-Z]|[BI][DMNW]|[ST][HOZ]|Z.
J[^O]
tak naprawdę był kiedyś na mojej liście mniejszych wyrażeń regularnych, zastanawiam się, jak mi tego brakowało. Dzięki za zwrócenie na to uwagi! Jeśli chodzi o grupowanie według drugiej litery: oprócz grupowania według K możesz po prostu użyć|[AGPSUV]G
lub,|[BGLW]S
ale nie zmieni to wcale wyniku.APL (Dyalog) , 108 bajtów
Wypróbuj online!
Korzystanie z ciągu wyszukiwania przez ovs.
Ruch lewostronny =
1
.Ruch praworęczny =
0
.źródło
JavaScript (ES6),
118116 bajtówZaoszczędzono 2 bajty dzięki @Craig Ayre
Zwraca
null
za ruch praworęcznyPrzypadki testowe
Pokaż fragment kodu
źródło
String.prototype.match()
i mieć ruch praworęczny oznaczony przeznull
? Zaoszczędziłby 2 bajtyVim,
117109108 naciśnięć klawiszyWypróbuj online! (zastąp
SE
w nagłówku kod kraju)␛
jest klawiszem Escape. Program drukuje następujący tekst dla ruchu praworęcznego:Wyjaśnienie
źródło
MY-BASIC , 162 bajty
Funkcja anonimowa, która pobiera dane wejściowe jako nieopakowany ciąg (tzn. Bez nawiasów) i wysyła dane do konsoli
Zwroty
0
dla1
ruchu prawo- i leworęcznego, wypróbuj online!źródło
Yabasic , 127 bajtów
Anonimowa funkcja, która pobiera dane wejściowe jako nieopakowany ciąg znaków (nie
"..."
) i wyświetla dane wyjściowe,0
jeśli kraj jest praworęczny, a1
kraj - leworęczny.Wypróbuj online!
źródło
C (gcc) ,
115107 bajtówWypróbuj online!
Zwraca,
0
jeśli leworęczny. -4 dzięki @JonathanFrechźródło
short*
jako parametru?K, 105 bajtów
Aby uzyskać informacje o językach K / Q, zobacz code.kx.com
Użyj: kod kraju (2-znakowy ciąg, przykład „XY”) po
Generuje
1b
(ruch lewostronny) lub0b
(ruch lewostronny)Wyjaśnienie:
5h$"XX"
generuje kody ascii dla każdego znaku ciągu 2-znakowego (kod kraju), Przykład5h$"TB"
generuje 84 66-65+integerList
odejmij 65 od każdej liczby całkowitej na liście. Przykład-65+5h$"TB"
generuje 19 126/:integerList
oblicza liczbę całkowitą równoważną tej liście jako cyfry 26-zasadowe. Przykład26/:-65+5h$"TB"
generuje 495 (kod kraju jako liczba całkowita)in[;listOfCountryCodesAsIntegers]@x
zwraca wartość logiczną (1b = prawda, 0b = fałsz). Prawda, jeśli x jest na liście+\-48+5h$"62<729151368=1>a1A23<6<C181A83?45;488F411112115:235Q43r141738353135247F42Tl<:"
oblicza listę liczb całkowitych dla każdego kodu kraju z ruchem leworęcznym"62<729151368=1>a1A23<6<C181A83?45;488F411112115:235Q43r141738353135247F42Tl<:"
to „ciąg odległości” (odległość między każdą parą kodów liczb całkowitych kraju w porządku rosnącym, skodyfikowana jako char). Odległość n jest skodyfikowana jako ascii char 48 + n-48+5h$".."
oblicza wartość ascii każdego znaku w ciągu „..” i odzyskuje pierwotną odległość jako kod ascii - 48. Wynikiem jest lista odległości+\integerList
oblicza częściowe sumowanie pozycji z listy -> bezwzględne kody krajów całkowitych z odległości między kodami.UWAGI. -
0b
dowolny kod kraju leworęcznego, w tym nieprawidłowe kody krajuin[26/:-65+5h$"XX";+\-48+5h$"..."]
źródło