Drucken Sie die ASCII-Tabelle

28

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.

oopbase
quelle
1. Muss es eine Funktion sein? 2. Gemäß Ihrem Referenzcode ist n das erste Zeichen, das nicht gedruckt wird.
Dennis
2
Tatsächlich gibt der Referenzcode nichts aus. Es gibt nur eine Liste der Zeichen zurück und lässt die REPL mit dem Ergebnis tun, was sie will.
Manatwork
1
Kann jemand bitte die Ablehnung erklären? Es tut mir leid, wenn mein Englisch nicht so gut ist. Wenn die Frage etwas Unklares enthält, sagen Sie es mir bitte.
OOPBASE
1
for x in range(input()):print chr(x)Würde eigentlich die Zeichen drucken, wenn du dein Beispiel bearbeiten möchtest.
FryAmTheEggman
2
nota [i for i in range(n)]ist range(n)
hinreichend

Antworten:

19

CJam, 4 Bytes

ric,

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.

Dennis
quelle
Müssen Sie Eingaben machen? Der Online-Läufer gibt nur den Code selbst aus.
Manatwork
12
@manatwork: Nur eine Sekunde. Sie müssen sich beeilen, wenn Sie diese veröffentlichen ...;)
Dennis
Das verwirrt mich ein wenig. Das Zeichen bei 0 (aka 0c) verhindert, dass etwas anderes danach gedruckt wird. Ric, (scheint gut zu funktionieren. Dies bedeutet, dass der Code nicht funktioniert.
Kaine
1
@kaine: Internet Explorer ist in C ++ geschrieben, das keine nullterminierten Zeichenfolgen verwendet. Nach dieser sind Null - Zeichen Parse - Fehler in HTML 5; der Browser muss es durch ein ersetzen oder die Bearbeitung des Dokuments abbrechen.
Dennis
4
Denken Sie daran, dass Sie eine ausreichend große Zahl eingeben müssen 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 = 9999
Sanchises 29.10.14
25

brainfuck - 169 146 142 Bytes

-[+>+[+<]>+]>+>>,[>,]<[<]<[->>[->]<[<]<]>>>[[<[-<+<+<+>>>]+++++++++[<[-<+>]<<[-<+>>>+<<]<[->+<]>>>>-]]<,<<,>[->>>+<<<]>>>---------->]<-[->.+<]

Einschränkungen:

  • EOF muss 0 sein
  • Erfordert 8-Bit-Umbruchzellen
  • Wegen ^, Mods von 256 eingegeben

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

-[+>+[+<]>+]>+               abuse 8 bit wrapping to put 47 in cell 4

>>,[>,]                      starting in cell 6; get each character of input

<[<]<[->>[->]<[<]<]          subtract the value of cell 4 from each input character
                             '0' has an ascii value of 47 so subtracting 47 from each
                             digit gives you that digit's value plus 1

>>>[                         if the number is in more than one cell
                             (when the program first starts this means "if the input has
                             more than one digit")

[<[-<+<+<+>>>]               copy first input cell to 3 new cells

+++++++++[<[-<+>]<<          do some fancy addition magic to multiply that value by 10
[-<+>>>+<<]<[->+<]>>>>-]]

<,<<,>                       clean up a bit (abusing comma to set cells to 0)

[->>>+<<<]>>>                add the value to the next cell of input

----------                   because we multiplied (the digit plus 1) by 10; the answer
                             is 10 too high; so subtract 10

>]                           if the input is still in multiple cells; do the song and
                             dance again (multiply by 10; add to next cell; subtract 10)

<-                           we never got a chance to fix the final digit; so it's still 1
                             too high

               ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
               ;;         we have now finished processing input         ;;
               ;;     the tape is empty except for the current cell     ;;
               ;;  the current cell contains the number that was input  ;;
               ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

[                            while the cell containing input != 0

-                            subtract 1 from it

>.+                          go a cell to the right; output that cell; then add 1

<]                           repeat
untergrundbahn
quelle
Nett! Auf jeden Fall +1 für die Mühe :-)
oopbase
1
Sie könnten einige Bytes im ausgegebenen Teil sparen: >[-]<[->.+<]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.
Shujal
@shu Das ist ein hervorragender Punkt! Daran habe ich überhaupt nicht gedacht. Es ist nicht nur kürzer, sondern behebt auch das Problem mit der Drosselung bei großen Eingängen und ist wahrscheinlich schneller! Danke :)
undergroundmonorail
Ja, es ist jetzt viel, viel schneller. Ich brauchte das >[-]<Teil auch nicht, weil ich mich bereits neben einer leeren Zelle befand. :)
undergroundmonorail
1
Auch Ihre zweite Antwort ist gültig.
Esolanging Fruit
12

Pyth , 4 Bytes

VQCN

Grundsätzlich eine Übersetzung des Python 3-Programms:

for N in range(eval(input())):print(chr(N))
FryAmTheEggman
quelle
11

Befunge 93 - 23 21

&> :#v_,>:#,_@
 ^-1:<

Befunge 93 - 15 13 (von Ingo Bürk)

Diese gibt die Liste in umgekehrter Reihenfolge aus, aber OP sagte nur, dass wir die ersten nZeichen drucken müssen , nicht, dass es in der richtigen Reihenfolge sein muss.

&>::>v
@^-1,_

Könnte nicht mehr golfen werden, ohne zu Befunge98 überzugehen (für den Operator ";" siehe @ Kasrans Antwort )

Probieren Sie es hier aus:

Karhell
quelle
Ich hoffe es macht Ihnen nichts aus, dass ich von hier aus einen Inline-Interpreter verwendet habe :)
Ingo Bürk
Die Frage besagt nicht, dass wir es in irgendeiner Reihenfolge drucken müssen, also ist dies fünf Byte kürzer: &> #- #1:# :#,_@(es wird nur umgekehrt gedruckt)
Ingo Bürk
Ich habe weitere Bytes für insgesamt 15 Bytes entfernt. Aufgrund von Zeilenumbrüchen bearbeite ich sie in Ihrem Beitrag.
Ingo Bürk
Gut gespielt beim Extra-Golfen :) Was den Inline-Interpreter betrifft, war mir nicht bewusst, dass es einen gibt. Es ist toll, danke :)
Karhell
Der Dolmetscher ist neu aus der verknüpften Herausforderung. Ich dachte nur, ich würde es tatsächlich benutzen, als ich deine Antwort sah. :)
Ingo Bürk
8

Java, 151 128 77 62 56 Bytes

Versuchen Sie zuerst, Code-Golf zu spielen.

void f(int n){for(char i=0;++i<=n;System.out.print(i));}

Verwendung:

import java.util.Scanner;
class A {

    public static void main(String[] a) {
        int num = new Scanner(System.in).nextInt();
        new A().f(num);
    }

    void f(int n) {
        for (char i = 0; ++i <= n; System.out.print(i));
    }
}

Vielen Dank an @Shujal, @flawr, @Ingo Bürk und @Loovjo für die ernsthafte Reduzierung der Bytes.

Rodolfo Dias
quelle
1
Sie können einige Zeichen speichern, indem Sie das int beim Öffnen des Scanners deklarieren: int i,n=new Scanner(...und die Schleife auf ändern for(;++i<n;). Außerdem müssen Sie nicht aufrufen Character.toString. Sie können System.out einfach mit einem char-Wert versorgen und dieser wird gerne ausgegeben.
Shujal
1
Die Herausforderung ermöglicht die Verwendung Ihrer aals Eingabe. Und ich denke , Sie verkürzen kann forSchleife 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)
flawr
1
Sie dürfen eine Funktion schreiben, es wird also keine ganze Klasse und alles benötigt.
Ingo Bürk
1
@ RodolfoDias Sind Sie sicher? Offensichtlich ++i<n+1sollte gleichbedeutend sein mit ++i<=n. Beachten Sie die =dort jedoch! Es wird nur ein Byte gespeichert. Für mich geht das.
Ingo Bürk
1
Wir kommen also auf void f(int n){int i=0;for(;++i<=n;System.out.print((char)i));}62 Bytes. Zumindest sehe ich jetzt nicht mehr Golf. :)
Ingo Bürk
6

APL, 5

⎕UCS⍳

Anwendungsbeispiel:

⎕UCS⍳256
Shujal
quelle
1
Du musst keinen DFN machen. Nur "UCS" würde gut funktionieren. Also 5 Zeichen
Moris Zucca
1
Sie müssen keine Codepunkte über 127 unterstützen. Nur ↑ ⎕AV würde gut funktionieren. Also 4 Zeichen
Adám
6

JavaScript, ES6 - 52 58 56 53 44 42 Byte

n=>String.fromCharCode(...Array(n).keys())

Fü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!

Scimonster
quelle
1
Dies behandelt weder Parameter noch Eingaben.
Manatwork
Ändern Sie einfach die 70 auf eine andere Zahl; das ist der Input.
Scimonster
Okay, ich habe es aktualisiert, um die Eingabe zu übernehmen, auf Kosten von 6 Bytes.
Scimonster
3
-2: f = n => [... Array (n)]. Map ((v, i) => String.fromCharCode (i))
edc65
2
44 Zeichen! f=n=>String.fromCharCode(...Array(n).keys())
Schwenk
6

Haskell, 17 23 Bytes

flip take['\0'..]

Ich 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:

print.flip take['\0'..]

Auch nicht kürzer (25 Zeichen mit Druck, 19 ohne), aber ein interessanter alternativer Ansatz (erfordert jedoch 'Data.List'):

print.((inits['\0'..])!!)
Archaephyrryx
quelle
Das Ergebnis wird nicht gedruckt.
nyuszika7h
@ Nyuszika7h jetzt tut es
John Dvorak
(`take`['\0'..])Speichert ein Byte.
Laikoni
4

Allgemeine Bash + BSD-Dienstprogramme, 9 Byte

jot -c $1

GNU DC, 20 Bytes

?sc_1[1+dPdlc>m]dsmx
Digitales Trauma
quelle
4

C, 31 30 28 27

k;f(n){putch(k++)<n&&f(n);}

Da putch kein Standard ist, ist hier die vollständig kompatible Version:

k;f(n){putchar(k++)<n&&f(n);}

Muss von main aufgerufen werden:

main(){f(255);}

EDIT: Verbessert, indem der Putchar-Rückgabewert genutzt wird.
EDIT 2: Durch Rekursion um ein anderes Zeichen verringert

takra
quelle
1
Putch ist eine nicht standardmäßige Funktion. Darf ich auch fragen, warum diese Antwort abgelehnt wurde?
Stuntddude
@Stuntddude Ich werde eine alternative Version hinzufügen, die Putchar verwendet, und keine Ahnung, warum dies abgelehnt wird. Immerhin ist es eines der kürzeren.
Takra
4

Perl, 17 Bytes

say chr for 0..$_
Demnogonis
quelle
1
Zu viele Klammern. print chr for 0..$ARGV[0]
Manatwork
Du hast recht! Es ist schon eine Weile her, dass ich perl
Demnogonis 29.10.14
1
Sie können shiftanstelle von $ARGV[0]2 Bytes speichern.
Nyuszika7h
Wenn Sie die Zeichen in verschiedenen Zeilen drucken dürfen, können Sie verwenden 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 als 18Zeichen zählen. 17für say chr for 0..$_plus 1für die n.
hmatt1
Du hast recht. Funktioniert aber saynicht mit jeder Perl-Version.
Demnogonis
3

CJam, 3

,:c

Ich nahm an, dass das Argument das oberste Stapelelement ist.

Anwendungsbeispiel:

256,:c

ri,:c
Shujal
quelle
3

Ruby, 30 Zeichen

puts (0..$*[0].to_i).map &:chr
Türknauf
quelle
3

awk - 27

{while(i<$0)printf"%c",i++}

Um den Parameter auf stdin zu setzen, führe ihn wie folgt aus:

awk '{while(i<$0)printf"%c",i++}' <<<96

Nur zum Spaß: Die "think positive version" beginnt mit einem definitiven yes:

yes|head -96|awk '{printf"%c",NR-1}'

NR-1drucken ist erforderlich (char)0für NR==1. :-(

Und warum haben wir keinen noBefehl? Das ist irgendwie gemein!


quelle
1
alias no='yes no'
nyuszika7h
... aber dann müsste ich auch die Zeichen dieser Alias-Definition zählen ... :-(
3

J - 5 Bytes

{.&a.

{.ist Kopf, a.ist Alphabet (eine Liste aller Zeichen) und &bindet sie, wobei ein monadisches Verb mit dem Namen erzeugt wird:

{.&a. 100 NB. first 100 characters

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:

  ijconsole <<< '127 {. a.' | hd
jpjacobs
quelle
Beachten Sie, dass das Alphabet nicht genau ASCII ist.
FUZxxl
Bis zu {.&a. 127, ist es nicht?
Jpjacobs
Nein, da J Zeichen für Kästchen anstelle einiger Steuerzeichen enthält.
FUZxxl
Wenn ich dies in eine Datei schreibe und sie mit einem Hex-Viewer untersuche, erfahre ich, dass J die richtigen Werte ausgibt (0x00 0x01, ...). Es ist nur der J-Interpreter / die IDE, der / die diese Werte als Boxdrawing-Zeichen anstelle von Steuerzeichen interpretiert. Es funktioniert genauso wie in allen anderen Sprachen, die charoder Äquivalente verwenden.
Jpjacobs
Das ist komisch, weil ich es auf meiner UNIX-Box getestet habe und tatsächlich Unicode-Zeichen für einige der Code-Punkte ausgegeben habe.
FUZxxl
3

gs2, 2 bytes

V.

Das sollte konkurrieren, denke ich! Es hätte sogar in den frühen Tagen von gs2 funktioniert. Probieren Sie es hier aus.

Lynn
quelle
1
Erfolgreich getestet mit dieser Version , die der Herausforderung um einen Monat voraus ist.
Dennis
3

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 2568-Bit-Implementierungen verarbeiten kann:

,
[
  <[<+> >++++++++++<-]
  -[>-<-----]
  >+++>,
]
<[>]
-<<[>.]
>[>+.<-]

Mitch Schwartz
quelle
Warum habe ich nicht daran gedacht ??? Das ist genial !!!
FinW
Kann ich diese für zukünftige Antworten ausleihen?
FinW
1
@FinW Vermutlich wissen Sie nichts über diesen Meta-Post .
Mitch Schwartz
2

Golfscript - 5

Vielen Dank an @Dennis

~,''+
Beta-Zerfall
quelle
1
~,""+ist kürzer und verarbeitet Eingaben von STDIN korrekt.
Dennis
@ Tennis, die keine Ausgabe für mich produziert ...
Beta Decay
1
Verwenden Sie den Online-Interpeter? Um die Eingabe von STDIN korrekt zu simulieren, müssen Sie z. B. verwenden ;"65", da die Eingabe von STDIN immer eine Zeichenfolge ist.
Dennis
1
@Dennis Oh danke das funktioniert jetzt!
Beta Decay
2

Lua - 43 41 Bytes

for i=1,arg[1]do print(string.char(i))end
William Barbosa
quelle
Sie können dies durch ein Byte verkürzena=""for i=1,arg[1]do print(a.char(i))end
Digital Veer
Sie können dies um 2 Bytes verkürzenfor i=1,arg[1]do print(("").char(i))end
manatwork
2

Befunge 98, 22

&:00pv>0gk,@
0::-1<^j`

Ein bisschen traurig, dass das so lang ist.

&:00p        ; gets numerical input, stores a copy at cell (0,0)               ;
     v       ; IP goes down                                                    ;

     <       ; IP goes left, so I execute 1-::0`j^                             ;
 ::-1        ; (1-::) subtract one from our number and duplicate it twice      ;
0       `    ; (0`) compare the number with 0, push 1 if greater else 0        ;
     <^j     ; if the result was 0, go up, otherwise continue going left       ;

      >0gk,  ; get the value at cell (0,0), print that many numbers from stack ;
           @ ; terminate program                                               ;
Justin
quelle
2

Python 3.4 - 36 Bytes / 43 Bytes

print(*map(chr,range(int(input()))))
print(*map(chr,range(int(input()))),sep='')

255 input ()

Wie das funktioniert ist:

  1. Holen Sie sich die obere Grenze des Bereichs
  2. Generieren Sie einen Bereich der Tabelle.
  3. Ordnen Sie den Bereich der Funktion chr zu (nimmt int, gibt ascii zurück).
  4. Verbrauchen Sie die Karte über splat argument expansion (number -> character -> print!)

Der zweite entfernt nur das Leerzeichen, das jedes Zeichen im Austausch für 7 Bytes trennt.

Vollmetall
quelle
Sie könnten dies sehr viel zu einem Lambda machen, wie die Frage dies besagt, und in Python 2 mapeine Liste zurückgeben, so dass Sie es einfach tun könntenf=lambda i:map(chr,range(i))
Justin,
Das stimmt, und meine anfängliche Lösung war ähnlich, aber ich wollte kein Lambda verwenden, damit ich sofort drucken kann. Ich wünschte, map würde den Trend beibehalten, eine Liste anstelle eines Iterators zurückzugeben, auch wenn dies eher pythonisch ist.
Full Metal
2

Pascal 87

program _;var c:char;n:byte;begin n:=0;readln(n);for c:=chr(0)to chr(n)do write(c);end.

Pascal 73

program _;var c,n:byte;begin readln(n);for c:=0to n do write(chr(c));end.

Erstellt und läuft einwandfrei von http://www.onlinecompiler.net/pascal

Mark K. Cowan
quelle
1
Freepascal (und wenn ich mich richtig erinnere, Turbo Pascal zu) braucht nur 60 dieser Zeichen: var c,n:byte;begin read(n);for c:=0to n do write(chr(c))end. pastebin.com/aFLVTuvh
Manatwork
Möglicherweise habe ich nur Delphi verwendet. Aber jemand hat das aus dem Titel heraus bearbeitet.
Mark K Cowan
2

x86 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.

test ax,ax
jz @Done
mov [sp],ax
@Loop:
mov ax,4
mov bx,1
mov cx,sp
mov dx,1
int 0x80
sub [sp],1  ; Can I do this?  Or do I need to load/sub/store separately?
jnz @Loop
@Done:
ret
Mark K. Cowan
quelle
2
(Ich hätte einen F00F-Exploit dort reinstecken sollen, es ist ja sowieso nicht so, als würde ihn irgendjemand ausführen.)
Mark K Cowan
7
Ich würde das laufen lassen. Ich werde das jetzt nicht ausführen.
Aearnus
2

Perl - 29

sub f{print map{chr}0..shift}
nyuszika7h
quelle
2

Rubin, 23

f=->n{puts *?\0..n.chr}

Erläuterung

  • Die Eingabe wird als Argument für ein Lambda verwendet. Es erwartet eine Ganzzahl.
  • Der "destructuring operator" ( *) ruft #to_aryden Bereich auf, um jedes Zeichen in einer eigenen Zeile zu drucken.
britishtea
quelle
2

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.

f(n)=map(char,[0:n])

Julia: 33 Zeichen

Gibt jedes Zeichen in einer separaten Zeile aus.

print(map(char,[0:int(ARGS[1])]))
Mann bei der Arbeit
quelle
2

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)

Zeitmord
quelle
2

T-SQL: 68 63

Als Druckschleife

DECLARE @i INT=64,@ INT=0A:PRINT CHAR(@)SET @+=1IF @<=@i GOTO A

T-SQL: 95 86

Als eine Abfrage

DECLARE @ INT=64SELECT TOP(@+1)CHAR(ROW_NUMBER()OVER(ORDER BY 0/0)-1)FROM sys.messages

Bearbeiten: Änderungen und Korrekturen vorgenommen, auf die Muqo hingewiesen hat. Vielen Dank. Von @ t-clausen.dk vorgeschlagene Fehlerbehebungen und Golfspiele

MickyT
quelle
Für die Schleife können Sie 5 oder mehr Zeichen speichern, um das WHILE in ein GOTOwith-Label zu konvertieren . Geben Sie für die Abfrage möglicherweise an msdb.sys.objects, dass genügend Objekte garantiert werden sollen. Außerdem wird CHAR (0) nicht ausgegeben. Als Trost können Sie jedoch ORDER BY @.
Muqo
Die zweite Antwort ist ungültig. Sie können es auf diese Weise umschreiben und 9 Zeichen eingeben: DECLARE @ INT = 64SELECT TOP (@ + 1) CHAR (ROW_NUMBER () OVER (ORDER BY 0/0) -1) FROM sys.messages
t-clausen.dk
@ t-clausen.dk nicht sicher, wie ich das durchlasse. Dank dafür.
MickyT
2

BrainFuck - 140 112 Bytes

,>,>,>-[>+<-----]>---[<+>-]<[<<<->->->-]<[>+<-]<[>>++++++++++<<-]<[>>>>++++++++++[<++++++++++>-]<<<<-]>>>[>.+<-]

Probieren Sie es hier aus!

Gespeichert 28 Bytes durch eine Änderung [<<<->>>->+<]>[<<<->>>->+<]>[<<<->>>-]an [<<<->->->-].

Was es macht

,>,>,>                                                              Takes three inputs
                                                                    in three separate cells

-[>+<-----]>---[<+>-]<[<<<->->->-]<                                 Takes 48 off of each to
                                                                    convert them to decimal

[>+<-]<[>>++++++++++<<-]<[>>>>++++++++++[<++++++++++>-]<<<<-]>>>    Combines them into a
                                                                    three digit number by
                                                                    multiplying the first
                                                                    by 100, the second by
                                                                    10 and then adding all
                                                                    three

[>.+<-]                                                             Repeatedly prints the
                                                                    value of the adjacent
                                                                    cell and then adds one
                                                                    to it until it reaches
                                                                    the input value.
FinW
quelle