História
Preciso me lembrar de muitas senhas e não quero usar a mesma para vários sites, então criei uma regra, mas a regra não deve ser transparente, então o que faço é:
- Pense em uma palavra longa ou conceito como
breadpudding
. - Substitua a primeira letra pelo site em que estamos fazendo login. Se estamos logando
google
, nossa palavra se tornagreadpudding
. - Faça a primeira letra maiúscula.
- Mude a segunda letra para um
@
sinal. - Se a senha começar com uma não consoante, adicione um determinado número (como
1234
); caso contrário, adicione outro número (como4321
).
Ta da, agora você tem uma senha adequada.
Embora esse processo seja árduo, preciso de um programa para gerar isso para mim com base no seguinte:
Problema
Dados fornecidos:
a
: a palavra inicial, que é uma sequência e é sempre em minúscula, com garantia de mais de três caracteres.b
: o site no qual estamos efetuando login, que é uma string e sempre está em minúscula e é garantido que não está vazio.c
: o número de não consoantes, que é um número inteiro positivo que pode ter zeros à esquerda.d
: o número de consoantes, que é um número inteiro positivo que pode ter zeros à esquerda.
Saída uma string com base nos critérios acima.
Casos de teste
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
Regras
y
é uma consoante.- Se você decidir
c
oud
for um número inteiro, poderá analisá-lo como tal e os zeros à esquerda podem ser ignorados (0091
tratados como91
). - Espaço em branco e novas linhas à direita são permitidos.
- Você pode enviar o resultado para STDOUT ou retornar o resultado em uma função.
- Caracteres permitidos em
a
eb
são[a-z0-9!@#$%^&*()_+=-]
. - Você pode aceitar as 4 entradas em qualquer ordem consistente.
Isso é código-golfe . O menor código em bytes vence.
Respostas:
Geléia , 17 bytes
Um programa completo, tendo os argumentos na ordem
b
,a
,c
,d
.Experimente online!
Quão?
O link principal é diádica, tendo
b
ea
, as entradas do programa são, em seguidab
,a
,c
ed
(o terceiro ao sexto argumentos de linha de comando), entãoc
ed
são acessados como tal.fonte
Python 3 , 69 bytes
Experimente online!
fonte
b[0]not in"aeiou"
?9
é contado como não consoante.z
é o máximo de caracteres possível):('a'<b[0])*b[0]not in"eiou"
05AB1E ,
222018 bytesEntrada tomada como
b,a,c,d
Experimente online!
Explicação (desatualizada)
0è
usado no link comoн
ainda não foi enviado ao TIO.fonte
Javascript ES6, 87 bytes
Demo
Mostrar snippet de código
fonte
{|}~
não são caracteres válidos, você pode substituir/[bcdfghjklmnpqrstvwxyz]/.test(b[0])?d:c
com/[ -_aeiou]/.test(b[0])?c:d
para menos 13 bytesC,
441286139 bytesfonte
argv[1][0]='c'|argv[1][0]='c'|...
onde c = consoante, você pode facilmente reduzir isso fazendo!(argv[1][0]='a'|argv[1][0]='e'|argv[1][0]='i'|argv[1][0]='o'|argv[1][0]='u')
Reduz a pontuação em 264 apenas por isso!(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'))
. Ainda menor por uma margem. No entanto, existem tantas maneiras de jogar esse código que não sei por onde começar ...: sR ,
105103 bytesFunção anônima. Avalia para
que é o que está no TIO. Por favor, me ajude a jogar esse regex porque sou péssimo com eles.
Salvou 2 bytes de Giuseppe.
Experimente online!
fonte
!grepl('[aeiouy]',m)
grepl('[aeiouy]',m)
e apenas troquec
ed
."if"
tornam aif
sintaxe muito mais clara em vez de usarelse
orifelse
; Também salveisubstring
em uma variável e coloqueim
em maiúscula imediatamente para salvar um byte.pryr
está tentandosubstring
argumentar; e vocêgrepl
só encontra "não vogais", o que não é o mesmo que consoantes. A"if"
coisa que eu perdi, obrigado por apontar isso.pryr::f
que não iria gostar disso; você poderia usar o regex '[az && [^ aeiouy]]' da resposta de Kevin Cruijissen?Retina ,
8075 bytesExperimente online!
Experimentar um novo idioma aqui, recebe entradas na ordem dada na pergunta
Explicação:
Crie uma palavra que seja a segunda palavra, primeira letra, sinal @, primeira palavra a partir do terceiro caractere.
Se a palavra começar com uma não consoante, acrescente o primeiro número
Se ainda restarem 3 linhas (nenhuma substituição na última etapa, portanto, ela começa com uma consoante), acrescente o segundo número
Maiúscula a primeira letra
fonte
QBIC , 81 bytes
Explicação
Observe que as duas últimas linhas parecem iguais, mas o intérprete altera ligeiramente o comportamento de cada uma
;
: Sempre que vê a;
instrução, cria uma nova variável (nesse caso, os vars È $and
F $ `são os primeiros disponíveis depois de ler tudo literais e argumentos de linha de cmd) e atribui o primeiro parâmetro de linha de cmd ainda não atribuído a essa variável.fonte
JavaScript (ES6), 76 bytes
Eu teria acrescentado isso como uma sugestão para melhorar a solução do Weedoze , mas parece que não posso comentar sobre isso, porque eu me espreito
fonte
C # , 111 bytes
A verificação da consoante é particularmente cara, sem capacidade direta de regex no
string
tipo.fonte
F # , 157 bytes
O F # ainda é muito novo para mim, então provavelmente existem abordagens melhores para isso.
fonte
Java 8,
112999287 bytes-13 bytes, tomando o parâmetro
b
last em vez de second.-1 byte removendo
y
-7 bytes graças a @ OlivierGrégoire (e os parâmetros estão em ordem novamente)
-5 bytes graças a @ PunPun1000
Explicação:
Experimente aqui.
fonte
y
é uma consoante, então você pode soltar oy
no seu regex por 1 byte.(a,b,c,d)->
é mais curto quea->b->c->d->
. O curry é útil apenas para 2 parâmetros. Para 3, curry é o mesmo que sem curry. Para 4 e acima, o curry não é mais curto.(a,b,c,d)->b.toUpperCase().charAt(0)+"@"+a.substring(2)+(b.matches("[a-z&&[^aeiou]].*")?d:c)
tem 92 bytes. Além disso, ele usa os parâmetros na ordem correta (o que me confuso no início :-().toUpperCase()
e depois.charAt(0)
é realmente mais curto. Não tenho certeza de como perdi isso. (E a ordem diferente era para permitir(b=...)
, o que não seria possível se não fosse o último parâmetro com curry, porque era precisofinal
/ estava implícitofinal
.){|}~
não são caracteres válidos, você pode usar[ -_aeiou]
para não consoantes e trocard
ec
para menos 5 bytesV , 25 bytes
Experimente online!
Leva argumentos no buffer em ordem:
fonte
Bash 4 , 76 bytes
Funciona no Bash 4:
fonte
Ruby , 73 bytes
Experimente online!
fonte
JavaScript (ES6), 69 bytes
Muito simples, provavelmente pode ser jogado golfe
fonte