एक षट्कोण का विस्तार करें


24

इनपुट के रूप में एक ASCII कला षट्कोण को देखते हुए, आउटपुट जिसका पक्ष सभी एक इकाई लंबा है।

                     _____
  ____              /     \
 /    \            /       \
/      \          /         \
\       \   =>    \          \
 \      /          \         /
  \____/            \       /
                     \_____/

इनपुट हेक्सागोन्स में 180 डिग्री समरूपता होगी, लेकिन अन्यथा पक्ष सभी अलग-अलग लंबाई के हो सकते हैं। ऊपर, साइड की लंबाई (2, 4, 3) तक बढ़ जाती है (3, 5, 4)। साइड की लंबाई नॉनजरो होगी।

हेक्सागोन अंडरस्कोर _, स्लैश /और बैकस्लैश से बने होते हैं \। ध्यान दें कि क्षैतिज किनारों (अंडरस्कोर के साथ बनाया गया है), शीर्ष किनारे अपनी लाइन पर है लेकिन नीचे का किनारा नहीं है।

आई / ओ

मैं एक स्टिकलर बनने जा रहा हूं और यहां फॉर्मेटिंग की आवश्यकता है: इनपुट और आउटपुट में नई लाइनों के साथ एक स्ट्रिंग होनी चाहिए जो छवि का प्रतिनिधित्व करती है, लाइनों की सूची नहीं। बेशक, आपका कोड छवि बनाने के लिए प्रत्येक पंक्ति को प्रिंट कर सकता है, या STDIN को इनपुट के लिए एक पंक्ति पढ़ सकता है यदि आपकी भाषा ऐसा कर सकती है।

विवरण

यदि आप चाहें तो इनपुट में एक वैकल्पिक अनुगामी न्यूलाइन शामिल हो सकती है, लेकिन अन्यथा कोई खाली लाइनें नहीं होंगी। आप इनपुट में कोई अनुगामी रिक्त स्थान नहीं चुन सकते हैं, या प्रत्येक पंक्ति को एक ही लंबाई (सबसे लंबी पंक्ति) में रखने के लिए रिक्त स्थान है।

आउटपुट स्क्रीन के बाएं किनारे के साथ फ्लश होना चाहिए, जैसे इनपुट। आपके पास ऊपर और नीचे के साथ-साथ अनुगामी रिक्त स्थान के अतिरिक्त नए लिंक हो सकते हैं।

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

इनपुट आउटपुट के बाद।

 _
/ \
\_/

  __
 /  \
/    \
\    /
 \__/

  ____
 /    \
/      \
\       \
 \      /
  \____/

   _____
  /     \
 /       \
/         \
\          \
 \         /
  \       /
   \_____/

     _
    / \
   /  /
  /  /
 /  /
/  /
\_/

      __  
     /  \
    /    \
   /     /
  /     /
 /     /
/     /
\    /
 \__/

लीडरबोर्ड

<iframe src="https://xmikee1.github.io/ppcg-leaderboard/?id=185760" width="100%" height="100%" style="border: none;">Oops, your browser is too old to view this content! Please upgrade to a newer version of your browser that supports HTML5.</iframe><style>html,body{margin:0;padding:0;height:100%;overflow:hidden}</style>


आउटपुट षट्भुज एक ही होना चाहिए, लेकिन बड़ा, या यह उपयुक्त पक्ष लंबाई के साथ कोई षट्भुज हो सकता है?
स्टीफन

1
@ स्टेपेन यह एक ही, लेकिन एक ही अभिविन्यास में बड़ा होना चाहिए।
xnor

2
यह वास्तव में अच्छी तरह से लिखित चुनौती का एक बड़ा उदाहरण है। लघु, स्पष्ट और बिंदु तक। क्या मैं एक छोटा सा सुझाव दूं? "स्टिकलर" सभी गैर देशी अंग्रेजी बोलने वालों के लिए स्पष्ट नहीं हो सकता है। क्या मुझे सुझाव है कि "मैं केवल स्वीकार करूंगा ..." या ऐसा ही कुछ समझना आसान हो सकता है? वैसे भी +1।
एलपेड्रो

क्या हम IEnumerableवर्णों की एक सरणी / वापसी कर सकते हैं ?
अज्ञान का अवतार

@EmbodimentofIgnorance हाँ, वे ठीक हैं, जब तक कि आवश्यक न्यूलाइन वर्ण हैं।
xnor

जवाबों:



5

रेटिना 0.8.2 , 84 बाइट्स

m`(¶.*)( .)$
$1   $2
(_+¶)(( */)  ( *.))
 _$1 $3$4¶$2
( *.)(_+/)$
$1$.2$*   /¶ $1_$2

इसे ऑनलाइन आज़माएं! अनियमित हेक्सागोन्स के साथ काम करता है। I / O अनपेड है। स्पष्टीकरण:

m`(¶.*)( .)$
$1   $2

षट्भुज के आंतरिक भाग को चौड़ा करें।

(_+¶)(( */)  ( *.))
 _$1 $3$4¶$2

ऊपर को ठीक करो।

( *.)(_+/)$
$1$.2$*   /¶ $1_$2

नीचे को ठीक करें।


5

जावास्क्रिप्ट (ईएस 6),  159 156 153  150 बाइट्स

s=>s[r='replace'](/\S /g,'$&   ')[r](/.*/,s=>s[r](e=/_+/,` $&_
`+s[r](e,'/$& \\')[r](e=/_/g,' ')))[r](/ *\\_+/,s=>s[r](e,' ')+`   /
 `+s[r](/_/,'__'))

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

टिप्पणी की गई

नायब: एसई सिंटैक्स हाइलाइटर को बर्सर जाने से रोकने के लिए रेगेक्स डेलिमिटर के लिए वैकल्पिक वर्ण नीचे उपयोग किए जाते हैं।

s =>                       // s = input
  s[r = 'replace'](        // r = alias for 'replace'
                           // STEP #1
    \S g,                // insert two middle spaces for all lines
    '$&   '                // that contain a border, followed by a space
  )                        // (i.e. all lines except the first and the last one)
  [r](                     // STEP #2
    ∕.*∕,                  // isolate the first line
    s =>                   // let s be this first line
      s[r](                //
        e = _+∕,          // find the sequence of underscores and replace it with:
        ` $&_\n` +         //   the same sequence preceded by a space and followed by '_'
        s[r](              //   followed by a linefeed and:
          e,               //     the same sequence preceded by '/' and followed by ' \'
          '/$& \\'         //     
        )                  //     with:
        [r](e = _g, ' ') //     all underscores replaced with spaces
  ))                       //
  [r](                     // STEP #3
     *\\_+∕,              // isolate the last line, without the trailing '/'
    s =>                   // let s be this last line
      s[r](e, ' ') +       // replace all underscores with spaces
      `   /\n ` +          // append 3 spaces and a trailing '/', followed by a linefeed
      s[r](∕_∕, '__')      // append s with an extra underscore
  )                        //

2

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

SθW¬№ω_≔⁺ωSω≔⊕⊘№ω\η≔⊕⊘№ω/ζ≔×_⊕№ω_θ↗ζθ↓↘η←↙ζ↑←θ↖η

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। स्पष्टीकरण:

SθW¬№ω_≔⁺ωSω

इनपुट और पहले को छोड़कर सभी लाइनों को समेटना। (JSON प्रारूप में इनपुट 11 बाइट्स की बचत पर इस अनावश्यक को अधिकांश बना देगा।)

≔⊕⊘№ω\η≔⊕⊘№ω/ζ≔×_⊕№ω_θ

स्ट्रिंग में /s, /s और _s की संख्या की गणना करें और उस नई लंबाई की लंबाई ( _s के मामले में , _उस लंबाई के s के स्ट्रिंग के रूप में) की गणना करने के लिए उपयोग करें ।

↗ζθ↓↘η←↙ζ↑←θ↖η

बढ़े हुए षट्भुज को ड्रा करें।

वैकल्पिक समाधान, 48 बाइट्स:

SθW¬№ω_≔⁺ωSω≔⁺θωθF²«≔E\/_⊕⊘№θκη×_⊟ηM⁰¬ιFη«↷¹κ↷¹¶

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। स्पष्टीकरण:

SθW¬№ω_≔⁺ωSω≔⁺θωθ

सभी लाइनों का इनपुट। (JSON प्रारूप में इनपुट 17 बाइट्स की बचत पर इसे अनावश्यक बना देगा।)

F²«

षट्भुज के शीर्ष दाएं और निचले बाएं खंडों को अलग-अलग खींचें।

≔E\/_⊕⊘№θκ

स्ट्रिंग में /s, /s और _s की संख्या की गणना करें और नई साइड की लंबाई की गणना करने के लिए इसका उपयोग करें।

η×_⊟ηM⁰¬ι

ऊपर या नीचे आउटपुट करें, और एक पंक्ति नीचे ले जाएं यदि यह शीर्ष रेखा थी।

Fη«↷¹κ↷¹¶

दाएं या बाएं दोनों पक्षों को ड्रा करें।


2

एपीएल (डायलॉग यूनिकोड) , 75 74 बाइट्स एसबीसीएस

' /\_'∘{⍺[a×1=(+⍀×a)⌊⊖+⍀⊖×a2⌈/{⊃0~⍨1⌷⍵,⍨⍉⍵}⌺3 3(0,0,⍨⍉)⍣3⍉⍺⍳↑⍵]}'.+'s'&'

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

'.+'⎕s'&' इनपुट को लाइनों में विभाजित करें

↑⍵ एक मैट्रिक्स में लाइनों को मिलाएं

⍺⍳ बदलने के ' /\_'साथ 0 1 2 3

(0,0,⍨⍉)⍣3⍉ ऊपर और नीचे 0 की एक परत और बाईं और दाईं ओर 0s की दो परतें घेरें

{⊃0~⍨1⌷⍵,⍨⍉⍵}⌺3 3 प्रत्येक सेल के लिए पहले गैर-0 का चयन करें: ऊपरी, निचले, बाएं, दाएं से उस पर केंद्रित 3x3 पड़ोस से

2⌈/ क्षैतिज रूप से जोड़े में अधिकतम

a×1=(+⍀×a)⌊⊖+⍀⊖×a← केवल 0 की बाहरी सीमा रखें

⍺[ ]के 0 1 2 3साथ बदलें' /\_'



0

पर्ल 5 , 177 156 145 बाइट्स

@l=pop=~/.+/g;splice@l,$_,0,$l[$_]=~s,_, ,gr for-1,1;$l[$_]=~s, (\S)( +)(\S),$_<2?" $1$2 $3":"$1$2   $3",e for 1..@l-2;join("\n",@l)=~s,_+,$&_,gr

छोटा हो सकता है? कैसे अभी तक नहीं देखते हैं। टिप्पणियों और जोड़े गए नए लिंक और हेडर + पाद के साथ:

sub f {
@l=pop=~/.+/g;                                                      #1
splice@l,$_,0,$l[$_]=~s,_, ,gr for-1,1;                             #2
$l[$_]=~s, (\S)( +)(\S),$_<2?" $1$2 $3":"$1$2   $3",e for 1..@l-2;  #3
join("\n",@l)=~s,_+,$&_,gr                                          #4
}

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

लाइन # 1 मल्टी लाइन इनपुट स्ट्रिंग को @ एल सरणी में विभाजित करता है।

लाइन # 2 _ चार्ट के बिना दूसरी और आखिरी लाइनों की नकल करता है।

पंक्ति # 3 उन स्थानों को जोड़ती है जहाँ अंतिम 2 से दूसरी पंक्ति की आवश्यकता होती है।

लाइन # 4 एक के साथ दो ___ पक्षों को चौड़ा करता है और लाइनों के @l सरणी को एक मल्टी-लाइन स्ट्रिंग के रूप में वापस करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.