prOGraMMIng PuZZleS & cOde ____


45

Memasukkan

String berkode non-kosong yang terdiri dari karakter ASCII yang dapat dicetak (dalam kisaran 32-126), di mana beberapa huruf yang hilang telah diganti _.

Keluaran

String yang diterjemahkan dengan panjang yang sama dengan semua huruf dalam huruf kecil, termasuk yang hilang.

Bagaimana?

Sunting: Seperti yang disebutkan oleh @Deusovi dalam komentar, ini adalah varian dari cipher Bacon .

  • Kumpulkan semua huruf dalam string asli dan kelompokkan dengan 5. Huruf-huruf tambahan yang tidak cocok dengan kelompok penuh 5 diabaikan.
  • Ubah setiap grup menjadi biner: huruf kecil = 0 , huruf besar = 1 . Ini mengarah ke daftar bilangan bulat.
  • Gunakan setiap nilai N dalam daftar ini untuk menggantikan masing-masing _dalam string asli dengan huruf ke- N dari alfabet (0-diindeks), sesuai urutan penampilan.

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

Dengan mengganti huruf-huruf yang hilang dan mengubah semuanya kembali menjadi huruf kecil, string aslinya dibuka:

programming puzzles & code golf

Ini adalah output yang diharapkan.

Klarifikasi dan aturan

  • Huruf-huruf yang hilang dijamin akan muncul di akhir string. Secara lebih formal: tidak akan pernah ada huruf setelah huruf pertama _dalam string input. Namun, mungkin ada karakter ASCII yang dapat dicetak lainnya seperti spasi dan tanda baca.
  • Input dijamin tidak mengandung huruf kapital yang tidak berguna : semua huruf kapital adalah bit yang diatur ke 1 yang diperlukan untuk memecahkan kode huruf yang hilang. Yang lainnya ada dalam huruf kecil.
  • String input dijamin valid. Terutama:
    • Itu akan selalu berisi cukup grup penuh 5 huruf untuk memecahkan kode garis bawah.
    • Bilangan bulat biner-encoded dijamin berada di kisaran [0-25] .
  • Mungkin tidak ada _sama sekali dalam string input, dalam hal ini Anda hanya perlu mengembalikan input.
  • Ini , jadi jawaban tersingkat dalam byte menang!

Uji kasus

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.

Beberapa test case tambahan:

Input : BInar_
Output: binary

Input : 12 MonKey_
Output: 12 monkeys

Input : hyPerbolIZ__
Output: hyperbolized

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

Haruskah kita hanya mempertimbangkan sebanyak mungkin kelompok 5 karena ada garis bawah dalam input?
Buah Esolanging

Dalam hal ini, aturan ketika tidak ada _dalam string input adalah sedikit kasus khusus.
Buah Esolanging

1
Ooh, Bacon cipher!
Deusovi

1
@SztupY As The input is guaranteed not to contain any useless capital letter, jika tidak ada garis bawah juga tidak akan ada huruf kapital.
Laikoni

1
@ KirillL. Ya, apa saja di [32-126]. Saya telah menambahkan test case lain.
Arnauld

Jawaban:


19

05AB1E , 18 byte

Kode:

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

Menggunakan penyandian 05AB1E . Cobalah online!

Penjelasan:

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

Cobalah online!

Penjelasan:

  • -pFmembaca sebaris input ke dalam variabel $_dan, dibagi menjadi karakter, ke dalam array @F.
  • @a=grep!/\W|\d/,@Fset array @asama dengan anggota @Fyang tidak memenuhi regex \W|\d. \Wtidak lain adalah huruf, angka, dan _; \dadalah angka. Begitu \W|\djuga dengan huruf dan _, dan @amemiliki semua huruf dan _karakter. Kami akan berakhir tidak pernah memeriksa _karakter dalam @a. (Perhatikan bahwa ini hanya berfungsi karena input dijamin ASCII.)
  • map{a gt shift@a&&16/2**$_}0..4melakukan hal berikut untuk 0 hingga 4: Ini menggeser elemen berikutnya @a, memendekkannya, dan mengevaluasi apakah asecara asciibetik lebih besar dari elemen itu (yaitu apakah elemen itu huruf besar). Jika demikian, &&bukan hubung singkat, jadi kami mendapatkan 16 dibagi 2 untuk mendapatkan kekuatan dari nilai input (0 hingga 4). Kalau tidak &&hubung pendek dan kami mendapatkan 0. mapmengembalikan daftar lima angka sum, yang menambahkan mereka.
  • Itulah elemen yang kita inginkan dari daftar a..z, dan itulah yang kita dapatkan (a..z)[…].
  • s!_!…!egmengkonversi setiap _di $_, pada gilirannya, surat yang tepat.
  • $_=lcmengkonversi $_ke versi huruf kecil itu sendiri, dan -pmencetaknya.


5

Jelly ,  28 27  26 byte

-1 terima kasih kepada Erik the Outgolfer & dylnan

Bukan tantangan yang sangat ramah Jelly!

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

Tautan monadik yang menerima dan mengembalikan daftar karakter.

Cobalah online!

Bagaimana?

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

Cobalah online! Penjelasan:

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

Terjemahkan huruf kecil ke adan huruf besar ke A, menghapus yang lainnya.

L`.{5}

Bagi Aas menjadi kelompok 5.

A
aA
+`Aa
aAA

Konversi dari biner ke unary, perlakukan Asebagai 1 dan a0. Karena ada 5 Aas awalnya, ada 5 as yang tersisa, ditambah beberapa As tergantung pada posisi yang diinginkan dalam alfabet.

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

Tambahkan yang terakhir asesuai dengan jumlah As berikut .

^
$+¶

Tambahkan input asli.

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

Ganti _s dengan huruf yang diterjemahkan berikutnya.

0G`

Hapus semua surat yang diterjemahkan.

T`L`l

Huruf kecil semuanya.

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`

Cobalah online! Penjelasan:

.+
$&¶$&

Gandakan input.

T`L`l`^.*

Huruf kecil salinan pertama.

T`l`a`.*$

Terjemahkan huruf kecil ke adalam salinan kedua.

T`L`A

Terjemahkan huruf besar ke A. Ini harus ada dalam salinan kedua karena salinan pertama sudah lebih kecil.

T`aAp`aA_`.*$

Hapus semua yang lain di salinan kedua.

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

Bagi salinan kedua (sekarang hanya Aas) ke dalam kelompok-kelompok 5.

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

Dekode huruf-hurufnya dan masukkan seperti sebelumnya.


5

APL (Dyalog Unicode) , 46 byte SBCS

Lambda Anonim, Asumsikan ⎕IO(Indeks Asal) menjadi 0.

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

Cobalah online!

{... ... } fungsi dua pernyataan; adalah argumennya, pisahkan pernyataan

 argumen (fungsi no-op) di
'_'= mana sama dengan garis bawah (yaitu fungsi pemetaan Boolean)
_← menetapkan fungsi itu_

A[... ]@_⍵ menempatkan karakter berikut A di posisi garis bawah dalam argumen
  ⎕A huruf besar A lphabet
  A← menetapkan bahwa untuk A
  819⌶ huruf kecil itu ( 819 ≈ BIg , dengan tidak berarti argumen kiri tidak besar, yaitu huruf kecil)
  A, tambahkan alfabet huruf besar; ini memberi kita semua surat
  ⍵∩ persimpangan argumen dan itu; hanya huruf-huruf dari argumen
  A∊⍨ mana yang merupakan anggota dari huruf besar; huruf besar bit
  (... )5⍴r eshape bahwa untuk nomor berikut baris, dan lima kolom:
   _⍵ topeng garis bawah dalam argumen
   +/ jumlah itu; jumlah garis bawah
   transpos (untuk memperlakukan setiap baris sebagai angka daripada sebagai posisi bit)
  2⊥ dievaluasi sebagai basis-2
819⌶ huruf kecil semuanya


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

Cobalah online!

Penjelasan:

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

Jelly , 26 byte

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

Cobalah online!

Pendekatan yang berbeda dari Jonathan Allan's. EDIT: Jadi, saya, uh, rupanya memikirkan pengurangan byte yang sama dengan Jonathan Allan, jadi tidak ada salahnya menyebutkan namanya lagi.



3

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

Cobalah online!

Menentukan fungsi $ :: [Char] -> [Char]dengan @ :: [Char] [Char] -> [Char]sebagai penolong untuk mengganti garis bawah, dan ? :: [Char] -> [Char]sebagai penolong untuk menghasilkan karakter pengganti.


Bagaimana cara i<-:""kerjanya? Apakah karakter secara implisit dikonversi menjadi angka saat menjumlahkan atau menambahkannya?
Laikoni

@Laikoni tidak, tidak ada konversi tersirat. Anda dapat menambah dan mengurangi Chars.
Kamis

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

Cobalah online!

Berkat @Arnauld, menghemat 2 byte.


1
@Arnauld Anda benar. diedit ke /[a-z]/gisekarang.
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)))}

Cobalah online!

Mengeluarkan beberapa peringatan dengan penggunaan matrixtapi itu seharusnya tidak mempengaruhi hasilnya. Juga masalah peringatan sebagai [<-tugas akan menghapus objek yang ditugaskan secara eksternal secara default.

40 (!) Byte turun berkat perbaikan JayCe


Saya rasa Anda tidak perlu,length(L)%/%5
JayCe

Juga tidak perlu mendefinisikan L?
JayCe

@JayCe, oke, hari ini saya belajar bahwa [<-akan membuang elemen melewati panjang indeks ...
Giuseppe

Aku juga sebenarnya!
JayCe


3

C (gcc) , 111 109 101 100 byte

Sunting: Menambahkan huruf kecil per komentar FrownyFrog; terima kasih kepada Lynn, Christoph dan user5329483 untuk saran mereka!

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

Cobalah online!


Anda dapat menyimpan 2 byte dengan i+=i+(*s<97).
Lynn

Anda dapat menghapusnya jdengan memasukkan sedikit marker idan menulis ulang yang kedua sebagai for(i=1;i<32;s++). Dan ganti 32 ekstra di luar. Sebagai seorang pemula di sini saya menghitung cadangan tujuh byte.
user5329483

Menemukan byte lain: for(i=3;i<96;s++)membawa 65 ke angka satu digit, alias 1.
user5329483

2

Go, 219 217 192 210 209 156 bytes

Disimpan 25 byte berkat @Lynn! Disimpan 53 byte berkat @ovs!

Harus kehilangan 18 byte karena bug dengan string tanpa garis bawah :(

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

Cobalah online!


2

Stax , 22 byte

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

Jalankan dan debug itu

Pendekatan umum adalah penggantian ekspresi reguler "_"menggunakan fungsi callback yang mengiris huruf input untuk menghitung setiap karakter penggantian.

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

Jalankan yang ini


1

Merah , 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]

Cobalah online!

Lebih mudah dibaca:

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

Cobalah online.

Penjelasan:

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

Cobalah


Penjelasan

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

Coba di sini

Penjelasan

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

Cobalah online

Golf kode pertama :)

(Saya tahu itu tidak kecil dalam byte, saya hanya bersenang-senang membuat kode 1 baris)

Berikut penjelasannya:


Input pengguna

u = input ()


Menemukan indeks _ pertama dalam string dan menyimpannya

f = u.temukan ('_')


strip string semua karakter non-alpha

m = ''. join ([c for c in u if c.isalpha ()])


Pisahkan string alpha ke dalam array dengan setiap elemen yang terdiri dari 5 karakter

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

Kemudian, ubah karakter huruf kecil menjadi 0 dan karakter huruf besar menjadi 1

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

dan mengonversi string biner ke integer, menambahkan 65 dan mengubahnya menjadi karakter

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

z = [chr (int (''. join (['0' jika o.islower () lain '1' untuk o in l]), 2) +65) untuk l di [m [h: h + 5] untuk h dalam rentang (0, len (m), 5)] jika len (l) == 5]


menemukan semua karakter setelah _ pertama dan mendorong mereka ke dalam array z di lokasi masing-masing (didefinisikan di atas)

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

[z.masukkan (v, d) untuk v, d dalam penghitungan (u [f:]) jika d! = "_"]


pisahkan string kami menjadi daftar karakter

u = daftar (u)


iris string kami dari _ pertama ke akhir daftar dan ganti dengan array z. Saya juga harus mengiris array z dengan panjang string split dari _ pertama sampai akhir karena saya mendapat karakter tambahan dalam contoh anjing malas ("a" di akhir contoh di atas)

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


* cetak jawabannya *

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



Ada banyak hal yang bisa dilakukan selain bermain golf hanya dalam satu jalur. 165 byte
Jo King

Anda dapat menghapus ruang antara o.islower()dan else, dan saya pikir '1'dan for. Juga, Anda dapat mengubah if d!="_"ke if"_"!=d, tapi komentar di atas sudah melakukan itu.
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]

Cobalah online! Contoh penggunaan: g"" "BInar_"hasil "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

Cobalah online!

Kurang bermain 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

Cobalah online!


Saya memperbaikinya dengan 3 byte lagi, yang membuat jawaban Anda sedikit lebih baik di bawah aturan saat ini.
Xcali

Tidak lebih baik tetapi berbeda. Setiap bahasa + opsi dianggap terpisah, tidak bersaing dengan bahasa yang sama + opsi lain, seperti yang saya pahami.
msh210
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.