Dada una cadena como entrada, genera una o más variantes de la cadena de manera que:
- Ningún personaje está en su posición original
- Ningún personaje es adyacente a un personaje que originalmente era adyacente a
Puede suponer que esto siempre será posible para la cadena dada, y solo contendrá caracteres alfabéticos de mayúsculas y minúsculas ( [a-z]
o [A-Z]
si lo prefiere)
Tenga en cuenta que los duplicados del mismo carácter no se consideran únicos.
Por ejemplo, dada la entrada programming
, la salida no puede contener un m
en el 7 ° u 8 ° carácter, y no puede contener un g
en el 4 ° u 11 ° carácter (1 indexado)
Ejemplo:
Toma la cuerda abcdef
Lo siguiente sería una salida válida: daecfb
Sin embargo, lo siguiente no sería válido: fdbcae
como en este ejemplo c
yb
aún son adyacentes.
La adyacencia también se envuelve, lo que significa que no se puede hacer fdbeca
como f
ya
sigue siendo adyacente.
Casos de prueba:
Tenga en cuenta que estas no son las únicas salidas válidas para las entradas dadas
Escrito como input -> output
:
helowi -> ioewhl
mayube -> euabmy
stephens -> nhseespt
aabcdeffghij -> dbfhjfigaeca
Puntuación:
Este es el código de golf, por lo que gana menos bytes en cada idioma .
fuente
No character is adjacent to a character that it was originally adjacent to
. ¿El orden no importa para la adyacencia? Entonces, ¿la entrada "abcd" no puede tener "ab" en ninguna parte, y tampoco puede tener "ba" en ninguna parte?Respuestas:
Jalea ,
2423 bytesPruébalo en línea!
Extremadamente largo en virtud de que soy horrible con Jelly, pero finalmente funciona, al menos ... todavía en el proceso de golf.
fuente
Python 2 , 185 bytes
Pruébalo en línea!
Imprime todas las cadenas válidas
fuente
mayube
,stephens
yhelowi
, parece funcionar para todos 3. Necesito hacer un validador de salida para hacer algunas pruebas más intensas sin embargoaabcdeffghij
, pero eso no significa que no funcione, solo que toma más de un minuto para esa entradaprint next(l for l in permutations(x) if not((g(l)|g(l[::-1]))&(g(x)|g(x[::-1]))or any(a==b for a,b in zip(x,l))))
`l`[2::5]
= /PHP> = 7.1, 147 bytes
PHP Sandbox en línea
PHP> = 7.1, 184 bytes
Use la distancia levenshtein en lugar de una forma Regex
PHP Sandbox en línea
PHP , 217 bytes
Versión bajo 7.1
Pruébalo en línea!
fuente
helowi
, salidasioewlh
,i
yh
son adyacentesBrachylog , 21 bytes
Pruébalo en línea!
Explicación
Realmente hubiera querido
p.;?z≠ᵐ&j¬{s₂p~s~j}
trabajar por 2 bytes menos, pero parece~j
que no es lo suficientemente inteligente ...fuente
PHP 7.1,
136131 bytesinspirado en la solución de Jörg :
Ejecutar como tubería con
-r
o probarlo en línea . (Asegúrese de que PHP versión 7.1 o superior esté seleccionada)Requiere PHP 7.1; agregue 14 bytes para PHP anterior: Reemplace
$k-1
con($k?:strlen($a))-1
;(dos bytes más para PHP <5.3:
$k?$k-1:strlen($a)-1
)Descompostura
fuente
$c=$a[$k=0], $d=$a[$k-1]
) a través de$s.$s
.PHP 7.1,
187185172178143bytesEjecutar como tubería con
-r
o probarlo en línea . (¡Asegúrese de que la versión PHP 7.1.0 o superior esté seleccionada!)Descompostura
fuente
mayube
, salidasyeuamb
,m
ya
son adyacentesRuby,
11097102 bytesPruébalo en línea!
fuente
3594817062
una salida en su enlace TIO.JavaScript 6, 116 bytes
fuente
Stax ,
2321 bytes¡Ejecute y depure en línea!
Gracias por @recursive por guardar 2 bytes.
Lleva mucho tiempo correr. Una versión más razonable / factible es (solo 2 bytes más)
¡Ejecute y depure en línea!
Explicación
Utiliza la versión desempaquetada para explicar.
fuente
G
. Estás haciendo{...}X!...x!
ejecutar el mismo bloque dos veces. En general, se puede volver a escribir esto comoG...G
con}...
al final del programa, al igual que este .G
en otra publicación para guardar un byte reemplazándolo{...}*
porD...
. Supongo que todavía no estoy acostumbrado ...