これはdouble +ヘッダーです!


13

関連する

博覧会

SOラッフルを獲得した後、あなたは世界トップに立つことができたでしょう。ラッフルは1年間続いていましたが、あなたはSOの拠点に選ばれる100人のプログラマーの一人でした。そして最後に、待ち時間は終わりました。今日はあなたが行く日です-[難読化されたテキストが進みます]。

おっと。申し訳ありませんが、伝えることはできません。

とにかく、あなたはついに到着し、小さなSOのエンブレムが付いた黒いスーツを着たストイックな顔の男に会いました。彼はあなたに眉をひそめます。「他の人はすでに中にいる」と彼は言った、あなたは門で識別されていた。"早く。"

あなたは急いで、少し怖い。一体何が起こったのでしょうか?SOで何が悪かったのですか?内部では、他の99人のプログラマーが画面を凝視して入力しているのを観察します。残りの席に着くと、次のメッセージが表示されます。

こんにちは、プログラマー!問題が発生したようです。SOが侵入されましたが、私たちは知りません。(個人的には、それはPythまたはCJamのプログラマーだと思いますが、ちょっと)。しかし、害を受けたのはMarkdownエディターだけです。まあ、実際、それはかなりたくさんありますが、そこに来ます。
マークダウンファイルを解釈し、それを新しい「SO Beautifier-Arity -Decomposer」(別名「SOBAD」)形式。これは最短のバイト数で行う必要があります。このハッキングの問題を解決するまで、私たちはローダウンで実行しています。お時間をいただきありがとうございます。

心から、
スタックオーバーフローのメーカー


目的提出物への入力として有効なマークダウンファイルを指定し、入力に対して次の変換を実行して出力します。

+記号を使用する場合、リテラルのプラス記号ではなく、RegExpの「前の文字の1つ以上のインスタンス」演算子を意味します。)

  • すべてのレベル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*_
  • 複数行ヘッダーは、-orまたは=sがテキスト行に直接続く場合にのみ有効です。
  • 他のマークダウンエンティティを含むヘッダーはありません。たとえば、# `code` snippet私たちの目的にとって有効な入力ではありません
  • レベル4+ヘッダーを考慮する必要はありません
  • あなたは余分なスペース(すなわち保存する必要はありません> 1、持ってOKですので、ファイル内のスペースを)**hello there**になること**hello there**はありません**hellothere**。同様に、行の末尾と先頭のスペースは保存する必要はありません
  • 入力にタブレータは見つかりません。
  • ネストされたインスタンスはありません。たとえば、***...***発生することはありません。
  • スペースは常に順不同の箇条書きの後に続きます(たとえば、で* ...はありません*...
  • 順序付きリストと順序なしリストのリストアイテムは、常に1行で構成されます。
  • 一致しない文字のペアは無視する必要があります。例えば、** 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番目の`文字を通常の文字として扱い、代わりに次の `文字と一致させてください。

2
スペックはゴルフの質問には弱すぎます。
feersum

4
私が間違っていることを正確に教えてくれてありがとう。この質問を改善するのに本当に役立ちます。
コナーオブライエン

4
ある変換を適用すると、別の変換が適用されるかどうかが変わる場合があると思います。たとえば、斜体変換を適用した後に***word***なり* * w o r d * *、突然太字変換が適用されなくなります。これを処理する方法は不明です。
レインボルト

1
@CᴏɴᴏʀO'Bʀɪᴇɴコメントにはいくつかの問題があり、賛成票があります。downvotersはフィードバックを提供することを意図的に怠っているとは思わない。おそらく既存のフィードバックを支持しているだけです。
アレックスA.

1
@AlexA。両方のダウン投票が発生した場合、コメントにもアップ投票は存在しませんでした。
コナーオブライエン

回答:


1

Pythonの3652の 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

オンラインでお試しください!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.