ISO 3166-1 es el estándar que define todos los códigos de país. Los conocidos códigos de dos letras (US, GB, JP, etc.) se denominan códigos Alpha-2.
Con dos letras, solo hay 26 2 = 676 códigos posibles, que se pueden organizar muy bien en una cuadrícula. Esta tabla puede ser útil como una descripción general, para ver qué códigos están realmente en uso, reservados, etc.
Este desafío es simple: debe imprimir todos los códigos asignados de esta cuadrícula a STDOUT, utilizando ASCII simple, exactamente como se muestra a continuación:
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
(Si cometí algún error al copiarlo, la tabla aquí en esta publicación es normativa para el desafío, no la de Wikipedia).
Puede usar o no espacios en blanco al final de cada línea que no contenga el *Z
código, pero no más allá del 77. ° carácter de esa línea (es decir, a lo sumo, puede convertirlo en un bloque rectangular que termine en Z
sy espacios). Además, puede o no usar una sola línea final al final.
Este es el código de golf, por lo que gana la respuesta más corta (en bytes).
fuente
YT
(Mayotte) es un descuido?Respuestas:
CJAM,
125122121 bytesLo anterior utiliza la notación de intercalación para los caracteres de control.
Versión imprimible ( 141 bytes ) para el intérprete en línea :
Ejecución de ejemplo
fuente
Python 2, 240 bytes
Implementación directa de codificación binaria.
El script para generar el entero es rápido y sucio:
fuente
R=range(26)
....,36)&1<<c+r*26else...
. - ¿Te importaría publicar tu script para generar el entero base 36?26else
no se puede analizar. ¡Pensé que había intentado eliminar los paréntesis, pero debo haber tenido algo más mal en ese momento!26else
. (Python 2.7.6, sin embargo, no.)Rubí,
269 246 241 235227g
es una matriz donde cada celda que tiene un código de país es ay1
todas las demás lo son0
. Todas las filas se escriben detrás y el número binario resultante se ha convertido en una representación de base 36. Luego solo itero sobre todas las celdas y verifico si se imprimirá el código.fuente
{|i|...}
lugar dedo|i|...end
, y también comenzar la primera declaración justo después|i|
(sin salto de línea). Una forma más corta de imprimir sin salto de línea final es$><<
. Puede reemplazar"\n"
con$/
y"1"
con?1
. Y una forma más corta de generar el alfabeto esl=[*?A..?Z]*''
;)print
con$><<
una matriz detrue
yfalse
está impreso. ¿Cómo uso esto correctamente?<<
es un método$>
, por lo que tiene que utilizar paréntesis:$><<(1==2?3:4)
. Por cierto, lo más corto que obtuve de esto son 231 caracteres: pastebin.com/iabBNh6S .print
o$><<
, use solo uno.print
acepta múltiples parámetros separados con,
, para$><<
que pueda concatenar las dos piezas a la salida.CJam,
152 149 148 145 144 140139 bytes, imprimibleGracias Dennis por los consejos.
Enfoque bastante sencillo. Cómo funciona:
Pruébalo en línea aquí
(Ahora solo si supiera cómo hacer una versión de personaje no imprimible)
fuente
:i
no es necesario;b
funciona bien con una cadena como segundo argumento. 2. Si usa en'[,
lugar de91,
, no necesita:c
.'[,65>
ruta, pero todavía estaba poniendo un:c
después que conducía a los mismos bytes, por lo que no la usé: DJavaScript ES6,
336322La cadena grande es cada fila puesta en binario (
1
si había un código de país allí,0
si no) y luego base36. Pruébelo en Firefox en http://jsfiddle.net/twduhqz6/1/ .fuente
Bash + coreutils, 361
Eliminación básica de expresiones regulares de los combos que no queremos. Alguna compresión leve de la expresión regular:
fuente
Haskell, 357
Maldición, esto es un poco difícil.
Imprime en STDOUT cuando se compila (por lo tanto, el principal). El uso de una compresión adecuada lo haría mucho más corto ... las ideas son bienvenidas
fuente
JavaScript (E6) 350
No es la herramienta adecuada para esta tarea (¿quizás gracias a String.fromCharCode ?)
fuente
J, 172 caracteres (imprimible)
Saltos de línea para legibilidad. Empaque binario directo, con seis bits por carácter de cadena (desplazamiento 34 para entrar en el rango imprimible y evitar
'
).fuente
Idioma Wolfram, 244
255bytesEl número de la respuesta de fireflame241 se usó y se volvió a empaquetar en forma de 36 arios.
No se utilizaron datos de países incorporados.
fuente
PHP, 323 bytes
Pruébalo en línea!
fuente
C, 373 bytes
Pruébalo en línea
fuente
Wolfram idioma, 389 bytes
Más legible:
Wolfram tiene una lista incorporada de códigos de país ISO, por lo que este debería ser el idioma perfecto para el trabajo. Sin embargo, solo conoce los códigos de país que en realidad son códigos para países, y no los reservados para otros usos, que todavía se incluyen en esta tabla. Por lo tanto, necesitamos agregar muchos códigos de país manualmente.
Explicación:
""<>r[r[#," "]&/@Array[CharacterRange["A","Z"][[{##}]]&,{26,26}],n="\n"]
es un conjunto de cadenas de todos los pares de letras desde "A" hasta "Z".#~c~"CountryCode"&/@c[]
(dondec=CountryData
se define anteriormente) proporciona una lista de todos los códigos de país que Wolfram Language conoce. Un par de estos sonMissing["NotApplicable"]
, así que los quitamos conCases[...,_String]
.(""<>#&/@Partition[Characters@"AACP...AXJA",2,1])
crea 83 de los códigos de país restantes manualmente usando una cadena de 138 caracteres, donde los pares de caracteres adyacentes son los códigos de país requeridos. Esta cadena se encontró más o menos a mano (¡con la ayuda de laFindPostmanTour
función!), Y hay cierta repetición, por lo que potencialmente hay más golf por hacer aquí.StringReplace[ <full array> ,{"GZ"|"WE"->" ",x:("X"~~_~~" "|n)|##&@@( <known country codes> ~Join~ <extra codes> ):>x,Except@n->" "}]
primero se deshace de dos códigos, "GZ" y "WE", que Wolfram cree que son códigos de país pero no están de acuerdo con la tabla; luego coincide con todos los códigos que comienzan con "X", más los códigos conocidos y los que agregamos manualmente, y los reemplaza con ellos mismos; entonces, finalmente, todo lo demás que no sea una nueva línea y que no haya sido emparejado se convierte en un espacio.fuente
Jelly ,
121120112110 bytes (no competitiva)Pruébalo en línea!
-8 bytes gracias a @Dennis
-2 bytes gracias a la idea de @ Dennis de productos cartesianos
Cómo funciona
Simple: el programa multiplica una gran lista binaria con otra gran lista para obtener la mayor parte de la salida, luego la formatea
Medio: el programa codifica la lista binaria grande
en un gran número, codificando qué códigos de país se asignan. Cada elemento se multiplica por elementos por cada elemento de cada posible código de país para obtener una lista de todos los códigos de país asignados, que luego se formatea en la lista de salida.
Nivel inferior:
La mayor parte del programa utiliza datos codificados en:
Es un entero de base 250 que contiene el número decimal
233462323092263584350936137603939798267906095227198731310610883427614237299604158551774020670253062350084519623333781892392013977676150946873601610983221266427394582295973500719992107281184544524840476937
, que se convierte en la lista binaria anterior.Por brevedad, llamemos a este valor
c
y reemplacemos la cadena larga conc
la explicación.fuente
;⁶$€Fs78;⁷$€
puede ser reemplazado cons26G
.G
rellenará cadenas vacías con espacios.