Seu desafio é identificar a string com senha! O que é senha, você pergunta?
Pegue uma string como entrada. Essa sequência conterá apenas letras maiúsculas, minúsculas, dígitos e espaços.
Você deve substituir todos os espaços por sublinhados e mover todos os números para o final da sequência na ordem em que aparecem da esquerda para a direita. Em seguida, para cada letra da sequência, altere-a aleatoriamente para maiúsculas ou minúsculas.
Exemplos (os caracteres devem variar sempre):
Input
Hello world
Output
HElLo_wORld
Input
pa55 w0rd
Output
pA_Wrd550
Input
14 35
Output
_1435
Input
0971
Output
0971
Input
[space]
Output
_
O menor código em bytes vence!
Quem quer que pergunte no Information Security SE se este é um bom algoritmo de hash vence! - Não se preocupe, senhores do SE, estou apenas brincando.
Respostas:
Pitão, 15 bytes
Demonstração
fonte
Labirinto , 76 bytes
Outra colaboração com o @ MartinBüttner e no lado mais insano do espectro do labirinto - pela primeira vez, temos todos os quatro
^>v<
no mesmo programa. Experimente online!Explicação
O algoritmo geral, que roda em loop, é o seguinte:
Para manter a explicação compacta, veja a seguir como cada parte do programa corresponde ao pseudocódigo acima:
Aqui estão as partes interessantes.
Obtendo aleatoriedade no labirinto
Existe apenas uma maneira de obter aleatoriedade no Labyrinth, e é quando o IP tenta avançar, mas 1) não há caminho para a frente nem para trás e 2) há caminhos disponíveis à esquerda e à direita. Nesse caso, o IP escolhe aleatoriamente entre as rotas esquerda e direita.
Isso só é possível usando os
^>v<
operadores, que exibemn
e deslocam a linha / colunan
em 1. Por exemplo, o programa ( Experimente online! )gera 1 ou 2 aleatoriamente, uma vez que a
v
coluna é deslocada com deslocamento 0 (ou seja, a coluna em que o IP está) por 1, produzindoO IP está voltado para a direita e tenta avançar (o topo da pilha é zero), mas não pode. Ele também não pode se mover para trás, portanto escolhe aleatoriamente entre esquerda ou direita.
Truques de golfe
O programa inicia a partir do primeiro caractere na ordem de leitura, que você notará na verdade na etapa 6. No entanto, saltar de uma pilha de labirinto vazia produz 0, portanto ocorrem as etapas 10 e 14, deslocando um zero para a pilha auxiliar, o que é efetivamente um no-op.
A pilha principal fica efetivamente vazia após cada iteração, o que nos permite alterar o layout do código usando
>
e<
nos zeros implícitos na parte inferior. Ele>
envolve a linha inferior para que o IP se mova da parte inferior direita para a parte inferior esquerda, e<
a linha é deslocada para trás. O IP então move-se alegremente para cima na coluna esquerda para continuar o loop.Dígitos no labirinto estalam
n
e empurram10*n + <digit>
. Além disso, os caracteres são tomados no módulo 256 antes de serem produzidos. Colocar esses dois juntos nos permite gerar 95 (sublinhado) fazendo`33
32 (espaço), o que funciona porque-3233 % 256 = 95
. Embora existam outras maneiras de transformar 32 em 95 (;95
sendo a mais fácil), trabalhar com um número negativo aqui nos permite compactar um pouco o código com as curvas à esquerda.fonte
05AB1E ,
222120 bytesCódigo:
Usa a codificação CP-1252 .
Experimente online!
fonte
CJam , 25 bytes
Experimente online!
Explicação
Tradução da minha resposta MATL.
fonte
CJam, 23 bytes
Teste aqui.
Explicação
fonte
Python, 107 bytes
Uma melhoria nas outras duas respostas Python porque:
[...,'_'][c<'!']
é usado em vez des.replace(' ','_')
echoice(c+c.swapcase())
é usado em vez dechoice([c.upper(),c.lower()])
fonte
JavaScript (ES6),
114101 bytes47 bytes apenas para randomizar o caso de um caractere ...
Editar: salvou 13 bytes em massa graças a @ edc65.
fonte
f=s=>s.replace(/./g,x=>x>'9'?x[`to${Math.random()<.5?"Low":"Upp"}erCase`]():x>' '?(s+=x,''):'_',s='')+s
MATL , 27 bytes
Experimente online!
fonte
Python 3,
128 122118 caracteresObrigado ao xnor por remover 6 bytes.
fonte
lambda x:''.join(choice([i.upper(),i.lower()])for i in sorted(x.replace(' ','_'),key=str.isnumeric))
Perl 6,
777561 bytesS///
é como,s///
exceto que não modifica$_
no lugarfonte
Pitão, 17 bytes
Experimente aqui!
Explicação
fonte
Mathematica, 86 bytes
Agradecimentos ao Sp3000 por economizar 1 byte.
Ahhh, processamento de strings Mathematica ... não é adorável. Esta é uma função sem nome que pega e retorna uma string.
Devido a todo o açúcar sintático, a ordem de leitura é um pouco engraçada:
Divida a sequência em caracteres, caso contrário, não podemos realmente fazer nada com ela.
Classifica os dígitos até o fim. Ao agrupar a função de teste em uma lista, tornamos a classificação estável.
Mapeia a função esquerda sobre cada caractere da lista.
Escolhe uma função de mudança de maiúscula aleatória para o caractere atual.
Aplica-o ao caractere atual.
Substitui espaços por sublinhados.
Finalmente, junta todos os caracteres novamente em uma sequência.
fonte
PowerShell, 113 bytes
PowerShell significa uma linguagem de golfe horrível. Divida na matriz de caracteres e substitua os espaços por sublinhados. Pegue cada personagem e processo. Colete números na variável $ d para saída posterior. Cada outro caractere é transformado aleatoriamente em maiúsculas ou minúsculas, invocando uma expressão usando
'char'.ToLower()
ou'char'.ToUpper()
. Se algum dígito foi coletado, anexe-o no final.fonte
$_-in0..9
o-in
operador introduzido no PowerShell v3 em vez da regex-match
.Julia,
888778 bytesEsta é uma função anônima que aceita uma string e retorna uma string. Para chamá-lo, atribua-o a uma variável.
Primeiro, dividimos a string de entrada em uma matriz de seus caracteres e classificamos a matriz de acordo com o caráter de cada dígito. Isso mantém a ordem no texto e nos dígitos, mas empurra os dígitos até o fim. Então, para cada caractere na matriz, verificamos se é um espaço. Nesse caso, substitua por um sublinhado; caso contrário, escolha aleatoriamente um de
ucfirst
oulcfirst
aplique ao caractere, convertendo-o em maiúsculas ou minúsculas, respectivamente. Junte a matriz em uma string e pronto!Experimente aqui
Economizou 9 bytes graças ao Sp3000!
fonte
Perl,
5148 bytesInclui +2 para
-lp
Execute com a entrada em STDIN:
passwordify.pl
:fonte
Fator, 154 bytes
ou 222 com importação
kernel splitting sequences ascii combinators.random regexp
Não sou muito bom em jogar golfe e não tenho certeza se adotei a melhor abordagem aqui, mas pensei em tentar
fonte
Ruby, 84 bytes
Função anônima. A remoção do espaço anterior
c.downcase
causa um erro de sintaxe por algum motivo e não sei por que.fonte
Lua, 125 bytes
Quando o objeto se encontra funcional, você pode fazer algumas coisas bonitas, mesmo na lua! Eu não acho que posso jogar isso, já é uma bagunça enorme e já estou feliz em vencer a maioria das respostas em python: D.
Ungolfed e explicações
fonte
Sério, 25 bytes
Experimente online!
Explicação:
fonte
IPOS - não concorrente, 14 bytes
Sim, adicionei componentes internos para esse desafio, mas eles não são direcionados especialmente para esse problema.
Isso funciona com a versão 0.1 do intérprete .
Exemplo de execução
Explicação
fonte
PHP, 368 bytes
Código Ungolfed:
fonte
Python 2, 179 bytes
Provavelmente há muito espaço para melhorias aqui, que resolverei mais tarde.
fonte
AWK, 128 bytes
A
srand()
é necessária para nos dar diferentes números aleatórios cada vez que ele é executado.Para que isso funcione corretamente com a entrada de várias linhas, precisamos colocar algo como
A=N=""
antes dofor
loop.fonte
Python 3.5 - 118 bytes:
Como você pode ver, estou basicamente usando a
choice
função do módulo aleatório para escolher uma função aleatória (.upper () ou .lower ()) para cada letra na versão classificada da string fornecida, na qual todos os dígitos vão para o fim. Além disso, todo espaço é substituído por um sublinhado na sequência classificada.fonte
PHP,
164158 caracteres / bytesIsso é melhor que o outro golfe do PHP , porque:
Roteiro
Exemplo
fonte
> <> , 73 bytes
Nada louco aqui, é:
_
quando encontraVocê pode tentar aqui !
fonte
Python 3, 151 bytes
fonte