Dada una posición con una fila de torres y / o espacios vacíos, muestra cuántos movimientos de torre diferentes son posibles. Una torre puede moverse hacia la izquierda o hacia la derecha a un espacio vacío, pero no a uno que requiera pasar sobre otra torre. Cuando una torre se mueve, las otras torres permanecen en su lugar.
Por ejemplo, desde esta posición, son posibles 6 movimientos :
.R..RRR.
- La primera torre (más a la izquierda) puede moverse 1 espacio a la izquierda, o 1 o 2 espacios a la derecha (3 movimientos)
- La siguiente torre solo puede moverse 1 o 2 espacios a la izquierda (2 movimientos)
- La tercera torre no puede moverse en absoluto porque está apretada entre otras dos torres (0 movimientos)
- La última torre solo puede moverse 1 espacio a la derecha (1 movimiento)
Tenga en cuenta que una posición puede no tener torres o espacios vacíos.
Entrada: una lista no vacía (cadena, matriz, etc.) de torres y espacios vacíos. Puede representarlos como True
/ False
, 1
/ 0
, 'R'
/ '.'
o cualquiera de los dos caracteres consistentes de un solo byte o números de un dígito de su elección. Depende de usted cuál significa torre y cuál significa espacio vacío.
Salida: un entero no negativo. Los flotadores de números enteros también están bien.
Casos de prueba
La salida es el número a la izquierda.
6 .R..RRR.
0 .
0 R
4 R..RR
3 ...R
8 ..R..R..
0 ......
Para más casos de prueba, aquí están todas las entradas hasta la longitud 5.
0 .
0 R
0 ..
1 .R
1 R.
0 RR
0 ...
2 ..R
2 .R.
1 .RR
2 R..
2 R.R
1 RR.
0 RRR
0 ....
3 ...R
3 ..R.
2 ..RR
3 .R..
3 .R.R
2 .RR.
1 .RRR
3 R...
4 R..R
3 R.R.
2 R.RR
2 RR..
2 RR.R
1 RRR.
0 RRRR
0 .....
4 ....R
4 ...R.
3 ...RR
4 ..R..
4 ..R.R
3 ..RR.
2 ..RRR
4 .R...
5 .R..R
4 .R.R.
3 .R.RR
3 .RR..
3 .RR.R
2 .RRR.
1 .RRRR
4 R....
6 R...R
5 R..R.
4 R..RR
4 R.R..
4 R.R.R
3 R.RR.
2 R.RRR
3 RR...
4 RR..R
3 RR.R.
2 RR.RR
2 RRR..
2 RRR.R
1 RRRR.
0 RRRRR
Python 3 ,
3029 bytesPruébalo en línea!
-1 byte gracias a @JoKing
La función toma una cadena de bytes de Python como entrada. Cada espacio vacío se codifica como una pestaña y cada torre se codifica como un byte que
b'\x00'
tiene valor0
.El cálculo es equivalente a
lambda s:(s+s).strip().count(b'\t')
tener un recuento de bytes más bajo.fuente
JavaScript (ES6),
3833 bytesGuardado 5 bytes gracias a @JoKing
Toma la entrada como una cadena. Espera un espacio para un cuadrado vacío y cualquier otro personaje para una torre.
Pruébalo en línea!
Comentado
Python 2 ,
4033 bytesGuardado 7 bytes gracias a @Grimy
Pruébalo en línea!
fuente
count
lugar desplit
( TIO )Japt , 5 bytes
Intentalo
fuente
Perl 6 , 16 bytes
Pruébalo en línea!
Una expresión regular que coincide con todas las instancias exhaustivas de torres seguidas de espacios, o espacios seguidos de una torre y devuelve el número de coincidencias.
fuente
05AB1E , 5 bytes
Pruébalo en línea!
fuente
Retina ,
2315 bytesDuplique la cantidad de espacios entre torres, grep líneas con al menos una torre, luego cuente la cantidad de espacios.
Pruébalo en línea!
Aunque el programa usa espacios en lugar de puntos, agregué un código de prefijo para que los casos de prueba proporcionados se puedan pegar y usar fácilmente.
Esperaba poder usar coincidencias superpuestas
(?<=R.*) | (?=.*R)
, pero las superposiciones no son tan agresivas. Tendría que contar todas las formas posibles de obtener una coincidencia para obtener el resultado correcto con ese método.fuente
.R.R.R.
aunque cambiar la primera líneaR.+R
podría ayudar?Jalea , 6 bytes
Pruébalo en línea!
Un enlace monádico que toma una lista de
0
torre y1
espacio y devuelve un número entero con el número de movimientos. El enlace TIO toma la lista pegada de posibles tablas dadas en la pregunta, convierte al formato correcto y luego genera las respuestas calculadas y correctas.Explicación
fuente
Japt , 6 bytes
Espacios para espacios, cualquier otro personaje para torres.
Intentalo
fuente
Caracoles, 7 bytes
Al menos supera a Retina :)
Pruébalo en línea!
fuente
Jalea , 5 bytes
Pruébalo en línea!
-1 gracias a Jonathan Allan .
0
representa una torre,1
representa un espacio vacío.fuente
Ẉ
para obtener los cinco:ḲẈ+ƝS
Ẉ
pero usando en suṣ0
lugar ...Stax ,
765 bytesEjecutar y depurarlo
Use la pestaña para el cuadrado vacío y cualquier otro personaje para la torre.
fuente
C (clang) , 57 bytes
Pruébalo en línea!
Me di cuenta de que no funcionaba para listas vacías ... ¡Ahora funciona! Además guardado algunos bytes!
1 = torre. 0 = espacio.
for (.. i + = n ++? - i: 1) // cuenta espacios o reinicia movimientos adicionales => i = - ~ i ! * n ++ (@ceilingcat)
o + = * n? r = 1, i: r; // se agrega a la salida -i- (movimientos adicionales) cuando se cumple una torre más los conjuntos -r- (torre se cumple), -i- se borrará para la oración de incremento.
agrega -r- por cada espacio (torre reunida garantizada)
fuente
Haskell , 36 bytes
Pruébalo en línea!
Utiliza 1 para el espacio vacío, 0 para la torre. Cuenta el número de 1 que no está en un bloque inicial de unos y agrega eso al resultado para la cadena invertida.
fuente
Haskell , 33 bytes
Pruébalo en línea!
Función anónima que toma la entrada como una lista de 1s (espacios) y 0s (torres). Esto recorta los espacios desde el principio y el final de la lista, luego concatena las dos versiones de la lista y las suma.
Esto usa GHC 8.4.1 o posterior para tener acceso al
<>
operador sin importarlo.fuente
Python 2 , 59 bytes
Pruébalo en línea!
fuente
Japt , 6 bytes
Pruébalo en línea
fuente
Wolfram Language (Mathematica) ,
4338 bytesPruébalo en línea!
Solución Retina del Puerto de Neil . Utiliza 1 para espacios y 0 para torres.
fuente
Haskell ,
685854 bytesPruébalo en línea!
fuente
Rojo , 46 bytes
Pruébalo en línea!
Solo un puerto rojo de las soluciones JavaScript / Python de Arnauld . Toma un espacio como un cuadrado vacío.
fuente
Java 11,
3532 bytesPuerto de @ Joel Python 3 respuestas 's .
-3 bytes gracias a @Joel también.
Utiliza NULL-bytes (
\0
) para Rooks y tabs (\t
) para espacios.Pruébalo en línea.
Intenté usarlo
s->(s+s).trim().chars().sum()/9
al principio como 31 bytes, pero esto no funciona porque elString#trim
incorporado no solo elimina los espacios iniciales / finales / tabuladores / líneas nuevas, sino también todos los demás bytes que son más pequeños o iguales aU+0020
(unicode 32; un espacio) , por lo que también eliminará los bytes NULL.Gracias a Joel por recomendarme la nueva versión
String#strip
incorporada de Java 11+ (que olvidé que agregaron) como alternativa. Este también elimina las partes finales / iniciales, pero en este caso solo espacios en blanco , por lo que se retienen los bytes NULL.Explicación:
fuente
String.strip()
para eliminar solo espacios en blanco: 32 bytesPerl 5
-MList::Util=sum -pF/R/
, 40 bytesPruébalo en línea!
fuente
C # (compilador interactivo de Visual C #) , 27 bytes
Guardado un byte gracias a @someone
Pruébalo en línea!
fuente
Stax ,
76 bytes-1 byte gracias a recursivo
Ejecutar y depurarlo
fuente
v
, lo que le ahorrará un byte.Befunge-98 (PyFunge) , 73 bytes
Pruébalo en línea!
fuente
C ,
1831561511379691 bytesGracias a ceilingcat por 91 bytes.
R es una torre, todo lo demás es un espacio.
TIO
fuente
82
o'R'
sea más corto de usoe+e*d
quee*(1+d)
,e=0,d=1;else e++; can be changed to
e = -1, d = 1; e ++;, and
b [a] `yb[++a]
puede ser reemplazado con*b
y*++b
Pyth , 7 bytes
Pruébalo en línea!
Toma una cadena de
R
para torres,(espacio) para espacios vacíos
fuente
x86-64 - 26 bytes
La entrada es una matriz de hasta 32 bits y un número entero que representa el número de cuadrados, 1 representa la torre, 0 representa el vacío.
Copia los bits para que se agregue a la izquierda y elimina los bits cero finales. Luego obtiene el número de cero bits iniciales y lo resta del número total de cero bits.
Código de máquina x86-64 - 22 bytes - rangos de ajedrez de longitud regular solamente.
La entrada es un número entero de 32 bits con el byte menos significativo compuesto de 8 bits que representan las torres. 1 es una torre, 0 está vacía.
Copia los bits en el siguiente byte significativo y elimina los bits cero finales. Luego obtiene el número de cero bits iniciales y lo resta del número total de cero bits.
fuente