Aún se deben evitar las palabras comunes para usarlas como contraseñas. Este desafío es acerca de la codificación de un programa muy simple que munges una contraseña dada ( M odificar U asta N ot G uessed E asily).
Entrada
Una palabra, que es una cadena escrita en el alfabeto abcdefghijklmnopqrstuvwxyz. No importa si las letras son minúsculas o mayúsculas.
Munging
- Cambie cualquier secuencia repetida de una misma letra a sí misma precedida por el número de veces que la letra se repitió (
LLLLcon4L) - Cambia el primero
acon@ - Cambia el primero
bcon8 - Cambia el primero
ccon( - Cambia el primero
dcon6 - Cambia el primero
econ3 - Cambia el primero
fcon# - Cambia el primero
gcon9 - Cambia el primero
hcon# - Cambia el primero
icon1 - Cambia el segundo
icon! - Cambia el primero
kcon< - Cambia el primero
lcon1 - Cambia el segundo
lconi - Cambia el primero
ocon0 - Cambia el primero
qcon9 - Cambia el primero
scon5 - Cambia el segundo
scon$ - Cambia el primero
tcon+ - Cambia el primero
vcon> - Cambia el segundo
vcon< - Cambia el primero
wconuu - Cambia el segundo
wcon2u - Cambia el primero
xcon% - Cambia el primero
ycon?
La regla 1 debe aplicarse la cantidad necesaria de veces hasta que no sea posible aplicarla más. Después de eso se aplica el resto de las reglas.
Salida La palabra munged
Ejemplos
codegolf->(0639o1#programming->pr09r@2m1ngpuzzles->pu2z135passwords->p@25uu0r6$wwww->4uuaaaaaaaaaaa->11alllolllolll->3103io3ljjjmjjjj->3jm4j
Este es el código de golf , ¡así que haga su programa lo más corto posible!
Nada en esta publicación debe usarse como ideas de contraseña o como parte de las prácticas de contraseña.

Respuestas:
Java 8,
237321319280247241240237 bytes+84 bytes porque las reglas obtuvieron cambios ... ( EDITAR: finalmente de vuelta a mis 237 bytes iniciales ) . Reemplazar
WWWWcon222Wes fácil en Java, pero4Wno ... Si solo Java tuviera una forma de usar el grupo de captura de expresiones regulares para algo. Obtener la longitud con"$1".length(), reemplazar la coincidencia en sí misma"$1".replace(...), convertir la coincidencia en un número entero connew Integer("$1"), o usar algo similar como Retina (es decirs.replaceAll("(?=(.)\\1)(\\1)+","$#2$1")) o JavaScript (es decirs.replaceAll("(.)\\1+",m->m.length()+m.charAt(0))) sería mi cosa número 1 que me gustaría ver en Java en el futuro en beneficio de codegolfing ..>.> Creo que esta es la décima vez que odio Java no puede hacer nada con la coincidencia del grupo de captura ..-78 bytes gracias a @ OlivierGrégoire .
I / O es mayúscula.
Explicación:
Pruébalo aquí
fuente
JavaScript (ES6), 147 bytes
Casos de prueba
Mostrar fragmento de código
Explicación
Se ejecuta a través de una serie de reemplazos en la cadena de entrada
s, en el orden especificado por el desafío. Cada elemento de la serie es una matriz o cadena, con dos elementos, que luego se separa (...r) y se pasa as.replace().fuente
05AB1E , 69 bytes
-9 bytes gracias a Emigna
Pruébalo en línea!
fuente
'w„uu„2u‚â4uuγvygD≠×yÙ}JPerl 5 , 152 + 1 (
-p) = 153 bytesPruébalo en línea!
fuente
-pse usa como argumentoperlen la línea de comandos que lee automáticamente la entradaSTDINyprintel contenido de s$_al final del script. TIO permite esa opción, y dado queperl -pe<code>es 1 byte más deperl -e<code>lo que se cuenta como un byte adicional.~intermedioj~kun!lugar? Actualmente reemplazó la segunda aparición deicon a en~lugar de a!.Probablemente no sea el más golfista posible, pero funciona.
-6 bytes gracias a ovs
-77 Bytes gracias a NieDzejkob y Jonathan French
Python 3 ,
329323 bytes246 bytesPruébalo en línea!
fuente
.lower()jjjmjjjjdebería dar salida3jm4jpero da salida3jm3jj. Editar: 258 bytes con este problema fijoRetina ,
166124bytesPruébalo en línea! Explicación:
Reemplace una serie de letras repetidas con la longitud y la letra.
Haga coincidir la primera aparición de las letras
aconyy márquelas con un marcador de posición.Arreglar la primera aparición de
w.Fijar la primera ocurrencia de todas las otras letras de
aayy eliminar los marcadores de posición.Marque la (originalmente) segunda aparición de las letras
i,l,s,v, owcon un marcador de posición.Soluciona la segunda aparición de
w.Arregle la segunda aparición de las otras cuatro letras.
fuente
Haskell ,
221218213 bytesPruébalo en línea!
Abusos
foldrpara ejecutar la cadena a través de una secuencia de transformaciones de cadena hacia atrás. La secuencia "comienza" con larcual la repetición cuenta el reemplazo al usarspanpara romper la cola de la cuerda cuando deja de ser igual a la cabeza. Si la primera parte de eso no está vacía, es una repetición, así que imprimimos la longitud +1. A continuación, presentamos un argumentofpara cada reemplazo de caracteres en orden (inverso). Los reemplazos se codifican como una sola cadena con el primer carácter como el carácter que se va a reemplazar y el resto como la cadena (ya que los reemplazos w son múltiples caracteres) para ir en su lugar. Puse estas cadenas codificadas en una gran cadena separada por espacios para quewordspueda dividirla en una lista para mí.EDITAR: ¡Gracias @Laikoni por salvarme 5 bytes! Ese fue un uso inteligente de
$lo que no pensé. Tampoco conocía ese<-truco.fuente
(p,q)<-span(==a)blugar delet(p,q)=span(==a)by enp>[]lugar dep/=[].mpointfree: ¡($(f<$>words"w2u ... y?")++[r]).foldr($)Pruébelo en línea!Lua , 173 bytes
Pruébalo en línea!
Ungolfed y explicó:
fuente
C # (.NET Core),
317,289, 279 bytesPruébalo en línea!
Espero que esté bien recibir una matriz de caracteres como entrada y no como una cadena.
Sin golf :
fuente
C ++,
571495478444 bytes-127 bytes gracias a Zacharý
la
"/a@/b8/c(/d6/e3/f#/g9/h#/i1//i!/k</l1//li/o0/q9/s5//s$/t+/v>/wuu//w2u/x%/y?/"cadena se usa para transformar de un personaje a otro. 1/significa que el primer "próximo carácter" debe ser reemplazado por lo que sigue al siguiente/, 2 significa que el segundo "próximo carácter" debe ser reemplazado por lo que sigue.Pruébalo en línea
fuente
R ,
224219 bytesPruébalo en línea!
Desagradable, pero la parte principal es la sustitución iterativa en el
Reduce.subcambia solo la primera aparición del partido.¡Gracias a JayCe por señalar un buen golf!
fuente
Perl 5 , 123 bytes
Código de 122 bytes + 1 para
-p.Desarrollado independientemente de la respuesta de @ Xcali , pero usando un proceso muy similar.
Pruébalo en línea!
fuente
Python 2 ,
220216194190188 bytesPruébalo en línea!
Python 3 , 187 bytes
Pruébalo en línea!
fuente
Pip ,
103102bytesPruébalo en línea!
Explicación
El código realiza tres pasos de transformación:
* Necesitamos probar si
a@?m@0es nulo. No es suficiente probar que es verdad, ya que 0 es un índice legítimo que es falso. Pip no tiene una forma interna breve de probar si un valor es nulo, pero probar su longitud funciona lo suficientemente bien en este caso: cualquier número tendrá una longitud de al menos 1 (verdadero), y cero tiene una longitud de cero (falsey).fuente