ทิศทางการจราจร


25

กฎระเบียบ

ให้รหัสประเทศ ISO3166-1-Alpha-2 งานของคุณคือการตัดสินใจเกี่ยวกับทิศทางการจราจรสำหรับประเทศนั้น:

  • ข้อมูลที่ป้อนจะเป็นรหัสประเทศที่ถูกต้อง (ถูกต้องเช่นเดียวกับที่เป็นองค์ประกอบของสองรายการที่ให้ไว้)
  • อินพุตอาจเป็นรายการของอักขระสองตัวแทนที่จะเป็นสตริงถ้าช่วยได้
  • คุณอาจเลือกที่จะใส่เป็นตัวพิมพ์เล็ก
  • คุณจะเลือกหนึ่งค่าบอกว่าถูกต้อง (ตัวเลือกของคุณ) และจะเอาท์พุทมูลค่านั้นถ้าการจราจรในประเทศนั้นถนัดขวาและอย่างอื่นในกรณีอื่น ๆ
  • คุณต้องจัดการรหัสประเทศที่มีอยู่ในรายการใดรายการหนึ่งต่อไปนี้:

นี่คือทุกประเทศที่มีการจราจรถนัดมือซ้าย:

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

และนี่คือทุกประเทศที่มีการจราจรติดขัด:

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

เพื่อความสมบูรณ์นี่คือไฟล์ CSV ที่มีค่าทั้งหมดพร้อมกับชื่อประเทศ

Testcases

สมมติว่าคุณเลือกที่จะแสดงผลLสำหรับการจราจรทางซ้ายนี่คือกรณีทดสอบที่ถูกต้องบางส่วน:

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

หมายเหตุ:มีโอกาสเล็กน้อยที่ฉันพลาดประเทศหรือมีการจำแนกผิดและฉันจะไม่เปลี่ยนรายละเอียดเพราะอาจทำให้คำตอบไม่ถูกต้อง หากฉันทำผิดฉันขอโทษอย่างจริงใจโปรดอย่าทำผิด!


1
การส่งออกไม่เป็นไรหากรหัสประเทศไม่ตรงกันหรือไม่
stevefestl

3
@SteveFest: ฉันจะบอกว่านับเป็นอย่างอื่นใช่
ბიმო

ฉันจะเอาท์พุท "ซ้าย" สำหรับตัวพิมพ์เล็กและอีกอย่างถูกต้องได้ไหม?
l4m2

7
ฉันมาที่นี่โดยหวังว่าจะได้พบกับโซลูชัน Mathematica ขนาด 10 ไบต์ที่มีมาให้ในตัว ฉันผิดหวังอย่างมาก
Silvio Mayolo

3
@SilvioMayolo CountryDataสามารถให้ปริมาณของถนนลาดยางและทางลาดและทางรถไฟ ฯลฯ ในประเทศ แต่ไม่ใช่ทิศทางการจราจร :(
HyperNeutrino

คำตอบ:


13

Python 2 , 145 136 112 109 ไบต์

'TTHSZWMSGSONPKNZMWVIDFKELSCYJPNFJMTVCXBNRBWSHKYAUGGYBTLCCKIMVGBSBBMZAINAGDMOBDIEJEMYMUNUPGSRLKTKTOTCTZ'.find

ลองออนไลน์!

เอาต์พุต-1สำหรับการรับส่งข้อมูลทางขวา สตริงถูกสร้างอัตโนมัติด้วยสคริปต์ Retinaนี้ ขอขอบคุณมนุษย์ทั้งหมดสำหรับสตริงการค้นหาที่สั้นกว่า 9 ไบต์ ฉันสามารถลด 24 ไบต์ได้มากขึ้นผ่านคำแนะนำของAdmBorkBork
ทำให้สตริงการค้นหาสั้นลง 3 ไบต์โดยใช้สคริปต์ไพ ธ อน


4
เนื่องจากสิ่งที่OTไม่มีอยู่คุณสามารถกำจัดช่องว่างบางส่วนเช่นTO TCไปได้TOTCหรือไม่
AdmBorkBork

1
@AdmBorkBork ขอบคุณมากฉันได้รับช่องว่างทั้งหมด
OVS

คุณสามารถอธิบายสตริงได้หรือไม่
Gigaflop

12

เยลลี่ , 61 ไบต์

ขอขอบคุณ@ Mr.Xcoder ที่ช่วยฉันวางสิ่งนี้ไว้ด้วยกัน
บันทึก 1 ไบต์ขอบคุณ@JonathanAllan

ผลตอบแทน0สำหรับมือขวาหรือ1มือซ้าย

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

ลองออนไลน์!

อย่างไร?

เราแปลงรหัสประเทศแต่ละรายการให้เป็นจำนวนเต็มNโดยแยกวิเคราะห์เป็น base-256 และใช้ฟังก์ชันแฮชต่อไปนี้ซึ่งไม่มีการชนกันของข้อมูลสำหรับการจราจรทางซ้ายและทางขวามือ:

((N * 6) MOD 1513) MOD 566

สิ่งนี้นำไปสู่รายการค่าต่อไปนี้สำหรับปริมาณการใช้งานด้านซ้าย

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

ความแตกต่างเฉลี่ยระหว่างรายการที่อยู่ติดกันสองรายการอยู่ใกล้กับ 8 เราจะเข้ารหัสรายการที่มีการเพิ่มขึ้นในช่วง [1 ... 16] หมายความว่าเมื่อใดก็ตามที่การเพิ่มขึ้นมีค่ามากกว่า 16 เราจำเป็นต้องใส่ค่ากลางลงในช่องที่ไม่ได้ใช้ แต่ฟังก์ชั่นแฮชได้รับเลือกในลักษณะที่เราจะต้องทำเช่นนั้นเพียงไม่กี่ตำแหน่ง สิ่งนี้ให้:

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

เราแปลงรายการนี้จาก bijective base-16 เป็นจำนวนเต็มต่อไปนี้:

274705197430389746738026977757328941544772847257562272094076195694133371689429679543810871702

ซึ่งกลาย“ŒỴ¬Ʋ>r¤dị|®ædHẇ⁸ɗH^CŒ³ẇPḷgȤƲȥƓƑ®Ƭṅḅ4ṛḟṄ’เป็นการเข้ารหัสฐาน 250 ของเยลลี่

ลิงค์แรกจะสร้างรายการดั้งเดิมจากจำนวนเต็มนี้และอีกอันหนึ่งทำการทดสอบว่ามีแฮชของอินพุตหรือไม่

“ŒỴ¬Ʋ>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

บันทึก byte โดยแปลงจากจำนวนเต็มเป็นฐานbijective 16: “ŒỴ¬Ʋ>r¤dị|®ædHẇ⁸ɗH^CŒ³ẇPḷgȤƲȥƓƑ®Ƭṅḅ4ṛḟṄ’ḃ⁴(ดังนั้นหลีกเลี่ยงการเพิ่ม) ... ยัง (ไม่ใช่การบันทึก byte แต่) ¢เรียกการเชื่อมโยงสุดท้ายเป็น nilad
Jonathan Allan

@JanathanAllan Nice! ขอขอบคุณ.
Arnauld

11

PowerShell , 161 148 ไบต์

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

ลองออนไลน์!

Na matchingve regex pattern matching เอาต์พุตTrueสำหรับมือซ้ายและFalseสำหรับมือขวา

บันทึกแล้ว 13 ไบต์ขอบคุณ Mercator ที่ตีกอล์ฟ Regex


2
คุณสามารถเข้าร่วมทางเลือกสำหรับตัวอักษรตัวแรก C, F, H และ W เป็น[CFHW][CJKSXY](-5), I และ J เป็น[IJ][DEMNP](-3), ย่อ N เป็นN[AFP-Z](-1), และ Z เข้าZ.(-4) รวมเป็น -13 ไบต์ ใหม่ regex =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 ขอบคุณสำหรับการเล่นกอล์ฟ regex!
AdmBorkBork

9

Haskell , 137 ไบต์

-5 ไบต์ขอบคุณ ovs

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

ลองออนไลน์!

สร้างสตริงดั้งเดิมด้วยมือ


ทำให้สตริงการค้นหาสั้นลง 3 ไบต์อีกครั้ง:TTHSZWMSGSONPKNZMWVIDFKELSCYJPNFJMTVCXBNRBWSHKYAUGGYBTLCCKIMVGBSBBMZAINAGDMOBDIEJEMYMUNUPGSRLKTKTOTCTZ
ovs

ทางเลือกอื่น -3: SZAINAGGDMOAUGBBSCCKIMWSHKYLSBMVGSGYBDBTHBWBNRMZMTLCXSRTVCYPNFKNPKEFJMYVIDIEJPGJEMUNZWMSONULKTKTOTTCTZ- ลองออนไลน์!
Mr. Xcoder

8

05AB1E , 82 68 ไบต์

เอาต์พุต1สำหรับทราฟฟิกซ้ายและ0สำหรับทราฟฟิกขวา

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

ลองออนไลน์! หรือเป็นชุดทดสอบ

ใช้สตริงที่สร้างขึ้นโดยมนุษย์ทั้งหมดและปรับปรุงโดยovs


6

05AB1E , 76 ไบต์

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

ลองออนไลน์!


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

ส่งออกสตริงต่อไปนี้:

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

ถ้าฉันแยกส่วนนั้นในช่องว่างและแทรกตัวอักษรลงในแต่ละสตริงมันจะส่งผลให้ทุกรัฐที่ขับรถทางด้านซ้าย


1 สำหรับซ้าย 0 สำหรับขวา; Emigna ดีกว่า แต่มันให้ความรู้สึกที่แตกต่างจากโพสต์ :)


6

เยลลี่ 69 ไบต์

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

ลิงก์ monadic ที่รับรายการอักขระและส่งคืน1ถ้าปล่อยทิ้งไว้ ( 0ถ้าถูกต้อง)

ลองออนไลน์!

อย่างไร?

ใช้วิธีการดำเนินการเป็นtotallyhuman / 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?

นอกจากนี้สิ่งที่ฉันทำอย่างอิสระมาที่72 ไบต์ :

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

นอกจากนี้ลิงก์ monadic จะรับรายการอักขระและส่งคืน1ถ้าปล่อยทิ้งไว้ ( 0หากถูกต้อง)

ลองออนไลน์!

อย่างไร?

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

6

Befunge, 155 152 147 146 ไบต์

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

ลองออนไลน์!

เอาท์พุท80สำหรับประเทศที่ถนัดขวาและอย่างอื่นก็บ่งบอกถึงประเทศที่ถนัดซ้าย

คำอธิบาย

บรรทัดล่างของรหัสประกอบด้วยการเป็นตัวแทนของประเทศที่ถนัดซ้าย นี่คือรายการของอักขระแรกของรหัสประเทศจัดกลุ่มตามอักขระที่สอง จุดสิ้นสุดของแต่ละกลุ่มมีการทำเครื่องหมายโดยลดอักขระตัวสุดท้ายในกลุ่ม

ดังนั้นสำหรับตัวอย่างเช่นกลุ่มแรกNzหมายถึงและNA ZAกลุ่มที่สองBSgหมายถึงBB, และSB GBมีหนึ่งกลุ่มสำหรับตัวอักษรแต่ละตัวในตัวอักษรยกเว้นตัวอักษรQ(ไม่มีรหัสประเทศทางซ้ายสิ้นสุดQ) กลุ่มที่ว่างเปล่านั้นแสดงโดยตัวละคร{เนื่องจากเห็นได้ชัดว่าไม่ตรงกับรหัสประเทศที่ถูกต้อง

ในการตรวจสอบว่ารหัสประเทศที่ระบุตรงกับหนึ่งในรายการเหล่านี้เราจะวนซ้ำผ่านการตรวจสอบรายการว่าอักขระใด ๆ ในรายการตรงกับอักขระตัวแรกของอินพุตของเรา (mod 32 ไปยังบัญชีสำหรับกรณี) และกลุ่มที่เกี่ยวข้อง จับคู่อักขระที่สองของอินพุต ตัวละครกลุ่มเริ่มต้นเป็นAและจะเพิ่มขึ้นทุกครั้งที่เราพบตัวอักษรตัวเล็กในรายการ

เราออกเมื่อพบการจับคู่ส่งออกค่าอักขระสุดท้ายบนสแต็ก (ซึ่งจะเป็นอักขระตัวแรกของรหัสประเทศ - อาจเป็นตัวพิมพ์เล็ก) มิฉะนั้นเราจะออกจากเมื่อเราทำซ้ำในรายการทั้งหมดซึ่งในกรณีนี้เราจะส่งออกหมายเลขสุดท้ายบนสแต็กซึ่งเป็น 80 เสมอ


6

Windows Batch, 289 279 199 193 181 130 118 ไบต์

@echo TTHSZWMSGSONPKNZMWVIDFKELSCYJPNFJMTVCXBNRBWSHKYAUGGYBTLCCKIMVGBSBBMZAINAGDMOBDIEJEMYMUNUPGSRLKTKTOTCTZ|find "%1"

ส่งออกสตริงของ ovs สำหรับการรับส่งข้อมูลด้านซ้าย

หมายเหตุ:ฉันสังเกตเห็นว่าการป้อนข้อมูลมีรหัสประเทศใด ๆ ในรายการข้างต้นมันจะยังคงเอาท์พุท L อย่างไรก็ตามสิ่งนี้ไม่ได้ละเมิดกฎการท้าทายเนื่องจาก OP กล่าวถึงเฉพาะรหัสประเทศที่ต้องจัดการ


คำอธิบาย:

@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.

5

C (gcc) , 181 169 165 ไบต์

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

ลองออนไลน์!


2
คุณสามารถใช้ตัวเลขหลักเดียวแทนที่จะ82บันทึกเป็นไบต์ได้ไหม 9ตัวอย่างเช่นจะส่งออกอักขระแท็บ
Shaggy



5

Excel VBA, 118 ไบต์

ฟังก์ชันหน้าต่าง VBE แบบไม่ระบุชื่อแบบทันทีที่รับอินพุตจากเซลล์[A1]และเอาต์พุต0หากประเทศเป็นแบบถนัดขวา

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

ใช้สตริงของ ovs


4

Japt, 126 100 97 ไบต์

ใช้totallyhuman ของ สตริงค้นหา OVS' ใช้อินพุตเป็นตัวพิมพ์เล็กและเอาต์พุตfalseสำหรับ RHD หรือtrueอย่างอื่น

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

ลองมัน

ทุกอย่างระหว่าง backticks คือสตริงการค้นหาที่ลดขนาดลงและถูกบีบอัดและøตรวจสอบว่ามีการป้อนข้อมูลหรือUไม่


2
สตริงของ
ovs

3

Pyth , 60 57 55 50 47 46 44 ไบต์

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

ทำงานออนไลน์

รับอินพุตเป็นสตริงที่อ้างถึงตัวพิมพ์ใหญ่ ( 'AI') ส่งคืน3สำหรับซ้ายและไม่ใช่3สำหรับสิทธิ์

มันทำงานอย่างไร

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

การสร้างสายเวทย์

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

3

sed, 148 + 1 145 + 1 143 + 1 142 + 1 ไบต์

หนึ่งไบต์พิเศษสำหรับ-rแฟล็ก (POSIX ส่วนขยายเพิ่มเติม)

ส่งออกสตริงว่างสำหรับการรับส่งข้อมูลด้านซ้ายรหัสประเทศดั้งเดิมสำหรับการรับส่งข้อมูลทางขวา

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

ตัวอย่าง:

$ 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

$

ประวัติการแก้ไขที่อธิบายไว้:

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 ไบต์คำตอบที่ไม่ว่างเปล่า

การเปลี่ยนแปลงเล็กน้อยของก่อนหน้านี้ ส่งคืนLสำหรับการจราจรทางซ้าย

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

1
คุณสามารถใช้J[^O]แทนได้J[EMP]หรือไม่?
Neil

FYI ฉันพยายามจัดกลุ่มด้วยตัวอักษรตัวที่สอง แต่สิ่งที่ดีที่สุดที่ฉันทำได้คือ 3 ไบต์นานกว่า:[^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

หือJ[^O]จริงครั้งหนึ่งในรายการของ regexes เล็กของฉันฉันสงสัยว่าฉันพลาดมัน ขอบคุณที่ชี้นำสิ่งนี้! สำหรับการจัดกลุ่มตามตัวอักษรตัวที่สอง: นอกเหนือจากการจัดกลุ่มโดย K คุณสามารถใช้|[AGPSUV]Gหรือ|[BGLW]Sแต่จะไม่เปลี่ยนคะแนนทั้งหมดเลย
Thriller


2

Javascript (ES6), 118 116 ไบต์

บันทึก 2 ไบต์ขอบคุณ @Craig Ayre

s=>"SZAINAGGDMOAUGBBSCCKIMWSHKYLSBMVGSGYBDBTHBWBNRMZMTLCXSRTVCYPNFKNPKEFJMYVIDIEJPGJEMUNZWMSONULKTKTOTTCTZ".match(s)

ส่งคืนnullสำหรับปริมาณการใช้ที่ถนัดขวา

กรณีทดสอบ


คุณสามารถใช้String.prototype.match()และมีทราฟฟิกทางขวาเขียนแทนได้nullหรือไม่? จะช่วย 2 ไบต์
Craig Ayre

1

เป็นกลุ่ม117 109 108 การกดแป้น

oSZAINAGGDMOAUGBBSCCKIMWSHKYLSBMVGSGYBDBTHBWBNRMZMTLCXSRTVCYPNFKNPKEFJMYVIDIEJPGJEMUNZWMSONULKTKTOTTCTZ␛kg*D

ลองออนไลน์! (แทนที่SEในส่วนหัวด้วยรหัสประเทศ)

เป็นกุญแจสำคัญในการหลบหนี โปรแกรมพิมพ์ข้อความต่อไปนี้สำหรับการรับส่งข้อมูลทางขวา:

SZAINAGGDMOAUGBBSCCKIMWSHKYLSBMVGSGYBDBTHBWBNRMZMTLCXSRTVCYPNFKNPKEFJMYVIDIEJPGJEMUNZWMSONULKTKTOTTCTZ

คำอธิบาย

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

ฉันขอขอบคุณที่คุณตอบกลับในโปรแกรมแก้ไขข้อความที่ชื่นชอบใช้การเลือกค่าที่เหมาะสมอย่างฉลาด!
ბიმო

1

MY-BASIC , 162 ไบต์

ฟังก์ชันที่ไม่ระบุชื่อที่รับอินพุตเป็นสตริงที่ยังไม่ได้เปิด (นั่นคือไม่มีวงเล็บ) และส่งออกไปยังคอนโซล

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

ส่งคืน0สำหรับมือขวาและ1สำหรับการจราจรทางซ้ายลองออนไลน์


1

Yabasic , 127 ไบต์

ฟังก์ชั่นที่ไม่ระบุชื่อที่รับอินพุตเป็นสตริงที่ไม่ได้แยก (ไม่ใช่"...") และส่งออก0หากประเทศเป็นแบบถนัดขวาและ1หากเป็นประเทศที่ส่งทางซ้าย

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

ลองออนไลน์!


1

C (gcc) , 115 107 ไบต์

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

ลองออนไลน์!

ส่งคืน0หากมือซ้าย -4 ขอบคุณ @JonathanFrech


คุณไม่สามารถกำหนดฟังก์ชั่นของคุณให้short*เป็นพารามิเตอร์ได้หรือไม่?
Jonathan Frech

1

K, 105 ไบต์

สำหรับข้อมูลเกี่ยวกับภาษา K / Q ดู code.kx.com

ใช้: รหัสประเทศ (2 สตริงอักขระตัวอย่าง "XY") หลังจาก

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

สร้าง1b(การจราจรซ้าย) หรือ0b(ไม่ใช่การจราจรซ้าย)

คำอธิบาย:

  • 5h$"XX"สร้างรหัส ASCII สำหรับถ่านแต่ละตัวของสตริง 2-char (รหัสประเทศ) ตัวอย่าง5h$"TB"สร้าง 84 66

  • -65+integerListsubstract 65 ถึงจำนวนเต็มแต่ละค่าในรายการ ตัวอย่าง-65+5h$"TB"สร้าง 19 1

  • 26/:integerListคำนวณจำนวนเต็มเทียบเท่ากับรายการนั้นเป็นตัวเลขใน 26 ฐาน ตัวอย่าง26/:-65+5h$"TB"สร้าง 495 (รหัสประเทศเป็นจำนวนเต็ม)

  • in[;listOfCountryCodesAsIntegers]@xส่งคืนค่าบูลีน (1b = true, 0b = false) เป็นจริงถ้า x อยู่ในรายการ

  • +\-48+5h$"62<729151368=1>a1A23<6<C181A83?45;488F411112115:235Q43r141738353135247F42Tl<:" คำนวณรายการจำนวนเต็มสำหรับแต่ละรหัสประเทศด้วยปริมาณการใช้ทางซ้าย

    • "62<729151368=1>a1A23<6<C181A83?45;488F411112115:235Q43r141738353135247F42Tl<:"คือ 'ระยะทางสตริง' (ระยะห่างระหว่างแต่ละคู่ของรหัสจำนวนเต็ม - ประเทศ - ตามลำดับจากน้อยไปมากประมวลเป็นถ่าน) ระยะทาง n ถูกประมวลเป็น ascii ถ่าน 48 + n

    • -48+5h$".." คำนวณค่า ascii ของถ่านแต่ละตัวในสตริง ".. " และกู้คืนระยะทางเดิมเป็นรหัส ASCII - 48 ผลลัพธ์ที่ได้คือรายการของระยะทาง

    • +\integerList คำนวณผลรวมบางส่วนของรายการจากรายการ -> รหัสจำนวนเต็มแบบเต็มประเทศจากระยะทางระหว่างรหัส

NOTES.-

  • ส่งคืน0bสำหรับรหัสประเทศที่ไม่ใช่มือซ้ายรวมถึงรหัสประเทศที่ไม่ถูกต้อง
  • เราสามารถบันทึกการจัดรูปแบบตัวอักษรใหม่ได้ แต่ต้องเขียนรหัสประเทศ "XX" ในรหัส (ฉันไม่รู้ว่ามันถูกต้องหรือไม่ แต่ฉันค่อนข้างแน่ใจว่ามันไม่สวยงาม) in[26/:-65+5h$"XX";+\-48+5h$"..."]
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.