ISO 3166-1 é o padrão que define todos os códigos de países. Os conhecidos códigos de duas letras (EUA, GB, JP etc.) são chamados de códigos Alpha-2.
Com duas letras, existem apenas 26 2 = 676 códigos possíveis, que podem ser bem organizados em uma grade. Esta tabela pode ser útil como uma visão geral, para ver quais códigos estão realmente em uso, reservados, etc.
Esse desafio é simples: você deve imprimir todos os códigos atribuídos dessa grade ao STDOUT, usando ASCII simples, exatamente como mostrado abaixo:
AA AC AD AE AF AG AI AL AM AN AO AP AQ AR AS AT AU AW AX AZ
BA BB BD BE BF BG BH BI BJ BL BM BN BO BQ BR BS BT BU BV BW BX BY BZ
CA CC CD CF CG CH CI CK CL CM CN CO CP CR CS CU CV CW CX CY CZ
DE DG DJ DK DM DO DY DZ
EA EC EE EF EG EH EM EP ER ES ET EU EV EW
FI FJ FK FL FM FO FR FX
GA GB GC GD GE GF GG GH GI GL GM GN GP GQ GR GS GT GU GW GY
HK HM HN HR HT HU
IB IC ID IE IL IM IN IO IQ IR IS IT IU IV IW IX IY IZ
JA JE JM JO JP
KE KG KH KI KM KN KP KR KW KY KZ
LA LB LC LF LI LK LR LS LT LU LV LY
MA MC MD ME MF MG MH MK ML MM MN MO MP MQ MR MS MT MU MV MW MX MY MZ
NA NC NE NF NG NI NL NO NP NR NT NU NZ
OA OM
PA PE PF PG PH PI PK PL PM PN PR PS PT PW PY
QA QM QN QO QP QQ QR QS QT QU QV QW QX QY QZ
RA RB RC RE RH RI RL RM RN RO RP RS RU RW
SA SB SC SD SE SF SG SH SI SJ SK SL SM SN SO SR SS ST SU SV SX SY SZ
TA TC TD TF TG TH TJ TK TL TM TN TO TP TR TT TV TW TZ
UA UG UK UM US UY UZ
VA VC VE VG VI VN VU
WF WL WO WS WV
XA XB XC XD XE XF XG XH XI XJ XK XL XM XN XO XP XQ XR XS XT XU XV XW XX XY XZ
YE YT YU YV
ZA ZM ZR ZW ZZ
(Se eu cometi algum erro ao copiá-lo, a tabela aqui neste post é normativa para o desafio, não a da Wikipedia.)
Você pode ou não usar espaços em branco à direita em cada linha que não contenha o *Z
código, mas não além do 77º caractere dessa linha (ou seja, no máximo, você pode transformá-lo em um bloco retangular, terminando em Z
s e espaços). Além disso, você pode ou não usar uma única nova linha final no final.
Isso é código de golfe, então a resposta mais curta (em bytes) vence.
fonte
YT
(Mayotte) é uma supervisão?Respostas:
CJam,
125122121 bytesO exemplo acima usa notação de intercalação para caracteres de controle.
Versão imprimível ( 141 bytes ) para o intérprete online :
Exemplo de execução
fonte
Python 2, 240 bytes
Implementação simples de codificação binária.
O script para gerar o número inteiro é rápido e sujo:
fonte
R=range(26)
....,36)&1<<c+r*26else...
. - Você se importaria de postar seu script para gerar o número inteiro base 36?26else
não é analisável. Eu pensei que tentei remover os parênteses, mas devo ter alguma coisa errada naquele momento!26else
. (Python 2.7.6, no entanto, não o faz.)Ruby,
269 246 241 235227g
é uma matriz em que cada célula que possui um código de país é uma1
e todas as outras são0
. Todas as linhas são escritas atrás e o número binário resultante foi convertido em uma representação base 36. Então eu apenas itero sobre todas as células e verifico se o código deve ser impresso.fonte
{|i|...}
vez dedo|i|...end
e também iniciar a primeira instrução logo após|i|
(sem quebra de linha). Uma maneira mais curta de imprimir sem quebras de linha à direita é$><<
. Você pode substituir"\n"
por$/
e"1"
com?1
. E um caminho mais curto para gerar o alfabeto él=[*?A..?Z]*''
;)print
por$><<
uma matriz detrue
efalse
é impresso. Como eu uso isso corretamente?<<
é um método de$>
, então você tem que usar parênteses:$><<(1==2?3:4)
. A propósito, o mais curto que obtive disso são 231 caracteres: pastebin.com/iabBNh6S .print
ou$><<
, use apenas um.print
aceita vários parâmetros separados por,
, para que$><<
você possa concatenar as duas partes a serem produzidas.CJam,
152 149 148 145 144 140139 bytes, imprimívelObrigado Dennis pelas dicas.
Abordagem bastante direta. Como funciona:
Experimente online aqui
(Agora, apenas se eu soubesse como fazer uma versão de personagem não imprimível)
fonte
:i
não é necessário;b
funciona bem com uma string como seu segundo argumento. 2. Se você usar em'[,
vez de91,
, não precisará:c
.'[,65>
rota, mas eu ainda estava colocando um:c
depois levando a mesma bytes, portanto, não usá-lo: DJavaScript ES6,
336322A cadeia grande é cada linha colocada em binário (
1
se houver um código de país,0
se não houver) e, em seguida, base36. Experimente no Firefox em http://jsfiddle.net/twduhqz6/1/ .fonte
Bash + coreutils, 361
Remoção básica de expressões regulares dos combos que não queremos. Alguma leve compressão do regex:
fonte
Haskell, 357
Porra, isso é meio difícil.
Imprime em STDOUT quando compilado (portanto, o principal). Usar a compactação adequada tornaria isso muito mais curto ... idéias bem-vindas
fonte
JavaScript (E6) 350
Não é a ferramenta certa para esta tarefa (talvez graças a String.fromCharCode ?)
fonte
J, 172 caracteres (imprimíveis)
Quebras de linha para legibilidade. Empacotamento binário direto, com seis bits por caractere de seqüência de caracteres (deslocamento 34 para entrar no intervalo imprimível e evitar
'
).fonte
Língua Wolfram, 244
255bytesO número da resposta do fireflame241 foi usado e reembalado na forma de 36 anos.
Nenhum dado interno do país foi usado.
fonte
PHP, 323 bytes
Experimente online!
fonte
C, 373 bytes
Experimente online
fonte
Língua Wolfram, 389 bytes
Mais legível:
A Wolfram possui uma lista de códigos ISO de países, portanto esse deve ser o idioma perfeito para o trabalho. No entanto, ele conhece apenas os códigos dos países que são realmente os códigos dos países, e não os reservados para outros usos, que ainda estão incluídos nesta tabela. Portanto, precisamos adicionar muitos códigos de país manualmente.
Explicação:
""<>r[r[#," "]&/@Array[CharacterRange["A","Z"][[{##}]]&,{26,26}],n="\n"]
é uma matriz de string de todos os pares de letras de "A" a "Z".#~c~"CountryCode"&/@c[]
(ondec=CountryData
é definido anteriormente) fornece uma lista de todos os códigos de países que a Wolfram Language conhece. Alguns deles sãoMissing["NotApplicable"]
, então removemos aqueles comCases[...,_String]
.(""<>#&/@Partition[Characters@"AACP...AXJA",2,1])
cria 83 dos códigos de país restantes manualmente usando uma sequência de 138 caracteres, em que os pares de caracteres adjacentes são os códigos de país necessários. Essa seqüência foi encontrada mais ou menos à mão (com a ajuda daFindPostmanTour
função!), E há algumas repetições, portanto, há potencialmente mais golfe a ser feito aqui.StringReplace[ <full array> ,{"GZ"|"WE"->" ",x:("X"~~_~~" "|n)|##&@@( <known country codes> ~Join~ <extra codes> ):>x,Except@n->" "}]
primeiro se livra de dois códigos, "GZ" e "WE", que Wolfram acha que são códigos de países, mas não estão de acordo com a tabela; depois combina todos os códigos que começam com "X", mais os códigos conhecidos e os que adicionamos manualmente, e os substitui por eles mesmos; finalmente, tudo o que não é uma nova linha e ainda não foi correspondido é transformado em um espaço.fonte
Gelatina ,
121120112110 bytes (não concorrente)Experimente online!
-8 bytes graças a @Dennis
-2 bytes graças à ideia de @ Dennis de produtos cartesianos
Como funciona
Simples: o programa multiplica uma grande lista binária por outra grande lista para obter a maior parte da saída e depois a formata
Meio: o programa codifica a grande lista binária
em um número grande, codificando quais códigos de países são atribuídos. Cada elemento é multiplicado em cada elemento de cada código de país possível para obter uma lista de todos os códigos de países atribuídos, que são formatados na lista de saída.
Nível mais baixo:
A maior parte do programa usa dados codificados em:
É um número inteiro de base 250 que contém o número decimal
233462323092263584350936137603939798267906095227198731310610883427614237299604158551774020670253062350084519623333781892392013977676150946873601610983221266427394582295973500719992107281184544524840476937
, que é transformado na lista binária acima.Por questões de brevidade, vamos chamar esse valor
c
e substituir a cadeia longa porc
na explicaçãofonte
;⁶$€Fs78;⁷$€
pode ser substituído pors26G
.G
irá preencher cadeias de caracteres vazias com espaços.