Historia
Necesito recordar muchas contraseñas y no quiero usar la misma para varios sitios web, así que se me ocurrió una regla, pero la regla no debería ser transparente, así que lo que hago es:
- Piense en una palabra larga o concepto como
breadpudding
. - Reemplace la primera letra con el sitio en el que estamos iniciando sesión. Si estamos iniciando sesión
google
, nuestra palabra se conviertegreadpudding
. - Escribe la primera letra en mayúscula.
- Cambia la segunda letra a un
@
signo. - Si la contraseña comienza con una no consonante, agregue un número determinado (como
1234
); de lo contrario, agregue otro número (como4321
).
Ta da, ahora tienes una contraseña adecuada.
Sin embargo, este proceso es arduo, por lo que necesito un programa para generar esto en función de lo siguiente:
Problema
Entrada dada:
a
: la palabra inicial, que es una cadena y siempre está en minúscula, y se garantiza que tenga más de 3 caracteres.b
: el sitio en el que estamos iniciando sesión, que es una cadena y siempre está en minúsculas, y se garantiza que no está vacío.c
: el número para las no consonantes, que es un número entero positivo que puede tener ceros a la izquierda.d
: el número de consonantes, que es un entero positivo que puede tener ceros a la izquierda.
Salida de una cadena basada en los criterios anteriores.
Casos de prueba
Entrada a="volvo", b="gmail", c=5555, d="0001"
G@lvo0001
Entrada a="sherlock", b="9gag", c=31415926535, d=3
9@erlock31415926535
Entrada a="flourishing", b="+google", c=11111, d=2222
+@ourishing11111
Reglas
y
es una consonante- Si decide
c
od
es un número entero, puede analizarlo como tal, y los ceros iniciales pueden ignorarse (0091
se trata como91
). - Se permiten espacios en blanco al final y nuevas líneas.
- Puede enviar el resultado a STDOUT o devolver el resultado en una función.
- Personajes permitidos en
a
yb
son[a-z0-9!@#$%^&*()_+=-]
. - Puede aceptar las 4 entradas en cualquier orden consistente.
Este es el código de golf . El código más corto en bytes gana.
Respuestas:
Jalea , 17 bytes
Un programa completo, tomando los argumentos en el orden
b
,a
,c
,d
.Pruébalo en línea!
¿Cómo?
El enlace principal es diádica, tomando
b
ya
, las entradas del programa son entoncesb
,a
,c
, yd
(el tercero a sexto argumentos de línea de comando), de modoc
yd
se accede como tal.fuente
Python 3 , 69 bytes
Pruébalo en línea!
fuente
b[0]not in"aeiou"
en su lugar?9
se cuenta como no consonante.z
es el máximo carácter posible):('a'<b[0])*b[0]not in"eiou"
05AB1E ,
222018 bytesEntrada tomada como
b,a,c,d
Pruébalo en línea!
Explicación (obsoleta)
0è
utilizado en el enlace yaн
que aún no se ha extraído a TIO.fuente
Javascript ES6, 87 bytes
Manifestación
Mostrar fragmento de código
fuente
{|}~
no son caracteres válidos, puede reemplazar/[bcdfghjklmnpqrstvwxyz]/.test(b[0])?d:c
con/[ -_aeiou]/.test(b[0])?c:d
por menos 13 bytesC,
441286139 Bytesfuente
argv[1][0]='c'|argv[1][0]='c'|...
donde c = consonante, puedes fácilmente reducir esto haciendo ¡!(argv[1][0]='a'|argv[1][0]='e'|argv[1][0]='i'|argv[1][0]='o'|argv[1][0]='u')
Reduce la puntuación en 264 solo con eso!(argv[0][1]>='a'&argv[0][1]<='z'&!(argv[1][0]='a'|argv[1][0]='e'|argv[1][0]='i'|argv[1][0]='o'|argv[1][0]='u'))
. Aún más corto por un margen. Sin embargo, hay tantas maneras de jugar golf este código que no sé por dónde empezar ...: sR ,
105103 bytesFunción anónima. Evalúa a
que es lo que hay en TIO. Por favor, ayúdame a jugar golf esa expresión regular porque soy terrible con ellos.
Guardado 2 bytes de Giuseppe.
Pruébalo en línea!
fuente
!grepl('[aeiouy]',m)
grepl('[aeiouy]',m)
y simplemente cambiarc
yd
."if"
hace que laif
sintaxis sea mucho más ordenada en lugar de usarelse
oifelse
; También guardésubstring
en una variable y pusem
en mayúsculas inmediatamente para guardar un byte.pryr
está tratando de hacersubstring
una discusión; y tugrepl
solo encuentra "no vocales", que no es lo mismo que las consonantes. La"if"
cosa que acaba de perder, gracias por señalarlo.pryr::f
que no le gustaría eso; podrías usar la expresión regular '[az && [^ aeiouy]]' de la respuesta de Kevin Cruijissen?Retina ,
8075 bytesPruébalo en línea!
Probar un nuevo idioma aquí, toma entradas en el orden dado en la pregunta
Explicación:
Cree una palabra que sea la segunda palabra, la primera letra, el signo @, la primera palabra del tercer carácter en adelante.
Si la palabra comienza con una no consonante, agregue el primer número
Si todavía quedan 3 líneas (no hay sustitución en el último paso, entonces comienza con una consonante), agregue el segundo número
Mayúscula la primera letra
fuente
QBIC , 81 bytes
Explicación
Tenga en cuenta que las dos últimas líneas parecen iguales, pero el intérprete cambia el comportamiento ligeramente en cada una
;
: cada vez que ve la;
instrucción, crea una nueva variable (en este caso, los vars È $and
F $ `son los primeros disponibles después de leer todos otros literales y argumentos de línea cmd) y asigna el primer parámetro de línea cmd aún no asignado a esa variable.fuente
JavaScript (ES6), 76 bytes
Hubiera agregado esto como una sugerencia como una mejora a la solución de Weedoze , pero parece que no puedo hacer ningún comentario al respecto, ya que casi siempre estoy al acecho
fuente
C # , 111 bytes
La comprobación de la consonante es particularmente costosa sin capacidad directa de expresión regular en el
string
tipo.fuente
F # , 157 bytes
F # todavía es muy nuevo para mí, por lo que probablemente haya mejores enfoques para esto.
fuente
Java 8,
112999287 bytes-13 bytes tomando el
b
último parámetro en lugar del segundo.-1 byte eliminando
y
-7 bytes gracias a @ OlivierGrégoire (y los parámetros están en orden nuevamente)
-5 bytes gracias a @ PunPun1000
Explicación:
Pruébalo aquí
fuente
y
es una consonante para que pueda soltar lay
expresión regular en 1 byte.(a,b,c,d)->
es más corto quea->b->c->d->
. El curry solo es útil para 2 parámetros. Para 3, curry es lo mismo que no curry. Para 4 y más, no hay curry más corto.(a,b,c,d)->b.toUpperCase().charAt(0)+"@"+a.substring(2)+(b.matches("[a-z&&[^aeiou]].*")?d:c)
tiene 92 bytes de longitud. Además, utiliza los parámetros en el orden correcto (lo que me confundió al principio :-().toUpperCase()
y luego.charAt(0)
es de hecho más corto ... No estoy seguro de cómo me he perdido eso. (Y el orden diferente era permitir(b=...)
, lo que no sería posible si no fuera el último parámetro con curry, porque entonces tenía que serfinal
/ estaba implícitofinal
){|}~
no son caracteres válidos, puede usarlos[ -_aeiou]
para no consonantes e intercambiard
yc
para menos 5 bytesV , 25 bytes
Pruébalo en línea!
Toma argumentos en el búfer en orden:
fuente
Bash 4 , 76 bytes
Funciona en Bash 4:
fuente
Ruby , 73 bytes
Pruébalo en línea!
fuente
JavaScript (ES6), 69 bytes
Bastante simple, probablemente se pueda jugar golf
fuente