Genera una password


26

È molto difficile ricordare la mia password, quindi ho trovato un modo per generare una password.

Il modo in cui generi la mia password proviene da una parola o una frase, seguendo questi passaggi:

  1. Inizia da sinistra a destra

  2. Trova il conteggio di ogni lettera

  3. Metti la lettera con il suo conteggio in un ordine

    • Le lettere con ripetizione più alta saranno alla fine

    • Le lettere con la stessa ripetizione verranno ordinate in ordine alfabetico

  4. I numeri e le lettere speciali verranno ignorati, compresi gli spazi bianchi (ad es. 9, 4, @, (, *, ecc. Vengono ignorati)

  5. Le lettere di gruppo ignorano il caso. Nell'output, utilizzare il caso dell'ultima occorrenza nell'input

  6. Il conteggio della lettera può essere qualsiasi numero, ad esempio 5H17M345K
  7. Se l'input è costituito da tutti i numeri o lettere speciali, l'output sarà una stringa vuota, ad esempio Input "12 $ * 34 ^!" quindi emettere ""
  8. quando l'ordine per la stessa occorrenza in ordine alfabetico, il caso non ha importanza, ad es. 1a1B1c

Esempio:

Input: Kitkat Tango
(2k / 1i / 3T / 2a / 1n / 1g / 1o)
Output: 1g1i1n1o2a2k3T

Un altro esempio:

Input: Database Partitions Task
(1D / 5a / 4T / 1b / 3s / 1e / 1P / 1r / 2i / 1o / 1n / 3s / 1k)
Output: 1b1D1e1k1n1o1P1r2i3s4T5a

Nota: le lettere con 1 ripetizione sono all'inizio in ordine alfabetico, quindi le lettere con più ripetizioni

Questo è , vince il codice più corto.


16
Una lettera può apparire più di 9 volte?
Shaggy, il

3
@manatwork: Ma non è chiaro (nota, la loro risposta non ha dato per scontato che le lettere compaiano meno di 10 volte), sta solo cercando di allentare le restrizioni di input.
ბიმო

4
assicurati di aggiungere questi chiarimenti al corpo della domanda reale, in modo che i rispondenti non debbano dare la caccia ai commenti
Jo King

2
I commenti non fanno una specifica. È necessario aggiornare la sfida per 1.aggiungere almeno 1 caso di test che includa più di 9 occorrenze di una o più lettere, 2.specificare che l'output deve essere una stringa (anche se consiglio vivamente di non essere così rigoroso; non aggiunge nulla alla sfida ), 3.specifica che dobbiamo essere in grado di gestire input che non contengono lettere e 4.chiarire se è necessario gestire una stringa vuota come input.
Shaggy,

1
Una volta fatto ciò, dovrai quindi testare tutte le soluzioni esistenti e informarle se devono apportare modifiche. Ho già trovato parecchie soluzioni che falliscono sul punto 1. Inoltre, in futuro potresti prendere in considerazione l'utilizzo del nostro Sandbox per provare a risolvere problemi come questi prima di pubblicare una sfida.
Shaggy,

Risposte:


7

Japt v2.0a0 -P, 14 byte

f\l üv ñÊ®ÌiZÊ

Provalo

f\l üv ñÊ®ÌiZÊ     :Implicit input of string
                   > e.g., "Kitkat Tango"

f                  :Split to an array of characters
 \l                :  Matching RegEx /[a-z]/gi
                   > ["K","i","t","k","a","t","T","a","n","g","o"]

    ü              :Sort & group (Preserves original order within each group)
     v             :  By lowercase
                   > [["a","a"],["g"],["i"],["K","k"],["n"],["o"],["t","t","T"]]

       ñ           :Sort
        Ê          :  By length
                   > [["g"],["i"],["n"],["o"],["a","a"],["K","k"],["t","t","T"]]

         ®         :Map each Z
          Ì        :  Last element of Z
                   >   ["g","i","n","o","a","k","T"]
           i       :  Prepend
            ZÊ     :    Length of Z
                   >   ["1g","1i","1n","1o","2a","2k","3T"]

                   :Implicitly join & output
                   > "1g1i1n1o2a2k3T"

10

05AB1E , 19 17 16 byte

Salvato 1 byte grazie a Kevin Cruijssen

áΣl}.γl}éεgyθJ}J

Provalo online! o come una suite di test

Spiegazione

á                  # keep only letters in input
 Σl}               # sort by lower-case
    .γl}           # group by lower-case
        é          # sort by length (stable)
         ε    }    # map each to
          g        # its length
             J     # joined with
           yθ      # the last letter
               J   # join to string

È possibile salvare un byte modificando la (coppia con) in una «(concat / merge), in modo da Jpoter rimuovere una delle due s (join).
Kevin Cruijssen, il

@KevinCruijssen: Wow. Mi sento stupido ora :) Perché non ho semplicemente spostato un Jinterno? Modifica: In realtà, ne avevo bisogno come coppia nella versione a 19 byte e non pensavo di cambiarlo quando ho fatto il 17: P
Emigna il

Potresti essere in grado di abbandonare la seconda Join, a seconda della risposta a questa domanda
Shaggy


7

Perl 6 , 66 63 byte

{[~] map {+$_~.tail},sort {+$_,.lc},m:g/<:L>/.classify(&lc){*}}

Provalo online!

Spiegazione

{                                                             }  # Anon block
                                    m:g/<:L>/  # Match all letters
                                             .classify(&lc)  # Group by lowercase
                                                           {*}  # Get hash values
                     sort {+$_,.lc},  # Sort by array length and lowercase
     map {         },  # Map to
          +$_~.tail  # Concat array length and last letter
 [~]  # Join

6

Retina , 67 66 41 39 byte

\P{L}

O$`.
$l$0
ir`\1*(.)
$.0$1
N`\d+.

-25 byte e una piccola correzione di bug grazie a @Neil .
-2 byte grazie a @Neil e @Shaggy insieme.

Provalo online o verifica tutti i casi di test .

Spiegazione:

Rimuovi tutto tranne le lettere maiuscole e minuscole:
cioè Kitkat Tango 123!KitkatTango

\P{L}

Ordina le singole lettere senza distinzione tra maiuscole e minuscole ( grazie a @MartinEnder per questo ):
cioè KitkatTangoaagiKknottT

O$`.
$l$0

Cattura ogni pezzo di case-insensitive ripetute lettere adiacenti:
cioè aagiKknottT→ [ aa, g, i, Kk, n, o, ttT]

ir`\1*(.)

Anteporre la lunghezza di ogni partita, e mantenere solo l'ultima lettera di ogni pezzo:
vale a dire [ aa, g, i, Kk, n, o, ttT] →2a1g1i2k1n1o3T

$.0$1

Ordina i numeri e i gruppi di lettere in base ai numeri:
2a1g1i2k1n1o3T1g1i1n1o2a2k3T

N`\d+.

Dopodiché il risultato viene emesso implicitamente.


Sei sicuro che sia un bug? Non si tratta solo di ordinare lessicograficamente? ( "aA" < "aa")
Shaggy il

1
@Shaggy Non sono sicuro che ci riesca. Perché il \we .in O`\w.sono stati usati per indicare che stiamo ordinando coppie di caratteri. Non sono sicuro se possiamo ordinare ogni coppia di caratteri, ma ordinarli solo in base al primo carattere. Ma ah, il suggerimento di Martin di ordinare ogni personaggio in base a una sostituzione (che è la variante minuscola della partita) funziona come un incantesimo. :)
Kevin Cruijssen il

1
Può essere fatto in 41 byte o mi manca qualcosa?
Neil


2
@Shaggy In realtà leggendo ulteriormente, \P{L}potrebbe funzionare, il che consente di risparmiare 2 byte.
Neil,

4

Wolfram Language (Mathematica) , 102 96 93 87 byte

""<>Map@ToString/@Sort[(r=Reverse)/@Tally[r@#/." "->Nothing,Equal@@ToLowerCase@{##}&]]&

Provalo online!

Tally[r@#/." "->Nothing,Equal@@ToLowerCase@{##}&]      Start with a char list
        #/." "->Nothing                                Remove spaces
      r@                                               Reverse the result
Tally[                 ,Equal@@ToLowerCase@{##}&]
                                             Make a list of letters and multiplicities,
                                             where two letters are considered the same if
                                             their lowercase values are equal. Then:

""<>Map@ToString/@Sort[(r=Reverse)/@ ... ]&
                       (r=Reverse)           Reverse each {letter, freq} to {freq,letter}.
                                             Then the standard Wolfram order function sorts
                                               lower frequencies first, with ties broken by
                                               by letters earlier in the alphabet,
                  Sort[                  ]     exactly what we want.

    Map@ToString/@                           @ has higher precedence than /@, so
                                               this effectively does Map[Map[ToString]].
""<>                                         StringJoin the nested list into a single string.

4

Pyth, 27 24 22 byte

ssrD0m,lded.gr0k@+Gr1G

Provalo online qui .

ssrD0m,lded.gr0k@+Gr1GQ   Implicit: Q=eval(input()), G=lowercase alphabet
                          Trailing Q inferred
                   r1G    Uppercase alphabet
                 +G       Concatenate with lowercase alphabet
                @     Q   Keep those characters in Q which are also in the above
           .g             Group the remaining characters, as k, using:
             r0k             Convert k to lowercase
                              (Grouping preserves relative order)
     m                    Map the sorted groups, as d, using:
       ld                   Length of d
      ,                     Pair the above with...
         ed                 ... last element of d
   D                      Sort the above...
  r 0                     ... by their lowercase values
ss                        Flatten, then concatenate the result of the above into a string, implicit print

Modifica: golfato 3 byte ordinando per carattere prima del gruppo, versione precedente: sm+ldedo,lNr0eN.gr0kf}r0TGQ

Modifica 2: ha eliminato altri 2 byte formattando l'output prima di qualsiasi ordine, versione precedente: sm+ldedlD.gr0krD0f}r0TGQ

Modifica 3: golfato da un altro byte modificando il filtro, grazie a @FryAmTheEggman. Inoltre, è stato necessario correggere un bug quando OP ha chiarito che una singola lettera può apparire più di 9 volte, il che ha aggiunto un byte su: o (Versione precedente:srD0m+lded.gr0kf}r0TGQ


@FryAmTheEggman grande chiamata, grazie!
Ho visitato il

4

APL (Dyalog Extended) , SBCS da 28 byte

Funzione prefisso tacito anonimo.

(∊⍤∧⌊(⊂⍕⍤≢,⊢/)⍤⊢⌸⊢)'\PL'R''

Provalo online!

'\PL' non alfabetici
⎕R PCRE R eplaced con
'' stringhe vuote

(... ) applica la seguente funzione tacita:

 con le lettere minuscole come chiavi,
 ...  applica la seguente funzione tacita a ciascuna chiave e al suo corrispondente set di valori, vale a dire
 l'argomento:

  (... ) applicare la seguente funzione tacita
   per
   l'elenco dei valori:

   ⊢/ l'ultimo valore

   ... , anteporre a quanto segue:

     la stringificazione
     del
     conteggio

    racchiudi (per trattare l'elenco dei caratteri come singola stringa)

ε nlist (Appiattisci)
 la
 versione ordinato-ascendenti di questo


1
@Shaggy Grazie. Risolto a +1 byte.
Adám

3

Perl 5, 74 68 66 byte

-6 byte cambiando -pin -ne usando sayinvece di $_=join"", -2 byte grazie ad Abigail usando \pLinvece di[a-z]

s/\pL/($h{lc$&}+=1).=$&/gie;say sort{$a-$b||lc$a cmp lc$b}values%h

TIO

59 byte, nel caso in cui non vi siano più di 9 occorrenze per ciascun carattere

s/\pL/($h{lc$&}+=1).=$&/gie;say sort{lc$a cmp lc$b}values%h

@Abigail, grazie, nel secondo programma è stata una svista dopo l'aggiornamento
Nahuel Fouilleul,

3

Python 2 , 116 byte

def f(s):a=s.lower();return''.join(`n`+s[a.rfind(c)] for n,c in sorted((a.count(c),c)for c in set(a)if c.isalpha()))

Provalo online!


L'output per Database Partitions Tasknon è uguale a1b1D1e1k1n1o1P1r2i3s4T5a
mdahmoune il

@mdahmoune grazie, dovrebbe essere risolto.
TFeld il

In the output, use the case of the last occurrence in the inputti servirà rfindinvece findper questo. ...] forpuò diventare ...]forper compensare questo però.
ArBo,



3

Rosso , 220 196 206 byte

func[s][a: charset[#"a"-#"z"#"A"-#"Z"]trim/all form sort/skip collect[foreach c sort
unique reverse rejoin parse s[collect[any[keep[a]| skip]]][i: 0
foreach d s[if(c% 32)=(d% 32)[i: i + 1]]keep i keep c]]2]

Provalo online!

Grazie a Shaggy per aver trovato un bug.


1
@Shaggy Grazie per averlo sottolineato, proverò a risolverlo.
Galen Ivanov,

2

Gelatina , 15 byte

fØẠµŒlĠLÞịµL,Ṫ)

Un programma completo che stampa la password come specificato (come Link monadico produce un elenco di liste contenenti ciascuna un numero intero e un carattere).

Provalo online!


2

Buccia , 15 byte

Nessun problema con le importazioni quando si utilizza Cartoccio, pertanto si possono utilizzare le varie funzioni a portata di mano, come groupOn, sortOn, toLowerecc:

ṁ§:osL→ÖLSġÖ_f√

Provalo online o provali tutti!

Spiegazione

ṁ§:(sL)→ÖLSġÖ_f√  -- example input: "Kitkat Tango"
              f√  -- `filter isAlpha`: "KitkatTango"
          S  _    -- apply _ to .. then ..
            Ö     -- | sortOn: `sortOn toLower`
           ġ      -- | groupOn: `groupOn toLower`
                  -- .. compose: `groupOn toLower . sortOn toLower`
                  -- `sortOn toLower` (stable): "aagiKknottT"
                  -- `groupOn toLower`: ["aa","g","i","Kk","n","o","ttT"]
        ÖL        -- `sortOn length` (stable): ["g","i","n","o","aa","Kk","ttT"]
ṁ                 -- map and flatten (`concatMap`)
 §                -- | fork argument ..
       →          -- | | `last`: ['g','i','n','o','a','k','T']
   (sL)           -- | | `show . length`: ["1","1","1","1","2","2","3"]
  :               -- | .. and `snoc`: ["1g","1i","1n","1o","2a","2k","3T"]
                  -- : "1g1i1n1o2a2k3T"

2

JavaScript (Node.js) , 127 byte

s=>[...s].sort(o=(x,y)=>p(0+x,36)-p(0+y,36),p=parseInt).join``.match(/([a-z])\1*/ig).map(x=>(l=x.length)+x[l-1]).sort(o).join``

Provalo online!

  • parseInt(numberAsString, radix)proverà ad analizzare il numero intero all'inizio della stringa. Ad esempio, parseInt('120px', 10)genererà 120. Quando l'analisi non è riuscita, restituisce NaNinvece. Colleghiamo un '0'all'inizio di ogni personaggio in modo che ritorni0 per tutti i caratteri non numerici alfa. E possiamo ordinare le stesse lettere insieme e carattere non alfa all'inizio con questo algoritmo.
  • Dopo sorte join, "Hello world!123"sarebbe diventato " !123deHllloorw". Una corrispondenza contro/([a-z])\1*/ig ignorerà qualsiasi carattere non alfa e dividerà la stringa in blocchi con le stesse lettere. `.
  • map convertire "aaa" a "3a"come richiesto nella domanda.
  • Il secondo ordinamento utilizza la stessa funzione del primo. Grazie al sistema numerico, "3b"sarebbe inferiore rispetto "12a"alla base 36 proprio come ci aspettiamo: confronta prima i conteggi (n div 36 ) e confronta la lettera in seguito ( n mod 36).
  • Finalmente joininsieme.

JavaScript (Node.js) , 146 byte

f=(s,...a)=>(s=s.replace(/[^a-z]/ig,''))?f(s.replace(RegExp(s[c=0],'ig'),x=>(l=++c+x,'')),...a,l):a.sort((x,y)=>p(x,36)-p(y,36),p=parseInt).join``

Provalo online!


Perché non inviare la soluzione più breve come soluzione principale? Inoltre, può essere più corto di 2 byte in quanto non ricorsivo.
Shaggy,

@Shaggy Ah, completamente dimenticato di rimuovere f=. Il primo era più corto. Ma ottiene 4 byte in più da quando OP ha chiesto che l'output potrebbe essere una stringa vuota. E ho appena li teneva lì ...
TSH

1
@Shaggy OK, scopri che il secondo potrebbe essere ancora più breve. E l'ho inserito per primo.
martedì

2

Java 10, 223 209 301 byte

s->{int i=32,t;String M[]=new String[i],r,R="";for(var c:s)M[c%32]+=c>64&c<91|c>96&c<123?c:R;for(;i-->0;M[i]=(t=r.length()-4)>0?t+r.split(R)[t+3]:R)r=M[i]+R;java.util.Arrays.sort(M);for(var p:M)R+=p;return R;}

+92 byte come correzione per input con più di 9 di una singola lettera. Vedrò se riesco a ridurlo con un approccio diverso.

Provalo online.

Spiegazione:

s->{                        // Method with character-array parameter and String return-type
  int i=32,                 //  Index-integer, starting at 32
      t;                    //  Temp-integer, uninitialized
  String M[]=new String[i], //  Create a String-array of size 32, filled with null by default
         R="",              //  Result-String, starting empty
         r;                 //  Temp-String, uninitialized
  for(var c:s)              //  Loop over the characters of the input-array:
    M[c%32]+=               //   Append the string at index code-point of `c` modulo-32 with:
     c>64&c<91|c>96&c<123?  //    If the character is a letter:
      c                     //     Append the character
     :                      //    Else:
      R;                    //     Append an empty String
  for(;i-->0                //  Loop `i` in the range (32, 0]:
      ;                     //    After every iteration:
       M[i]=                //     Replace the String at index `i` with:
        (t=r.length()-4)    //      Set `t` to the length of String `r` minus 4
                            //      (the minus 4 is for the prepended "null")
         >0?                //      If this length minus 4 is larger than 0:
          t                 //       Set the String to this length minus 4
          +r.split(R)[t+3]  //       Appended with the last character of `r` as String
         :                  //      Else:
          R)                //       Make the String at index `i` empty
    r=M[i]                  //   Set `r` to the `i`'th String
          +R;               //  Converted to String
                            // (null becomes "null", to prevent NullPointerException-errors)
  java.util.Arrays.sort(M,  //  Now sort the array of Strings on:
   (a,b)->                  //   For each pair of two Strings:
     new Byte(              //    Convert the first String to a number
      (0+a).replaceAll("\\D",""))
                            //    after we've added a leading 0 and removed all non-digits
    .compareTo(             //   And compare it to:
     new Byte(              //    The second String converted to a number
      (0+b).replaceAll("\\D",""))));
                            //    after we've added a leading 0 and remove all non-digits
  for(var p:M)              //  Loop over the Strings of the array:
    R+=p;                   //   And append each to the result-String `R`
  return R;}                //  And finally return the result-String `R`

1
@Shaggy Dang .. riparato al costo di 92 byte ..>. <Vedrò se riesco a giocare di nuovo senza usare un comparatore per ordinare ma ordinare manualmente più tardi ..
Kevin Cruijssen

Ahia! Mi dispiace per quello!
Shaggy,


2

Swift 4.2.1 / Xcode 10.1 , 1054 1050 1048 370 368 364 byte

s.map{String($0)}.filter{$0.rangeOfCharacter(from:.letters) != nil}.reversed().reduce(into:[String:Int]()){d,s in if let l=[s.uppercased(),s.lowercased()].first(where:{d[$0] != nil}){d[l]=d[l]!+1}else{d[s]=1}}.sorted{let c=$0.value-$1.value;return c==0 ?$0.key.compare($1.key,options:.caseInsensitive) == .orderedAscending:c<0}.map{"\($0.value)\($0.key)"}.joined()

Provalo online!

Anche @KevinCruijssen ha rimosso alcuni spazi.


Ciao, benvenuto in PPCG! Non so Swift, ma sembra si è dimenticato di rimuovere alcuni spazi, e si può anche golf tutto falseper 0>1e trueper 1>0. Provalo online 1027 byte . Probabilmente si può giocare a golf molto di più, come il duplicato if let v=$0.key.escaped(asASCII:0>1).lowercased().unicodeScalars.first?.value{return v<$1.key.value}else{return 0>1}che hai, ma lo lascerò a qualcuno che conosce davvero Swift.
Kevin Cruijssen, il

1
Inoltre, se non l'hai ancora visto: suggerimenti per giocare a golf in <tutte le lingue> e suggerimenti per giocare a golf in Swift potrebbero essere interessanti da leggere. Ancora benvenuto, e goditi il ​​tuo soggiorno! :)
Kevin Cruijssen il

Ciao @KevinCruijssen. Grazie per i suggerimenti, ho rimosso truee falsedalla mia risposta.
Roman Podymov,

1
Bene, hai giocato a golf parecchio dai tuoi 1000+ byte iniziali. :) Vedo altri 6 spazi che possono essere rimossi dopo / prima di tutti =-assigns: Provalo online 364 byte . Goditi la permanenza! :)
Kevin Cruijssen il

1

Carbone , 30 byte

F⌈Eβ№↧θιFβ¿⁼№↧θκ⊕ι⁺⊕ι§Φθ⁼↧λκ±¹

Provalo online! Il collegamento è alla versione dettagliata del codice. Spiegazione:

F⌈Eβ№↧θι

Scorri l'alfabeto minuscolo e trova il conteggio dei caratteri più alto nell'input in minuscolo. Passa sopra l'intervallo implicito. (Il loop in realtà va da 0a, n-1quindi devo incrementare la variabile loop ad ogni utilizzo.)

Fβ

Passa di nuovo sopra l'alfabeto minuscolo.

¿⁼№↧θκ⊕ι

Se il conteggio della lettera corrente è uguale al valore del loop esterno ...

⁺⊕ι§Φθ⁼↧λκ±¹

Concatena il conteggio corrente con l'ultima occorrenza della lettera corrente e stampa implicitamente.



1

NodeJS, 299 byte, -6 byte grazie a @tsh

Non così bella ma funziona!

(x,l={},g=p=>p.charCodeAt(),q=p=>p.toLowerCase())=>Object.entries([...x[R='replace'](/[^a-z]/gi,'')].reduce((m,n)=>(r=q(n),l[r]=g(n)>96?1:0,{...m,[r]:-~m[r]}),{})).sort((a,b)=>a[1]^b[1]?a[1]-b[1]:g(q(a[0]))-g(q(b[0]))).map(([m,n])=>[n,m]).join``[R](/,/g,'')[R](/[a-z]/g,v=>l[v]?q(v):v.toUpperCase())

Javascript (ES8) (Firefox o Chrome), 294 byte, -1 byte grazie a @tsh

Con il nuovo .flatmetodo, posso salvare 10 byte:

(x,l={},g=p=>p.charCodeAt(),q=p=>p.toLowerCase())=>Object.entries([...x[R='replace'](/[^a-z]/gi,'')].reduce((m,n)=>(r=q(n),l[r]=g(n)>96?1:0,{...m,[r]:-~m[r]}),{})).sort((a,b)=>a[1]^b[1]?a[1]-b[1]:g(q(a[0]))-g(q(b[0]))).map(([m,n])=>[n,m]).flat().join``[R](/[a-z]/g,v=>l[v]?q(v):v.toUpperCase())

Prova questo online: https://repl.it/repls/ConcernedHorribleHypothesis


Ciao e benvenuto in PPCG. Sarebbe bello se tu fornissi un modo per testare la tua presentazione, come il collegamento a un interprete online.
Jonathan Frech,

@JonathanFrech Ho appena aggiunto casi di test, grazie!
Chau Giang,

.replacex 3 volte -> [R='replace]e [R]x 2 volte
TSH

.charCodeAt(0)-> .charCodeAt()( 0impostazione predefinita)
tsh

@tsh Grazie mille per tutti i tuoi buoni consigli, ho appena aggiornato la mia risposta!
Chau Giang,

1

R , 131 129 byte

cat(paste0(N<-by(X<-utf8ToInt(gsub('[^a-z]','',scan(,''),T)),G<-X%%32,length),L<-intToUtf8(by(X,G,tail,1),T))[order(N,L)],sep='')

Provalo online!


1

Julia 1.0 , 158 byte

¬t=(c=Dict();C=Dict();for i=eachmatch(r"\w",t);l=i.match;k=lowercase(l);c[k]=get(c,k,0)+1;C[k]=l;end;*(["$v$(C[k])" for (v,k)=sort([(v,k) for (k,v)=c])]...))

Versione originale non golfata con la stessa logica:

function password(text)
    letter_counts = Dict()
    cases = Dict()

    for i in eachmatch(r"\w", text)
        letter = i.match[1]
        letter_key = lowercase(letter)
        letter_counts[letter_key] = get(letter_counts, letter_key, 0) + 1
        cases[letter_key] = letter
    end

    sorted_counts = sort([(value, key) for (key, value) in letter_counts])

    return string(["$v$(cases[k])" for (v,k) in sorted_counts]...)
end

Provalo online!


0

Perl 6, 86 82 byte

{[~] flat map *[0,2],sort map {+$^b,$^a,$b[*-1]},kv classify &lc,.comb: /<alpha>/}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.