É 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
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.
Uma carta pode aparecer mais de 9 vezes?
@manatwork: Mas isso não está claro (observe, a resposta deles não supõe que as letras apareçam menos de 10 vezes), mas apenas tentando diminuir as restrições de entrada.
— ბიმო 18/01
certifique-se de adicionar esses esclarecimentos ao corpo da pergunta real, para que os respondentes não precisem procurar nos comentários
Comentários não fazem uma especificação. Você precisa atualizar o desafio para 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 e 4.esclareça se precisamos manipular uma sequência vazia como entrada.
Depois de fazer isso, você terá que testar todas as soluções existentes e informá-las se elas precisam fazer alterações. Eu já encontrei várias soluções que falham no ponto 1. Além disso, no futuro, considere usar nossa Sandbox para tentar resolver problemas como esses antes de postar um desafio.
05AB1E , 19 17 16 bytes
Guardado 1 byte graças a Kevin Cruijssen
Você pode salvar um byte alterando '(emparelhar com) para um «(concat / mesclar), para que um dos dois Js (junções) possa ser removido.
— Kevin Cruijssen 18/01
@KevinCruijssen: Uau. Eu me sinto idiota agora :) Por que eu simplesmente não mudei um Jinterior? 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: P
Você pode soltar o segundo Join, dependendo da resposta a esta pergunta
C # (compilador interativo do Visual C #) , 105 bytes
Agradecemos à dana por reduzi-lo para 105 bytes de 138 bytes.
por que não apenas .OrderBy(a=>a)?
— grabthefish 19/01
Perl 6 , 66 63 bytes
Retina , 67 66 41 39 bytes
-25 bytes e uma pequena correção de bug, graças ao @Neil .
-2 bytes graças a @Neil e @Shaggy juntos.
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:
Após o qual o resultado é gerado implicitamente.
Tem certeza de que é um bug? Não é apenas ordenar lexicograficamente? ( "aA" < "aa")
@ Shagy Não tenho certeza se pode. Porque o \we .no O`\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. :)
Isso pode ser feito em 41 bytes ou estou faltando alguma coisa?
@ Shaggy Na verdade, ler mais, \P{L}pode funcionar, o que economiza 2 bytes.
Wolfram Language (Mathematica) , 102 96 93 87 bytes
Pitão, 27 24 22 bytes
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
@FryAmTheEggman ótima chamada, obrigado!
APL (Dyalog Extended) , SBCS de 28 bytes
'\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)
⍤ a
∧ versão classificadas-crescente de que
@ Obrigado Shaggy. Corrigido em +1 byte.
— Adám 22/01
-6 bytes mudando -ppara -ne usando em sayvez de $_=join"", -2 bytes graças a Abigail usando em \pLvez de[a-z]
59 bytes, caso não haja mais de 9 ocorrências de cada caractere
@Abigail, obrigado, no segundo programa foi uma supervisão após uma atualização
— Nahuel Fouilleul 18/01
A saída para Database Partitions Tasknão é igual a1b1D1e1k1n1o1P1r2i3s4T5a
— mdahmoune 18/01
@mdahmoune obrigado, deve ser corrigido.
— TFeld 18/01
In the output, use the case of the last occurrence in the inputvocê precisará, em rfindvez de fazer findisso. ...] forpode tornar ...]for- se para compensar isso embora.
— ArBo 18/01
Python 3 , 105 bytes
-1 graças ao ArBo .
Haskell , 114/113 105 bytes
-9 bytes graças a Laikoni (usando a compreensão de lista e em (||)vez de filtercom elem& shorten lengthpara se livrar de feio zip)!
107 bytes: Experimente online!
— Laikoni 19/01
105: Experimente online!
@Laikoni: Agora mais curto do que com as importações, muito bom !!
— ბიმო 19/01
Vermelhos , 220 196 206 bytes
Obrigado a Shaggy por encontrar um bug.
@ Shagy Obrigado por apontar isso, vou tentar corrigi-lo.
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).
Sem problemas com importações ao usar Husk, portanto, podemos fazer uso das várias funções úteis, como groupOn, sortOn, toLoweretc:
Experimente online ou tente todos!
JavaScript (Node.js) , 127 bytes
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 retornou NaN. Conectamos um '0'ao início de cada caractere para que ele retorne 0para 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.
Depois sorte join, "Hello world!123"se tornaria " !123deHllloorw". Uma correspondência contra /([a-z])\1*/igignorará qualquer caractere não alfa e dividirá a sequência em partes com as mesmas letras. `.
mapconverter "aaa"para "3a"conforme necessário na pergunta.
O segundo tipo usa a mesma função que o primeiro. Graças ao sistema numérico, "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).
Finalmente joineles juntos.
JavaScript (Node.js) , 146 bytes
Por que não enviar a solução mais curta como sua solução principal? Além disso, pode ser 2 bytes mais curto, pois não é recursivo.
@ Shagy Ah, esqueci totalmente de remover 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á ...
@ Shaggy OK, basta descobrir que o segundo pode ser ainda mais curto. E eu coloquei como primeiro.
— tsh 23/01
+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.
@Shaggy Dang .. corrigido ao custo de 92 bytes ..>. <Verificarei se consigo jogar novamente de novo, não usando um Comparador para classificar, mas me ordenar manualmente mais tarde ..
— Kevin Cruijssen 23/01
Ai! Me desculpe por isso!
Scala , 103 bytes
@KevinCruijssen também removeu alguns espaços.
Olá, seja bem-vindo ao PPCG! Eu não sei Swift, mas parece que você esqueceu de remover alguns espaços, e você também pode golf tudo falsepara 0>1e truepara 1>0. Experimente online 1027 bytes . Provavelmente, pode-se jogar muito mais golfe, como o duplicado if 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.
— Kevin Cruijssen 25/01
Além disso, se você ainda não o viu: Dicas para jogar golfe em <todos os idiomas> e Dicas para jogar golfe no Swift podem ser interessantes para ler. Mais uma vez bem-vindo, e aproveite a sua estadia! :)
Olá @KevinCruijssen. Obrigado por dicas, eu removi truee falseda minha resposta.
— Roman Podymov 27/01
Bom, você jogou bastante nos seus 1000 bytes iniciais. :) Eu vejo mais 6 espaços que podem ser removidos depois / antes de todos os =atribuídos: Experimente online 364 bytes . Aproveite sua estadia! :)
— Kevin Cruijssen 27/01
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 0para, n-1entã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.
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 .flatmétodo, eu posso salvar 10 bytes:
Tente isso online: https://repl.it/repls/ConcernedHorribleHypothesis
Olá e bem-vindo ao PPCG. Seria bom se você fornecesse uma maneira de testar sua submissão, como vincular a um intérprete online.