ASCII कला को व्यवस्थित करें


32

ASCII कला चित्र के इनपुट को देखते हुए, ASCII कला को इटैलिकाइज़ किया गया।

ASCII कला को इटैलिकाइज़ करने के लिए:

  1. अंतिम पंक्ति से पहले शून्य स्थान डालें, दूसरी-अंतिम पंक्ति से पहले एक स्थान, तीसरी-अंतिम पंक्ति से पहले दो स्थान, आदि।

  2. बनाए गए किसी भी अतिरिक्त प्रमुख व्हाट्सएप को हटा दें। यही है, यदि प्रत्येक पंक्ति में कम से कम nरिक्त स्थान हैं , तो प्रत्येक पंक्ति nकी शुरुआत से रिक्त स्थान हटा दें ।

  3. सभी के \साथ बदलें |, सभी के |साथ /, और सभी के /साथ _। मौजूदा _s को समान रखें ।

    इनपुट में केवल वर्ण \|/_और स्थान होने की गारंटी है।

उदाहरण के लिए, इनपुट

/\/\/\    /\/\/\      /\/\/\    /\/\/\
 /\    /\  /\    /\  /\        /\
  /\/\/\    /\/\/\    /\        /\  /\/\
   /\        /\        /\        /\    /\
    /\        /\          /\/\/\    /\/\/\

उत्पादन करना चाहिए

_|_|_|    _|_|_|      _|_|_|    _|_|_|
_|    _|  _|    _|  _|        _|
_|_|_|    _|_|_|    _|        _|  _|_|
_|        _|        _|        _|    _|
_|        _|          _|_|_|    _|_|_|

बदले में, इनपुट के रूप में प्रदान किया जाता है, आउटपुट

    _/_/_/    _/_/_/      _/_/_/    _/_/_/
   _/    _/  _/    _/  _/        _/
  _/_/_/    _/_/_/    _/        _/  _/_/
 _/        _/        _/        _/    _/
_/        _/          _/_/_/    _/_/_/

जो उत्पादन होगा

        ______    ______      ______    ______
      __    __  __    __  __        __
    ______    ______    __        __  ____
  __        __        __        __    __
__        __          ______    ______

इनपुट और आउटपुट या तो एक स्ट्रिंग (वैकल्पिक अनुगामी न्यूलाइन के साथ) या एक पंक्ति हो सकती है।

चूंकि यह , बाइट्स में सबसे छोटा कोड जीत जाएगा।

अतिरिक्त परीक्षण के मामले:

|||||
  /////
 \\\\\
   _____
 /////
  _____
|||||
 _____


________
________


(यह है, रिक्त स्ट्रिंग के आउटपुट में रिक्त स्ट्रिंग के परिणाम)


क्या हम मान सकते हैं कि इनपुट एक आयत में गद्देदार है?
मार्टिन एंडर

2
अनुगामी रिक्त स्थान प्रत्येक आउटपुट लाइन में स्वीकार्य हैं?
लुइस मेन्डो

@ मार्टिनबटनर हां, आप कर सकते हैं।
दरवाज़े

@DonMuesli ट्रेलिंग रिक्त स्थान ठीक है, बस कोई अग्रणी स्थान नहीं है।
दरवाज़े

क्या हम एक आयताकार सरणी (मैट्रिक्स) के रूप में इनपुट ले सकते हैं?
आदम

जवाबों:


6

सीजेएम, 43 38 बाइट्स

qN/W%eeSf.*:sW%z_{S-}#>zN*"\|/__"_(+er

इनपुट को एक आयत में गद्देदार करने की आवश्यकता होती है।

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

व्याख्या

qN/     e# Read input, split into lines.
W%      e# Reverse lines.
ee      e# Enumerate them (pairing each line with its index starting from 0).
Sf.*    e# Turn each index i into i spaces.
:s      e# Flatten each pair into a single string, prepending the spaces.
W%      e# Reverse the lines again.
z_      e# Transpose the character grid, duplicate it.
{S-}#   e# Find the first row index that contains non-spaces.
>       e# Discard that many rows.
zN*     e# Transpose back and join with linefeeds.
"\|/__" e# Push this string.
_(+     e# Make a copy that's rotated one character to the left, i.e. "|/__\".
er      e# Perform character transliteration mapping from the first string to the second.

किस्सा, लेकिन मैंने सवाल से पीसीसीजी उदाहरण की कोशिश की, प्रत्येक आउटपुट को कार्यक्रम में वापस खिलाया, लेकिन एक आयत के लिए पैडिंग के बिना। ठीक काम किया।
एलेक्सवचन

@alexwlchan खैर, हाँ, आयत की सीमा से परे रिक्त स्थान कोई फर्क नहीं पड़ता (लेकिन आवश्यक रूप से संरक्षित नहीं किया जाएगा)। लेकिन यदि आप उदाहरण के लिए मूल PPCG उदाहरण लेते हैं, और Gउसके बाद पीछे की जगहों को हटाते हैं, तो यह परिवर्तन शीर्ष पर आ जाएगा।
मार्टिन एंडर

4

पायथ, ३२

jCf|Z=Z-Td.t_.e+*kd.rb"\|/__"_Qd

इसे यहाँ आज़माएँ या चलाएँ टेस्ट सूट

प्रत्येक पंक्ति में कई अनुगामी स्थान होते हैं। यह लागू करके काम करता है .rजो स्ट्रिंग के प्रत्येक पंक्ति के लिए अंतर्निहित रोटेशन है। रोटेशन प्रत्येक चरित्र को स्ट्रिंग में ले जाता है जो दूसरे तर्क में एक से मेल खाता है "\|/__"और इसे अगले चरित्र के साथ बदल देता है। डबल अंडरस्कोर अच्छी तरह से अंडरस्कोर को बैकस्लैश बनने से रोकता है। उनके सूचकांक के आधार पर तार भी गद्देदार होते हैं।

एक बार जब यह हो जाता है, तो लाइनों को एक साथ जोड़ दिया जाता है, फिर हम प्रत्येक कॉलम को फ़िल्टर करते हैं जिसमें केवल रिक्त स्थान होते हैं, जब तक कि उनमें से एक नहीं होता है। फिर हम अनजिप करते हैं और नई-नई कहानियों से जुड़ते हैं।


4

MATL , 38 33 29 बाइट्स

P"NZ"@Y:'\|/' '|/_'XEh]XhPcYv

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

इनपुट स्ट्रिंग्स का एक सेल ऐरे (सूची) है। सरणी घुंघराले ब्रेसिज़ का उपयोग करती है, और तार एकल उद्धरण का उपयोग करते हैं, निम्नानुसार ( ऑनलाइन कोशिश करने के लिए प्रत्येक लिंक पर क्लिक करें ! )।

व्याख्या

सरणी शुरू में फ़्लिप की गई है। प्रत्येक स्ट्रिंग को लूप में संसाधित किया जाता है और संशोधित स्ट्रिंग को स्टैक पर धकेल दिया जाता है। प्रसंस्करण में वर्णों की जगह और कई रिक्त स्थान शामिल होते हैं। रिक्त स्थान की संख्या स्टैक में तत्वों की वर्तमान संख्या के बराबर होती है (इस तथ्य के लिए धन्यवाद कि सरणी को फ़्लिप किया गया है)।

लूप के बाद तारों को एक सरणी में एकत्र किया जाता है, जिसे वापस फ़्लिप किया जाता है, 2 डी चार सरणी में परिवर्तित किया जाता है, और अवांछित प्रमुख स्थानों से निपटारा किया जाता है: प्रमुख रिक्त स्थान जो 2 डी चार सरणी की सभी पंक्तियों में मौजूद हैं।

P             % implicitly input cell array of strings. Flip it (reverse order)
"             % for each
  NZ"         %   string with as many spaces as elements there are on the stack
  @Y:         %   push current input string
  '\|/'       %   push string: origin for replacement
  '|/_'       %   push string: target for replacement
  XE          %   replace
  h           %   concatenate string with spaces and modified-character string
]             % end for each
Xh            % collect all processed strings in a cell array
P             % flip back to restore original order
c             % convert to 2D char array
Yv            % remove trailing spaces common to all rows. Implicitly display

2

जावास्क्रिप्ट (ईएस 6), 171 149 148 बाइट्स

a=>a.map(s=>(t=' '.repeat(--i)+s,l=t.match` *`[0].length,n=l<n?l:n,t),n=i=a.length).map(s=>s.slice(n).replace(/./g,c=>"|/__ "["\\|/_ ".indexOf(c)]))

स्ट्रिंग की एक सरणी के रूप में स्वीकार और रिटर्न लाइनें।

संपादित करें: @ user81655 के लिए 22 बाइट्स धन्यवाद सहेजा गया। सहेजे गए 1 बाइट को यह महसूस करते हुए कि इनपुट 5 वर्णों \|/_और स्थान तक सीमित है।


replaces को संयुक्त किया जा सकता है .replace(/[\\|/]/g,m=>"|/_"["\\|/".indexOf(m)]), match(/ */)हो सकता है match` *`, पहले दो maps को संयुक्त किया जा सकता है a.map(s=>(t=' '.repeat(--i)+s,(l=t.match` *`[0].length)<n?n=l:l,t),..., बाहरी कोष्ठक ( (a=...)) अब हटाया जा सकता है। 149 बाइट्स:a=>a.map(s=>(t=' '.repeat(--i)+s,(l=t.match` *`[0].length)<n?n=l:l,t),n=i=a.length).map(s=>s.slice(n).replace(/[\\|/]/g,m=>"|/_"["\\|/".indexOf(m)]))
user81655

@ user81655 वाह, धन्यवाद! (तब मैंने कुछ हद तक इसे एक बाइट को बंद करके खराब कर दिया था replace।)
नील

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