To podwójny + nagłówek!

13

Związane z

Ekspozycja

Po wygranej w loterii SO mogłeś być na szczycie świata i byłeś! Loteria trwała już rok, a ty byłeś jednym ze stu programistów, którzy zostali wybrani do wejścia do twierdzy SO. I w końcu czekanie się skończyło. Dzisiaj jest dzień, w którym się udajesz - [kontynuuje zaciemnianie tekstu].

Ups Przepraszam, nie powinienem powiedzieć.

Tak czy inaczej, w końcu przybyłeś, by spotkać mężczyznę o stoickiej twarzy w czarnym garniturze z niewielkim emblematem SO. Marszczy brwi na ciebie. „Pozostali są już w środku”, powiedział, zauważając, że zostałeś zidentyfikowany przy bramie. "Szybko."

Wbiegasz do środka, trochę przestraszony. Co u licha się działo? Co było nie tak w SO? Wewnątrz obserwujesz, jak pozostałych 99 programistów wpatruje się uważnie w ekrany i pisze. Zajmujesz pozostałe miejsce i zostaje wyświetlony następujący komunikat:

Witaj programisto! Wygląda na to, że napotkaliśmy problem; SO zostało przeniknięte, przez kogo nie wiemy. (Osobiście podejrzewam, że był to programista Pyth lub CJam, ale hej.) Jednak wszystko, co ucierpiało, to edytor Markdown. Cóż, właściwie to całkiem sporo, ale tam właśnie przychodzisz.
Chcę, abyś stworzył program (lub funkcję, nie jesteśmy wybredni), który zinterpretuje plik przeceny i przekonwertuje go na naszą nową „SO Beautifier-Arity” -Dekompozytor ”(inaczej„ SOBAD ”). Musisz to zrobić w jak najmniejszej ilości bajtów - pracujemy w trybie awaryjnym, dopóki nie rozwiążemy tego problemu z hakowaniem. Dzięki za poświęcony czas i powodzenia!

Z poważaniem,
twórca przepełnienia stosu


Cel Biorąc pod uwagę poprawny plik przeceny jako dane wejściowe do przesłania, wykonaj i wyślij następujące transformacje na danych wejściowych:

(Kiedy używam tego +symbolu, mam na myśli RegExp „jeden lub więcej wystąpień poprzedniego znaku”, a nie dosłowny znak plus.)

  • Przekształć wszystkie nagłówki poziomu 1 ( # ...lub ...\n=+) w { ... }, ...tworząc WSZYSTKIE CAPS.
  • Przekształć wszystkie nagłówki poziomu 2 ( ## ...lub ...\n-+) w {{ ... }}, z każdym słowem pisanym wielkimi literami
  • Przekształć wszystkie nagłówki poziomu 3 ( ### ...) w małe litery; to znaczy wszystkie litery (bez rozróżniania wielkości liter) są odwzorowywane ᴀʙᴄᴅᴇғɢʜɪᴊᴋʟᴍɴᴏᴘǫʀsᴛᴜᴠᴡxʏᴢw odpowiedni sposób.
  • Przekształć wszystkie pogrubione wystąpienia ( **...**) w ..., ...tworząc WSZYSTKIE CAPS.
  • Przekształć wszystkie wystąpienia kursywy ( _..._) na . . ., gdzie między każdą parą znaków wstawiono spację.
  • Przekształć wszystkie instancje kodu ( `...`) na < ... >.
  • Przekształć wszystkie wystąpienia przekreślenia ( ---...---) w -.-.-.-, gdzie -pomiędzy każdą parą znaków wstawiono znak a.
  • Przekształć wszystkie wystąpienia listy numerowanej ( N. {a}\nN. {b} ...gdzie Npasuje do wyrażenia regularnego [0-9]+) na ( 1. {a}\n 2. {b}...)
  • Przekształć wszystkie nieuporządkowane wystąpienia listy ( * ...\n* ......) w ( o ...\n o ......)

Więcej szczegółów

  • Nagłówki i instancje list znajdują się tylko na początku wierszy, jednak mogą być otoczone przez spację.
  • Nie będzie związany instancji, np *a_*a_nie jest ważna dla naszych standardów, ani też coś podobnego __a__, *_a_*albo _*a*_pojawiają się na wejściu.
  • Nagłówek wielowierszowy jest ważny tylko wtedy, gdy znak -lub =s bezpośrednio następuje po wierszu tekstu.
  • Żaden nagłówek nie będzie zawierał innych elementów obniżki cen. Np. # `code` snippetNie jest prawidłowym danymi wejściowymi dla naszych celów
  • Nie musisz uwzględniać nagłówków poziomu 4+
  • Nie musisz zachowywać nadmiaru spacji (tj. > 1Spacji) w pliku, więc możesz **hello there**być, **hello there**ale nie musisz **hellothere**. Podobnie spacje końcowe i wiodące znalezione w linii nie muszą być zachowywane
  • Na wejściu nie zostaną znalezione żadne tabulatory.
  • NIE BĘDĄ ŻADNE INSTYTUCJE. Na przykład ***...***nigdy by się nie zdarzyło.
  • Spacja zawsze będzie następować po nieuporządkowanym punkcie pocisku (np. * ...Nie *...)
  • Elementy listy w uporządkowanych i nieuporządkowanych listach zawsze będą składały się z jednego wiersza.
  • Niedopasowane pary znaków należy zignorować. Np. ** coolI `java::defpowinien pozostać taki sam.

Metody wprowadzania

Dane wejściowe muszą być następujące:

  1. Tablica / krotka / lista / itp. strun.
  2. LUB ciąg zawierający znaki nowej linii do oddzielnych linii.

Użyj najbliższego odpowiednika Twojego języka dla wyżej wymienionych typów danych, jeśli Twój język ich nie obsługuje. (Np. TI-BASIC nie obsługuje (1.)… nie, że TI-BASIC może konkurować, w każdym razie: P).

Przypadki testowe

A }oznacza wejście, a następny wiersz oznacza wyjście. Wiele }s oznacza oddzielone wiersze tekstu wiersze.

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

Premia

  1. -19 bajtów, jeśli popierasz ucieczkę znaków (aby były traktowane jako „normalne”); możesz wybrać dowolną postać ucieczki, ale sugerowałbym \lub ^. Pamiętaj, że system ucieczki na stronach SO różni się od tego, co sugeruję (i jest bardziej skomplikowany), więc nie rób tego! SO traktuje `\`jak \, ale chciałbym, abyś traktował drugą `jako zwykłą postać, a zamiast tego pasował do następnej ` postaci.
Conor O'Brien
źródło
2
Specyfikacja jest zbyt słaba, aby odpowiedzieć na pytanie w golfa.
feersum
4
Dzięki, downvoters, za powiedzenie mi dokładnie, co robię źle. To naprawdę pomaga mi ulepszyć to pytanie.
Conor O'Brien
4
Myślę, że istnieją przypadki, w których zastosowanie jednej transformacji może zmienić, czy ma zastosowanie inna transformacja. Na przykład ***word***staje się * * w o r d * *po zastosowaniu transformacji kursywą i nagle pogrubiona transformacja nie ma zastosowania. Nie jest jasne, jak sobie z tym poradzić.
Rainbolt
1
@ CᴏɴᴏʀO'Bʀɪᴇɴ W komentarzach odnotowano szereg problemów, które mają pozytywne opinie. Nie sądzę, że zwolennicy celowo zaniedbują udzielanie informacji zwrotnej; prawdopodobnie tylko oceniają istniejące opinie.
Alex A.,
1
@AlexA. Kiedy wystąpiły oba opinie negatywne, komentarze nie istniały ani przez pewien okres później.
Conor O'Brien

Odpowiedzi:

1

Python 3 , 652 640 bajtów

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

Wypróbuj online!

TFeld
źródło