PROGETTI DI SCORRIMENTO E CODICE ____


45

Ingresso

Una stringa codificata non vuota costituita da caratteri ASCII stampabili (nell'intervallo 32-126), in cui sono state sostituite alcune lettere mancanti _.

Produzione

Una stringa decodificata della stessa lunghezza con tutte le lettere in minuscolo, comprese quelle mancanti.

Come?

Modifica: Come menzionato da @Deusovi nei commenti, questa è una variante del codice di Bacon .

  • Raccogli tutte le lettere nella stringa originale e raggruppale per 5. Le lettere aggiuntive che non rientrano in un gruppo completo di 5 vengono ignorate.
  • Converti ogni gruppo in binario: minuscolo = 0 , maiuscolo = 1 . Questo porta a un elenco di numeri interi.
  • Utilizzare ciascun valore N in questo elenco per sostituire ciascuno _nella stringa originale con la lettera N dell'alfabeto (0-indicizzata), in ordine di apparizione.

Esempio: prOGraMMIng PuZZleS & cOde ____

prOGr --> 00110 -->  6 -->  7th letter = 'g'
aMMIn --> 01110 --> 14 --> 15th letter = 'o'
gPuZZ --> 01011 --> 11 --> 12th letter = 'l'
leScO --> 00101 -->  5 -->  6th letter = 'f'

Sostituendo le lettere mancanti e convertendo tutto in minuscolo, viene svelata la stringa originale:

programming puzzles & code golf

Questo è l'output previsto.

Chiarimenti e regole

  • Le lettere mancanti sono garantite per apparire alla fine della stringa. Più formalmente: non ci sarà mai nessuna lettera dopo la prima _nella stringa di input. Tuttavia, potrebbero esserci altri caratteri ASCII stampabili come spazi e segni di punteggiatura.
  • È garantito che l'input non contenga lettere maiuscole inutili : tutte le lettere maiuscole sono bit impostati su 1 che sono necessari per decodificare le lettere mancanti. Tutto il resto è in minuscolo.
  • La stringa di input è garantita per essere valida. Particolarmente:
    • Conterrà sempre abbastanza gruppi completi di 5 lettere per decodificare i caratteri di sottolineatura.
    • Gli interi con codifica binaria sono garantiti nell'intervallo [0-25] .
  • Potrebbe non esserci _affatto nella stringa di input, nel qual caso devi solo restituire l'input.
  • Questo è , quindi vince la risposta più breve in byte!

Casi test

Input : hello!
Output: hello!

Input : helLO, worl_!
Output: hello, world!

Input : i aM yoUr faTh__.
Output: i am your father.

Input : prOGraMMIng PuZZleS & cOde ____
Output: programming puzzles & code golf

Input : Can YOu gUesS tHE ENd oF This ____?
Output: can you guess the end of this text?

Input : THe qUICk brown FOx JUMps oVEr the la__ ___.
Output: the quick brown fox jumps over the lazy dog.

Input : RoadS? wHERe we're goinG WE doN't need _____.
Output: roads? where we're going we don't need roads.

Input : thE greatESt Trick thE DeVIl EVer PUllEd wAs CONvInciNg tHe WorLD h_ ____'_ _____.
Output: the greatest trick the devil ever pulled was convincing the world he didn't exist.

Alcuni casi di prova extra:

Input : BInar_
Output: binary

Input : 12 MonKey_
Output: 12 monkeys

Input : hyPerbolIZ__
Output: hyperbolized

Input : {[One Last Test ca__]}
Output: {[one last test case]}

Dovremmo considerare solo tanti gruppi di 5 quanti sono i trattini bassi nell'input?
Esolanging Fruit

In tal caso, la regola in cui non è presente _nella stringa di input è un po 'un caso speciale.
Esolanging Fruit

1
Ooh, cifra di Bacon!
Deusovi,

1
@SztupY Come The input is guaranteed not to contain any useless capital letter, nel caso in cui non sia presente un carattere di sottolineatura, non ci sarà nemmeno una lettera maiuscola.
Laikoni,

1
@KirillL. Sì, qualsiasi cosa dentro [32-126]. Ho aggiunto un altro caso di test.
Arnauld

Risposte:


19

05AB1E , 18 byte

Codice:

áS.u5ôJC>.bv'_y.;l

Utilizza la codifica 05AB1E . Provalo online!

Spiegazione:

á                       # Remove non-letters from the input string.
 S                      # Split the result into individual characters.
  .u                    # Check if is uppercase for each character.
    5ôJ                 # Split into binary numbers of length 5.
       C                # Convert from binary to decimal.
        >               # Add one.
         .b             # Map 1 → A, 2 → B, 3 → C, ..., 25 → Y, 26 → Z.
           v            # For each letter:
            '_y.;       #   Replace the first occurrence of '_' with the current letter.
                 l      #   Convert the string to lowercase.


8

Perl 5 -pF -MList::Util=sum, 75 byte

@a=grep!/\W|\d/,@F;s!_!(a..z)[sum map{a gt shift@a&&16/2**$_}0..4]!eg;$_=lc

Provalo online!

Spiegazione:

  • -pFlegge una riga di input nella variabile $_e, divisa in caratteri, nella matrice @F.
  • @a=grep!/\W|\d/,@Fimposta l'array @auguale a quei membri @Fche non soddisfano la regex \W|\d. \Wè tutt'altro che lettere, numeri e _; \dsono i numeri. Quindi \W|\dè tutt'altro che lettere e _, e @aha tutte le lettere e i _caratteri. Finiremo senza mai esaminare i _personaggi @a. (Si noti che questo funziona solo perché l'ingresso è garantito ASCII.)
  • map{a gt shift@a&&16/2**$_}0..4effettua le seguenti operazioni da 0 a 4: sposta l'elemento successivo da @a, accorciandolo e valuta se aè asciibeticamente maggiore di quell'elemento (ovvero se quell'elemento è maiuscolo). In tal caso, &&non viene cortocircuitato, quindi otteniamo 16 divisi per 2 per la potenza del valore di input (da 0 a 4). Altrimenti &&viene cortocircuitato e si ottiene 0. maprestituisce l'elenco di cinque numeri a sum, che li aggiunge.
  • Questo è l'elemento che vogliamo dalla lista a..z, ed è quello che otteniamo (a..z)[…].
  • s!_!…!egconverte ciascuno _a $_sua volta nella lettera appropriata.
  • $_=lcconverte $_nella versione minuscola di se stesso e la -pstampa.


5

Gelatina ,  28 27  26 byte

-1 grazie a Erik the Outgolfer & dylnan

Non è una sfida molto amichevole per le gelatine!

ḟŒs$Ƈ<”[s5Ḅ+97Ọż@ṣ”_$FṁLŒl

Un collegamento monadico che accetta e restituisce elenchi di caratteri.

Provalo online!

Come?

ḟŒs$Ƈ<”[s5Ḅ+97Ọż@ṣ”_$FṁLŒl - Link: list of characters    e.g. "MfUNE_?"  (shorthand for ['M','f','U','N','E','_','?'])
    Ƈ                      - filter keep each if:
   $                       -   last two links as a monad:
 Œs                        -     swap-case
ḟ                          -     filter discard
                           - ...i.e. keep A-Z,a-z since they change when the case is swapped
                           -                                  "MfUNE"
      ”[                   - literal character                '['
     <                     - less than? (i.e. is upper-case?) [1,0,1,1,1]
        s5                 - split into fives                 [[1,0,1,1,1]]
          Ḅ                - from base two (vectorises)       [[23]]
           +97             - add (vectorises) ninety-seven    [[120]]
              Ọ            - from ordinals (vectorises)       [['x']]
                    $      - last two links as a monad:
                  ”_       -   literal character              '_'
                 ṣ         -   split at                       [['M','f','U','N','E'],['?']]
               ż@          - swapped @rgument zip             [[['M','f','U','N','E'],'x'],['?']]
                     F     - flatten                          "MfUNEx?"
                       L   - length (of input)                7
                      ṁ    - mould like                       "MfUNEx?"
                           - ...removes any excess characters
                        Œl - lower-case                       "mfunex?"

5

Retina , 91 90 byte

T`l`a
T`L`A
[^Aa]

L`.{5}
A
aA
+`Aa
aAA
+T`_lA`l_`[^A]A
^
$+¶
+`_(.*)¶a+(.)
$2$1
0G`
T`L`l

Provalo online! Spiegazione:

T`l`a
T`L`A
[^Aa]

Traduci le lettere minuscole in ae le lettere maiuscole in A, eliminando tutto il resto.

L`.{5}

Dividi la Aas in gruppi di 5.

A
aA
+`Aa
aAA

Converti da binario a unario, trattando Acome 1 e acome 0. Dato Aache inizialmente c'erano 5 secondi, rimangono 5 asecondi, più un numero di Asecondi a seconda della posizione desiderata nell'alfabeto.

+T`_lA`l_`[^A]A

Aumenta l'ultimo in abase al numero di seguenti As.

^
$+¶

Prepara l'input originale.

+`_(.*)¶a+(.)
$2$1

Sostituisci eventuali _s con la lettera decodificata successiva.

0G`

Rimuovere eventuali lettere decodificate di ricambio.

T`L`l

Tutto in minuscolo.

Retina 0.8.2 , 117 byte

.+
$&¶$&
T`L`l`^.*
T`l`a`.*$
T`L`A
T`aAp`aA_`.*$
(.*¶)?.{5}
$&;
A
aA
+`Aa
aAA
+T`_lA`l_`[^A]A
+`_(.*¶)a+(.);
$2$1
1G`

Provalo online! Spiegazione:

.+
$&¶$&

Duplica l'input.

T`L`l`^.*

Minuscola la prima copia.

T`l`a`.*$

Traduci le lettere minuscole anella seconda copia.

T`L`A

Traduci lettere maiuscole in A. Questi devono essere nella seconda copia perché la prima copia era già in minuscolo.

T`aAp`aA_`.*$

Elimina tutto il resto nella seconda copia.

(.*¶)?.{5}
$&;

Dividi la seconda copia (ora solo Aas) in gruppi di 5.

A
aA
+`Aa
aAA
+T`_lA`l_`[^A]A
+`_(.*¶)a+(.);
$2$1
1G`

Decodifica le lettere e inseriscile come prima.


5

APL (Dyalog Unicode) , 46 byte SBCS

Anonimo lambda, suppone ⎕IO(indice origine) di essere 0.

{_'_'=⊢⋄819A[2⊥⍉(+/_⍵)5A∊⍨⍵∩A,819A←⎕A]@_⍵}

Provalo online!

{... ... funzione a } due istruzioni; è l'argomento, separa le dichiarazioni

 argomento (funzione no-op)
'_'= dove uguale a un trattino basso (cioè una funzione di mappatura booleana)
_← assegna quella funzione_

A[... ]@_⍵ metti i seguenti caratteri in A corrispondenza delle posizioni di sottolineatura nell'argomento
  ⎕A l' alfabeto A maiuscolo
  A← assegna che per A
  819⌶ minuscola ( 819 ≈ BIg , senza argomento sinistro significa non grande, cioè minuscolo)
  A, anteporre l'alfabeto maiuscolo; questo ci dà tutte le lettere
  ⍵∩ intersezione dell'argomento e quello; solo le lettere dell'argomento
  A∊⍨ quali di quelle sono membri dell'alfabeto maiuscolo; maiuscola bit
  (... )5⍴r eshape che al numero di righe e cinque colonne:
   _⍵ la maschera di sottolineatura nell'argomento
   +/ somma che; numero di caratteri di sottolineatura
   trasporre (per trattare ogni riga come un numero anziché come una posizione di bit)
  2⊥ valuta come base-2
819⌶ minuscola tutto


5

Scala , 189 byte

def f(s:Array[Char])={var j=0;s.zipWithIndex.collect{case(95,i)=>s(i)=(Integer.parseInt(s.filter(_.isLetter)slice(j,j+5)map(k=>if(k<91)1 else 0)mkString,2)+97)toChar;j+=5};s.map(_.toLower)}

Provalo online!

Spiegazione:

def f(s: Array[Char]) = {                // takes a String in input
  var j = 0                              // j stores at which block of 5 letters we're currently at
  s.zipWithIndex.collect {               // Array('h', 'e', ...) => Array(('h', 0) ('e', 1), ...) and we apply a collect transformation (filter/map)
    case (95, i) =>                      // we only handle cases where the char is '_' (95)
      s(i) = (                           // we modify the char at index i with the following
        Integer.parseInt(                // Integer.parseInt("00110", 2) = 6
          s                              //
            .filter(_.isLetter)          // filter out non letter chars (spaces, punct, figures, ...) from the input string (thanks @Arnauld for the fix)A
            .slice(j, j+5)               // "substring" the array to the block of 5 letters in question
            .map(                        // map on the current block of 5 letters
              k =>                       // the index of the next char in the block f 5 (e.g. 13)
                if (k < 91) 1 else 0     // if the current char is upper case (<91) then we replace it by a bit true, otherwise by a bit false
            )mkString,                   // Array(0, 1, 1, ...) => "011..."
          2                              // cast string to binary
        )                                //
        + 97                             // +97 to create a lower case char
      )toChar                            // cast from int to char
      j += 5                             // update the starting index of the next block of 5 letters
    }                                    //
  s.map(_.toLower)                       // return the updated seq of chars all in lower case
}                                        //


4

Gelatina , 26 byte

xn¥Œs<”[s5Ḅ‘ịØaṛi”_ḟ0Ɗ¦ƒŒl

Provalo online!

Approccio diverso da quello di Jonathan Allan. EDIT: Quindi, a quanto pare, ho pensato alla stessa riduzione di byte di Jonathan Allan, quindi non fa male ricordare di nuovo il suo nome.



3

Pulito , 180 ... 150 byte

import StdEnv
?s=['a'+sum[i\\i<-:""&c<-s|c<'a']: ?(drop 5s)]
@['_':b][x:y]=[x: @b y]
@[a:b]z=[toLower a: @b z]
@e _=e
$s= @s(?(filter isAlpha s))

Provalo online!

Definisce la funzione $ :: [Char] -> [Char]con @ :: [Char] [Char] -> [Char]come aiuto per sostituire i caratteri di sottolineatura e ? :: [Char] -> [Char]come aiuto per generare i caratteri di sostituzione.


Come funziona la i<-:""parte? I caratteri vengono convertiti implicitamente in numeri quando vengono sommati o aggiunti?
Laikoni

@Laikoni no, non c'è conversione implicita. Tuttavia, puoi aggiungere e sottrarre caratteri.
Οuroso

3

JavaScript (Node.js) , 100 byte

s=>s.toLowerCase(c=/[a-z]/gi).replace(/_/g,_=>(g=n=>n?(c.exec(s)<{})*n+g(n>>1):10)(16).toString(36))

Provalo online!

Grazie a @Arnauld, salva 2 byte.


1
@Arnauld hai ragione. modificato fino ad /[a-z]/giora.
TSH

3

R , 153 135 113 byte

function(s,S=utf8ToInt(s)){S[S==95]=2^(4:0)%*%matrix(S[S%in%c(65:90,97:122)]<95,5)+97
cat(tolower(intToUtf8(S)))}

Provalo online!

Emette alcuni avvisi con l'uso di matrixma ciò non dovrebbe influire sul risultato. Inoltre emette avvisi poiché l' [<-assegnazione rimuoverà gli oggetti estranei assegnati per impostazione predefinita.

40 (!) Byte in meno grazie ai miglioramenti di JayCe


Non credo che ti serva,length(L)%/%5
JayCe,

Inoltre, non è necessario definire L?
JayCe,

@JayCe va bene oggi ho imparato che [<-getterà elementi oltre la lunghezza degli indici ...
Giuseppe

Anche io in realtà!
JayCe


3

C (gcc) , 111 109 101 100 100 byte

Modifica: aggiunta la minuscola per il commento di @ FrownyFrog; grazie a Lynn, Christoph e user5329483 per i loro suggerimenti!

f(s,t,i)char*s,*t;{for(t=s;t=strchr(t,95);*t=i+1)for(i=3;i<64;s++)isalpha(*s)?i=2*i|*s<97,*s|=32:0;}

Provalo online!


È possibile salvare 2 byte con i+=i+(*s<97).
Lynn,

È possibile abolire jintroducendo un bit marker ie riscrivendo il secondo per as for(i=1;i<32;s++). E compensare i 32 extra nella parte esterna. Come newbee qui conto un riserva di sette byte.
user5329483

Trovato un altro byte: for(i=3;i<96;s++)porta il 65 a un numero a una cifra, ovvero 1.
user5329483,

2

Vai, 219 217 192 210 209 156 byte

25 byte salvati grazie a @Lynn! 53 byte salvati grazie a @ovs!

Ho dovuto perdere 18 byte a causa di un bug con stringhe senza caratteri di sottolineatura :(

func p(s string){b:=0;n:=0;for _,c:=range s{if IsLetter(c){b+=b;if IsUpper(c){b+=1};n++;s=g.Replace(s,"_",string('a'+b%32),(5-n%5)/5)}};Print(g.ToLower(s))}

Provalo online!


2

Stax , 22 byte

â╟▓ïMeee¶▐f◄┴≈┘n╛äyΩ○N

Esegui ed esegui il debug

L'approccio generale è una sostituzione dell'espressione regolare "_"dell'uso di una funzione di callback che suddivide le lettere degli input per calcolare ciascun carattere di sostituzione.

v       convert to lower case
'_      "_" string literal
{       begin block for regex replacement
  yVl|& all the letters only from the original input
  5/    split into chunks of 5
  i@    keep the ith one, where i is the 0-based number of times this block has run
  {97<m map 5-letter chunk to bits to indicate which are lowercase
  :b    decode as 5-bit integer
  97+]  add 97 and wrap in array to convert to lower case character
}       end block for regex replacement
R       do regex replacement

Esegui questo


1

Rosso , 247 byte

func[s][a: charset[#"a"-#"z"#"A"-#"Z"]v: copy""parse s[any[copy c a(append v to-string c)|
skip]]k: 0 t: copy""repeat n(length? v)/ 5[c: 0 p: 16
loop 5[if v/(k: k + 1) <#"a"[c: c + p]p: p / 2]append t#"a"+ c]foreach c
t[replace s"_"c]lowercase s]

Provalo online!

Più leggibile:

f: func[s][
    a: charset[#"a"-#"z"#"A"-#"Z"]
    v: copy ""
    parse s[any[copy c a(append v to-string c)| skip]]
    k: 0
    t: copy ""
    repeat n (length? v) / 5[
        c: 0
        p: 16
        loop 5[
            if v/(k: k + 1) < #"a" [c: c + p]
            p: p / 2
        ]
        append t #"a" + c
    ]
    foreach c t[replace s "_" c]
    lowercase s
]

1

Java 10, 186 byte

s->{var b="";for(int i=0,c;i<s.length();)if((b+=(c=s.charAt(i++))>64&c<91?1:c>96&c<123?0:"").length()>4)s=s.replaceFirst("_",(char)(97+Byte.valueOf(b,2))+(b=""));return s.toLowerCase();}

Provalo online.

Spiegazione:

s->{                            // Method with String as both parameter and return-type
  var b="";                     //  Binary-String, starting empty
  for(int i=0,c;i<s.length();)  //  Loop over the characters of the input-String
    if((b+=(c=s.charAt(i++))>64&c<91?
                                //   If the current character is a lowercase letter:
            1                   //    Append "1" to the binary-String
           :c>96&c<123?         //   Else-if it's an uppercase letter:
            0                   //    Append "0" to the binary-String
           :                    //   Else (not a letter):
            "")                 //    Append nothing to the binary-String
       .length()>4)             //   And if the length is now 5:
      s=s.replaceFirst("_",     //    Replace the first "_" in the input-String with:
           (char)(97+Byte.valueOf(b,2))
                                //     The binary-String as character
           +(b=""));            //    And reset the binary-String
  return s.toLowerCase();}      //  Return the modified input-String as lowercase


1

Japt, 25 byte

r'_@r\L mè\A sTT±5 ÍdIÄÃv

Provalo


Spiegazione

r'_                           :Replace underscores
   @                          :Pass each match through a function
    r                         :  From original input remove
     \L                       :    /[^a-zA-Z]/g
        m                     :  Map
         è                    :    Count
          \A                  :      /[A-Z]/g
             s                :  Slice
              T               :    From index T (initially 0)
               T±5            :    To index T+=5
                   Í          :  Convert from base-2 string to base-10 integer
                     IÄ       :  Add 64+1
                    d         :  Get character at that codepoint
                       Ã      :End function
                        v     :Lowercase

1

Pyth, 36 byte

Km@Gim!}kGd2c@+r1GGQ5VQp?qN\_.(KZr0N

Provalo qui

Spiegazione

Km@Gim!}kGd2c@+r1GGQ5VQp?qN\_.(KZr0N
             @+r1GGQ                   Get the letters from the input...
            c       5                  ... in chunks of 5.
 m        d                            For each chunk...
     m!}kG                             ... check if each letter is uppercase...
    i      2                           ... converted to binary...
  @G                                   ... and get the corresponding letter.
                     VQp               For each character in the input...
K                       ?qN\_.(KZ      ... if the character is '_', replace it...
                                 r0N   ... otherwise, lowercase it.

1

Python 3.5 , 296 byte

u=input();f=u.find('_');m=''.join([c for c in u if c.isalpha()]);z=[chr(int(''.join(['0'if o.islower() else'1' for o in l]),2)+65)for l in[m[h:h+5]for h in range(0,len(m),5)]if len(l)==5];[z.insert(v,d)for v,d in enumerate(u[f:])if d!="_"];u=list(u);u[f:]=z[:len(u[f:])];print(''.join(u).lower())

Provalo online

Primo codice golf :)

(So ​​che non è piccolo in byte, mi stavo solo divertendo a creare un codice di 1 riga)

Ecco la spiegazione:


Input dell'utente

u = input ()


Trova l'indice del primo _ nella stringa e lo memorizza

f = u.find ( '_')


elimina la stringa di tutti i caratteri non alfa

m = ''. join ([c per c in u se c.isalpha ()])


Divide la stringa alfa in un array con ogni elemento composto da 5 caratteri

Ex. ['THeqU', 'ICkbr', 'ownFO', 'xJUMp', 'soVEr', 'thela']

Quindi converte i caratteri minuscoli in 0 e i caratteri maiuscoli in 1

Ex. ['11001', '11000', '00011', '01110', '00110', '00000']

e converte la stringa binaria in un numero intero, aggiunge 65 e la converte in un carattere

Ex. ['z', 'y', 'd', 'o', 'g', 'a']

z = [chr (int (''. join (['0' if o.islower () else '1' per o in l]), 2) +65) per l in [m [h: h + 5] per h nell'intervallo (0, len (m), 5)] se len (l) == 5]


trova tutti i caratteri dopo il primo _ e li inserisce nell'array z nelle rispettive posizioni (definite sopra)

Ex. ['z', 'y', '', 'd', 'o', 'g', '.', 'a']

[z.inserire (v, d) per v, d in enumerazione (u [f:]) se d! = "_"]


dividere la nostra stringa in un elenco di caratteri

u = lista (u)


taglia la nostra stringa dal primo _ alla fine dell'elenco e sostituiscila con l'array z. Ho anche dovuto tagliare l'array z per la lunghezza della stringa divisa dal primo _ alla fine perché ho ottenuto un carattere aggiuntivo nell'esempio del cane pigro (la "a" alla fine degli esempi sopra)

u [f:] = z [: len (list (u [f:]))]


* stampa la risposta *

stampare ( ''. join (u) .lower ())



C'è di più nel golf oltre a ottenere tutto su una linea. 165 byte
Jo King,

Puoi rimuovere lo spazio tra o.islower()e else, e penso '1'e for. Inoltre, puoi passare if d!="_"a if"_"!=d, ma il commento sopra lo fa già.
Zacharý,

1

Haskell , 165 byte

g""
import Data.Char
f t(x:s)('_':r)=x:f t s r
f[0,a]s r=g(s++[chr a])r
f[n,a]s(c:r)=toLower c:f[div n$1+sum[1|isAlpha c],a+sum[n|isUpper c]]s r
f _ s e=e
g=f[16,97]

Provalo online! Esempio di utilizzo: g"" "BInar_"rese "binary".


1

PowerShell , 121 byte

switch -r($args|% t*y){_{$_=$a[$n++]+97}[a-z]{$x+=$x+($_-le96);if(!(++$i%5)){$a+=,$x;$x=0};$_=$_-bor32}.{$r+=[char]$_}}$r

Provalo online!

Meno golf:

switch -Regex ($args|% toCharArray){
    _ {                     # is underscore
        $_=$a[$n++]+97      # get a char from the array of letter
    }

    [a-z] {                 # is letter
        $x+=$x+($_-le96)    # $x=2*$x+($_-le96)
        if(!(++$i%5)){      # if(++$i%5 -eq 0)
            $a+=,$x         # add an element to the array of letters
            $x=0            # init
        }
        $_=$_-bor32         # to lower
    }

    . {                     # is any char ('_' and letters included)
        $r+=[char]$_        # add the char to result
    }
}
$r

0

Perl 5 -p , 78 byte

for$h(s/\W|\d//gr=~y/a-z/0/r=~y/A-Z/1/r=~/.{5}/g){s%_%chr 65+oct"0b$h"%e}$_=lc

Provalo online!


L'ho risolto con altri 3 byte, il che rende la tua risposta un po 'migliore secondo le regole attuali.
Xcali,

Non meglio ma diverso. Ogni lingua + opzioni è considerata separatamente, non competere con la stessa lingua + altre opzioni, come ho capito.
msh210,
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.