Gibt alle alphanumerischen Zeichen plus Unterstrich aus


37

Schreiben Sie ein Programm oder eine Funktion, die eine Zeichenfolge aus alphanumerischen Zeichen und einem Unterstrich in beliebiger Reihenfolge ausgibt oder zurückgibt . Um genau zu sein, müssen die folgenden Zeichen ausgegeben werden und nicht mehr :

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_

Beim Drucken auf Standardausgabe ist eine optionale nachgestellte Zeile nach der Ausgabe zulässig.

Integrierte Konstanten, die 9 oder mehr der oben genannten Zeichen enthalten, sind nicht zulässig.


Kürzester Code in Bytes gewinnt.

Dies ist eine sehr einfache Herausforderung, von der ich glaube, dass sie dennoch einige interessante Antworten liefert.


Bestenlisten

Hier ist ein Stack-Snippet, um sowohl eine reguläre Rangliste als auch eine Übersicht der Gewinner nach Sprache zu generieren.

Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:

# Language Name, N bytes

Wo Nist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:

# Ruby, <s>104</s> <s>101</s> 96 bytes

Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:

# Perl, 43 + 2 (-p flag) = 45 bytes

Sie können den Namen der Sprache auch als Link festlegen, der dann im Leaderboard-Snippet angezeigt wird:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes


2
Kommentare sind nicht für eine längere Diskussion gedacht. Diese Unterhaltung wurde in den Chat verschoben .
Dennis

Antworten:


11

Konvex, 9 Bytes

Neue Methode! Außerdem habe ich festgestellt, dass es ziemlich genau so ist wie Luis 'Antwort, aber in Convex, aber ich habe dies unabhängig erfunden.

'{,®\W"Oò

Probieren Sie es online!

Erläuterung:

'{,           Array of chars from NUL to 'z
   ®\W"       Regex to match non-word characters
       Oò     Replace all matches with emtpy string

Alte Lösung, 10 Bytes:

A,'[,_¬^'_

Probieren Sie es online!

Erläuterung:

A,          0-9
'[,_¬^      A-Za-z
'_          _

1
@ mbomb007 Ja, es entspricht dem CJam-CodeA,'[,_el^'_
GamrCorps

Welche Kodierung ist das?
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ CP-1252 oder Windows-1252
GamrCorps


12

Perl, 20 Bytes

Benötigt -Ekeine zusätzlichen Kosten.

say+a.._,A.._,_..9,_

Meine ursprüngliche Antwort (unten) war also etwas zu langweilig. Das einzige, was ich mir ausgedacht habe, ist das Obige, das ist genau das Gleiche, sieht aber etwas verwirrender aus ... Es ist so ziemlich genau wie das Folgende:

say a..z,A..Z,0..9,_

Ich mag die Vorschläge von @ msh210 in den Kommentaren, aber sie sind einfach ein bisschen zu lang!


1
+1. Etwas interessanter, aber etwas länger, alle 27 Bytes: say grep/\w/,map chr,1..122|| say map{chr=~/\w/;$&}1..122|| say map{chr=~s/\W//r}1..122
msh210

1
@ msh210 Kann immer noch nicht mehr schrumpfen ... Verwaltete eine 25 obwohl: say chr=~/\w/g for 1..255...
Dom Hastings

10

Cheddar, 31 27 Bytes

->97@"123+65@"91+48@"58+"_"

Dies zeigt den @"Bediener gut

Nicht abgeschlossen, weil ich mich endlich daran gemacht habe, den @"Operator zu reparieren . Der Fehler war, dass es einen Cheddar-Bereich und keinen JS-Bereich generierte, sodass es nicht richtig funktionieren konnte


Erläuterung

Der @"Operator wurde von @ CᴏɴᴏʀO'Bʀɪᴇɴ entworfen und generiert einen Zeichenfolgenbereich von LHS bis RHS. Bei Verwendung als unärer Operator wird das Zeichen am angegebenen Codepunkt zurückgegeben (wie bei Pythons chr).

Ungolfed

->
  97 @" 123 +
  65 @" 91  +
  48 @" 58  +
  "_"

10

Brainfuck, 58 Bytes

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

Probieren Sie es online aus .

Initialisiert das Band auf 3 · 2 n und arbeitet von dort aus.

+++[[<+>->++<]>]    initialize the tape
                    |   0 |   3 |   6 |  12 |  24 |  48 |  96 | 192 | 128 |   0 |   0 |
                                                                                    ^
<<[-<->]            subract 128 from 192
                    |   0 |   3 |   6 |  12 |  24 |  48 |  96 |  64 |   0 |   0 |   0 |
                                                                        ^
<<-.+<<++           ouput '_'; increment 24 twice
                    |   0 |   3 |   6 |  12 |  26 |  48 |  96 |  64 |   0 |   0 |   0 |
                                                ^
[->>+.>+.<<<]       output aAbBcC ~ zZ
                    |   0 |   3 |   6 |  12 |   0 |  48 | 122 |  90 |   0 |   0 |   0 |
                                                ^
<--[->>.+<<]        decrement 12 twice; output 0 ~ 9
                    |   0 |   3 |   6 |   0 |   0 |  58 | 122 |  90 |   0 |   0 |   0 |
                                          ^

9

JavaScript (ES6), 62 Byte

_=>String.fromCharCode(...Array(123).keys()).replace(/\W/g,'')

Gibt zurück 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz, also nur 6 Bytes kürzer als eine Funktion, die das Zeichenfolgenliteral zurückgibt. Ja, es ist scheiße.


Sie können versuchen, eine Zeichenfolge zu finden, für die btoadie erforderliche Ausgabe zurückgegeben wird.
Gcampbell

@ gcampbell 60! Die Suche nach (60 Fakultäts-) Zeichenfolgen kann einige Zeit in Anspruch nehmen ...
Neil

Du könntest es einfach benutzen atob.
Gcampbell

@gcampbell Ich muss irgendwie nicht darstellbare Zeichenfolgen ausschließen.
Neil

@gcampbell Es stellt sich heraus, dass die btoa-Version sowieso 62 Bytes benötigt: 45, um 60 alphanumerische Zeichen zu codieren, 3 nicht codierte Zeichen (einschließlich _) und 14 für _=>atob("")+"".
Neil

9

Haskell, 38 Bytes

'_':['a'..'z']++['A'..'Z']++['0'..'9']

Hier gibt es nichts zu erklären.


2
frage: was ist der unterschied zwischen :und ++?
Downgoat

3
@Downgoat: Nimmt ++zwei Zeichenfolgen und verkettet sie. :Nimmt ein Zeichen und eine Zeichenkette und stellt das Zeichen vor die Zeichenkette. "_"++['a'..'z']...funktioniert auch, ist aber ein Byte länger.
Nimi

8

PowerShell v3 +, 35 - 33 Byte

-join([char[]](1..127)-match'\w')

Erstellt ein dynamisches Array 1..127und wandelt es in ein charArray um. Dies wird dem -matchOperator zugeführt, der an der Regex arbeitet \w, die alle übereinstimmenden Elemente zurückgibt (dh exakt alphanumerisch und unterstrichen). Wir kapseln diese Array-Elemente in ein, -joinum sie als eine Zeichenfolge zu bündeln. Das bleibt in der Pipeline und die Ausgabe ist implizit.


1
Hey, das ist nicht fair. Meine eigene Lösung ist identisch, außer dass ich um 0...
Joey

@ Joey Muss schnell gehen. : D
AdmBorkBork

Vor allem für die trivialen und offensichtlichen Lösungen, denke ich ;-)
Joey

7

V, 27 Bytes

i1122ñYpñvHgJ|éidd@"Í×

Probieren Sie es online!

Diese Antwort ist schrecklich verworren. Ich werde später eine Erklärung posten.

Hexdump:

00000000: 6916 1631 1b31 3232 f159 7001 f176 4867  i..1.122.Yp..vHg
00000010: 4a7c e969 6464 4022 1bcd d7              J|.idd@"...

Erläuterung:

Lesbar:

i<C-v><C-v>1<esc>                                   "Insert the text "<C-v>1"
                                                    "<C-v> means "literal"
                 122ñ       ñ                       "122 times,
                     Yp                             "Duplicate this line
                       <C-a>                        "And increment the first number on this line
                             vHgJ                   "Join every line together
                                 |éi                "Insert an 'i' at the beginning of this line
                                    dd              "Delete this line
                                      @"<esc>       "And execute it as V code.
                                                    "That will generate every ascii value from 1-123
                                             Í×     "Now remove every non-word character.

5
: D: D: D Cheddar hat eine Golf-Sprache!
Downgoat

7

J 30 29 28 Bytes

Dank randomra ein Byte gespeichert!

~.u:95,;48 65 97+i."*10,,~26

Ausgabe:

   ~.u:95,;48 65 97+i."*10,,~26
_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

Erläuterung

Ich gebe keine Erklärung an sich , werde aber Zwischenergebnisse liefern.

   10,,~26
10 26 26
   i. b. 0
1 _ _
   *  b. 0
0 0 0
   i."* b. 0
   i."*2 3 4
0 1 0 0
0 1 2 0
0 1 2 3
   i. 2
0 1
   i. 3
0 1 2
   i. 4
0 1 2 3
   i."*10,,~26
0 1 2 3 4 5 6 7 8 9  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
   0 1 2 + i."*10,,~26
0 1 2 3 4 5 6 7  8  9  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
1 2 3 4 5 6 7 8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
   48 65 97+i."*10,,~26
48 49 50  51  52  53  54  55  56  57  48  48  48  48  48  48  48  48  48  48  48  48  48  48  48  48
65 66 67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
   ;48 65 97+i."*10,,~26
48 49 50 51 52 53 54 55 56 57 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
   95,;48 65 97+i."*10,,~26
95 48 49 50 51 52 53 54 55 56 57 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 ...
   u:95,;48 65 97+i."*10,,~26
_01234567890000000000000000ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
   ~.u:95,;48 65 97+i."*10,,~26
_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

6

Haskell, 31 Bytes

do(x,y)<-zip"aA0_""zZ9_";[x..y]

Der Ausdruck zip "aA0_" "zZ9_"gibt die Liste der Endpunkte an [('a','z'),('A','Z'),('0','9'),('_','_')]. Die doNotation nimmt jeweils (x,y)das Inklusive \(x,y)->[x..y]und verkettet die Ergebnisse. Danke an Anders Kaseorg für zwei Bytes mit dostatt >>=.

Vergleichen Sie mit Alternativen:

do(x,y)<-zip"aA0_""zZ9_";[x..y]

zip"aA0_""zZ9_">>= \(x,y)->[x..y]
f(x,y)=[x..y];f=<<zip"aA0_""zZ9_"
id=<<zipWith enumFromTo"aA0_""zZ9_"
[c|(a,b)<-zip"aA0_""zZ9_",c<-[a..b]]
f[x,y]=[x..y];f=<<words"az AZ 09 __"

2
doNotation speichert zwei Bytes:do(x,y)<-zip"aA0_""zZ9_";[x..y]
Anders Kaseorg

4

C 50 Bytes

Rufen Sie f()ohne Argumente an.

f(n){for(n=128;--n;)isalnum(n)|n==95&&putchar(n);}

Druckt

zyxwvutsrqponmlkjihgfedcba_ZYXWVUTSRQPONMLKJIHGFEDCBA9876543210

1
isalnum(n)|n==95&&putchar(n)
Orlp

Da ist UB. Sie haben die erforderlichen Argumente nicht übergeben.
Ven

@orlp - Sie haben putcanstelle von verwendet putchar. putcerwartet, dass auch ein Stream geschrieben wird, den Sie nicht übergeben haben. Die Funktion selbst funktioniert einwandfrei (versuchen Sie, putcalles zu entfernen , und es funktioniert).
Owacoder

@owacoder Ups!
Orlp

1
@ QPaysTaxes das ist falsch. If the number of arguments does not equal the number of parameters, the behavior is undefined.6.5.2.2/6, siehe N1570 .
Ven

4

/// 63 Bytes

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_

Wie ist es die gültige Antwort? Sieht aus wie es gegen die Regeln verstößt.
Nicael

@nicael welche Regel?
Undichte Nonne

"Eingebaute Konstanten, die 9 oder mehr der oben genannten Zeichen enthalten, sind nicht zulässig." ... Vermisse ich etwas Offensichtliches, @Leaky?
Nicael

4
Ja, das hat keine eingebauten Konstanten benutzt.
Undichte Nonne

Ok, aber das ist zumindest komisch. Auf jeden Fall fordert OP Sie nicht auf, die Sequenz zu kopieren und einzufügen, das ist nicht interessant.
Nicael

4

Python 3, 58 Bytes

print('_',*filter(str.isalnum,map(chr,range(123))),sep='')

Ein vollständiges Programm, das auf STDOUT gedruckt wird.

Die Ausgabe ist: _0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

Wie es funktioniert

map(chr,range(123))       Yield an iterator containing all ascii characters with
                          code-points in [0,122]...
*filter(str.isalnum,...)  ...keep characters if alphanumeric and unpack into tuple...
print('_',...,sep='')     ...add underscore and print all characters with no separating
                          space

Probieren Sie es auf Ideone

Wenn Zeichenfolgenkonstanten zulässig wären, wären die folgenden 45 Bytes:

from string import*
print('_'+printable[:62])

1
print('_'+*filter(str.isalnum,map(chr,range(123))))
Undichte Nonne

@LeakyNun Das löst einen Syntaxfehler aus. Ich habe darüber nachgedacht, etwas Ähnliches mit zu machen print('_',*filter(str.isalnum,map(chr,range(123)))), aber das druckt trennende Leerzeichen; Das OP sagte in den Kommentaren, dass "... überhaupt keine Leerzeichen in der Ausgabe erlaubt sind".
TheBikingViking

Python 2 kann mit diesem Ansatz ein Byte sparen:print''.join(filter(str.isalnum,map(chr,range(123)))),'_'
Atlasologe

4

Mein erster Versuch mit Codegolf!

C #, 168 152 150 147 130 127 117 116 115 109 106 Bytes

for(var a='0';a<'~';a++){Console.Write(System.Text.RegularExpressions.Regex.IsMatch(a+"","\\w")?a+"":"");}

Vielen Dank an Aloisdg, AstroDan, Leaky Nun und Kevin Lau - nicht an Kenny für die Hilfe in den Kommentaren.


2
Willkommen bei PPCG! Fühlen Sie sich frei, um den gesamten Raum zu entfernen! Beachten Sie auch die Tipps zum Golfen in C # .
Aloisdg sagt Reinstate Monica

1
Großartig - hat mir 2 Bytes mehr gespart. Ich fange wirklich an, diesen Codegolf zu mögen :)
Daniel

1
AFAIK, die \wRegex-Klasse deckt auch die alphanumerischen Zeichen ab _, die "\\w"für Ihre Regex-Match-Funktion ausreichend gültig sein sollten .
Value Ink

1
Ihr Code sollte eine Funktion oder ein vollständiges Programm sein, keine Anweisung. Verwenden Sie auch .NetFiddle, um eine Demonstration Ihres Codes zu teilen :)
aloisdg sagt Reinstate Monica

2
"C # ist nicht das Beste zum Codegolf" Ich finde, C # macht genug Spaß, um Golf zu codieren. Ich denke, es ist eine großartige Hauptsprache, mit der man spielen kann. Wenn Sie hier sind, um zu gewinnen, werden Sie verlieren. Definieren Sie Ihr Ziel als Lernen und Spaß haben und Sie werden immer gewinnen.
Aloisdg sagt Reinstate Monica


4

Object Pascal, 85 83 73 Bytes

Nur einfaches Objekt Pascal mit einer Reihe von Zeichen. Das Schreiben eines vollständigen Programms anstelle einer Prozedur spart 2 Byte. Durch das Entfernen des Programmschlüsselworts werden 10 weitere Bytes gespart.

var c:char;begin for c in['a'..'z','A'..'Z','0'..'9','_']do write(c);end.

Ich war immer und werde wahrscheinlich immer durch die genaue Klassifizierung von Object Pascal verwirrt sein. Turbo / Borland Pascal und FreePascal freuen sich ohne das nutzlose programSchlüsselwort.
Manatwork

@manatwork Das wusste ich nicht. Seltsamerweise macht es jetzt Pascal wettbewerbsfähig hier ...
Hdrz

Die Sprache, mit der ich aufgewachsen bin. Ich weiß, dass es noch nicht tot ist ...
rexkogitans

@rexkogitans Ja, ich habe es in der Schule gelernt, kann mich aber an nichts von damals erinnern ... Ich spiele jetzt wieder mit einigen Programmen
hdrz

4

Bash - 47 37 Bytes

man sh|egrep -o \\w|sort -u|tr -d \\n

Die Ausgabe auf meinem System ist:

_0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ

Vielen Dank an Digital Trauma für hilfreiche Vorschläge.

Auf einigen Systemen können Sie möglicherweise ein Byte speichern, asciianstatt es man shzu verwenden.


1
man sh|egrep -io _\|\\w|sort -u|tr -d \\n
Digital Trauma

1
@DigitalTrauma Danke! Experimentiert und \wÜbereinstimmungen herausgefunden _und ist bereits case-unempfindlich, könnte also noch mehr verkürzen.

envstatt man shsollte auf den meisten Umgebungen arbeiten. Das tut es bei mir. $ env|egrep -o \\w|sort -u|tr -d \\n-> 0123456789ABCDEFGHIKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz.
YSC

Es gibt keine J. Mein Fehler.
YSC

4

PHP, 40 Bytes

_0<?for(;$a++^9?$a^q:$a=A;)echo" $a"|$a;

Online Demo .


1
+1 für Exzellenz. Randnotiz: PHP 7.2 gibt Warnungen aus, die darauf hinweisen, dass zukünftige Versionen Fehler für undefinierte Konstanten auslösen. :-(
Titus

4

Retina , 30 19 16 15 12 Bytes

Ich habe meinen ursprünglichen Alphabetversuch für diese neueste Version geändert . Jedes Zeichen wird in einer Schleife gedruckt.

Die erste Zeile ist leer.


;
+T\`;w`w_

Probieren Sie es online aus

Ausgabe:

_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

Vielen Dank an Leaky Nun für das Golfen von 4 Bytes aus meinem letzten Versuch.


Ich würde sagen, dass dies weine Konstante ist, die 9 oder mehr der erforderlichen Zeichen enthält. Sie müssen wahrscheinlich die rechte Seite erweitern und wdie linke Seite durch ersetzen o. Sie können zwar ein Byte speichern, indem Sie EOstattdessen verwenden, dda sie jeweils nur 5 Zeichen enthalten.
Martin Ender

@ mbomb007 winnerhalb der Transliterationsstufe hat Regex nichts zu tun. Diese Kurzform erweitert sich zu einer Liste mit den erforderlichen 63 Zeichen. Zumindest würde ich orlp speziell zu diesem Fall befragen, da er sich von der Verwendung \win einem regulären Ausdruck deutlich unterscheidet .
Martin Ender

3

MATL , 11 Bytes

7W:'\W'[]YX

Probieren Sie es online!

7W     % Push  2 raised to 7, i.e. 128
:      % Range [1 2 ... 128]
'\W'   % Push string to be used as regex pattern
[]     % Push empty array
YX     % Regex replace. Uses (and consumes) three inputs: source text, regex pattern, 
       % target text. The first input (source text) is implicitly converted to char.
       % So this replaces non-word characters by nothing.
       % Implicitly display

2 Bytes kürzer:8W:'\w'XX
DJMcMayhem

2
@ DrGreenEggsandIronMan Danke! Aber ich denke, Zeilenumbrüche sind als Trennzeichen nicht erlaubt. Die Herausforderung sagt "eine Reihe von alphanumerischen Zeichen plus Unterstrich ... und nicht mehr"
Luis Mendo

1
Warum 8W:'\w'XX!
konntest

@ DrGreenEggsandIronMan Sehr gute Frage! Lass mich dir im Chat antworten, damit ich ein bisschen mehr Charaktere verwenden kann
Luis Mendo

3

Brachylog , 25 Bytes

"_"w9yrcw"A":"Z"ycL@l:Lcw

Dies druckt Folgendes aus STDOUT:

_9876543210abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

Erläuterung

"_"w               Write "_"
9y                 Get the list [0:1:2:3:4:5:6:7:8:9]
  rcw              Reverse it, concatenate into one number, write
"A":"Z"y           Get the list of all uppercase letters
        cL         Concatenate into a single string L
          @l:Lcw   Concatenate L to itself lowercased and write

3

Pyth, 13 12 Bytes

s:#"\w"0rk\|

Probieren Sie es online!

Findet alle Zeichen in U + 0000 bis U + 007B, die dem regulären Ausdruck entsprechen /\w/.

Ausgänge 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz.

alternativer Ansatz: 15 Bytes

ssrMc4"0:A[a{_`

Probieren Sie es online!

im Grunde erzeugt die Halb inklusive Bereiche erforderlich: 0-:, A-[, a-{, _-`.


3

CJam , 15 14 11 Bytes

4 Bytes weniger dank @FryAmTheEggman und @Dennis!

A,'[,_el^'_

Probieren Sie es online!

A,    e# Push range [0 1 ... 9]
'[,   e# Push range of chars from 0 to "Z" ("[" minus 1)
_el   e# Duplicate and convert to lowercase
^     e# Symmetric difference. This keeps letters only, both upper- and lower-case
'_    e# Push "_".
      e# Implicitly display stack contents, without separators

3

Brainfuck, 89 Bytes

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

Probieren Sie es hier aus

Einzelheiten:

+++++++++[>+++++>+<<-]>+++.  Goes to '0' while remembering a 9 for the 9 other numbers
[<+.>-]                      Simply prints for the next 9 characters
<+++++++>                    Moves it 7 space to the letters
>+++++++++++++               Saves a 13
[<+<+.+.>>-]                 Prints 2 char at a time while making a second '13' space
<<+++++.+>                   Moves 5, prints '_' and moves to the lowercases
[<+.+.>-]                    And again the double print

Wenn ich hätte kommentieren können, müsste ich die Antworten anderer verbessern. Aber da ich nicht kann, könnte ich auch meine eigenen posten. Als ich anfing, dies zu schreiben, war der niedrigste BF 96 lang.


3

F #, 50 59 Bytes

Seq.iter(printf"%c"<<char)(95::[48..57]@[65..90]@[97..122])

Ausgabe:

_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

Bearbeiten: Verpasste die Ziffern beim ersten Mal

Edit2, inspiriert von dieser Haskell-Lösung, dieses F # -Snippet ist 67 Bytes.

Seq.zip"aA0_""zZ9_"|>Seq.iter(fun(x,y)->Seq.iter(printf"%c")[x..y])

Ausgabe:

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_

3

Hexagony, 33

"A}_8_47<='>({a/_x.@.9!\356);');

Erweitert:

    " A }
  _ 8 _ 4 7
 < = ' > ( {
a / _ x . @ .
 9 ! \ 3 5 6
  ) ; ' ) ;
   . . . .

Ausgabe:

aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ1203568479_

Probieren Sie es online!

Beachten Sie, dass 0x1Adas erste Byte des Programms ein nicht druckbares Zeichen enthält . Dies lässt auch die erste Reihe des erweiterten Hexagons irgendwie anders aussehen. Vielen Dank an Martin, der mir diesen Trick gezeigt und den Algorithmus zum Drucken des Alphabets vorgeschlagen hat!

Dieser druckt das Alphabet durch Speicher aund Aan zwei Kanten eines Sechsecks und die Zahl 26 an der Kante des Sechsecks, das die Verbindung zwischen den Buchstaben berührt. Das sieht ungefähr so ​​aus:

A \ / a
   |
   26

Anschließend wird eine Schleife aufgerufen, in der die Buchstaben gedruckt und anschließend inkrementiert und anschließend die Zahl dekrementiert werden. Nach einer Iteration hätten wir:

B \ / b
   |
   25

Und so weiter. Der lineare Code für die Initialisierung ist: 0x1A " A } a. Der lineare Code für die Schleifen außerhalb der Steuerstromänderungen ist: ; ) ' ; ) { ( ' =.

Sobald der Zähler Null erreicht, folgen wir einem anderen Pfad, um die Zahlen und einen Unterstrich auszudrucken. Ausgeschrieben linear ist dies: x 3 5 6 8 4 7 9 ! ; { @. Dies ersetzt den Wert der aktuellen Speicherflanke durch die Nummer 1203568479 (beachten Sie, dass xder ASCII-Code 120 lautet), die alle Dezimalstellen enthält. Wir drucken diese Nummer aus und verwenden dann eine nette Funktion von Hexagony: Wir drucken die Nummer mod 256 als ASCII-Zeichen aus. Dies ist zufällig 95 oder ein Unterstrich.


3

Brainfuck, 114 103 98 90 76 71 Bytes

Eine andere triviale (jetzt nicht-triviale) Lösung, aber diesmal ist es BF!

14 (!) Bytes dank @primo gespeichert.

Dank des Vorschlags von @primo, den Bereich rückwärts zu generieren, wurden 4 weitere Bytes gespart, und vor dem Drucken für Kleinbuchstaben habe ich einen weiteren durch Inkrementieren gespeichert.

Neu (Wiederholung 4, 71):

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

Alt (Werte, 114):

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

Alt (Wiederholung 1, 103):

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

Alt (Wiederholung 2, 90):

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

Alt (Wiederholung 3, 76):

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

Nimmt 8-Bit-Umbruchzellen und Umbruchspeicher an. Ich habe es online ausprobiert .

Alles ausdrucken _AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789

Erstens dieser Teil

+[--[<+++++++>->+<]>-]<<

Initialisiert das Band mit diesen Werten

[91, 70, 49, 21, 7]
                 ^

Dies funktioniert, weil die Wiederholungsbeziehung, die ich im Grunde genommen modelliert habe f(x) = 7 * (3 * x + 1), rückwärts ist. Siehe @primo Hallo, Welt! Beantworten Sie die Frage, was eine Wiederholungsbeziehung ist.

Dann ist es ziemlich einfach, diese Werte in nützliche Werte umzuwandeln. (und den Unterstrich ausdrucken)

Code: +++<--<-<-----<++++.+

Tape: [96, 65, 48, 26, 10]
       ^

Die einfachen Schleifen verwenden dann die Werte, um den Rest der Zeichen zu drucken. Ich spare 1 Byte, indem ich ein Inkrement vor dem Druck habe.

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

Ich muss wirklich eine kürzere Sequenzgenerierung finden.

Ich habe eine Wiederholungsbeziehung gefunden, die gut zu funktionieren scheint, aber es könnte eine kürzere mit weniger Hunting and Peck geben.

Ich habe einen linearen Regressionsrechner verwendet, um die kürzestmögliche lineare Wiederholungsrelation zu finden. Daher sollte ich wahrscheinlich eine andere Formel finden, wenn ich sie verbessern möchte.

@primo hat die Wiederholungsrelation sehr verbessert, danke.


Wie wäre es mit einer Rückwärtskonstruktion? +[--[<+++++++>->+<]>-]
Primo

@primo Wow! Wie funktioniert das?
Blue

3 ist ungleichmäßig, daher wird eine 256-fache Schleife ausgeführt. Wenn Sie mit enden >-], können Sie sicher sein, dass die endgültige Laufzeit 1 (x7) ist. Eigentlich sollte man wohl damit anfangen -, dass es viel schneller endet.
Primo

3

Sesos , 17 Bytes

00000000: a854be 2cbc9e 71d597 14bc56 1ad99e 713b           .T.,..q....V...q;

Ausgabe

0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz_

Probieren Sie es online! Überprüfen Sie Debug , um den generierten Binärcode anzuzeigen.

Wie es funktioniert

Die obige Binärdatei wurde durch Zusammenstellen des folgenden SASM-Codes generiert.

add 48     ; Set cell 0 to 48 ('0').
fwd 1      ; Advance to cell 1.
add 10     ; Set cell 1 to 10.
jmp        ; Set an entry marker and jump to the jnz instruction.
    rwd 1  ;   Retrocede to cell 0.
    put    ;   Print its content (initially '0').
    add 1  ;   Increment cell 0 ('0' -> '1', etc.).
    fwd 1  ;   Advance to cell 1.
    sub 1  ;   Decrement cell 1.
jnz        ; While cell 1 in non-zero, jump to 'rwd 1'.
           ; This loop will print "0123456789".
rwd 1      ; Retrocede to cell 0, which holds 48 + 10 = 58.
add 7      ; Set cell 0 to 65 ('A').
fwd 1      ; Advance to cell 1.
add 26     ; Set cell 1 to 26.
jmp        ; Set an entry marker and jump to the jnz instruction.
    rwd 1  ; Retrocede to cell 0.
    put    ; Print its content (initially 'A').
    add 32 ; Add 32 to convert to lowercase ('A' -> 'a', etc.).
    put    ; Print the cell's content.
    sub 31 ; Subtract 31 to switch to the next uppercase letter ('a' -> 'B', etc.).
    fwd 1  ; Advance to cell 1.
    sub 1  ;   Decrement cell 1.
jnz        ; While cell 1 in non-zero, jump to 'rwd 1'.
           ; This loop will print "AaBb...YyZz".
rwd 1      ; Retrocede th cell 0, which holds 65 + 26 = 91.
add 4      ; Set cell 0 to 95 ('_').
put        ; Print its content.

Wow, ich wollte gerade eine Lösung posten , die Ihrer sehr ähnlich ist .
Undichte Nonne

Gleichgesinnte denken großartig!
Dennis

@LeakyNun Hm, ein bisschen spät, aber es sieht so aus, als ob deine 3 Bytes kürzer ist ...
Erik the Outgolfer

@EriktheOutgolfer Sesos wurden früher weniger effizient codiert. Beide Programme sind jetzt 17 Byte lang.
Dennis

@ Tennis Ah, der TIO-Cache kann manchmal verwirrend sein.
Erik der Outgolfer

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.