Schon bald sind 50 Jahre vergangen, seit IBM seine System / 360- Computerfamilie vorgestellt hat. Dies waren die ersten, die den EBCDIC- Zeichensatz verwendeten.
Zu diesem Anlass wollen wir sehen, wer das kürzeste Programm schreiben kann, mit dem "gewöhnlicher" Text in die EBCDIC-Codepage 037 konvertiert werden kann. Wir verwenden eine Übersetzungstabelle aus Wikipedia, die CP037 einer Obermenge von ISO-8859-1 zuordnet :
EBCDIC037_to_Latin1 = [
0x00,0x01,0x02,0x03,0x9c,0x09,0x86,0x7f,0x97,0x8d,0x8e,0x0b,0x0c,0x0d,0x0e,0x0f,
0x10,0x11,0x12,0x13,0x9d,0x85,0x08,0x87,0x18,0x19,0x92,0x8f,0x1c,0x1d,0x1e,0x1f,
0x80,0x81,0x82,0x83,0x84,0x0a,0x17,0x1b,0x88,0x89,0x8a,0x8b,0x8c,0x05,0x06,0x07,
0x90,0x91,0x16,0x93,0x94,0x95,0x96,0x04,0x98,0x99,0x9a,0x9b,0x14,0x15,0x9e,0x1a,
0x20,0xa0,0xe2,0xe4,0xe0,0xe1,0xe3,0xe5,0xe7,0xf1,0xa2,0x2e,0x3c,0x28,0x2b,0x7c,
0x26,0xe9,0xea,0xeb,0xe8,0xed,0xee,0xef,0xec,0xdf,0x21,0x24,0x2a,0x29,0x3b,0xac,
0x2d,0x2f,0xc2,0xc4,0xc0,0xc1,0xc3,0xc5,0xc7,0xd1,0xa6,0x2c,0x25,0x5f,0x3e,0x3f,
0xf8,0xc9,0xca,0xcb,0xc8,0xcd,0xce,0xcf,0xcc,0x60,0x3a,0x23,0x40,0x27,0x3d,0x22,
0xd8,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0xab,0xbb,0xf0,0xfd,0xfe,0xb1,
0xb0,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,0x70,0x71,0x72,0xaa,0xba,0xe6,0xb8,0xc6,0xa4,
0xb5,0x7e,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0xa1,0xbf,0xd0,0xdd,0xde,0xae,
0x5e,0xa3,0xa5,0xb7,0xa9,0xa7,0xb6,0xbc,0xbd,0xbe,0x5b,0x5d,0xaf,0xa8,0xb4,0xd7,
0x7b,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0xad,0xf4,0xf6,0xf2,0xf3,0xf5,
0x7d,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x52,0xb9,0xfb,0xfc,0xf9,0xfa,0xff,
0x5c,0xf7,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0xb2,0xd4,0xd6,0xd2,0xd3,0xd5,
0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0xb3,0xdb,0xdc,0xd9,0xda,0x9f];
Regeln:
Ihr Programm sollte zwei Eingaben annehmen: (a) eine Textzeichenfolge und (b) ein Flag, das die auszuführende Operation angibt.
Basierend auf diesem Flag sollte Ihr Programm entweder jedes Textbyte in das entsprechende EBCDIC-Zeichen konvertieren oder umgekehrt.
Eingaben können aus sinnvollen Quellen (z. B. Befehlszeilenargumente, stdin, Tastatureingaben) erfolgen, dürfen jedoch nicht fest in Ihrem Programm programmiert sein.
Die Ausgabe sollte auf dem Bildschirm angezeigt (z. B. stdout
document.write
) oder in eine Datei / Pipeline geschrieben werden.Verwenden Sie keine integrierten oder externen Codierungskonvertierungsfunktionen (
iconv
usw.).Dies ist eine Code-Golf- Herausforderung, daher gewinnt die kürzeste Antwort (die wenigsten Bytes).
Beispiele:
(Hinweis: Diese Beispiele wurden in einem Terminal erstellt, das für die Verwendung der UTF-8-Codierung konfiguriert ist. Je nach Konfiguration Ihres Systems werden möglicherweise unterschiedliche Ergebnisse angezeigt. Hex-Entsprechungen dienen nur als Referenz und müssen nicht von Ihrem Code generiert werden .)
Input: "HELLO WORLD", convert to EBCDIC
Output: "ÈÅÓÓÖ@æÖÙÓÄ" (0xc8c5d3d3d640e6d6d9d3c4)
Input: "ÈÅÓÓÖ@æÖÙÓÄ", convert from EBCDIC
Output: "HELLO WORLD"
Input: "lower case mostly ends up as gremlins", convert to EBCDIC
Output "" <-- unprintable in utf-8
(0x9396a68599408381a285409496a2a393a840859584a240a4974081a24087998594938995a2)
quelle
s.decode('base64')
meine Nachschlagetabelle abrufen möchte ?Antworten:
Bash + tr, 240 Bytes
Hexdump
Eher triviale Lösung. Liest aus STDIN, druckt nach STDOUT.
Wie benutzt man
Führen Sie die folgenden Befehle aus, um das Skript zu speichern und ausführbar zu machen:
Führen Sie den Befehl plain aus, um nach EBCDIC (encode) zu konvertieren:
Geben Sie zum Konvertieren von EBCDIC (Dekodieren) ein beliebiges erstes Argument an:
quelle