ISO 3166-1 - это стандарт, который определяет все коды стран. Хорошо известные двухбуквенные коды (США, GB, JP и т. Д.) Называются кодами Альфа-2.
С двумя буквами, есть только 26 2 = 676 возможных кодов, которые могут быть удобно расположены в сетке. Эта таблица может быть полезна в качестве обзора, чтобы увидеть, какие коды на самом деле используются, зарезервированы и т. Д.
Эта задача проста: вы должны напечатать все назначенные коды этой сетки в STDOUT, используя простой ASCII, точно так, как показано ниже:
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
(Если я допустил какие-либо ошибки при копировании, таблица в этом посте является нормативной для задачи, а не в Википедии.)
Вы можете или не можете использовать конечные пробелы в каждой строке, которая не содержит *Z
код, но не превышает 77-го символа в этой строке (т. Е. Самое большее, вы можете сделать его прямоугольным блоком, заканчивающимся на Z
s и пробелы). Кроме того, вы можете или не можете использовать одну конечную новую строку в конце.
Это код гольф, поэтому самый короткий ответ (в байтах) выигрывает.
источник
YT
(Майотта) недосмотром?Ответы:
CJam,
125122121 байтВыше используется символ каретки для управляющих символов.
Версия для печати ( 141 байт ) для онлайн-переводчика :
Пример запуска
источник
Python 2, 240 байт
Простая реализация двоичного кодирования.
Скрипт для генерации целого числа быстрый и грязный:
источник
R=range(26)
....,36)&1<<c+r*26else...
. - Не могли бы вы опубликовать свой скрипт для генерации целых чисел в базе 36?26else
не разбирается. Я думал, что пытался убрать скобки, но в тот момент у меня, должно быть, было что-то не так!26else
. (Python 2.7.6, однако, не делает.)Рубин,
269 246 241 235227g
представляет собой матрицу, в которой каждая ячейка, имеющая код страны, представляет собой,1
а все остальные -0
. Все строки записаны позади, и результирующее двоичное число было преобразовано в базовое представление 36. Затем я просто перебираю все ячейки и проверяю, будет ли напечатан код.источник
{|i|...}
вместоdo|i|...end
, а также начинать первый оператор сразу после|i|
(без переноса строки). Более короткий способ печати без разрыва строки$><<
. Вы можете заменить"\n"
с$/
, и"1"
с?1
. И более короткий способ создать алфавитl=[*?A..?Z]*''
;)print
с$><<
матрицейtrue
иfalse
печатается. Как мне использовать это правильно?<<
это метод$>
, так что вы должны использовать круглые скобки:$><<(1==2?3:4)
. Кстати, самое короткое, что я получил от этого, составляет 231 символ: pastebin.com/iabBNh6S .print
или$><<
, используйте только один.print
принимает несколько параметров, разделенных с помощью,
, поскольку$><<
вы можете объединить две части для вывода.CJam,
152 149 148 145 144 140139 байт, для печатиСпасибо Деннису за указатели.
Довольно простой подход. Как это работает:
Попробуйте это онлайн здесь
(Теперь только если бы я знал, как сделать непечатную версию персонажа)
источник
:i
не нужен;b
отлично работает со строкой в качестве второго аргумента. 2. Если вы используете'[,
вместо91,
, вам не нужно:c
.'[,65>
маршрут, но я все еще ставил:c
после него ведущие к тем же байтам, поэтому не использовал его: DJavaScript ES6,
336322Большая строка - это каждая строка, помещенная в двоичный файл (
1
если там был код страны,0
если нет), а затем base36. Попробуйте это в Firefox на http://jsfiddle.net/twduhqz6/1/ .источник
Bash + coreutils, 361
Основное удаление регулярных выражений комбо мы не хотим. Некоторое легкое сжатие регулярного выражения:
источник
Хаскелл, 357
Черт, это довольно сложно.
Печатает в STDOUT при компиляции (таким образом, основной). Использование правильного сжатия сделало бы это намного короче ... идеи приветствуются
источник
JavaScript (E6) 350
Не подходящий инструмент для этой задачи (может быть, благодаря String.fromCharCode ?)
источник
J, 172 символа (для печати)
Разрывы строк для удобочитаемости. Простая двоичная упаковка, с шестью битами на символ строки (смещение 34, чтобы войти в диапазон печати, а также избежать
'
).источник
Язык Wolfram, 244
255байтНомер из ответа fireflame241 был использован и перепакован в 36-ю форму.
Встроенные данные по стране не использовались.
источник
PHP, 323 байта
Попробуйте онлайн!
источник
C 373 байта
Попробуйте онлайн
источник
Вольфрам язык, 389 байт
Более читабельно:
В Wolfram есть встроенный список кодов стран ISO, так что это должен быть идеальный язык для работы. Однако он знает только о кодах стран, которые на самом деле являются кодами для стран, а не кодами, зарезервированными для других целей, которые все еще включены в эту таблицу. Поэтому нам нужно добавить множество кодов стран вручную.
Объяснение:
""<>r[r[#," "]&/@Array[CharacterRange["A","Z"][[{##}]]&,{26,26}],n="\n"]
массив строк всех пар букв от «А» до «Z».#~c~"CountryCode"&/@c[]
(гдеc=CountryData
определено ранее) дает список всех кодов стран, о которых знает Wolfram Language. Несколько из нихMissing["NotApplicable"]
, поэтому мы удаляем те сCases[...,_String]
.(""<>#&/@Partition[Characters@"AACP...AXJA",2,1])
составляет 83 из оставшихся кодов стран вручную, используя строку из 138 символов, где пары соседних символов являются необходимыми кодами стран. Эта строка была найдена более или менее вручную (с помощьюFindPostmanTour
функции!), И здесь есть некоторое повторение, поэтому здесь можно сделать еще больше игры в гольф.StringReplace[ <full array> ,{"GZ"|"WE"->" ",x:("X"~~_~~" "|n)|##&@@( <known country codes> ~Join~ <extra codes> ):>x,Except@n->" "}]
сначала избавляется от двух кодов, «GZ» и «WE», которые, как считает Вольфрам, являются кодами стран, но не соответствуют таблице; затем сопоставляет все коды, начинающиеся с «X», плюс известные коды и те, которые мы добавили вручную, и заменяет их на себя; затем, наконец, все остальное, которое не является новой строкой и еще не сопоставлено, превращается в пробел.источник
Желе ,
121120112110 байт (неконкурентный)Попробуйте онлайн!
-8 байт благодаря @Dennis
-2 байта благодаря идее @ Денниса о декартовых произведениях
Как это работает
Просто: программа умножает один большой двоичный список на другой большой список, чтобы получить большую часть результата, а затем форматирует его
Средний: программа кодирует большой двоичный список
в одно большое число, кодирующее, какие коды страны назначены. Каждый элемент умножается поэлементно на каждый элемент каждого возможного кода страны, чтобы получить список всех назначенных кодов стран, который затем форматируется в выходной список.
Нижний уровень:
Основная часть программы использует данные, закодированные в:
Это целое число base-250, которое содержит десятичное число
233462323092263584350936137603939798267906095227198731310610883427614237299604158551774020670253062350084519623333781892392013977676150946873601610983221266427394582295973500719992107281184544524840476937
, которое превращается в приведенный выше двоичный список.Для краткости давайте назовем это значение
c
и заменим длинную строкуc
на в объясненииисточник
;⁶$€Fs78;⁷$€
можно заменить наs26G
.G
заполнит пустые строки пробелами.