PROGRAMMIERPUZZLE & CODE ____


45

Eingang

Eine nicht leere codierte Zeichenfolge, die aus druckbaren ASCII-Zeichen (im Bereich von 32 bis 126) besteht und durch die einige fehlende Buchstaben ersetzt wurden _.

Ausgabe

Eine dekodierte Zeichenfolge gleicher Länge mit allen Kleinbuchstaben, einschließlich der fehlenden.

Wie?

Edit: Wie von @Deusovi in ​​den Kommentaren erwähnt, ist dies eine Variante von Bacons Chiffre .

  • Sammeln Sie alle Buchstaben in der ursprünglichen Zeichenfolge und gruppieren Sie sie nach 5. Zusätzliche Buchstaben, die nicht in eine vollständige Gruppe von 5 passen, werden ignoriert.
  • Konvertieren Sie jede Gruppe in Binär: Kleinbuchstaben = 0 , Großbuchstaben = 1 . Dies führt zu einer Liste von ganzen Zahlen.
  • Verwenden Sie jeden Wert N in dieser Liste, um jeden _in der ursprünglichen Zeichenfolge durch den N- ten Buchstaben des Alphabets (0-indiziert) in der angegebenen Reihenfolge zu ersetzen .

Beispiel: 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'

Indem Sie die fehlenden Buchstaben ersetzen und alles wieder in Kleinbuchstaben umwandeln, wird die ursprüngliche Zeichenfolge enthüllt:

programming puzzles & code golf

Dies ist die erwartete Ausgabe.

Erläuterungen und Regeln

  • Die fehlenden Buchstaben werden garantiert am Ende der Zeichenfolge angezeigt. Formaler: Nach dem ersten Buchstaben _in der Eingabezeichenfolge wird es nie einen Buchstaben geben . Es können jedoch auch andere druckbare ASCII-Zeichen wie Leerzeichen und Interpunktionszeichen vorhanden sein.
  • Die Eingabe enthält garantiert keinen unnötigen Großbuchstaben: Alle Großbuchstaben sind Bits, die auf 1 gesetzt sind und zum Entschlüsseln der fehlenden Buchstaben erforderlich sind. Alles andere ist in Kleinbuchstaben.
  • Die Eingabezeichenfolge ist garantiert gültig. Insbesondere:
    • Es enthält immer genug vollständige Gruppen mit 5 Buchstaben, um die Unterstriche zu dekodieren.
    • Die binär codierten Ganzzahlen liegen garantiert im Bereich [0-25] .
  • Möglicherweise enthält _die Eingabezeichenfolge überhaupt keine. In diesem Fall müssen Sie nur die Eingabe zurückgeben.
  • Das ist , also gewinnt die kürzeste Antwort in Bytes!

Testfälle

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.

Einige zusätzliche Testfälle:

Input : BInar_
Output: binary

Input : 12 MonKey_
Output: 12 monkeys

Input : hyPerbolIZ__
Output: hyperbolized

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

Sollen wir nur so viele 5er-Gruppen berücksichtigen, wie Unterstriche in der Eingabe enthalten sind?
Esolanging Fruit

In diesem Fall ist die Regel, wenn _die Eingabezeichenfolge keine enthält, ein Sonderfall.
Esolanging Fruit

1
Oh, Bacon-Chiffre!
Deusovi

1
@SztupY Da The input is guaranteed not to contain any useless capital letter, falls es keinen Unterstrich gibt, wird auch kein Großbuchstabe verwendet.
Laikoni

1
@KirillL. Ja, irgendetwas in [32-126]. Ich habe einen weiteren Testfall hinzugefügt.
Arnauld

Antworten:


19

05AB1E , 18 Bytes

Code:

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

Verwendet die 05AB1E- Codierung. Probieren Sie es online!

Erläuterung:

á                       # 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 Bytes

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

Probieren Sie es online!

Erläuterung:

  • -pFLiest eine Eingabezeile in die Variable $_und, aufgeteilt in Zeichen, in das Array @F.
  • @a=grep!/\W|\d/,@FSetzt das Array @aauf die Mitglieder @F, die den regulären Ausdruck nicht erfüllen \W|\d. \Wist alles andere als Buchstaben, Zahlen und _; \dist Zahlen. Also \W|\dist alles andere als Buchstaben und _und @ahat alle Buchstaben und _Zeichen. Wir werden niemals die _Charaktere untersuchen @a. (Beachten Sie, dass dies nur funktioniert, weil die Eingabe garantiert ASCII ist.)
  • map{a gt shift@a&&16/2**$_}0..4Führt für 0 bis 4 Folgendes aus: Es verschiebt das nächste Element von @a, verkürzt es und bewertet, ob aes asciibetisch größer als dieses Element ist (dh ob dieses Element in Großbuchstaben geschrieben ist). Wenn ja, &&wird nicht kurzgeschlossen, also erhalten wir 16 geteilt durch 2 zur Potenz des Eingangswerts (0 bis 4). Andernfalls &&wird kurzgeschlossen und wir erhalten 0. mapGibt die Liste der fünf Zahlen zurück sum, zu denen sie hinzugefügt werden.
  • Das ist das Element, das wir von der Liste haben wollen a..z, und das ist es, woraus wir kommen (a..z)[…].
  • s!_!…!egwandelt jedes _in $_der wiederum mit den entsprechenden Buchstaben,.
  • $_=lckonvertiert $_in die Kleinbuchstaben-Version von sich selbst und -pdruckt es aus.


5

Gelee ,  28 27  26 Bytes

-1 danke an Erik the Outgolfer & dylnan

Keine sehr gelee-freundliche Herausforderung!

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

Ein monadischer Link, der Listen von Zeichen akzeptiert und zurückgibt.

Probieren Sie es online!

Wie?

ḟŒ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

Netzhaut , 91 bis 90 Bytes

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

Probieren Sie es online! Erläuterung:

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

Übersetzen Sie Kleinbuchstaben in aund Großbuchstaben in Aund löschen Sie alles andere.

L`.{5}

Teilen Sie das Aas in 5er-Gruppen auf.

A
aA
+`Aa
aAA

Konvertieren Sie von binär nach unär, wobei Sie Aals 1 und aals 0 behandeln. Da es Aaursprünglich 5 s gab, bleiben 5 as übrig, plus eine Anzahl von As, abhängig von der gewünschten Position im Alphabet.

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

Erhöhen Sie den letzten Wert aentsprechend der Anzahl der folgenden As.

^
$+¶

Stellen Sie die ursprüngliche Eingabe voran.

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

Ersetzen Sie alle _s durch den nächsten dekodierten Buchstaben.

0G`

Entfernen Sie alle entschlüsselten Ersatzbuchstaben.

T`L`l

Alles in Kleinbuchstaben.

Retina 0.8.2 , 117 Bytes

.+
$&¶$&
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`

Probieren Sie es online! Erläuterung:

.+
$&¶$&

Duplizieren Sie die Eingabe.

T`L`l`^.*

Kleinschreibung der ersten Kopie.

T`l`a`.*$

Übersetzen Sie Kleinbuchstaben ain die zweite Kopie.

T`L`A

Übersetzen Sie Großbuchstaben in A. Diese müssen sich in der zweiten Kopie befinden, da die erste Kopie bereits in Kleinbuchstaben geschrieben wurde.

T`aAp`aA_`.*$

Löschen Sie alles andere in der zweiten Kopie.

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

Teilen Sie die zweite Kopie (jetzt nur Aas) in 5er-Gruppen auf.

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

Dekodieren Sie die Buchstaben und fügen Sie sie wie zuvor ein.


5

APL (Dyalog Unicode) , 46 Byte SBCS

Anonymes Lambda, geht davon aus ⎕IO(Indexursprung) zu sein 0.

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

Probieren Sie es online!

{... ... } Zwei-Anweisung Funktion; ist das Argument, trennt Aussagen

 Argument (No-Op-Funktion),
'_'= dem ein Unterstrich (dh eine Boolesche Zuordnungsfunktion)
_← entspricht_

A[… Setzen Sie ]@_⍵ die folgenden Zeichen A an den Stellen mit Unterstrichen in das Argument, wobei
  ⎕A der Großbuchstabe A dem Großbuchstaben
  A← das A
  819⌶ Kleinbuchstaben ( 819 ≈ BIg , ohne linkes Argument bedeutet nicht groß, dh Kleinbuchstaben)
  A, voranstellen soll. Dies gibt uns alle Buchstaben
  ⍵∩ Schnittmenge des Arguments und das; nur die Buchstaben des Arguments,
  A∊⍨ die Mitglieder des Großbuchstaben sind; Groß Bits
  (... )5⍴r eshape , dass auf die folgenden Anzahl von Zeilen und fünf Spalten:
   _⍵ die Maske von Unterstrichen in der Argument
   +/ Summe , die; Anzahl der Unterstriche
   transponieren (um jede Zeile als Zahl und nicht als Bitposition zu behandeln)  alles
  2⊥ als Base-2-
819⌶Kleinbuchstaben auswerten


5

Scala , 189 Bytes

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)}

Probieren Sie es online!

Erläuterung:

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

Gelee , 26 Bytes

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

Probieren Sie es online!

Anderer Ansatz als bei Jonathan Allan. EDIT: Also, ich dachte anscheinend an die gleiche Byteverkleinerung wie Jonathan Allan, also tut es nicht weh, seinen Namen noch einmal zu erwähnen.



3

Sauber , 180 ... 150 Bytes

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))

Probieren Sie es online!

Definiert die Funktion $ :: [Char] -> [Char]mit @ :: [Char] [Char] -> [Char]als Helfer zum Ersetzen von Unterstrichen und ? :: [Char] -> [Char]als Helfer zum Generieren der Ersetzungszeichen.


Wie funktioniert das i<-:""Teil? Werden Zeichen implizit in Zahlen umgewandelt, wenn sie summiert oder hinzugefügt werden?
Laikoni

@Laikoni nein, es gibt keine implizite Konvertierung. Sie können jedoch Zeichen hinzufügen und abziehen.
Freitag,


3

R , 153 135 113 Bytes

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)))}

Probieren Sie es online!

Gibt einige Warnungen bei der Verwendung von aus matrix, die das Ergebnis jedoch nicht beeinflussen sollten. Gibt auch Warnungen aus, da durch die [<-Zuweisung nicht zugewiesene Objekte standardmäßig entfernt werden.

40 (!) Bytes weniger dank JayCes Verbesserungen


Ich glaube nicht, dass Sie brauchen,length(L)%/%5
JayCe

Auch keine Notwendigkeit, L zu definieren?
JayCe

@ JayCe Okay, heute habe ich erfahren, dass [<-Elemente über die Länge der Indizes hinaus geworfen werden ...
Giuseppe

Ich eigentlich auch!
JayCe


3

C (GCC) , 111 109 101 100 Bytes

Bearbeiten: Kleinbuchstaben gemäß dem Kommentar von @ FrownyFrog hinzugefügt; Danke an Lynn, Christoph und user5329483 für ihre Vorschläge!

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;}

Probieren Sie es online!


Mit können Sie 2 Bytes sparen i+=i+(*s<97).
Lynn

Sie könnten abschaffen, jindem Sie ein Markierungsbit einfügen iund das zweite für as neu schreiben for(i=1;i<32;s++). Und kompensieren die zusätzlichen 32 in der äußeren. Als Neuling zähle ich hier ein Sieben-Byte-Reserve.
user5329483

Ein weiteres Byte gefunden: for(i=3;i<96;s++)Bringt die 65 auf eine einstellige Zahl, auch bekannt als 1.
user5329483

2

Los, 219 217 192 210 209 156 Bytes

25 Bytes gespart dank @Lynn! 53 Bytes dank @ovs eingespart!

Musste 18 Bytes wegen eines Fehlers mit Strings ohne Unterstriche verlieren :(

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))}

Probieren Sie es online!


2

Stax , 22 Bytes

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

Führen Sie es aus und debuggen Sie es

Der allgemeine Ansatz ist das Ersetzen eines regulären Ausdrucks "_"durch eine Rückruffunktion, die die Buchstaben der Eingaben aufteilt, um jedes Ersetzungszeichen zu berechnen.

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

Führen Sie dieses aus


1

Rot , 247 Bytes

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]

Probieren Sie es online!

Besser lesbar:

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 Bytes

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();}

Probieren Sie es online aus.

Erläuterung:

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 Bytes

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

Versuch es


Erläuterung

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 Bytes

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

Probieren Sie es hier aus

Erläuterung

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 Bytes

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())

Probieren Sie es online aus

Erster Code Golf :)

(Ich weiß, es ist nicht klein in Bytes, ich hatte nur Spaß, einen 1-Zeilen-Code zu machen)

Hier ist die Erklärung:


Benutzereingabe

u = input ()


Findet den Index des ersten _ in der Zeichenfolge und speichert ihn

f = u.find ('_')


Entfernt die Zeichenfolge aller Nicht-Alpha-Zeichen

m = ''. join ([c für c in u wenn c.isalpha ()])


Teilt die Alpha-Zeichenfolge in ein Array auf, wobei jedes Element aus 5 Zeichen besteht

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

Konvertiert dann Kleinbuchstaben in 0 und Großbuchstaben in 1

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

und wandelt die Binärzeichenfolge in eine Ganzzahl um, addiert 65 und wandelt diese in ein Zeichen um

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

z = [chr (int (''. join (['0' wenn o.islower () else '1' für o in l]), 2) +65) für l in [m [h: h + 5] für h im Bereich (0, len (m), 5)] falls len (l) == 5]


findet alle Zeichen nach dem ersten _ und verschiebt sie in das Array z an ihren jeweiligen Positionen (oben definiert)

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

[z.insert (v, d) für v, d in Aufzählung (u [f:]), wenn d! = "_"]


Teilen Sie unsere Zeichenfolge in eine Liste von Zeichen

u = Liste (u)


Schneiden Sie unseren String vom ersten _ bis zum Ende der Liste und ersetzen Sie ihn durch das Array z. Ich musste auch das Array z vom ersten _ bis zum Ende auf die Länge der geteilten Zeichenfolge aufteilen, da ich im Beispiel für einen faulen Hund ein zusätzliches Zeichen erhalten habe (das "a" am Ende der obigen Beispiele).

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


* Antwort ausdrucken *

print (''. join (u) .lower ())



Golfen bedeutet mehr, als nur alles auf eine Linie zu bringen. 165 Bytes
Jo King

Sie können das Leerzeichen zwischen o.islower()und entfernen else, und ich denke, '1'und for. Sie können aber auch ändern if d!="_"zu if"_"!=d, aber der obige Kommentar bereits das tut.
Zacharý

1

Haskell , 165 Bytes

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]

Probieren Sie es online! Anwendungsbeispiel: g"" "BInar_"Erträge "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

Probieren Sie es online!

Weniger golfen:

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 Bytes

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

Probieren Sie es online!


Ich habe es mit 3 weiteren Bytes korrigiert, was Ihre Antwort unter den aktuellen Regeln ein bisschen besser macht.
Xcali

Nicht besser aber anders. Jede Sprache + Option wird separat betrachtet und konkurriert nicht mit derselben Sprache + anderen Optionen, wie ich es verstehe.
msh210
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.