Desafío
Imprima los siguientes caracteres:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890
El problema es que no puede usar ninguno de ellos en su código.
Puede imprimirlos en orden arbitrario, con o sin una nueva línea inicial o posterior, pero no puede imprimir ningún otro carácter.
Reglas
- No puede usar ningún personaje del conjunto mencionado anteriormente
- Puedes usar cualquier otro personaje
- Sin trampa
- Lagunas estándar prohibidas
- Este es el código de golf , gana la respuesta más corta.
Aclaraciones
- Si su idioma usa un juego de caracteres diferente, no puede usar puntos de código en ese juego de caracteres que correspondan a caracteres alfanuméricos.
- Devolver una cadena de una función se considera una forma válida de salida.
- Puede devolver una matriz de caracteres.
code-golf
string
kolmogorov-complexity
restricted-source
dkudriavtsev
fuente
fuente
Respuestas:
V ,
87 bytes1 byte guardado gracias a @DJMcMayhem al ponerlo todo en una declaración regex
Pruébalo en línea!
Salidas:
Nota: no
×
es o esx
X
0xd7
Hexdump:
Explicación
Ahora la salida se ve así:
Tenemos que eliminar todos los caracteres no alfanuméricos y el
_
(ya que no está incluido en\W
), así que hagámoslo usando expresiones regularesfuente
Ó×ü_
(que es equivalente a:s/\W\|_//g
)Octava ,
52 4640 bytesEsto evalúa a
Explicación
Aquí estamos usando el hecho de que los caracteres se convierten implícitamente en enteros cuando se aplican operaciones aritméticas como
+-
o la función de rango:
. Cuando se concatenan con una cadena vacía ([...,'']
), los números nuevamente se convierten en caracteres.Pruébalo en línea!
fuente
+1
por ser el primer lenguaje no esotérico en un desafío muy adecuado para esolangs.+1
, no para usar Octave (es bastante sencillo), sino para jugar al golf muy bien y usar_
como variable! No tenía idea de que era posible ... ¡Genial!brainfuck ,
77767572 bytesPruébalo en línea!
Cómo funciona
El intérprete comienza con una cinta de 0 celdas.
Esto establece la primera celda en 8 , dejando la cinta en el siguiente estado.
Esto incrementa la segunda celda una vez, la tercera celda 6 veces, la cuarta celda 4 veces, disminuye la quinta celda una vez, luego regresa al comienzo de la cinta y disminuye la primera celda. Después de 8 iteraciones, la cinta se ve como sigue.
Avanzamos a la segunda celda y la incrementamos dos veces, preparándonos para imprimir los dígitos.
Esto imprime la tercera celda, la incrementa, luego regresa a la segunda celda y la disminuye. Después de 10 iteraciones, hemos impreso
0123456789
y la cinta se ve de la siguiente manera.¡Es hora de preparar la cinta para las letras! Comenzamos avanzando dos celdas.
Esto incrementa la quinta celda una vez, la sexta celda dos veces, la séptima celda tres veces, luego regresa a la cuarta celda y la disminuye. Después de 32 iteraciones, la cinta se ve como sigue.
Como último paso antes de imprimir las letras, avanzamos a la quinta celda y la incrementamos dos veces.
Finalmente, avanzamos a la sexta celda para incrementarlo e imprimirlo, hacer lo mismo para la séptima celda, luego volver a la quinta celda y disminuirlo. Después de 26 iteraciones, hemos impreso
Aa...Zz
.fuente
Ruby, 42 bytes
Una función que devuelve una matriz de caracteres. Un programa que genera solo los caracteres tiene 49 bytes:
Esto simplemente usa los caracteres ascii a cada lado de los rangos relevantes para definir un rango. Por ejemplo,
?/...?:
significa los caracteres entre una barra diagonal y dos puntos, excluyendo el final. Para deshacernos de los comienzos, restamos una matriz que contiene los tres caracteres iniciales.fuente
6502 lenguaje máquina,
747068 bytesVolcado hexadecimal (los programas 6502 generalmente no son reubicables; el código aquí se almacena a partir de la ubicación $ 0603):
Puede ver que esto no usa ninguno de los bytes prohibidos: $ 41 a $ 5a, $ 61 a $ 7a o $ 30 a $ 39.
Esta es una función sin argumentos que, cuando se llama, devuelve un puntero a la matriz de caracteres "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" en la parte superior de la pila, de acuerdo con las convenciones de llamadas estándar 6502.
A modo de explicación, aquí hay un desmontaje:
El código del lenguaje de máquina se auto modifica. Para la manipulación de la pila, necesitaba usar PHA y PLA para empujar y hacer estallar el acumulador, pero estas instrucciones tienen códigos de operación $ 48 y $ 68, que están prohibidos (son los códigos ASCII para las letras 'H' y 'h'). Entonces, para PHA, tomo el número $ 24, hago un cambio aritmético a la izquierda (ASL) y almaceno los $ 48 resultantes en los cuatro puntos en el código donde debe ejecutarse. Luego, para PLA, uso un OR bit a bit en los $ 48 en el acumulador para calcular $ 68, y lo guardo en los dos puntos del código donde es necesario.
Hubo varias instrucciones además de PHA y PLA que tampoco pude usar porque sus códigos de operación son los mismos que las letras o dígitos ASCII, pero encontré soluciones directas para esos otros.
La matriz de caracteres deseada se calcula y almacena a partir de la ubicación 0 (realmente no importa dónde esté almacenada, ya que solo debemos asegurarnos de que un puntero a ella se devuelva en la parte superior de la pila).
Puede probar esto en el ensamblador y emulador 6502 de Nick Morgan . Aquí hay una captura de pantalla; el cuadro del monitor en la parte inferior muestra la cadena de salida (en ubicaciones de $ 00 a $ 3D) después de ejecutar el programa.
fuente
Haskell ,
75 72 63 5856 bytesPruébalo en línea! Llamada con
__
. Salida:Gracias a xnor que sugirió
__
y_'
como nombres de variables de dos bytes en lugar de(!)
o similares, ahorrando 9 bytes. Me gusta especialmente cómo se_'
rompe el resaltado de sintaxis. Y gracias nuevamente a xnor por generalizar los rangos, ahorrando otros 4 bytes.Editar: descubrí que caracteres Unicode se permiten como identificadores en Haskell, así por ejemplo
ä
,ö
, ... También puede ser utilizado como dos identificadores de bytes. Como quedaba un identificador de tres bytes en el programa, lo reemplacéä
, guardando otros 2 bytes.Explicación:
__
y_'
son nombres de variables válidos. De la especificación del lenguaje :Entonces el código es equivalente a
En la lista, la comprensión
a
se une a'/'
yb
para':'
("/:"
es equivalente a['/',':']
, por lo que la coincidencia de patrones tiene éxito). Luego, el rango[a..]
construye la cadena de todos los caracteres mayor igual'/'
:Para cada carácter
x
en esta cadena, se verifica si'/'<x
yx<':'
, lo que da como resultado los caracteres0123456789
. Entoncesa
yb
están obligados a@
y[
, produciendo los caracteresABCDEFGHIJKLMNOPQRSTUVWXYZ
y así sucesivamente.fuente
__
y_'
como variables.Underscore is treated as a lower-case letter
regla._'_=[__|[_',__']<-["`{","@[","/:"],__<-[_'..],_'<__,__<__']
(en variables normalesz=[x|[a,b]<-["`{","@[","/:"],x<-[a..],a<x,x<b]
).__
lugar de_'_
aunque__
se utilice como identificador dentro de la comprensión de la lista.Perl (5.10 o 5.12),
3029 bytesEste programa consiste principalmente en caracteres no imprimibles, así que aquí hay un hexdump:
Este programa es muy simple: estamos regexing (
=~
) un guión bajo (_
; gracias @Dennis por señalar que esto funciona) contra una regex. La expresión regular se especifica como una expresión, en lugar de literalmente; específicamente, estamos tomando el complemento bit a bit (~
) de una cadena. Al invertir el complemento a nivel de bits para llegar a la cadena subyacente, obtenemos la siguiente expresión regular que se está ejecutando:En las versiones 5.10 y 5.12 de Perl, la
(?{…})
sintaxis era una sintaxis experimental para permitir que las expresiones regulares ejecutaran código arbitrario en tiempo de ejecución. En este caso, lo usamos para ejecutar un programa sencillo de Perl para imprimir la salida deseada. (Las versiones anteriores a 5.10 no se pueden usar porque no tienensay
).Las versiones modernas de Perl se han deshabilitado
(?{…})
de forma predeterminada por razones de seguridad, pero si tiene una versión de Perl de este tipo, puede deshabilitar la verificación (y, por lo tanto, ejecutar este programa) mediante-Mre=eval
un argumento de línea de comandos (junto con el estándar-M5.010
que especifica la versión del lenguaje a implementar, y que no cuenta contra el bytecount).fuente
En realidad
854 bytesCómo funciona:
La impresión está implícita al final del programa.
Edición 1: se reemplazó poniendo el alfabeto en minúsculas / mayúsculas y luego el rango de números (10) con solo obtener los caracteres imprimibles de la base 62.
Edición 2: cambió ">" a '> gracias a Mego :) guardado 1 byte.
Pruébalo en línea!
fuente
'>
es un byte más corto que">"
.PHP, 69 bytes
El código está estilizado usando Windows-1252 aquí. A continuación se muestra un xdux hexdump reversible .
Pruébalo en línea!
fuente
Java (OpenJDK 9) , 277 bytes
Sí, Java, ¡lo leíste bien!
Pruébalo en línea!
Esto imprime los rangos, pero se invierte, ya que el orden no tiene importancia.
Jugué con la ausencia de la regla "sin entrada" para definir implícitamente una
char
que se requiere para que todo funcione. Si eso es trampa, por favor dilo.Sin golf y pruebas
fuente
char
, de lo contrario sería pan comido. Y para ser justos, mi respuesta es más corta que su respuesta inicial. Echa un vistazo a mi explicación de todos los gastos generales que tengo que pasar.Brainfuck,
8985 bytesDebido a que Brainfuck ignora los caracteres alfanuméricos de todos modos, esto es solo un desafío de salida constante ... (Editar: vea la solución de Dennis para una versión que es 10 bytes más corta)
Pruébalo en línea!
Este código es un buen ejemplo de bucles contados básicos en brainfuck:
Tenga en cuenta que esto utiliza accesos directos de ajuste para generar números, lo que significa que el intérprete necesita tener celdas de ajuste de 8 bits (como la que he vinculado).
fuente
JavaScript (ES6), 983 bytes
Resulta que en ES6 hay muchos caracteres que puedes usar en los nombres de variables de JavaScript . Funciona muy bien después de agotar los seis nombres de variables de 1-2 bytes con
$
y_
.JavaScript, 1223 bytes
Esta fue mi respuesta antes de conocer lo anterior.
Corrí a
console.log('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890')
través de jjencode y jugué el resultado manualmente. Definitivamente hay más optimizaciones que se pueden hacer.fuente
Befunge,
737259575553 bytesPruébalo en línea!
Este es un solo ciclo de cuenta atrás desde
{
(es decir, un carácter despuész
) En la primera iteración, la"{"<
secuencia empuja dos copias de{
la pila: una es el contador de bucle inicial y la otra se usa para disminuir ese contador usando la secuencia!!-
(dos NOTs1
que luego se restan). En iteraciones posteriores, el contador de bucle ya está en la pila, por lo que solo{
se necesita uno para configurar la secuencia de disminución.El resto del código es solo una expresión booleana larga que calcula si el carácter está dentro del rango. Si es así, la rama en la segunda línea se divide a la izquierda para escribir el valor. Si no, la rama derecha se ajusta para probar si hemos llegado a cero y debería terminar. Las dos ramas se fusionan en el medio para subir y repetir el ciclo. Tenga en cuenta que todos los comandos de dirección vertical van hacia arriba, ya que no podemos usar a
v
, pero eso está bien porque el puntero de instrucción se ajusta automáticamente en la parte superior del campo de juego.Gracias a Mistah Figgins por haber ideado inicialmente una mejor técnica para el incremento de bucle.
Pero gracias especiales a Jo King por un enfoque aún mejor para la cuenta atrás en lugar de hacia arriba, así como un diseño de rama más compacto.
fuente
v
ya que es de fuente restringida, pero aún funciona igual de bien con a^
. Gracias.Jalea ,
1716 bytesPruébalo en línea!
Cómo funciona
fuente
Brainfuck auto modificable , 32 bytes
Pruébalo en línea!
xxd -r
hexdump reversible (contiene no imprimibles):fuente
@/
?`\x1a@\x1a/\n
están allí porque sus puntos de código son realmente útiles en el golf. No puedes eliminarlos.+.
lugar de.+
.C, 128 bytes
Sí, C. E incluso es más corto que algunos de los esotéricos.
Llame
_
a unchar *
búfer vacío suficientemente grande .Puede ser un pequeño compilador dependiente. Probado con GCC; El archivo se guardó en la página de códigos 1252.
fuente
JavaScript (ES6),
812745657650536520416 bytesEditar: con la codificación ISO8859-1, esta solución tiene 416 bytes en lugar de 520 bytes. El programa completo tiene 432 bytes, teniendo en cuenta los 16 bytes adicionales para
Esta es una presentación de función, a diferencia de un programa completo. Pasé mucho tiempo jugando al golf JJEncode (de punta a punta para darrylyeo por eso), pero en lugar de jugar al golf
Yo golf
donde
Ø
se inicializa""
en la sobrecarga.Reescrito con operadores de coma convertidos a nuevas líneas:
Explicación
Este script comienza inicializando algunos tipos incorporados y obligándolos a formar cadenas. Las cadenas que podemos obtener sin usar caracteres alfanuméricos son:
A partir de estas cadenas y los dígitos necesarios para hacer referencia a caracteres individuales, podemos obtener las cadenas
return
yconstructor
, que se pueden usar como:Constructor del objeto es
Object()
, y su constructor esFunction()
, que podemos utilizar como esencialmenteeval()
.En este caso, el script codificado que se ejecutará son los
for
bucles anidados que concatenan todos los caracteres alfanuméricos a una cadena usando sus puntos de código y devolviéndolos.Para los caracteres alfabéticos en la secuencia de comandos codificada a los que no se puede acceder utilizando los elementos integrados, JJEncode usa escapes octales para representarlos, luego decodifica la cadena completa devolviéndola desde una función interna. Entonces se puede llamar a la función externa para ejecutar la fuente.
Manifestación
fuente
Brain-Flak , 171 bytes
Incluye +3 para
-A
Pruébalo en línea!
Probablemente haya una manera de hacerlo sin tener que repetir la función "agregar 1".
fuente
Julia 0.4 , 46 bytes
Esta es una función genérica que devuelve una matriz de caracteres.
Pruébalo en línea!
Versión alternativa, 47 bytes, solo ASCII
Pruébalo en línea!
fuente
J, 171 bytes
Ow ... me duele el cerebro ... ¡ Pruébalo en línea!
Aquí está para que pueda verlo todo en una línea (sin embargo, no se ejecutará con saltos de línea).
Solo se garantiza que funcione con la versión J
j805/j64/linux/release/commercial/www.jsoftware.com/2016-12-11T08:02:52
, en ese orden. (Solo importan los primeros 12 caracteres).Explicación
La mayor parte del programa está dedicado a la generación constante. Con esas constantes reemplazadas por sus valores, el programa se ve así:
Con algunos paréntesis eliminados y algunos números mejorados:
Este se compone de un grupo de
,
y,~
s, que de agregación y de argumentos Prefijo. Aquí están los valores separados:":26
('.',~10{9!:14'')
'+/'
(":65 97 48)
','
(':',~12{9!:14'')
1
es26
como una cuerda9!:14''
genera la siguiente cadena en TIO:con
2
, obtenemos el10
carácter th (i
delinux
), y agregamos.
a al final del mismo, rindiendoi.
.3
y5
se explican por sí mismos.4
es la lista de números65 97 48
como una cadena.6
es similar a2
, excepto que es el12
carácter th (u
fromlinux
) y agrega un:
al final, cediendou:
.Esto, todo junto, rinde
u:,65 97 48+/i.26
.".
evalúa esto, dándonos:(Nota:
+/
es una adición tabulada).Luego, con
62{.
, tomamos los primeros62
personajes de esto, dándonosABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
.fuente
<:<.^^*_
que guarda un byte. Además, intenté generar todo el rango y eliminar los símbolos para obtener':;<=>?@[\]^_`'-.~".(':',~(+:+:>.^*_){(*:>.^*_)!:(<:<.^^*_)''),":(#@}.@}.@}.@,~(+#\)],,~)(*:@#$])'+++++'
104 bytes. Estoy seguro de que puede ser mucho más corto05AB1E ,
181511 bytes-4 gracias a Adnan, porque si el tamaño de entrada es 1, 05AB1E usará 0 para b en el primer comando.
Pruébalo en línea!
Intenté muchos enfoques diferentes, pero los puntos clave aquí lo hicieron difícil:
fuente
You may print them in arbitrary order
dice el reto.•£•Ýç©á®þ«˜
También funciona?Brainfuck, 55 bytes
Salida:
Pruébalo en línea!
Inicializa la cinta a 3 · 2 n , y trabaja desde allí.
fuente
Perl 6 , 43 bytes - sin competencia
Una lambda que devuelve una lista de caracteres.
Explicación:
Depende de una corrección de errores para el intérprete Rakudo Perl 6 que solo se comprometió con el repositorio de git hoy, y aún no forma parte de un lanzamiento oficial de Rakudo. De hecho, me encontré con el error al responder a este desafío y logré solucionarlo con la ayuda de uno de los desarrolladores principales de Perl 6. Las reglas de este sitio, tal como las entiendo, no permiten que las respuestas compitan en tal situación, por lo que lo marqué como no competitivo.
fuente
PHP 7.0+, 110 bytes
¡Dios bendiga las cuerdas bit a bit!
Reemplace el
\n
con una nueva línea de estilo * NIX real.Está presente en el código para evitar problemas con las nuevas líneas, pero no se cuenta en el puntaje.
Esto arroja un montón de advertencias, pero esas podrían suprimirse agregando un
@
frente a cada parásito_
.Advertencia libre , 113 bytes
fuente
Lenguaje de máquina 65c02 + Apple] [ROM, 25 bytes
Impresiones
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
.Debería comenzar a las
$8000
.Desmontaje
fuente
10, 15, 26, 32, 44, 96, 128, 162, 169, 175, 192, 202, 208, 224, 237, 249, 253
, que se asignan a los caracteres↵.. ,`.¢©¯ÀÊÐàíùý
donde los.
s son caracteres no imprimibles. Es válidobash (en linux),
507493490485 bytesesto almacena una matriz de caracteres en la variable global
__
debe ejecutarse en una máquina Linux recién iniciada con
/proc
, o algo así como un espacio de nombres pidexplicación:
para probarlo podemos agregar
declare -p __
al final para mostrar el resultadofuente
/proc
. De hecho,/proc
no es estrictamente necesario en Linux, aunque probablemente sería difícil encontrar una distribución moderna sin ella.Javascript, 1273
13511610bytesEsta solución funciona esencialmente de la misma manera que las otras dos respuestas en este hilo aquí y aquí , donde utiliza cartas de los
true
,false
,undefined
, y[object Object]
cuerdas para construir las funciones que necesita para generar las otras letras.Dado que un buen número de las letras ya están colocadas en el objeto, intenté agregar todas las letras minúsculas y los números restantes al objeto, y luego apliqué
toUpperCase
a todos los valores en el objeto para generar las letras mayúsculas faltantes.Actualizar:
Pude mejorar la forma en que se establecían los valores octales, pero todavía ocupan 13 x 30 bytes (o serán 30 bytes cada uno después de cambiar los números a diferentes claves), cada uno ahora sigue este general patrón:
$.ž=\'\\'+$.一+$.七+$.二+'\';
.Se pueden extraer fácilmente 49 bytes adicionales cambiando las teclas de los números a caracteres de 2 bytes.
Presentación actual:
fuente
C (clang) , 164 bytes
Pruébalo en línea!
Esta es una función recursiva que obtiene los caracteres comenzando con un valor de 1 (restando de sí mismo e incrementando), y crea todos los demás números a partir de eso.
Sin golf / Explicación:
fuente
CJam , 15 bytes
Pruébalo en línea!
Explicación
fuente
𝔼𝕊𝕄𝕚𝕟, 8 caracteres / 19 bytes
Pruébalo aquí!
ᶐ
es el alfabeto en mayúsculas,ᶛ
es el alfabeto en minúsculas y⩥Ⅹă⬯
es range (⩥
) de0
a10
(Ⅹ
, el número romano unicode) menos1
, unido por (ă
) nada (⬯
).fuente