Stampa tutti i caratteri alfanumerici più il trattino basso


37

Scrivi un programma o una funzione che stampa o restituisce una stringa di caratteri alfanumerici più il carattere di sottolineatura, in qualsiasi ordine . Per essere precisi, devono essere emessi i seguenti caratteri e non più :

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_

Quando si stampa su stdout, è consentita una nuova riga finale opzionale dopo l'output.

Le costanti incorporate che contengono 9 o più dei caratteri precedenti non sono consentite.


Vince il codice più breve in byte.

Questa è una sfida molto semplice, che credo genererà comunque delle risposte interessanti.


Classifiche

Ecco uno snippet di stack per generare sia una classifica regolare che una panoramica dei vincitori per lingua.

Per assicurarti che la tua risposta venga visualizzata, ti preghiamo di iniziare la risposta con un titolo, usando il seguente modello Markdown:

# Language Name, N bytes

dov'è Nla dimensione del tuo invio. Se si migliora il punteggio, è possibile mantenere i vecchi punteggi nel titolo, colpendoli. Per esempio:

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

Se si desidera includere più numeri nell'intestazione (ad es. Perché il punteggio è la somma di due file o si desidera elencare separatamente le penalità del flag dell'interprete), assicurarsi che il punteggio effettivo sia l' ultimo numero nell'intestazione:

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

Puoi anche rendere il nome della lingua un collegamento che verrà quindi visualizzato nello snippet della classifica:

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


2
I commenti non sono per una discussione estesa; questa conversazione è stata spostata in chat .
Dennis,

Risposte:


11

Convesso, 9 byte

Nuovo metodo! Inoltre, mi sono reso conto che è praticamente la stessa della risposta di Luis, ma in Convex, ma ho pensato a questo indipendentemente.

'{,®\W"Oò

Provalo online!

Spiegazione:

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

Vecchia soluzione, 10 byte:

A,'[,_¬^'_

Provalo online!

Spiegazione:

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

1
@ mbomb007 Sì, è equivalente al codice A,'[,_el^'_
CJam

Quale codifica è questa?
Conor O'Brien,

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

12

Rubino, 26 byte

I personaggi possono essere stampati in qualsiasi ordine? Non importa se lo faccio!

Provalo online!

$><<(?0..?z).grep(/\w/)*''

12

Perl, 20 byte

Richiede -Esenza costi aggiuntivi.

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

Quindi, la mia risposta originale (sotto) era un po 'troppo noiosa. L'unica cosa che sono riuscito a inventare è quanto sopra, è esattamente lo stesso, ma sembra un po 'più confuso ... È praticamente esattamente equivalente al seguente:

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

Mi piacciono i suggerimenti di @ msh210 nei commenti, ma sono solo un po 'troppo lunghi!


1
+1. Leggermente più interessante, ma più lungo è uno di questi, tutti i 27 byte: say grep/\w/,map chr,1..122|| say map{chr=~/\w/;$&}1..122|| say map{chr=~s/\W//r}1..122
msh210,

1
@ msh210 Non riesco ancora a ridurlo ancora ... Gestito un 25 però: say chr=~/\w/g for 1..255...
Dom Hastings il

10

Cheddar, 31 27 byte

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

Questo mostra @"bene l' operatore

Non completo perché finalmente mi sono reso conto di aver riparato l' @"operatore. Il bug era che stava generando una gamma Cheddar non una gamma JS, quindi non poteva funzionare correttamente


Spiegazione

L' @"operatore è stato progettato da @ CᴏɴᴏʀO'Bʀɪᴇɴ e ciò che fa è generare un intervallo di stringhe da LHS a RHS. Se usato come operatore unario, restituisce il carattere nel punto di codice dato (come quello di Python chr)

Ungolfed

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

10

Brainfuck, 58 byte

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

Provalo online .

Inizializza il nastro a 3 · 2 n e funziona da lì.

+++[[<+>->++<]>]    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,'')

Restituisce 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz, quindi solo 6 byte in meno rispetto a una funzione che restituisce la stringa letterale. Sì, fa schifo.


Potresti provare a trovare una stringa per la quale btoarestituisce l'output richiesto.
gcampbell,

@gcampbell 60! (60 stringhe fattoriali) potrebbero richiedere del tempo per la ricerca ...
Neil

Potresti semplicemente usare atob.
gcampbell,

@gcampbell Devo escludere in qualche modo stringhe non rappresentabili.
Neil,

@gcampbell Si scopre che la versione di btoa richiede comunque 62 byte: 45 per codificare 60 caratteri alfanumerici, 3 caratteri non codificati (inclusi _) e 14 per _=>atob("")+"".
Neil,

9

Haskell, 38 byte

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

Niente da spiegare qui.


2
domanda: qual è la differenza tra :e ++?
Downgoat,

3
@Downgoat: ++prende due stringhe e le concatena. :prende un carattere e una stringa e mette il carattere davanti alla stringa. "_"++['a'..'z']...funziona anche, ma è più lungo di un byte.
nimi,

8

PowerShell v3 +, 35 33 byte

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

Costruisce un array dinamico 1..127, lo lancia come un chararray. Questo è dato -matchall'operatore che lavora su regex \w, che restituirà tutti gli elementi corrispondenti (cioè esattamente alfanumerici e trattini bassi). Incapsuliamo quegli elementi dell'array in a -joinper raggrupparli come un'unica stringa. Rimane in cantiere e l'output è implicito.


1
Ehi, non è giusto. La mia soluzione è identica, tranne che ho iniziato a 0...
Joey

@Joey Devo andare veloce. : D
AdmBorkBork

Soprattutto per le soluzioni banali e ovvie, immagino ;-)
Joey,

7

V, 27 byte

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

Provalo online!

Questa risposta è orribilmente contorta. Invierò una spiegazione più tardi.

hexdump:

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

Spiegazione:

Leggibile:

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 Il cheddar è legato con un lang da golf!
Downgoat,

7

J, 30 29 28 byte

Hai salvato un byte grazie a randomra!

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

Produzione:

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

Spiegazione

Non fornirò una spiegazione di per sé , ma fornirà risultati intermedi.

   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 byte

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

L'espressione zip "aA0_" "zZ9_"fornisce l'elenco degli endpoint [('a','z'),('A','Z'),('0','9'),('_','_')]. La donotazione porta ciascuno (x,y)in forma inclusiva \(x,y)->[x..y]e concatena i risultati. Grazie a Anders Kaseorg per due byte con doinvece di>>= .

Confronta con alternative:

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
dola notazione salva due byte:do(x,y)<-zip"aA0_""zZ9_";[x..y]
Anders Kaseorg,

4

C, 50 byte

Chiama f()senza alcun argomento.

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

stampe

zyxwvutsrqponmlkjihgfedcba_ZYXWVUTSRQPONMLKJIHGFEDCBA9876543210

1
isalnum(n)|n==95&&putchar(n)
orlp,

C'è UB lì. Non hai superato gli argomenti richiesti.
Ven,

@orlp - Hai usato al putcposto di putchar. putcsi aspetta che scriva anche uno stream, al quale non si è passati. La stessa funzione funziona bene (prova a rimuovere del putctutto e funziona).
owacoder,

@owacoder Oops!
orlp,

1
@QPaysTaxes che è sbagliato. If the number of arguments does not equal the number of parameters, the behavior is undefined.6.5.2.2/6, vedi N1570 .
Ven

4

/// , 63 byte

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_

Come è la risposta valida? Sembra che stia violando le regole.
nicael,

@nicael quale regola?
Leaky Nun,

"Le costanti incorporate che contengono 9 o più dei caratteri sopra non sono consentite." ... Mi sto perdendo qualcosa di ovvio, @Leaky?
nicael,

4
Sì, questo non ha utilizzato alcuna costante incorporata.
Leaky Nun,

Ok, ma almeno è strano. Sicuramente OP non ti chiede di copiare e incollare la sequenza, non è interessante.
nicael,

4

Python 3, 58 byte

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

Un programma completo che stampa su STDOUT.

L'output è: _0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

Come funziona

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

Provalo su Ideone

Se le costanti di stringa fossero consentite, sarebbero stati 45 byte:

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

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

@LeakyNun che genera un errore di sintassi. Ho pensato di fare qualcosa di simile print('_',*filter(str.isalnum,map(chr,range(123)))), ma che stampa gli spazi separati; nei commenti l'OP ha affermato che "... non sono ammessi spazi nell'output".
TheBikingViking,

Python 2 può salvare un byte con questo approccio:print''.join(filter(str.isalnum,map(chr,range(123)))),'_'
atlanteologo

4

Il mio primo tentativo di codegolf!

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

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

Grazie mille ad aloisdg, AstroDan, Leaky Nun e Kevin Lau - non Kenny per tutto l'aiuto nei commenti.


2
Benvenuti in PPCG! Sentiti libero di rimuovere tutto lo spazio! Controlla anche Suggerimenti per giocare a golf in C # per alcuni suggerimenti.
aloisdg dice Reinstate Monica il

1
Fantastico: mi ha salvato 2 byte in più. Sto davvero iniziando ad apprezzare questo codegolf :)
Daniel,

1
AFAIK, la \wclasse regex copre anche gli alfanumerici e _, il che dovrebbe essere "\\w"abbastanza valido per la funzione di corrispondenza regex.
Value Ink,

1
Il tuo codice dovrebbe essere una funzione o un programma completo, non un'istruzione. Usa anche .NetFiddle per condividere una dimostrazione del tuo codice :)
aloisdg dice Reinstate Monica il

2
"C # non è il migliore per codegolf" Trovo C # abbastanza divertente da programmare il golf. Penso che sia un grande linguaggio tradizionale con cui giocare. Se sei qui per vincere, perderai. Definisci il tuo obiettivo come imparare e divertirti e vincerai tutte le volte.
aloisdg dice Reinstate Monica il


4

Oggetto Pascal, 85 83 73 byte

Basta un semplice oggetto pascal usando un set di caratteri. La scrittura di un programma completo anziché di una procedura elimina 2 byte. La rimozione della parola chiave del programma consente di radere altri 10 byte.

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

Sono sempre stato e probabilmente sarò sempre confuso dall'esatta classificazione di Object Pascal. Turbo / Borland Pascal e FreePascal sono sicuramente felici senza la programparola chiave inutile .
arte

@manatwork I didn't know that. Oddly enough it now makes pascal competitive here...
hdrz

The language I grew up with. I know that it is not yet dead...
rexkogitans

@rexkogitans Yeah I learned it at school, but can't remember anything from back then... I'm playing with some programming again now
hdrz

4

bash – 47 37 bytes

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

Output on my system is:

_0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ

Thanks to Digital Trauma for helpful suggestions.

On some systems you might be able to use ascii instead of man sh to save a byte.


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

1
@DigitalTrauma Thank you! Experimented and found out \w matches _ and is already case insensitive, so could shorten even more.

env instead of man sh should work on most environments. It does on mine. $ env|egrep -o \\w|sort -u|tr -d \\n -> 0123456789ABCDEFGHIKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz.
YSC

There's no J. My bad.
YSC

4

PHP, 40 bytes

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

Online Demo.


1
+1 for excellence. Side note: PHP 7.2 yields warnings mentioning that future versions will throw errors for undefined constants. :-(
Titus

4

Retina, 30 19 16 15 12 bytes

I modified my original alphabet attempt for this latest version. Each character is printed in a loop.

The first line is empty.


;
+T\`;w`w_

Try it online

Output:

_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

Thanks to Leaky Nun for golfing 4 bytes off my latest attempt.


I'd say that w counts as a constant containing 9 or more of the required characters. You'll probably have to expand the right hand side and replace the w on the left with o. Although you can save a byte by using EO instead of d since they only contain 5 characters each.
Martin Ender

@mbomb007 w inside the transliteration stage has nothing to do regex. It's a shorthand that expands to a list of the required 63 characters. At least I'd ask orlp about this case specifically, since it's quite different from using \w in a regex.
Martin Ender

3

MATL, 11 bytes

7W:'\W'[]YX

Try it 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 shorter: 8W:'\w'XX
DJMcMayhem

2
@DrGreenEggsandIronMan Thanks! But I think newlines are not allowed as separators. The challenge says " a string of the alphanumeric characters plus underscore... and no more"
Luis Mendo

1
So why couldn't you do 8W:'\w'XX! which I tried but doesn't work
DJMcMayhem

@DrGreenEggsandIronMan Very good question! Let me answer you in chat so I can use a little more characters
Luis Mendo

3

Brachylog, 25 bytes

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

This prints the following to STDOUT:

_9876543210abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

Explanation

"_"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\|

Try it online!

Finds all characters in U+0000 to U+007B that matches the regex /\w/.

Outputs 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz.

alternative approach: 15 bytes

ssrMc4"0:A[a{_`

Try it online!

basically generates the half-inclusive ranges required: 0-:, A-[, a-{, _-`.


3

CJam, 15 14 11 bytes

4 bytes off thanks to @FryAmTheEggman and @Dennis!

A,'[,_el^'_

Try it 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

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

Try it here

Details:

+++++++++[>+++++>+<<-]>+++.  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

If I could have commented, I would have to improve others answers. But since I can't, I might as well post my own. As I started writing this the lowest BF one was 96 long.


3

F#, 50 59 bytes

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

Output:

_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

Edit: missed the digits the first time

Edit2, inspired by this Haskell solution this F# snippet is 67 bytes.

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

Output:

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_

3

Hexagony, 33

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

Expanded:

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

Output:

aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ1203568479_

Try it online!

Note that there is an unprintable character 0x1A as the first byte of the program. This also makes the first row of the expanded Hexagon look sort of off. Many thanks to Martin for showing me this trick, as well as for suggesting the algorithm for printing the alphabet!

This prints the alphabet by storing a and A on two edges of a hexagon and the number 26 on the edge of the hexagon that touches the joint between the letters. This looks something like this:

A \ / a
   |
   26

Then it enters a loops that prints the letters and then increments them, and then decrements the number. After one iteration we would have:

B \ / b
   |
   25

And so on. The linear code for the initialisation is: 0x1A " A } a. The linear code for the loops outside of control flow changes is: ; ) ' ; ) { ( ' =.

Once the counter reaches zero, we follow a different path to print the numbers and an underscore. Written out linearly this is: x 3 5 6 8 4 7 9 ! ; { @. This replaces the current memory edge's value with the number 1203568479 (note that x's ASCII code is 120), which contains all of the decimal digits. We print out this number and then we use a neat feature of Hexagony: we print out the number mod 256 as an ASCII character. This just happens to be 95, or underscore.


3

Brainfuck, 114 103 98 90 76 71 bytes

Another trivial (now non-trivial) solution, but this time is BF!

Saved 14 (!) bytes thanks to @primo.

Saved 4 more bytes thanks to @primo's suggestion to generate the range backwards, and I saved another by incrementing before printing for the lowercase letters.

New (recurrence 4, 71):

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

Old (values, 114):

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

Old (recurrence 1, 103):

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

Old (recurrence 2, 90):

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

Old (recurrence 3, 76):

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

Assumes 8 bit wrapping cells and wrapping memory. I used Try it online.

All print out _AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789

First, this part

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

initializes the tape with these values

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

This works because the recurrence relation I modeled basically is f(x) = 7 * (3 * x + 1), backwards. See @primo's Hello, World! Answer for an explanation of what a recurrence relation is.

Then, it's fairly simple to change these values to useful ones. (and print the underscore)

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

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

Then, the simple loops use the values to print the rest of characters. I save 1 byte by having an increment before the print.

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

I really need to find a shorter sequence generation.

I found a recurrence relation that seems to work well, but there might be a shorter one w/ less hunt and peck.

I used a linear regression calculator to find what should be the shortest possible linear recurrence relation, so I should probably find some other formula if I want to improve.

@primo really improved the recurrence relation a lot, thanks.


How about a backwards construction? +[--[<+++++++>->+<]>-]
primo

@primo Wow! How does that work?
Blue

3 is uneven so it will loop a full 256 times. By ending with >-], you can be sure that the final term will be 1 (x7). Actually, you should probably start with -, it finishes a lot faster.
primo

3

Sesos, 17 bytes

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

Output

0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz_

Try it online! Check Debug to see the generated binary code.

How it works

The binary file above has been generated by assembling the following SASM code.

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, I was about to post a solution very similar to yours.
Leaky Nun

Alike minds think great!
Dennis

@LeakyNun Hm, kinda late, but it looks like yours is 3 bytes shorter...
Erik the Outgolfer

@EriktheOutgolfer Sesos used to be encoded in a less efficient manner. Both programs are 17 bytes long now.
Dennis

@Dennis Ah, well, the TIO cache can be confusing at times.
Erik the Outgolfer

2

Pyke, 13 bytes

150m.C#P)\_+s

Try it here!

Generates ascii 0-150 and filters by alphanumericness and adds _ to the end

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.