Regras
Dado um código de país ISO3166-1-Alpha-2, sua tarefa é decidir a direção do tráfego para esse país:
- A entrada será um código de país válido (válido, pois é um elemento das duas listas fornecidas)
- A entrada pode ser uma lista de dois caracteres em vez de uma sequência, se ajudar
- Você pode optar por receber as entradas em minúsculas
- Você escolherá um valor, digamos, à direita (sua escolha) e emitirá esse valor se o tráfego nesse país for destro e qualquer outra coisa no outro caso
- Você só precisa manipular códigos de países que estão contidos em uma destas listas:
Estes são todos os países onde o tráfego é canhoto:
['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 aqui estão todos os países onde o tráfego é destro:
['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']
Para completar, eis um arquivo CSV que contém todos os valores junto com os nomes dos países.
Casos de teste
Supondo que você optou pela saída L
para tráfego para canhotos, aqui estão alguns casos de teste válidos:
'PY' -> 'python'
'PN' -> 'L'
'CN' -> 33
'GY' -> 'L'
Nota: Há uma pequena chance de que eu tenha perdido um país ou que haja uma classificação incorreta e que não alterarei as especificações porque isso pode invalidar as respostas. Se cometi um erro, peço desculpas sinceramente, por favor, não se ofenda!
CountryData
pode dar a quantidade de estradas e ferrovias etc em um país pavimentada e não pavimentada, mas não sua direção tráfego :(Respostas:
Python 2 ,
145136112109 bytesExperimente online!
Saídas
-1
para tráfego à direita.A sequência é gerada automaticamente com este script Retina .Obrigado a totallyhuman pela seqüência de pesquisa mais curta de 9 bytes. Consegui obter mais 24 bytes de desconto através da sugestão do AdmBorkBork .Obteve a string de pesquisa 3 bytes mais curta usando um script python.
fonte
OT
não existem, você pode se livrar de alguns espaços comoTO TC
essesTOTC
?Geléia , 61 bytes
Muito obrigado a @ Mr.Xcoder por me ajudar a montar isso.
Salvo 1 byte graças a @JonathanAllan
Retorna
0
para destros ou1
canhotos.Experimente online!
Quão?
Convertemos cada código de país em um número inteiro N analisando-o como base-256 e aplicamos a seguinte função hash, que é livre de colisões para tráfego com a mão esquerda ou com a mão direita:
Isso leva à seguinte lista de valores para tráfego para canhotos:
A diferença média entre duas entradas consecutivas é próxima a 8. Codificamos em delta a lista com incrementos no intervalo [1 ... 16]. Isso significa que sempre que um incremento é maior que 16, precisamos inserir um valor intermediário em um slot não utilizado (precisamos garantir que ele não seja atingido pelo tráfego à direita). Mas a função hash foi escolhida de tal maneira que só precisamos fazer isso em algumas posições. Isto dá:
Convertemos esta lista do bijective base-16 no seguinte número inteiro:
que se torna
“ŒỴ¬Ʋ>r¤dị|®ædHẇ⁸ɗH^CŒ³ẇPḷgȤƲȥƓƑ®Ƭṅḅ4ṛḟṄ’
na codificação base-250 da Jelly.O primeiro link reconstrói a lista original desse número inteiro e o segundo testa se ele contém o hash da entrada.
fonte
“ŒỴ¬Ʋ>r¤dị|®ædHẇ⁸ɗH^CŒ³ẇPḷgȤƲȥƓƑ®Ƭṅḅ4ṛḟṄ’ḃ⁴
(evitando assim o incremento) ... também (não economize byte, mas)¢
chama o último link como um nilad.PowerShell ,
161148 bytesExperimente online!
Correspondência de padrão de regexingênuo. SaídasTrue
para canhotos eFalse
destros.Economizou 13 bytes graças ao mercator golfing a regex.
fonte
[CFHW][CJKSXY]
(-5), I e J em[IJ][DEMNP]
(-3), diminuir N emN[AFP-Z]
(-1) e Z emZ.
(-4), para um total de -13 bytes. Novo 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.
Haskell , 137 bytes
-5 bytes graças a ovs.
Experimente online!
Gerou a sequência original manualmente.
fonte
TTHSZWMSGSONPKNZMWVIDFKELSCYJPNFJMTVCXBNRBWSHKYAUGGYBTLCCKIMVGBSBBMZAINAGDMOBDIEJEMYMUNUPGSRLKTKTOTCTZ
SZAINAGGDMOAUGBBSCCKIMWSHKYLSBMVGSGYBDBTHBWBNRMZMTLCXSRTVCYPNFKNPKEFJMYVIDIEJPGJEMUNZWMSONULKTKTOTTCTZ
- Experimente online!05AB1E ,
8268 bytesSaídas 1 para tráfego à esquerda e 0 para tráfego à direita.
Experimente online! ou como um conjunto de testes
Usa a string gerada por totallyhuman e aprimorada por ovs
fonte
05AB1E , 76 bytes
Experimente online!
Produz a seguinte string:
Se eu dividir isso em espaços e intercalar o alfabeto em cada sequência, resultará em todos os estados que conduzem no lado esquerdo.
1 para a esquerda, 0 para a direita; Emigna é melhor, mas isso parecia diferente o suficiente para postar :).
fonte
Gelatina , 69 bytes
Um link monádico que pega uma lista de caracteres e retorna
1
se for deixado (0
se for direito).Experimente online!
Quão?
Usa o método conforme implementado totalmente humano / ovs .
Além disso, o que eu fiz independentemente veio com 72 bytes :
Também um link monádico, com uma lista de caracteres e retornando
1
se for deixado (0
se for direito).Experimente online!
Quão?
fonte
Befunge,
155152147147 bytesExperimente online!
Saídas
80
para um país destro e qualquer outra coisa indica um país canhoto.Explicação
A linha inferior do código contém uma representação de todos os países canhotos. Esta é uma lista dos primeiros caracteres dos códigos de país, agrupados por seu segundo caractere. O final de cada grupo é marcado com minúsculas no último caractere do grupo.
Por exemplo, o primeiro grupo
Nz
,, representaNA
eZA
. O segundo grupo,BSg
, representaBB
,SB
eGB
. Há um grupo para cada letra do alfabeto, exceto a letraQ
(nenhum código de país esquerdo termina emQ
). Esse grupo vazio é representado pelo caractere{
, pois obviamente não corresponde a nenhum código de país válido.Para determinar se um determinado código de país corresponde a uma dessas entradas, iteramos a lista verificando se algum dos caracteres da lista corresponde ao primeiro caractere de nossa entrada (mod 32 para explicar o caso) e também que o grupo correspondente , corresponde ao segundo caractere da entrada. O caractere do grupo começa como
A
e é incrementado toda vez que encontramos uma letra minúscula na lista.Saímos quando encontramos uma correspondência, produzindo o último valor de caractere na pilha (que será o primeiro caractere do código do país - possivelmente em minúscula). Caso contrário, sairemos quando iterarmos por toda a lista; nesse caso, apresentaremos o último número na pilha, que é sempre 80.
fonte
Lote do Windows,
289279199193181130118 bytesProduz a string dos ovs para tráfego à esquerda, mas não gera nada.
Nota: Observei que, se a entrada contiver algum código de país na lista acima, ela ainda produzirá L. No entanto, isso não viola a regra de desafio, pois o OP mencionou que apenas os códigos de país precisam ser manipulados.
Explicação:
fonte
C (gcc) ,
181169165 bytesExperimente online!
fonte
82
salvar um byte?9
, por exemplo, produziria um caractere de tabulação.Python 2 , 144 bytes
Experimente online!
Imprime
True
para a esquerda,False
para a direita.fonte
Retina ,
150117 bytesExperimente online!
fonte
Excel VBA, 118 bytes
Função de janela imediata VBE anônima que recebe entrada da célula
[A1]
e sai0
se o país for destrousa a string dos ovs
fonte
Japt,
12610097 bytesUsa
astring de pesquisa dos ovsdetotallyhuman . Recebe entradas em minúsculas e saídasfalse
para RHD outrue
outros.Tente
Tudo entre os backticks é a string de pesquisa em minúscula e compactada e
ø
verifica se ela contém a entradaU
,.fonte
Pitão ,
60575550474644 bytesExecutar online
Leva a entrada como uma string entre aspas maiúsculas (
'AI'
). Retorna3
para esquerda e não3
para direita.Como funciona
Gerando a corda mágica
fonte
sed,
148 + 1145 + 1143 + 1142 + 1 bytesUm byte extra para
-r
sinalizador (regexes estendidas do POSIX).Produz string vazia para tráfego com a mão esquerda, código original do país para o tráfego com a mão direita.
Exemplo:
Histórico de edições explicado:
sed,
158 + 1155 + 1153 + 1152 + 1 bytes, resposta não vaziaPequena variação do anterior. Retorna
L
para tráfego para canhotos.fonte
J[^O]
vez deJ[EMP]
?[^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]
era na verdade uma vez na minha lista de expressões regulares menores, eu me pergunto como eu perdi. Obrigado por apontar isso! Quanto ao agrupamento pela segunda letra: além do agrupamento por K, você pode simplesmente usar|[AGPSUV]G
ou,|[BGLW]S
mas não muda a pontuação total.APL (Dyalog) , 108 bytes
Experimente online!
Usando a string de pesquisa por ovs.
Tráfego para canhotos
1
.Tráfego à direita
0
.fonte
Javascript (ES6),
118116 bytesGuardado 2 bytes graças a @Craig Ayre
Retorna
null
para tráfego à direitaCasos de teste
Mostrar snippet de código
fonte
String.prototype.match()
e ter o tráfego à direita indicado pornull
? Economizaria 2 bytesVim,
117109108 pressionamentos de teclasExperimente online! (substituir
SE
no cabeçalho pelo código do país)␛
é a chave de escape. O programa imprime o seguinte texto para tráfego à direita:Explicação
fonte
MY-BASIC , 162 bytes
Função anônima que recebe a entrada como uma seqüência de caracteres desembrulhada (ou seja, sem parênteses) e gera para o console
Retorna
0
para1
tráfego com a mão direita e com a mão esquerda, experimente online!fonte
Yabasic , 127 bytes
Função anônima que recebe entrada como uma sequência não empacotada (no
"..."
) e gera0
se o país for destro e1
se for canhoto.Experimente online!
fonte
C (gcc) ,
115107 bytesExperimente online!
Retorna
0
se for canhoto. -4 graças a @JonathanFrechfonte
short*
parâmetro as?K, 105 bytes
Para obter informações sobre idiomas K / Q, consulte code.kx.com
Use: Código do país (sequência de 2 caracteres, exemplo "XY") após
Gera
1b
(tráfego canhoto) ou0b
(não tráfego canhoto)Explicação:
5h$"XX"
gera códigos ascii para cada caractere da cadeia de 2 caracteres (código do país), o exemplo5h$"TB"
gera 84 66-65+integerList
substract 65 para cada número inteiro na lista. Exemplo-65+5h$"TB"
gera 19 126/:integerList
calcula um número inteiro equivalente a essa lista como dígitos em 26 bases. Exemplo26/:-65+5h$"TB"
gera 495 (código do país como número inteiro)in[;listOfCountryCodesAsIntegers]@x
retorna valor booleano (1b = true, 0b = false). Verdadeiro se x estiver na lista+\-48+5h$"62<729151368=1>a1A23<6<C181A83?45;488F411112115:235Q43r141738353135247F42Tl<:"
calcula a lista de números inteiros para cada código de país com tráfego para canhotos"62<729151368=1>a1A23<6<C181A83?45;488F411112115:235Q43r141738353135247F42Tl<:"
é a 'string de distância' (distância entre cada par de códigos de países inteiros em ordem crescente, codificada como char). A distância n é codificada como ascii char 48 + n-48+5h$".."
calcula o valor ASCII de cada caractere na string ".." e recupera a distância original como código ASCII - 48. O resultado é a lista de distâncias+\integerList
calcula a soma parcial de itens da lista -> códigos inteiros absolutos de países a partir das distâncias entre códigos.NOTAS.-
0b
para qualquer código de país que não seja canhoto, incluindo códigos de países não válidosin[26/:-65+5h$"XX";+\-48+5h$"..."]
fonte