Die Aufgabe besteht darin, n Zeichen der ASCII-Tabelle anzuzeigen .
Sie können eine Funktion (oder ein Programm, das das Argument als Parameter verwendet, auch STDIN ist zulässig) schreiben, die einen Parameter n verwendet , der den Index des letzten zu druckenden Zeichens darstellt.
Die Aufgabe ist recht einfach. Als Beispiel sehen Sie hier eine mögliche Implementierung in Python 2.7:
(lambda n:map(chr, range(n)))(256)
Wie gesagt, es ist eine einfache Aufgabe. Das ist also Code-Golf und der kürzeste Code gewinnt!
BEARBEITEN
Wie einige von Ihnen betonten, gibt dieser Code das Ergebnis nicht aus. Es ist nur ein Beispiel, da ich Schwierigkeiten haben könnte, das Problem auf Englisch zu erklären ;-).
EDIT2
Sie können die Antwort auch dann in einer beliebigen Programmiersprache veröffentlichen, wenn es sich nicht um den kürzesten Code handelt. Vielleicht gibt es da draußen einige interessante Implementierungen!
EDIT3
Das Beispiel wurde so korrigiert, dass es das Ergebnis druckt.
for x in range(input()):print chr(x)
Würde eigentlich die Zeichen drucken, wenn du dein Beispiel bearbeiten möchtest.[i for i in range(n)]
istrange(n)
Antworten:
CJam, 4 Bytes
Vollständiges Programm, das aus STDIN liest (Eingabefeld im Online-Interpreter ).
Dies wird einfach ausgeführt
range(chr(int(input())))
, indem die Tatsache ausgenutzt wird, dass,
eine Rückgabe ein Array von Zeichen enthält, wenn das Argument ein Zeichen ist.Ich rufe dibs on
c,
(2 Bytes) auf, nur für den Fall, dass angenommen wird, dass sich die Eingabe bereits auf dem Stack befindet.quelle
n
, da die ersten paar Dutzend ASCII-Zeichen nicht druckbare Zeichen sind. Unterhaltsame Tatsache: Dieses Programm gibt auch die Unicode-Tabelle aus, zum Beispiel n = 9999brainfuck -
169146142 BytesEinschränkungen:
Nicht die kürzeste Antwort hier, aber hey, Brainfuck! Dies wäre eine wirklich, wirklich gute Herausforderung für Brainfucks, abgesehen von der Tatsache, dass eine vom Menschen lesbare Eingabe erforderlich ist, ohne die Anzahl der Stellen zu garantieren. Ich hätte eine Eingabe mit führenden Nullen benötigen können, um eine Länge von 3 Zeichen zu erreichen, aber was für ein Spaß macht das? : D Ein Hauptproblem bei der Eingabe auf diese Weise ist, dass die einzige Verzweigungs- oder Schleifenstruktur von Brainfuck prüft, ob die aktuelle Zelle Null ist oder nicht. Wenn die Eingabe Nullen enthalten kann, kann dies dazu führen, dass Ihr Code Verzweigungen annimmt, die er nicht annehmen sollte. Um dieses Problem zu lösen, speichere ich jede Ziffer der Eingabe plus 1 und subtrahiere dann den Überschuss in der letztmöglichen Sekunde. Auf diese Weise weiß ich immer, wo meine Nullen sind.
Ich sagte, dies wäre eine großartige Herausforderung gewesen, ohne Eingaben analysieren zu müssen. Warum das? Stellen wir uns vor, wir nehmen keine numerische Eingabe. Wir werden sagen, dass die Herausforderung lautet: "Bei einem gegebenen Eingabebyte alle ASCII-Zeichen unterhalb dieses Bytes ausgeben". Hier ist meine Antwort:
Brainfuck - 8 Bytes
Es ist ein ziemlicher Unterschied! Das reale Programm verwendet 135 Anweisungen, um die Eingabe zu sammeln (über 95% des Programms!), Nur weil es ein Mensch ist, der sie eingibt. Speichern Sie die Nummer als ein Byte und geben das zu mir, und es dauert nur eine.
(Unterhaltsame Tatsache: Wenn Sie das hypothetische Programm verstanden haben, dann herzlichen Glückwunsch! Sie verstehen Brainfuck in seiner Gesamtheit. Die gesamte Sprache hat nur acht Befehle, und dieses Programm verwendet jeden genau einmal.)
Erläuterung
quelle
>[-]<[->.+<]
Setzen Sie die Zelle neben der aktuellen Zelle auf 0, zählen Sie dann die aktuelle Zelle herunter, während Sie die Zelle daneben vergrößern und gleichzeitig den Wert drucken.>[-]<
Teil auch nicht, weil ich mich bereits neben einer leeren Zelle befand. :)Pyth , 4 Bytes
Grundsätzlich eine Übersetzung des Python 3-Programms:
quelle
Befunge 93 -
2321Befunge 93 -
1513 (von Ingo Bürk)Diese gibt die Liste in umgekehrter Reihenfolge aus, aber OP sagte nur, dass wir die ersten
n
Zeichen drucken müssen , nicht, dass es in der richtigen Reihenfolge sein muss.Könnte nicht mehr golfen werden, ohne zu Befunge98 überzugehen (für den Operator ";" siehe @ Kasrans Antwort )
Probieren Sie es hier aus:
Code-Snippet anzeigen
quelle
&> #- #1:# :#,_@
(es wird nur umgekehrt gedruckt)Java,
151128776256 BytesVersuchen Sie zuerst, Code-Golf zu spielen.
Verwendung:
Vielen Dank an @Shujal, @flawr, @Ingo Bürk und @Loovjo für die ernsthafte Reduzierung der Bytes.
quelle
int i,n=new Scanner(...
und die Schleife auf ändernfor(;++i<n;)
. Außerdem müssen Sie nicht aufrufenCharacter.toString
. Sie können System.out einfach mit einem char-Wert versorgen und dieser wird gerne ausgegeben.a
als Eingabe. Und ich denke , Sie verkürzen kannfor
Schleife durch missbrauchen den Zuwachs Ort als Schleifenkörper:for(;++i<n;System.out.print((char)i));
(aber Sie könnten die Initialisierung oder Endwert von + ändern müssen - 1)++i<n+1
sollte gleichbedeutend sein mit++i<=n
. Beachten Sie die=
dort jedoch! Es wird nur ein Byte gespeichert. Für mich geht das.void f(int n){int i=0;for(;++i<=n;System.out.print((char)i));}
62 Bytes. Zumindest sehe ich jetzt nicht mehr Golf. :)APL, 5
Anwendungsbeispiel:
quelle
JavaScript, ES6 -
525856534442 ByteFügen Sie dies in die Firefox-Konsole ein. Führen Sie so
f(NUM)
.Musste es länger machen, weil die erste Eingabe nicht richtig akzeptiert.Down 3, danke edc65! Bis auf 44 dank Swivel!
quelle
f=n=>String.fromCharCode(...Array(n).keys())
Haskell,
1723 BytesIch bin mir nicht sicher, ob es ohne Import besser geht.
Bearbeiten
Meine erste Lösung hat das Ergebnis nicht gedruckt. Erlauben Sie also 6 weitere Zeichen:
Auch nicht kürzer (25 Zeichen mit Druck, 19 ohne), aber ein interessanter alternativer Ansatz (erfordert jedoch 'Data.List'):
quelle
(`take`['\0'..])
Speichert ein Byte.Allgemeine Bash + BSD-Dienstprogramme, 9 Byte
GNU DC, 20 Bytes
quelle
C,
31302827Da putch kein Standard ist, ist hier die vollständig kompatible Version:
Muss von main aufgerufen werden:
EDIT: Verbessert, indem der Putchar-Rückgabewert genutzt wird.
EDIT 2: Durch Rekursion um ein anderes Zeichen verringert
quelle
Perl, 17 Bytes
quelle
print chr for 0..$ARGV[0]
shift
anstelle von$ARGV[0]
2 Bytes speichern.say
. Außerdem ist die Anzahl der Zeichen kürzer, wenn Sie es als Einzeiler mit tun-n
.echo "90" | perl -nE'say chr for 0..$_'
würde als18
Zeichen zählen.17
fürsay chr for 0..$_
plus1
für dien
.say
nicht mit jeder Perl-Version.CJam, 3
Ich nahm an, dass das Argument das oberste Stapelelement ist.
Anwendungsbeispiel:
quelle
Ruby, 30 Zeichen
quelle
awk - 27
Um den Parameter auf stdin zu setzen, führe ihn wie folgt aus:
Nur zum Spaß: Die "think positive version" beginnt mit einem definitiven
yes
:NR-1
drucken ist erforderlich(char)0
fürNR==1
. :-(Und warum haben wir keinen
no
Befehl? Das ist irgendwie gemein!quelle
alias no='yes no'
J - 5 Bytes
{.
ist Kopf,a.
ist Alphabet (eine Liste aller Zeichen) und&
bindet sie, wobei ein monadisches Verb mit dem Namen erzeugt wird:Hinweis : Dies funktioniert anscheinend nicht interaktiv: Jconsole und jQt scheinen eine Übersetzung einzurichten, bei der Box-Zeichen anstelle einiger Steuerzeichen ausgegeben werden. In einem Skript oder über die Befehlszeile funktioniert es jedoch:
quelle
{.&a. 127
, ist es nicht?char
oder Äquivalente verwenden.gs2, 2 bytes
Das sollte konkurrieren, denke ich! Es hätte sogar in den frühen Tagen von gs2 funktioniert. Probieren Sie es hier aus.
quelle
Brainfuck, 44 Bytes
Erwartet eine Dezimalzeichenfolge ohne nachgestellte Zeile.
Probieren Sie es online aus.
Das Lesen von ganzen Zahlen im Bereich
[0, max_cell_size]
von Brainfuck ist nicht schwierig. Ich ermutige Sie, selbst eine saubere Methode zu erfinden. Ich halte dies für eine Übung für Anfänger. (Der umgekehrte Vorgang des Druckens des numerischen Werts einer Zelle ist komplizierter und kann als Aufgabe auf mittlerer Ebene betrachtet werden.)Hier ist eine 58-Byte-Version, die
256
8-Bit-Implementierungen verarbeiten kann:quelle
Golfscript - 5
Vielen Dank an @Dennis
quelle
~,""+
ist kürzer und verarbeitet Eingaben von STDIN korrekt.;"65"
, da die Eingabe von STDIN immer eine Zeichenfolge ist.Lua -
4341 Bytesquelle
a=""for i=1,arg[1]do print(a.char(i))end
for i=1,arg[1]do print(("").char(i))end
Befunge 98, 22
Ein bisschen traurig, dass das so lang ist.
quelle
Python 3.4 - 36 Bytes / 43 Bytes
255 input ()
Wie das funktioniert ist:
Der zweite entfernt nur das Leerzeichen, das jedes Zeichen im Austausch für 7 Bytes trennt.
quelle
map
eine Liste zurückgeben, so dass Sie es einfach tun könntenf=lambda i:map(chr,range(i))
Pascal 87
Pascal 73
Erstellt und läuft einwandfrei von http://www.onlinecompiler.net/pascal
quelle
var c,n:byte;begin read(n);for c:=0to n do write(chr(c))end.
pastebin.com/aFLVTuvhx86 ASM (Linux) (viele, viele Bytes, sofern Sie es nicht kompilieren)
Wird als Funktion geschrieben und setzt voraus, dass der Parameter in AX übergeben wird (ich vergesse die Nummer für den gelesenen Systemaufruf). Bewahrt auch nicht [SP] oder BX.
quelle
Perl - 29
quelle
Rubin, 23
Erläuterung
*
) ruft#to_ary
den Bereich auf, um jedes Zeichen in einer eigenen Zeile zu drucken.quelle
Julia: 20 buchstaben (REPL)
Dies liegt in der Nähe des Beispiels der Frage: Generiert einfach die Zeichen und lässt die REPL damit machen, was sie will.
Julia: 33 Zeichen
Gibt jedes Zeichen in einer separaten Zeile aus.
quelle
M (MUMPS) - 21
R n F i=1:1:n W $C(i)
In erweiterter Form:
READ n FOR i=1:1:n WRITE $CHAR(i)
quelle
T-SQL:
6863Als Druckschleife
T-SQL:
9586Als eine Abfrage
Bearbeiten: Änderungen und Korrekturen vorgenommen, auf die Muqo hingewiesen hat. Vielen Dank. Von @ t-clausen.dk vorgeschlagene Fehlerbehebungen und Golfspiele
quelle
GOTO
with-Label zu konvertieren . Geben Sie für die Abfrage möglicherweise anmsdb.sys.objects
, dass genügend Objekte garantiert werden sollen. Außerdem wird CHAR (0) nicht ausgegeben. Als Trost können Sie jedochORDER BY @
.BrainFuck -
140112 BytesProbieren Sie es hier aus!
Gespeichert 28 Bytes durch eine Änderung
[<<<->>>->+<]>[<<<->>>->+<]>[<<<->>>-]
an[<<<->->->-]
.Was es macht
quelle
Fass , 4 Bytes (SBCS)
TIO
Eingabe drücken, ASCII-Tabelle ausgeben.
quelle