¿Qué pasa si tenemos un corredor compuesto por dos espejos paralelos?
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
Ahora, le damos brillo a un láser ...
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \|
| /|
| / |
Oh mira. Rebotó, hacia el final, allí.
¿Qué pasa si dibujamos dos láseres PERO yendo en la dirección opuesta?
| \ / |
| \ / |
| \/ |
| /\ |
| / \ |
| / \ |
| / \ |
|/ \|
|\ /|
| \ / |
Hmm, no parecían encontrarse allí. Eso es conveniente ¿Qué sucede si ambos láseres ocupan el mismo espacio?
| \ / |
| \ / |
| \ / |
| X |
| / \ |
| / \ |
| / \ |
| / \|
|/ /|
|\ / |
Supongo que fue bastante obvio, ¿eh?
Dibujar estos diagramas a mano es bastante laborioso (confía en mí en esto). ¿Quizás algún código podría hacerlo por nosotros?
- Escriba un código para generar dos espejos paralelos, con dos láseres que se cruzan y se cruzan.
- Entrada (todos los enteros):
- El ancho del corredor
- La longitud del corredor
- Posición inicial del láser que se dirige hacia la derecha (indexado a cero, debe ser inferior al ancho)
- Posición inicial del láser izquierdo (indexado a cero, debe ser inferior al ancho)
- Proceso
- Si un láser funciona correctamente, se dibujará un espacio a la derecha en la siguiente línea.
- Si se deja en funcionamiento un láser, se dibujará un espacio a la izquierda en la siguiente línea.
- Si un láser no puede dar el paso lateral, cambiará su dirección, pero no su posición.
- Si ambos láser están en el mismo índice, imprima una X mayúscula en ese índice.
- Salida
- Una cadena con varias líneas.
- Cada línea comienza y termina con un carácter de tubería (|)
- El láser a la derecha se denota con una barra diagonal inversa (\)
- El láser izquierdo se denota con una barra diagonal (/)
- La intersección de dos láseres se denota con una X mayúscula.
- Cualquier idioma
- Me gustaría ver enlaces TIO
- Intenta arreglarlo en el menor número de bytes
Casos de prueba
ancho: 6 longitud: 10 a la derecha: 1 a la izquierda: 4
| \ / |
| \/ |
| /\ |
| / \ |
|/ \|
|\ /|
| \ / |
| \/ |
| /\ |
| / \ |
ancho: 6 longitud: 10 derecha: 0 izquierda: 1
|\/ |
|/\ |
|\ \ |
| \ \ |
| \ \ |
| \ \|
| \/|
| /\|
| / /|
| / / |
ancho: 4 largo: 10 a la derecha: 2 a la izquierda: 0
|/ \ |
|\ \|
| \ /|
| X |
| / \|
|/ /|
|\ / |
| X |
|/ \ |
|\ \|
ancho: 20 longitud: 5 a la derecha: 5 a la izquierda: 15
| \ / |
| \ / |
| \ / |
| \ / |
| \ / |
ancho: 5 longitud: 6 derecha: 2 izquierda: 2
| X |
| / \ |
|/ \|
|\ /|
| \ / |
| X |
ancho: 1 longitud: 2 derecha: 0 izquierda: 0
|X|
|X|
Respuestas:
Stax , 40 bytes
Ejecutar y depurarlo
Pruébalo en línea!
Estoy bastante seguro de que esto puede ser más golfizado.
La entrada se proporciona en forma de
width [right-going left-going] length
(por comentario de @EngineerToast).ASCII equivalente:
fuente
width [right-going left-going] length
JavaScript (ES6), 149 bytes
Toma entrada en la sintaxis de curry
(w)(h)([a,b])
.Pruébalo en línea!
Comentado
fuente
Python 2 , 119 bytes
Pruébalo en línea!
fuente
\\/
al golf\/
? Aunque la barra diagonal inversa se interpreta dos veces, aún no escapará de la barra diagonal.Python 2 , 168 bytes
Pruébalo en línea!
fuente
d
!Python 2 ,
187181179177174172171 bytesPruébalo en línea!
Recursivo:
Python 2 , 172 bytes
Pruébalo en línea!
Impresión alternativa recursiva:
Python 2 , 172 bytes
Pruébalo en línea!
fuente
C (sonido metálico) ,
240236208 bytesPruébalo en línea!
f () toma los parámetros de la siguiente manera:
x
= ancho,y
= longitud,r
= posición inicial de línea inicial derechal
= posición inicial de línea inicial izquierda-4 bytes. créditos Kevin Cruijssen. Gracias
fuente
while
a afor
para eliminar el{}
y uno de los punto y coma. Y 1 byte más cambiandoc&&d
ac&d
. Pruébelo en línea 236 bytes .Lienzo ,
6640 bytesPruébalo aquí!
fuente
Carbón ,
5650 bytesPruébalo en línea! El enlace es a la versión detallada del código. Editar: guardado 6 bytes al reducir la dependencia de pivotar. Explicación:
Imprime los lados.
Pase sobre los dos láseres.
Muévase al inicio del láser.
Bucle sobre la altura.
Dibuje a
\
o/
en la dirección apropiada, a menos que el cuadrado no esté vacío, en cuyo caso dibuje unX
.¿Hemos golpeado un lado?
Si es así, dé un paso de lado e invierta la dirección de desplazamiento.
fuente
Java (JDK 10) , 186 bytes
Pruébalo en línea!
fuente
PHP,
177 169166 bytesrequiere PHP 7.1 para índices de cadena negativos, PHP 5.5 o posterior para indexar literales de cadena.
para PHP <7.1 , eliminar
^L
, reemplazar"X\/"
con"/X\\"
,:0
con+1:1
,[$e]
con[$e+1]
, eliminar."|"
e insertar|
antes de la nueva línea. (+3 bytes)para PHP <5.5 , reemplace
"/X\\"
con$p
e inserte$p="/X\\";
al principio. (+2 bytes)toma datos de los argumentos de la línea de comandos. Corre con ellos
-nr
o pruébalos en línea .fuente
Python 3 , 162 bytes
Pruébalo en línea!
fuente
Rubí , 117 bytes
Pruébalo en línea!
Lambda anónima tomando datos como ancho
w
, altoh
y una variedad de puntos de partidaa
.fuente
PowerShell ,
243233222205 bytesPruébalo en línea!
Oooof esos bloques lógicos son grandes y sucios y en su mayoría duplicados. El siguiente paso sería reescribirlos para que no necesiten la declaración else.
fuente
Python 2,
165164 bytesSalvó un byte gracias a Jonathan Frech.
Pruébalo en línea!
fuente
\\/
es equivalente a\/
.K (ngn / k) , 58 bytes
Pruébalo en línea!
función anónima que acepta tres argumentos:
x
el ancho,y
la longitud,z
un par de posiciones iniciales para los láseresfuente
C (gcc) , 169 bytes
Pruébalo en línea!
fuente
Kotlin ,
322311302 bytesCambió la forma en que pongo la dirección del láser en la cadena de 11 bytes. Se eliminó la asignación de cuándo para 9 bytes.
Pruébalo en línea!
fuente