Trafik yönü


25

kurallar

Bir ISO3166-1-Alpha-2 ülke kodu verildiğinde, göreviniz o ülkenin trafik yönüne karar vermektir:

  • Giriş geçerli bir ülke kodu olacaktır (sağlanan iki listenin bir elemanı olduğu gibi geçerlidir)
  • Girdi, yardımcı olması durumunda, dize yerine iki karakterden oluşan bir liste olabilir.
  • Küçük harflerle giriş yapmayı seçebilirsiniz.
  • Bir değeri seçecek, doğru söyleyeceksiniz (seçiminiz) ve o ülkedeki trafiğin sağ elini kullanması ve diğer durumda başka bir şey olması durumunda bu değeri vereceksiniz.
  • Yalnızca bu listelerden birinde bulunan ülke kodlarını kullanmanız gerekir:

Bunlar, trafiğin elle bırakıldığı ülkelerdir:

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

Ve burada trafiğin sağ elini kullanan tüm ülkeler:

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

Bütünlük uğruna, işte ülke adlarıyla birlikte tüm değerleri içeren bir CSV dosyası.

testcases

LSolak trafik için çıktı almayı seçtiniz varsa , işte bazı geçerli test durumları:

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

Not: Bir ülkeyi özlememe ya da yanlış bir sınıflandırma yapma olasılığımın küçük olduğu ve teknik özellikleri değiştirmeyeceğim çünkü bu cevapları geçersiz kılabilir. Bir hata yaptıysam, içtenlikle özür dilerim, lütfen almayın!


1
Ülke kodu uyuşmuyorsa hiçbir şey çıkmaz mı?
stevefestl,

3
@SteveFest: Bunun başka bir şey olarak sayıldığını söyleyebilirim , evet.
03

sol durumda "sağ" ve sağ durumda başka bir şey yazabilir miyim?
4m2'de

7
Buraya bir şekilde yerleşik olan 10 baytlık bir Mathematica çözümü bulmayı bekliyordum. Çok üzüldüm.
Silvio Mayolo

3
@SilvioMayolo CountryData, bir ülkedeki asfaltlanmış ve asfaltsız yol ve demiryolu vb. Miktarlarını verebilir ancak trafik yönünü
veremez

Yanıtlar:


13

Python 2 , 145 136 112 109 bayt

'TTHSZWMSGSONPKNZMWVIDFKELSCYJPNFJMTVCXBNRBWSHKYAUGGYBTLCCKIMVGBSBBMZAINAGDMOBDIEJEMYMUNUPGSRLKTKTOTCTZ'.find

Çevrimiçi deneyin!

-1Sağ elini kullanan trafik için çıktılar . Dize bu Retina betiği ile otomatik olarak oluşturulur . 9 bayt kısa bir arama dizesi için tamamen insanca teşekkürler . AdmBorkBork önerisi ile 24 bayt daha daha fazlasını elde edebildim .
Bir python betiği kullanarak arama dizesi 3 bayt kısaldı.


4
Gibi OTşeyler olmadığından, TO TCgider gibi bazı yerlerden kurtulabilir TOTCmisin?
AdmBorkBork

1
@AdmBorkBork çok teşekkür ederim, bütün alanları çıkardım.
ovs

İpi açıklayabilir misiniz?
Gigaflop

12

Jöle , 61 bayt

İçin çok teşekkürler @ Mr.Xcoder bu toparlamaya yardım ettiğin için
için Kayıtlı 1 bayt sayesinde @JonathanAllan

0Sağ elle veya solak için döndürür 1.

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

Çevrimiçi deneyin!

Nasıl?

Her ülke kodunu base-256 olarak ayrıştırıp N değerine bir tamsayıya dönüştürüyoruz ve solak ve sağ elini kullanan trafik için çarpışma içermeyen aşağıdaki karma işlevini uyguluyoruz:

((N * 6) MOD 1513) MOD 566

Bu, solak trafik için aşağıdaki değerler listesine yol açar:

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

Ardışık iki giriş arasındaki ortalama fark 8'e yakındır. Listeyi, [1 ... 16] aralığında artışlarla delta kodluyoruz. Bu, bir artış 16'dan büyük olduğunda, kullanılmayan bir yuvaya bir ara değer eklememiz gerektiği anlamına gelir (sağ elini kullanan trafik çarpmadığından emin olmamız gerekir). Fakat karma fonksiyonu, sadece birkaç pozisyon için bunu yapmamız gereken şekilde seçildi. Bu verir:

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

Bu listeyi bijective 16 tabanından aşağıdaki tam sayıya dönüştürürüz:

274705197430389746738026977757328941544772847257562272094076195694133371689429679543810871702

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

İlk bağlantı orijinal listeyi bu tamsayıdan yeniden oluşturur ve ikincisi girişin karmasını içerip içermediğini test eder.

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

Bir tamsayıdan bijective base 16'ya dönüştürerek “ŒỴ¬Ʋ>r¤dị|®ædHẇ⁸ɗH^CŒ³ẇPḷgȤƲȥƓƑ®Ƭṅḅ4ṛḟṄ’ḃ⁴bir bayttan tasarruf edin 16: (böylece ¢artıştan kaçınır ) ... ayrıca (bir byte kaydetme değil, ancak) son bağlantıyı bir nilad olarak çağırır.
Jonathan Allan,

@JonathanAllan Güzel! Teşekkür ederim.
Arnauld

11

PowerShell , 161 148 bayt

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

Çevrimiçi deneyin!

Saf regex desen eşleştirmesi. TrueSol elle ve Falsesağ elle çıkışlar .

Regex'te golf yapan mercator sayesinde 13 byte kurtarıldı.


2
İlk harf C, F, H ve W [CFHW][CJKSXY](-5), I ve J, [IJ][DEMNP](-3), N, N[AFP-Z](-1) ve Z, Z.(-4) arasındaki alternatifleri birleştirebilirsiniz . -13 bayt. Yeni 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 golf için teşekkürler!
AdmBorkBork

9

Haskell , 137 bayt

Ovs sayesinde -5 bayt.

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

Çevrimiçi deneyin!

Orijinal dize el ile üretildi.


arama dizesi yine 3 byte kısalıyor:TTHSZWMSGSONPKNZMWVIDFKELSCYJPNFJMTVCXBNRBWSHKYAUGGYBTLCCKIMVGBSBBMZAINAGDMOBDIEJEMYMUNUPGSRLKTKTOTCTZ
ovs

Başka bir alternatif -3: SZAINAGGDMOAUGBBSCCKIMWSHKYLSBMVGSGYBDBTHBWBNRMZMTLCXSRTVCYPNFKNPKEFJMYVIDIEJPGJEMUNZWMSONULKTKTOTTCTZ- Çevrimiçi deneyin!
Bay Xcoder


6

05AB1E , 76 bayt

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

Çevrimiçi deneyin!


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

Aşağıdaki dizeyi çıktılar:

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

Bunu boşluklara bölüp alfabeyi her dizgiye serpiştirirsem, sol taraftaki bütün durumlarla sonuçlanır.


Sol için 1, sağ için 0; Emigna'nın daha iyi, ama bu göndermek için yeterince farklı hissettim :).


6

Jöle , 69 bayt

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

Karakter listesini alan ve 1bırakıldığında döndürülen (sağdaysa) bir monadik bağlantı 0.

Çevrimiçi deneyin!

Nasıl?

Uygulandığını yöntemini kullanır 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?

Ayrıca, bağımsız olarak yaptığım şey 72 byte'ta geldi :

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

Ayrıca bir karakter listesi alarak ve 1eğer bırakılırsa dönen bir tek link 0.

Çevrimiçi deneyin!

Nasıl?

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

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

Çevrimiçi deneyin!

80Sağ elli bir ülke için çıktılar ve başka herhangi bir şey solak bir ülkeyi gösterir.

açıklama

Kodun en alt satırı, tüm solak ülkelerin temsilini içerir. Bu, ülke kodlarının ilk karakterlerinin, ikinci karakterlerine göre gruplandırılmış bir listesidir. Her grubun sonu, gruptaki son karakterin küçük harfleri ile işaretlenir.

Mesela ilk grup Nz, temsil eder NAve ZA. İkinci grup, BSgtemsil eder, BB, SBve GB. Alfabedeki her harf için bir harf vardır, harf hariç Q(sol ülke kodlarının bitmediği Q). Bu boş grup karakter ile temsil edilir {, çünkü açıkça herhangi bir geçerli ülke koduyla eşleşmeyecektir.

Belirli bir ülke kodunun bu girdilerden biriyle eşleşip eşleşmediğini belirlemek için, listedeki karakterlerden herhangi birinin girişimizin ilk karakteriyle eşleşip eşleşmediğini (durum için hesaba mod 32) ve aynı zamanda ilgili grubun eşleşip eşleşmediğini kontrol ettik. , girişin ikinci karakteriyle eşleşir. Grup karakteri olarak başlar Ave listedeki küçük harflerle karşılaştığımız her seferde artar.

Bir eşleşme bulduğumuzda, yığındaki son karakter değerini (ülke kodunun ilk karakteri olacak - büyük olasılıkla küçük harfle) çıkaran çıkıyoruz. Aksi halde, tüm listeyi yinelediğimizde çıkacağız, bu durumda yığındaki son sayıyı her zaman 80 olacak şekilde çıkartacağız.


6

Windows Toplu İşi, 289 279 199 193 181 130 118 bayt

@echo TTHSZWMSGSONPKNZMWVIDFKELSCYJPNFJMTVCXBNRBWSHKYAUGGYBTLCCKIMVGBSBBMZAINAGDMOBDIEJEMYMUNUPGSRLKTKTOTCTZ|find "%1"

Solların trafiği için ovs dizesini çıkarır, başka hiçbir şey çıkarmaz.

Not: Girdi , yukarıdaki listede herhangi bir ülke kodu içerip içermediğini , yine de L çıktısı alacağını fark ettim . Ancak, OP'nin yalnızca ülke kodlarının ele alınması gerektiğinden, bu zorluk kuralını ihlal etmiyor.


Açıklama:

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

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

Çevrimiçi deneyin!


2
82Bayt kaydetmek yerine tek bir rakam kullanabilir misiniz ? 9örneğin, bir sekme karakteri çıkarır.
Shaggy

5

Python 2 , 144 bayt

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]

Çevrimiçi deneyin!

TrueSola Falsedoğru yazdırır .



5

Excel VBA, 118 Bayt

Ülkeden sağ elini kullanıyorsa , hücreden girdi alan [A1]ve çıkan anonim VBE acil pencere işlevi0

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

ovs dizesini kullanır


4

Japt, 126 100 97 bayt

Tamamen insanın tanıdıklarının arama dizesini kullanır . Küçük harf ve çıktılarda girdi alırfalse RHD veya içintrue .

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

Dene

Destek çubukları arasındaki her şey, küçük harflerle gösterilen ve sıkıştırılan arama dizesidir ve øgirişi içerip içermediğini kontrol eder U.



3

Pyth , 60 57 55 50 47 46 44 bayt

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

Çevrimiçi çalıştır

Girdiyi büyük harfli bir dize ( 'AI') olarak alır. İade 3için sol ve olmayan 3hakkı için.

Nasıl çalışır

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

Sihirli dizgenin oluşturulması

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 bayt

İçin bir ekstra bayt -rBayrak (POSIX genişletilmiş regexes).

Solak trafik için boş dize, sağlak trafik için orijinal ülke kodu çıkar.

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

Örnek:

$ 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

$

Açıklanan düzenleme geçmişi:

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 bayt, boş olmayan cevap

Bir öncekinin hafif değişimi. LSolak trafik için döndürür .

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
Eğer kullanabilir miyim J[^O]yerine J[EMP]?
Neil

FYI İkinci mektuba göre gruplamayı denedim ama yapabileceğimin en iyisi 3 byte daha uzun oldu:[^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]aslında bir zamanlar küçük regex'ler listemdeydi, merak ettim nasıl. Bunu gösterdiğin için teşekkürler! İkinci mektuba göre gruplamaya gelince: K'ya göre gruplamaya ek olarak sadece kullanabilirsiniz |[AGPSUV]Gveya |[BGLW]Sancak toplam puanı değiştirmez.
Thriller

2

APL (Dyalog) , 108 bayt

1∊⍷∘'TTHSZWMSGSONPKNZMWVIDFKELSCYJPNFJMTVCXBNRBWSHKYAUGGYBTLCCKIMVGBSBBMZAINAGDMOBDIEJEMYMUNUPGSRLKTKTOTCTZ'

Çevrimiçi deneyin!

Arama dizesini ovs tarafından kullanma.

Solak trafik = 1.
Sağ taraf trafik = 0.


2

Javascript (ES6), 118 116 bayt

@Craig Ayre sayesinde 2 bayt kaydedildi

s=>"SZAINAGGDMOAUGBBSCCKIMWSHKYLSBMVGSGYBDBTHBWBNRMZMTLCXSRTVCYPNFKNPKEFJMYVIDIEJPGJEMUNZWMSONULKTKTOTTCTZ".match(s)

nullSağ el trafiği için döndürür

Test Kılıfları


String.prototype.match()Tarafından belirtilmiş sağ elini kullanan trafiği kullanabilir misiniz null? 2 bayt'ı kurtarırdı
Craig Ayre

1

Vim, 117 109 108 tuş vuruşlarını

oSZAINAGGDMOAUGBBSCCKIMWSHKYLSBMVGSGYBDBTHBWBNRMZMTLCXSRTVCYPNFKNPKEFJMYVIDIEJPGJEMUNZWMSONULKTKTOTTCTZ␛kg*D

Çevrimiçi deneyin! ( SEbaşlıktaki ülke koduyla değiştirin)

kaçış anahtarı. Program, sağ elini kullanan trafik için aşağıdaki metni yazdırır:

SZAINAGGDMOAUGBBSCCKIMWSHKYLSBMVGSGYBDBTHBWBNRMZMTLCXSRTVCYPNFKNPKEFJMYVIDIEJPGJEMUNZWMSONULKTKTOTTCTZ

açıklama

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

En sevdiğim metin editörüme cevap verdiğiniz için teşekkür ederim, doğru değeri seçmek için akıllıca kullanın !
ბიმო

1

MY-TEMEL , 162 bayt

Girişi, paketlenmemiş bir dizge olarak (parantez olmadan) alan ve konsola çıkaran Anonim İşlev

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

0Sağ elle ve 1solak trafik için döndürür , çevrimiçi deneyin!


1

Yabasic , 127 bayt

Girişi, paketlenmemiş bir dize (no "...") olarak alan ve 0Ülke sağ elini kullanıyorsa ve 1ülke elle bırakılıyorsa çıktıyı veren isimsiz işlev .

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

Çevrimiçi deneyin!


1

C (gcc) , 115 107 bayt

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

Çevrimiçi deneyin!

İade 0teslim bırakılırsa. -4 @JonathanFrech sayesinde


Bir short*parametre almak için işlevinizi tanımlayamadınız mı?
Jonathan Frech

1

K, 105 bayt

K / Q dilleri hakkında daha fazla bilgi için code.kx.com adresini ziyaret edin.

Kullanın: Ülke kodu (2 karakterli dize, örneğin "XY") sonra

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

üretir 1b (Sol elini kullanan trafik) veya 0b(değil Solaklar trafik)

Açıklama:

  • 5h$"XX"2 karakterli dizgelerin her bir karakteri için ülke kodlarını 5h$"TB"oluşturur (ülke kodu), Örnek 84 66

  • -65+integerListlistedeki her bir tamsayıya 65 çıkartma. Örnek -65+5h$"TB"19 1 üretir

  • 26/:integerListBu listeye eşdeğer tamsayıyı 26-basamakta hane olarak hesaplar. Örnek 26/:-65+5h$"TB"495 (tamsayı olarak ülke kodu) üretir

  • in[;listOfCountryCodesAsIntegers]@xboolean değerini döndürür (1b = true, 0b = false). Eğer x listede ise doğru

  • +\-48+5h$"62<729151368=1>a1A23<6<C181A83?45;488F411112115:235Q43r141738353135247F42Tl<:" Sol elle trafik ile her ülke kodu için tamsayıların listesini hesaplar

    • "62<729151368=1>a1A23<6<C181A83?45;488F411112115:235Q43r141738353135247F42Tl<:"'mesafe dizgisi' (artan karakter sırasına göre tamsayı ülke kodlarının her çifti arasındaki karakter, char olarak kodlanmış). Mesafe n, ascii karakter 48 + n olarak kodlanmıştır.

    • -48+5h$".." Her karakterin ascii değerini ".." dizgisinde hesaplar ve orijinal mesafeyi ascii kodu - 48 olarak kurtarır. Sonuç, mesafelerin listesidir.

    • +\integerList listedeki öğelerin kısmi toplamını hesaplar -> mutlak tamsayı ülke kodlarını kodlar arasındaki mesafelerden hesaplar.

NOTES.-

  • İade 0bgeçerli değil ülke kodları dahil olmak üzere herhangi olmayan solak ülke kodu için,
  • Kodu yeniden biçimlendiren bir char kaydedebiliriz, ancak kodun içine "XX" ülke kodunu yazmayı gerektirir (geçerli olup olmadığını bilmiyorum, ancak zarif olmadığından eminim) in[26/:-65+5h$"XX";+\-48+5h$"..."]
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.