Backtickify фрагменти коду на Stack Exchange


9

Ваша мета - ввести будь-який довільний текст, наприклад:

This is some text

І виведіть цей текст, відформатований як код для публікацій (Marked з ароматом SE) та коментарів (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 $\``

Повні правила форматування:

  • Повні повідомлення (повна відмітка SE)

    • Крок 1: підрахуйте найменше число, для якого в рядку не так багато послідовних зворотних посилань. Давайте назвемо це n. (Наприклад, для рядка potato, nдорівнює 1, для this is a backtick: `, nдорівнює 2, і ` `` ``` ````` ``````, nтак само 4.)

    • Крок 2: оберніть рядок у nзадній план. Якщо рядок починається або закінчується зворотним відбитком, ви також повинні обернути пробіли. (Наприклад, potatoстає `potato`, this is a backtick: `стає `` this is a backtick: ` ``і ` `` ``` ````` ``````стає ```` ` `` ``` ````` `````` ````.

  • Коментарі (міні-відмітка)

    • Wrap в `і уникнути всіх `«S з \`. (Наприклад, potatoстає `potato`, this is a backtick: `стає this is a backtick: \`і ` `` ``` ````` ``````стає \` \`\` \`\`\` \`\`\`\`\` \`\`\`\`\`\`.

Це є ; виграє найкоротша відповідь у підрахунку байтів.


Що з космосом? `` не отримує форматування коду ...
Джастін

@Quincunx Хм ... як ти маєш взагалі форматувати пробіли в коді?
Дверна ручка

Я поняття не маю. У цій публікації я дізнався, як форматувати задні посилання і таке інше.
Джастін

2
Форма коментарів також не працює \; щоб відформатувати а \, потрібно зробити ``\``. Крім того, все, що закінчується наріканням \на цю ж проблему: asdf\створює `asdf '
Джастін

Відповіді:


4

APL (90)

(Так, кодування APL цілком вкладається в байт, ось кодова сторінка 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

Безголівки:

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.