double + 헤더입니다!


13

관련

박람회

SO 추첨에서 우승 한 후, 당신은 세계 정상에 올 수 있었을 것입니다! 추첨은 1 년 동안 진행되어 왔으며, 당신은 SO 거점에 들어가기로 선택된 백 명의 프로그래머 중 한 명이었습니다. 그리고 마지막으로 기다림은 끝났습니다. 오늘은 당신이가는 날입니다. [난독 한 텍스트 진행].

으악. 미안합니다.

어쨌든, 당신은 마침내 작은 SO 엠블럼이있는 검은 색 정장을 입고 괴롭힘에 처한 남자를 만나기 위해 도착했습니다. 그는 당신을 찌푸리게합니다. "다른 사람들은 이미 안에있다"고 말했다. "빨리."

당신은 안으로 무서워하고 약간 무섭습니다. 지구상에서 무슨 일이 있었습니까? 그래서 무엇이 잘못 되었나요? 내부에서는 다른 99 명의 프로그래머가 화면을보고 쳐다보고있는 것을 관찰했습니다. 남은 자리를 차지하고 다음 메시지가 표시됩니다.

안녕하세요, 프로그래머! 문제가 발생한 것 같습니다. 우리가 모르는 사람이 그렇게 침투했습니다. (개인적으로 필자는 Pyth 또는 CJam 프로그래머라고 생각하지만 헤이.) 그러나 손상된 것은 Markdown 편집기입니다. 글쎄, 실제로, 그것은 꽤 많지만, 당신이 들어온 곳입니다.
마크 다운 파일을 해석하여 새로운 "SO Beautifier-Arity -분해기 "(일명"SOBAD ") 형식. 가장 짧은 바이트 단위로이 작업을 수행해야합니다.이 해킹 문제를 해결할 때까지 다운 다운 상태로 실행됩니다. 시간 내 주셔서 감사합니다. 행운을 빕니다!

감사합니다.
스택 오버플로 제작자


목표 제출에 대한 입력으로 유효한 마크 다운 파일이 제공되면 입력에서 다음 변환을 수행하고 출력하십시오.

( +기호를 사용할 때 RegExp는 "이전 문자의 하나 이상의 인스턴스"연산자이며 리터럴 더하기 부호가 아닙니다.)

  • 모든 레벨 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*_입력에 표시되지 않습니다.
  • 여러 줄 머리글은 -또는 =s가 텍스트 줄 바로 뒤에 오는 경우에만 유효 합니다.
  • 헤더에는 다른 마크 다운 엔터티가 포함되지 않습니다. 예를 들어, # `code` snippet우리의 목적에 맞는 입력이 아닙니다
  • 레벨 4 이상 헤더를 고려할 필요가 없습니다.
  • 당신은 여분의 공간 (즉, 보존 할 필요가 없습니다 > 1가이 확인하므로, 파일 내의 공간) **hello there**이 될 **hello there**수 있지만 **hellothere**. 마찬가지로, 선에서 발견 된 후행 및 선행 공백은 보존 할 필요가 없습니다.
  • 입력에서 표를 찾을 수 없습니다.
  • 필요한 인스턴스가 없습니다. 예를 들어, ***...***절대 발생하지 않습니다.
  • 공백은 항상 순서가없는 글 머리 기호를 따릅니다 (예 : * ...아닌 *...)
  • 정렬 된 목록과 정렬되지 않은 목록의 목록 항목은 항상 한 줄로 구성됩니다.
  • 일치하지 않는 문자 쌍은 무시해야합니다. 예를 들면, ** cool`java::def동일하게 유지해야한다.

입력 방법

입력은 다음 중 하나 여야합니다.

  1. 배열 / 튜플 / 목록 / 등 문자열.
  2. 또는 줄 바꾸기를 포함하는 줄 바꿈이 포함 된 문자열.

언어가 지원하지 않는 경우 위에서 언급 한 데이터 유형과 가장 가까운 언어를 사용하십시오. (예를 들어, TI-BASIC은 (1)을 지원하지 않습니다 ... TI-BASIC이 경쟁 할 수있는 것은 아닙니다 : P).

테스트 사례

A는 }입력을 나타내고 다음 줄은 출력을 나타냅니다. 여러 개 }는 줄 바꿈으로 구분 된 텍스트 줄을 나타냅니다.

} 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
골프 질문에 대한 사양이 너무 약합니다.
feersum

4
내가 잘못한 일을 정확히 말해줘서 고맙습니다. 이 질문을 개선하는 데 정말 도움이됩니다.
Conor O'Brien

4
한 변환을 적용하면 다른 변환 적용 여부가 변경 될 수 있다고 생각합니다. 예를 들어, ***word***이된다 * * w o r d * *당신이 이탤릭체로의 변환을 적용, 갑자기 굵은 변환이 적용되지 않습니다 후. 이것을 어떻게 처리해야할지 확실하지 않습니다.
Rainbolt

1
@ CᴏɴᴏʀO'Bʀɪᴇɴ 의견에 언급 된 많은 문제가 있으며,이 의견에 찬성 투표를했습니다. 다운 보터가 의도적으로 피드백을 제공하는 것을 무시한다고 생각하지 않습니다. 기존 피드백을 반대 할 가능성이 높습니다.
Alex A.

1
@AlexA. 두 개의 다운 보트가 모두 발생했을 때, 주석에는 업 보트가 존재하지 않았으며, 그 이후에도 일정 기간 동안은 없었습니다.
Conor O'Brien

답변:


1

파이썬 3 , 652640 바이트

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.