ISO 3166-1 ist die Norm, die alle Ländercodes definiert. Die bekannten Zwei-Buchstaben-Codes (US, GB, JP usw.) werden als Alpha-2-Codes bezeichnet.
Mit zwei Buchstaben gibt es nur 26 2 = 676 mögliche Codes, die sich gut in einem Raster anordnen lassen. Diese Tabelle kann als Übersicht hilfreich sein, um zu sehen, welche Codes tatsächlich verwendet, reserviert usw. werden.
Diese Herausforderung ist einfach: Sie müssen alle zugewiesenen Codes dieses Rasters mit einfachem ASCII an STDOUT ausgeben, genau wie unten gezeigt:
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
(Wenn ich Fehler beim Kopieren gemacht habe, ist die Tabelle hier in diesem Beitrag für die Herausforderung normativ und nicht die auf Wikipedia.)
Sie können abschließende Leerzeichen in jeder Zeile verwenden, die den *Z
Code nicht enthält , jedoch nicht hinter dem 77. Zeichen in dieser Zeile (dh Sie können höchstens einen rechteckigen Block erstellen, der mit Z
s und Leerzeichen endet ). Außerdem können Sie am Ende möglicherweise eine einzelne nachgestellte neue Zeile verwenden oder nicht.
Dies ist Codegolf, daher gewinnt die kürzeste Antwort (in Bytes).
quelle
YT
(Mayotte) ein Versehen?Antworten:
CJam,
125122121 BytesOben wird die Caret-Notation für Steuerzeichen verwendet.
Druckversion ( 141 Byte ) für den Online-Dolmetscher :
Beispiellauf
quelle
Python 2, 240 Bytes
Einfache Implementierung der binären Codierung.
Das Skript zum Generieren der Ganzzahl ist schnell und fehlerhaft:
quelle
R=range(26)
....,36)&1<<c+r*26else...
. - Würde es Ihnen etwas ausmachen, Ihr Skript zur Generierung der Base-36-Ganzzahl zu veröffentlichen?26else
nicht analysierbar. Ich dachte, ich hätte versucht, die Klammern zu entfernen, aber an diesem Punkt muss noch etwas falsch gelaufen sein!26else
. (Python 2.7.6 jedoch nicht.)Ruby,
269 246 241 235227g
ist eine Matrix, in der jede Zelle mit einem Ländercode a ist1
und alle anderen eine0
. Alle Zeilen werden zurückgeschrieben und die resultierende Binärzahl wurde in eine Basis 36-Darstellung umgewandelt. Dann iteriere ich einfach über alle Zellen und überprüfe, ob der Code gedruckt werden soll.quelle
{|i|...}
anstelle vondo|i|...end
auch die erste Anweisung direkt danach|i|
(ohne Zeilenumbruch) verwenden. Eine kürzere Möglichkeit zum Drucken ohne Zeilenumbruch ist$><<
. Sie können"\n"
mit$/
und"1"
mit ersetzen?1
. Und ein kürzerer Weg, um das Alphabet zu generieren, istl=[*?A..?Z]*''
;)print
mit$><<
einer Matrix austrue
und ersetztfalse
wird gedruckt. Wie verwende ich das richtig?<<
ein Verfahren zur Herstellung ist$>
, so dass Sie verwenden Klammern haben:$><<(1==2?3:4)
. Der kürzeste, den ich dabei bekommen habe, sind übrigens 231 Zeichen: pastebin.com/iabBNh6S .print
oder verwenden$><<
, verwenden Sie nur eine.print
Akzeptiert mehrere mit getrennte Parameter,
, da$><<
Sie die beiden auszugebenden Teile verketten können.CJam,
152 149 148 145 144 140139 Bytes, druckbarDanke Dennis für die Hinweise.
Ziemlich unkomplizierter Ansatz. Wie es funktioniert:
Probieren Sie es hier online aus
(Jetzt nur, wenn ich wusste, wie man eine nicht druckbare Zeichenversion macht)
quelle
:i
wird nicht benötigt;b
funktioniert gut mit einem String als zweites Argument. 2. Wenn Sie'[,
statt verwenden91,
, brauchen Sie nicht:c
.'[,65>
Route tatsächlich ausprobiert , aber ich habe immer noch ein ":c
danach" gesetzt, das zu denselben Bytes führt. Daher habe ich es nicht verwendet: DJavaScript ES6,
336322Die große Zeichenfolge wird in jede Zeile binär geschrieben (
1
wenn es dort einen Ländercode gab,0
wenn nicht) und dann base36. Probieren Sie es in Firefox unter http://jsfiddle.net/twduhqz6/1/ aus .quelle
Bash + Coreutils, 361
Grundlegende Regex-Entfernung der Combos, die wir nicht wollen. Eine leichte Kompression des Regex:
quelle
Haskell, 357
Verdammt, das ist irgendwie schwer.
Druckt beim Kompilieren auf STDOUT (also auf das Hauptverzeichnis). Die richtige Komprimierung würde dies viel kürzer machen. Ideen sind willkommen
quelle
JavaScript (E6) 350
Nicht das richtige Werkzeug für diese Aufgabe (vielleicht dank String.fromCharCode ?)
quelle
J, 172 Zeichen (druckbar)
Zeilenumbrüche zur besseren Lesbarkeit. Einfaches binäres Packen mit sechs Bits pro Zeichenkette (Offset 34, um in den druckbaren Bereich zu gelangen sowie zu vermeiden
'
).quelle
Wolfram-Sprache, 244
255BytesDie Nummer aus der Antwort von fireflame241 wurde verwendet und in eine 36-stellige Form umgepackt.
Es wurden keine eingebauten Länderdaten verwendet.
quelle
PHP, 323 Bytes
Probieren Sie es online!
quelle
C 373 Bytes
Probieren Sie es online aus
quelle
Wolfram-Sprache, 389 Bytes
Besser lesbar:
Wolfram verfügt über eine integrierte Liste von ISO-Ländercodes, daher sollte dies die perfekte Sprache für den Job sein. Es sind jedoch nur die Ländercodes bekannt, die tatsächlich die Codes für Länder sind, und nicht die Codes, die für andere Zwecke reserviert sind, die in dieser Tabelle noch enthalten sind. Wir müssen daher viele Ländercodes manuell hinzufügen.
Erläuterung:
""<>r[r[#," "]&/@Array[CharacterRange["A","Z"][[{##}]]&,{26,26}],n="\n"]
ist ein String-Array aller Buchstabenpaare von "A" bis "Z".#~c~"CountryCode"&/@c[]
(woc=CountryData
früher definiert) gibt eine Liste aller Ländercodes an, die Wolfram Language kennt. Ein paar davon sindMissing["NotApplicable"]
, also entfernen wir diese mitCases[...,_String]
.(""<>#&/@Partition[Characters@"AACP...AXJA",2,1])
83 der verbleibenden Ländercodes werden manuell mithilfe einer 138-stelligen Zeichenfolge erstellt, wobei die Paare benachbarter Zeichen die erforderlichen Ländercodes sind. Diese Saite wurde mehr oder weniger von Hand gefunden (mit Hilfe derFindPostmanTour
Funktion!), Und es gibt einige Wiederholungen, so dass hier möglicherweise mehr Golf gespielt werden muss.StringReplace[ <full array> ,{"GZ"|"WE"->" ",x:("X"~~_~~" "|n)|##&@@( <known country codes> ~Join~ <extra codes> ):>x,Except@n->" "}]
Zuerst werden die beiden Codes "GZ" und "WE" beseitigt, die laut Wolfram Ländercodes sind, aber nicht der Tabelle entsprechen. Dann werden alle mit "X" beginnenden Codes sowie die bekannten und manuell hinzugefügten Codes abgeglichen und durch ihre eigenen ersetzt. dann wird schließlich alles andere, was kein Zeilenumbruch ist und noch nicht abgeglichen wurde, in ein Leerzeichen umgewandelt.quelle
Jelly ,
121120112110 Bytes (nicht konkurrierend)Probieren Sie es online!
-8 Bytes dank @Dennis
-2 Bytes dank der Idee von @ Dennis von kartesischen Produkten
Wie es funktioniert
Einfach: Das Programm multipliziert eine große Binärliste mit einer anderen großen Liste, um den größten Teil der Ausgabe zu erhalten, und formatiert sie dann
Mittel: Das Programm codiert die große Binärliste
in eine große Zahl, die codiert, welche Ländercodes zugewiesen sind. Jedes Element wird elementweise mit jedem Element jedes möglichen Ländercodes multipliziert, um eine Liste aller zugewiesenen Ländercodes zu erhalten, die dann in die Ausgabeliste formatiert werden.
Niedrigeres Level:
Der Großteil des Programms verwendet Daten, die codiert sind in:
Es ist eine Basis-250-Ganzzahl, die die Dezimalzahl enthält
233462323092263584350936137603939798267906095227198731310610883427614237299604158551774020670253062350084519623333781892392013977676150946873601610983221266427394582295973500719992107281184544524840476937
, die in die obige Binärliste umgewandelt wird.Nennen wir der Kürze halber diesen Wert
c
und ersetzen Sie die lange Zeichenfolgec
in der Erläuterung durchquelle
;⁶$€Fs78;⁷$€
kann durch ersetzt werdens26G
.G
füllt leere Zeichenketten mit Leerzeichen auf.