prOGraMMIng PuzzleS & cOde ____


45

Đầu vào

Một chuỗi được mã hóa không trống bao gồm các ký tự ASCII có thể in được (trong phạm vi 32-126), trong đó một số chữ cái bị thiếu đã được thay thế bằng _.

Đầu ra

Một chuỗi được giải mã có cùng độ dài với tất cả các chữ cái viết thường, bao gồm cả các chữ cái còn thiếu.

Làm sao?

Chỉnh sửa: Như được đề cập bởi @Deusovi trong các bình luận, đây là một biến thể của mật mã của Bacon .

  • Tập hợp tất cả các chữ cái trong chuỗi gốc và nhóm chúng theo 5. Các chữ cái bổ sung không phù hợp trong một nhóm đầy đủ 5 được bỏ qua.
  • Chuyển đổi từng nhóm thành nhị phân: chữ thường = 0 , chữ hoa = 1 . Điều này dẫn đến một danh sách các số nguyên.
  • Sử dụng mỗi giá trị N trong danh sách này để thay thế từng giá trị trong _chuỗi gốc bằng chữ N -th của bảng chữ cái (được lập chỉ mục 0), theo thứ tự xuất hiện.

Thí dụ: 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'

Bằng cách thay thế các chữ cái bị thiếu và chuyển đổi mọi thứ trở lại chữ thường, chuỗi gốc được tiết lộ:

programming puzzles & code golf

Đây là đầu ra dự kiến.

Làm rõ và quy tắc

  • Các chữ cái bị thiếu được đảm bảo xuất hiện ở cuối chuỗi. Chính thức hơn: sẽ không bao giờ có bất kỳ chữ cái nào sau chữ cái đầu tiên _trong chuỗi đầu vào. Tuy nhiên, có thể có các ký tự ASCII có thể in khác như dấu cách và dấu chấm câu.
  • Đầu vào được đảm bảo không chứa bất kỳ chữ in hoa vô dụng nào : tất cả các chữ in hoa là các bit được đặt thành 1 được yêu cầu để giải mã các chữ cái bị thiếu. Mọi thứ khác đều viết thường.
  • Chuỗi đầu vào được đảm bảo là hợp lệ. Đặc biệt:
    • Nó sẽ luôn chứa đủ các nhóm 5 chữ cái đầy đủ để giải mã các dấu gạch dưới.
    • Các số nguyên được mã hóa nhị phân được đảm bảo nằm trong phạm vi [0-25] .
  • Có thể không có gì _trong chuỗi đầu vào, trong trường hợp đó bạn chỉ phải trả lại đầu vào.
  • Đây là , vì vậy câu trả lời ngắn nhất bằng byte sẽ thắng!

Các trường hợp thử nghiệm

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.

Một số trường hợp thử nghiệm thêm:

Input : BInar_
Output: binary

Input : 12 MonKey_
Output: 12 monkeys

Input : hyPerbolIZ__
Output: hyperbolized

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

Chúng ta chỉ nên xem xét nhiều nhóm 5 như có dấu gạch dưới trong đầu vào?
Quả Esolanging

Trong trường hợp đó, quy tắc khi không có _trong chuỗi đầu vào là một trường hợp đặc biệt.
Quả Esolanging

1
Ôi, mật mã Bacon!
Deusovi

1
@SztupY Vì The input is guaranteed not to contain any useless capital letter, trong trường hợp không có dấu gạch dưới, cũng sẽ không có chữ in hoa.
Laikoni

1
@KirillL. Vâng, bất cứ điều gì trong [32-126]. Tôi đã thêm một trường hợp thử nghiệm.
Arnauld

Câu trả lời:


19

05AB1E , 18 byte

Mã số:

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

Sử dụng mã hóa 05AB1E . Hãy thử trực tuyến!

Giải trình:

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

Hãy thử trực tuyến!

Giải trình:

  • -pFđọc một dòng đầu vào vào biến $_và, chia thành các ký tự, vào mảng @F.
  • @a=grep!/\W|\d/,@Fđặt mảng @abằng với các thành viên @Fđó không thỏa mãn biểu thức chính quy \W|\d. \Wlà bất cứ điều gì nhưng chữ cái, số, và _; \dlà những con số Vì vậy, \W|\dbất cứ điều gì ngoại trừ các chữ cái và _, và @acó tất cả các chữ cái và _ký tự. Chúng tôi sẽ kết thúc không bao giờ kiểm tra các _nhân vật trong @a. (Lưu ý rằng điều này chỉ hoạt động vì đầu vào được đảm bảo ASCII.)
  • map{a gt shift@a&&16/2**$_}0..4thực hiện các thao tác sau từ 0 đến 4: Nó loại bỏ phần tử tiếp theo @a, rút ​​ngắn nó và đánh giá xem aphần tử có lớn hơn phần tử đó hay không (tức là phần tử đó có phải là chữ hoa hay không). Nếu vậy, &&không phải là ngắn mạch, vì vậy chúng tôi nhận được 16 chia cho 2 để tăng sức mạnh của giá trị đầu vào (0 đến 4). Mặt khác &&là ngắn mạch và chúng tôi nhận được 0. maptrả về danh sách năm số sum, thêm chúng vào.
  • Đó là yếu tố chúng tôi muốn từ danh sách a..z, và đó là những gì chúng tôi nhận được (a..z)[…].
  • s!_!…!egchuyển đổi mỗi _năm $_, đến lượt nó, để lá thư thích hợp.
  • $_=lcchuyển đổi $_thành phiên bản chữ thường của chính nó và -pin nó.


5

Thạch ,  28 27  26 byte

-1 cảm ơn Erik the Outgolfer & dylnan

Không phải là một thử thách rất thân thiện với Jelly!

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

Một liên kết đơn âm chấp nhận và trả về danh sách các nhân vật.

Hãy thử trực tuyến!

Làm sao?

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

Võng mạc , 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

Hãy thử trực tuyến! Giải trình:

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

Dịch các chữ cái viết thường sang avà viết hoa chữ cái sang A, xóa mọi thứ khác.

L`.{5}

Chia Aas thành các nhóm 5.

A
aA
+`Aa
aAA

Chuyển đổi từ nhị phân thành đơn nguyên, xử lý Alà 1 và abằng 0. Vì có 5 Aagiây ban đầu, còn lại 5 agiây, cộng với một số As tùy thuộc vào vị trí mong muốn trong bảng chữ cái.

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

Tăng số cuối cùng atheo số As sau .

^
$+¶

Chuẩn bị đầu vào ban đầu.

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

Thay thế bất kỳ _s bằng chữ cái được giải mã tiếp theo.

0G`

Loại bỏ bất kỳ chữ cái giải mã dự phòng.

T`L`l

Chữ thường mọi thứ.

Võng mạc 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`

Hãy thử trực tuyến! Giải trình:

.+
$&¶$&

Nhân đôi đầu vào.

T`L`l`^.*

Viết thường các bản sao đầu tiên.

T`l`a`.*$

Dịch các chữ cái viết thường sang abản sao thứ hai.

T`L`A

Dịch chữ in hoa sang A. Đây phải là bản sao thứ hai vì bản sao đầu tiên đã được hạ xuống.

T`aAp`aA_`.*$

Xóa mọi thứ khác trong bản sao thứ hai.

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

Chia bản sao thứ hai (bây giờ chỉ là Aas) thành các nhóm 5.

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

Giải mã các chữ cái và chèn chúng như trước.


5

APL (Dyalog Unicode) , 46 byte SBCS

Lambda ẩn danh, Giả sử ⎕IO(Index Origin) là 0.

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

Hãy thử trực tuyến!

{... ... } chức năng hai tuyên bố; là đối số, phân tách các câu lệnh

 đối số (hàm no-op)
'_'= trong đó bằng với dấu gạch dưới (tức là hàm ánh xạ Boolean)
_← gán hàm đó cho_

A[... ]@_⍵ đưa các ký tự sau của A tại vị trí của dấu gạch trong đối số
  ⎕A các chữ hoa Một lphabet
  A← assign rằng để A
  819⌶ thành chữ thường nó ( 819 ≈ lớn , không có phương tiện tranh luận trái không lớn, tức là chữ thường)
  A, hãy thêm bảng chữ cái in hoa; điều này cho chúng ta tất cả các chữ cái
  ⍵∩ giao nhau của đối số và rằng; chỉ các chữ cái của đối số
  A∊⍨ mà là thành viên của bảng chữ cái viết hoa; hoa bit
  (... )5⍴r eshape rằng với số sau đây của các hàng, và năm cột:
   _⍵ mặt nạ của dấu gạch trong đối số
   +/ tiền đó; số lượng dấu gạch dưới
   hoán vị (để coi mỗi hàng là một số chứ không phải là một vị trí bit)
  2⊥ đánh giá là
819⌶ tất cả mọi thứ chữ thường 2


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

Hãy thử trực tuyến!

Giải trình:

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




3

Sạch , 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))

Hãy thử trực tuyến!

Xác định chức năng $ :: [Char] -> [Char]với @ :: [Char] [Char] -> [Char]vai trò là người trợ giúp để thay thế dấu gạch dưới và ? :: [Char] -> [Char]là người trợ giúp để tạo các ký tự thay thế.


Làm thế nào để i<-:""một phần làm việc? Là ký tự ngầm chuyển đổi thành số khi tính tổng hoặc thêm chúng?
Laikoni

@Laikoni không, không có chuyển đổi ngầm. Bạn có thể thêm và trừ Chars mặc dù.
urur


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

Hãy thử trực tuyến!

Đưa ra một số cảnh báo khi sử dụng matrixnhưng điều đó không ảnh hưởng đến kết quả. Ngoài ra, các vấn đề cảnh báo là [<-gán sẽ loại bỏ các đối tượng được gán bên ngoài theo mặc định.

Giảm 40 (!) By byte nhờ những cải tiến của JayCe


Tôi không nghĩ bạn cần,length(L)%/%5
JayCe

Cũng không cần định nghĩa L?
JayCe

@JayCe ổn, hôm nay tôi đã học được rằng [<-sẽ loại bỏ các yếu tố vượt quá độ dài của các chỉ mục ...
Giuseppe

Tôi cũng vậy!
JayCe


3

C (gcc) , 111 109 101 100 byte

Chỉnh sửa: Đã thêm bình luận cho mỗi bình luận của @ FrownyFrog; cảm ơn Lynn, Christoph và user5329483 vì những gợi ý của họ!

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

Hãy thử trực tuyến!


Bạn có thể lưu 2 byte với i+=i+(*s<97).
Lynn

Bạn có thể bãi bỏ jbằng cách giới thiệu một bit đánh dấu ivà viết lại lần thứ hai cho for(i=1;i<32;s++). Và bù thêm 32 ở bên ngoài cho. Là một newbee ở đây, tôi đếm một phụ tùng bảy byte.
dùng5329483

Tìm thấy một byte khác: for(i=3;i<96;s++)đưa số 65 xuống một số có một chữ số, aka 1.
dùng5329483

2

Đi, 219 217 192 210 209 156 byte

Đã lưu 25 byte nhờ @Lynn! Đã lưu 53 byte nhờ @ovs!

Phải mất 18 byte vì lỗi có chuỗi không có dấu gạch dưới :(

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

Hãy thử trực tuyến!


2

Stax , 22 byte

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

Chạy và gỡ lỗi nó

Cách tiếp cận chung là thay thế biểu thức chính quy "_"bằng cách sử dụng hàm gọi lại cắt các chữ cái của đầu vào để tính toán từng ký tự thay thế.

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

Chạy cái này


1

Màu đỏ , 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]

Hãy thử trực tuyến!

Dễ đọc hơn:

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

Hãy thử trực tuyến.

Giải trình:

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

Thử nó


Giải trình

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

Bình thường, 36 byte

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

Hãy thử nó ở đây

Giải trình

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

Dùng thử trực tuyến

Golf mã đầu tiên :)

(Tôi biết nó không nhỏ bằng byte, tôi chỉ vui khi tạo mã 1 dòng)

Đây là lời giải thích:


Đầu vào của người dùng

u = đầu vào ()


Tìm chỉ mục của _ đầu tiên trong chuỗi và lưu trữ nó

f = u.find ('_')


dải chuỗi của tất cả các ký tự không phải alpha

m = ''. tham gia ([c cho c trong u nếu c .alpha ()])


Chia chuỗi alpha thành một mảng với mỗi phần tử gồm 5 ký tự

Ví dụ. ['THeqU', 'ICkbr', 'ownFO', 'xJUMp', 'soVEr', 'thela']

Sau đó chuyển đổi các ký tự chữ thường thành 0 và các ký tự viết hoa thành 1

Ví dụ. ['11001', '11000', '00011', '01110', '00110', '00000']

và chuyển đổi chuỗi nhị phân thành một số nguyên, thêm 65 và chuyển đổi chuỗi đó thành một ký tự

Ví dụ. ['z', 'y', 'd', 'o', 'g', 'a']

z = [chr (int (''. tham gia (['0' nếu o.islower () khác '1' cho o trong l]), 2) +65) cho l trong [m [h: h + 5] cho h trong phạm vi (0, len (m), 5)] nếu len (l) == 5]


tìm thấy tất cả các ký tự sau dấu _ đầu tiên và đẩy chúng vào mảng z tại các vị trí tương ứng của chúng (được xác định ở trên)

Ví dụ. ['z', 'y', '', 'd', 'o', 'g', '.', 'a']

[z.insert (v, d) cho v, d trong liệt kê (u [f:]) nếu d! = "_"]


chia chuỗi của chúng tôi thành một danh sách các ký tự

u = danh sách (u)


cắt chuỗi của chúng ta từ _ đầu tiên đến cuối danh sách và thay thế nó bằng mảng z. Tôi cũng phải cắt mảng z theo chiều dài của chuỗi phân tách từ _ đầu tiên đến hết bởi vì tôi có thêm một ký tự trong ví dụ về con chó lười ("a" ở cuối các ví dụ trên)

u [f:] = z [: len (danh sách (u [f:]))]


* in ra câu trả lời *

in (''. tham gia (u) .lower ())



Có nhiều thứ để chơi golf hơn là chỉ nhận mọi thứ trên một dòng. 165 byte
Jo King

Bạn có thể loại bỏ khoảng trống giữa o.islower()else, và tôi nghĩ '1'for. Ngoài ra, bạn có thể thay đổi if d!="_"thành if"_"!=d, nhưng nhận xét trên đã làm điều đó.
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]

Hãy thử trực tuyến! Ví dụ sử dụng: g"" "BInar_"sản lượng "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

Hãy thử trực tuyến!

Ít chơi gôn hơn:

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

Hãy thử trực tuyến!


Tôi đã sửa nó với 3 byte nữa, điều này làm cho câu trả lời của bạn tốt hơn một chút theo các quy tắc hiện tại.
Xcali

Không tốt hơn nhưng khác biệt. Mỗi ngôn ngữ + tùy chọn được xem xét riêng biệt, không cạnh tranh với cùng ngôn ngữ + các tùy chọn khác, như tôi hiểu.
msh210
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.