बदलना शेवरॉन को Soliduses


23

एक प्रोग्राम है जो केवल रिक्त स्थान, नई-पंक्तियों, और कोण कोष्ठक युक्त एक स्ट्रिंग में लेता लिखें: <, >( शेवरॉन )। आउटपुट रिक्त स्थान, नई-पंक्तियों, और स्लैश के एक स्ट्रिंग: /, \( soliduses ) जिसका आकार इनपुट के अनुरूप है, लेकिन एक चौथाई बारी दक्षिणावर्त घुमाया, मूल इनपुट की प्रत्येक पंक्ति के बीच डाला रिक्त स्थान के एक स्तंभ के साथ (सौंदर्यशास्त्र के लिए)।

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

<>

आउटपुट यह होगा:

/\
\/

यदि इनपुट यह है:

><<<>
 <><

आउटपुट यह होगा:

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

यदि इनपुट यह है:

>>  <<
<>  <>
  <
  ><

आउटपुट यह होगा:

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

ध्यान दें कि पिछले दो उदाहरणों में मूल इनपुट पंक्तियों के बीच रिक्त स्थान का एक एकल स्तंभ कैसे है।

आप एक पूर्ण प्रोग्राम लिख सकते हैं जो किसी भी तरह से इनपुट लेता है (कमांड लाइन, स्टडिन) और आउटपुट प्रिंट करता है, या आप एक स्ट्रिंग तर्क के साथ एक फ़ंक्शन लिख सकते हैं, जो आउटपुट प्रिंट या रिटर्न करता है।

इनपुट में व्हाट्सएप की प्रमुख अग्रणी और अनुगामी पंक्तियों या स्तंभों को आउटपुट में मौजूद होने की आवश्यकता नहीं है। इसके अतिरिक्त, किसी भी स्थान पर किसी भी मात्रा में अग्रणी और / या अनुगामी रिक्त स्थान और / या नई रेखाएँ हो सकती हैं, जब तक कि परिणामी आकृतियाँ सही न हों। दूसरे शब्दों में, आस्की कला का अनुवाद मायने नहीं रखता, केवल आकृतियाँ और उनका एक दूसरे से संबंध

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

बाइट्स में सबसे छोटा कोड जीतता है।


क्या हम मान सकते हैं कि इनपुट आयताकार है, और इसमें व्हॉट्सएप का पता लगाया गया है?
orlp

@orlp नहीं। आप एक अनुगामी न्यूलाइन मान सकते हैं, लेकिन यह आवश्यक रूप से आयताकार नहीं है।
केल्विन के शौक

जवाबों:


4

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

qN/_s,S*f+{iD%[S3*" \/"_$]=}f%W%zN*

इसे यहाँ ऑनलाइन आज़माएँ


मेरे पास लगभग एक ही कोड था, लेकिन उस चालाक $चाल के बिना , यह अभी भी 37 बाइट्स लंबा था ...
डेनिस

उस $चाल ने मेरे जीवन को पहले ही बहुत बार बचाया है;)
ऑप्टिमाइज़र

3

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

qN/_z,S*f{+"< >""/\    \/ "3/er}W%zN*

CJam दुभाषिया में इसे ऑनलाइन आज़माएं ।

यह काम किस प्रकार करता है

qN/                                   e# Read from STDIN and split at linefeeds.
   _z,                                e# Zip a copy and push the results length.
                                      e# This computes the maximum line length.
      S*                              e# Repeat " " that many times.
        f{                     }      e# For each line:
                                      e#   Push the string of spaces.
          +                           e#   Append it to the line.

           "< >""/\    \/ "3/         e#   Push "< >" and ["/\ " "   " "\/ "].
                             er       e#   Perform transliteration.
                                W%z   e# Reverse the lines and zip.
                                      e# This rotates by 90 degrees.
                                   N* e# Join, separating by linefeeds.  

2

पायथन 2, 105 बाइट्स

def f(s):
 for row in map(None,*s.split("\n")):print" ".join("\/ /\ "[1-cmp(c,"<")::3]for c in row[::-1])

सभी गलत कारणों से, map(None, ...)मुझे अब तक मिले सबसे अच्छे उपयोगों में से एक है । उत्पादन भी सही आयत करने के लिए पैड।

चलो दूसरा उदाहरण लेते हैं:

><<<>
 <><

map(None,*s.split("\n"))एक गरीब आदमी करता है zip_longest, दे रहा है:

[('>', ' '), ('<', '<'), ('<', '>'), ('<', '<'), ('>', None)]

ध्यान दें कि दूसरी पंक्ति पहले से छोटी कैसे है, इसलिए हमें Noneअंत में मिलता है । आम तौर पर यह एक समस्या होगी, लेकिन किसी कारण से लगभग सब कुछ पायथन 2 और विशेष रूप से तुलनीय है

>>> None < ""
True

इसका मतलब यह है कि अभिव्यक्ति क्रमशः के लिए 1-cmp(c,"<")लौटती है, हमें स्ट्रिंग स्लिंगिंग चाल का उपयोग करने की अनुमति देती है । इसका उपयोग करते हुए, हम आउटपुट लाइन को लाइन से प्रिंट करते हैं, 2-चार समूहों को रिक्त स्थान के साथ जोड़ते हैं।0, 1, 2">", "<", None"\/", "/\", " "


+1 यह वह समाधान है जिसे मैंने अपने सिर में देखा था जब मैंने प्रश्न पढ़ा, तो आश्चर्य नहीं होना चाहिए यह पहले से ही यहां था: पी
केड

1

स्काला, 201 188 180 वर्ण

(s:String)(Seq("")0/:s.lines.flatMap(l⇒Seq(l,l))){case((v,i),l)(l.map(c⇒if(Set('>','<')(c))if(c%4==i)'/'else'\\'else c)+:v,2-i)}._1.init.transpose.map(_.mkString).mkString("\n")

ध्यान दें:

यह केवल तभी काम करता है जब प्रदान की गई स्ट्रिंग में समान लंबाई वाली सभी लाइनें हों (यानी रिक्त स्थान के साथ गद्देदार)

स्पष्टीकरण:

मैं एक Seq[String]और एक के tuple के प्रारंभिक मूल्य के साथ गुना का उपयोग कर रहा हूं Int(इसके बजाय Seq.empty[String]IM को छोटा Seq("")और .initगुना लिखने के बाद), तह स्ट्रिंग के संग्रह पर संचालित होता है, प्रत्येक स्ट्रिंग मूल इनपुट में एक पंक्ति है, और हर पंक्ति दोगुना है। यहाँ चाल चाल के modulo के लिए परीक्षण करने के लिए किया गया था। चूंकि '<'मान 60 है, और '>'मान 62 है, इसलिए मोडुलो 4 के लिए परीक्षण, 0 या 2 का उत्पादन करेगा और यही कारण है कि गुना भी एक फ़्लिपिंग Intसेट को 0. तक ले जाता है और 0 और 2 के बीच फ़्लिप होता है 2-i। हर विषम लाइन नक्शा चाहिए '>'करने के लिए '/'और '<'करने के लिए '\\', और हर भी लाइन नक्शा चाहिए '>'करने के लिए '\\'और '<'करने के लिए '/'। यही कारण है कि मैं के लिए परीक्षणc%4==iऔर 1 पत्थर से 2 पक्षियों को मारा। गुना "स्ट्रिंग्स का उल्टा" प्रारंभिक अनुक्रम उल्टा करता है, और फिर (अंतिम पंक्ति को छोड़ने के बाद), मैं अनुक्रम को स्थानांतरित करता हूं (यही कारण है कि सभी तार सटीक समान लंबाई के होने चाहिए)। शामिल किए गए निहितार्थों के कारण, मुझे _.mkStringप्रत्येक पंक्ति (पहले स्तंभ), और फिर mkString("\n")अंतिम आउटपुट के लिए आवश्यक है।


0

पर्ल - 119

@l=map[/./g],reverse<>;do{print;$_=join(' ',map({'<'=>'/\\','>'=>'\/'}->{$_->[$b]}||'  ',@l))."\n";$b++;}while(/[^ 
]/)

सबसे पहले, @lरिवर्स ऑर्डर में लाइनों के साथ इनपुट की प्रत्येक पंक्ति पर वर्णों का प्रतिनिधित्व करने वाली सूचियों की एक सूची के रूप में सौंपा गया है। फिर यह वर्णों के स्तंभों के माध्यम से लूप करता है, कोण कोष्ठक को इसी स्लैश के साथ प्रतिस्थापित करता है, रिक्त स्थान के साथ तत्वों में शामिल होता है, और शामिल स्लैश को एक लाइन के रूप में प्रिंट करता है।

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