Exposição
Depois de ganhar o sorteio de SO, você poderia estar no topo do mundo e estava! O sorteio já vinha ocorrendo há um ano, e você era um dos cem programadores que foram selecionados para entrar no reduto da SO. E, finalmente, a espera acabou. Hoje é o dia em que você vai - [o texto ofuscado continua].
Ops. Desculpe, não deveria contar.
De qualquer forma, você finalmente chegou para encontrar um homem de rosto estóico em um terno preto com o minúsculo emblema SO. Ele franze a testa para você. "Os outros já estão lá dentro", disse ele, observando que você foi identificado no portão. "Rapidamente."
Você corre para dentro, um pouco assustada. O que diabos aconteceu? O que havia de errado na SO? Lá dentro, você observa que os outros 99 programadores estão olhando fixamente para suas telas, digitando. Você ocupa o assento restante e é recebido com a seguinte mensagem:
Olá programador! Parece que encontramos um problema; O SO foi penetrado por quem não conhecemos. (Pessoalmente, suspeito que tenha sido um programador Pyth ou CJam, mas ei.) No entanto, tudo o que foi prejudicado é o editor do Markdown. Bem, na verdade, é bastante, mas é aí que você entra.
Quero que você crie um programa (ou função, não somos exigentes) que interprete um arquivo de descontos e o converta no nosso novo "SO Beautifier-Arity -Decompositor "(também conhecido como" SOBAD "). Você deve fazer isso com a menor quantidade de bytes - estamos executando o downdown até resolvermos esse problema de hackers. Obrigado pelo seu tempo e boa sorte!
Atenciosamente,
The Maker of Stack Overflow
Objetivo Dado um arquivo de remarcação válido como entrada para o seu envio, execute e produza as seguintes transformações na entrada:
(Quando uso o +
símbolo, quero dizer o operador "uma ou mais instâncias do caractere anterior" do RegExp, não um sinal de adição literal.)
- Transforme todos os cabeçalhos de nível 1 (
# ...
ou...\n=+
) em{ ... }
,...
tornando - se TODOS OS CAPS. - Transforme todos os cabeçalhos de Nível 2 (
## ...
ou...\n-+
) em{{ ... }}
, com cada palavra em maiúscula - Transforme todos os cabeçalhos de nível 3 (
### ...
) em letras minúsculas; isto é, todas as letras (sem distinção entre maiúsculas e minúsculas) são mapeadas deᴀʙᴄᴅᴇғɢʜɪᴊᴋʟᴍɴᴏᴘǫʀsᴛᴜᴠᴡxʏᴢ
uma maneira respectiva. - Transforme todas as ocorrências em negrito (
**...**
) em...
,...
tornando - se ALL CAPS. - Transforme todas as ocorrências em itálico (
_..._
) em. . .
, onde um espaço foi inserido entre cada par de caracteres. - Transforme todas as instâncias de código (
`...`
) em< ... >
. - Transforme todas as instâncias rasuradas (
---...---
) em-.-.-.-
, onde a-
foi inserida entre cada par de caracteres. - Transforme todas as instâncias da lista numerada (
N. {a}\nN. {b} ...
ondeN
corresponde à regex[0-9]+
) para (1. {a}\n 2. {b}...
) - Transforme todas as instâncias de lista não ordenadas (
* ...\n* ...
...) em (o ...\n o ...
...)
Mais detalhes
- Os cabeçalhos e as instâncias da lista serão encontrados apenas no início das linhas; no entanto, eles podem ser cercados por uma quantidade de espaço em branco.
- Haverá casos não ligados, por exemplo,
*a_*a_
não é válido para os nossos padrões, nem nada parecido__a__
,*_a_*
ou_*a*_
aparecer em uma entrada. - Um cabeçalho de múltiplas linhas é válido se e somente se o
-
ou=
s seguir diretamente uma linha de texto. - Nenhum cabeçalho conterá outras entidades de remarcação. Por exemplo,
# `code` snippet
não é uma entrada válida para nossos propósitos - Você não precisa contabilizar os cabeçalhos de nível 4+
- Você não precisa preservar espaços em excesso (ou seja,
> 1
espaços) dentro do arquivo; portanto, não há problema em se**hello there**
tornar,**hello there**
mas não é**hellothere**
. Da mesma forma, os espaços à direita e à esquerda encontrados em uma linha não precisam ser preservados - Nenhum tabulador será encontrado na entrada.
- NÃO EXISTEM INSTANTES NESTED. Por exemplo,
***...***
nunca ocorreria. - Um espaço sempre seguirá um marcador não ordenado (por exemplo,
* ...
não*...
) - Os itens da lista em listas ordenadas e não ordenadas sempre consistem em uma única linha.
- Pares de caracteres incomparáveis devem ser ignorados. Por exemplo,
** cool
e`java::def
deve permanecer o mesmo.
Métodos de entrada
A entrada deve ser uma das seguintes:
- Uma matriz / tupla / lista / etc. de cordas.
- OU uma sequência contendo novas linhas para separar linhas.
Use o equivalente mais próximo do seu idioma aos tipos de dados mencionados acima, se o seu idioma não os suportar. (Por exemplo, o TI-BASIC não suporta (1.) ... não que o TI-BASIC possa competir, de qualquer forma: P).
Casos de teste
A }
significa entrada e a próxima linha significa saída. }
S múltiplos significam linhas de texto separadas por nova linha.
} 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 --
Bônus
- -19 bytes, se você suportar o escape de caracteres (para que sejam tratados como "normais"); você pode escolher qualquer caractere de escape, mas eu sugiro
\
ou^
. Observe que o sistema de escape nos sites SO é diferente do que estou sugerindo (e mais complicado), portanto, não faça isso! SO trataria`\`
como\
, mas eu gostaria que você tratasse o segundo`
como um caractere comum e, em vez disso, correspondesse ao próximo`
caractere.
***word***
torna-se* * w o r d * *
depois de aplicar a transformação em itálico e, de repente, a transformação em negrito não se aplica. Não está claro como lidar com isso.Respostas:
Python 3 ,
652640 bytesExperimente online!
fonte