Напрямок руху


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, який містить усі значення разом із назвами країн.

Тестові шафи

Якщо припустити, що ви вибрали для виведення Lлівого трафіку, ось кілька дійсних тестових випадків:

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

Примітка: Є невеликий шанс, що я пропустив країну або що там неправильна класифікація, і я не буду змінювати характеристики, тому що це може призвести до неправдивості відповідей. Якщо я помилився, я щиро вибачаюсь, будь ласка, не ображайтесь!


1
Чи добре нічого не виводити, якщо код країни не відповідає?
stevefestl

3
@SteveFest: Я б сказав, що це вважається як все інше , так.
ბიმო

чи можу я вивести "ліворуч" для лівої справи та ще чогось у правій справі?
l4m2

7
Я прийшов сюди, очікуючи знайти 10-байтове рішення Mathematica, яке було якось вбудовано. Я дуже розчарований.
Сільвіо Майоло

3
@SilvioMayolo CountryData може дати кількість прокладеної та незаасфальтованої дороги та залізниць тощо в країні, але не її напрямок руху :(
HyperNeutrino

Відповіді:


13

Python 2 , 145 136 112 109 байт

'TTHSZWMSGSONPKNZMWVIDFKELSCYJPNFJMTVCXBNRBWSHKYAUGGYBTLCCKIMVGBSBBMZAINAGDMOBDIEJEMYMUNUPGSRLKTKTOTCTZ'.find

Спробуйте в Інтернеті!

Виходи -1для правостороннього руху. Рядок автоматично генерується за допомогою цього сценарію Retina . Завдяки абсолютнолюдському за 9 байт коротший рядок пошуку. Через пропозицію AdmBorkBork мені вдалося отримати більше на 24 байти .
Отриманий рядок пошуку на 3 байти коротше за допомогою сценарію python.


4
Оскільки такі речі OTне існують, чи можете ви позбутися деяких просторів, як це TO TCйде TOTC?
AdmBorkBork

1
@AdmBorkBork велике спасибі, я отримав усі місця.
ов

Чи можете ви взагалі пояснити рядок?
Гігафлоп

12

Желе , 61 байт

Велике спасибі @ Mr.Xcoder за те, що він допомагав мені зібрати це
Збережений 1 байт завдяки @JonathanAllan

Повертається 0для праворуких або1 для лівших.

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

Спробуйте в Інтернеті!

Як?

Ми перетворюємо кожен код країни у ціле число N , аналізуючи його як базовий-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)

Ми перетворюємо цей список з біективної бази-16 у наступне ціле число:

274705197430389746738026977757328941544772847257562272094076195694133371689429679543810871702

який стає “ŒỴ¬Ʋ>r¤dị|®ædHẇ⁸ɗH^CŒ³ẇPḷgȤƲȥƓƑ®Ƭṅḅ4ṛḟṄ’в кодуванні Jelly's base-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

Збережіть байт шляхом перетворення з цілого числа на біективну базу 16: “ŒỴ¬Ʋ>r¤dị|®ædHẇ⁸ɗH^CŒ³ẇPḷgȤƲȥƓƑ®Ƭṅḅ4ṛḟṄ’ḃ⁴(таким чином уникнути збільшення) ... також (не байт збереження, але) ¢називає останнє посилання як nilad.
Джонатан Аллан

@JonathanAllan Nice! Дякую.
Арнольд

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

Спробуйте в Інтернеті!

Наївне узгодження шаблону регулярних виразів . Виходи Trueдля лівших і Falseдля праворуких.

Збережено 13 байт завдяки Меркатор, що займається гольфуванням.


2
Ви можете приєднати альтернативи для перших літер C, F, H і W до [CFHW][CJKSXY](-5), I і J до [IJ][DEMNP](-3), скоротити N до N[AFP-Z](-1), а Z до Z.(-4), загалом -13 байт. Новий вираз =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 Дякуємо за гольф з реджексом!
AdmBorkBork

9

Haskell , 137 байт

-5 байт завдяки овам.

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

Спробуйте в Інтернеті!

Створено оригінальний рядок вручну.


отримав рядок пошуку на 3 байти коротше:TTHSZWMSGSONPKNZMWVIDFKELSCYJPNFJMTVCXBNRBWSHKYAUGGYBTLCCKIMVGBSBBMZAINAGDMOBDIEJEMYMUNUPGSRLKTKTOTCTZ
тому

Ще одна альтернатива -3: SZAINAGGDMOAUGBBSCCKIMWSHKYLSBMVGSGYBDBTHBWBNRMZMTLCXSRTVCYPNFKNPKEFJMYVIDIEJPGJEMUNZWMSONULKTKTOTTCTZ- Спробуйте в Інтернеті!
Містер Xcoder


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 праворуч; Еміньї краще, але це було досить іншим :)


6

Желе , 69 байт

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

Монадійне посилання, що містить список символів і повертається, 1якщо зліва ( 0якщо справа).

Спробуйте в Інтернеті!

Як?

Використовує метод як реалізований повністюлюдсько / ов .

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

Також монадичне посилання, що містить список символів і повертається, 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). Ця порожня група представлена ​​символом{ , оскільки це, очевидно, не відповідає жодному дійсному коду країни.

Щоб визначити, чи відповідає вказаний код країни одній із цих записів, ми повторюємо список, перевіряючи, чи будь-який із символів у списку відповідає першому символу нашого введення (мод 32 для обліку випадку), а також, що відповідна група , відповідає другому символу вводу. Символ групи починається як Aі збільшується щоразу, коли ми зустрічаємо малі літери в списку.

Ми виходимо, коли знаходимо відповідність, виводячи останнє значення символу на стеку (який буде першим символом коду країни - можливо, малим регістром). Інакше ми вийдемо, коли переглянемо весь список, і в цьому випадку ми виведемо останнє число на стек, який завжди дорівнює 80.


6

Windows Batch, 289 279 199 193 181 130 118 байт

@echo TTHSZWMSGSONPKNZMWVIDFKELSCYJPNFJMTVCXBNRBWSHKYAUGGYBTLCCKIMVGBSBBMZAINAGDMOBDIEJEMYMUNUPGSRLKTKTOTCTZ|find "%1"

Виводить рядок ovs для лівого трафіку, інакше нічого не виводить.

Примітка. Я помітив, що якщо вхід містить якийсь код країни у списку вище, він все одно виводитиме L. Однак це не порушує правила виклику, оскільки згадані ОП мають працювати лише з кодами країн.


Пояснення:

@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, наприклад, буде виводитися символ табуляції.
Кудлатий



5

Excel VBA, 118 байт

Анонімна функція негайного вікна VBE, яка приймає введення з комірки [A1]та виводить, 0якщо країна праворучна

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

використовує ovs 'string


4

Japt, 126 100 97 байт

Використовує абсолютно нелюдський рядок пошуку . Здійснює введення в малі регістри та виходи falseдля РХЗ чи trueіншим чином.

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

Спробуй це

Все між лапками є пошук рядка рядкової і пресує і øперевіряє, чи містить вхід, U.


2
Рівень ovs зараз набагато коротший :-)
ETHproductions

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]?
Ніл

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.
Ніл

Ага, J[^O]насправді колись я був у моєму списку менших реджексів, мені цікаво, як я це пропустив. Дякуємо, що вказали на це! Що стосується групування за другою літерою: крім групування за K, ви можете просто використовувати |[AGPSUV]Gабо, |[BGLW]Sале це взагалі не змінить загальний бал.
Трилер


2

Javascript (ES6), 118 116 байт

Збережено 2 байти завдяки @Craig Ayre

s=>"SZAINAGGDMOAUGBBSCCKIMWSHKYLSBMVGSGYBDBTHBWBNRMZMTLCXSRTVCYPNFKNPKEFJMYVIDIEJPGJEMUNZWMSONULKTKTOTTCTZ".match(s)

Повертається nullдля праворучного руху

Випробування


Чи можете ви використовувати String.prototype.match()та позначати правий трафік null? Врятував би 2 байти
Крейг Ейр

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

МОЙ-ОСНОВНИЙ , 162 байти

Анонімна функція, яка приймає введення як нерозгорнутий рядок (тобто без дужок) і виводить на консоль

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

Повернення 0для праворуких та 1для ліворуких, спробуйте в Інтернеті!


1

Ябасич , 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*як параметр?
Джонатан Фрех

1

К, 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 для кожного char 2-char рядка (код країни), Приклад 5h$"TB"генерує 84 66

  • -65+integerListсубстрат 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<:""рядок відстані" (відстань між кожною парою цілих кодів країн у порядку зростання, кодифікована як char). Відстань n кодифіковано як ascii char 48 + n

    • -48+5h$".." обчислює значення ascii кожного символу в рядку ".." і відновлює вихідну відстань у вигляді коду ascii - 48. Результатом є список відстаней

    • +\integerList обчислює часткове підсумовування елементів зі списку -> абсолютні цілі числа-кодів країн з відстаней між кодами.

ПРИМІТКИ.-

  • Повертає 0bбудь-який нелівий код країни, включаючи недійсні коди країн
  • Ми можемо зберегти переформатування коду, але потрібно написати код країни "XX" всередині коду (я не знаю, чи він дійсний, але я впевнений, що це не елегантно) in[26/:-65+5h$"XX";+\-48+5h$"..."]
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.