Это двойной + заголовок!


13

Связанный

экспозиция

После выигрыша ТАКОЙ лотереи вы могли бы быть на вершине мира, и вы были! Розыгрыш длился уже год, и вы были одним из ста программистов, которые были выбраны для вступления в SO оплот. И наконец, ожидание окончено. Сегодня день, когда вы идете - [обфусцированный текст продолжается].

Упс. Извините, не должен рассказывать.

Как бы то ни было, вы, наконец, прибыли, чтобы встретить человека с черным лицом в черном костюме с крошечной SO-эмблемой на нем. Он хмурится на тебя. «Остальные уже внутри», - сказал он, отметив, что вас опознали у ворот. "Быстро."

Ты врываешься внутрь, немного напуган. Что на земле произошло? Что было не так в SO? Внутри вы видите, как остальные 99 программистов пристально смотрят на свои экраны, печатая. Вы занимаете оставшееся место и получаете следующее сообщение:

Привет, программист! Кажется, что мы столкнулись с проблемой; Так проник, кем мы не знаем. (Лично я подозреваю, что это был программист Pyth или CJam, но эй.) Однако, все, что пострадало, это редактор Markdown. Ну, на самом деле, это довольно много, но это то, где вы входите.
Я хочу, чтобы вы создали программу (или функцию, мы не требовательны), которая будет интерпретировать файл уценки и преобразовать его в наш новый "SO Beautifier-Arity" -Decomposer "(он же" SOBAD ") формат. Вы должны сделать это в кратчайшем количестве байтов - мы работаем на пониженном уровне, пока не решим эту проблему взлома. Спасибо за ваше время и удачи!

С уважением,
Создатель переполнения стека


Задача При наличии действительного файла уценки в качестве входных данных для вашего представления выполните и выведите на вход следующие преобразования:

(Когда я использую +символ, я имею в виду RegExp «один или несколько экземпляров предыдущего символа», а не буквальный знак плюс.)

  • Преобразуйте все заголовки уровня 1 ( # ...или ...\n=+) в { ... }, ...став ВСЕМ ЗАГЛУШКАМИ.
  • Преобразовать все заголовки уровня 2 ( ## ...или ...\n-+) в {{ ... }}каждое слово с заглавной буквы
  • Преобразуйте все заголовки уровня 3 ( ### ...) в маленькие заглавные буквы; то есть все буквы (без учета регистра) отображаются ᴀʙᴄᴅᴇғɢʜɪᴊᴋʟᴍɴᴏᴘǫʀsᴛᴜᴠᴡxʏᴢсоответствующим образом.
  • Преобразуйте все полужирные экземпляры ( **...**) в ..., ...став ВСЕМ КАПСОМ
  • Преобразуйте все экземпляры курсив ( _..._) в . . ., где пробел был вставлен между каждой парой символов.
  • Преобразуйте все экземпляры кода ( `...`) в < ... >.
  • Преобразуйте все зачеркнутые экземпляры ( ---...---) туда -.-.-.-, где -между каждой парой символов был вставлен символ a .
  • Преобразуйте все экземпляры нумерованного списка ( N. {a}\nN. {b} ...где Nсоответствует регулярному выражению [0-9]+) в ( 1. {a}\n 2. {b}...)
  • Преобразовать все неупорядоченные экземпляры списка ( * ...\n* ......) в ( o ...\n o ......)

Подробнее

  • Заголовки и экземпляры списка будут найдены только в начале строк, однако они могут быть окружены пробелами.
  • Там будет не связаны экземпляры, например, *a_*a_не является допустимым для наших стандартов, и не будет ничего подобного __a__, *_a_*или _*a*_появляются во входе.
  • Многострочный заголовок действителен, если и только если -или =s непосредственно следует за строкой текста.
  • Заголовки не будут содержать другие объекты уценки. Например, # `code` snippetнедопустимый вход для наших целей
  • Вы не должны учитывать заголовки уровня 4+
  • Вам не нужно , чтобы сохранить лишние пробелы (т.е. > 1пробелы) внутри файла, так что это нормально , чтобы **hello there**стать , **hello there**но не **hellothere**. Точно так же не нужно сохранять конечные и ведущие пробелы, найденные в строке.
  • Табуляторы не будут найдены на входе.
  • НЕ БУДЕТ НЕ ВСТРОЕННЫХ МГНОВЕНИЙ. Например, ***...***никогда бы не произошло.
  • Пробел всегда будет следовать за неупорядоченной точкой маркера (например, * ...нет *...)
  • Элементы списка в упорядоченных и неупорядоченных списках всегда будут состоять из одной строки.
  • Несовпадающие пары символов следует игнорировать. Например, ** coolи `java::defдолжен остаться прежним.

Методы ввода

Ввод должен быть одним из следующих:

  1. Массив / кортеж / список / и т. Д. струн.
  2. ИЛИ строка, содержащая новые строки для разделения строк.

Используйте ваш язык, наиболее близкий к вышеупомянутым типам данных, если ваш язык их не поддерживает. (Например, TI-BASIC не поддерживает (1.)… не то чтобы TI-BASIC мог конкурировать, во всяком случае: P).

Контрольные примеры

A }обозначает ввод, а следующая строка обозначает вывод. Несколько }s означают разделенные строкой строки текста.

} Hello!
Hello!

} That _2 + 2 = 5_ challenge sure was **intense!**
That  2  +  2  =  5  challenge sure was INTENSE!
    // note that there are spaces also padding it

} It's `s/a/e/g` **not** `sudo g/a/e/s`, stupid.
It's < s/a/e/g > NOT < sudo g/a/e/s >

} **WHAT!** He did _WHAT?!_
WHAT! He did W H A T ? !

} _WHAT_ is undefined, here!
 W H A T  is undefined, here!

} OI)(EJDSFIJK L:JP #@*REF&WDS F*(D+S +&(SDFWEF )DSF _DSF_F #R#
OI)(EJDSFIJK L:JP #@*REF&WDS F*(D+S +&(SDFWEF )DSF  D S F F #R#

} # So, you wanna be a programmer, eh?
} ## Step 1: learn recursion
} ### Learning recursion requires learning recursion
} **Programming** is a futile task. _Leave w h i l e you still can!_
{SO YOU WANNA BE A PROGRAMMER, EH?}
{{Step 1: Learn Recursion}}
ʟᴇᴀʀɴɪɴɢ ʀᴇᴄᴜʀsɪᴏɴ ʀᴇǫᴜɪʀᴇs ʟᴇᴀʀɴɪɴɢ ʀᴇᴄᴜʀsɪᴏɴ
PROGRAMMING is a futile task.  L e a v e   w   h   i   l   e   y o u   s t i l l   c a n !  // trailing space not required

} Haha, you're a _Java_ golfer? You'd be better of with brainf***.
Haha, you're a  J a v a  golfer? You'd be better of with brainf***. // less than four asterisks, do nothing

} # Reasons why NOT to use C--:
} 1. It doesn't exist.
} 2. I don't care.
{REASONS WHY NOT TO USE C--:}
 1. It doesn't exist.
 2. I don't care.

} 1. This is a test!
} 1. <-- And this actually works in Markdown.
 1. This is a test!
 2. <-- And this actually works in Markdown. // less than three -s, ignore

} * no.
} * NOOO.
} * fine.
 o no.
 o NOOO.
 o fine.

} Python, ---34--- 3 bytes.
Python, -3-4- 3 bytes.

} ---Long line of crossed text.---
-L-o-n-g- -l-i-n-e- -o-f- -c-r-o-s-s-e-d- -t-e-x-t-.-

} ** cool!
** cool! // is not a bullet point, because a space doesn't follow the *; Isn't bold, because there is no matching **

 -- end of test cases --

бонус

  1. -19 байт, если вы поддерживаете экранирование символов (чтобы они рассматривались как «нормальные»); Вы можете выбрать любой побег, но я бы предложил \или ^. Обратите внимание, что экранирующая система на SO-сайтах отличается от того, что я предлагаю (и более сложна), поэтому не делайте этого! SO будет восприниматься `\`как \, но я бы хотел, чтобы вы относились ко второму `как к обычному символу и вместо этого соответствовали следующему ` .

2
Спецификация слишком слабая для вопроса о гольфе.
feersum

4
Спасибо, downvoters, для того, чтобы сказать мне точно, что я делаю неправильно. Это действительно помогает мне сделать этот вопрос лучше.
Конор О'Брайен,

4
Я думаю, что есть случаи, когда применение одного преобразования может изменить применение другого преобразования. Например, ***word***становится * * w o r d * *после того, как вы примените преобразование курсивом, и внезапно жирное преобразование не применяется. Непонятно, как с этим справиться.
Rainbolt

1
@ CᴏɴᴏʀO'Bʀɪᴇɴ В комментариях отмечен ряд проблем, которые имеют отрицательные отзывы. Я не думаю, что downvoters преднамеренно пренебрегают, чтобы обеспечить обратную связь; они, вероятно, просто опровергают существующую обратную связь.
Алекс А.

1
@AlexA. Когда произошли оба отрицательных отзыва, комментариев не было, ни в течение определенного периода времени.
Конор О'Брайен,

Ответы:


1

Python 3 , 652 640 байт

import re
def N(o):c,t,_=o.groups();x=' -'[c<'_'];return['< %s >'%t,t.upper()][c<'`']if c in'**`'else x+x.join(t)+x
def f(s):
 S=[];i=0
 while s:
  l=s.pop(0);n=set(*s[:1])
  if n<={*'=-'}and n:s=s[1:];l='#'*('-'in n)+'# '+l
  if'# '==l[:2]:l='{%s}'%l[2:].upper()
  if'## '==l[:3]:l='{{%s}}'%l[3:].title()
  if'### '==l[:4]:l=''.join('ᴀʙᴄᴅᴇғɢʜɪᴊᴋʟᴍɴᴏᴘǫʀsᴛᴜᴠᴡxʏᴢ'[ord(c)-65]if'@'<c<'['else c for c in l[4:].upper())
  l=re.sub(('(\*\*|_|---|`)(.*?)'*2)[:-5],N,re.sub(r'^\s*[*] (.*)',r' o \1',l))
  if re.match(r'\s*\d+\. ',l):i+=1;l=re.sub(r'\s*\d+\.(.*)',' %d.'%i+r'\1',l)
  else:i=0
  S+=[l]
 return S

Попробуйте онлайн!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.