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 999o -4242. 5es 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,4678siendo todos unos)n[4]ser uno y luego pruebe cada extracción de rango'111'.maxlugar desum.fuente
counts porsumsy'111'con[1]*3) TIO (He estado tratando de ser inteligente con unn[i::j]>=[1]*3bucle 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
lengthprueba se puede acortarsum[1|1<-a]. Funciónspara:(1-e,n+sum[1|b>e])que puede alinear para guardar otro byte. Se puede utilizar elotherwiseprotector dema guardar par de(). Finalmente,&&en el nivel superior en un guardia puede ser reemplazado por,. ...sumcomprensión en una lista para emitir un booleano a int. Pruébalo en línea!m. Pruébalo en línea!adebe ser,0¿no puedes usarlo ensum alugar desum[1|1<-a]? Pruébalo en línea!1s 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
1s en la entrada, entonces no hay solución, por lo que producimos no hay salida.1en estas posiciones producirá el resultado final.1en una posición incorrecta, su distancia es 1 o 2. Será 2 si está rodeado por otros1s. Por ejemplo, si hay1s en los índices [0, 1, 2, 4], entonces la distancia para el incorrecto1es 2.Con esto en mente, considere este pseudocódigo para obtener la distancia contribuida al resultado por el índice 1.
bdel 0 al 15.0 <= b <= 7la distancia es 0. Cuando8 <= b <= 14la distancia es 1. Cuandob == 15la 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
-1Usos
1para llenado y0vací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