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ó (
LLLL
con4L
) - Cambia el primero
a
con@
- Cambia el primero
b
con8
- Cambia el primero
c
con(
- Cambia el primero
d
con6
- Cambia el primero
e
con3
- Cambia el primero
f
con#
- Cambia el primero
g
con9
- Cambia el primero
h
con#
- Cambia el primero
i
con1
- Cambia el segundo
i
con!
- Cambia el primero
k
con<
- Cambia el primero
l
con1
- Cambia el segundo
l
coni
- Cambia el primero
o
con0
- Cambia el primero
q
con9
- Cambia el primero
s
con5
- Cambia el segundo
s
con$
- Cambia el primero
t
con+
- Cambia el primero
v
con>
- Cambia el segundo
v
con<
- Cambia el primero
w
conuu
- Cambia el segundo
w
con2u
- Cambia el primero
x
con%
- Cambia el primero
y
con?
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@2m1ng
puzzles
->pu2z135
passwords
->p@25uu0r6$
wwww
->4uu
aaaaaaaaaaa
->11a
lllolllolll
->3103io3l
jjjmjjjj
->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
WWWW
con222W
es fácil en Java, pero4W
no ... 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Ù}J
Perl 5 , 152 + 1 (
-p
) = 153 bytesPruébalo en línea!
fuente
-p
se usa como argumentoperl
en la línea de comandos que lee automáticamente la entradaSTDIN
yprint
el 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~k
un!
lugar? Actualmente reemplazó la segunda aparición dei
con 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()
jjjmjjjj
debería dar salida3jm4j
pero 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
a
cony
y 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
a
ay
y eliminar los marcadores de posición.Marque la (originalmente) segunda aparición de las letras
i
,l
,s
,v
, ow
con 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
foldr
para ejecutar la cadena a través de una secuencia de transformaciones de cadena hacia atrás. La secuencia "comienza" con lar
cual la repetición cuenta el reemplazo al usarspan
para 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 argumentof
para 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 quewords
pueda 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)b
lugar delet(p,q)=span(==a)b
y enp>[]
lugar dep/=[]
.m
pointfree: ¡($(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
.sub
cambia 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@0
es 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