Direzione del traffico


25

Regole

Dato un codice paese ISO3166-1-Alpha-2, il tuo compito è decidere la direzione del traffico per quel paese:

  • L'input sarà un codice paese valido (valido come in esso è un elemento delle due liste fornite)
  • L'input può essere un elenco di due caratteri anziché una stringa se aiuta
  • Puoi scegliere di inserire input in minuscolo
  • Sceglierai un valore, dì per il diritto (la tua scelta) e produrrai quel valore se il traffico in quel paese è destrorso e qualsiasi altra cosa nell'altro caso
  • Devi solo gestire i codici paese contenuti in uno di questi elenchi:

Questi sono tutti i paesi in cui il traffico è mancino:

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

E qui ci sono tutti i paesi in cui il traffico è destrorso:

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

Per completezza, ecco un file CSV che contiene tutti i valori insieme ai nomi dei paesi.

Casi test

Supponendo che tu abbia scelto di produrre il Ltraffico per mancini, ecco alcuni casi di test validi:

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

Nota: c'è una piccola possibilità che mi sia perso un paese o che ci sia una classificazione errata e non cambierò le specifiche perché ciò potrebbe invalidare le risposte. Se ho fatto un errore, mi scuso sinceramente, per favore, non offenderti!


1
Va bene non produrre nulla se il prefisso nazionale non corrisponde?
Stevefestl,

3
@SteveFest: direi che conta come qualsiasi altra cosa , sì.
ბიმო

posso emettere "left" per il caso sinistro e qualcos'altro nel caso giusto?
l4m2

7
Sono venuto qui aspettandomi di trovare una soluzione Mathematica a 10 byte che fosse in qualche modo integrata. Sono profondamente deluso.
Silvio Mayolo,

3
@SilvioMayolo CountryDatapuò fornire la quantità di strade e ferrovie asfaltate e non asfaltate in un paese, ma non la sua direzione del traffico :(
HyperNeutrino

Risposte:


13

Python 2 , 145 136 112 109 byte

'TTHSZWMSGSONPKNZMWVIDFKELSCYJPNFJMTVCXBNRBWSHKYAUGGYBTLCCKIMVGBSBBMZAINAGDMOBDIEJEMYMUNUPGSRLKTKTOTCTZ'.find

Provalo online!

Uscite -1per traffico destrorso. La stringa viene generata automaticamente con questo script Retina . Grazie a totalmente umano per la stringa di ricerca più corta di 9 byte. Sono stato in grado di ottenere 24 byte in più con il suggerimento AdmBorkBork .
La stringa di ricerca è stata ridotta di 3 byte utilizzando uno script Python.


4
Dal momento che cose come OTnon esistono, puoi sbarazzarti di alcuni spazi come TO TCva TOTC?
AdmBorkBork,

1
@AdmBorkBork grazie mille, ho ottenuto tutti gli spazi.
Ovs,

Puoi spiegare la stringa?
Gigaflop,

12

Gelatina , 61 byte

Mille grazie a @ Mr.Xcoder per avermi aiutato a metterlo insieme
Salvato 1 byte grazie a @JonathanAllan

Resi 0per destrimani o 1mancini.

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

Provalo online!

Come?

Convertiamo ogni codice paese in un intero N analizzandolo come base-256 e applichiamo la seguente funzione hash, che è esente da collisioni per il traffico per mancini e destrorsi:

((N * 6) MOD 1513) MOD 566

Questo porta al seguente elenco di valori per il traffico per mancini:

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

La differenza media tra due voci consecutive è vicina a 8. Delta-codifichiamo l'elenco con incrementi nell'intervallo [1 ... 16]. Ciò significa che ogni volta che un incremento è maggiore di 16, dobbiamo inserire un valore intermedio su uno slot inutilizzato (dobbiamo assicurarci che non sia colpito dal traffico con la mano destra). Ma la funzione hash è stata scelta in modo tale che dobbiamo farlo solo per alcune posizioni. Questo da:

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

Convertiamo questo elenco da bijective base-16 al seguente numero intero:

274705197430389746738026977757328941544772847257562272094076195694133371689429679543810871702

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

Il primo collegamento ricostruisce l'elenco originale da questo numero intero e il secondo verifica se contiene l'hash dell'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

Salva un byte convertendo da un numero intero in base biiettiva 16: “ŒỴ¬Ʋ>r¤dị|®ædHẇ⁸ɗH^CŒ³ẇPḷgȤƲȥƓƑ®Ƭṅḅ4ṛḟṄ’ḃ⁴(evitando così l'incremento) ... anche (non un byte salva, ma) ¢chiama l'ultimo link come nilad.
Jonathan Allan,

@JonathanAllan Nice! Grazie.
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.'

Provalo online!

Naïve pattern matching regex. Uscite Trueper mancini e Falsedestrimani.

Risparmiato 13 byte grazie al mercator golfing regex.


2
Puoi unire le alternative per le prime lettere C, F, H e W in [CFHW][CJKSXY](-5), I e J in [IJ][DEMNP](-3), accorciare N in N[AFP-Z](-1) e Z in Z.(-4), per un totale di -13 byte. Nuovo 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.
mercatore

@mercator Grazie per il golf regex!
AdmBorkBork

9

Haskell , 137 byte

-5 byte grazie agli ovs.

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

Provalo online!

Ha generato la stringa originale a mano.


la stringa di ricerca è stata ridotta di 3 byte in meno:TTHSZWMSGSONPKNZMWVIDFKELSCYJPNFJMTVCXBNRBWSHKYAUGGYBTLCCKIMVGBSBBMZAINAGDMOBDIEJEMYMUNUPGSRLKTKTOTCTZ
ovs

Un'altra alternativa -3: SZAINAGGDMOAUGBBSCCKIMWSHKYLSBMVGSGYBDBTHBWBNRMZMTLCXSRTVCYPNFKNPKEFJMYVIDIEJPGJEMUNZWMSONULKTKTOTTCTZ- Provalo online!
Mr. Xcoder,

8

05AB1E , 82 68 byte

Uscite 1 per il traffico a sinistra e 0 per il traffico a destra.

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

Provalo online! o come una suite di test

Usa la stringa generata da totalmente umana e migliorata da ovs


6

05AB1E , 76 byte

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

Provalo online!


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

Emette la seguente stringa:

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

Se lo divido negli spazi e interlacciamo l'alfabeto in ciascuna stringa, si tradurrà in tutti gli stati che guidano sul lato sinistro.


1 per sinistra, 0 per destra; Emigna's è migliore, ma è sembrato abbastanza diverso da pubblicare :).


6

Gelatina , 69 byte

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

Un collegamento monadico che prende un elenco di caratteri e ritorna 1se lasciato ( 0se giusto).

Provalo online!

Come?

Utilizza il metodo come implementato totalmente umano / 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?

Inoltre, ciò che ho fatto indipendentemente è arrivato a 72 byte :

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

Anche un collegamento monadico che prende un elenco di caratteri e ritorna 1se lasciato ( 0se giusto).

Provalo online!

Come?

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

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

Provalo online!

Risultati 80per un paese per mancini e qualsiasi altra cosa indica un paese per mancini.

Spiegazione

La linea di fondo del codice contiene una rappresentazione di tutti i paesi mancini. Questa è una lista dei primi caratteri dei codici paese, raggruppati per il loro secondo carattere. La fine di ogni gruppo è contrassegnata dalla minuscola dell'ultimo carattere nel gruppo.

Quindi, ad esempio, il primo gruppo Nz, rappresenta NAe ZA. Il secondo gruppo, BSgrappresenta BB, SBe GB. Esiste un gruppo per ogni lettera dell'alfabeto, fatta eccezione per la lettera Q(nessun codice di paese di sinistra finisce in Q). Quel gruppo vuoto è rappresentato dal personaggio {, dal momento che ovviamente non corrisponderà a nessun codice paese valido.

Per determinare se un determinato codice paese corrisponde a una di queste voci, passiamo attraverso l'elenco verificando se uno dei caratteri nell'elenco corrisponde al primo carattere del nostro input (mod 32 per tenere conto del caso) e anche che il gruppo corrispondente , corrisponde al secondo carattere dell'input. Il carattere di gruppo inizia come Aed è incrementato ogni volta che incontriamo una lettera minuscola nell'elenco.

Usciamo quando troviamo una corrispondenza, mettendo in pila l'ultimo valore del carattere (che sarà il primo carattere del prefisso del paese - possibilmente in minuscolo). Altrimenti usciremo quando avremo ripetuto l'intero elenco, nel qual caso emetteremo l'ultimo numero nello stack, che è sempre 80.


6

Finestre batch, 289 279 199 193 181 130 118 byte

@echo TTHSZWMSGSONPKNZMWVIDFKELSCYJPNFJMTVCXBNRBWSHKYAUGGYBTLCCKIMVGBSBBMZAINAGDMOBDIEJEMYMUNUPGSRLKTKTOTCTZ|find "%1"

Emette la stringa degli ovs per il traffico a sinistra, altrimenti non produce nulla.

Nota: ho notato che se l'input contiene un codice paese nell'elenco precedente, verrà comunque emesso L. Tuttavia, ciò non viola la regola di verifica poiché è necessario gestire solo i codici paese indicati dall'OP.


Spiegazione:

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

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

Provalo online!


2
Potresti usare una sola cifra invece di 82salvare un byte? 9, ad esempio, genererebbe un carattere di tabulazione.
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]

Provalo online!

Stampa Truea sinistra, Falsea destra.


5

Retina , 150 117 byte

$
MSOBTVGBSBBMZAINAGDMOAUGGYBDBWSHKYBNRJPNFJMVCKIMTLCCXLSCYFKEVIDIEJELSGSOLKNZMWMYMUPKNPGSRNUTKTOTCTZSZWTTH
^(..).*\1

Provalo online!


5

Excel VBA, 118 byte

Funzione di finestra immediata VBE anonima che accetta input dalla cella [A1]e output 0se il Paese è destrorso

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

usa la stringa di ovs


4

Japt, 126 100 97 byte

Utilizza una stringa di ricerca ovs totalmente umana . Accetta input in minuscolo e output falseper RHD o in truealtro modo.

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

Provalo

Tutto tra le backticks è la stringa di ricerca in minuscolo e compressa e øverifica se contiene l'ingresso, U.


2
la stringa di ovs ora è molto più corta :-)
ETHproductions

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

Corri online

Prende l'input come stringa maiuscola tra virgolette ( 'AI'). Restituisce 3per sinistra e non 3per destra.

Come funziona

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

Generare la corda magica

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 byte

Un byte aggiuntivo per -rflag (regex estese POSIX).

Emette una stringa vuota per il traffico per mancini, il codice paese originale per il traffico per mancini.

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

Esempio:

$ 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

$

Spiegazione della cronologia delle modifiche:

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, risposta non vuota

Leggera variazione della precedente. Restituisce Lper il traffico per mancini.

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
Puoi usare J[^O]invece di J[EMP]?
Neil,

Cordiali saluti, ho provato a raggruppare per seconda lettera, ma il meglio che potevo fare era di 3 byte in più:[^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,

Eh, in J[^O]realtà era una volta nella mia lista di regex più piccole, mi chiedo come mi sia perso. Grazie per averlo segnalato! Per quanto riguarda il raggruppamento per la seconda lettera: oltre al raggruppamento per K puoi semplicemente usare |[AGPSUV]Go |[BGLW]Sma non cambierà affatto il punteggio totale.
Thriller

2

APL (Dyalog) , 108 byte

1∊⍷∘'TTHSZWMSGSONPKNZMWVIDFKELSCYJPNFJMTVCXBNRBWSHKYAUGGYBTLCCKIMVGBSBBMZAINAGDMOBDIEJEMYMUNUPGSRLKTKTOTCTZ'

Provalo online!

Utilizzo della stringa di ricerca di ovs.

Traffico per mancini = 1.
Traffico a destra = 0.


2

Javascript (ES6), 118 116 byte

Salvato 2 byte grazie a @Craig Ayre

s=>"SZAINAGGDMOAUGBBSCCKIMWSHKYLSBMVGSGYBDBTHBWBNRMZMTLCXSRTVCYPNFKNPKEFJMYVIDIEJPGJEMUNZWMSONULKTKTOTTCTZ".match(s)

Restituzioni nullper traffico a destra

Casi test


Potresti usare String.prototype.match()e avere il traffico per la mano destra indicato da null? Salverebbe 2 byte
Craig Ayre l'

1

Vim, 117 109 108 sequenze di tasti

oSZAINAGGDMOAUGBBSCCKIMWSHKYLSBMVGSGYBDBTHBWBNRMZMTLCXSRTVCYPNFKNPKEFJMYVIDIEJPGJEMUNZWMSONULKTKTOTTCTZ␛kg*D

Provalo online! (sostituire SEnell'intestazione con il prefisso internazionale)

è la chiave di escape. Il programma stampa il seguente testo per il traffico a destra:

SZAINAGGDMOAUGBBSCCKIMWSHKYLSBMVGSGYBDBTHBWBNRMZMTLCXSRTVCYPNFKNPKEFJMYVIDIEJPGJEMUNZWMSONULKTKTOTTCTZ

Spiegazione

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

Apprezzo che tu stia rispondendo nel mio editor di testo preferito, un uso intelligente della scelta di un valore giusto !
ბიმო

1

MY-BASIC , 162 byte

Funzione anonima che accetta l'input come stringa non imballata (ovvero, senza parentesi) e l'output alla console

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

Resi 0per mancini e 1per mancini, provalo online!


1

Yabasic , 127 byte

Funzione anonima che accetta input come stringa non imballata (no "...") e genera 0se il Paese è destrorso e 1se il Paese è mancino.

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

Provalo online!


1

C (gcc) , 115 107 byte

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

Provalo online!

Restituisce 0se mancino. -4 grazie a @JonathanFrech


Non potresti definire la tua funzione per prendere un short*parametro come?
Jonathan Frech,

1

K, 105 byte

Per informazioni sulle lingue K / Q consultare code.kx.com

Utilizzare: Country-code (stringa di 2 caratteri, esempio "XY") dopo

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

Genera 1b(traffico per mancini) o 0b(non per mancini)

Spiegazione:

  • 5h$"XX"genera codici ASCII per ogni carattere della stringa di 2 caratteri (codice paese), l'esempio 5h$"TB"genera 84 66

  • -65+integerListsottrai 65 a ciascun numero intero nell'elenco. L'esempio -65+5h$"TB"genera 19 1

  • 26/:integerListcalcola un numero intero equivalente a quell'elenco come cifre in 26 base. L'esempio 26/:-65+5h$"TB"genera 495 (codice paese come numero intero)

  • in[;listOfCountryCodesAsIntegers]@xrestituisce un valore booleano (1b = vero, 0b = falso). Vero se x è nell'elenco

  • +\-48+5h$"62<729151368=1>a1A23<6<C181A83?45;488F411112115:235Q43r141738353135247F42Tl<:" calcola l'elenco di numeri interi per ciascun prefisso nazionale con traffico per mancini

    • "62<729151368=1>a1A23<6<C181A83?45;488F411112115:235Q43r141738353135247F42Tl<:"è la "stringa di distanza" (distanza tra ciascuna coppia di codici di paese intero in ordine crescente, codificata come carattere). La distanza n è codificata come ascii char 48 + n

    • -48+5h$".." calcola il valore ASCII di ciascun carattere nella stringa ".." e recupera la distanza originale come codice ASCII - 48. Il risultato è l'elenco delle distanze

    • +\integerList calcola la somma parziale degli elementi dall'elenco -> codici interi-paese-assoluti dalle distanze tra i codici.

GLI APPUNTI.-

  • ritorna 0b per qualsiasi codice paese non mancino, compresi i codici paese non validi
  • Possiamo salvare un carattere riformattando il codice, ma è necessario scrivere il codice paese "XX" all'interno del codice (non so se sia valido, ma sono abbastanza sicuro che non sia elegante) in[26/:-65+5h$"XX";+\-48+5h$"..."]
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.