Es ist ein Double + Header!

13

verbunden

Exposition

Nach dem Gewinn der SO-Verlosung hätten Sie an der Weltspitze stehen können, und Sie waren es! Die Verlosung hatte nun schon seit einem Jahr stattgefunden, und Sie waren einer von hundert Programmierern, die ausgewählt wurden, um in die SO-Hochburg einzutreten. Und endlich ist das Warten vorbei. Heute ist der Tag, an dem Sie gehen zu - [verborgener Text geht weiter].

Hoppla. Tut mir leid, soll ich nicht sagen.

Wie auch immer, Sie sind endlich angekommen, um einen Mann mit stoischem Gesicht in einem schwarzen Anzug mit dem winzigen SO-Emblem zu treffen. Er runzelt die Stirn. "Die anderen sind schon drinnen", sagte er und bemerkte, dass Sie am Tor identifiziert worden waren. "Schnell."

Sie eilen hinein, ein bisschen ängstlich. Was um alles in der Welt war los? Was war an SO falsch? Im Inneren sehen Sie die anderen 99 Programmierer, die aufmerksam auf ihre Bildschirme starren und tippen. Sie nehmen den verbleibenden Platz ein und werden mit der folgenden Meldung begrüßt:

Hallo Programmierer! Es scheint, dass wir auf ein Problem gestoßen sind; SO wurde eingedrungen, von denen wir nicht wissen. (Ich persönlich vermute, es war ein Pyth- oder CJam-Programmierer, aber hey.) Allerdings ist alles, was geschädigt wurde, der Markdown-Editor. Nun, eigentlich ist das ziemlich viel, aber hier kommen Sie ins Spiel.
Ich möchte, dass Sie ein Programm (oder eine Funktion, wir sind nicht wählerisch) erstellen, das eine Markdown-Datei interpretiert und in unsere neue "SO Beautifier-Arity" konvertiert -Decomposer "(aka" SOBAD ") Format. Sie müssen dies in der kürzesten Anzahl von Bytes tun - wir sind auf Low-Down, bis wir dieses Hacking-Problem gelöst haben. Vielen Dank für Ihre Zeit und viel Glück!

Mit freundlichen Grüßen
The Maker of Stack Overflow


Ziel Wenn eine gültige Markdown-Datei als Eingabe für Ihre Übermittlung vorliegt, führen Sie die folgenden Transformationen für die Eingabe aus und geben Sie sie aus:

(Wenn ich das +Symbol verwende, meine ich den RegExp-Operator "eine oder mehrere Instanzen des vorherigen Zeichens", kein wörtliches Pluszeichen.)

  • Verwandeln Sie alle Stufe 1 Header ( # ...oder ...\n=+) auf { ... }, mit ...GROSSBUCHSTABEN werden.
  • Transformieren Sie alle Überschriften ( ## ...oder ...\n-+) der Ebene 2 in {{ ... }}, wobei jedes Wort in Großbuchstaben geschrieben wird
  • Wandeln Sie alle Überschriften der Ebene 3 ( ### ...) in Kapitälchen um. Das heißt, alle Buchstaben (ohne Berücksichtigung der Groß- und Kleinschreibung) werden auf ᴀʙᴄᴅᴇғɢʜɪᴊᴋʟᴍɴᴏᴘǫʀsᴛᴜᴠᴡxʏᴢentsprechende Weise zugeordnet.
  • Transformieren Sie alle fett gedruckten Instanzen ( **...**) in ...und werden Sie ...zu ALL CAPS.
  • Transformiere alle kursiven Instanzen ( _..._) nach . . ., wobei zwischen jedem Zeichenpaar ein Leerzeichen eingefügt wurde.
  • Transformiere alle Code-Instanzen ( `...`) nach < ... >.
  • Transformiere alle durchgestrichenen Instanzen ( ---...---) nach -.-.-.-, wobei -zwischen jedem Zeichenpaar ein a eingefügt wurde.
  • Transformiere alle nummerierten Listeninstanzen ( N. {a}\nN. {b} ...wobei Ndie Regex übereinstimmt [0-9]+) zu ( 1. {a}\n 2. {b}...)
  • Alle ungeordneten Listeninstanzen ( * ...\n* ......) in ( o ...\n o ......) transformieren

Mehr Details

  • Überschriften und Listeninstanzen werden nur am Anfang von Zeilen gefunden. Sie können jedoch von Leerzeichen umgeben sein.
  • Es wird keine Instanzen verknüpft werden, zum Beispiel *a_*a_für unsere Standards nicht gültig ist, noch wird etwas __a__, *_a_*oder _*a*_in einem Eingang erscheinen.
  • Ein mehrzeiliger Header ist nur dann gültig, wenn das -oder =direkt auf eine Textzeile folgt.
  • Keine Überschriften enthalten andere Markdown-Entitäten. ZB # `code` snippetist keine gültige Eingabe für unsere Zwecke
  • Kopfzeilen der Stufe 4+ müssen nicht berücksichtigt werden
  • Sie müssen keine überschüssigen Leerzeichen (dh > 1Leerzeichen) in der Datei beibehalten , daher ist es in Ordnung, werden zu müssen **hello there**, **hello there**aber nicht **hellothere**. In ähnlicher Weise müssen in einer Zeile befindliche nachgestellte und führende Leerzeichen nicht beibehalten werden
  • In der Eingabe werden keine Tabulatoren gefunden.
  • ES GIBT KEINE NESTED INSTANZEN. Zum Beispiel ***...***würde nie auftreten.
  • Ein Leerzeichen folgt immer einem ungeordneten Aufzählungspunkt (zB * ...nicht *...)
  • Listenelemente in geordneten und ungeordneten Listen bestehen immer aus einer einzelnen Zeile.
  • Nicht übereinstimmende Zeichenpaare sollten ignoriert werden. ZB ** coolund `java::defsollte gleich bleiben.

Eingabemethoden

Die Eingabe muss eine der folgenden sein:

  1. Ein Array / Tupel / Liste / etc. von Streichern.
  2. ODER eine Zeichenfolge mit Zeilenumbrüchen, um Zeilen zu trennen.

Verwenden Sie die Sprache, die den oben genannten Datentypen am nächsten kommt, wenn Ihre Sprache diese nicht unterstützt. (ZB unterstützt TI-BASIC nicht (1.)… nicht, dass TI-BASIC überhaupt mithalten kann: P).

Testfälle

A steht für }Eingabe und die nächste Zeile für Ausgabe. Mehrfache }s kennzeichnen durch Zeilenumbrüche getrennte Textzeilen.

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

Bonus

  1. -19 Bytes, wenn Sie das Ausblenden von Zeichen unterstützen (damit diese als "normal" behandelt werden); Sie können ein beliebiges Escape-Zeichen wählen, aber ich würde vorschlagen\ oder ^. Beachten Sie, dass sich das Escaping-System auf SO-Sites von dem unterscheidet, was ich vorschlage (und was komplizierter ist). Tun Sie es also nicht! SO würde behandeln `\`wie \, aber ich möchte, dass Sie das zweite `als reguläres Zeichen behandeln und stattdessen mit dem nächsten ` Zeichen übereinstimmen .
Conor O'Brien
quelle
2
Die Spezifikation ist zu schwach für eine Golffrage.
Feersum
4
Vielen Dank, Downvoter, dass Sie mir genau gesagt haben, was ich falsch mache. Es hilft mir wirklich, diese Frage besser zu machen.
Conor O'Brien
4
Ich denke, es gibt Fälle, in denen sich durch das Anwenden einer Transformation ändern könnte, ob eine andere Transformation angewendet wird. Zum Beispiel ***word***wird , * * w o r d * *nachdem Sie die Kursivschrift Transformation anwenden, und plötzlich die kühnste Transformation keine Anwendung findet. Es ist unklar, wie man damit umgeht.
Rainbolt
1
@ CᴏɴᴏʀO'Bʀɪᴇɴ In den Kommentaren wurde eine Reihe von Problemen erwähnt, für die es positive Bewertungen gibt. Ich glaube nicht, dass Downvoter absichtlich versäumen, Feedback zu geben. Sie stimmen wahrscheinlich nur über vorhandenes Feedback ab.
Alex A.
1
@AlexA. Wenn beide Abstimmungen stattfanden, gab es zu den Kommentaren keine Aufstimmungen, auch nicht für einen Zeitraum danach.
Conor O'Brien

Antworten:

1

Python 3 , 652 640 Bytes

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

Probieren Sie es online!

TFeld
quelle