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 men el 7 ° u 8 ° carácter, y no puede contener un gen 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: fdbcaecomo en este ejemplo cyb aún son adyacentes.
La adyacencia también se envuelve, lo que significa que no se puede hacer fdbecacomo fya 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,stephensyhelowi, 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,iyhson 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~jque no es lo suficientemente inteligente ...fuente
PHP 7.1,
136131 bytesinspirado en la solución de Jörg :
Ejecutar como tubería con
-ro 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-1con($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
-ro probarlo en línea . (¡Asegúrese de que la versión PHP 7.1.0 o superior esté seleccionada!)Descompostura
fuente
mayube, salidasyeuamb,myason adyacentesRuby,
11097102 bytesPruébalo en línea!
fuente
3594817062una 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...Gcon}...al final del programa, al igual que este .Gen otra publicación para guardar un byte reemplazándolo{...}*porD.... Supongo que todavía no estoy acostumbrado ...