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:
acemnorsuvwxz
bdfhkl
gpqy
it
j
(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
t
se supone que es más corto queh
aunque muchas personas no lo escriben así.t
del grupo 2? O tal vez ponert
en un grupo 4 coni
?printable
/patnirlbe
no es del todo legible. Creo que eli
/t
swap es el culpable. Hmm ...paintrlbe
No, eso tampoco ayudó. Probablemente sea elpr
/pa
swap, entonces. El esquema se mantiene, pero creo que leí "pr" y "pa" como semánticamente (?) 1 letra.prtnialbe
Ah, 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 + sun
aczar + vexes + unmown
(los repetidose
sysn
no son un problema)-1 byte usando en
Tị
lugar deȦÐf
-1 byte usando en
Œle€Øa
lugar 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:
amsuvrcnoxewz
bhfkdl
gpqy
it
j
(permanece en su lugar)fuente
\pL
lugar de[A-Za-z]
?\pL
?\w
seria 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+)\pL
más que\B(\w+)\B
excluir dígitos y subrayar.b=>[...].map(...)&&b
ahorra otro byte. Además, no estoy seguro de quei
sea 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
var
S anlet
s. 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 lai
bandera, así que no necesitas incluirlaA-Z
en tu expresión regular. 05) Puede usarindexOf
osearch
en 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
\pL
lugar de\w
etc.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
-p
interruptor de línea de comandos.Sin golf:
fuente
(\pL)(\pL+)(\pL)
más que(\w)(\w+)(\w)
excluir dígitos y subrayar.\pL
incluye muchos caracteres fuera del rango permitido de letras latinas AZ. He actualizado mi código para reflejar los requisitos con mayor precisión.\pL
se deletrea<:L>
en Perl 6.C #,
438394380374 bytesAhorre 10 bytes gracias a @ MartinEnder ♦.
Molesto,
CaptureCollection
no se implementaIEnumerable<T>
y es por eso que.Cast<Capture>()
se necesita. Con suerte, puedo combinar la consulta Linq y elforeach
bucle.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