Während ich Code-Golf spiele, möchte ich häufig wissen, wie hoch der ASCII-Wert eines bestimmten Zeichens ist. Eine meiner Lieblingsressourcen zum schnellen Nachschlagen aller druckbaren ASCII-Zeichen ist ASCIItable.com . Das Bild ist sehr schön und zeigt nicht nur die druckbaren ASCII-Zeichen und ihre Werte, sondern auch die nicht druckbaren und erweiterten Zeichen sowie die Werte in Hexadezimal, Oktal und HTML:
Die heutige Herausforderung besteht darin, diese ASCII-Tabelle als ASCII-Tabelle anstelle eines Abbilds neu zu erstellen. Zur Vereinfachung werden keine Steuerzeichen (Zeichen unter 32) verwendet und nur der Dezimalwert und das Zeichen angezeigt. Mit anderen Worten, Ihre Herausforderung besteht darin, entweder ein Vollprogramm oder eine Funktion zu schreiben, die den folgenden Text ausgibt oder zurückgibt:
Dec Chr | Dec Chr | Dec Chr
----------------------------------
32 Space | 64 @ | 96 `
33 ! | 65 A | 97 a
34 " | 66 B | 98 b
35 # | 67 C | 99 c
36 $ | 68 D | 100 d
37 % | 69 E | 101 e
38 & | 70 F | 102 f
39 ' | 71 G | 103 g
40 ( | 72 H | 104 h
41 ) | 73 I | 105 i
42 * | 74 J | 106 j
43 + | 75 K | 107 k
44 , | 76 L | 108 l
45 - | 77 M | 109 m
46 . | 78 N | 110 n
47 / | 79 O | 111 o
48 0 | 80 P | 112 p
49 1 | 81 Q | 113 q
50 2 | 82 R | 114 r
51 3 | 83 S | 115 s
52 4 | 84 T | 116 t
53 5 | 85 U | 117 u
54 6 | 86 V | 118 v
55 7 | 87 W | 119 w
56 8 | 88 X | 120 x
57 9 | 89 Y | 121 y
58 : | 90 Z | 122 z
59 ; | 91 [ | 123 {
60 < | 92 \ | 124 |
61 = | 93 ] | 125 }
62 > | 94 ^ | 126 ~
63 ? | 95 _ | 127 DEL
Es sind Leerzeichen in jeder Zeile und ein abschließender Zeilenumbruch zulässig. Da es sich um eine Herausforderung der Kolmogorov-Komplexität handelt , kann es sein, dass Ihr Beitrag keine Eingaben erfordert oder auf externe Ressourcen (z. B. eine Datei oder das Web) zugreift. Ihr Ziel ist es, den Code so weit wie möglich zu komprimieren, um diesen Text auszugeben.
Es gelten Standardlücken, und die kürzeste Antwort in Bytes gewinnt. Viel Spaß beim Golfen!
quelle
Antworten:
Python 2,
185183175159 Bytes8 Bytes gespart dank FlipTack!
Das Golfen in Python ist noch recht neu.
Verwendet ein verschachteltes Listenverständnis, um den Tabellenkörper zu generieren.
Ungolfed:
Alter Versuch,
185183175 BytesUngolfed:
quelle
Befunge,
176172 BytesProbieren Sie es online!
quelle
Pyth,
89857977 BytesProbieren Sie es online!
quelle
JavaScript (ES6),
179173 Bytesquelle
`${x='Dec Chr '}| ${x}| ${x}
am Ende von Zeile 2 durch "(x='Dec Chr ')+(' |'+x)*2+`
*
Operator wiederholen würde . Oder verstehe ich Ihren Vorschlag irgendwie falsch?V ,
98, 96, 94 BytesProbieren Sie es online!
Nur knapp Quietschen unter hundert in. Ich werde sehen, ob ich Pyth schlagen kann, aber ich werde keine Versprechungen machen.
Hier ist ein Hexdump:
Und so funktioniert es:
Hier wird es interessant. Lassen Sie mich zunächst einen Vim-Trick erklären. Im Einfügemodus werden bestimmte Zeichen eingefügt (alle druckbaren ASCII-Zeichen, die meisten nicht zugeordneten Zeichen oben
0x7f
und einige andere), andere Zeichen haben jedoch einen Nebeneffekt. Beispiel:0x1b
(<esc>
) wechselt in den normalen Modus.0x01
(<C-a>
) fügt den zuletzt eingefügten Text usw. erneut ein. Manchmal möchten wir diese Zeichen buchstäblich einfügen. Um ein Escape-Zeichen einzufügen, müssen Sie Folgendes eingeben<C-v><esc>
. Dies funktioniert für alle Charaktere, die einen Nebeneffekt haben. Dies entspricht im Wesentlichen<C-v>
einem Backslash in Sprachen mit String-Literalen, mit denen Sie bestimmte Zeichen in einem String maskieren können.Der andere nützliche Trick
<C-v>
im Einfügemodus besteht darin, dass Zeichen nach Codepunkt entweder in Dezimal-, Hexadezimal-, Oktal- oder Hexadezimal-Unicode eingefügt werden können. Da wir bereits die Zahlen haben, die bestimmten ASCII-Werten entsprechen, müssen wir<C-v>
diesen Zeichen nur ein vorangestelltes a voranstellen und den entsprechenden Text als vim-Tastendruck ausführen. Dies kann mit einem Regex-Befehl und einem "Do 'x' in jeder Zeile" -Befehl erreicht werden. Also wir:Zu diesem Zeitpunkt sieht der Puffer folgendermaßen aus
Jetzt brauchen wir nur noch eine allgemeine Bereinigung, die den größten Teil der Bytes in dieser Antwort ausmacht
quelle
F # 222 Bytes
Probieren Sie es online!
quelle
["ab"; "cd"] |> c |> p
, verkettet sich mit "|" Zeichen und druckt sie, wie "ab | cd", die Grundidee zum Drucken der Tabelle. Der Rest ist ziemlich unkompliziert, nur um Leerzeichen zu vermeiden, wo immer dies möglich ist.Gleichstrom , 167 Bytes
Probieren Sie es online!
Wie es funktioniert:
quelle
Perl, 120 Bytes
Laufen mit
-E
Flagge:-2 Bytes dank @GB .
quelle
C 179 Bytes
Probieren Sie es online!
Semi-ungolfed:
quelle
Ruby, 124 Bytes
quelle
V ,
151150148136135130129125 BytesDank @ nmjcman101 wurden 12 Byte für die Verwendung
<C-v>g<C-a>
für die Nummern anstelle von gespeichertline('.')
2 Byte gespart dank @DJMcMayhem zum Entfernen von Zeilen mit führenden Leerzeichen mit
ÇÓ/d
und durchdê
Entfernen von zusätzlichen Leerzeichen und Neuanordnen von ElementenDiese Antwort steht im Wettbewerb mit der V- Antwort von @ nmjcman101 (die verwendet
:set ve=all
).Aber jetzt habe ich einen Weg gefunden, diese zu entfernenA ^[
und ein paar Bytes zu sparen, und wir sind auf einem ausgeglichenen StandProbieren Sie es online!
Hexdump:
Erklärung (unvollständig und veraltet)
Die Strategie hier ist, dass ich die Zeilennummern verwende, um die ASCII-Codepunkte zu erzeugen.
Hinweis:
^[
ist0x1b
,^V
istC-v
Zuerst generieren wir alle Zeichen.
Der aktuelle Puffer sieht aus wie
Jetzt fügen wir eine neue Zeile zwischen diesen Zeichen ein
quelle
32 SPACE ... 127 DEL
Teil Ihres Codes: Probieren Sie es online aus! Es verwendet dieses nette Ding, in dem Sie eine Reihe von Zahlen hervorheben können, undg^A
macht es dann zu einer aufsteigenden Sequenz (neu in Vim 8?):set ve=all
A <esc>
g^A
danke, es hat mir 12 Bytes gespart :)V ,
13012099 BytesClub unter 100 Jahren. Ich bin nicht mehr davon überzeugt, dass dies
:se ve=all
der beste Weg ist. Es sind zusätzliche ... 11 Bytes, nur um die|
's zu schreiben ! Aber genau das habe ich.Ich poste dies fast in Konkurrenz zu @KritixiLuthos Antwort
:se ve=all
, um einigen auszuweichenA <esc>
. Ich bin nicht davon überzeugt, dass eine der beiden Methoden noch besser ist. Hoffentlich kann dies beide Parteien zum Golfen anregen und herausfinden, welche Methode den Ausschlag gibt.Ich erwarte auch, dass @DJMcMayhem uns beide in die Hose macht
Probieren Sie es online!
Hexdump für die Neugierigen
quelle
dd
implizit, wenn Sie es einfach tund
. Sie können auch tun,<M-s>
was\s
in Regex immer äquivalent ist . So könnte man verkürzen sie:ç^ó*/d
. Wenn Sie jedoch den globalen Befehl für die Umkehrung ausschalten, können:g!
Sie nach jeder Zeile suchen, die nicht mit einem Nicht-Leerzeichen übereinstimmt.ÇÓ/d
das entspricht:g!/\S/normal dd
AWK , 200 Bytes
Formatiert:
Probieren Sie es online!
quelle
C 188 Bytes
Normalerweise sieht das so aus:
quelle
C (249 Bytes)
Zeilenumbrüche zur Verdeutlichung hinzugefügt.
quelle
P
seinprintf(
, wie hier gezeigt: repl.it/JBRDJava,
434422321 BytesJava ist wahrscheinlich nicht die beste Sprache dafür, da es den Overhead von Klassen und Hauptmethoden gibt ...
Sie können die Hauptmethode mithilfe einer statischen Deklaration entfernen und so die Anzahl der Bytes weiter verringern:
Dies führt jedoch zu einem Fehler (nachdem er ansonsten erfolgreich ausgeführt wurde):
Die Byteanzahl enthält Zeilenumbrüche oder Einrückungen.
quelle
void main(){
, und auch nicht zwischenwhile(s.length()<5)
unds+=" "
. (Es sei denn, Sie haben das nicht in Ihrer Byteanzahl gezählt). Und Sie können ein paar Bytes sparen, indem Sied="Dec",c="Chr"
zud=p("Dec"),c=p("Chr")
und Ihre Anrufep(d)
undp(c)
zud
und ändernc
.Tcl , 233 Bytes
Probieren Sie es online!
quelle
32
zum Beispiel (ein '' stattSpace
) und33!
(kein Leerzeichen dazwischen33
und!
).R ,
235 228 221212 BytesProbieren Sie es online!
Ich versuchte wirklich schwer unter 200 Bytes zu erhalten , aber diese
paste
undcollapse
mich töten. Gibt eine Liste von Zeilen zurück.quelle
JavaScript (ES6), 258 Byte
quelle
Power Shell , 159 Byte
Probieren Sie es online!
In den ersten beiden Zeilen werden nur Literalzeichenfolgen erstellt und in der Pipeline belassen. Der erste verwendet den Komma-Operator
,
, um ein Array zu erstellen, und-join
fügt dieses Array dann zusammen, um die Header zu erstellen. Die zweite ist nur eine gerade String-Multiplikation.Die dritte Zeile Schleifen über
32..63
und jede Iteration sendet drei Werte$_
,($_+32)
und($_+64)
in eine innere Schleife. Die innere SchleifePadRight
fügt dem Wert ein (fügt die entsprechenden Leerzeichen hinzu, um die5
Zeichen aufzufüllen ). Das ist dann eine Kette, die+
mit dem Ergebnis eines verschachtelten Pseudoternärs verkettet ist( )[ ]
. Der Pseudoternäre wählt entweder diechar
Darstellung dieser ZahlSpace
oder,DEL
falls es sich um den entsprechenden Wert handelt. Auch hier haben wirPadRight
die passenden Charaktere.Diese drei Zeichenketten (zum Beispiel
32 Space
,64 @
,96 `
) sind in der Pars gekapselt und-join
ed mit den Spalten Marker in einem einzigen String. Jede dieser 32 Zeichenfolgen verbleibt dann in der Pipeline. Am Ende der AusführungWrite-Output
fügt ein Impliziter eine neue Zeile zwischen die Elemente in der Pipeline ein, sodass wir diese kostenlos erhalten.quelle
Perl,
165155 Bytesquelle
Python 2,
1564218 BytesMein erstes Golf, entschuldige offensichtliche Fehler
Probieren Sie es online!
Falls Sie sich fragen, war die erste Version eine Base64-codierte Zeichenfolge.
quelle
ljust(6) for
.x in [
. Und IIRC die eckigen Klammern im Innerenjoin
können gelöscht werden.05AB1E ,
8276 BytesProbieren Sie es online!
Beim Golfen kann man noch viel verbessern.
žQSDÇƵQ¸«.Bs𔇲”:"DEL"¸«.B)ø
schiebt gepolsterte Zahlen mit Textäquivalent:vyð2×ý})3äøvy… | ©ý}
verbindet sie zusammen in den Tisch:®”†… Chr ÿ”3ר¨'-34×.Á.Á»
kümmert sich um den Header-Teil der Tabelle:quelle
PHP,
163 149147 BytesNervenzusammenbruch
Die Verwendung von
%-N
ist das Byte wert, das rechtsseitige Zahlen und Zeichen sparen würden.quelle
Stax , 53 Bytes
Führen Sie es aus und debuggen Sie es
quelle
T-SQL, 242 Bytes
Formatiert:
Ich habe ein paar Variationen ausprobiert, einschließlich des Ersetzens verschiedener allgemeiner Zeichenfolgen durch andere Variablen, aber dies war die kürzeste Version, die ich gefunden habe.
quelle
Python 3 , 154 Bytes
Probieren Sie es online!
quelle
Attache , 144 Bytes
Probieren Sie es online!
quelle