Esto es mucho más avanzado que Cómo aleatorizar letras en una palabra y la Transposición de Cambridge debido a la regla sobre qué letras pueden intercambiarse con cuáles. Una expresión regular simple no será suficiente aquí.
Es bien sabido que todavía se puede leer un texto mientras se mezclan las entrañas de sus palabras, siempre que sus primeras y últimas letras más sus contornos generales permanezcan constantes. Dado un texto imprimible Ascii + Newline, codifique cada palabra de acuerdo con estas reglas:
La codificación debe ser (pseudo) aleatoria.
Una palabra es una secuencia de los caracteres latinos, de la A a la Z.
Solo las letras iniciales serán mayúsculas.
La primera y la última letra deben permanecer intactas.
Al codificar, solo las letras dentro de uno de los siguientes grupos pueden intercambiar lugares:
acemnorsuvwxzbdfhklgpqyitj(permanece en su lugar)
Ejemplo
Srcmable wrods mientras psrrnveieg su oeiltnus
Es bien sabido que todavía se puede leer un txet mientras los inrands de sus wrods se han movido, siempre y cuando su primer y últimas letras más sus ovaerll ontliues raemin no puedan. Dado un patnirlbe Acsii + Nwnliee txet, samrclbe ecah word anoccdirg a estos relus:
Smncrbliag debe ser (pusedo) rondam.
Un wrod es una secuencia de los chreratacs latinos, A thurogh Z.
Solo los comités iniciales serán respetados.
Las letras fisrt y lsat deben permanecer uctoenhud.
Cuando se detalla, solo las letras con uno de los guorps de Fwllnoiog pueden intercambiar plaecs:
aneusvrowxmcz
bhkfdl
gqpy
it
j(se queda en plcae)Emxaple

tse supone que es más corto quehaunque muchas personas no lo escriben así.tdel grupo 2? O tal vez ponerten un grupo 4 coni?printable/patnirlbeno es del todo legible. Creo que eli/tswap es el culpable. Hmm ...paintrlbeNo, eso tampoco ayudó. Probablemente sea elpr/paswap, entonces. El esquema se mantiene, pero creo que leí "pr" y "pa" como semánticamente (?) 1 letra.prtnialbeAh, sí. Eso lo hizo. Sin embargo, no estoy seguro de poder ofrecer una solución al algoritmo.Respuestas:
Jalea ,
8074 bytes-2 bytes moviéndose de
czar + vex + mow + sunaczar + vexes + unmown(los repetidosesysnno son un problema)-1 byte usando en
Tịlugar deȦÐf-1 byte usando en
Œle€Øalugar dei@€ØB>⁵-2 bytes reconfigurando un poco el diseño
Un programa completo que toma una lista de caracteres (o una cadena con formato Python), que imprime el resultado de la codificación.
Pruébalo en línea!
Parece una gran cantidad de dificultad para Jelly (¡o eso o me he perdido un truco, que se sabe que sucede!) Esto seguramente será superado por idiomas con una mejor manipulación de cadenas como
Retina(sin funcionalidad aleatoria) o 05ab1e .¿Cómo?
fuente
czar + vex + mow + sun‽acemnorsuvwxz. Escribiré código comentado en algún momento también.PHP, 278 bytes
Pruébalo en línea!
Expandido
funciones
array_combine
array_filter
array_keys
ksort
preg_replace_callback
barajar
fuente
Pyth , 79 bytes
donde
❤está U + 0018.Pruébalo en línea!
Muestra
Es bien sabido que un texto todavía se puede radar mientras que los mundos de sus mundos han sido seraclbmd, siempre y cuando sus primeras y últimas letras más sus antojitos ontliues rmeain conntsat. Dado un texto, muestre cada acrncdiog de wrod para ver relus:
Scamrlbing debe ser (puesdo) rnadom.
Una palabra es suqencee de los caracteres latinos, A thuorgh Z.
Solo las letras iaitinl serán siempre una mejora.
La primera y la última letra se quedan sin saber.
Cuando srancblimg, solo las letras con uno de los siguientes guorps pueden generar plecas:
amsuvrcnoxewzbhfkdlgpqyitj(permanece en su lugar)fuente
\pLlugar de[A-Za-z]?\pL?\wseria suficiente?JavaScript 176 bytes
Método:
RegExp itera sobre el centro de cada palabra (
/\B(\w+)\B/g) usando 1st replace fn.1st replace fn itera una matriz de RegExp para cada grupo de letras (
/[bdfkhl/g, /[gqpy]/g, etc..).Cada iteración crea una matriz temporal de caracteres del centro de palabras que aparecen en el grupo de letras actual.
Cada iteración luego usa RegExp del grupo de letras actual para iterar sobre todo el centro de palabras, usando un segundo reemplazo fn.
2nd reemplaza fn divide aleatoriamente la matriz temporal, elimina un carácter aleatorio y lo devuelve.
Manifestación:
Ejecútelo en JSFiddle: https://jsfiddle.net/CookieJon/bnpznb7r/
fuente
\pL(\pL+)\pLmás que\B(\w+)\Bexcluir dígitos y subrayar.b=>[...].map(...)&&bahorra otro byte. Además, no estoy seguro de queisea necesario.t.replace(/[A-Za-z]([a-z]+)(?=[a-z])/g,(w,b)=>...w[0]+b...)o algo así.C,
453,356369 bytesungolf con comentarios
fuente
Python 3.6,
349340 bytesSangrado con pestañas. La función se nombra
A. No utiliza la fuerza bruta, el tiempo de ejecución es determinista, como preguntó OP.fuente
Mathematica 232 Bytes
La idea básica es permutar los subconjuntos correspondientes a los 4 grupos de caracteres distintos. Probablemente hay margen de mejora.
fuente
C,
306282 BytesPruébalo en línea
Sin golf:
fuente
JavaScript (ES6),
380327311294 Bytes(
298282265 Bytes excluyendo las reglas)¡Gracias a @Shaggy por los útiles consejos!
La función f toma una cadena de cualquier tipo (una sola palabra, varias palabras, varias palabras con signos, lo que interpreta como separación de palabras) y
una matriz deuna serie de "reglas" de cualquier longitud separadas por comas.Ese conjunto de reglas, en el caso de su pregunta, sería
["aneusvrowxmcz", "bhkfdl", "gqpy", "it"]"aneusvrowxmcz,bhkfdl,gqpy,it"Algunas letras no se mezclan aunque podrían hacerlo, ya que usted indicó en su pregunta que las letras "pueden intercambiar espacios". Si lo interpreté mal, puedo cambiar el código para codificar siempre las letras que coinciden con las reglas.
Sé que esta es una cantidad enorme de bytes y no podrá competir con los idiomas de golf, pero quería probar de todos modos, espero que les guste :)
Código no uglificado legible por humanos:
fuente
varS anlets. 02) A menos que sea una función recursiva, no es necesario incluir la declaración de variable (f=) en el recuento de bytes. 03) Use curry cuando una función tiene 2 parámetros (enb=>d=>lugar de(b,d)=>) y llame a su función conf(b)(d). 04) Tienes laibandera, así que no necesitas incluirlaA-Zen tu expresión regular. 05) Puede usarindexOfosearchen una cadena, sin dividirlo en una matriz.Clojure,
326322324 bytesActualización 1: reemplazado
(map(fn[[k v]]...)...)por(for[[k v]...]...)Actualización 2: expresión regular fija, usando en
\pLlugar de\wetc.Tengo muchas ganas de ver algo más corto. La versión anterior sin golf con algunos ejemplos se ejecuta:
fuente
\pL+y\PL+en lugar de\w+y\W+para excluir dígitos y subrayado.Perl 6 ,
241195 bytesIncluye +1 byte para el
-pinterruptor de línea de comandos.Sin golf:
fuente
(\pL)(\pL+)(\pL)más que(\w)(\w+)(\w)excluir dígitos y subrayar.\pLincluye muchos caracteres fuera del rango permitido de letras latinas AZ. He actualizado mi código para reflejar los requisitos con mayor precisión.\pLse deletrea<:L>en Perl 6.C #,
438394380374 bytesAhorre 10 bytes gracias a @ MartinEnder ♦.
Molesto,
CaptureCollectionno se implementaIEnumerable<T>y es por eso que.Cast<Capture>()se necesita. Con suerte, puedo combinar la consulta Linq y elforeachbucle.Estoy seguro de que hay muchas cosas que se pueden jugar al golf, pero me tomó el tiempo suficiente para que funcione ...
Pruébalo en línea!
Versión formateada / completa:
fuente