विकर्ण स्ट्रिप्स से एक पाठ आयत का पुनर्निर्माण करें


10

यह चुनौती अपने सभी विकर्ण स्ट्रिप्स को एन्यूमरेट करके मैट्रिक्स को ट्रेस करने के बारे में एक एसओ प्रश्न से प्रेरित है ।

मैट्रिक्स के बजाय, टेक्स्ट के ब्लॉक पर विचार करें:

ABCD
EFGH
IJKL

इस ब्लॉक के SW-NE विकर्णों को बाएं से दाएं की ओर ले जाते हुए, ऊपरी बाएं कोने से शुरू होकर नीचे दाएं में समाप्त होता है, जिसके परिणामस्वरूप निम्न आउटपुट होते हैं:

A
EB
IFC
JGD
KH
L

चुनौती

एक प्रोग्राम या एक फ़ंक्शन लिखें जो ऊपर वर्णित प्रक्रिया के रिवर्स को निष्पादित करता है। यही है, एक सेट SW-NE विकर्ण स्ट्रिप्स दिया जाता है, जो इसे उत्पन्न करने वाले पाठ के ब्लॉक का उत्पादन करता है।

इनपुट और आउटपुट

इनपुट और आउटपुट दोनों को तार के रूप में दर्शाया जा सकता है, या तार की सूची / सारणी / सूची।

अनुगामी newlines वैकल्पिक हैं।

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

आउटपुट ब्लॉक में हमेशा पंक्तियों की संख्या के बराबर या उससे अधिक स्तंभ होंगे।

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

इनपुट:

A

आउटपुट:

A

इनपुट:

.
LI
PO.
PV.
CE
G

आउटपुट:

.I..
LOVE
PPCG

इनपुट:

M
DA
AIT
LAR
SGI
/OX
/N
/

आउटपुट:

MATRIX
DIAGON
ALS///

क्या इनपुट स्ट्रिंग्स में कोई स्पेस होगा?
kirbyfan64sos

इसके अलावा, अनुगामी व्हाट्सएप की अनुमति है?
kirbyfan64sos

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

जवाबों:


5

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

{_z,,Nf*W%\.+zW%sN%}

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


इनपुट प्रारूप का लाभ उठाते हुए (और रिक्त स्थान पर नहीं):{_z,,Nf*W%\.+zW%sN%}
डेनिस

@ डेनिस क्या मैं घुंघराले ब्रेसिज़ की गिनती करता हूं, क्योंकि यह एक "फ़ंक्शन" है? मैं सीजेएम गोल्फ में नया हूं।
लिन

हाँ। ब्लॉक (घुंघराले ब्रैकेट के साथ) सीजेएम एक अनाम फ़ंक्शन / लैम्ब्डा का निकटतम विकल्प है, इसलिए यह 20 बाइट्स के रूप में गिना जाता है।
डेनिस

3

अजगर 2, 84

L=[]
for w in input():
 i=0;L+=[''][:len(w)-len(L)]
 for c in w:i-=1;L[i]+=c
print L

इनपुट और आउटपुट स्ट्रिंग्स की सूची है।

input: ['A','EB','IFC','JGD','KH','L']
output: ['ABCD', 'EFGH', 'IJKL']

Lआउटपुट के लिए लाइनों की सूची बनाई गई है क्योंकि हम इनपुट पढ़ते हैं। प्रत्येक नए चरित्र को एक पंक्ति से जोड़ा जाता है, जो अंतिम पंक्ति से शुरू होता है i=-1और सामने की ओर बढ़ता है।

जब भी सूची में जोड़ने के लिए नई लाइन बहुत लंबी होती है, एक नई खाली लाइन जोड़ दी जाती है L+=[''][:len(w)-len(L)]:। मैं इस हिस्से को छोटा करने के तरीके की उम्मीद कर रहा हूं।


1

पायथन 2, 165 162 169 163 बाइट्स

import sys
j=map(list,[e.strip() for e in sys.stdin.readlines()])
r=max(1,len(j)-2)
while j:
 s=''
 for b in range(r):s+=j[b].pop()
 j=[e for e in j if e]
 print s

इनपुट से सभी लाइनों को पढ़ता है, फिर उन्हें सूचियों की सूची में बदल देता है। लूप्स जबकि उस सूची में तत्व होते हैं। प्रत्येक पुनरावृत्ति में, यह आउटपुट में कॉलम की संख्या के बराबर आंतरिक सूचियों की संख्या से अंतिम तत्व को पॉप करता है। फिर सूची को साफ किया जाता है और मुद्रित लाइन।

उदाहरण:

$ python rectangle.py << EOF
> A
> EB
> IFC
> JGD
> KH
> L
> EOF
ABCD
EFGH
IJKL
$ python rectangle.py << EOF
> .
> LI
> PO.
> PV.
> CE
> G
> EOF
.I..
LOVE
PPCG
$ python rectangle.py << EOF
> M
> DA
> AIT
> LAR
> SGI
> /OX
> /N
> /
> EOF
MATRIX
DIAGON
ALS///

6 बाइट बचाने के लिए w0lf के लिए धन्यवाद ।

पीवाईजी , 139 बाइट्स

j=M(L,[e.strip() for e in sys.stdin.readlines()])
r=Mx(1,len(j)-2)
while j:
 s=''
 for b in R(r):s+=j[b].pop()
 j=[e for e in j if e]
 P(s)

क्या आखिरी s=''जरूरत है?
क्रिस्टियन लुपस्कू

आह, यह वहाँ घुस गया; धन्यवाद!
सेलेओ

0

अजगर, 332 325 बाइट्स

क्योंकि अजगर।

n=[]
v=[]
x=y=-1
l=0
s=""
while 1:
 k=raw_input()
 if len(k)<1:break
 n.append(k)
while 1:
 if l>len(n):break
 y+=1
 try:
    x+=1;k=n[y][x]
    if[x,y]not in v:s+=k;v.append([x,y])
    else:raise
 except:
    try:
     x-=1;k=n[y][x]
     if[x,y]not in v:s+=k;v.append([x,y])
    except:s+="\n";x=-1;y=l;l+=1
print s[:s.rstrip("\n").rfind("\n")]

1
यह एक [कोड-गोल्फ] प्रश्न है, जिसका अर्थ है कि उत्तर को यथासंभव छोटा होना चाहिए। अधिक स्थान बचाने के लिए कुछ व्हाट्सएप को हटाने और अपने एल्गोरिदम को सरल बनाने का प्रयास करें। की जाँच करें अजगर में गोल्फ पर इस महान संसाधन अगर आप विचारों की जरूरत है।
DankMemes

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