Esposizione
Dopo aver vinto la lotteria SO, avresti potuto essere in cima al mondo, e lo eri! La lotteria durava da un anno ormai, e tu eri uno dei cento programmatori che erano stati selezionati per entrare nella roccaforte SO. E infine, l'attesa è finita. Oggi è il giorno in cui vai - [procede il testo offuscato].
Ops. Scusa, non dovrei dirlo.
Ad ogni modo, sei finalmente arrivato per incontrare un uomo dalla faccia stoica in un abito nero con sopra il piccolo emblema SO. Ti aggrotta la fronte. "Gli altri sono già dentro", disse, notando che eri stato identificato al cancello. "Velocemente."
Ti precipiti dentro, un po 'spaventato. Cosa diavolo era successo? Cosa c'era di sbagliato in SO? All'interno, osservi gli altri 99 programmatori che fissano intensamente i loro schermi, digitando. Prendi il posto rimanente e sei accolto con il seguente messaggio:
Ciao programmatore! Sembra che abbiamo riscontrato un problema; SO è stato penetrato, da cui non sappiamo. (Personalmente, sospetto che fosse un programmatore Pyth o CJam, ma ehi.) Tuttavia, tutto ciò che è stato danneggiato è l'editor Markdown. Bene, in realtà, è abbastanza, ma è lì che entri.
Voglio che tu crei un programma (o una funzione, non siamo schizzinosi) che interpreterà un file markdown e lo convertirà nel nostro nuovo "SO Beautifier-Arity -Decomposer "(aka" SOBAD ") formato. Devi farlo nel minor numero di byte: stiamo eseguendo il downdown fino a quando non risolviamo questo problema di hacking. Grazie per il tuo tempo e buona fortuna!
Cordiali saluti,
The Maker of Stack Overflow
Obiettivo Dato un file markdown valido come input per l'invio, eseguire e produrre le seguenti trasformazioni sull'input:
(Quando uso il +simbolo, intendo l'operatore RegExp "una o più istanze di carattere precedente", non un segno più letterale.)
- Trasforma tutte le intestazioni di livello 1 (
# ...o...\n=+) in{ ... },...diventando TUTTI MAIUSCOLI. - Trasforma tutte le intestazioni di livello 2 (
## ...o...\n-+) in{{ ... }}, con ogni parola in maiuscolo - Trasforma tutte le intestazioni di livello 3 (
### ...) in maiuscoletto; in altre parole, tutte le lettere (senza distinzione tra maiuscole e minuscole) vengono mappateᴀʙᴄᴅᴇғɢʜɪᴊᴋʟᴍɴᴏᴘǫʀsᴛᴜᴠᴡxʏᴢin modo rispettivo. - Trasforma tutte le istanze in grassetto (
**...**) in...,...diventando TUTTO MAIUSCOLO. - Trasforma tutte le istanze in corsivo (
_..._) in. . ., dove è stato inserito uno spazio tra ogni coppia di caratteri. - Trasforma tutte le istanze di codice (
`...`) in< ... >. - Trasforma tutte le istanze barrate (
---...---) in-.-.-.-, dove-è stata inserita una tra ogni coppia di caratteri. - Trasforma tutte le istanze dell'elenco numerato (
N. {a}\nN. {b} ...doveNcorrisponde alla regex[0-9]+) in (1. {a}\n 2. {b}...) - Trasforma tutte le istanze di elenco non ordinate (
* ...\n* ......) in (o ...\n o ......)
Più dettagli
- Le intestazioni e le istanze di elenco si trovano solo all'inizio delle righe, tuttavia, possono essere circondate da una quantità di spazi bianchi.
- Non ci sarà nessun essere collegati casi, ad esempio,
*a_*a_non è valida per i nostri standard, né qualcosa piacerà__a__,*_a_*o_*a*_appaiono in un ingresso. - Un'intestazione multilinea è valida se e solo se
-o=o segue direttamente una riga di testo. - Nessuna intestazione conterrà altre entità markdown. Ad esempio,
# `code` snippetnon è un input valido per i nostri scopi - Non è necessario tenere conto delle intestazioni di livello 4+
- Non è necessario preservare gli spazi in eccesso (ovvero gli
> 1spazi) all'interno del file, quindi è OK**hello there**diventare**hello there**ma non**hellothere**. Allo stesso modo, gli spazi finali e iniziali trovati su una linea non devono essere preservati - Nessun tabulatore sarà trovato nell'input.
- Non ci saranno istanze nidificate. Ad esempio,
***...***non si verificherebbe mai. - Uno spazio seguirà sempre un punto elenco
* ...non ordinato (ad esempio, non*...) - Gli elementi dell'elenco negli elenchi ordinati e non ordinati saranno sempre costituiti da un'unica riga.
- Le coppie di caratteri senza pari devono essere ignorate. Ad esempio,
** coole`java::defdovrebbe rimanere lo stesso.
Metodi di input
L'input deve essere uno dei seguenti:
- Un array / tuple / list / etc. di stringhe.
- O una stringa contenente newline per separare le righe.
Usa l'equivalente più vicino alla tua lingua ai tipi di dati sopra menzionati se la tua lingua non li supporta. (Ad esempio, TI-BASIC non supporta (1.) ... non che TI-BASIC possa competere, comunque: P).
Casi test
A }indica input e la riga successiva indica output. Più }s indicano righe di testo separate da una nuova riga.
} 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 --
indennità
- -19 byte se si supporta la fuga di caratteri (in modo che vengano trattati come "normali"); puoi scegliere qualsiasi personaggio di fuga, ma io suggerirei
\o^. Nota che il sistema di escape sui siti SO è diverso da quello che sto suggerendo (e più complicato), quindi non farlo! SO tratterà`\`come\, ma vorrei che tu trattassi il secondo`come un personaggio normale, e invece corrispondesse al personaggio successivo`.
***word***diventa * * w o r d * *dopo aver applicato la trasformazione corsivo e improvvisamente la trasformazione in grassetto non si applica. Non è chiaro come gestirlo.