Imprima todos los caracteres alfanuméricos más guiones bajos

37

Escriba un programa o función que imprima o devuelva una cadena de caracteres alfanuméricos más guiones bajos, en cualquier orden . Para ser precisos, deben emitirse los siguientes caracteres, y no más :

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_

Al imprimir en stdout, se permite una nueva línea final opcional después de su salida.

Las constantes incorporadas que contienen 9 o más de los caracteres anteriores no están permitidas.


El código más corto en bytes gana.

Este es un desafío muy simple, que creo generará algunas respuestas interesantes, sin embargo.


Tablas de clasificación

Aquí hay un fragmento de pila para generar una tabla de clasificación regular y una descripción general de los ganadores por idioma.

Para asegurarse de que su respuesta se muestre, comience con un título, usando la siguiente plantilla de Markdown:

# Language Name, N bytes

¿Dónde Nestá el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:

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

Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de la bandera del intérprete por separado), asegúrese de que el puntaje real sea el último número en el encabezado:

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

También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento de la tabla de clasificación:

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

orlp
fuente
2
Los comentarios no son para discusión extendida; Esta conversación se ha movido al chat .
Dennis

Respuestas:

11

Convexo, 9 bytes

¡Nuevo método! Además, me di cuenta de que es exactamente lo mismo que la respuesta de Luis, pero en Convex, pero se me ocurrió esto de forma independiente.

'{,®\W"Oò

Pruébalo en línea!

Explicación:

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

Solución anterior, 10 bytes:

A,'[,_¬^'_

Pruébalo en línea!

Explicación:

A,          0-9
'[,_¬^      A-Za-z
'_          _
GamrCorps
fuente
1
@ mbomb007 Sí, es equivalente al código A,'[,_el^'_
CJam
¿Qué codificación es esta?
Conor O'Brien
@ CᴏɴᴏʀO'Bʀɪᴇɴ CP-1252 o Windows-1252
GamrCorps
12

Rubí, 26 bytes

Los caracteres se pueden imprimir en cualquier orden? ¡No me importa si lo hago!

Pruébalo en línea!

$><<(?0..?z).grep(/\w/)*''
Tinta de valor
fuente
12

Perl, 20 bytes

Requiere -Esin costo adicional.

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

Entonces, mi respuesta original (abajo) fue un poco aburrida. Lo único que he logrado hacer es lo anterior, eso es exactamente lo mismo, pero parece un poco más confuso ... Es casi exactamente equivalente a lo siguiente:

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

Me gustan las sugerencias de @ msh210 en los comentarios, ¡pero son demasiado largas!

Dom Hastings
fuente
1
+1. Un poco más interesante pero más largo es cualquiera de estos, los 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 Todavía no puedo reducir esto más ... Sin embargo, manejé un 25: say chr=~/\w/g for 1..255...
Dom Hastings
10

Cheddar, 31 27 bytes

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

Esto muestra bien al @"operador

No se completó porque finalmente pude arreglar el @"operador. El error fue que estaba generando un rango Cheddar, no un rango JS, por lo que no podía funcionar correctamente


Explicación

El @"operador fue diseñado por @ CᴏɴᴏʀO'Bʀɪᴇɴ, y lo que hace es generar un rango de cadenas de LHS a RHS. Cuando se usa como operador unario, devuelve el carácter en el punto de código dado (como el de Python chr)

Sin golf

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

brainfuck, 58 bytes

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

Pruébalo en línea .

Inicializa la cinta a 3 · 2 n , y trabaja desde allí.

+++[[<+>->++<]>]    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 |
                                          ^
primo
fuente
9

JavaScript (ES6), 62 bytes

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

Devuelve 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz, por lo que solo 6 bytes más cortos que una función que devuelve el literal de cadena. Sí, apesta.

Neil
fuente
Podría intentar encontrar una cadena para la que btoadevuelve la salida requerida.
gcampbell
@gcampbell 60! (60 factorial) las cadenas pueden tardar un tiempo en buscar ...
Neil
Podrías usarlo atob.
gcampbell
@gcampbell Tengo que excluir cadenas no representables de alguna manera.
Neil
@gcampbell Resulta que la versión btoa toma 62 bytes de todos modos: 45 para codificar 60 alfanuméricos, 3 caracteres no codificados (incluidos _) y 14 para _=>atob("")+"".
Neil
9

Haskell, 38 bytes

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

Nada que explicar aquí.

nimi
fuente
2
pregunta: ¿cuál es la diferencia entre :y ++?
Downgoat
3
@Downgoat: ++toma dos cadenas y las concatena. :toma un char y un string y pone el char delante del string. "_"++['a'..'z']...También funciona, pero es un byte más largo.
nimi
8

PowerShell v3 +, 35 33 bytes

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

Construye una matriz dinámica 1..127, la convierte como una charmatriz. Eso se alimenta al -matchoperador que trabaja en la expresión regular \w, que devolverá todos los elementos que coincidan (es decir, exactamente alfanuméricos y subrayados). Encapsulamos esos elementos de matriz en a -joinpara agruparlos como una cadena. Eso queda en la tubería y la salida es implícita.

AdmBorkBork
fuente
1
Oye, eso no es justo. Mi propia solución es idéntica, excepto que empecé a las 0...
Joey
@Joey Tengo que ir rápido. : D
AdmBorkBork
Especialmente para las soluciones triviales y obvias, supongo ;-)
Joey
7

V, 27 bytes

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

Pruébalo en línea!

Esta respuesta es horriblemente complicada. Publicaré una explicación más tarde.

Hexdump:

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

Explicación:

Legible:

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.
DJMcMayhem
fuente
55
: D: D: D ¡Cheddar está empatado con una lang de golf!
Downgoat
7

J, 30 29 28 bytes

¡Guardado un byte gracias a randomra!

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

Salida:

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

Explicación

No proporcionaré una explicación per se , pero proporcionaré resultados intermedios.

   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
Conor O'Brien
fuente
6

Haskell, 31 bytes

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

La expresión zip "aA0_" "zZ9_"da la lista de puntos finales [('a','z'),('A','Z'),('0','9'),('_','_')]. La donotación lleva a cada uno (x,y)a lo inclusivo \(x,y)->[x..y]y concatena los resultados. Gracias a Anders Kaseorg por dos bytes en dolugar de >>=.

Compare con las alternativas:

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 __"
xnor
fuente
2
dola notación guarda dos bytes:do(x,y)<-zip"aA0_""zZ9_";[x..y]
Anders Kaseorg
4

C, 50 bytes

Llama f()sin ningún argumento.

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

Huellas dactilares

zyxwvutsrqponmlkjihgfedcba_ZYXWVUTSRQPONMLKJIHGFEDCBA9876543210
owacoder
fuente
1
isalnum(n)|n==95&&putchar(n)
orlp
Hay UB allí. No pasaste los argumentos requeridos.
Ven
@orlp - Usaste en putclugar de putchar. putcespera una secuencia para escribir también, que no pasó. La función en sí funciona bien (intente eliminarlo por putccompleto, y funciona).
owacoder
@owacoder ¡Vaya!
orlp
1
@QPaysTaxes eso está mal. If the number of arguments does not equal the number of parameters, the behavior is undefined.6.5.2.2/6, ver N1570 .
Ven
4

/// , 63 bytes

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_
Erik el Outgolfer
fuente
¿Cómo es la respuesta válida? Parece que está violando las reglas.
nicael
@nicael que regla?
Leaky Nun
"No se permiten las constantes incorporadas que contienen 9 o más de los caracteres anteriores" ... ¿Me estoy perdiendo algo obvio, @Leaky?
nicael
44
Sí, que esto no usó ninguna constante incorporada.
Leaky Nun
Ok, pero esto es raro al menos. Definitivamente, OP no le pide que copie y pegue la secuencia, eso no es interesante.
nicael
4

Python 3, 58 bytes

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

Un programa completo que imprime en STDOUT.

El resultado es: _0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

Cómo funciona

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

Pruébalo en Ideone

Si se permitieran las constantes de cadena, lo siguiente habría sido de 45 bytes:

from string import*
print('_'+printable[:62])
TheBikingViking
fuente
1
print('_'+*filter(str.isalnum,map(chr,range(123))))
Leaky Nun
@LeakyNun Eso arroja un error de sintaxis. Pensé en hacer algo similar print('_',*filter(str.isalnum,map(chr,range(123)))), pero que imprime separando espacios; el OP dijo en los comentarios que "... no se permiten espacios en la salida".
TheBikingViking
Python 2 puede guardar un byte con este enfoque:print''.join(filter(str.isalnum,map(chr,range(123)))),'_'
atlasólogo
4

Mi primer intento de 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+"":"");}

Muchas gracias a aloisdg, AstroDan, Leaky Nun y Kevin Lau, no a Kenny por toda la ayuda en los comentarios.

Daniel
fuente
2
Bienvenido a PPCG! ¡Siéntase libre de eliminar todo el espacio! Consulte también Consejos para jugar golf en C # para obtener algunos consejos.
aloisdg dice Reinstate Monica
1
Genial: me ahorró 2 bytes más. Realmente me está empezando a gustar este codegolf :)
Daniel
1
AFAIK, la \wclase regex cubre los caracteres alfanuméricos y también _, que deberían ser lo "\\w"suficientemente válidos para su función de coincidencia de expresiones regulares.
Value Ink
1
Su código debe ser una función o un programa completo, no una declaración. También use .NetFiddle para compartir una demostración de su código :)
aloisdg dice Reinstate Monica
2
"C # no es lo mejor para codegolf" Encuentro que C # es lo suficientemente divertido como para codificar golf. Creo que es un gran lenguaje convencional para jugar. Si estás aquí para ganar, perderás. Define tu objetivo como aprender y pasar un buen rato y ganarás todo el tiempo.
aloisdg dice Reinstate Monica
4

Puro golpe, 32

printf %s {a..z} {A..Z} {0..9} _

Ideone .

Trauma digital
fuente
4

Objeto Pascal, 85 83 73 bytes

Simplemente objeto pascal usando un conjunto de caracteres. Escribir un programa completo en lugar de un procedimiento ahorra 2 bytes. La eliminación de la palabra clave del programa afeita 10 bytes más.

var c:char;begin for c in['a'..'z','A'..'Z','0'..'9','_']do write(c);end.
hdrz
fuente
Siempre estuve y probablemente siempre estaré confundido por la clasificación exacta de Object Pascal. Turbo / Borland Pascal y FreePascal están felices sin la programpalabra clave inútil .
manatwork
@manatwork No lo sabía. Por extraño que parezca ahora hace Pascal competitivos aquí ...
hdrz
El idioma con el que crecí. Sé que aún no está muerto ...
rexkogitans
@rexkogitans Sí, lo aprendí en la escuela, pero no puedo recordar nada de ese entonces ... Estoy jugando con algo de programación nuevamente ahora
hdrz
4

bash - 47 37 bytes

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

La salida en mi sistema es:

_0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ

Gracias a Digital Trauma por sus útiles sugerencias.

En algunos sistemas, puede usar en asciilugar de man shguardar un byte.


fuente
1
man sh|egrep -io _\|\\w|sort -u|tr -d \\n
Trauma digital
1
@ DigitalTrauma ¡Gracias! Experimentó y descubrió \wcoincidencias _y ya no distingue entre mayúsculas y minúsculas, por lo que podría acortar aún más.
enven lugar de man shdebería funcionar en la mayoría de los entornos. Lo hace en el mío. $ env|egrep -o \\w|sort -u|tr -d \\n-> 0123456789ABCDEFGHIKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz.
YSC
No hay es J. Mi error.
YSC
4

PHP, 40 bytes

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

Demo en línea .

primo
fuente
1
+1 por excelencia. Nota al margen: PHP 7.2 genera advertencias que mencionan que las versiones futuras arrojarán errores para constantes indefinidas. :-(
Tito
4

Retina , 30 19 16 15 12 bytes

Modifiqué mi intento de alfabeto original para esta última versión. Cada personaje se imprime en un bucle.

La primera línea está vacía.


;
+T\`;w`w_

Pruébalo en línea

Salida:

_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

Gracias a Leaky Nun por jugar 4 bytes en mi último intento.

mbomb007
fuente
Yo diría que wcuenta como una constante que contiene 9 o más de los caracteres requeridos. Probablemente tendrá que expandir el lado derecho y reemplazar el wde la izquierda con o. Aunque puede guardar un byte utilizando en EOlugar de, dya que solo contienen 5 caracteres cada uno.
Martin Ender
@ mbomb007 wdentro de la etapa de transliteración no tiene nada que hacer regex. Es una taquigrafía que se expande a una lista de los 63 caracteres requeridos. Al menos le preguntaría a orlp sobre este caso específicamente, ya que es bastante diferente del uso \wen una expresión regular.
Martin Ender
3

MATL , 11 bytes

7W:'\W'[]YX

Pruébalo en línea!

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
Luis Mendo
fuente
2 bytes más cortos:8W:'\w'XX
DJMcMayhem
2
@DrGreenEggsandIronMan ¡Gracias! Pero creo que las nuevas líneas no están permitidas como separadores. El desafío dice "una cadena de caracteres alfanuméricos más subrayado ... y nada más"
Luis Mendo
1
Entonces, ¿por qué no pudiste hacer 8W:'\w'XX!lo que intenté pero no funciona?
DJMcMayhem
@DrGreenEggsandIronMan ¡Muy buena pregunta! Déjame responderte en el chat para que pueda usar un poco más de caracteres
Luis Mendo
3

Brachylog , 25 bytes

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

Esto imprime lo siguiente para STDOUT:

_9876543210abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

Explicación

"_"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
Fatalizar
fuente
3

Pyth, 13 12 bytes

s:#"\w"0rk\|

Pruébalo en línea!

Encuentra todos los caracteres en U + 0000 a U + 007B que coinciden con la expresión regular /\w/.

Salidas 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz.

enfoque alternativo: 15 bytes

ssrMc4"0:A[a{_`

Pruébalo en línea!

básicamente genera los rangos medio incluido requeridos: 0-:, A-[, a-{, _-`.

Monja permeable
fuente
3

CJam , 15 14 11 bytes

¡4 bytes de descuento gracias a @FryAmTheEggman y @Dennis!

A,'[,_el^'_

Pruébalo en línea!

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
Luis Mendo
fuente
3

Brainfuck, 89 bytes

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

Pruébalo aquí

Detalles:

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

Si hubiera podido comentar, tendría que mejorar las respuestas de otros. Pero como no puedo, podría publicar el mío. Cuando comencé a escribir esto, el BF más bajo tenía 96 de largo.

Robijoe
fuente
3

F#, 50 59 bytes

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

Salida:

_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

Editar: perdió los dígitos la primera vez

Edit2, inspirado en esta solución de Haskell este fragmento de F # tiene 67 bytes.

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

Salida:

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_
asibahi
fuente
3

Hexagonía, 33

"A}_8_47<='>({a/[email protected]!\356);');

Expandido:

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

Salida:

aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ1203568479_

Pruébalo en línea!

Tenga en cuenta que hay un carácter no imprimible 0x1A como primer byte del programa. Esto también hace que la primera fila del Hexágono expandido se vea un poco apagada. ¡Muchas gracias a Martin por mostrarme este truco, así como por sugerir el algoritmo para imprimir el alfabeto!

Esto imprime el alfabeto almacenando ay Aen dos bordes de un hexágono y el número 26 en el borde del hexágono que toca la unión entre las letras. Esto se parece a esto:

A \ / a
   |
   26

Luego ingresa un bucle que imprime las letras y luego las incrementa, y luego disminuye el número. Después de una iteración tendríamos:

B \ / b
   |
   25

Y así. El código lineal para la inicialización es: 0x1A " A } a. El código lineal para los bucles fuera de los cambios de flujo de control es:; ) ' ; ) { ( ' = .

Una vez que el contador llega a cero, seguimos un camino diferente para imprimir los números y un guión bajo. Escrito a cabo linealmente esto es: x 3 5 6 8 4 7 9 ! ; { @. Esto reemplaza el valor actual del borde de la memoria con el número 1203568479 (tenga en cuenta que xel código ASCII es 120), que contiene todos los dígitos decimales. Imprimimos este número y luego usamos una característica ordenada de Hexagony: imprimimos el número mod 256 como un carácter ASCII. Esto pasa a ser 95, o subrayado.

FryAmTheEggman
fuente
3

Brainfuck, 114 103 98 90 76 71 bytes

Otro trivial solución (ahora no trivial), ¡pero esta vez es BF!

Ahorró 14 (!) Bytes gracias a @primo.

Ahorré 4 bytes más gracias a la sugerencia de @ primo de generar el rango hacia atrás, y guardé otro incrementando antes de imprimir las letras minúsculas.

Nuevo (recurrencia 4, 71):

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

Antiguo (valores, 114):

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

Antiguo (recurrencia 1, 103):

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

Antiguo (recurrencia 2, 90):

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

Viejo (recurrencia 3, 76):

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

Asume celdas de envoltura de 8 bits y memoria de envoltura. Solía probarlo en línea .

Todos imprimir _AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789

Primero, esta parte

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

inicializa la cinta con estos valores

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

Esto funciona porque la relación de recurrencia que modelé básicamente es f(x) = 7 * (3 * x + 1)hacia atrás. Ver @ primo Hello, World! Responda para una explicación de qué es una relación de recurrencia.

Entonces, es bastante simple cambiar estos valores a valores útiles. (e imprime el guión bajo)

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

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

Luego, los bucles simples usan los valores para imprimir el resto de caracteres. Ahorro 1 byte al tener un incremento antes de la impresión.

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

Realmente necesito encontrar una generación de secuencia más corta.

Encontré una relación de recurrencia que parece funcionar bien, pero podría haber una relación más corta con menos caza y picoteo.

Utilicé una calculadora de regresión lineal para encontrar cuál debería ser la relación de recurrencia lineal más corta posible, por lo que probablemente debería encontrar alguna otra fórmula si quiero mejorar.

@primo realmente mejoró mucho la relación de recurrencia, gracias.

Azul
fuente
¿Qué tal una construcción al revés? +[--[<+++++++>->+<]>-]
primo
@primo ¡Guau! ¿Cómo funciona?
Azul
3 es desigual, por lo que se repetirá 256 veces. Al terminar con >-], puede estar seguro de que el término final será 1 (x7). En realidad, probablemente deberías comenzar -, termina mucho más rápido.
primo
3

Sesos , 17 bytes

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

Salida

0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz_

Pruébalo en línea! Verifique la depuración para ver el código binario generado.

Cómo funciona

El archivo binario anterior se ha generado al ensamblar el siguiente código SASM.

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.
Dennis
fuente
Wow, estaba a punto de publicar una solución muy similar a la tuya .
Leaky Nun
Mentes iguales piensan genial!
Dennis
@LeakyNun Hm, un poco tarde, pero parece que el tuyo es 3 bytes más corto ...
Erik the Outgolfer
@EriktheOutgolfer Sesos solía codificarse de una manera menos eficiente. Ambos programas tienen ahora 17 bytes de longitud.
Dennis
@ Dennis Ah, bueno, el caché TIO puede ser confuso a veces.
Erik the Outgolfer
2

Pyke, 13 bytes

150m.C#P)\_+s

Pruébalo aquí!

Genera ascii 0-150 y filtra por alfanumérico y agrega _al final

Azul
fuente