Entonces, su tarea es tomar un bloque de 3x3 donde -
estén los espacios en blanco medios y *
los espacios llenos medios, por ejemplo:
-**
-*-
*-*
y reorganizar el bloque para que *
forme una X, así:
*-*
-*-
*-*
Entrada: 3x3 cuadrados como los anteriores, pueden ser 3 líneas, una matriz, o como quieras.
Salida: la cantidad más corta de movimientos para reorganizar en una X. Cada movimiento es voltear 2 personajes que se tocan, y son horizontales entre sí, verticales entre sí o diagonales entre sí. Si no es posible, devuelva cualquier salida imposible, por ejemplo 999
o -4242
. 5
es el número más pequeño
Casos de prueba:
1) Salida: 1
-**
-*-
*-*
2) Salida: -1
-*-
-*-
*-*
3) Salida: 3
---
-**
***
4) Salida: 0
*-*
-*-
*-*
Puede sustituir los caracteres en blanco y no en blanco, pero asegúrese de incluir cuál es cuál en su publicación
Code Golf
Recuerde que este es el código de golf, ¡el código más corto gana!
fuente
*
y viceversa, o intercambiarlos?*
? ¿Puedes agregar algunos casos de prueba más?*
o menos de 5 lo hace imposible.-1
? Por ejemplo5
(imposible de otro modo), o arrojando un error?Respuestas:
Python 3 ,
10478 bytesPruébalo en línea!
Editar: aplicó las sugerencias de @Jonathan Allan y @ xnor para reducir drásticamente el recuento de bytes.
La entrada es una lista de
cadenasde longitud 9 con ceros y unos, siendo uno el*
s.Aquí hay algunas observaciones:
Por lo tanto, primero probamos si la cadena tiene cinco unidades y luego contamos estas cosas:
0124
,0346
,2458
,4678
siendo todos unos)n[4]
ser uno y luego pruebe cada extracción de rango'111'
.max
lugar desum
.fuente
count
s porsum
sy'111'
con[1]*3
) TIO (He estado tratando de ser inteligente con unn[i::j]>=[1]*3
bucle pero no lo he encontrado más corto).max(n,n[6:],n[::3],n[2::3])>='1'*3
.Jalea , 26 bytes
Pruébalo en línea!
Tome una lista plana como entrada.
Lástima que Jelly no tenga "índices de verdad multidimensionales" ...
T€ṭ€"JẎ
también funciona pero toma 1 byte más.Algoritmo: hay 5 posiciones de bloque actuales y 5 objetivos (destinos), ¡el algoritmo prueba cada uno de los 5! coincidencia, y la salida de la suma mínima de [origen, destino] distancia de Chebyshev.
fuente
Haskell ,
176132126104 bytesPruébalo en línea!
Toma una lista de enteros con 1 como carácter no en blanco. Suma el número de cuadrados indexados pares distintos de cero, luego agrega 1 si se encuentra alguno de los patrones de doble movimiento (el cuadrado central y la columna / fila del borde están completamente llenos). La última parte es un poco derrochadora, creo, probablemente podría mejorarse mucho con este método de fuerza bruta. Devuelve 5 (una salida imposible) en una entrada imposible.
fuente
length
prueba se puede acortarsum[1|1<-a]
. Funcións
para:(1-e,n+sum[1|b>e])
que puede alinear para guardar otro byte. Se puede utilizar elotherwise
protector dem
a guardar par de()
. Finalmente,&&
en el nivel superior en un guardia puede ser reemplazado por,
. ...sum
comprensión en una lista para emitir un booleano a int. Pruébalo en línea!m
. Pruébalo en línea!a
debe ser,0
¿no puedes usarlo ensum a
lugar desum[1|1<-a]
? Pruébalo en línea!1
s a menos que el centro lo sea0
, puedes hacerlo en3<-
lugar deelem 3$
. También puedes usar ensum.map(a!!)
lugar desum<$>map(a!!)
.Python 2 ,
194192bytesPruébalo en línea!
fuente
[0,1,0,1,0,1,1,1,0]
(esperado: 4, real: 13).JavaScript (ES6), 123 bytes
Toma la entrada como un entero de 9 bits. Resuelve el acertijo aplicando ingenuamente las reglas, que se ha demostrado que no es el enfoque más corto.
Pruébalo en línea!
Comentado
NB : Este código realiza algunos movimientos ilegales más allá de la parte superior del tablero cuando m se multiplica por 64. Pero simplemente se ignoran, ya que no pueden conducir a una solución más corta que la mejor solución legal.
A continuación se muestran las máscaras de bits de intercambio de 9 bases y el patrón de destino. La esquina superior izquierda es el bit más significativo.
fuente
Jalea , 26 bytes
Pruébalo en línea!
Un enlace monádico.
¿Cómo?
Inspirado por la respuesta Python de Bubbler ; golf para adaptarse a Jelly ...
fuente
JavaScript, 85 bytes
Este es un puerto regex de la respuesta de Bubbler .
Ingrese como una cadena de 0/1.
Mostrar fragmento de código
fuente
Stax ,
2322 bytesEjecutar y depurarlo
Este programa toma una matriz de
[0, 1]
como entrada, y devuelve un número entero de movimientos, o una cadena vacía si no hay solución posible.Considere estos índices para la cuadrícula
1
s en la entrada, entonces no hay solución, por lo que producimos no hay salida.1
en estas posiciones producirá el resultado final.1
en una posición incorrecta, su distancia es 1 o 2. Será 2 si está rodeado por otros1
s. Por ejemplo, si hay1
s en los índices [0, 1, 2, 4], entonces la distancia para el incorrecto1
es 2.Con esto en mente, considere este pseudocódigo para obtener la distancia contribuida al resultado por el índice 1.
b
del 0 al 15.0 <= b <= 7
la distancia es 0. Cuando8 <= b <= 14
la distancia es 1. Cuandob == 15
la distancia es 2. Esto se puede calcular utilizando la división entera porb * 2 / 15
.Por lo tanto, la distancia total se puede calcular repitiendo este proceso 4 veces y girando la cuadrícula en el medio.
Ejecute este
fuente
Excel,
8681 bytesViejo: cuando la salida 'imposible' era
-1
Usos
1
para llenado y0
vacío, entrada en rangoA1:C3
.Posible jugar más al golf si podemos devolver valores distintos deDevuelve un-1
"imposible".#DIV/0!
error en cuadrículas imposiblesFunciona con la misma lógica que la respuesta Python de Bubbler .
fuente