É muito difícil lembrar minha senha, então criei uma maneira de gerar uma senha.
A maneira como eu gero minha senha é de uma palavra ou frase, seguindo estas etapas:
Comece da esquerda para a direita
Encontre a contagem de cada letra
Coloque a letra com sua contagem em um pedido
Cartas com maior repetição serão no final
Letras com a mesma repetição serão ordenadas alfabeticamente
Números e letras especiais serão ignorados, incluindo espaços em branco (por exemplo, 9, 4, @, (, *, etc. são ignorados)
Agrupe letras ignorando maiúsculas e minúsculas. Na saída, use o caso da última ocorrência na entrada
- A contagem da letra pode ser qualquer número, por exemplo, 5H17M345K
- Se a entrada for todos os números ou letras especiais, a saída será uma sequência vazia, por exemplo, Entrada "12 $ * 34 ^!" então imprima ""
- quando a ordem para a mesma ocorrência em ordem alfabética não importa, por exemplo, 1a1B1c
Exemplo:
Input: Kitkat Tango
(2k / 1i / 3T / 2a / 1n / 1g / 1o)
Output: 1g1i1n1o2a2k3T
Outro exemplo:
Input: Database Partitions Task
(1D / 5a / 4T / 1b / 3s / 1e / 1P / 1r / 2i / 1o / 1n / 3s / 1k)
Output: 1b1D1e1k1n1o1P1r2i3s4T5a
Nota: as letras com 1 repetição estão no início ordenadas alfabeticamente e as letras com mais repetições
Este é o código-golfe , o código mais curto vence.
fonte
1.
adicionar pelo menos 1 caso de teste que inclua mais de 9 ocorrências de uma ou mais letras,2.
especifique que a saída deve ser uma sequência (embora eu recomendo fortemente que não seja tão rigoroso; isso não adiciona nada ao desafio ),3.
especifique que devemos poder manipular entradas que não contenham letras e4.
esclareça se precisamos manipular uma sequência vazia como entrada.1
. Além disso, no futuro, considere usar nossa Sandbox para tentar resolver problemas como esses antes de postar um desafio.Respostas:
Japt v2.0a0
-P
, 14 bytesTente
fonte
05AB1E ,
191716 bytesGuardado 1 byte graças a Kevin Cruijssen
Experimente online! ou como um conjunto de testes
Explicação
fonte
‚
(emparelhar com) para um«
(concat / mesclar), para que um dos doisJ
s (junções) possa ser removido.J
interior? Edit: Na verdade, eu precisava deles como um par na versão de 19 bytes e não pensei em mudar isso quando fiz o 17: PJ
oin, dependendo da resposta a esta perguntaC # (compilador interativo do Visual C #) , 105 bytes
Experimente online!
Agradecemos à dana por reduzi-lo para 105 bytes de 138 bytes.
fonte
.OrderBy(a=>a)
?Perl 6 ,
6663 bytesExperimente online!
Explicação
fonte
Retina ,
67664139 bytes-25 bytes e uma pequena correção de bug, graças ao @Neil .
-2 bytes graças a @Neil e @Shaggy juntos.
Experimente online ou verifique todos os casos de teste .
Explicação:
Remova tudo, exceto letras maiúsculas e minúsculas:
ou seja,
Kitkat Tango 123!
→KitkatTango
Ordene as letras individuais que não diferenciam maiúsculas de minúsculas ( obrigado a @MartinEnder por isso ):
ie
KitkatTango
→aagiKknottT
Capturar cada pedaço de caso-insensível repetido cartas adjacentes:
ou seja
aagiKknottT
→ [aa
,g
,i
,Kk
,n
,o
,ttT
]Preceder o comprimento de todos os jogos, e manter apenas a última letra de cada pedaço:
ou seja, [
aa
,g
,i
,Kk
,n
,o
,ttT
] →2a1g1i2k1n1o3T
Classifique os grupos de números e letras com base nos números:
2a1g1i2k1n1o3T
→1g1i1n1o2a2k3T
Após o qual o resultado é gerado implicitamente.
fonte
"aA" < "aa"
)\w
e.
noO`\w.
foram usados para indicar que estamos classificando pares de caracteres. Não temos certeza se podemos classificar todos os pares de caracteres, mas apenas com base no primeiro caractere. Mas ah, bem, a sugestão de Martin de classificar cada personagem com base em uma substituição (que é a variante minúscula da partida) funciona como um encanto. :)\P{L}
pode funcionar, o que economiza 2 bytes.Wolfram Language (Mathematica) ,
102969387 bytesExperimente online!
fonte
Pitão,
272422 bytesExperimente online aqui .
Edit: Golfed 3 bytes, ordenando por caractere antes do grupo, versão anterior:
sm+ldedo,lNr0eN.gr0kf}r0TGQ
Edit 2: Golfed off 2 bytes formatando a saída antes de qualquer pedido, versão anterior:
sm+ldedlD.gr0krD0f}r0TGQ
Edição 3: Obteve mais um byte ao alterar o filtro, graças a @FryAmTheEggman. Também foi necessário corrigir um erro quando o OP esclareceu que uma única letra pode aparecer mais de 9 vezes, adicionando um byte em: o (Versão anterior:
srD0m+lded.gr0kf}r0TGQ
fonte
APL (Dyalog Extended) , SBCS de 28 bytes
Função de prefixo tácito anônimo.
Experimente online!
'\PL'
não-letras⎕R
PCRE R substituídas por''
cadeias vazias(
…)
Aplique a seguinte função tácita:⌊
com as minúsculas como chaves,…
⌸
aplique a função tácita abaixo a cada chave e seu conjunto de valores correspondente, a saber,⊢
o argumento:(
…)
Aplique a seguinte função tácita⍤
à⊢
lista de valores:⊢/
o último valor…
,
Acrescente o seguinte a isso:⍕
a estrificação⍤
da≢
contagem⊂
delimitar (para tratar a lista de caracteres como sequência única)∊
ε nlist (flatten)⍤
a∧
versão classificadas-crescente de quefonte
Perl 5,
746866 bytes-6 bytes mudando
-p
para-n
e usando emsay
vez de$_=join"",
-2 bytes graças a Abigail usando em\pL
vez de[a-z]
TIO
59 bytes, caso não haja mais de 9 ocorrências de cada caractere
fonte
Python 2 , 116 bytes
Experimente online!
fonte
Database Partitions Task
não é igual a1b1D1e1k1n1o1P1r2i3s4T5a
In the output, use the case of the last occurrence in the input
você precisará, emrfind
vez de fazerfind
isso....] for
pode tornar...]for
- se para compensar isso embora.Python 3 , 105 bytes
Experimente online!
-1 graças ao ArBo .
fonte
Haskell ,
114/113105 bytes-9 bytes graças a Laikoni (usando a compreensão de lista e em
(||)
vez defilter
comelem
& shortenlength
para se livrar de feiozip
)!Experimente online!
fonte
Vermelhos ,
220196206 bytesExperimente online!
Obrigado a Shaggy por encontrar um bug.
fonte
Gelatina , 15 bytes
Um programa completo que imprime a senha conforme especificado (como um link monádico, gera uma lista de listas, cada uma contendo um número inteiro e um caractere).
Experimente online!
fonte
Casca , 15 bytes
Sem problemas com importações ao usar Husk, portanto, podemos fazer uso das várias funções úteis, como
groupOn
,sortOn
,toLower
etc:Experimente online ou tente todos!
Explicação
fonte
JavaScript (Node.js) , 127 bytes
Experimente online!
parseInt(numberAsString, radix)
tentará analisar o número inteiro no início da string. Por exemplo,parseInt('120px', 10)
produzirá 120. Quando a análise falhou, ela retornouNaN
. Conectamos um'0'
ao início de cada caractere para que ele retorne0
para qualquer caractere alfa não numérico. E podemos ordenar as mesmas letras e caracteres não alfa desde o início por esse algoritmo.sort
ejoin
,"Hello world!123"
se tornaria" !123deHllloorw"
. Uma correspondência contra/([a-z])\1*/ig
ignorará qualquer caractere não alfa e dividirá a sequência em partes com as mesmas letras. `.map
converter"aaa"
para"3a"
conforme necessário na pergunta."3b"
seria menor do que"12a"
na base 36, exatamente como esperamos: Compara as contagens primeiro (n div 36
) e depois a letra (n mod 36
).join
eles juntos.JavaScript (Node.js) , 146 bytes
Experimente online!
fonte
f=
. O primeiro costumava ser mais curto. Mas obtém 4 bytes a mais desde que o OP solicitou que a saída possa ser uma sequência vazia. E eu apenas os mantive lá ...Java 10,
223209301 bytes+92 bytes como uma correção para entradas com mais de 9 letras de uma única letra. Verificarei se eu posso diminuir isso novamente com uma abordagem diferente.
Experimente online.
Explicação:
fonte
Scala , 103 bytes
Experimente online!
fonte
Swift 4.2.1 / Xcode 10.1 ,
105410501048370368364 bytesExperimente online!
@KevinCruijssen também removeu alguns espaços.
fonte
false
para0>1
etrue
para1>0
. Experimente online 1027 bytes . Provavelmente, pode-se jogar muito mais golfe, como o duplicadoif let v=$0.key.escaped(asASCII:0>1).lowercased().unicodeScalars.first?.value{return v<$1.key.value}else{return 0>1}
, mas deixarei isso para alguém que realmente conhece Swift.true
efalse
da minha resposta.=
atribuídos: Experimente online 364 bytes . Aproveite sua estadia! :)Carvão , 30 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Percorra o alfabeto em minúsculas e encontre a maior contagem de caracteres na entrada em minúsculas. Loop sobre o intervalo implícito. (Na verdade, o loop passa de
0
para,n-1
então eu tenho que incrementar a variável do loop a cada uso.)Faça um loop sobre o alfabeto minúsculo novamente.
Se a contagem da letra atual for igual ao valor do loop externo ...
Concatene a contagem atual com a última ocorrência da letra atual e imprima implicitamente.
fonte
Gelatina , 14 bytes
Experimente online!
Programa completo.
fonte
NodeJS, 299 bytes, -6 bytes obrigado a @tsh
Não é tão bonito, mas funciona!
Javascript (ES8) (Firefox ou Chrome), 294 bytes, -1 byte obrigado a @tsh
Com o novo
.flat
método, eu posso salvar 10 bytes:Tente isso online: https://repl.it/repls/ConcernedHorribleHypothesis
fonte
.replace
x 3 vezes ->[R='replace]
e[R]
x 2 vezes.charCodeAt(0)
->.charCodeAt()
(0
é o padrão)R ,
131129 bytesExperimente online!
fonte
Julia 1.0 , 158 bytes
Versão original não destruída com a mesma lógica:
Experimente online!
fonte
Perl 6,
8682 bytesfonte