Considere un bloque de texto cuadrado, N caracteres de ancho por N de alto, para algún número entero impar N mayor que 1.
Como ejemplo, dejemos que N = 5 y el texto sea:
MLKJI
NWVUH
OXYTG
PQRSF
ABCDE
Observe que este es el alfabeto (además de Z) en espiral en sentido antihorario desde la esquina inferior izquierda. Es como una alfombra enrollada.
"Desenrollando" el texto un cuarto de vuelta en el sentido de las agujas del reloj para que FGHI
estén al mismo nivel que los ABCDE
resultados
PONM
QXWL
RYVK
STUJ
ABCDEFGHI
Este desenrollado se puede hacer 7 veces más hasta que el texto sea una sola línea:
SRQP
TYXO
UVWN
ABCDEFGHIJKLM
UTS
VYR
WXQ
ABCDEFGHIJKLMNOP
WVU
XYT
ABCDEFGHIJKLMNOPQRS
XW
YV
ABCDEFGHIJKLMNOPQRSTU
YX
ABCDEFGHIJKLMNOPQRSTUVW
Y
ABCDEFGHIJKLMNOPQRSTUVWX
ABCDEFGHIJKLMNOPQRSTUVWXY
Reto
El desafío es escribir un programa que sea un bloque de texto N × N que genere el número de veces que se ha "desenrollado" un cuarto de vuelta cuando se reorganiza en los patrones de desenrollado y se ejecuta.
Realmente hay dos concursos aquí: (con suerte no será demasiado complicado)
- Haga esto con el N. más pequeño (hasta un límite de N = 3)
- Haga esto con el N. más grande (sin límite)
No habrá una respuesta aceptada, pero el ganador en cada una de estas categorías recibirá al menos 50 representantes de recompensas de mi parte. En caso de empate, las respuestas más antiguas ganan.
Ejemplo
Si su bloque de código es
MyP
rog
ram
ejecutarlo como está debería generar 0.
Corriendo
rM
oy
ramgP
debería dar salida 1.
Corriendo
or
ramgPyM
debería dar salida 2.
Corriendo
o
ramgPyMr
debería dar salida 3.
Finalmente, la ejecución ramgPyMro
debería generar 4.
Detalles
- El resultado debe imprimirse en stdout (o la alternativa más cercana) por sí mismo. No hay entrada
- Solo puede usar ASCII imprimible (códigos hexadecimales 20 a 7E, que incluye espacio) en su código.
- Los espacios llenan el espacio vacío en los arreglos de desenrollado. (A menos que te estés desenrollando a la izquierda).
- Solo los arreglos de completamente cuadrado a completamente plano deben tener una salida válida. No se ejecutarán otros arreglos.
- No puede leer su propia fuente.
- Puedes usar comentarios.
- N = 1 está excluido ya que en muchos idiomas el programa
0
funcionaría. Si lo desea, puede desenrollar a la izquierda en lugar de a la derecha. Entonces eg
MyP rog ram
se convierte
Pg yo Mrram
y así. No se agregan espacios adicionales al rodar de esta manera. Las lineas acaban de terminar
(Relacionado: escriba un programa rectangular que genere la cantidad de veces que se giró )
fuente
Respuestas:
Golfscript, N <- [5,7 ..]
Completamente desenrollado:
Explicación:
.
(varias veces) - duplica la entrada]
- recoger la pila en una sola matriz,
- tomar su longitud9\-
- restarlo de 9#
- comentario de líneaEl espacio en blanco es un NOP, pero cualquier otro NOP habría funcionado igual de bien.
Completamente enrollado, utiliza nueve copias de la entrada (contenido ignorado) como pila; 9 - 9 = 0; No se ha desenrollado.
Cada desenrollado oculta un punto más (duplicado) detrás del comentario, reduciendo la pila una vez e incrementando la salida.
Completamente desenrollado, usa solo la entrada (contenido ignorado) como la pila; 9 - 1 = 8; Se ha desenrollado 8 veces.
El mismo enfoque funciona para cualquier N> 4: cambie
9
al valor apropiado de 2 * N + 1, luego extienda el patrón de puntos (duplicado) usando el mismo patrón en espiral que garantiza que se desenrolle exactamente un punto durante cada desenrollado.fuente
GolfScript, N = 4
Este derecho rueda como especificaciones originales.
Aquí están los desenrollamientos:
Pruébalo aquí
fuente
.
s y#
s?~
. ¿Tal vez pueda robarlo por N = 3?APL, N = 3
Desenrollado:
Pruébalo en línea.
Calcula el resto de ese número dividido entre 5. Solo se imprime el resultado de la última línea.
APL, N = 2
Desenrollado:
Pruébalo en línea.
≡
devuelve la profundidad (que no debe confundirse con la dimensión o la longitud) de una matriz:0
No es una matriz. Entonces la profundidad es 0.0∞
es una matriz con dos elementos0
y∞
(infinito). Tiene profundidad 1.0∞⍬
tiene otro elemento⍬
, que es una matriz vacía con profundidad 1. También0∞⍬
tiene profundidad 2.Estos dos programas también funcionan en el intérprete en línea. No estoy seguro si el último es sintácticamente correcto.
APL, para cualquier N> = 4
Para N = 4:
Completamente desenrollado:
Para N = 5:
Completamente desenrollado:
1↓
elimina un elemento en la matriz. También devuelve la matriz vacía si el argumento es escalar.⍴
obtiene la longitud de la matriz.fuente
()[]
ya que aparecerán en algún lugar no deseado.