Stack Exchange'de kod parçacıklarını geri alma


9

Amacınız, aşağıdakiler gibi rastgele bir metin girmektir:

This is some text

Ve bu metni Stack Exchange'de yayınlar (SE aromalı Markdown) ve yorumlar (mini Markdown) için kod olarak biçimlendirilmiş olarak yazın:

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

Ancak, daha zorlaşıyor. Girişi düşünün:

Perl has a variable called $`

Çıktı

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

Biçimlendirme için tam kurallar şunlardır:

  • Tam mesajlar (tam SE Markdown)

    • Adım 1: Dizede tam olarak ardı ardına o kadar çok olmayan en az sayıyı sayın. Buna diyelim n. (Örneğin, dizi için potato, n1 için this is a backtick: `, n2 ve ` `` ``` ````` ``````, n4'tür)

    • 2.Adım: nDizeyi ters tırnaklara sarın . Dize bir backtick ile başlar veya biterse, boşluklarla da sarmalısınız. (Örneğin, potatoolur `potato`, this is a backtick: `olur `` this is a backtick: ` ``ve ` `` ``` ````` ``````olur ```` ` `` ``` ````` `````` ````.

  • Yorumlar (mini-Markdown)

    • Wrap içinde `ve tüm kaçış `ile 's \`. (Örneğin, potatoolur `potato`, this is a backtick: `olur this is a backtick: \`ve ` `` ``` ````` ``````olur \` \`\` \`\`\` \`\`\`\`\` \`\`\`\`\`\`.

Bu ; bayt sayımındaki en kısa cevap kazanır.


Uzay ne olacak? `` Kod biçimlendirmesi almıyor ...
Justin

@Quincunx Hmm ... yine de koddaki boşlukları nasıl biçimlendirmeniz gerekiyor?
Kapı tokmağı

Hiç bir fikrim yok. Bu yazı, backticks ve benzeri formatları nasıl öğrendiğimi öğrendim.
Justin

2
Yorum formu da işe yaramaz \; biçimlendirmek için \yapmanız gerekir ``\``. Ayrıca, \aynı sorunla biten herhangi bir şey : asdf\`asdf` üretir
Justin

Yanıtlar:


4

APL (90)

(Evet, APL karakter kümesi bir bayta sığar, işte IBM'in kod sayfası 907. )

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

Bu, bir dize alan ve iki dizeden oluşan bir diziyi döndüren bir işlevdir; burada ilk dize yorum temsilidir ve ikinci dize tam yazı temsilidir.

Testler:

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

Not: İşlevlere okunabilirlik uğruna bir isim verdim, bu kesinlikle kullanmak için gerekli değildir (sadece anonim işlevin yanına koyabilirsiniz) bu yüzden saymadım.


2

Yakut, 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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.