Escriba un bloque cuadrado de código que tenga N caracteres de ancho y N caracteres de alto, para algún número entero positivo N.
Por ejemplo, su N puede ser 5 y el bloque se verá así:
ThisI
sMy5B
y5Cod
eBloc
kOkay
Este bloque debe comportarse de la siguiente manera:
Cuando se extrae la fila superior y se ejecuta como un programa, el texto exacto
row
debe imprimirse en stdout.Por ejemplo,
ThisI
imprimiríarow
.Cuando se extrae la columna izquierda y se ejecuta como un programa, el texto exacto
col
debe imprimirse en stdout.Por ejemplo,
Tsyek
imprimiríacol
.Cuando se extrae la diagonal principal desde las esquinas superior izquierda a la inferior derecha y se ejecuta como un programa, el texto exacto
dia
debe imprimirse en stdout.Por ejemplo,
TMCoy
imprimiríadia
.Cuando todo el bloque se ejecuta como un programa, incluidas las nuevas líneas (con una nueva línea final opcional), el texto exacto
blk
debe imprimirse en stdout.Por ejemplo,
ThisI sMy5B y5Cod eBloc kOkay
imprimiría
blk
.
Detalles
- Los cuatro programas se ejecutan en el mismo lenguaje de programación.
- Los N 2 caracteres en el bloque original pueden ser cualquier cosa menos terminadores de línea .
- Si su idioma no tiene una salida estándar, puede usar otro método de salida común. Debe ser el mismo método en los cuatro programas.
El envío cuyo bloque original contiene la menor cantidad de caracteres distintos (sin contar las nuevas líneas) gana. Tiebreaker va a la presentación con el N. más pequeño
fuente
Respuestas:
> <> (Pez) , 3 caracteres únicos (N = 2000)
El código usa
1
y-
para poner números arbitrarios en la pila yp
para (auto-) modificar el código basado en los 3 números superiores en la pila. Por ejemplo, poner una!
posición en0 0
se vería como003b*p
normal> <> y conp1-
él se convierte en111-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1--11-11-p
.Después de la modificación, el puntero de instrucción (IP) se envuelve alrededor del código y ejecuta la parte modificada. En el caso de "bloque", la IP se redirige para una modificación adicional (luego se redirige de nuevo) para diferir del caso de "fila". En el caso de "fila", ocurren los mismos dos redireccionamientos, pero no hay código entre ellos, por lo que no tienen ningún efecto.
Los códigos finales generados para los 4 casos (omitiendo las
p1-
partes sin cambios ):El tamaño del código es de 4 MB y se puede acceder al código aquí . (No hay dificultad para ejecutarlo).
El programa generador python3 está disponible aquí .
fuente
CJam,
1312 caracteres únicos, N = 5Tan directo como se pone
ACTUALIZACIÓN : espacio convertido a
a
(no operativo en este caso) como lo señala Runner112Pruébalo en línea aquí
fuente
a
para reducir el número de personajes únicos a 12, ¿verdad?Bash, 19 caracteres únicos, N = 19
trap echo\ row exit
. Esto haceecho row
que se ejecute cuando sale el script (solo la primera línea)ttt=t echo col
t=tt echo dia
echo blk
luego sale.fuente
exit
para reducir los caracteres únicos en 4. También puede mover elexit
comando a la siguiente línea y reemplazar todos los puntos y comas con espacios.> <> , 14 caracteres únicos, N = 10
Bastante sencillo en un lenguaje 2D. La única parte difícil es que necesitamos
\
distinguir entrerow
yblk
.fuente
p1-
daría una solución de tres caracteres, pero sería realmente molesto generar (y probablemente no ganará).Brainfuck, 2 personajes únicos, N = 378
Con posible leve flexión de las reglas.
El programa es un poco grande, así que aquí hay un enlace a él en Pastebin .
El
row
,col
ydia
programas son sencillos. Simplemente incrementan la celda de bytes hasta que se alcanza el código ASCII correcto y luego sale. Si la carta ya pasó, se incrementa hasta que la celda se desborda para que pueda comenzar de nuevo en 0.El
blk
programa es donde ocurre la ligera flexión de la regla. Para imprimir el "texto exactoblk
" como se solicitó en el desafío, se utilizan espacios de retroceso (código ASCII 8), que requiere la consola / terminal de visualización para admitirlo. Cada vez que se imprimen valores errantes de los programasrow
/col
/dia
, me aseguro de que se eliminen generando algunos códigos de control de retroceso. Para simplificar las cosas, me he asegurado de que todos los valores errantes que se emiten en un punto sean parte del rango ASCII imprimible.fuente
C (gcc) , 26 caracteres únicos, N = 29
Pruébalo en línea!
fuente
Rubí, 24 caracteres únicos, N = 17
Pruébalo en línea!
fuente