Escribe el conjunto de los agujeros usando los no agujeros

55

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.

Pasatiempos de Calvin
fuente
99
+1 por el título. Nos encantan cosas como esta .
Jacob
1
¿Dónde está la solución Perl?
Pierre Arlaud
44
Bueno, no hay solución en Haskell o C; si es un programa que quieres, entonces debes deletrearlo main.
Rhymoid
2
La bonificación se puede hacer usando espacios en blanco.
Joshua
1
¿Cómo nadie se dio cuenta de que lo olvidé ~?
Aficiones de Calvin

Respuestas:

18

Pyth , 43 35 caracteres

tTFk"*+,-7;=?GHIKVWXYhiklnvwx"C-Ck7

Probarlo 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:

tT                print(10-1)                T=10, t(x)=x-1 if x is an int.
Fk"<string>"      for k in "<string>":
C-Ck7             print(chr(ord(k)-7))       Note that C is overloaded as ord and chr.
isaacg
fuente
24

GolfScript, 37 36 caracteres

[":=<?)-/! YX[]VIHKx{}|~vih"{25^}/]+

Prueba el código aquí .

La cadena contiene los caracteres prohibidos xor'ed con 25. Afortunadamente, todos los caracteres se asignan a los válidos.

Howard
fuente
22

Brainfuck 119

--[------->++<]>-.+.+.+.++++++++++.++++.++.++.+.+++++++.+.+.++.+++++++++++.+.+.+.[------>+<]>--.+.++.+.++.++++++++.+.+.
Teun Pronk
fuente
eh, --al principio ... ¿Estás regresando a 254 en el registro inicial allí?
WallyWest
1
Sí :) Hace el bucle a 36 más corto (para llegar a 35)
Teun Pronk
Bueno, ciertamente supera mis 275 ... bien hecho ...
WallyWest
@ Pasatiempos de Calvin Estoy bastante seguro de que no se permite ninguna entrada, lo siento. Sin embargo, OP podría querer aclarar.
isaacg
@isaacg Lo sé, es por eso que mi código principal no toma entrada y el último ejemplo no es serio :)
Teun Pronk
20

Bonus - dc, 179 caracteres

Oh bien, otro desafío de juego de caracteres restringido donde Pestá permitido.

6A44469PD684P44D4898PDB99P4008D0BP486B48BPA60BPD096P4A68666P460A0D4P690490AP8084088P6B6AB66P6BBB608P80D4BAAPA046PBAD4P60A6668P480DD96P4A040BBP848BP40DD8D0P46840B6P696B48BP48D64BAP

Como dcaparentemente 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 Pcomando, que interpreta un número como una serie de caracteres en la base 256 y los imprime. Ejemplos: 65 Pimpresiones A(código ASCII 65). 16706 Pimpresiones AB(16706 = 65 * 256 + 66).

Aparte de eso, la única otra característica interesante es que reconoce todos los dígitos hexadecimales, 0-9A-Fincluso cuando no están contenidos en un número hexadecimal. La entrada decimal es la predeterminada, por lo que el token de entrada 999significa 9 hundreds + 9 tens + 9y ABCsignifica 10 hundreds + 11 tens + 12hacer que sea equivalente a 1122.

La capacidad de usar los dígitos ABDen decimal compensa parcialmente la incapacidad de uso 12357, y la elección de ordenar y agrupar hace el resto. (Si necesito algunos números x, y, zy no son representables con dígitos permitidos, entonces trato que representa x*256*256+y*256+zen su lugar.)

El programa probablemente se puede acortar un poco usando grupos más grandes. No pasé 3 bytes por número.


fuente
1
@DigitalTrauma al revés fue el Bono al final de la declaración del problema.
¡Decir ah! ¡Me lo perdí! ¡Excelente! +1
Trauma digital
¿Puede explicar esto? ¿Y hay un lugar donde podamos manejar esto?
Aficiones de Calvin
44
¿Un lugar donde puedes manejarlo? dc no es un lenguaje tonto diseñado para hacer programas difíciles de leer, es una calculadora seria. Ejecútelo en cualquier máquina Unix (o Cygwin). en.wikipedia.org/wiki/Dc_(computer_program)
@ Calvin'sHobbies Si tiene acceso a casi cualquier máquina Linux o Unix (incluido OSX), simplemente guarde como un archivo de texto, por ejemplo, bonus.dc, luego ejecútelo 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 ;-)
Digital Trauma
12

Bash + coreutils, 56 bytes

tr \(-y \!-r<<<'*+,-7;=?GHIKVWXYhiklnvwx'
tr C-F 7-:<<<E

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:

#$%&0468@ABDOPQRabdegopq
9
Trauma digital
fuente
77
Me gusta cómo la primera línea resta 7 de un grupo de caracteres, y contiene una -7muestra visible entre caracteres de puntuación, y esos 2 hechos no tienen nada que ver entre sí.
@ WumpusQ.Wumbley, ni siquiera me había dado cuenta de eso :)
Digital Trauma
6

Perl - 49 bytes

symlink".",':=<?)-/! YX[]VIHKx{}|~vih'^chr(25)x25

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.

until(y/1/1/>32){s//1/}
until(y/1/1/>125+1){
    if(chr(y/1/1/)!~/[!"'()*+,-.\/12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\\\]^_`cfhijklmnrstuvwxyz{|}~]/) {
        symlink".",chr y/1/1/;
    }
    s/^/1/
}

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.

hmatt1
fuente
¡Te voy a dar un +1 por creatividad! ¡Uso muy inteligente del código!
WallyWest
Sé que esto es bastante antiguo, pero es posible imprimir el resultado en la pantalla y guardar algunos bytes usando la -pbandera y *_=\(... ): ¡ Pruébelo en línea!
Dom Hastings
@DomHastings genial! Creo que la -pbandera estaría prohibida ya que ptiene un agujero.
hmatt1
5

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é.

['*+,-7;=?GHIKVWXYhiklnvwx'-7,57,'']

Si tan solo pudiera hacer que MATLAB entendiera que quiero una cadena sin una ''... sugerencias, ¿alguien?

Sanchises
fuente
4

Brainfuck 303 275

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

Brainfuck, el último lenguaje esotérico sin orificios (aparte del espacio en blanco);)

WallyWest
fuente
1
Elimina fragmentos antiguos, no taches.
isaacg
2
Veo que usaste las citas (no sé el nombre real) para tus fragmentos de código. Podría ser más fácil seleccionar su código y presionar Ctrl+ K:)
Teun Pronk
@isaacg Hecho. TeunPronk, hecho!
WallyWest
66
O simplemente presione la barra espaciadora 4 veces si solo es una línea o dos. @TeunPronk Esto? `Eso es un revés. (También llamado acento grave, aunque para mí es una " cita de cosas ": P)
Pomo de la puerta
1
@Doorknob Entonces ambos aprendimos algo hoy aunque lo que aprendiste está mal de todos modos: P
Teun Pronk
4

JS - 196 - pruébalo

h=(c=!1+[])[1];i=c[2*2];j=(f=[]+{})[1];this[i+'v'+h+'l'](h+'l'+i+'rt('+h+'t'+j+f[2]+'("Iy\x51lJj\\x'+2*2+'1\\x3'+~-1+'Nj\\x'+2*3+'75\x51EFC\x52E\\x3'+3*3+'\x51UVJhYm\x52lZ2\\x3'+3*3+'wc\x51=="))')
bebe
fuente
1
Gosh, esto es una locura. Parece que Js es uno de los idiomas más abusivos =)
error
Abusable sí, pero esta es una mota en comparación con mi entrada ... Lo siento @bebe pero te he echado de menos esta vez ...
WallyWest
1
@WallyWest declaro la guerra.
bebe
1
217 : 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ínea l, acortado m, declarado ien 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).
Alconja
2

GolfScript, 89 caracteres

71 22+,{33+}/]''+'!"\'()*+,-./12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\]^_`cfhijklmnrstuvwxyz{|}'-

Simplemente construye una matriz de todos los caracteres ASCII y resta de ellos los caracteres que no están "guardados".

71 22+,  # Builds array of 0..93
{33+}/]  # Converts to 33..126
''+      # Convert ASCII codes to string
'stuff'- # Subtracts "stuff" (the non-holed characters) from the string
Pomo de la puerta
fuente
2

Befunge 98 - 69 bytes

"()+ijWI=*">:5j2 ,-5_"157:h">:5j2 ,-1_"=>?LMN^_lmn">:5j2 ,+3_"?"1+s <

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

>:5j2 ,(differ value)_

sección, pero probablemente no por mucho.

AndoDaan
fuente
2

JavaScript 240 228

Presentació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 ...

z=(!1+"")[1];        // assigns "a" to z, !1+"" === "false"
y=(!!1+"")[3];       // assigns "e" to y, !!1 === "true"
x={}+"";             // assigns "[object Object]" to x
w=x[1];v=x[2]        // assigns "o" to w, and "b" to v
u=z+"t"+w+v;         // creates the mystical "atob" command, yes, I'm gonna use it!
1[_="c\157nstruct\157r"][_] // sets up the primitive to a number object... this acts similar to the "window" primitive object so that I can play off functions...
z+'l'+y+'rt(         // starts creating an alert call
'+u+'("Iy\x51lJj"+'+(t=u+'("\x51\x51==")')+'+'+u+'("M"+'+t+'+"==")+"Nj"+'+u+'("Zw==")+"5\x51EFC\x52E\71\x51UVJhYm\x52lZ2\71wc\x51=="))')()
// Above line abuses atob command with a couple of nested instances of the command, also using hex and octal equivalents of characters

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 el constructorde un constructorde number...) 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 ...

WallyWest
fuente
2

Principal - Insomnio , 50

FFy~~jF~y<={*n<<ztf>={.f=(tHL~k<yf={*n>Lj(FunLn<j~

Produce:

abdegopq04689@ABDOPQR#$%&

Bono - Insomnio, 268

ogeeoddp@poe@ggep@oe@opge@gee@%d@p@gqeo@p@ge@e9de49ed9e4dppe@%e@geee@ge@p%ee@%e@dp@%ep@%ee@%d@%eeee@%e@%ee@%e@geee@%e@gee@ggopop@peo@ggep@p@ge@ggeep@ge@gee@%e@geee@ge@gee@ge@ppoep@%ee@%edep@gepe@ge@%ee@%e@geee@ge@%ee@%%eeoe@ge@pep@%gep@p@%e@%%eep@%e@gee@e%e@oe@%gep@p@

Produce:

!"'()*+,-./12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\]^_`cfhijklmnrstuvwxyz{|}~

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 .

n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳
fuente
1

Befunge 98 - 46 bytes

Versión de Iffunge-ified de la entrada Pyth de isaacg:

"xwvnlkihYXWVKIHG?=;7-,+*">:5j2 ,-7_"?"1+:,s <
AndoDaan
fuente