सरल मार्कडाउन रेंडरिंग


20

स्टैक एक्सचेंज नेटवर्क पर पदों पर हेडर बनाने के कई तरीके हैं। PPCG पर आमतौर पर 1 का उपयोग किया जाने वाला प्रारूप ऐसा प्रतीत होता है:

# Level one header
## Level two header
### Level three header

हैश के निशान के बाद अंतरिक्ष पर ध्यान दें। इसके अलावा, ध्यान दें कि हैश के निशान को शामिल नहीं किया गया है।

चुनौती:

इनपुट के रूप में संभवतः (बहु-रूपी) स्ट्रिंग लें, और निम्न प्रारूप पर स्ट्रिंग को आउटपुट करें:

  • यदि शीर्ष लेख स्तर 1 है, तो प्रत्येक अक्षर को 4-बाय -4 बार आउटपुट करें
  • यदि हेडर स्तर 2 है, तो प्रत्येक अक्षर को 3-बाय -3 बार आउटपुट करें
  • यदि हेडर स्तर 3 है, तो प्रत्येक अक्षर को 2-बाय -2 बार आउटपुट करें
  • यदि कोई लाइन हेडर नहीं है, तो इसे आउटपुट करें।

उदाहरण देकर स्पष्ट करने के लिए:

--- Level 1 ---
# Hello
--- Output---
HHHHeeeelllllllloooo    
HHHHeeeelllllllloooo
HHHHeeeelllllllloooo
HHHHeeeelllllllloooo

--- Level 2 ---
## A B C def
--- Output ---
AAA   BBB   CCC   dddeeefff
AAA   BBB   CCC   dddeeefff
AAA   BBB   CCC   dddeeefff

--- Level 3 ---
### PPCG!
--- Output---
PPPPCCGG!!
PPPPCCGG!!

इतना ही आसान!


नियम:

  • आपको कई लाइनों पर इनपुट का समर्थन करना चाहिए। \nनईलाइनों के लिए उपयोग करना आदि ठीक है।
    • वहाँ केवल #एक एकल स्थान के बाद वाली लाइनें नहीं होंगी
  • आउटपुट को कई लाइनों पर प्रस्तुत किया जाना चाहिए। आप \nशाब्दिक newlines के बजाय उत्पादन नहीं कर सकते ।
    • ट्रेलिंग स्पेस और न्यूलाइन्स ठीक हैं।

परीक्षण के मामलों:

इनपुट और आउटपुट को एक लाइन द्वारा अलग किया जाता है ...

# This is a text
with two different
### headers!
........................................................    
TTTThhhhiiiissss    iiiissss    aaaa    tttteeeexxxxtttt
TTTThhhhiiiissss    iiiissss    aaaa    tttteeeexxxxtttt
TTTThhhhiiiissss    iiiissss    aaaa    tttteeeexxxxtttt
TTTThhhhiiiissss    iiiissss    aaaa    tttteeeexxxxtttt
with two different
hheeaaddeerrss!!
hheeaaddeerrss!!

This input has
## trailing hash marks ##
#and a hash mark without a space after it.
........................................................    
This input has
tttrrraaaiiillliiinnnggg   hhhaaassshhh   mmmaaarrrkkksss   ######
tttrrraaaiiillliiinnnggg   hhhaaassshhh   mmmaaarrrkkksss   ######
tttrrraaaiiillliiinnnggg   hhhaaassshhh   mmmaaarrrkkksss   ######
#and hash marks without a space after it.

# This ## is ### strange
#### ###
........................................................
TTTThhhhiiiissss    ########    iiiissss    ############    ssssttttrrrraaaannnnggggeeee
TTTThhhhiiiissss    ########    iiiissss    ############    ssssttttrrrraaaannnnggggeeee
TTTThhhhiiiissss    ########    iiiissss    ############    ssssttttrrrraaaannnnggggeeee
TTTThhhhiiiissss    ########    iiiissss    ############    ssssttttrrrraaaannnnggggeeee
#### ###

Multiple


### newlines! # 
:)
........................................................    
Multiple


nneewwlliinneess!!  ##
nneewwlliinneess!!  ##
:)

Line with only a hash mark:
#
### ^ Like that!
........................................................    
Line with only a hash mark:
#
^^  LLiikkee  tthhaatt!!
^^  LLiikkee  tthhaatt!!

1: मैंने वास्तव में जाँच नहीं की है, लेकिन मुझे लगता है कि यह सच है।


क्या हम एक स्ट्रिंग सरणी के रूप में इनपुट ले सकते हैं?
इयान एच।

जवाबों:


7

स्टैक किया गया , 51 50 बाइट्स

सहेजे गए 1 बाइट @RickHitchcock के लिए धन्यवाद - गोल्फ regex

['^(##?#?) (.+)'[\#'5\-@k CS k*k rep LF#`]3/mrepl]

इसे ऑनलाइन आज़माएं!

बेनामी फ़ंक्शन जो स्टैक से इनपुट लेता है और इसे स्टैक पर छोड़ देता है।

व्याख्या

['^(##?#?) (.+)'[\#'5\-@k CS k*k rep LF#`]3/mrepl]
[                                            mrepl]   perform multiline replacement
 '^(##?#?) (.+)'                                     regex matching headers
                [                        ]3/         on each match:
                 \#'                                   count number of hashes
                    5\-                                5 - (^)
                       @k                              set k to number of repetitions
                          CS                           convert the header to a char string
                             k*                        repeat each char `k` times
                               k rep                   repeat said string `k` times
                                     LF#`              join by linefeeds

3

जावास्क्रिप्ट (ईएस 6), 111 105 बाइट्स

सहेजे गए 6 बाइट्स @ थैगी का धन्यवाद

s=>s.replace(/^(##?#?) (.+)/gm,(_,a,b)=>`
${b.replace(/./g,e=>e.repeat(l=5-a.length))}`.repeat(l).trim())

स्ट्रिंग की शुरुआत में 1-3 हैश मैच करता है या एक नई लाइन से पहले होता है, फिर मैच में प्रत्येक चरित्र को मैच के साथ ही हैश की लंबाई के आधार पर दोहराता है।

परीक्षण के मामलों:


2

रेटिना , 125 104 बाइट्स

m(`(?<=^# .*).
$0$0$0$0
(?<=^## .*).
$0$0$0
(?<=^### .*).
$0$0
^# 
$%'¶$%'¶$%'¶
^## 
$%'¶$%'¶
^### 
$%'¶

इसे ऑनलाइन आज़माएं

नील की बदौलत 21 बाइट्स बचाए।


%)तीसरे चरण पर उपयोग करके 3 बाइट्स बचाएं जो आपको %पहले दो चरणों में एस को हटाने की अनुमति देता है । हेडर में से एक भी सामान्य रूप से (जिसके Gबाद (आपको अब दो की आवश्यकता होगी) डाल देता है ।
नील

बेहतर अभी भी, आप उपयोग कर सकते हैं m)या m(जो अब 9 बाइट्स बचाता है क्योंकि आप बाद में अन्य सभी को हटा सकते हैं m
नील

हेडर अनावश्यक निकला। इसके अलावा, मैंने एक और 12 बाइट्स बचाए: इसे ऑनलाइन आज़माएं!
नील

ओह, हाँ, मैं सिर्फ कई परीक्षण मामलों के लिए हेडर का उपयोग करने के लिए इस्तेमाल किया गया था।
mbomb007

2

MATL , 43 42 40 बाइट्स

रिक हिचकॉक के लिए 1 बाइट हटा दिया गया !

`j[]y'^##?#? 'XXgn:(2M4:QP&mt~+t&Y"0YcDT

यह प्रत्येक पंक्ति में एक अनुगामी स्थान को आउटपुट करता है (चुनौती द्वारा अनुमत), और ouput के उत्पादन के बाद एक त्रुटि (डिफ़ॉल्ट रूप से अनुमत) के साथ बाहर निकलता है।

इसे ऑनलाइन आज़माएं!

व्याख्या

`            % Do...while loop
  j          %   Input a line as unevaluated string
  []         %   Push empty array
  y          %   Duplicate from below: push input line again
  '^##?#? '  %   Push string for regexp pattern
  XX         %   Regexp. Returns cell array with the matched substrings
  g          %   Get cell array contents: a string, possibly empty
  n          %   Length, say k. This is the title level plus 1, or 0 if no title
  :(         %   Assign the empty array to the first k entries in the input line
             %   This removing those entries from the input
  2M         %   Push k again
  4:QP       %   [1 2 3 4], add 1 , flip: pushes [5 4 3 2]
  &m         %   Push index of k in that array, or 0 if not present. This gives
             %   4 for k=2 (title level 1), 3 for k=3 (tile level 2), 2 for k=2
             %   (title level 1), and 0 for k=0 (no title). The entry 5 in the
             %   array is only used as placeholder to get the desired result.
  t~+        %   Duplicate, negate, add. This transforms 0 into 1
  t&Y"       %   Repeat each character that many times in the two dimensions
  0Yc        %   Postpend a column of char 0 (displayed as space). This is 
             %   needed in case the input line was empty, as MATL doesn't
             %   display empty lines
  D          %   Display now. This is needed because the program will end with
             %   an error, and so implicit display won't apply
  T          %   True. This is used as loop condition, to make the loop infinite
             % End (implicit)

मैं सोच रहा था कि MATLAB में ऐसा करने का सबसे अच्छा तरीका क्या था ... क्रोनकर उत्पाद निश्चित रूप से इसे करने का सबसे अच्छा तरीका था :) नाइस!
स्टीवी ग्रिफिन

@StewieGriffin जब मैंने चुनौती देखी तो मैंने तुरंत क्रोनकर उत्पाद के बारे में सोचा। लेकिन मुझे सिर्फ एक तरीका मिला जो 2 बाइट्स का उपयोग करके repelem( Y"MATL में) छोटा है। kronअभी भी शायद MATLAB में सबसे छोटा रास्ता है
लुइस मेंडो


1

चारकोल , 46 बाइट्स

FN«Sι≔⊕⌕E³…⁺×#κι⁴### θF⎇θ✂ι⁻⁵θLι¹ι«G↓→↑⊕θκ→»D⎚

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। चारकोल वास्तव में स्ट्रिंग सरणी इनपुट नहीं करता है, इसलिए मुझे इनपुट के रूप में सरणी लंबाई जोड़ना होगा। स्पष्टीकरण:

FN«Sι

इनपुट स्ट्रिंग्स की उचित संख्या पर लूप करें।

≔⊕⌕E³…⁺×#κι⁴### θ

इनपुट लेकर स्ट्रिंग्स की एक सरणी बनाएं और 2 #s तक उपसर्ग करें, फिर 4 की लंबाई तक छोटा हो, फिर ###सरणी में खोजने का प्रयास करें , फिर 1-इंडेक्सिंग में कनवर्ट करें। यह एक संख्या में परिणाम है जो अक्षर ज़ूम से कम है।

F⎇θ✂ι⁻⁵θLι¹ι«

यदि पत्र ज़ूम 1 है तो पूरे स्ट्रिंग पर लूप करें अन्यथा उपयुक्त प्रत्यय पर लूप (जो कि चारकोल में निकालने के लिए अनुचित रूप से कठिन है)।

G↓→↑⊕θκ→

शीर्ष दाएं कोने पर समाप्त होने वाले पत्र से भरा बहुभुज ड्रा करें, और फिर अगले पत्र के लिए दाएं तैयार स्थानांतरित करें।

»D⎚

आउटपुट प्रिंट करें और अगले इनपुट स्ट्रिंग के लिए तैयार रीसेट करें।


1

SOGL V0.12 , 31 28 बाइट्स

¶Θ{■^##?#? øβlF⁄κ6κ5%:GI*∑∙P

यह कोशिश करो! - अतिरिक्त कोड जोड़ा गया क्योंकि कोड एक फ़ंक्शन है और स्टैक पर इनपुट लेता है (SOGL मल्टीलाइन इनपुट को अन्यथा नहीं ले सकता है: / -) - inputs.value”उस स्ट्रिंग को पुश करें , F- JS के रूप में मूल्यांकन करें , - उस फ़ंक्शन को कॉल करें।

स्पष्टीकरण:

¶Θ                            split on newlines
  {                           for each item
   ■^##?#?                      push "^##?#? "
           øβ                   replace that as regex with nothing
             l                  get the new strings length
              F⁄                get the original strings length
                κ               and subtract from the original length the new strings length
                 6κ             from 6 subtract that
                   5%           and modulo that by 5 - `6κ5%` together transforms 0;2;3;4 - the match length to 1;4;3;2 - the size
                     :          duplicate that number
                      G         and get the modified string ontop
                       I        rotate it clockwise - e.g. "hello" -> [["h"],["e"],["l"],["l"],["o"]]
                        *       multiply horizontally by one copy of the size numbers - e.g. 2: [["hh"],["ee"],["ll"],["ll"],["oo"]]
                         ∑      join that array together - "hheelllloo"
                          ∙     and multiply vertiaclly by the other copy of the size number: ["hheelllloo","hheelllloo"]
                           P    print, implicitly joining by newlines

0

प्रोटॉन , 130 बाइट्स

x=>for l:x.split("\n"){L=l.find(" ")print(L>3or L+len(l.lstrip("\#"))-len(l)?l:"\n".join(["".join(c*(5-L)for c:l[L+1to])]*(5-L)))}

इसे ऑनलाइन आज़माएं!


मुझे लगता है कि आपको लाइनों की एक सूची प्राप्त करने और वापस करने की अनुमति नहीं है, नियम काफी सख्त हैं: आपको कई लाइनों पर इनपुट का समर्थन करना चाहिए। , आउटपुट को कई लाइनों पर प्रस्तुत किया जाना चाहिए। आप शाब्दिक newlines के बजाय \ n आउटपुट नहीं कर सकते।
श्री एक्सकोडर

@ Mr.Xcoder Whoops, मेरा बुरा। फिक्सिंग।
HyperNeutrino

नोट: यदि इनपुट है तो यह ठीक है \n, लेकिन आउटपुट को शाब्दिक newlines के साथ दिखाया जाना चाहिए।
स्टीवी ग्रिफिन

@ mbomb007 वूप्स मैं 5-वहाँ लगाना भूल गया । क्षमा करें
HyperNeutrino


0

पायथन 3 , 147 बाइट्स

def f(x):
	for l in x.split("\n"):L=l.find(" ");print(L>3or L+len(l.lstrip("#"))-len(l)and l or"\n".join(["".join(c*(5-L)for c in l[L+1:])]*(5-L)))

इसे ऑनलाइन आज़माएं!

-1 बाइट मिस्टर एक्सकोडर की बदौलत


@ mbomb007 वूप्स मैं 5-वहाँ लगाना भूल गया । क्षमा करें
HyperNeutrino




0

जे , 55 बाइट्स

([:{:@,'^##?#? 'rxmatch])((1 1 4 3 2{~[)([:|:[$"0#)}.)]

मैं नहीं जानता कि कैसे J regex के साथ TIO काम करना है, इसलिए मैं एक काम लिंक प्रदान नहीं कर सकता।

यहां देखें कि जे इंटरप्रेटर में इसका परीक्षण कैसे किया जाए (J804 के साथ परीक्षण किया गया)

   f=.([:{:@,'^##?#? 'rxmatch])((1 1 4 3 2{~[)([:|:[$"0#)}.)]
   txt=.'# Hello'; '## A B C def'; '### PPCG!'; '#and a hash mark without a space after it.'; '##### ###'
   ; f each txt

HHHHeeeelllllllloooo                      
HHHHeeeelllllllloooo                      
HHHHeeeelllllllloooo                      
HHHHeeeelllllllloooo                      
AAA   BBB   CCC   dddeeefff               
AAA   BBB   CCC   dddeeefff               
AAA   BBB   CCC   dddeeefff               
PPPPCCGG!!                                
PPPPCCGG!!                                
#and a hash mark without a space after it.
##### ###

मैं बॉक्सिंग स्ट्रिंग्स की सूची के माध्यम से एक मल्टीलाइन स्ट्रिंग का अनुकरण करता हूं।



0

जावास्क्रिप्ट, 112 बाइट्स

x=>x.replace(/^(##?#?) (.*)/mg,(_,n,w)=>(t=>Array(t).fill(w.replace(/./g,c=>c.repeat(t))).join`
`)(5-n.length))


मुझे नहीं लगता कि यह काम करता है #### ##
रिक हिचकॉक

@ रिक्शेकॉक तय
टीएस

0

सी # 4.5 158 बाइट्स

जहां मैं एक स्ट्रिंग के रूप में इनपुट हूं।

int l,m,t,s=0;while(i[s]=='#'){s++;};t=s>0?4-s+1:1;for(l=0;l<t;l++){foreach(char c in i.Skip(s>0?s+1:0))for(m=0;m<t;m++)Console.Write(c);Console.WriteLine();}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.