¡No debe confundirse con la contraseña Bishop Goodness !
Dada una cadena, responda (verdadero / falso o dos valores consistentes) si constituye una contraseña fuerte contra los obispos .
Una contraseña es segura contra los obispos si es una cadena que consiste en alternar letras (in a-h) y dígitos (in 1-8) de modo que cada par de caracteres se pueda interpretar como un cuadrado en un tablero de ajedrez, y si coloca un peón blanco en cada cuadrado llamado en la contraseña, entonces no hay forma de que un alfil blanco viaje, en cualquier número de movimientos consecutivos, desde cualquier casilla en la primera 1fila ( ) a cualquier casilla en la última 8fila ( ).
Ejemplos
Contraseñas seguras contra los obispos
a1b1c1d1e1f1g1h1a8b8c8d8e8f8g8h8a1b2c3d4d5f5f4g3g4h2b5h4g4f4e4c4b4a4c3e3a1b1c1d1e1f1g1a8b8c8d8e8f8g8b4b5d4d5f4f5g3h5
Por ejemplo,
a1b1c1d1e1f1g1a8b8c8d8e8f8g8corresponde a la posicióny
b4b5d4d5f4f5g3h5corresponde a la posición
Contraseñas débiles contra los obispos
a4c4e4g4g5d6f6e3d2b2(bien formado pero no fuerte, ¡gracias Jo King por este ejemplo!)b1c1d1e1f1g1h1a8b8c8d8e8f8g8(bien formado pero no fuerte)h4g4f4e4c4b4a4c3(bien formado pero no fuerte)d4(bien formado pero no fuerte)b4b5d4d5f4f5g2h5(bien formado pero no fuerte)correct horse battery staple(mal formado)1a1b1c1d1e1f1g8a8b8c8d8e8f8g(mal formado)a(mal formado)aa(mal formado)
fuente



1a través8de la primera prueba? No puede viajar a cada columna, ya que laacolumna está completamente llena de peones, pero puede viajar a cada fila sin problemas, ¿no? Tengo la sensación de que me falta algo ...: SRespuestas:
Ruby,
115182163 bytesPruébalo en línea!
Retornos
1para fuertes ynilpara débiles. (Los +67 bytes fueron para tener en cuenta el "retroceso").Algunos trucos que se usaron:
En lugar del rango numérico
0..99, usamos el rango de cadena'00'..'99'para que el número se rellene automáticamente a la izquierda a 2 dígitos y se stringifique. Esto hace que la comprobación fuera de los límites sea muy corta: coincide con la expresión regular/[09]/.Dentro de la función auxiliar, mientras que la construcción de la lista de las nuevas coordenadas
[x-11, x-9, x+9, x+11], que al mismo tiempo asignamosz[x]a9en el proceso, que pasa a ser un valor Truthy (marcando la casilla visitado).En la última línea, queremos comprobar que la matriz
z[81,9]no contiene9. Hacemos esto eliminando todas las instancias de9(z[81,9]-[9]), luego preguntando por el noveno elemento de la matriz resultante ([8]). Como sabemos que la matriz originalmente tenía 9 elementos, si se eliminó alguno, obtendremosnil, mientras que si todos permanecieron, obtendremos el último elemento de la matriz (que siempre es1).fuente
Python 2 ,
330318313309370 bytesPruébalo en línea!
¡Prueba la versión práctica en línea! (el original puede tomar 4 ^ 32 operaciones para verificar completamente, sugiero usar este - el mismo número de bytes)
No es una solución súper corta: no pude descubrir cómo hacer que una versión de la función lambda de g sea más corta que g.
-4 bytes gracias a Quuxplusone
+61 bytes que representan el retroceso (gracias por señalar eso a Jo King y por los consejos de golf)
fuente
q=r=1sería más corto queq=1 r=1, ¿verdad? Yif r:más corto queif r>0:.Pitón 2 ,
490476474Pruébalo en línea!
Esto funciona por "inundación de relleno". Primero creamos una lista
ade qué cuadrados son adyacentes a qué otros cuadrados, en sentido obvio. Luego creamos un conjuntoxde exclusiones (basadas en la contraseña). Luego inicializamos un conjuntorde cuadrados alcanzables, que comienza como la primera fila (menos cualquier exclusión), y repetidamente "inundamos" hacia afuera desde allí, 99 veces, lo que debería ser más que suficiente. Finalmente, probamos para ver si alguno de los cuadrados en la última fila terminó en nuestro conjunto accesible. Si es así, ¡tenemos una contraseña débil! Si no, tenemos una contraseña segura.Desventaja, tal vez descalificante (no sé la regla habitual aquí): si la contraseña está mal formada (como "grapa de batería de caballo correcta"), lanzamos una excepción en lugar de devolverla
False. ¡Pero siempre devolvemosTruesi la contraseña es segura!Menos 16 bytes gracias a Jo King. Nos alineamos
aen el único lugar donde se usa, y doblamos constantemente algunas matemáticas.fuente
fors que no pude ver cómo eliminar. Descubrí que reemplazarrange(99)conrepr(f)trabajos en mi máquina local pero no en el intérprete de tio.run ... ¡pero descubrí que[1]*99era más corto de todos modos! Entonces eso ahorró 4 bytes más.fors que no pude ver cómo eliminarlos - ¡Oh! Aparentemente, Python trata33forcomo dos tokens (mientrasfor33que sería un token). Hoy aprendí. Menos 2 bytes más, entonces.Limpio , 285 bytes
Pruébalo en línea!
$[]se$ :: [[Int]] [Char] -> Boolcompone con el primer argumento, dando\ [Char] -> Bool.La función funciona al consumir la cadena de dos caracteres a la vez, devolviendo inmediatamente falso si la cadena está en un formato no válido tan pronto como ve la parte no válida. Una vez que la cadena ha sido procesada, coloca un alfil en cada casilla vacía a un lado del tablero y los mueve de todas las formas posibles 64 veces y comprueba si alguna de las posiciones finales está en la fila objetivo.
fuente
Trueparaa1b1c1d1e1f1g1? No es que entienda nada sobre cómo funciona. :)Wolfram Language (Mathematica) ,
339316358353345 bytes-23 bytes gracias a @Doorknob.
+42 bytes que representan el retroceso.
Pruébalo en línea!
Reescribí la mayor parte de esto para dar cuenta del retroceso, creo que puede haber una manera más fácil de definir el gráfico
g, Mathematica tieneGraphData[{"bishop",{8,8}}]cuál es el gráfico de todos los movimientos que un obispo puede hacer en un tablero de ajedrez ( Bishop Graph ), pero este gráfico incluye conexiones adicionales que el vecino diagonal más cercano. Si alguien conoce una forma más corta de hacerlo, hágamelo saber. El crédito por la construcción del gráfico corresponde a esta respuesta de MathematicaSE .Devoluciones
Truepara contraseñas seguras,Falsepara contraseñas débiles / mal formadas. Tenga en cuenta que para la mayoría de las contraseñas mal formadas producirá un montón de mensajes de error y luego regresaráFalse. Si esto no está en línea con las reglas, se pueden suprimir cambiandof[n_]:=...a unf[n_]:=Quiet@...costo de 6 bytes.Sin golf:
Descompostura:
Toma un argumento de cadena y lo divide en una lista de cadenas cada una de longitud
m.Devuelve
Falsesi se producen mensajes de error, que es la forma en que captamos las cadenas mal formadas (es decir, supongamos que están bien formadas, lo que inevitablemente produce un error en la línea).Toma la cadena de posiciones de peón y la divide de tal manera que se
"a2h5b"convierte{{"a","2"},{"h","5"},{"b"}}, luegoLetterNumberconvierte la letra en un número (a -> 1, etc.) yFromDigitsconvierte el número en un entero. Si la cadena no está bien formada, este paso producirá un error que será atrapado alCheckregresarFalse. Estos dos números se convierten en un número entero correspondiente a un cuadrado en el tablero.Construye el gráfico de todos los bordes diagonales del vecino más cercano con las posiciones de peón eliminadas.
Estas son listas de vértices iniciales y finales desocupados respectivamente
Recorre los vértices iniciales y finales, para cada par
FindPathhabrá una lista de caminos entre ellos. Si no hay caminos entre ellos, será una lista vacía, por lo queLength@regresa0. Si no hay rutas en absoluto,mserá cero, y volveremosTrue, de lo contrario regresaremosFalse.fuente
TrueyFalsepuede ser1>0y0>1respectivamente.p[1]@#&/@es equivalente a justop@1/@.Sequence@@puede ser reemplazado con##&@@. En lugar de{LetterNumber[#[[1]]],FromDigits[#[[2]]]}&/@, puedes usar{LetterNumber@#,FromDigits@#2}&@@@.p@1/@, pero veo la idea general. Supongop@1 = StringPartition[#,1]&que es un poco confuso para mí, supongo porqueptoma dos argumentos de dos maneras diferentes, una comom_y la otra como#...&, supongo que esto es solo una cuestión de precedencia. Aunque tiene sentido esop@m = p[m].fque tome un solo argumento,f@#&tenga el mismo comportamiento que simplementef, aquífestáp[1]. (Luego cambié la[]notación a@, que siempre es idéntica excepto por precedencia).