Fila, Columna, Diagonal, Bloque

13

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:

  1. Cuando se extrae la fila superior y se ejecuta como un programa, el texto exacto rowdebe imprimirse en stdout.

    Por ejemplo, ThisIimprimiría row.

  2. Cuando se extrae la columna izquierda y se ejecuta como un programa, el texto exacto coldebe imprimirse en stdout.

    Por ejemplo, Tsyekimprimiría col.

  3. Cuando se extrae la diagonal principal desde las esquinas superior izquierda a la inferior derecha y se ejecuta como un programa, el texto exacto diadebe imprimirse en stdout.

    Por ejemplo, TMCoyimprimiría dia.

  4. Cuando todo el bloque se ejecuta como un programa, incluidas las nuevas líneas (con una nueva línea final opcional), el texto exacto blkdebe 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

Pasatiempos de Calvin
fuente
Teniendo en cuenta que hay ciertamente una solución en algún lenguaje esotérico de dos símbolos, creo que esto se convertirá en una solución de exprimir que en el más pequeño N.
XNOR
@xnor Probablemente. Aunque una respuesta Lenguage distinta de 1 no está fuera del alcance de la posibilidad. Aún así, este método de puntuación es más interesante que tener el N más pequeño primero.
Hobbies de Calvin
¿Cómo puede trabajar Lenguage dado que los programas de fila y columna tienen la misma longitud?
xnor
@xnor Ah, tienes razón. No funcionaria.
Hobbies de Calvin
¿Pueden los programas sin bloque también terminar con una nueva línea final?
jimmy23013

Respuestas:

6

> <> (Pez) , 3 caracteres únicos (N = 2000)

El código usa 1y -para poner números arbitrarios en la pila y ppara (auto-) modificar el código basado en los 3 números superiores en la pila. Por ejemplo, poner una !posición en 0 0se vería como 003b*pnormal> <> y con p1-él se convierte en 111-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 ):

row:      "wor"\ooo;

column:   "loc"ooo;

diagonal: "dia"ooo;

block:    "wor"\"klb"ooo;

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

randomra
fuente
14

CJam, 13 12 caracteres únicos, N = 5

"row"
cd;"a
oaiaa
l"aa;
"blk"

Tan directo como se pone

ACTUALIZACIÓN : espacio convertido aa (no operativo en este caso) como lo señala Runner112

Pruébalo en línea aquí

Optimizador
fuente
2
Cada espacio se puede convertir en un personaje apara reducir el número de personajes únicos a 12, ¿verdad?
Runer112
@ Runer112 ¡Maldición! ¡Gracias por el consejo!
Optimizador
8

Bash, 19 caracteres únicos, N = 19

trap echo\ row exit
t=t trap exit      
t=t echo blk       
exit               
=                  
t    e             
      c            
e      h           
c       o          
h                  
o         d        
           i       
c           a      
o                  
l                  
  • La primera fila es trap echo\ row exit. Esto hace echo rowque se ejecute cuando sale el script (solo la primera línea)
  • La primera columna es ttt=t echo col
  • La diagonal es t=tt echo dia
  • El bloque completo funciona cancelando el controlador EXIT configurado en la primera línea y echo blkluego sale.
Trauma digital
fuente
1
Puede usar minúsculas exitpara reducir los caracteres únicos en 4. También puede mover el exitcomando a la siguiente línea y reemplazar todos los puntos y comas con espacios.
jimmy23013
6

> <> , 14 caracteres únicos, N = 10

"wor"\ooo;
     "    
l a  k    
o  i l    
c   db    
"    "    
o    oo   
o    o o  
o    o  o 
;    ;   ;

Bastante sencillo en un lenguaje 2D. La única parte difícil es que necesitamos \distinguir entre rowy blk.

Sp3000
fuente
randomra señala que p1-daría una solución de tres caracteres, pero sería realmente molesto generar (y probablemente no ganará).
Sp3000
3

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, colydia 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 blkprograma es donde ocurre la ligera flexión de la regla. Para imprimir el "texto exacto blk" 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 programas row/ 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.

DPenner1
fuente
2

C (gcc) , 26 caracteres únicos, N = 29

*w;main(){printf(w?w:"row");}
ww;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;/*;;;;;;;;;;;;;;;;;;;;;;;;
m;;m;;;;;;;;;;;;;;;;;;;;;;;;;
a;;;a;;;;;;;;;;;;;;;;;;;;;;;;
i;;;;i;;;;;;;;;;;;;;;;;;;;;;;
n;;;;;n;;;;;;;;;;;;;;;;;;;;;;
(;;;;;;(;;;;;;;;;;;;;;;;;;;;;
);;;;;;;);;;;;;;;;;;;;;;;;;;;
{;;;;;;;;{;;;;;;;;;;;;;;;;;;;
p;;;;;;;;;p;;;;;;;;;;;;;;;;;;
r;;;;;;;;;;r;;;;;;;;;;;;;;;;;
i;;;;;;;;;;;i;;;;;;;;;;;;;;;;
n;;;;;;;;;;;;n;;;;;;;;;;;;;;;
t;;;;;;;;;;;;;t;;;;;;;;;;;;;;
f;;;;;;;;;;;;;;f;;;;;;;;;;;;;
(;;;;;;;;;;;;;;;(;;;;;;;;;;;;
";;;;;;;;;;;;;;;;";;;;;;;;;;;
c;;;;;;;;;;;;;;;;;d;;;;;;;;;;
o;;;;;;;;;;;;;;;;;;i;;;;;;;;;
l;;;;;;;;;;;;;;;;;;;a;;;;;;;;
";;;;;;;;;;;;;;;;;;;;";;;;;;;
);;;;;;;;;;;;;;;;;;;;;);;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
};;;;;;;;;;;;;;;;;;;;;;;};;*/
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;*w="blk";

Pruébalo en línea!

gastropner
fuente
1

Rubí, 24 caracteres únicos, N = 17

trap(0){$><<:row}
rr=a=:blk;%;00000
a0a00000000000000
p00p0000000000000
(000(000000000000
00000000000000000
)00000)0000000000
{000000{000000000
$0000000$00000000
>00000000>0000000
<000000000<000000
<0000000000<00000
:00000000000:0000
c000000000000d000
o0000000000000i00
l;;trap(0){$><<a;
};000000000000;{}

Pruébalo en línea!

Lynn
fuente