Los caracteres ASCII del código decimal 33 a 126 son:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
Tenga en cuenta que en la mayoría de las fuentes, 25 de estos caracteres tienen "agujeros" en ellos: (un género mayor que 0 se podría decir)
#$%&04689@ABDOPQRabdegopq
Los otros 68 personajes "no desenterrados" son:
!"'()*+,-./12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\]^_`cfhijklmnrstuvwxyz{|}~
Su tarea es escribir el programa más corto posible utilizando solo los caracteres sin orificios que generan cada uno de los caracteres con orificios exactamente una vez en cualquier orden.
Dado que el espacio, la pestaña y las nuevas líneas (avance de línea y / o retorno de carro) son espacios vacíos, pueden aparecer en su programa o en su salida. Todavía cuentan para la cantidad de personajes. No se pueden usar otros caracteres ASCII (y ciertamente no caracteres no ASCII).
Notas
- No tiene que usar todos los caracteres no desechados ni solo uno de cada uno.
- La salida no puede contener caracteres sin orificios.
- El lenguaje de espacios en blanco puede usar el .
- La salida debe ir a stdout o puede ir a un archivo. No debe haber ninguna entrada.
Bonificación: solo por diversión, intente imprimir todos los caracteres no deseados utilizando los caracteres ocultos. Soy escéptico de que se pueda hacer en un idioma existente.
fuente
main
.~
?Respuestas:
Pyth ,
4335 caracteresProbarlo aquí .
Imprime los caracteres en orden, excepto que 9 está al principio, nueva línea separada.
La cadena contiene todos los caracteres 7 mayores que los necesarios, excepto que 9 se convertiría en @, por lo que es un caso especial. Algoritmo gracias a @Howard.
Explicación:
fuente
GolfScript,
3736 caracteresPrueba el código aquí .
La cadena contiene los caracteres prohibidos xor'ed con 25. Afortunadamente, todos los caracteres se asignan a los válidos.
fuente
Brainfuck 119
fuente
--
al principio ... ¿Estás regresando a 254 en el registro inicial allí?Bonus - dc, 179 caracteres
Oh bien, otro desafío de juego de caracteres restringido donde
P
está permitido.Como
dc
aparentemente es lo suficientemente oscuro como para requerir una explicación (¡extraño para mí teniendo en cuenta las cosas raras por aquí!) Aquí hay una descripción general:Es principalmente una calculadora RPN con aritmética de precisión arbitraria. Pero para este desafío, estoy haciendo uso del
P
comando, que interpreta un número como una serie de caracteres en la base 256 y los imprime. Ejemplos:65 P
impresionesA
(código ASCII 65).16706 P
impresionesAB
(16706 = 65 * 256 + 66).Aparte de eso, la única otra característica interesante es que reconoce todos los dígitos hexadecimales,
0-9A-F
incluso cuando no están contenidos en un número hexadecimal. La entrada decimal es la predeterminada, por lo que el token de entrada999
significa9 hundreds + 9 tens + 9
yABC
significa10 hundreds + 11 tens + 12
hacer que sea equivalente a1122
.La capacidad de usar los dígitos
ABD
en decimal compensa parcialmente la incapacidad de uso12357
, y la elección de ordenar y agrupar hace el resto. (Si necesito algunos númerosx
,y
,z
y no son representables con dígitos permitidos, entonces trato que representax*256*256+y*256+z
en su lugar.)El programa probablemente se puede acortar un poco usando grupos más grandes. No pasé 3 bytes por número.
fuente
dc bonus.dc
. dc es uno de los idiomas más antiguos y ha sido un elemento permanente en * nix durante literalmente décadas. Sin embargo, no es muy conocido, probablemente debido a su sintaxis RPN arcana y no muy legible. Excelente para algunos desafíos de código de golf , sin embargo ;-)Bash + coreutils, 56 bytes
Por suerte, agregar 7 al valor ascii de los caracteres guardados produce todos los caracteres no guardados (con la excepción de "9"). Así que solo hacemos esta transformación a la inversa, luego una transformación similar (resta 12 de "E") para obtener el "9".
Salida:
fuente
-7
muestra visible entre caracteres de puntuación, y esos 2 hechos no tienen nada que ver entre sí.Perl - 49 bytes
Esta es más o menos una versión de Perl de la solución de Howard. XORing la cadena con 25. La salida es un archivo con el nombre
#$%&04689@ABDOPQRabdegopq
. Se me ocurrió la idea de usarsymlink
y el nombre del archivo como formato de salida porque todo lo demás está prohibido.Aquí hay otra solución de Perl que se me ocurrió. Probablemente se puede mejorar mucho y es bastante largo, por lo que me voy en un formato legible por ahora.
Este genera muchos archivos, el nombre de cada uno es uno de los caracteres. No pude encontrar la manera de agregar cadenas sin usar un carácter prohibido.
for
,while
,map
,say
,print
,eval
,s///e
, Y cualquier nombre de variable no se puede utilizar (las variables comienzan con@
o$
en Perl) que hizo que esto sea difícil.Esperemos que los nombres de archivo estén bien como formato de salida porque estoy bastante seguro de que cualquier otra forma de generar información utiliza uno de los caracteres prohibidos.
fuente
-p
bandera y*_=\(
...)
: ¡ Pruébelo en línea!-p
bandera estaría prohibida ya quep
tiene un agujero.MATLAB, 36 bytes
TAN CERCA ... ¡Solo 1 byte más que el ganador actual (isaacg)! Lo cual, en una inspección posterior, ya hizo lo que me propuse hacer también. Bueno, no hay daño en reinventar la rueda ...
Sé que este es un viejo desafío, pero solo me di cuenta de eso después de que me interesé.
Si tan solo pudiera hacer que MATLAB entendiera que quiero una cadena sin una
''
... sugerencias, ¿alguien?fuente
Brainfuck
303275Brainfuck, el último lenguaje esotérico sin orificios (aparte del espacio en blanco);)
fuente
Ctrl
+K
:)`
Eso es un revés. (También llamado acento grave, aunque para mí es una " cita de cosas ": P)JS - 196 - pruébalo
fuente
h=1-1;j=3+3;k='\\x';m=!i+k;c=m[1];f=m[i=2+2];l=k+3;n=k+j;r=k+i;this[f+'v'+c+'l'](c+'l'+f+'rt("\\x23\\x2'+i+k+25+k+2+j+l+h+l+i+l+j+l+2*i+l+3*3+r+h+r+1+r+2+r+i+r+'f\\x5'+h+k+51+k+52+c+n+2+n+i+f+n+7+n+'f\\x7'+h+k+'71")')
- en líneal
, acortadom
, declaradoi
en el primer uso, creó algunos vars adicionales para patrones repetidos (posiblemente podría mejorar esto ajustando el orden de los caracteres emitidos, pero eso está más allá de mi paciencia: P).GolfScript, 89 caracteres
Simplemente construye una matriz de todos los caracteres ASCII y resta de ellos los caracteres que no están "guardados".
fuente
Befunge 98 - 69 bytes
Lo hace en 3 partes. Uno en el que los valores de los personajes no alojados difieren del carácter oculto en 5. Luego, los valores que difieren en 1 y, finalmente, una lista de los caracteres no alojados que difieren en 3 de los caracteres ocultados. La instrucción de finalización del programa en Befunge es "@" (valor de char 64), así que al final cargo "?" (valor de carácter 63) agregue 1 y luego póngalo en el código con la instrucción 's'.
Tal vez podría jugar más golf al consolidar los tres
sección, pero probablemente no por mucho.
fuente
JavaScript
240228Presentación inicial:
z=(!1+"")[1];y=(!!1+"")[3];x={}+"";w=x[1];v=x[2];u=z+"t"+w+v;1[_="c\157nstruct\157r"][_](z+'l'+y+'rt('+u+'("Iy\x51lJj"+'+(t=u+'("\x51\x51==")')+'+'+u+'("M"+'+t+'+"==")+"Nj"+'+u+'("Zw==")+"5\x51EFC\x52E\71\x51UVJhYm\x52lZ2\71wc\x51=="))')()
Ahora, este es un gran comienzo, así es como se descompone ...
Y luego pensé ... "Debe haber una forma más simple ..." y hay ...
Presentación revisada:
z=(!1+"")[1];y=(!!1+"")[3];x={}+"";w=x[1];v=x[2];u=z+"t"+w+v;this[y+"v"+z+"l"](z+'l'+y+'rt('+u+'("Iy\x51lJj"+'+(t=u+'("\x51\x51==")')+'+'+u+'("M"+'+t+'+"==")+"Nj"+'+u+'("Zw==")+"5\x51EFC\x52E\71\x51UVJhYm\x52lZ2\71wc\x51=="))')
Al ver que puedo usar
eval
(al unirlo, inspiración de @bebe; que es mucho más rápido que usar elconstructor
de unconstructor
denumber
...) Lo profundicé hasta 228 ... Sé que puede que no gane este particular Golf Challenge , pero esta es solo mi manera de mostrar cuánto puede abusar de JavaScript y aún así obtener el resultado deseado ...fuente
Principal - Insomnio , 50
Produce:
Bono - Insomnio, 268
Produce:
Creo que debería ser posible reducir la duración del programa si la salida se reorganiza, pero necesito modificar mi programa de búsqueda para hacer esto.
Solo para mostrar el caso en otro idioma que es capaz de operar con un número restringido de caracteres. Por cierto, puede escribir casi cualquier salida con solo 3 caracteres únicos en la fuente.
Actualmente, este es el único lenguaje que puede hacer tanto el desafío principal como la bonificación entre todas las respuestas existentes.
Intérprete de insomnio .
fuente
Befunge 98 - 46 bytes
Versión de Iffunge-ified de la entrada Pyth de isaacg:
fuente
Japt , 33 bytes
Pruébalo en línea!
Mismo algoritmo que la presentación Pyth de Isaac , resulta ser más corto en Japt.
Cómo funciona
Sí, es JS, que es uno de los lenguajes más abusivos , solo que más corto (y no lo necesitas
alert
niconsole.log
aquí).fuente