Kierunek ruchu

25

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 Ldla 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ć!

ბიმო
źródło
1
Czy nic nie można wysyłać, jeśli kod kraju nie pasuje?
stevefestl
3
@ SteveFest: Powiedziałbym, że liczy się to jak wszystko inne , tak.
ბიმო
czy mogę wypisać „lewy” dla lewej i cokolwiek innego we właściwej?
l4m2
7
Przybyłem tutaj, oczekując 10-bajtowego rozwiązania Mathematica, które zostało w jakiś sposób wbudowane. Jestem bardzo rozczarowany.
Silvio Mayolo,
3
@SilvioMayolo CountryDatamoże podać liczbę utwardzonych i nieutwardzonych dróg i linii kolejowych itp. W danym kraju, ale nie
określa

Odpowiedzi:

13

Python 2 , 145 136 112 109 bajtów

'TTHSZWMSGSONPKNZMWVIDFKELSCYJPNFJMTVCXBNRBWSHKYAUGGYBTLCCKIMVGBSBBMZAINAGDMOBDIEJEMYMUNUPGSRLKTKTOTCTZ'.find

Wypróbuj online!

Wyjścia -1dla 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.

ovs
źródło
4
Ponieważ rzeczy takie OTnie istnieją, czy możesz pozbyć się niektórych miejsc, takich jak TO TCidzie do TOTC?
AdmBorkBork
1
@AdmBorkBork wielkie dzięki, mam wszystkie wolne miejsca.
ovs
Czy potrafisz w ogóle wyjaśnić ciąg?
Gigaflop,
12

Galaretka , 61 bajtów

Ogromne podziękowania dla @ Mr.Xcodera za pomoc w zebraniu tego Zapisałem
1 bajt dzięki @JonathanAllan

Zwraca 0dla osób praworęcznych lub 1leworęcznych.

“ŒỴ¬Ʋ>r¤dị|®ædHẇ⁸ɗH^CŒ³ẇPḷgȤƲȥƓƑ®Ƭṅḅ4ṛḟṄ’ḃ⁴+\
Oḅ⁹×6%⁽£€%566e¢

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:

((N * 6) MOD 1513) MOD 566

Prowadzi to do następującej listy wartości dla ruchu leworęcznego:

[   8,  14,  27,  37,  52,  60,  62,  68,  71,  84,  85,  88, 103, 105, 114, 119, 135,
  166, 167, 180, 187, 190, 195, 196, 202, 207, 208, 211, 214, 225, 226, 229, 232, 255,
  256, 262, 285, 301, 302, 303, 304, 309, 322, 325, 327, 337, 357, 369, 370, 381, 393,
  401, 408, 413, 420, 430, 453, 467, 473, 478, 492, 503, 509, 513, 516, 527, 528, 541,
  546, 547, 556, 562 ] (72 entries)

Ś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:

[  8,  6, 13, 10, 15,  8,  2,  6,  3, 13,  1,  3, 15,  2,  9,  5, 16, 15, 16,  1, 13,
   7,  3,  5,  1,  6,  5,  1,  3,  3, 11,  1,  3,  3, 16,  7,  1,  6, 16,  7, 16,  1,
   1,  1,  5, 13,  3,  2, 10, 16,  4, 12,  1, 11, 12,  8,  7,  5,  7, 10, 16,  7, 14,
   6,  5, 14, 11,  6,  4,  3, 11,  1, 13,  5,  1,  9,  6 ] (77 entries)

Konwertujemy tę listę z bijective base-16 na następującą liczbę całkowitą:

274705197430389746738026977757328941544772847257562272094076195694133371689429679543810871702

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ị|®ædHẇ⁸ɗH^CŒ³ẇPḷgȤƲȥƓƑ®Ƭṅḅ4ṛḟṄ’ḃ⁴+\      - 1st link: takes no input
“ŒỴ¬Ʋ>r¤dị|®ædHẇ⁸ɗH^CŒ³ẇPḷgȤƲȥƓƑ®Ƭṅḅ4ṛḟṄ’          - our big integer
                                         ḃ⁴        - convert it to bijective base-16
                                           +\      - apply delta-decoding

Oḅ⁹×6%⁽£€%566e¢                  - 2nd link: takes the country code  -> e.g. 'GB'
O                                - get ASCII codes                   -> [71, 66]
 ḅ⁹                              - convert from base-256 to integer  -> 18242
   ×6                            - multiply by 6                     -> 109452
     %⁽£€                        - modulo 1513                       -> 516
         %566                    - modulo 566                        -> 516
             e                   - look for it in the decoded list,
              ¢                  - using the first link as a nilad   -> 1
Arnauld
źródło
Zapisz bajt, konwertując z liczby całkowitej na bazę bijectywną 16: “ŒỴ¬Ʋ>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.
Jonathan Allan
@JonathanAllan Nice! Dziękuję Ci.
Arnauld
11

PowerShell , 161 148 bajtów

"$args"-match'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.'

Wypróbuj online!

Naiwne dopasowanie wzorca wyrażenia regularnego. Wyjścia Truedla osób leworęcznych i Falsepraworęcznych.

Zaoszczędzono 13 bajtów dzięki mercatorowi grającemu w regex.

AdmBorkBork
źródło
2
Możesz połączyć alternatywy dla pierwszych liter C, F, H i W do [CFHW][CJKSXY](-5), I i J do [IJ][DEMNP](-3), skrócić N do N[AFP-Z](-1) i Z do Z.(-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.
mercator
@mercator Dzięki za regex golfa!
AdmBorkBork
9

Haskell , 137 bajtów

-5 bajtów dzięki ovs.

import Data.List
(`isInfixOf`"MSOBTVGBSBBMZAINAGDMOAUGGYBDBWSHKYBNRJPNFJMVCKIMTLCCXLSCYFKEVIDIEJELSGSOLKNZMWMYMUPKNPGSRNUTKTOTCTZSZWTTH")

Wypróbuj online!

Ręcznie wygenerowano oryginalny ciąg.

całkowicie ludzki
źródło
got ciąg odnośnika 3 bajty krótsze znowu:TTHSZWMSGSONPKNZMWVIDFKELSCYJPNFJMTVCXBNRBWSHKYAUGGYBTLCCKIMVGBSBBMZAINAGDMOBDIEJEMYMUNUPGSRLKTKTOTCTZ
OVS
Inna alternatywa -3: SZAINAGGDMOAUGBBSCCKIMWSHKYLSBMVGSGYBDBTHBWBNRMZMTLCXSRTVCYPNFKNPKEFJMYVIDIEJPGJEMUNZWMSONULKTKTOTTCTZ- Wypróbuj online!
Pan Xcoder,
8

05AB1E , 82 68 bajtów

Wyjścia 1 dla ruchu lewostronnego i 0 dla ruchu prawostronnego.

.•6uγ)₅₄вwÔívtÎĆ–≠5βI·{!ÅÇΔ›íÕ(1.€ò“Ѧ_£äß₂Ë‹ûÚм2±rrÇQ=ÅÔζ)B†š¢¡ε•så

Wypróbuj online! lub jako pakiet testowy

Wykorzystuje ciąg wygenerowany przez całkowicie ludzki i ulepszony przez ovs

Emigna
źródło
6

05AB1E , 76 bajtów

.•B6L>õKвΩ~#ëΓnĀÿι–öß/çĸ’Û´äηÅÚ‚zĨe÷ö#YʒƒʒjªêKΩoúö‰Öe¡₄Æ∞¤iY¥•#vySANèì})åZ

Wypróbuj online!


.•B6L>õKвΩ~#ëΓnĀÿι–öß/çĸ’Û´äηÅÚ‚zĨe÷ö#YʒƒʒjªêKΩoúö‰Öe¡₄Æ∞¤iY¥•

Wysyła następujący ciąg:

GIU BDMNSTW CKXY M  JK BDGSY K DEMN EMP EINY CKS OSTUVWYZA FPRUZ  GKN   BCGHORZ CHKLOTVZ G CGI S   AMW

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ć :).

Urna Magicznej Ośmiornicy
źródło
6

Galaretka , 69 bajtów

ẇ“h¦¤$>Xø3¬I_°Ḷd⁺+ç*p¢7"FU]#x⁹ĿAxḷŻbCȦ]$ḣẒẓST¬ȥ¬ṆṠ®æ÷©#ḄS#MĠỤ4ɱ5’ṃØA¤

Monadyczny link pobierający listę znaków i zwracający się, 1jeśli jest lewy ( 0jeśli prawy).

Wypróbuj online!

W jaki sposób?

Wykorzystuje metodę w pełni zaimplementowaną przez człowieka / ows .

ẇ“ ... ’ṃØA¤ - Link: list of characters
           ¤ - nilad followed by link(s) as a nilad:
 “ ... ’     -   base 250 number = 19752831477605543488091668410027486265612829758468833715947215534967455540194888181580207621675010690833131726534873382634884974263558670694315853304
         ØA  -   list of characters = "ABCDEFGHIJKLMNPQRSUVWXZ"
        ṃ    -   base decompress = "MSOBTVGBSBBNZAINAGDMOAUGGYBDBWSHKYBNRJPNFJMVCKIMTLCCXLSCYFKEVIDIEJELSGSOLKOZMWMYMUPKNPGSRNUTKTOTCUZTZWTTH"
ẇ            - is a sublist of?

Ponadto to, co zrobiłem niezależnie, przyszło z 72 bajtami :

“¦w/ḳœBẒḂṡẏ,©ḷĿdẎq⁸4ṙ^|ṂỌʋ:vkɱF#ẊṠµd¤w,ḋhn|ȯ24ɦm|×ỵ’ṃ©ØAO0;I<0œṗ®ṭ€"ØAẎċ

Również monadyczny link, który pobiera listę znaków i zwraca, 1jeśli jest lewy ( 0jeśli prawy).

Wypróbuj online!

W jaki sposób?

“ ... ’ṃ©ØAO0;I<0œṗ®ṭ€"ØAẎċ - Link: list of characters
“ ... ’                     - base 250 number = 20449742094039418439524274048234013619715377161457577389098927787850535557806494274193349238496252074719534810320317229
         ØA                 - list of characters = "ABCDEFGHIJKLMNPQRSUVWXZ"
       ṃ                    - base decompress = "GIUBDMNSTWCKXYMKJKBDGSYKDEMNEMPEINYCKSOSTUVXZZAFPRVZHGKNDCBCGHOSZCHKLOTWZGCGIASCBAMW"
        ©                   - copy to register
           O                - cast to ordinals = [71,73,85,66,68,77,78,83,84,87,67,75,88,89,77,75,74,75,66,68,71,83,89,75,68,69,77,78,69,77,80,69,73,78,89,67,75,83,79,83,84,85,86,88,90,90,65,70,80,82,86,90,72,71,75,78,68,67,66,67,71,72,79,83,90,67,72,75,76,79,84,87,90,71,67,71,73,65,83,67,66,65,77,87]
            0               - literal zero
             ;              - concatenate = [0,71,73,85,66,68,77,78,83,84,87,67,75,88,89,77,75,74,75,66,68,71,83,89,75,68,69,77,78,69,77,80,69,73,78,89,67,75,83,79,83,84,85,86,88,90,90,65,70,80,82,86,90,72,71,75,78,68,67,66,67,71,72,79,83,90,67,72,75,76,79,84,87,90,71,67,71,73,65,83,67,66,65,77,87]
              I             - incremental differences = [71,2,12,-19,2,9,1,5,1,3,-20,8,13,1,-12,-2,-1,1,-9,2,3,12,6,-14,-7,1,8,1,-9,8,3,-11,4,5,11,-22,8,8,-4,4,1,1,1,2,2,0,-25,5,10,2,4,4,-18,-1,4,3,-10,-1,-1,1,4,1,7,4,7,-23,5,3,1,3,5,3,3,-19,-4,4,2,-8,18,-16,-1,-1,12,10]
                0           - literal zero
               <            - less than (vectorises) = [0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,1,0,0]
                   ®        - recall from register = "GIUBDMNSTWCKXYMKJKBDGSYKDEMNEMPEINYCKSOSTUVXZZAFPRVZHGKNDCBCGHOSZCHKLOTWZGCGIASCBAMW"
                 œṗ         - partition at truthy indexes = ["GIU","BDMNSTW","CKXY","M","K","JK","BDGSY","K","DEMN","EMP","EINY","CKS","OSTUVXZZ","AFPRVZ","H","GKN","D","C","BCGHOSZ","CHKLOTWZ","G","CGI","AS","C","B","AMW"]
                       ØA   - list of characters = "ABCDEFGHIJKLMNPQRSUVWXZ"
                      "     - zip with:
                    ṭ€      -   tack for €ach = [["AG","AI","AU"],["BB","BD","BM","BN","BS","BT","BW"],["CC","CK","CX","CY"],["DM"],["EK"],["FJ","FK"],["GB","GD","GG","GS","GY"],["HK"],["ID","IE","IM","IN"],["JE","JM","JP"],["KE","KI","KN","KY"],["LC","LK","LS"],["MO","MS","MT","MU","MV","MX","MZ","MZ"],["NA","NF","NP","NR","NV","NZ"],["OH"],["PG","PK","PN"],["QD"],["RC"],["SB","SC","SG","SH","SO","SS","SZ"],["TC","TH","TK","TL","TO","TT","TW","TZ"],["UG"],["VC","VG","VI"],["WA","WS"],["XC"],["YB"],["ZA","ZM","ZW"]]
                         Ẏ  - tighten = ["AG","AI","AU","BB","BD","BM","BN","BS","BT","BW","CC","CK","CX","CY","DM","EK","FJ","FK","GB","GD","GG","GS","GY","HK","ID","IE","IM","IN","JE","JM","JP","KE","KI","KN","KY","LC","LK","LS","MO","MS","MT","MU","MV","MX","MZ","MZ","NA","NF","NP","NR","NV","NZ","OH","PG","PK","PN","QD","RC","SB","SC","SG","SH","SO","SS","SZ","TC","TH","TK","TL","TO","TT","TW","TZ","UG","VC","VG","VI","WA","WS","XC","YB","ZA","ZM","ZW"]
                            - ...this is the left list plus EK, OH, QC, RC, WA, XC, and YB
                            -    (which are not in the right list)
                          ċ - count
Jonathan Allan
źródło
6

Befunge, 155 152 147 146 bajtów

~48*%10p~20pv
\"`"`"A"+61p>:2g:48*%10g-!20g61g-!#@*#,_\1+:"O"#@`#._
NzBSgCLVStBGiIJknAVGPSuStAKvfCFHPLttBDIJzBIPkMStJn{NsBLMWgBMtAMnMtBMzcKCGmMNSt

Wypróbuj online!

Wyniki 80dla 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,, reprezentuje NAi ZA. Druga grupa BSg, oznacza BB, SBi GB. Istnieje jedna grupa na każdą literę w alfabecie, z wyjątkiem litery Q(bez kodów krajów po lewej stronie Q). 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 Ai 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.

James Holderness
źródło
6

Pakiet Windows, 289 279 199 193 181 130 118 bajtów

@echo TTHSZWMSGSONPKNZMWVIDFKELSCYJPNFJMTVCXBNRBWSHKYAUGGYBTLCCKIMVGBSBBMZAINAGDMOBDIEJEMYMUNUPGSRLKTKTOTCTZ|find "%1"

Zwraca 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:

@echo TTHSZ...OTCTZ            :: List all country code.(compressed by ovs)
                   |           :: Pipe the result to the find command.

                    find "%1"  :: Find the first argument in the country code list,
                               :: and output the ovs string if found.

                               :: By default, FIND returns the piped string when
                               :: a match is found.
stevefestl
źródło
5

C (gcc) , 181 169 165 bajtów

f(x){x=strstr("AIAUBSBDBBMBTBWVGBNKYCXCCKCYDMFKFJGDGGYHKINIDIEIMJMJPJEKELSMOMWMYMVMTMUMZNANRNPNZNUNFPKPGPNSHKNLCVCWSSCSGSOZAGSLKSRSZTHTLTKTOTTCTVUGTZVIZMZW",x)?:82;}

Wypróbuj online!

cleblanc
źródło
2
Czy możesz użyć pojedynczej cyfry zamiast 82zapisać bajt? 9, na przykład wypisuje znak tabulacji.
Shaggy
5

Python 2 , 144 bajty

lambda l:l[1]in'GIU,BDMNSTW,CKXY,M,,JK,BDGSY,K,DEMN,EMP,EINY,CKS,OSTUVWYZ,AFPRUZ,,GKN,,,BCGHORZ,CHKLOTVZ,G,CGI,S,,,AMW'.split(',')[ord(l[0])-65]

Wypróbuj online!

Drukuje Truedla lewej, Falsedla prawej.

FlipTack
źródło
5

Retina , 150 117 bajtów

$
MSOBTVGBSBBMZAINAGDMOAUGGYBDBWSHKYBNRJPNFJMVCKIMTLCCXLSCYFKEVIDIEJELSGSOLKNZMWMYMUPKNPGSRNUTKTOTCTZSZWTTH
^(..).*\1

Wypróbuj online!

ovs
źródło
5

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, 0jeśli kraj jest po prawej stronie

?InStr(1,"TTHSZWMSGSONPKNZMWVIDFKELSCYJPNFJMTVCXBNRBWSHKYAUGGYBTLCCKIMVGBSBBMZAINAGDMOBDIEJEMYMUNUPGSRLKTKTOTCTZ",[A1])

używa ciągu ovs

Taylor Scott
źródło
4

Japt, 126 100 97 bajtów

Używa ciągu odnośników totalnie ludzkich . Pobiera dane wprowadzane małymi literami i dane wyjściowe falsedla RHD lub w trueinny sposób.

`tszwmsgspknzmwvidfkelscyjpnfjmtvcxbnrbw¢kyauggybtlc×Svgbsbbmzaagd¶b¹ejemymunupgsrlktktctz`øU

Spróbuj

Wszystko pomiędzy backticks jest łańcuch odnośnika małe litery i kompresowane i øsprawdza, czy zawiera on wejście, U.

Kudłaty
źródło
2
struna ovsa jest teraz znacznie krótsza :-)
ETHproductions
3

Pyth , 60 57 55 50 47 46 44 bajtów

00000000: 736d 406a 4322 579f 235e 804c c3eb 6f49  sm@jC"W.#^.L..oI
00000010: aee5 1f3d be3d 4e13 f326 1934 a181 a210  ...=.=N..&.4....
00000020: 7158 3f94 2232 2f43 5164 5336            qX?."2/CQdS6

Uruchom online

Pobiera dane wejściowe jako ciąg znaków ( 'AI'). Zwraca 3dla lewej i nie 3dla prawej.

Jak to działa

sm@jC"…"2/CQdS6
 m           S6   map for d in [1, …, 6]:
     "…"            string literal
    C               convert to integer from base 256
   j    2           digits in base 2
  @                 wrapping index at:
           Q          input string
          C           convert to integer from base 256
         /  d         integer division by d
s                 sum

Generowanie magicznego ciągu

import binascii
import z3
n, k, c = 239, 6, 3
a = [z3.Bool('a{}'.format(i)) for i in range(n)]
def f(s0, s1):
    return z3.Sum([z3.If(a[(ord(s0) * 256 + ord(s1)) // j % n], 1, 0) for j in range(1, k + 1)]) == c
solver = z3.Solver()
solver.add(a[0])
for s0, s1 in ['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']:
    solver.add(f(s0, s1))
for s0, s1 in ['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']:
    solver.add(z3.Not(f(s0, s1)))
res = solver.check()
print(res)
if res == z3.sat:
    m = solver.model()
    print('n={} k={} c={} a={!r}'.format(n, k, c, binascii.unhexlify('{:0{}x}'.format(
        int(''.join('01'[z3.is_true(m[x])] for x in a), 2), n // 8 * 2))))
Anders Kaseorg
źródło
3

sed, 148 + 1 145 + 1 143 + 1 142 + 1 bajtów

Jeden dodatkowy bajt dla -r flagi (rozszerzone wyrażenia regularne POSIX).

Zwraca pusty ciąg dla ruchu leworęcznego, oryginalny kod kraju dla ruchu prawostronnego.

s/A[GIU]|B[BDMNSTW]|C[CXY]|DM|FJ|G[BDGSY]|I[DEMN]|J[^O]|K[EINY]|L[CS]|M[OS-WYZ]|N[AFP-Z]|P[GN]|S[BCGHORZ]|T[CHLOTVZ]|UG|V[CGI]|WS|Z.|[^DMS]K//

Przykład:

$ echo -e 'PY\nPN\nCN\nGY' | sed -re 's/A[GIU]|B[BDMNSTW]|C[CXY]|DM|FJ|G[BDGSY]|I[DEMN]|J[^O]|K[EINY]|L[CS]|M[OS-WYZ]|N[AFP-Z]|P[GN]|S[BCGHORZ]|T[CHLOTVZ]|UG|V[CGI]|WS|Z.|[^DMS]K//'
PY

CN

$

Wyjaśniona historia edycji:

148 s/A[GIU]|B[BDMNSTW]|C[CKXY]|DM|F[JK]|G[BDGSY]|HK|I[DEMN]|J[EMP]|K[EINY]|L[CKS]|M[OSTUVWYZ]|N[AFPRUZ]|P[GKN]|S[BCGHORZ]|T[CHKLOTVZ]|UG|V[CGI]|WS|Z.//
    naïve regexp; the only optimization here is 'Z.'
145 s/A[GIU]|B[BDMNSTW]|C[CKXY]|DM|F[JK]|G[BDGSY]|HK|I[DEMN]|J[EMP]|K[EINY]|L[CKS]|M[OS-WYZ]|N[AFP-Z]|P[GKN]|S[BCGHORZ]|T[CHKLOTVZ]|UG|V[CGI]|WS|Z.//
    M[OSTUVWYZ] → M[OS-WYZ]
    N[AFPRUZ] → N[AFP-Z]
    the replacements can match inexistent coutries, which is totally fine
143 s/A[GIU]|B[BDMNSTW]|C[CXY]|DM|FJ|G[BDGSY]|I[DEMN]|J[EMP]|K[EINY]|L[CS]|M[OS-WYZ]|N[AFP-Z]|P[GN]|S[BCGHORZ]|T[CHLOTVZ]|UG|V[CGI]|WS|Z.|[^DMS]K//
    |[^DMS]K (which also matches impossible country codes) allows these changes:
    C[CKXY] → C[CXY]
    F[JK] → FJ
    |HK → ∅
    L[CKS] → L[CS]
    P[GKN] → P[GN]
    T[CHKLOTVZ] → T[CHLOTVZ]
142 s/A[GIU]|B[BDMNSTW]|C[CXY]|DM|FJ|G[BDGSY]|I[DEMN]|J[^O]|K[EINY]|L[CS]|M[OS-WYZ]|N[AFP-Z]|P[GN]|S[BCGHORZ]|T[CHLOTVZ]|UG|V[CGI]|WS|Z.|[^DMS]K//
    J[EMP] → J[^O] (thanks @Neil)

sed, 158 + 1 155 + 1 153 + 1 152 + 1 bajtów, niepusta odpowiedź

Niewielka odmiana poprzedniego. Zwraca Lza ruch leworęczny.

s/[GIU]|B[BDMNSTW]|C[CXY]|DM|FJ|G[BDGSY]|I[DEMN]|J[^O]|K[EINY]|L[CS]|M[OS-WYZ]|N[AFP-Z]|P[GN]|S[BCGHORZ]|T[CHLOTVZ]|UG|V[CGI]|WS|Z.|[^DMS]K/&L/;s/^..//
Kryminał
źródło
1
Czy możesz użyć J[^O]zamiast J[EMP]?
Neil
Do Twojej wiadomości próbowałem grupować według drugiej litery, ale najlepsze, co mogłem zrobić, to 3 bajty dłużej:[^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.
Neil
Huh, 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]Glub, |[BGLW]Sale nie zmieni to wcale wyniku.
Dreszczowiec
2

APL (Dyalog) , 108 bajtów

1∊⍷∘'TTHSZWMSGSONPKNZMWVIDFKELSCYJPNFJMTVCXBNRBWSHKYAUGGYBTLCCKIMVGBSBBMZAINAGDMOBDIEJEMYMUNUPGSRLKTKTOTCTZ'

Wypróbuj online!

Korzystanie z ciągu wyszukiwania przez ovs.

Ruch lewostronny = 1.
Ruch praworęczny = 0.

Erik the Outgolfer
źródło
2

JavaScript (ES6), 118 116 bajtów

Zaoszczędzono 2 bajty dzięki @Craig Ayre

s=>"SZAINAGGDMOAUGBBSCCKIMWSHKYLSBMVGSGYBDBTHBWBNRMZMTLCXSRTVCYPNFKNPKEFJMYVIDIEJPGJEMUNZWMSONULKTKTOTTCTZ".match(s)

Zwraca nullza ruch praworęczny

Przypadki testowe

Herman L.
źródło
Czy możesz używać String.prototype.match()i mieć ruch praworęczny oznaczony przez null? Zaoszczędziłby 2 bajty
Craig Ayre
1

Vim, 117 109 108 naciśnięć klawiszy

oSZAINAGGDMOAUGBBSCCKIMWSHKYLSBMVGSGYBDBTHBWBNRMZMTLCXSRTVCYPNFKNPKEFJMYVIDIEJPGJEMUNZWMSONULKTKTOTTCTZ␛kg*D

Wypróbuj online! (zastąp SEw nagłówku kod kraju)

jest klawiszem Escape. Program drukuje następujący tekst dla ruchu praworęcznego:

SZAINAGGDMOAUGBBSCCKIMWSHKYLSBMVGSGYBDBTHBWBNRMZMTLCXSRTVCYPNFKNPKEFJMYVIDIEJPGJEMUNZWMSONULKTKTOTTCTZ

Wyjaśnienie

oSZAINA...OTTCTZ␛ Input the lookup-string on a new line
kg*D              Delete the everything after the last occurence of the country code
                   on the same line
Herman L.
źródło
Doceniam to, że odpowiadasz w moim ulubionym edytorze tekstów, sprytne wykorzystanie wyboru wartości dla dobra !
ბიმო
1

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

Input"",x$,
For y=0 To 100
z=z+(Mid("TTHSZWMSGSONPKNZMWVIDFKELSCYJPNFJMTVCXBNRBWSHKYAUGGYBTLCCKIMVGBSBBMZAINAGDMOBDIEJEMYMUNUPGSRLKTKTOTCTZ",y,2)=x$)
Next
Print z

Zwroty 0dla 1ruchu prawo- i leworęcznego, wypróbuj online!

Taylor Scott
źródło
1

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, 0jeśli kraj jest praworęczny, a 1kraj - leworęczny.

Input""A$
?InStr("TTHSZWMSGSONPKNZMWVIDFKELSCYJPNFJMTVCXBNRBWSHKYAUGGYBTLCCKIMVGBSBBMZAINAGDMOBDIEJEMYMUNUPGSRLKTKTOTCTZ",A$)>0

Wypróbuj online!

Taylor Scott
źródło
1

C (gcc) , 115 107 bajtów

f(short*x){x=!wcschr(L"䥁䝁啁卂䑂䉂䵂呂坂䝖乂奋塃䍃䭃奃䵄䭆䩆䑇䝇奇䭈义䑉䕉䵉䵊偊䕊䕋䥋卌位坍奍噍呍啍卍婍䅎剎偎婎啎䙎䭐䝐乐䡓之䍌䍖南䍓䝓䉓体䅚升䭌剓婓䡔䱔䭔佔呔䍔噔䝕䉇婔䥖䵚坚",*x);}

Wypróbuj online!

Zwraca, 0jeśli leworęczny. -4 dzięki @JonathanFrech

sufitowy
źródło
Czy nie możesz zdefiniować swojej funkcji short*jako parametru?
Jonathan Frech,
1

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

in[;+\-48+5h$"62<729151368=1>a1A23<6<C181A83?45;488F411112115:235Q43r141738353135247F42Tl<:"]@26/:-65+5h$

Generuje 1b (ruch lewostronny) lub 0b(ruch lewostronny)

Wyjaśnienie:

  • 5h$"XX"generuje kody ascii dla każdego znaku ciągu 2-znakowego (kod kraju), Przykład 5h$"TB"generuje 84 66

  • -65+integerListodejmij 65 od każdej liczby całkowitej na liście. Przykład -65+5h$"TB"generuje 19 1

  • 26/:integerListoblicza liczbę całkowitą równoważną tej liście jako cyfry 26-zasadowe. Przykład 26/:-65+5h$"TB"generuje 495 (kod kraju jako liczba całkowita)

  • in[;listOfCountryCodesAsIntegers]@xzwraca 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. -

  • Zwraca 0bdowolny kod kraju leworęcznego, w tym nieprawidłowe kody kraju
  • Możemy zapisać znak ponownie formatujący kod, ale wymaga wpisania kodu kraju „XX” wewnątrz kodu (nie wiem, czy jest poprawny, ale jestem pewien, że nie jest elegancki) in[26/:-65+5h$"XX";+\-48+5h$"..."]
J. Sendra
źródło