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.

{_←'_'=⊢⋄819⌶A[2⊥⍉(+/_⍵)5⍴A∊⍨⍵∩A,819⌶A←⎕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.