Arah lalu lintas

25

Aturan

Diberi kode negara ISO3166-1-Alpha-2, tugas Anda adalah memutuskan arah lalu lintas untuk negara itu:

  • Input akan menjadi kode negara yang valid (valid karena merupakan elemen dari dua daftar yang disediakan)
  • Input mungkin daftar dua karakter, bukan string jika itu membantu
  • Anda dapat memilih untuk mengambil input dalam huruf kecil
  • Anda akan memilih satu nilai, katakan untuk hak (pilihan Anda) dan akan menampilkan nilai itu jika lalu lintas di negara itu tidak kidal dan hal lain dalam kasus lain
  • Anda hanya perlu menangani kode negara yang terkandung dalam salah satu daftar ini:

Ini adalah semua negara di mana lalu lintas kidal:

['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']

Dan di sini adalah semua negara di mana lalu lintas adalah tangan kanan:

['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']

Demi kelengkapan, inilah file CSV yang berisi semua nilai bersama dengan nama negara.

Testcases

Dengan asumsi Anda memilih untuk menghasilkan Llalu lintas kidal, berikut adalah beberapa kasus uji yang valid:

'PY' -> 'python'
'PN' -> 'L'
'CN' -> 33
'GY' -> 'L'

Catatan: Ada kemungkinan kecil bahwa saya melewatkan suatu negara atau bahwa ada klasifikasi yang salah dan saya tidak akan mengubah spesifikasi karena itu mungkin membatalkan jawaban. Jika saya melakukan kesalahan, saya dengan tulus meminta maaf, tolong jangan tersinggung!

ბიმო
sumber
1
Apakah saya tetap bisa mengeluarkan apa-apa jika kode negara tidak cocok?
stevefestl
3
@SteveFest: Saya akan mengatakan bahwa dianggap sebagai sesuatu yang lain , ya.
ბიმო
bolehkah saya mengeluarkan "kiri" untuk kasing kiri dan yang lainnya dalam kasing kanan?
l4m2
7
Saya datang ke sini berharap untuk menemukan solusi Mathematica 10-byte yang entah bagaimana built-in. Saya sangat kecewa.
Silvio Mayolo
3
@SilvioMayolo CountryDatadapat memberikan jumlah jalan dan kereta api beraspal dan tidak beraspal dll di suatu negara tetapi tidak arah lalu lintasnya :(
HyperNeutrino

Jawaban:

13

Python 2 , 145 136 112 109 byte

'TTHSZWMSGSONPKNZMWVIDFKELSCYJPNFJMTVCXBNRBWSHKYAUGGYBTLCCKIMVGBSBBMZAINAGDMOBDIEJEMYMUNUPGSRLKTKTOTCTZ'.find

Cobalah online!

Output -1untuk lalu lintas tangan kanan. String ini dibuat secara otomatis dengan skrip Retina ini . Berkat totallyhuman untuk string pencarian 9 byte yang lebih pendek. Saya bisa mendapatkan 24 byte lebih banyak melalui saran AdmBorkBork .
Punya string pencarian 3 byte lebih pendek menggunakan skrip python.

ovs
sumber
4
Karena hal-hal seperti OTtidak ada, dapatkah Anda menghilangkan beberapa ruang seperti TO TCpergi ke TOTC?
AdmBorkBork
1
@ AdmBorkBork terima kasih banyak, saya dapat semua ruang.
Ov
Bisakah Anda menjelaskan string sama sekali?
Gigaflop
12

Jelly , 61 byte

Terima kasih banyak kepada @Mr. Xcoder karena membantu saya menyusun ini
1 byte tersimpan berkat @Jonathan Allan

Pengembalian 0untuk tangan kanan atau 1untuk tangan kiri.

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

Cobalah online!

Bagaimana?

Kami mengonversi setiap kode negara ke integer N dengan menguraikannya sebagai basis-256 dan menerapkan fungsi hash berikut, yang bebas benturan untuk lalu lintas kidal vs kanan:

((N * 6) MOD 1513) MOD 566

Ini mengarah ke daftar nilai berikut untuk lalu lintas kidal:

[   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)

Perbedaan rata-rata antara dua entri berturut-turut dekat dengan 8. Kami delta-menyandikan daftar dengan peningkatan dalam kisaran [1 ... 16]. Ini berarti bahwa setiap kali kenaikan lebih besar dari 16, kita perlu memasukkan nilai menengah pada slot yang tidak digunakan (kita harus memastikan bahwa itu tidak terkena lalu lintas yang tidak benar). Tetapi fungsi hash dipilih sedemikian rupa sehingga kita hanya perlu melakukan itu untuk beberapa posisi. Ini memberi:

[  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)

Kami mengonversi daftar ini dari bijective base-16 ke integer berikut:

274705197430389746738026977757328941544772847257562272094076195694133371689429679543810871702

yang menjadi “ŒỴ¬Ʋ>r¤dị|®ædHẇ⁸ɗH^CŒ³ẇPḷgȤƲȥƓƑ®Ƭṅḅ4ṛḟṄ’dalam pengkodean basis-250 Jelly.

Tautan pertama membangun kembali daftar asli dari bilangan bulat ini dan yang kedua menguji apakah itu berisi hash dari input.

“ŒỴ¬Ʋ>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
sumber
Simpan satu byte dengan mengonversi dari integer ke basis bijective 16: “ŒỴ¬Ʋ>r¤dị|®ædHẇ⁸ɗH^CŒ³ẇPḷgȤƲȥƓƑ®Ƭṅḅ4ṛḟṄ’ḃ⁴(sehingga menghindari kenaikan) ... juga (bukan penyimpanan byte, tetapi) ¢menyebut tautan terakhir sebagai nilad.
Jonathan Allan
@ Jonathan Allan Bagus! Terima kasih.
Arnauld
11

PowerShell , 161 148 byte

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

Cobalah online!

Pencocokan pola regex naif . Output Trueuntuk tangan kiri dan tangan Falsekanan.

Disimpan 13 byte berkat mercator golf regex.

AdmBorkBork
sumber
2
Anda dapat menggabungkan alternatif untuk huruf pertama C, F, H dan W menjadi [CFHW][CJKSXY](-5), I dan J menjadi [IJ][DEMNP](-3), mempersingkat N menjadi N[AFP-Z](-1), dan Z menjadi Z.(-4), dengan total -13 byte. Regex baru =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 Terima kasih untuk golf regex!
AdmBorkBork
9

Haskell , 137 byte

-5 byte berkat ovs.

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

Cobalah online!

Menghasilkan string asli dengan tangan.

benar-benar manusiawi
sumber
mendapat string lookup 3 byte lebih pendek lagi:TTHSZWMSGSONPKNZMWVIDFKELSCYJPNFJMTVCXBNRBWSHKYAUGGYBTLCCKIMVGBSBBMZAINAGDMOBDIEJEMYMUNUPGSRLKTKTOTCTZ
Ov
Alternatif lain -3: SZAINAGGDMOAUGBBSCCKIMWSHKYLSBMVGSGYBDBTHBWBNRMZMTLCXSRTVCYPNFKNPKEFJMYVIDIEJPGJEMUNZWMSONULKTKTOTTCTZ- Cobalah online!
Tn. Xcoder
8

05AB1E , 82 68 byte

Output 1 untuk lalu lintas kiri dan 0 untuk lalu lintas kanan.

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

Cobalah online! atau sebagai Test Suite

Menggunakan string yang dihasilkan oleh manusia sepenuhnya dan ditingkatkan oleh ovs

Emigna
sumber
6

05AB1E , 76 byte

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

Cobalah online!


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

Menghasilkan string berikut:

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

Jika saya membaginya pada spasi, dan interleave alfabet ke dalam setiap string, itu menghasilkan semua status yang mendorong di sisi kiri.


1 untuk kiri, 0 untuk kanan; Emigna lebih baik, tetapi ini terasa cukup berbeda untuk diposkan :).

Guci Gurita Ajaib
sumber
6

Jelly , 69 byte

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

Tautan monadik yang mengambil daftar karakter dan kembali 1jika kiri ( 0jika kanan).

Cobalah online!

Bagaimana?

Menggunakan metode yang diterapkan benar-benar manusia / ovs .

ẇ“ ... ’ṃØ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?

Juga, apa yang saya lakukan secara mandiri muncul pada 72 byte :

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

Juga tautan monadik yang mengambil daftar karakter dan kembali 1jika kiri ( 0jika kanan).

Cobalah online!

Bagaimana?

“ ... ’ṃ©Ø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
sumber
6

Befunge, 155 152 147 146 byte

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

Cobalah online!

Keluaran 80untuk negara yang kidal, dan yang lainnya menunjukkan negara kidal.

Penjelasan

Intinya kode berisi representasi dari semua negara kidal. Ini adalah daftar karakter pertama dari kode negara, dikelompokkan berdasarkan karakter kedua mereka. Akhir setiap grup ditandai dengan menurunkan karakter terakhir dalam grup.

Jadi misalnya grup pertama Nz,, mewakili NAdan ZA. Kelompok kedua, BSg, mewakili BB, SBdan GB. Ada satu grup untuk setiap huruf dalam alfabet, kecuali untuk huruf Q(tidak ada kode negara kiri yang berakhir Q) Grup kosong itu diwakili oleh karakter {, karena itu jelas tidak akan cocok dengan kode negara yang valid.

Untuk menentukan apakah kode negara yang diberikan cocok dengan salah satu entri ini, kami beralih melalui daftar untuk memeriksa apakah ada karakter dalam daftar yang cocok dengan karakter pertama dari input kami (mod 32 untuk memperhitungkan kasus ini), dan juga bahwa grup yang sesuai , cocok dengan karakter kedua dari input. Karakter grup mulai sebagai A, dan bertambah setiap kali kami menemukan huruf kecil dalam daftar.

Kami keluar ketika kami menemukan kecocokan, mengeluarkan nilai karakter terakhir pada tumpukan (yang akan menjadi karakter pertama dari kode negara - mungkin huruf kecil). Kalau tidak, kita akan keluar ketika kita sudah mengulangi seluruh daftar, dalam hal ini kita akan menampilkan angka terakhir pada stack, yang selalu 80.

James Holderness
sumber
6

Windows Batch, 289 279 199 193 181 130 118 byte

@echo TTHSZWMSGSONPKNZMWVIDFKELSCYJPNFJMTVCXBNRBWSHKYAUGGYBTLCCKIMVGBSBBMZAINAGDMOBDIEJEMYMUNUPGSRLKTKTOTCTZ|find "%1"

Menghasilkan string ovs untuk lalu lintas kiri, jika tidak menghasilkan apa-apa.

Catatan: Saya perhatikan jika input berisi kode negara apa pun dalam daftar di atas, ia masih akan menampilkan L. Namun, ini tidak melanggar aturan tantangan karena OP menyebutkan hanya kode negara yang perlu ditangani.


Penjelasan:

@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
sumber
5

C (gcc) , 181 169 165 byte

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

Cobalah online!

Cleblanc
sumber
2
Bisakah Anda menggunakan satu digit alih-alih 82menyimpan satu byte? 9, misalnya, akan menampilkan karakter tab.
Shaggy
5

Python 2 , 144 byte

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]

Cobalah online!

Mencetak Trueuntuk kiri, Falseuntuk kanan.

FlipTack
sumber
5

Retina , 150 117 byte

$
MSOBTVGBSBBMZAINAGDMOAUGGYBDBWSHKYBNRJPNFJMVCKIMTLCCXLSCYFKEVIDIEJELSGSOLKNZMWMYMUPKNPGSRNUTKTOTCTZSZWTTH
^(..).*\1

Cobalah online!

ovs
sumber
5

Excel VBA, 118 Bytes

Fungsi jendela langsung VBE anonim yang mengambil input dari sel [A1]dan keluaran 0jika negara tersebut menggunakan tangan kanan

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

menggunakan string ovs

Taylor Scott
sumber
4

Japt, 126 100 97 byte

Menggunakan string lookup ovs benar-benar manusiawi . Mengambil input dalam huruf kecil dan output falseuntuk RHD atau truelainnya.

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

Cobalah

Segala sesuatu di antara backticks adalah string lookup yang lebih kecil dan terkompresi dan ømemeriksa apakah itu berisi input U,.

Shaggy
sumber
2
string ovs jauh lebih pendek sekarang :-)
ETHproduksi
3

Pyth , 60 57 55 50 47 46 44 byte

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

Jalankan online

Mengambil input sebagai string kutipan huruf besar ( 'AI'). Kembali3 untuk kiri dan non-3 untuk kanan.

Bagaimana itu bekerja

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

Menghasilkan string ajaib

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
sumber
3

sed, 148 + 1 145 + 1 143 + 1 142 + 1 byte

Satu byte tambahan untuk -r flag (POSIX extended regexes).

Menghasilkan string kosong untuk lalu lintas kidal, kode negara asli untuk lalu lintas kanan.

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//

Contoh:

$ 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

$

Dijelaskan riwayat edit:

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 byte, jawaban tidak kosong

Variasi sedikit dari yang sebelumnya. Pengembalian Luntuk lalu lintas kidal.

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/^..//
Film thriller
sumber
1
Bisakah Anda menggunakan J[^O]bukan J[EMP]?
Neil
FYI Saya mencoba mengelompokkan berdasarkan huruf kedua tetapi yang terbaik yang bisa saya lakukan adalah 3 byte lebih lama:[^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
Hah, J[^O]sebenarnya pernah ada dalam daftar regex saya yang lebih kecil, saya bertanya-tanya bagaimana saya melewatkannya. Terima kasih telah menunjukkan ini! Adapun pengelompokan dengan huruf kedua: selain pengelompokan oleh K Anda hanya dapat menggunakan |[AGPSUV]Gatau |[BGLW]Stetapi tidak akan mengubah skor total sama sekali.
Thriller
2

APL (Dyalog) , 108 byte

1∊⍷∘'TTHSZWMSGSONPKNZMWVIDFKELSCYJPNFJMTVCXBNRBWSHKYAUGGYBTLCCKIMVGBSBBMZAINAGDMOBDIEJEMYMUNUPGSRLKTKTOTCTZ'

Cobalah online!

Menggunakan string lookup oleh ovs.

Lalu lintas kidal = 1 .
Lalu lintas tangan kanan = 0.

Erik the Outgolfer
sumber
2

Javascript (ES6), 118 116 byte

Disimpan 2 byte berkat @Craig Ayre

s=>"SZAINAGGDMOAUGBBSCCKIMWSHKYLSBMVGSGYBDBTHBWBNRMZMTLCXSRTVCYPNFKNPKEFJMYVIDIEJPGJEMUNZWMSONULKTKTOTTCTZ".match(s)

Kembali null untuk lalu lintas tangan kanan

Uji Kasus

Herman L.
sumber
Bisakah Anda menggunakan String.prototype.match()dan memiliki lalu lintas tangan kanan dilambangkan oleh null? Akan menghemat 2 byte
Craig Ayre
1

Vim, 117 109 108 penekanan tombol

oSZAINAGGDMOAUGBBSCCKIMWSHKYLSBMVGSGYBDBTHBWBNRMZMTLCXSRTVCYPNFKNPKEFJMYVIDIEJPGJEMUNZWMSONULKTKTOTTCTZ␛kg*D

Cobalah online! (ganti SEdi header dengan kode negara)

adalah kunci pelarian. Program ini mencetak teks berikut untuk lalu lintas tangan kanan:

SZAINAGGDMOAUGBBSCCKIMWSHKYLSBMVGSGYBDBTHBWBNRMZMTLCXSRTVCYPNFKNPKEFJMYVIDIEJPGJEMUNZWMSONULKTKTOTTCTZ

Penjelasan

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.
sumber
Saya menghargai bahwa Anda menjawab dalam editor teks favorit saya, penggunaan pintar memilih nilai untuk benar !
ბიმო
1

MY-BASIC , 162 byte

Fungsi anonim yang mengambil input sebagai string yang tidak terbungkus (yaitu, tanpa tanda kurung) dan output ke konsol

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

Pengembalian 0untuk 1lalu lintas kanan dan kiri, coba online!

Taylor Scott
sumber
1

Yabasic , 127 byte

Fungsi anonim yang mengambil input sebagai string yang tidak terbungkus (tidak "...") dan menghasilkan 0jika Negara tidak kidal dan 1jika negara kidal.

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

Cobalah online!

Taylor Scott
sumber
1

C (gcc) , 115 107 byte

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

Cobalah online!

Kembali 0jika tangan kiri. -4 Terima kasih kepada @JonathanFrech

plafon
sumber
Bisakah Anda tidak mendefinisikan fungsi Anda untuk mengambil short*sebagai parameter?
Jonathan Frech
1

K, 105 byte

Untuk informasi tentang bahasa K / Q lihat code.kx.com

Gunakan: Country-code (string 2-char, contoh "XY") setelahnya

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

Menghasilkan 1b(Lalu lintas kidal) atau0b (bukan lalu lintas kidal)

Penjelasan:

  • 5h$"XX"menghasilkan kode ascii untuk setiap karakter dari string 2-char (kode negara), Contoh 5h$"TB"menghasilkan 84 66

  • -65+integerListkurangi 65 ke setiap integer dalam daftar. Contoh -65+5h$"TB"menghasilkan 19 1

  • 26/:integerListmenghitung bilangan bulat setara dengan daftar itu sebagai digit dalam basis 26. Contoh 26/:-65+5h$"TB"menghasilkan 495 (kode negara sebagai integer)

  • in[;listOfCountryCodesAsIntegers]@xmengembalikan nilai boolean (1b = benar, 0b = salah). Benar jika x ada dalam daftar

  • +\-48+5h$"62<729151368=1>a1A23<6<C181A83?45;488F411112115:235Q43r141738353135247F42Tl<:" menghitung daftar bilangan bulat untuk setiap kode negara dengan lalu lintas kidal

    • "62<729151368=1>a1A23<6<C181A83?45;488F411112115:235Q43r141738353135247F42Tl<:"adalah 'string jarak' (jarak antara setiap pasangan kode negara integer dalam urutan menaik, dikodifikasikan sebagai karakter). Jarak n dikodifikasikan sebagai ascii char 48 + n

    • -48+5h$".." menghitung nilai ascii dari setiap karakter dalam string ".." dan memulihkan jarak asli sebagai kode ascii - 48. Hasilnya adalah daftar jarak

    • +\integerList menghitung penjumlahan sebagian item dari daftar -> kode integer-negara-absolut dari jarak antar kode.

CATATAN.-

  • Pengembalian 0buntuk kode negara non-kidal, termasuk kode negara tidak valid
  • Kita dapat menyimpan char memformat ulang kode, tetapi mengharuskan untuk menulis kode negara "XX" di dalam kode (saya tidak tahu apakah itu valid, tapi saya cukup yakin itu tidak elegan) in[26/:-65+5h$"XX";+\-48+5h$"..."]
J. Sendra
sumber