Introdução
Bob gosta de ter senhas diferentes para cada site que usa. Ele quer senhas em um formato especial para poder se lembrar. Ajude-o criando um gerador de senhas que seja o mais curto possível em tamanho de código, porque ele gosta de manter as coisas curtas como o seu nome.
Desafio
Crie um gerador de senhas para Bob com quatro parâmetros:
- Endereço de domínio, (ex: stackexchange.com)
- Primeiro nome,
- último nome,
- Data de nascimento e ano.
e gera uma string que passou pelas seguintes transformações.
Toda senha tem um modelo com base no comprimento l do nome de domínio. Se l for primo, o modelo será desta forma -
[birth-date][domain-name][lastname][birth-year][symbol]
caso contrário, é desta forma -
[symbol][birth-year][firstname][domain-name][birth-date]
.
O campo do símbolo terá valores com base no tipo de domínio.
.com -> $$$ .org -> &&& .net -> %%% .edu -> +++ .gov -> @@@ .mil -> >>> padrão -> ~~~
Agora, ele também quer executar uma cifra de César sobre os campos - [firstname][domain-name][lastname]
.A direção mudança é certa, se l é primo então ele é deixado. O valor do turno é determinado pelo valor da adição da data e ano de nascimento.
Após o processo acima, o texto não pode ser facilmente lembrado, portanto ele deseja que o texto cifrado seja pronunciável. Para fazer isso, ele deseja substituir cada terceira consoante consecutiva por uma vogal em ordem alfabética (ie aeiou
).
Finalmente, ele deseja excluir ocorrências consecutivas das mesmas letras.
Exemplo
Entrada - stackexchange.com bob williams 0894 Saída - 08qraicvafyecugjigyoq94 $$$.
Explicação:
O modelo da senha é [birth-date][domain-name][lastname][birth-year][symbol]
porque o tamanho do nome de domínio stackexchange
é primordial. O símbolo será $$$
como o tipo de domínio .com
.
Vamos preencher esses valores no modelo - 08stackexchangewilliams94$$$
. Agora, a cifra de César deve ser executada nos campos [firstname][domain-name][lastname]
(neste caso, é apenas sobrenome). A direção da mudança está correta porque l é primo e o valor da mudança é 08+94 = 102
.
Então, 08stackexchangewilliams94$$$
se transforma 08qryaicvafylecugjjgykq94$$$
. Agora, cada terceira consoante consecutiva é substituída por uma vogal - 08qraaicvafyeecugjigyoq94$$$
todas as ocorrências consecutivas da mesma letra são excluídas - 08qraicvafyecugjigyoq94$$$
. Não se preocupe, é pronunciável para Bob.
informação adicional
- Endereço de domínio, nome e sobrenome contêm apenas letras minúsculas.
- O endereço do domínio sempre consistirá apenas em um domínio de segundo e segundo nível, como
stackexchange.com
e nãocodegolf.stackexchange.com
. Além disso, domínios como.co.uk
não são permitidos, mas apenas.uk
ou.in
são válidos. - A substituição da vogal em ordem alfabética é cíclica. Quero dizer depois
u
,a
é usado para substituir. - O intervalo ASCII para a cifra de César é de 97 a 122, inclusive.
- Você pode receber as entradas conforme descrito aqui .
- A saída deve ser uma sequência.
- O formato da data e ano de nascimento é
dd
eyy
.Então,02
é aceitável e2
não é.
Isso é código-golfe, então o código mais curto em bytes vence. Golfe feliz!
stackexchange.com
nãoimg.stackexchange.com
? E os domínios de paísesbbc.co.uk
?0894
que se soma,102
mas a explicação usa08+96=106
. O texto cifrado parece usar o102
valor. Apenas uma pequena inconsistência que pode ser confuso ...defualt
não digita #default
Respostas:
PowerShell 3+,
480476474453450448 bytesExperimente online!
Guardado
2426 bytes graças a TimmyD !Uau, isso foi louco. Acho que não posso postar uma descrição completa disso até mais tarde ou amanhã.
Nota: todas as terminações de linha são
\n
(0x10
), para que eu não precise usar;
e colocar tudo isso em uma linha.Visão geral rápida:
Como o segmento não pode ter mais de 63 caracteres ( consulte também a RFC 1035 ), acho que foi mais curto para codificar a lista de números primos :)Usando o método regex sugerido.Invoke-Expression
(iex
) para executar o código incorporado incorporado e, em seguida, uma substituição final de letras consecutivas por uma única letra.fonte
-join
e eu poderia jurar que estava se juntando a espaços e não$null
s, o que me surpreendeu, mas, depois de tentar novamente, funcionou como eu esperava originalmente. Estranho (e obrigado novamente)!