prOGraMMIng PuZZleS & cOde ____


45

อินพุต

สตริงเข้ารหัสไม่ว่างเปล่าประกอบด้วยตัวอักขระ ASCII (อยู่ในช่วง 32-126) _ซึ่งบางตัวอักษรที่ขาดหายไปได้ถูกแทนที่ด้วย

เอาท์พุต

สตริงถอดรหัสที่มีความยาวเท่ากันโดยมีตัวอักษรทั้งหมดเป็นตัวพิมพ์เล็กรวมถึงสตริงที่หายไป

อย่างไร?

แก้ไข: ตามที่ระบุไว้โดย @Deusovi ในความคิดเห็นนี้เป็นตัวแปรของตัวเลขเบคอน

  • รวบรวมตัวอักษรทั้งหมดในสตริงเดิมและจัดกลุ่มตาม 5 ตัวอักษรเพิ่มเติมที่ไม่พอดีกับกลุ่มเต็ม 5 จะถูกละเว้น
  • แปลงแต่ละกลุ่มเข้าไบนารี: พิมพ์เล็ก = 0 , พิมพ์ใหญ่ = 1 สิ่งนี้นำไปสู่รายการจำนวนเต็ม
  • ใช้ค่าแต่ละค่าNในรายการนี้เพื่อแทนที่แต่ละค่า_ในสตริงเดิมด้วยตัวอักษรN -th ของตัวอักษร (ดัชนี 0) ตามลำดับการปรากฏ

ตัวอย่าง: 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'

ด้วยการแทนที่ตัวอักษรที่หายไปและแปลงทุกอย่างกลับเป็นตัวพิมพ์เล็กสตริงเดิมจะถูกเปิดเผย:

programming puzzles & code golf

นี่คือผลลัพธ์ที่คาดหวัง

คำอธิบายและกฎ

  • ตัวอักษรที่หายไปจะรับประกันว่าจะปรากฏที่ส่วนท้ายของสตริง เป็นทางการมากขึ้น: จะไม่มีตัวอักษรใด ๆ หลังจากตัวแรก_ในสตริงอินพุต อย่างไรก็ตามอาจมีอักขระ ASCII ที่พิมพ์ได้อื่น ๆ เช่นช่องว่างและเครื่องหมายวรรคตอน
  • การป้อนข้อมูลถูกรับประกันว่าจะไม่ประกอบด้วยตัวอักษรตัวใหญ่ที่ไร้ประโยชน์ใด ๆ: ตัวอักษรตัวใหญ่ทั้งหมดเป็นบิตตั้งค่าเป็น1ซึ่งจะต้องถอดรหัสตัวอักษรที่หายไป ทุกอย่างอื่นอยู่ในตัวพิมพ์เล็ก
  • สตริงอินพุตรับประกันว่าถูกต้อง โดยเฉพาะอย่างยิ่ง:
    • มันจะมีกลุ่มเต็ม 5 ตัวอักษรเพียงพอที่จะถอดรหัสขีดล่าง
    • จำนวนเต็มไบนารีเข้ารหัสจะรับประกันว่าจะอยู่ในช่วง[0-25]
  • อาจไม่มี_เลยในสตริงอินพุตซึ่งในกรณีนี้คุณเพียงแค่ส่งคืนอินพุต
  • นี่คือดังนั้นคำตอบที่สั้นที่สุดในจำนวนไบต์ชนะ!

กรณีทดสอบ

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.

กรณีทดสอบพิเศษเพิ่มเติม:

Input : BInar_
Output: binary

Input : 12 MonKey_
Output: 12 monkeys

Input : hyPerbolIZ__
Output: hyperbolized

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

เราควรพิจารณาเพียง 5 กลุ่มเท่าที่มีขีดล่างในอินพุตหรือไม่
ผลไม้ที่แยกแยะ

ในกรณีนั้นกฎเมื่อไม่มี_ในสายป้อนข้อมูลเป็นบิตของกรณีพิเศษ
ปิดผลไม้

1
Ooh รหัสเบคอน!
Deusovi

1
@SztupY เช่นThe input is guaranteed not to contain any useless capital letterในกรณีที่ไม่มีขีดเส้นใต้จะไม่มีตัวพิมพ์ใหญ่
Laikoni

1
@KirillL [32-126]ใช่ในสิ่งที่ ฉันได้เพิ่มอีกกรณีทดสอบ
Arnauld

คำตอบ:


19

05AB1E , 18 ไบต์

รหัส:

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

ใช้การเข้ารหัส05AB1E ลองออนไลน์!

คำอธิบาย:

á                       # 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 ไบต์

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

ลองออนไลน์!

คำอธิบาย:

  • -pFอ่านบรรทัดของการป้อนข้อมูลลงในตัวแปรและแยกออกเป็นตัวอักษรลงในอาร์เรย์$_@F
  • @a=grep!/\W|\d/,@Fชุดอาร์เรย์@aเท่ากับบรรดาสมาชิกของ@Fที่ไม่ได้ตอบสนองความ \W|\dregex \Wเป็นอะไรก็ได้ยกเว้นตัวอักษรตัวเลขและ_; \dเป็นตัวเลข ดังนั้น\W|\dเป็นอะไรก็ได้ยกเว้นตัวอักษรและ_และ@aมีตัวอักษรและ_ตัวอักษรทั้งหมด เราจะลมขึ้นไม่เคยตรวจสอบตัวละครใน_ @a(โปรดทราบว่าสิ่งนี้จะทำงานได้เนื่องจากอินพุตมีการรับประกัน ASCII)
  • map{a gt shift@a&&16/2**$_}0..4ทำสิ่งต่อไปนี้สำหรับ 0 ถึง 4: มันเลื่อนองค์ประกอบถัดไปออกจากการ@aทำให้สั้นลงและประเมินว่าaเป็น asciibetically มากกว่าองค์ประกอบนั้นหรือไม่ (เช่นว่าองค์ประกอบนั้นเป็นตัวพิมพ์ใหญ่หรือไม่) ถ้าเป็นเช่น&&นั้นไม่ได้เป็นไฟฟ้าลัดวงจรดังนั้นเราได้ 16 หารด้วย 2 เพื่อ rhe power ของค่าอินพุต (0 ถึง 4) มิฉะนั้น&&จะลัดวงจรและเราได้รับ 0 mapส่งคืนรายการหมายเลขห้าถึงsumซึ่งเพิ่มเข้าไป
  • นั่นเป็นองค์ประกอบที่เราต้องการจากรายการและนั่นคือสิ่งที่เราได้รับจากa..z(a..z)[…]
  • s!_!…!egแปลงแต่ละตัว_ใน$_ทางกลับกันเป็นตัวอักษรที่เหมาะสม
  • $_=lcแปลง$_เป็นเวอร์ชั่นเล็ก ๆ ของตัวมันเองแล้ว-pพิมพ์ออกมา


5

เยลลี่ ,  28 27  26 ไบต์

-1 ต้องขอบคุณ Erik the Outgolfer & dylnan

ไม่ใช่ความท้าทายที่เป็นมิตรกับเยลลี่!

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

ลิงก์ monadic ยอมรับและส่งคืนรายการอักขระ

ลองออนไลน์!

อย่างไร?

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

เรติน่า , 91 90 ไบต์

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

ลองออนไลน์! คำอธิบาย:

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

แปลอักษรตัวพิมพ์เล็กเป็นaและพิมพ์ใหญ่เป็นAลบสิ่งอื่น ๆ

L`.{5}

แยกAas ออกเป็นกลุ่ม 5

A
aA
+`Aa
aAA

แปลงจากไบนารี่เป็นเอกภาพโดยAถือเป็น 1 และaเป็น 0 เนื่องจากมี 5 วิAaแต่เดิมมี 5 aวินาทีที่เหลือบวกอีกหลายAs ขึ้นอยู่กับตำแหน่งที่ต้องการในตัวอักษร

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

เพิ่มล่าสุดaตามจำนวนต่อไปนี้As

^
$+¶

เตรียมอินพุตต้นฉบับ

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

แทนที่_s ใด ๆด้วยตัวอักษรถอดรหัสถัดไป

0G`

ลบตัวอักษรถอดรหัสใด ๆ ว่าง

T`L`l

พิมพ์เล็กทุกอย่าง

เรติน่า 0.8.2 , 117 ไบต์

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

ลองออนไลน์! คำอธิบาย:

.+
$&¶$&

ทำสำเนาอินพุต

T`L`l`^.*

พิมพ์เล็กสำเนาแรก

T`l`a`.*$

แปลอักษรตัวพิมพ์เล็กaเป็นสำเนาที่สอง

T`L`A

Aแปลเป็นตัวอักษรพิมพ์ใหญ่เพื่อ สิ่งเหล่านี้จะต้องอยู่ในสำเนาที่สองเพราะสำเนาแรกนั้นได้ลดระดับลงแล้ว

T`aAp`aA_`.*$

ลบทุกอย่างอื่นในสำเนาที่สอง

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

แยกสำเนาที่สอง (ตอนนี้แค่Aas) เป็นกลุ่มละ 5

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

ถอดรหัสตัวอักษรและใส่ไว้เหมือนเดิม


5

APL (Dyalog Unicode) , 46 ไบต์SBCS

แลมบ์ดาไม่ประสงค์ออกนามสมมติ⎕IO(ดัชนีแหล่งกำเนิดสินค้า) 0ให้เป็น

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

ลองออนไลน์!

{... ... } ฟังก์ชั่นทั้งสองคำสั่ง; เป็นอาร์กิวเมนต์แยกงบ

 อากิวเมนต์ (ฟังก์ชั่น no-op)
'_'= โดยที่เท่ากับขีดล่าง (เช่นฟังก์ชันการทำแผนที่บูลีน)
_← กำหนดให้ฟังก์ชั่นนั้น_

A[... ]@_⍵ ใส่อักขระต่อไปนี้A ที่ตำแหน่งขีดล่างในการโต้แย้ง
  ⎕A ตัวพิมพ์ใหญ่A lphabet
  A← กำหนดให้A
  819⌶ พิมพ์เล็ก ( 819 ≈ BIgโดยไม่มีอาร์กิวเมนต์ซ้ายหมายถึงไม่ใหญ่เช่นตัวพิมพ์เล็ก) เติม
  A, ตัวอักษรตัวพิมพ์ใหญ่ สิ่งนี้ทำให้เราทุกคนเห็น
  ⍵∩ จุดตัดกันของการโต้เถียงและสิ่งนั้น ตัวอักษรของการโต้เถียง
  A∊⍨ ซึ่งในนั้นเป็นสมาชิกของตัวอักษรตัวพิมพ์ใหญ่; บิตตัวพิมพ์ใหญ่
  (... )5⍴r eshape ว่าจำนวนของแถวต่อไปนี้และห้าคอลัมน์:
   _⍵ รูปแบบของขีดล่างใน
   +/ ผลรวมอาร์กิวเมนต์นั้น จำนวนของขีดล่าง
   ไขว้ (เพื่อปฏิบัติต่อแต่ละแถวเป็นตัวเลขแทนที่จะเป็นตำแหน่งบิต)
  2⊥ ประเมินว่า
819⌶ ทุกอย่างเป็นตัวเบสฐาน 2


5

สกาลา , 189 ไบต์

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

ลองออนไลน์!

คำอธิบาย:

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

เยลลี่ 26 ไบต์

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

ลองออนไลน์!

แนวทางที่แตกต่างจาก Jonathan Allan แก้ไข: ดังนั้นฉันเอ่อเห็นได้ชัดว่าการลดไบต์เดียวกับโจนาธานอัลลันจึงไม่เจ็บที่จะพูดถึงชื่อของเขาอีกครั้ง



3

สะอาด , 180 ... 150 ไบต์

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

ลองออนไลน์!

กำหนดฟังก์ชั่น$ :: [Char] -> [Char]ด้วย@ :: [Char] [Char] -> [Char]เป็นผู้ช่วยในการแทนที่ขีดล่างและ? :: [Char] -> [Char]เป็นผู้ช่วยในการสร้างตัวละครทดแทน


วิธีการที่ไม่i<-:""ทำงานส่วนหนึ่ง? อักขระถูกแปลงเป็นตัวเลขโดยนัยเมื่อรวมหรือเพิ่มเข้าไปหรือไม่
Laikoni

@Laikoni ไม่ไม่มีการแปลงโดยนัย คุณสามารถเพิ่มและลบตัวอักษรได้
Οurous


3

R , 153 135 113 ไบต์

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

ลองออนไลน์!

ออกคำเตือนบางอย่างด้วยการใช้matrixแต่ไม่ควรส่งผลกระทบต่อผลลัพธ์ นอกจากนี้ยังมีการออกคำเตือนเนื่องจากการ[<-มอบหมายจะลบออบเจ็กต์ภายนอกที่ได้รับมอบหมายโดยค่าเริ่มต้น

40 (!) ไบต์ลดลงเนื่องจากการปรับปรุงของ JayCe


ฉันไม่คิดว่าคุณต้องการ,length(L)%/%5
JayCe

ยังไม่จำเป็นต้องกำหนด L?
JayCe

@ JayCe โอเคดีวันนี้ฉันได้เรียนรู้ว่า[<-จะโยนองค์ประกอบต่าง ๆ ออกมาตามความยาวของดัชนี ...
Giuseppe

จริง ๆ แล้วฉัน!
JayCe


3

C (gcc) , 111 109 101 100 ไบต์

แก้ไข:เพิ่มการลดขนาดต่อความคิดเห็นของ @ FrownyFrog; ขอบคุณ Lynn, Christoph และ user5329483 สำหรับคำแนะนำ!

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

ลองออนไลน์!


คุณสามารถบันทึก 2 i+=i+(*s<97)ไบต์ด้วย
Lynn

คุณสามารถยกเลิกjโดยการแนะนำบิตเครื่องหมายในและเขียนใหม่ที่สองสำหรับการเป็นi for(i=1;i<32;s++)และชดเชยส่วนเกิน 32 ที่ด้านนอกสำหรับ ในฐานะเด็กใหม่ที่นี่ฉันนับอะไหล่เจ็ดไบต์
user5329483

พบไบต์อื่น: for(i=3;i<96;s++)นำ 65 1ลงไปเป็นจำนวนหลักเดียวอาคา
user5329483

2

ไป, 219 217 192 210 209 156 ไบต์

บันทึก 25 ไบต์ด้วย@Lynn! บันทึก 53 ไบต์ขอบคุณ@ovs!

ต้องสูญเสีย 18 ไบต์เนื่องจากข้อบกพร่องที่มีสตริงที่ไม่มีขีดล่าง :(

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

ลองออนไลน์!


2

Stax , 22 ไบต์

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

เรียกใช้และแก้ไขข้อบกพร่อง

วิธีการทั่วไปคือการแทนที่การแสดงออกปกติของการ"_"ใช้ฟังก์ชั่นการโทรกลับที่หั่นตัวอักษรของอินพุตเพื่อคำนวณแต่ละตัวละครทดแทน

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

เรียกใช้อันนี้


1

สีแดง 247 ไบต์

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]

ลองออนไลน์!

อ่านเพิ่มเติมได้:

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 ไบต์

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

ลองออนไลน์

คำอธิบาย:

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 ไบต์

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

ลองมัน


คำอธิบาย

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 ไบต์

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

ลองที่นี่

คำอธิบาย

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 ไบต์

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

ลองออนไลน์

กอล์ฟรหัสแรก :)

(ฉันรู้ว่ามันไม่ได้เป็นไบต์ขนาดเล็กฉันแค่สนุกกับการสร้างโค้ด 1 บรรทัด)

นี่คือคำอธิบาย:


อินพุตของผู้ใช้

U = อินพุท ()


ค้นหาดัชนีของ _ แรกในสตริงและเก็บไว้

f = u.find ( '_')


ตัดสตริงของอักขระที่ไม่ใช่ตัวอักษรทั้งหมด

m = ''. เข้าร่วม ([c สำหรับ c ใน u ถ้า c.isalpha ()])


แยกสตริงอัลฟ่าออกเป็นอาร์เรย์พร้อมองค์ประกอบแต่ละตัวประกอบด้วย 5 อักขระ

อดีต ['THeqU', 'ICkbr', 'ownFO', 'xJUMp', 'soVEr', 'thela']

จากนั้นแปลงอักขระตัวพิมพ์เล็กเป็น 0 และอักขระตัวพิมพ์ใหญ่เป็น 1

อดีต ['11001', '11000', '00011', '01110', '00110', '00000']

และแปลงสตริงไบนารีให้เป็นจำนวนเต็มเพิ่ม 65 และแปลงเป็นอักขระ

อดีต ['z', 'y', 'd', 'o', 'g', 'a']

z = [chr (int (''. เข้าร่วม (['0' ถ้า o.islower () อื่น '1' สำหรับ o in l]), 2) +65) สำหรับ l ใน [m [h: h + 5] สำหรับ h ในช่วง (0, len (m), 5)] ถ้า len (l) == 5]


ค้นหาอักขระทั้งหมดหลังจาก _ แรกและส่งไปยังอาร์เรย์ z ที่ตำแหน่งที่เกี่ยวข้อง (ตามที่กำหนดไว้ด้านบน)

อดีต ['z', 'y', '', 'd', 'o', 'g', '.', 'a']

[z.insert (v, d) สำหรับ v, d ในการแจกแจง (u [f:]) ถ้า d! = "_"]


แยกสตริงของเราเป็นรายการของตัวละคร

U = รายการ (U)


แบ่งสตริงของเราจาก _ แรกถึงท้ายรายการและแทนที่ด้วยอาร์เรย์ z ฉันยังต้องแบ่งอาร์เรย์ z กับความยาวของสตริงการแยกจาก _ แรกจนถึงท้ายเพราะฉันมีตัวละครพิเศษในตัวอย่างสุนัขขี้เกียจ ("a" ที่ท้ายตัวอย่างข้างต้น)

ยู [f:] = Z [: len (รายการ (U [F:]))]


* พิมพ์คำตอบ *

พิมพ์ ( ''. เข้าร่วม (U) .lower ())



มีมากกว่าการเล่นกอล์ฟที่ได้รับทุกอย่างในบรรทัดเดียว 165 ไบต์
Jo King

คุณสามารถลบช่องว่างระหว่างo.islower()และelseและฉันคิดและ'1' forนอกจากนี้คุณสามารถเปลี่ยนif d!="_"เป็นif"_"!=dได้ แต่ความคิดเห็นด้านบนทำเช่นนั้นแล้ว
Zacharý


1

PowerShellขนาด 121 ไบต์

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

ลองออนไลน์!

หักกอล์ฟ:

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 ไบต์

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

ลองออนไลน์!


ฉันแก้ไขด้วย 3 ไบต์เพิ่มเติมซึ่งทำให้คำตอบของคุณดีขึ้นเล็กน้อยภายใต้กฎปัจจุบัน
Xcali

ไม่ดีกว่า แต่แตกต่างกัน ตัวเลือกภาษา + แต่ละตัวจะพิจารณาแยกต่างหากไม่ใช่การแข่งขันกับภาษาอื่น + ตัวเลือกอื่น ๆ เนื่องจากฉันเข้าใจ
msh210
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.