Considere un cuadrado de caracteres ASCII imprimibles (puntos de código 0x20 a 0x7E) para la longitud del lado N , como el siguiente (aquí, N = 6 ):
=\
g \
7
m+y "g
L ~
e> PHq
También requerimos que cada fila y cada columna contengan al menos 1 espacio y 1 carácter no espacial . (El ejemplo anterior satisface esto).
Definimos lo negativo de tal cuadrado, para que sea un cuadrado del mismo tamaño, donde cada espacio se reemplaza por un no espacio y viceversa. Por ejemplo, lo siguiente sería un negativo válido del ejemplo anterior:
1234
a b cd
ZYXWV
!
{} [ ]
?
La elección de los caracteres no espaciales es irrelevante (siempre que sean del rango ASCII imprimible).
El reto
Debe escribir un programa, con código fuente cuadrado con longitud lateral N> 1 , que imprime un negativo de sí mismo en STDOUT. Los espacios finales tienen que ser impresa. Puede o no imprimir una sola línea final.
Las reglas habituales de quine también se aplican, por lo que no debe leer su propio código fuente, directa o indirectamente. Del mismo modo, no debe asumir un entorno REPL, que imprime automáticamente el valor de cada expresión ingresada.
El ganador es el programa con la longitud del lado más bajo N . En caso de empate, gana el envío con la menor cantidad de caracteres no espaciales en el código fuente. Si todavía hay un empate, la primera respuesta gana.
fuente
Respuestas:
CJam, 4 x 4 (8 sin espacios)
Pruébelo en línea en el intérprete de CJam .
Salida
Cómo funciona
L
empuja una matriz vacía y_
empuja una copia de la misma.El bloque
empuja ese bloque en la pila.
_
empuja una copia del bloque de código y lop
imprime, seguido de un salto de línea.Finalmente, el intérprete imprime todos los elementos restantes en la pila: dos matrices vacías que no afectan la salida y el bloque de código original.
Versión alternativa
Pruébelo en línea en el intérprete de CJam .
Salida
Cómo funciona
L
empuja una matriz vacía y la~
descarga. La pila está vacía de nuevo.El bloque
empuja ese bloque en la pila.
_
empuja una copia del bloque y~
ejecuta la copia.El
_
interior de la copia del bloque empujará una copia del bloque original, quep
se imprimirá, seguido de un salto de línea.Finalmente, el intérprete imprime el elemento restante en la pila: el bloque de código original.
fuente
Perl, 7 × 7 (42 no espacios)
Salida:
fuente
7
hecho de7
. :)CJam, 4X4 (
1210 sin espacios)Salida:
Versión anterior con 12 no espacios:
Y la salida es
Como señaló Martin, esta versión tiene
*
,4
,4
como salida;)
Pruébalo en línea aquí
fuente
Marbelous - 16x16
¡Pruébalo aquí! Los espacios en blanco, el tablero cilíndrico y las bibliotecas de inclusión deben ser verificados.
Salida
Explicación
Aquí hay dos placas: la placa principal (que se muestra a continuación) y la
ss
placa, que no toma entradas y emite dos espacios (0x20) a STDOUT.Una celda en blanco es equivalente a a
..
, y cualquier cosa después de a#
es un comentario.Cada tick,
ss
genera dos espacios para STDOUT.La ruta verde es un bucle simple que genera una nueva línea (0x0A) al final de cada séptima marca.
El camino azul generará los números (
Hp
imprime una canica como dos dígitos hexadecimales) presentes en la salida, al final de cada sexta marca.Después de imprimir
01
una vez, el bucle termina y se mueve hacia abajo por el camino rojo, que duplica esta canica.Se imprime un duplicado (el segundo
01
) y el otro se envía por el camino negro, que termina el tablero en la!!
celda. Debido a la ubicación delHp
utilizado en esta última impresión,01
aparece antes de los dos espacios de la misma marca, en lugar de después, el comportamiento de cada otraHp
llamada.fuente
Python - 11x11
Salida
Es una solución bastante desordenada y aburrida, pero solo pensé en mostrar eso ...
Esta solución aprovecha el hecho de que, si está dentro de un par de paréntesis en Python, puede dividir su código en varias líneas y agregar espacios arbitrariamente sin obtener un
IndentationError
. Otra forma de hacer algo como esto es terminando la línea con una barra invertida.fuente
Python - 7x7 (37 sin espacios)
Salida
Utiliza el antiguo
%
operador de formato de cadena de Python para hacer el trabajo:+7
y-7
se ocupa de la justificación derecha / izquierda, y el último espacio para que coincida con el paréntesis de cierreprint
en particular. Al preparar la cadena de formato, también tenemosfuente
JavaScript (9x9)
Salida
Notas
Hice un código de golf (lo mejor que pude) para un cuadrado con diagonal de cualquier tamaño n:
reemplazando los números *** asdf *** con constantes dependiendo de la longitud del lado n, por ejemplo para n = 6:
Pero, aunque ese código tiene una longitud 46, no pude conseguir que el espacio constante se alineara con un espacio en la diagonal del código hasta que fuera tan grande como un 9x9, con una línea desperdiciada (la quinta)
Editar: modificado para agregar alerta (). Antes de:
fuente
CJam, 5x5, 12 sin espacios
No es un ganador, pero quería agregar una presentación bastante pequeña y dispersa , ya que la mayoría de las respuestas solo imprimen una diagonal.
huellas dactilares
Pruébalo aquí.
Los dos últimos caracteres del código, no hacen nada, por lo que en realidad solo tiene 10 bytes de código real. Para una cuadrícula más pequeña, incluso podría reducirlo en otros dos bytes a 8, pero eso no cabe en 3x3, y este código no funciona incluso para tamaños de cuadrícula.
Cómo funciona:
fuente
Befunge , 9x9
No tengo idea de por qué hice esto. Se tomó forma demasiado tiempo. Tengo un dolor de cabeza masivo ahora.
Salida:
Alguna explicación
El código se usa
g
para leer los@
caracteres de la cuadrícula "sobre la marcha" (y también el espacio final, que es@ / 2
), yp
para modificar el bucle para escribir la última línea de salida.Todos los caracteres del código se usan en algún momento, ya sea como código o como datos (el
9
y el@
en las dos últimas líneas).Básicamente tuve que hacer muchas soluciones para que el código funcionara. El puntero de instrucción hace múltiples intersecciones durante la ejecución, de las cuales algunas se saltan. (No pude usar ninguna instrucción allí para diferentes direcciones, ya que interferirían. No hay NOP). En otro lugar o reutilicé el mismo personaje o simplemente lo deshice (vea el
$:
en el medio).También hice un trabajo creativo en la pila:
n,0
. Entonces tengo que decrementarn
. La solución obvia sería$1-
, pero logré acortarlo usando!-
.0
. Luego organicé el cambiador de código (20g46p7g46\p
) para usar eso0
, en lugar de desperdiciar 2 caracteres$0
.fuente
!-
; Eso es algo que haría. Dato curioso: en Funge-98,z
es un NOP.z
no fue incluido en el wiki y he usado este para la codificación, lo que significaba ningún comando no volcó la dirección IP. Más o menos tuvo que refactorizar el 70% del código debido a un lugar que debería ser NOP.Python 3, 8x8
Hay 50 caracteres no espaciales y 14 espacios. La última línea tiene un carácter inútil, pero todo lo demás es necesario.
Salida:
fuente
(a,*b,c)="12345"
... la asignación destacada es interesante :)Rubí, 8x8
Salida:
fuente
CJam, 5X5
Y la salida es
Estaba tan cerca de la solución 4X4.Mira mi otra respuesta<sigh>
Pruébalo en línea aquí
fuente
C ++, 12x12
Editar: Entonces, me obsesioné un poco con este desafío y logré reducirlo de 17x17 a 12x12. Me tomó un tiempo darme cuenta de que podía usarlo
/**/
como un delimitador de tokens. Este código aprovecha el hecho de que un empalme de línea todavía funciona en Clang con un espacio después, aunque da advertencias y arruina la coloración de Xcode del código.Salida:
fuente
Befunge-98 , 8x8 (56 no espacios [11 nops])
Nota: En interés de un buen deportista, esto lee su propia fuente
'
, lo que lo convierte en una trampa para algunos. Lee el debate aquí .Programa
Salida
Explicación
La versión sin golf
(no espacio y espacio se reemplazan con 'ny' por razones de legibilidad).
Esta solución se basa en el hecho de que al usar un índice [0, ancho ^ 2) mod, el ancho del cuadrado puede decirle si está al final de la fila o en la diagonal. Dado que todos los espacios se colocan a lo largo de la diagonal, es fácil saber cuándo imprimir un no espacio.
En pseudocódigo
Discusión
Estoy muy orgulloso de ello, aunque desearía haber hecho que todos los no-espacios también sean no-nop. ¡También estoy orgulloso de no haber usado el tropo estándar Befunge get-increment-put! Imprime diferentes símbolos para el no espacio porque tenía espacio para él y no quería ser aburrido.
¡Pruébalo en Windows con BefungeSharp !
fuente
CJam, 4 x 4 (8 sin espacios)
Pruébelo en línea en el intérprete de CJam .
Salida
Cómo funciona
N
empuja un salto de línea como una cadena singleton.a
envuelve esa cadena en una matriz.`
inspecciona el resultado, es decir, empuja una representación de cadena de la matriz.Este es el resultado:
S*
une la cadena resultante (matriz de caracteres), separando sus elementos usando espacios. En otras palabras, coloca un carácter de espacio entre todos los pares de caracteres adyacentes de la cadena.Este es el resultado:
N
empuja otro salto de línea.X$
copia el elemento de la pila en el índice 1 (contando desde arriba), es decir, la cadena de varias líneas.Finalmente, el intérprete imprime todos los elementos de la pila: la cadena de líneas múltiples original, el avance de línea y la copia de la cadena de líneas múltiples.
fuente
SOGL V0.12 , 2x2 (2 no espacios)
Pruébalo aquí!
Salida
Explicación
En SOGL, todas las líneas, excepto la última, son líneas de reemplazo; reemplaza en todas partes en el código continuo el último carácter de la línea con todo lo que está antes. Así que la primera línea aquí es
replace space with 2 in the next line
.Luego
2╚
se ejecuta la siguiente línea :2
empuja 2 y╚
crea una diagonal de tamaño 2.fuente
CBM BASIC v2.0 (8 × 8)
Una mejora con respecto a mi respuesta anterior , utilizando un enfoque completamente diferente:
Salida:
fuente
Rubí,
8x87x7Salida:
Versión anterior, 8x8 con 20 espacios:
Salida:
fuente
Pushy , cuadrado 4x4
No competir ya que el lenguaje es posterior al desafío:
Código:
Salidas:
Pruébalo en línea!
Debido a que el espacio en blanco es irrelevante en Pushy, el código se organiza fácilmente para que coincida con el negativo de su salida. El programa real se ve así:
Las barras diagonales inversas comienzan un comentario, por lo que el final
\o/
solo está ahí para completar lo negativo y lucir genial.Alternativamente, para el mismo puntaje, podemos tener las siguientes soluciones:
fuente
Haskell, 10 × 10
Define una función auxiliar
a ! b
que imprime una línea del formulariobbbbbbbbba
y una función recursivan & c
que imprimen
líneas del formularioccccccccc␣
seguidas de una línea del formulario␣␣␣␣␣␣␣␣␣c
.Usa
<$
(fmap const
, de nuevo) en un rango para repetir un personaje. Tenga en cuenta que<$
solo está disponible sin importaciones desde GHC 7.10, que es posterior a este desafío.No estoy completamente seguro de si esto hace que esta presentación no sea competitiva.Nada realmente emocionante con la elección del diseño o algoritmo aquí; No tenía muchos bytes de sobra y es una suerte que uno pueda obtener los saltos de línea en
putStrLn
la forma en que lo hicieron.fuente
05AB1E , 3x3 (6 bytes sin espacio )
Salida:
Pruébalo en línea.
Explicación:
fuente
Perl, 6x6 (26 no espacios)
Pasé un rato mirando a través de estos y estaba seguro de que habría una solución Perl más pequeña que 7x7 de alguna manera ... ¡Un desafío muy divertido! Esta solución requiere
-E
.Uso:
Salida:
fuente
CBM BASIC v2.0 (9 × 9)
Salida:
fuente
C (gcc) ,
7x78x8EDITAR: La versión anterior tenía un comportamiento incorrecto.
Pruébalo en línea!
fuente
Gelatina , 4 x 4 (12 sin espacios)
Pruébalo en línea!
Salida:
Esto fue muy divertido.
Cómo funciona
Parte fácil: Jelly ignora los espacios en blanco (siempre y cuando solo se utilicen los builtins de un byte).
Parte difícil: cada línea en Jelly es un enlace (o función) separado, por lo que no es muy corto extender una declaración constante en varias líneas. Usar un literal de cadena es un buen candidato, pero no tengo idea de cómo generar el negativo.
fuente