Bu bir çift + başlık!


13

İlişkili

sergi

SO çekilişini kazandıktan sonra, dünyanın tepesinde olabilirdiniz ve öyleydiniz! Çekiliş bir yıldır devam ediyordu ve siz SO kalesine girmek için seçilmiş yüz programcıdan birisiniz. Ve son olarak, bekleme bitti. Bugün gittiğiniz gün - [gizli metin ilerliyor].

Whoops. Üzgünüm, söylememeliydim.

Her neyse, nihayet, üzerinde küçük SO amblemi bulunan siyah elbiseli stoacı yüzlü bir adamla tanıştınız. Sana kaşlarını çattı. "Diğerleri zaten içeride," dedi kapıda tanımlandığınızı belirtti. "Hızlı bir şekilde."

İçeri koştun, biraz korktun. Ne oldu dünyada? SO'da yanlış olan neydi? İçeride, diğer 99 programcının ekranlarına dikkatle baktığını yazıyorsunuz. Kalan koltuğu alırsınız ve aşağıdaki mesajla karşılaşırsınız:

Merhaba programcı! Görünüşe göre bir sorunla karşılaştık; Bilmediğimiz SO'ya nüfuz etti. (Şahsen, bunun bir Pyth veya CJam programcısı olduğundan şüpheleniyorum, ama hey.) Ancak, zarar gören tek şey Markdown editörü. Aslında, bu oldukça fazla, ama içeri
girdiğiniz yer. İşaretleme dosyasını yorumlayacak ve yeni "SO Beautifier-Arity'ye dönüştürecek bir program (veya işlev, seçici değiliz) oluşturmanızı istiyorum . -Decomposer "(diğer adıyla" SOBAD ") biçimi. Bunu en kısa bayt miktarında yapmalısınız - bu hackleme sorununu çözene kadar aşağı iniyoruz. Zaman ayırdığınız için teşekkürler ve iyi şanslar!

Saygılarımızla,
Yığın Taşması Yapıcı


Amaç Gönderinize girdi olarak geçerli bir etiketleme dosyası verildiğinde, girdi üzerinde aşağıdaki dönüşümleri gerçekleştirin ve çıktısını alın:

( +Sembolü kullandığımda, RegExp "önceki karakterin bir veya daha fazla örneği" operatörünü kastediyorum, değişmez artı işareti değil.)

  • Tüm Seviye 1 başlıklarını (Transform # ...ya ...\n=+kadar) { ... }ile, ...TÜM CAPS olma.
  • Her 2. Seviye üstbilgiyi ( ## ...veya ...\n-+) {{ ... }}, her kelimeyi büyük harfle dönüştür
  • Tüm Seviye 3 başlıklarını ( ### ...) küçük harflere dönüştürün; diğer bir deyişle, tüm harfler (büyük / küçük harf duyarsız) ilgili bir şekilde eşlenir ᴀʙᴄᴅᴇғɢʜɪᴊᴋʟᴍɴᴏᴘǫʀsᴛᴜᴠᴡxʏᴢ.
  • (Bütün kalın örneklerini Transform **...**kadar) ...ile, ...TÜM CAPS olma.
  • Tüm italik örnekleri ( _..._) . . .her karakter çifti arasında bir boşluk eklendiği yere dönüştürün .
  • Tüm kod örneklerini ( `...`) konumuna dönüştürün < ... >.
  • Tüm üstü çizili örnekleri ( ---...---) -.-.-.-, -her karakter çifti arasına a eklendiği yere dönüştürün .
  • Tüm numaralı liste örneklerini ( normal ifadeyle eşleştiği N. {a}\nN. {b} ...yerde ) ( )N[0-9]+1. {a}\n 2. {b}...
  • Sırasız tüm liste örneklerini ( * ...\n* ......) biçimine ( o ...\n o ......) dönüştür

Daha fazla detay

  • Üstbilgiler ve liste örnekleri yalnızca satırların başında bulunur, ancak bunlar bir miktar boşlukla çevrelenebilir.
  • Hiçbir Orada örneğin, örneklerini bağlantılı olacak *a_*a_bizim standartları için geçerli değil, ne gibi irade şey __a__, *_a_*ya _*a*_bir girdi görünür.
  • Çok satırlı bir başlık, yalnızca -veya =s doğrudan bir metin satırını izliyorsa geçerlidir.
  • Hiçbir üstbilgide başka etiketleme öğeleri bulunmaz. Örneğin, # `code` snippetamacımız için geçerli bir girdi değil
  • Seviye 4+ üstbilgilerini hesaba katmanız gerekmez
  • > 1Dosya içindeki fazla boşlukları (yani boşlukları) korumak zorunda değilsiniz , bu yüzden **hello there**olmak zorundasınız **hello there**ama olmamak sorun değil **hellothere**. Benzer şekilde, bir hatta bulunan takip eden ve öndeki boşlukların korunması gerekmez
  • Girişte hiçbir tablo bulunmayacak.
  • GERÇEKLEŞTİRİLMEMİŞ DURUM YOKTUR. Örneğin, ***...***asla olmazdı.
  • Bir boşluk her zaman sırasız bir kurşun noktasını izler (Örn, * ...değil *...)
  • Sıralı ve sırasız listelerdeki liste öğeleri her zaman tek bir satırdan oluşur.
  • Eşleşmeyen karakter çiftleri yoksayılmalıdır. Örneğin, ** coolve `java::defaynı kalmalıdır.

Giriş yöntemleri

Giriş aşağıdakilerden biri olmalıdır:

  1. Bir dizi / grup / liste / vb. dizeleri.
  2. VEYA satırları ayırmak için yeni satırlar içeren bir dize.

Diliniz desteklemiyorsa, dilinizin yukarıda belirtilen veri türlerine en yakın eşdeğerini kullanın. (Örneğin, TI-BASIC (1.) 'i desteklemez… TI-BASIC her halükarda rekabet edebilir: P).

Test senaryoları

A }, girişi ve sonraki satır çıkışı gösterir. Çoklu }s, satır satırıyla ayrılmış metin satırlarını ifade eder.

} 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. Karakterlerin kaçmasını destekliyorsanız -19 bayt ("normal" olarak kabul edilir); herhangi bir kaçış karakteri seçebilirsin, ama öneririm \ya ^. SO sitelerinde kaçan sistemin önerdiğimden (ve daha karmaşık) farklı olduğunu unutmayın, bu yüzden yapmayın! SO `\`gibi davranırdı \, ama ikincisini `o zaman normal bir karakter olarak ele almanı ve bir sonraki ` karakterle eşleşmeni istiyorum .

2
Spesifikasyon bir golf sorusu için çok zayıf.
feersum

4
Neyin yanlış yaptığımı tam olarak söylediğin için teşekkürler. Bu soruyu daha iyi hale getirmeme gerçekten yardımcı oluyor.
Conor O'Brien

4
Bir dönüşümün uygulanmasının başka bir dönüşümün geçerli olup olmadığını değiştirebileceğini düşünüyorum. Örneğin , italik dönüşümü uyguladıktan sonra ***word***olur * * w o r d * *ve aniden kalın dönüşüm uygulanmaz. Bununla nasıl başa çıkacağı belli değil.
Rainbolt

1
@ CᴏɴᴏʀO'Bʀɪᴇɴ Yorumlarda not edilmiş olan ve bazı sorular var. Downvoters'ın geri bildirimde bulunmak için kasıtlı olarak ihmal ettiğini düşünmüyorum; muhtemelen mevcut geri bildirimleri destekliyorlar.
Alex A.

1
@AlexA. Her iki downvotes gerçekleştiğinde, yorumlarda hiçbiri, daha sonra bir süre için hiçbir upvote yoktu.
Conor O'Brien

Yanıtlar:


1

Python 3 , 652640 bayt

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

Çevrimiçi deneyin!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.