Backtickify ตัวอย่างรหัสในการแลกเปลี่ยนสแต็ค


9

เป้าหมายของคุณคือการป้อนข้อความโดยพลการใด ๆ เช่น:

This is some text

และเอาท์พุทข้อความที่จัดรูปแบบเป็นรหัสสำหรับการโพสต์ (SE-flavored Markdown) และความคิดเห็น (mini-Markdown) บน Stack Exchange เช่น:

`This is some text`
`This is some text`

อย่างไรก็ตามมันยากขึ้น พิจารณาอินพุต:

Perl has a variable called $`

ผลลัพธ์จะต้องเป็น

`` Perl has a variable called $` ``
`Perl has a varaible called $\``

กฎเต็มรูปแบบสำหรับการจัดรูปแบบคือ:

  • โพสต์แบบเต็ม (Markdown เต็ม SE)

    • ขั้นตอนที่ 1: นับจำนวนที่น้อยที่สุดที่มี backticks ต่อเนื่องหลายตัวในสตริง เรียกสิ่งนี้nว่า (ตัวอย่างเช่นสำหรับสตริงpotato, nคือ 1, สำหรับthis is a backtick: `, n2, และ` `` ``` ````` ``````, nเป็น 4)

    • ขั้นตอนที่ 2: ตัดสตริงในnbackticks หากสตริงเริ่มต้นหรือลงท้ายด้วย backtick คุณต้องล้อมด้วยช่องว่างเช่นกัน (ตัวอย่างเช่นpotatoกลายเป็น`potato`, this is a backtick: `กลายเป็น`` this is a backtick: ` ``และจะกลายเป็น` `` ``` ````` `````````` ` `` ``` ````` `````` ````

  • ความคิดเห็น (mini-Markdown)

    • ห่อใน`และหลบหนีทั้งหมด`'s \`พร้อมด้วย (ตัวอย่างเช่นpotatoกลายเป็น`potato`, this is a backtick: `กลายเป็นthis is a backtick: \`และจะกลายเป็น` `` ``` ````` ``````\` \`\` \`\`\` \`\`\`\`\` \`\`\`\`\`\`

นี่คือ ; คำตอบที่สั้นที่สุดในการนับไบต์ชนะ


แล้วอวกาศล่ะ `` ไม่ได้รับรหัสการจัดรูปแบบ ...
จัสติน

@Quincunx อืม ... คุณควรจะฟอร์แมตช่องว่างในโค้ดอย่างไร
Doorknob

ฉันไม่รู้. โพสต์นี้เป็นที่ที่ฉันได้เรียนรู้วิธีการจัดรูปแบบ backticks และเช่นนั้น
Justin

2
แบบฟอร์มแสดงความคิดเห็นยังไม่ทำงานสำหรับ\; เป็นรูปแบบที่คุณต้องทำ\ ``\``นอกจากนี้ทุกสิ่งที่ลงท้ายด้วยการ\วิ่งเข้าไปในปัญหาเดียวกัน: asdf\สร้าง `asdf '
Justin

คำตอบ:


4

APL (90)

(ใช่ APL charset มีขนาดพอดีกับไบต์นี่เป็นโค้ดเพจของ IBM 907 )

{⎕ML←3⋄(,/m,m,⍨{⍵=m:'\`'⋄⍵}¨⍵),⊂(⌽g),⍵,g←(''↑⍨∨/t[1,⍴t]),m/⍨0⍳⍨z∊⍨⍳⌈/0,z←,⊃⍴¨⍵⊂⍨t←⍵=m←'`'}

นี่คือฟังก์ชันที่รับสตริงและส่งกลับอาร์เรย์ของสองสตริงโดยที่สตริงแรกคือการแสดงความคิดเห็นและสตริงที่สองคือการแทนการโพสต์แบบเต็ม

แบบทดสอบ:

      backtickify←{⎕ML←3⋄(,/m,m,⍨{⍵=m:'\`'⋄⍵}¨⍵),⊂(⌽g),⍵,g←(''↑⍨∨/t[1,⍴t]),m/⍨0⍳⍨z∊⍨⍳⌈/0,z←,⊃⍴¨⍵⊂⍨t←⍵=m←'`'}
      ↑backtickify 'potato'
`potato`
`potato`

      ↑backtickify 'this is a backtick: `'
`this is a backtick: \``   
`` this is a backtick: ` ``

      ↑backtickify '` `` ``` ````` ``````'
`\` \`\` \`\`\` \`\`\`\`\` \`\`\`\`\`\``
```` ` `` ``` ````` `````` ````  

      ⍝ testcase for not wrapping with spaces
      ↑backtickify 'no`spaces``at````the`edges'
`no\`spaces\`\`at\`\`\`\`the\`edges`
```no`spaces``at````the`edges``` 

หมายเหตุ: ฉันตั้งชื่อฟังก์ชั่นเพื่อประโยชน์ในการอ่านซึ่งไม่จำเป็นต้องใช้อย่างเคร่งครัด (คุณสามารถใส่อาร์กิวเมนต์ถัดจากฟังก์ชันที่ไม่ระบุชื่อ) ดังนั้นฉันจึงไม่ได้นับ


2

ทับทิม, 119

s=gets.chop
c=1
c+=1while s=~/([^`]|\A)#{?`*c}([^`]|\z)/
puts ?`+s.gsub('`','\\\\`')+'`
'+?`*c+(s=~/$`|`^/?" #{s} ":s)+?`*c

Ungolfed:

def backtickify str, comment = false
  return "`#{str.gsub '`', '\\\\`'}`" if comment
  c = 1
  c += 1 while str =~ /([^`]|\A)#{?` * c}([^`]|\z)/
  str = ' ' + str + ' ' if str[0] == ?` || str[-1] == ?`
  return ?` * c + str + ?` * c
end
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.