เลขศูนย์ทุน


15

งานของคุณคือการถอดรหัสสตริงไม่ว่างเปล่าประกอบด้วยตัวอักขระ ASCII ในช่วง[32..126]

การอ่านอักขระสตริงต่ออักขระ:

  • ทุกครั้งที่คุณพบจดหมายเป็นตัวพิมพ์เล็กให้เชื่อมโยงกับตัวอักษรถัดไปเป็นตัวพิมพ์ใหญ่เริ่มต้นด้วย'A'
  • ทุกครั้งที่คุณพบจดหมายเป็นตัวพิมพ์ใหญ่ให้แทนที่ด้วยตัวอักษรพิมพ์เล็กที่เกี่ยวข้อง
  • อักขระอื่นไม่ต้องการการประมวลผลพิเศษใด ๆ และจะไม่มีการเปลี่ยนแปลง

ตัวอย่าง

สำหรับสตริงอินพุต"endlAsEBAEE":

  • รองeไปA, nไปB, dไปCและlจะD
  • แทนที่Aด้วยe
  • เชื่อมโยงsกับE
  • แทนที่EBAEEด้วยsness

"endlessness"ผลลัพธ์สุดท้ายคือ

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

  • สตริงอินพุตรับประกันว่าจะมีตัวอักษรพิมพ์เล็กแต่ละตัวมากที่สุดหนึ่งครั้ง อินสแตนซ์เพิ่มเติมทั้งหมดจะถูกแทนที่ด้วยอักษรตัวใหญ่ที่เกี่ยวข้อง
  • สตริงอินพุตรับประกันว่าถูกต้อง (คุณจะไม่พบอักษรตัวพิมพ์ใหญ่ที่ยังไม่เกี่ยวข้องกับอักษรตัวพิมพ์เล็ก)
  • เมื่อตัวอักษรตัวใหญ่มีความเกี่ยวข้องกับตัวอักษรตัวเล็กมันอาจหรือไม่สามารถใช้ในภายหลังในสตริง ตัวอย่างเช่นCและDไม่ได้ใช้ในตัวอย่างด้านบน
  • นี่คือดังนั้นคำตอบที่สั้นที่สุดในจำนวนไบต์ชนะ!

กรณีทดสอบ

ปัจจัยการผลิต:

abcd
honk! ABCD!
abrAcAdABCA
endlAsEBAEE
helCo wDrCd!
dermatoglyphics
progBamFinD AuzJles & cCdL DCKf
sphinx of black quKrtz, jOdge my vGw. K NODLM IPGZE HGF SOWBA GYVP QCV JKRX TGU.
petBr AiABD AEckBd a ABFG of AEFGlBH ABAABDs. hJw mIny AEFGLBH ABAABDM HEH ABCBD AEABD AEFG?

คำตอบ:

abcd
honk! honk!
abracadabra
endlessness
hello world!
dermatoglyphics
programming puzzles & code golf
sphinx of black quartz, judge my vow. a quick brown fox jumps over the lazy dog.
peter piper picked a peck of pickled peppers. how many pickled peppers did peter piper pick?

1
ฉันคิดว่าสิ่งที่ตรงกันข้ามของงานนี้ - การเข้ารหัสสตริงตัวพิมพ์เล็ก + เครื่องหมายวรรคตอน - จะทำให้เกิดความท้าทายที่น่าสนใจ
Chas Brown

คำตอบ:




3

JavaScript (ES6), 62 ไบต์

s=>s.replace(/[A-Z]/g,c=>s.match(/[a-z]/g)[parseInt(c,36)-10])

อักษรตัวใหญ่แต่ละตัวจะถูกแปลงเป็นฐาน 36 ค่าน้อยกว่า 10

จากนั้นเราจับคู่กับตัวอักษรพิมพ์เล็กที่อยู่ในดัชนีนั้น


2

Pyth, 36 ไบต์

JKr1GVQI&}NG!}NH=XHNhK=tK)p?}NJ@_HNN

ลองที่นี่

คำอธิบาย

JKr1GVQI&}NG!}NH=XHNhK=tK)p?}NJ@_HNN
JKr1G                                  Let J and K be the uppercase alphabet.
     VQ                                For each character in the input...
       I&}NG!}NH         )             ... if the character is lowercase and not
                                       yet in H, ...
                =XHNhK                 ... add the letter and the next uppercase
                                       letter to H...
                      =tK              ... and move to the next uppercase letter.
                          p?}NJ@_HNN   Print either the next character or the
                                       letter it represents.


2

R , 79 ไบต์

function(x){s=utf8ToInt(x)
s[j]=s[s>96&s<123][s[j<-s>64&s<91]-64]
intToUtf8(s)}

ลองออนไลน์!


ดีมาก ! คุณสามารถบันทึกได้สองสามไบต์โดยใช้scan(,"" มันเป็นโปรแกรมเต็มรูปแบบแทนที่จะใช้ฟังก์ชั่นนอกจากนี้ฉันกำลังพยายามหาทางปรับปรุงให้ดีขึ้น ...
JayCe


2

Z80Golfขนาด 37 ไบต์

00000000: 2505 cd03 8030 0176 fe7b 300c fe61 3011  %....0.v.{0..a0.
00000010: fe5b 3004 fe41 3003 ff18 e7d6 414f 0a18  .[0..A0.....AO..
00000020: f777 2318 f3                             .w#..

ลองออนไลน์!

z80 ทำได้ดีมากในเรื่องนี้! นี่คือการถอดชิ้นส่วน:

  dec h         ; HL = cipher write pointer
  dec b         ; BC = cipher read pointer
                ; meaning of 'A'..'Z' is written to $ff00~$ff19
next:
  call $8003    ; getchar
  jr nc, ok     ; not EOF?
  halt
ok:
  cp '{'
  jr nc, other  ; a ≥ '{'
  cp 'a'
  jr nc, lower  ; 'a' ≤ a ≤ 'z'
  cp '['
  jr nc, other  ; '[' ≤ a ≤ '`'
  cp 'A'
  jr nc, upper  ; 'A' ≤ a ≤ 'Z'
other:
  rst $38
  jr next
upper:
  sub 'A'
  ld c, a
  ld a, (bc)
  jr other
lower:
  ld (hl), a
  inc hl
  jr other

เราชี้ให้เห็นว่าทั้ง HL และ BC อยู่ใน$ff00ช่วงด้วยdecและใช้rst $38เป็นทางเลือกสั้น ๆcall $8000แต่ไม่อย่างนั้นก็ยังมีกลอุบายไม่มากนัก


1

เรติน่า 25 ไบต์

~["T`L`"|""L$`[a-z]
$&-$&

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

[a-z]

ตรงกับตัวอักษรตัวพิมพ์เล็ก

$`
$&-$&

แทนที่ตัวอักษรแต่ละตัวด้วยช่วงของตัวเองที่เสื่อมโทรม (สิ่งนี้จะป้องกันการทับศัพท์ในภายหลังไม่ให้ถือว่าเป็นคลาสของตัวอักษรไม่สามารถใช้แบ็กสแลชได้เนื่องจากตัวอักษรตัวพิมพ์เล็กบางตัวมีความหมายพิเศษหลังจากแบ็กสแลช)

["T`L`"|""L

รายชื่อช่วงเลว T`L`แต่ไม่มีเส้นแบ่งบรรทัดและมีก่อนหน้านี้

~

ประเมินโปรแกรมการถอดเสียงที่เกิดขึ้นกับอินพุตต้นฉบับ






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