पाठ का एक पृष्ठ स्थानांतरित करें


28

EDIT I ने कुछ चीजों को बनाने के लिए नियमों के शब्दों को संशोधित किया जो कि अधिक स्पष्ट थे। मैंने स्पष्ट भ्रम के कुछ बिंदुओं को स्पष्ट करने के लिए कुछ जोर दिया, और फ़ंक्शन के बजाय स्टैंडअलोन प्रोग्राम बनाने के विकल्प को स्पष्ट रूप से परिभाषित किया।

यहां लक्ष्य एक फ़ंक्शन बनाना है जो एक टेक्स्ट फ़ाइल (या स्ट्रिंग) लेता है और इसे स्थानांतरित करता है ताकि लाइनें कॉलम बन जाएं और इसके विपरीत।

उदाहरण:

मैं एक पाठ हूँ।
मुझे बदल दो।
क्या आप यह कर सकते हैं?

का परिणाम:

आईटीसी
 रा
आन
एम.एन.
 एसवाई
एपीओ
 कहां
ts
eed
XO
टीएम
.ei
 .t
  ?

नियम:

  • आप ग्रहण करने के लिए है कि इसमें केवल रिक्त स्थान में इस्तेमाल किया चरित्र अनुमति दी जाती है " "और "\n"और वहाँ किसी भी लाइन पर कोई पिछली श्वेत रिक्ति है।
  • आप मान सकते हैं कि फ़ाइल ASCII है। आप किस एंडलाइन मार्कर का उपयोग करना चाहते हैं, यह आपके ऊपर है। (CRLF या LF) उदाहरण पर इसे सही ढंग से काम करना चाहिए, लेकिन यह किसी भी इनपुट पर भी काम करना चाहिए जो उपरोक्त मान्यताओं को पूरा करता है।
  • आपको स्तंभों को लाइन में रखने के लिए रिक्त स्थान (उदाहरण के अनुसार) सम्मिलित करना पड़ सकता है।
  • आपके परिणाम में किसी भी पंक्ति में अनुगामी व्हाट्सएप नहीं होना चाहिए
  • अंतिम न्यूलाइन वर्ण (अंतिम पंक्ति के लिए) वैकल्पिक है।
  • यह या तो एक फ़ंक्शन या पूर्ण प्रोग्राम होना चाहिए। यदि आपका कार्य एक स्ट्रिंग को स्वीकार करता है, तो उसे परिणाम को स्ट्रिंग के रूप में वापस करना चाहिए। यदि यह फ़ाइल नाम स्वीकार करता है, तो आप उस फ़ाइल का नाम वापस करते हैं जहां आपने परिणाम सहेजा था। आपको अतिरिक्त प्रोग्राम लिखने की अनुमति है जो STDIN से इनपुट स्वीकार करता है और STDOUT को सही परिणाम देता है; यदि आप ऐसा करते हैं, तो आपको STDERR में कुछ भी आउटपुट नहीं करना चाहिए ।
  • सबसे छोटी प्रक्रिया जीत जाती है, लेकिन मैं किसी भी उत्तर को पसंद करूंगा।

नियमों के आधार पर, उदाहरण पर आउटपुट 53 या 52 बाइट्स लंबा (एलएफ न्यूलाइन्स के लिए) है, इस पर निर्भर करता है कि अंतिम न्यूलाइन शामिल है या नहीं।

नोट: यह एक विशिष्ट आवश्यकता नहीं है, लेकिन यदि आपका कार्य, जब दो बार क्रमिक रूप से चलाया जाता है, तो मूल के समान नहीं होता है (अंतिम नई पंक्ति भिन्न हो सकती है, और फ़ाइल के अंत में कोई खाली लाइनें हटा दी जाएंगी), तो आप हैं शायद नियमों में से एक को तोड़ना।


मैंने भाषा निर्मित इंसिडेंस पर रोक हटाने का फैसला किया।
टिम सेगिन

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

क्या आप एक समारोह के लिए पूछ रहे हैं? क्या STDIN से स्ट्रिंग को स्वीकार करना और STDOUT को सही आउटपुट प्रिंट करना स्वीकार्य है?
जस्टिन

@Quincunx हां, मैं स्वीकार कर रहा हूं कि "फ़ंक्शन" के रूप में। मैं उस बिंदु पर स्पष्ट होने के लिए नियमों को बदल दूंगा।
टिम सेगिन

जब तक आप अनुगामी ws की अनुमति नहीं देते तब तक टेक्स्ट ट्रांज़ोज़ फ़ंक्शन एक इंवोल्यूशन नहीं हो सकता है। उदाहरण: "a * c \ ndef \ n" -> TT-> "a * \ ncd \ nef \ n" ~ "a \ ncd \ nef \ n" -> TT-> "acd \ nef \ n", जहाँ " *
डब्ल्यूएस

जवाबों:



4

जे ( ३१ ४०)

f=:3 :';(,&LF@dlb&.|.)&.><"1|:>LF cut y'

यह एक फ़ंक्शन है जो एक स्ट्रिंग लेता है, और एक स्ट्रिंग लौटाता है (यानी सही स्थानों में डाले गए लाइनफ़ीड के साथ एक वर्ण वेक्टर , और मैट्रिक्स नहीं।)

संपादित करें: किसी भी लाइन पर कोई अनुगामी व्हाट्सएप नहीं।

परीक्षा:

   f=:3 :';(,&LF@dlb&.|.)&.><"1|:>LF cut y'

   string=:stdin''
I am a text.
Transpose me.
Can you do it?
^D

   $string
42
   $f string
53
   f string
ITC
 ra
aan
mn
 sy
apo
 ou
ts
eed
x o
tm
.ei
 .t
  ?

मुझे आशा है कि आपने ध्यान दिया होगा कि मैंने बिल्ट-इन के लिए निषेध को हटा दिया है।
टिम सेगिन

@ समय: हाँ, अन्यथा मैंने यह पोस्ट नहीं किया होता।
मारिनस

क्या अनुगामी व्हाट्सएप नियम अस्पष्ट रूप से लिखा गया है? आपको मेरी अपेक्षा से अधिक वर्ण प्रतीत होते हैं।
टिम सेगिन

मेरे पास कितने पात्र होने चाहिए? स्ट्रिंग पर अंतिम वर्ण हैं ?\n
मारिनस

1
@ समय: मैं इसे केवल एपीएल में ४४ पर ला सकता हूं। मुख्य कारण यह है कि एपीएल cutया तो dlbडिफ़ॉल्ट रूप से प्रदान नहीं करता है और उन्हें लिखने से एपीएल में भी वर्णों का एक समूह बन जाता है।
मारिनस ५'१४ को

4

रूबी 111

golfed:

def f t;s=t.lines;s.map{|l|l.chomp.ljust(s.map(&:size).max).chars}.transpose.map{|l|l.join.rstrip+?\n}.join;end

Ungolfed:

def transpose_text(text)
  max_length = text.lines.map(&:size).max
  text.lines.map do |line|
    line.chomp.ljust(max_length).chars
  end.transpose.map do |chars|
    chars.join.rstrip + "\n"
  end.join
end

रूबी में एक सरणी ट्रांसपोज़ फ़ंक्शन होता है, इसलिए यह बस लाइनों को बाहर निकालता है, उन्हें वर्णों की एक सरणी में बदल देता है, रूबी के एरे # ट्रांसपोज़ फ़ंक्शन का उपयोग करता है, फिर वर्णों के सरणी को वापस लाइनों में बदल देता है।

गोल्फिंग यह केवल एकल-चरित्र पहचानकर्ताओं का उपयोग कर रहा था, रिक्त स्थान हटा रहा था, text.lines के लिए एक अस्थायी का उपयोग कर रहा था, और गणना को max_length इनलाइन के लिए डाल रहा था (दक्षता के लिए कोई बिंदु नहीं हैं)।


अच्छा लगा। आप के "\n"साथ बदलकर एक और चरित्र को अलग कर सकते हैं ?\n
OI

इसके अलावा, .to_aबहुत बढ़िया है। आप वहां अन्य 5 वर्ण प्राप्त कर सकते हैं।
OI

@OI धन्यवाद, मैं आपको छह पात्रों का एहसानमंद हूं। मैंने इसे काम पर बंद कर दिया, जो 1.9.3 का उपयोग करता है। To_a को 1.9.3 में आवश्यक है, लेकिन 2.0 में नहीं।
वेन कॉनराड

समझा। जानकार अच्छा लगा। रूबी में कुछ स्ट्रिंग तरीकों को दिखाने के लिए यहां तक ​​कि हमें विचार करें कि मुझे अधिक बार उपयोग करना चाहिए। चीयर्स!
OI

2
कुछ कोड गोल्फ चुनौतियों ने माणिक्य सीखने में मेरी रुचि को नवीनीकृत किया है।
टिम सेगिन

4

आर, 171

function(e){p=strsplit
x=t(plyr::rbind.fill.matrix(lapply(p(p(e,"\n")[[1]],""),t)))
x[is.na(x)]=" "
cat(apply(x,1,function(y)sub(" *$","",paste(y,collapse=""))),sep="\n")}

उपयोग उदाहरण:

text <- "I am a text.
Transpose me.
Can you do it?"


(function(e){p=strsplit
x=t(plyr::rbind.fill.matrix(lapply(p(p(e,"\n")[[1]],""),t)))
x[is.na(x)]=" "
cat(apply(x,1,function(y)sub(" *$","",paste(y,collapse=""))),sep="\n")})(text)

ITC
 ra
aan
mn
 sy
apo
 ou
ts
eed
x o
tm
.ei
 .t
  ?

ट्रेलिंग व्हाट्सएप को हटा दिया जाता है।


4

पायथन 2.7 ( 97 79 94 90)

संपादित करें: फ़ंक्शन की आवश्यकता को याद किया;

मुझे पूरा यकीन है कि इस पर सुधार किया जाएगा क्योंकि मैं यहाँ एक शुरुआत की तरह हूँ, लेकिन इसके साथ शुरू करने के लिए;

c=lambda a:'\n'.join(''.join(y or' 'for y in x).rstrip()for x in map(None,*a.split('\n')))

कोड splitपंक्तियों के एक वेक्टर में स्ट्रिंग को विभाजित करने के लिए एक सरल का उपयोग करता है । इसके बाद mapएक फ़ंक्शन मान None(एकता फ़ंक्शन) और zip_longestवैलेट ऑपरेटर को वेक्टर को स्थानांतरित करने और पैड करने के लिए उपयोग करता है ( Python3 में समान कार्यक्षमता )

कोड के बाकी हिस्से केवल Noneअंतरिक्ष में जाते हैं, ट्रिम्स और मैट्रिक्स को फिर से एक ही स्ट्रिंग पर फिर से जोड़ते हैं।

>>> a = 'I am a text.\nTranspose me.\nCan you do it?'
>>> c(a)                                                                            
'ITC\n ra\naan\nmn\n sy\napo\n ou\nts\need\nx o\ntm\n.ei\n .t\n  ?'
>>> len("""c=lambda a:'\n'.join(''.join(y or' 'for y in x).rstrip()for x in map(None,*a.split('\n')))""")
88
# (+2 since `\n` is considered by `len` to be a single char)

बिलकुल कंप्लेंट नहीं। यह होना चाहिए एक फ़ंक्शन ले एक स्ट्रिंग लेता है और एक स्ट्रिंग देता है।
टिम सेगिन

@ टिम हां, वह चूक गया। अब तय है, धन्यवाद।
जोआचिम इस्कासन

+1 आप इस समय सबसे छोटी आज्ञाकारी प्रविष्टि हैं।
टिम सेगिन

का अच्छा उपयोग map। मैं उस जगह का उपयोग करने की तलाश में रहता हूं ... और आपने मुझे इसके लिए हरा दिया। ;)
बूथबाई

4

बैश + कोरुटिल्स + सेड, 83

eval paste `sed 's/.*/<(fold -w1<<<"&")/'`|expand -t2|sed 's/\(.\) /\1/g;s/ \+$//'

foldऔर pasteमहत्वपूर्ण काम करते हैं। बाकी सिर्फ स्वरूपण है।

स्टड से इनपुट स्वीकार करता है और स्टडआउट को आउटपुट:

$ < tr.txt ./transposefile.sh
ITC
 ra
aan
mn
 sy
apo
 ou
ts
eed
x o
tm
.ei
 .t
  ?
$ < tr.txt ./transposefile.sh | ./transposefile.sh
I am a text.
Transpose me.?
Can you do it
$ 

आप नियम को तोड़ते हुए दिखाई देते हैं "आपके परिणाम में किसी भी लाइन पर व्हाट्सएप नहीं होना चाहिए।"
टिम सेगुईने

@TimSeguine उफ़ मुझे याद है कि एक। मैंने अभी इसे लेटेस्ट एडिट में फिक्स किया है।
डिजिटल ट्रामा

3

सी (278 बाइट्स)

संपादित करें: यह वास्तव में नियमों को तोड़ता है, क्योंकि यह एक तर्क के रूप में एक फ़ाइल नाम लेता है लेकिन स्टडआउट को लिखता है। मैं इसे बाद में किसी फ़ाइल पर लिखने के लिए संपादित करूँगा और फिर फ़ाइल नाम को stdout में प्रिंट करूँगा।

यह मेरा पहला कोड गोल्फ है, इसलिए दया करो। कुछ सादे पुराने सी। में इनपुट रखें test.txtऔर इसे चलने दें!

clang transpose.c -o transpose && ./transpose test.txt

#import <stdio.h>
#import <stdlib.h>
#import <string.h>

#define BUFFER_SIZE 1024

#define MAX(A,B) ((A)>(B)?(A):(B))

int main(int argc, char **argv) {
    char line[BUFFER_SIZE];

    FILE *f; int nLines, maxLen;

    f = fopen(argv[1], "r");
    while(!feof(f) && fgets(line, BUFFER_SIZE, f)) {
        nLines++;
        maxLen = MAX(maxLen, strlen(line));
    }
    fclose(f);

    for (int charPos = 0; charPos < maxLen; charPos++) {
        f = fopen(argv[1], "r");
        for (int linePos = 0; linePos < nLines; linePos++) {
            fgets(line, BUFFER_SIZE, f);
            printf("%c", charPos < strlen(line) && line[charPos] != '\xA' ? line[charPos] : ' ');
        }
        printf("\n");
        fclose(f);
    }

    return 0;
}

छोटे चर नामों का उपयोग करके, gratuitous स्वरूपण को हटाने और फ़ाइल हैंडल को लीक करने की अनुमति देता है, और सभी चेतावनियों को अक्षम करने से यह 278 बाइट्स तक कम हो जाता है। (चूंकि यह निहित आयात का उपयोग करता है, इसलिए यह सभी प्रणालियों पर ठीक से लिंक नहीं कर सकता है। मेरी मशीन पर काम करता है!)

#import <stdio.h>
int main(int C,char**V){char L[1024];int A,B,D,I,J,*F=fopen(V[1],"r");while(!feof(F)&&fgets(L,1024,F)){A++;D=strlen(L);B=B>D?B:D;}for(I=0;I<B;I++){F=fopen(V[1],"r");for(J=0;J<A;J++)fgets(L,1024,F)&&printf("%c",I<strlen(L)&&L[I]!='\n'?L[I]:' ');printf("\n");}}

मुझे लगता है कि आप अपनी intकुछ घोषणाओं को कम करने के लिए निहितार्थ का लाभ उठा सकते हैं , या क्या यह अब अवैध है?
टिम सेगिन

हाँ, मैं stdlib.h या string.h आयात नहीं करने के लिए बाद के संपादन में उपयोग कर रहा हूँ। अगर मैं stdio.h आयात नहीं करता, तो यह रन-वे पर segfaults करता है।
15

नियमों पर अपनी टिप्पणी संपादित करने के लिए: आपका दूसरा विकल्प स्टड से इनपुट स्वीकार करना है। मैं इस बात पर भी विचार करूंगा। और यह भी, मैं एक सरसरी नज़र से नहीं बता सकता: क्या यह ट्रांज़िशन संस्करण में लाइनों के सिरों से व्हॉट्सएप को स्ट्रिप करता है?
टिम सेगिन

चूंकि मैंने रैम में स्टोर करने से बचने के लिए फाइल को कई बार री-रीड किया, इसलिए stdio से पढ़ना शायद कठिन होगा। :) मुझे यकीन नहीं है कि व्हाट्सएप छीन लिया जाना चाहिए। अभी मुझे नहीं लगता है कि यह किसी भी तरह से अलग करना है, दुर्भाग्य से। मुझे उस पर भी काम करना पड़ेगा।
wjl

कीवर्ड A,B,D,I,J,*Fसे बचने के लिए, आप वैश्विक चर के रूप में घोषित कर सकते हैं int। इसी तरह, आप घोषणा और तर्क intसे दूर कर सकते हैं । में , कई स्थानों में वैकल्पिक है। mainCCint
कोनराड बोरोस्की

3

ऑटोहॉटकी 210

f(i){
StringSplit,o,i,`n
m:=0
loop % o0 {
a:=A_index
if (t:=Strlen(p:=o%a%))>m
m:=t
StringSplit,l%a%,o%a%
}
loop % m {
a:=A_index,n:=""
loop % o0
n.=(j:=l%A_index%%a%)=""?" ":j
s.=Rtrim(n," ") "`n"
}
return s
}

परीक्षा

text=
(
I am a text.
Transpose me.
Can you do it?
)
msgbox % f(text)

मैं इसे एक परीक्षण नहीं कर सकता, लेकिन यह आज्ञाकारी लग रहा है
टिम सेगिन

3

रूबी: 88 अक्षर

(प्रकाशित किया गया है क्योंकि यह छोटा है तो अन्य रूबी समाधान। यह नहीं जांचा गया कि क्या मेरा कोड उन की तुलना में कुछ भी नया परिचय देता है। यदि आपने पहले से ही एक रूबी समाधान पोस्ट किया है और आपको लगता है कि यह ज्यादातर आपकी एक प्रति है, तो कृपया टिप्पणी करें और मैं अपना उत्तर दूंगा। )

f=->t{l=t.split$/;r=[""]*m=l.map(&:size).max;l.map{|l|m.times{|i|r[i]+=l[i]||" "}};r*$/}

नमूना रन:

irb(main):001:0> f=->t{l=t.split$/;r=[""]*m=l.map(&:size).max;l.map{|l|m.times{|i|r[i]+=l[i]||" "}};r*$/}
=> #<Proc:0x99a9e68@(irb):1 (lambda)>

irb(main):002:0> sample='I am a text.
irb(main):003:0' Transpose me.
irb(main):004:0' Can you do it?'
=> "I am a text.\nTranspose me.\nCan you do it?"

irb(main):005:0> puts f[sample]
ITC
 ra
aan
mn
 sy
apo
 ou
ts
eed
x o
tm
.ei
 .t
  ?
=> nil

irb(main):006:0> puts f[f[sample]]
I am a text.
Transpose me.
Can you do it?
=> nil

+1 आपने इसे किसी भी मामले में बेहतर समझा।
टिम सेगिन

3

बैश, 124 बाइट्स

D=`mktemp -d`;split -l1 - $D/;for F in $D/*;do grep -o . $F>$F+
done;paste $D/*+|sed -e's/\([^\t]\)\t/\1/g;s/\t/ /g;s/ *$//'

यह मानक इनपुट पढ़ता है और मानक आउटपुट लिखता है। कोशिश करो:

echo $'I am a text.\nTranspose me.\nCan you do it?' | script.sh

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

  • splitएकल लाइनों में इनपुट (अस्थायी निर्देशिका में फ़ाइलें $D)
  • एकल वर्णों में विभाजन रेखाएँ grep(फ़ाइलें * +)
  • लेआउट वर्णों का साथ-साथ उपयोग paste(TAB- अलग कॉलम)
  • संरेखण TAB को हटा दें, भराव TABs को BLANKs से बदलें, ट्रिम का उपयोग करें sed

संपादित करें:

  • -9: निकाले गए साफ-सुथरे कोड ;rm -r $D(धन्यवाद टिम)
  • -2: +के _रूप में प्रत्यय और छोटा ${F}_करने के बजाय का उपयोग करें$F+
  • -3: Lविभाजन परिणाम फ़ाइलों से उपसर्ग को हटा दें

कोड गोल्फ के प्रयोजनों के लिए, आपको जरूरी नहीं है कि आप खुद के बाद अच्छा और साफ रहें। आप rmअपने कैरेक्टर काउंट से थोड़ा हटकर कर सकते हैं ।
टिम सेगिन

2

रूबी - 144 अक्षर

यहाँ मेरा पहला प्रयास है, गोल्फ:

def f t
t.split(?\n).each{|l|l<<' 'until l.size==t.split(?\n).map(&:size).max}.map{|x|x.split('')}.transpose.map{|l|l.join.rstrip}.join(?/n)
end

आउटपुट के लिए, चलाएं puts f textजहां textकोई भी मल्टी-लाइन स्ट्रिंग उपरोक्त नियमों का पालन करता है। नीचे दिया गया ungolfed संस्करण है:

def text_transpose(text)
  lines = text.split(?\n)
  maxlen = lines.map(&:size).max
  lines.each { |line| line << ' ' until line.size == maxlen }
       .map  { |line| line.split('') }.transpose
       .map  { |char| char.join.rstrip }.join(?\n)
end

रूबी में एक समान, लेकिन अंततः बेहतर समाधान के लिए, ऊपर वेन कॉनराड का कोड देखें।


मेरे transposeलिखे जाने से पहले मैंने आपके उत्तर पर ध्यान नहीं दिया । यह मेरे लिए अनिवार्य रूप से आपके उत्तर को फिर से लिखना नहीं है, केवल थोड़ा बेहतर है। :(
वेन कॉनरैड

2
मुझे कोई आपत्ति नहीं है। आप स्वतंत्र रूप से अपने कोड के साथ आए और यह एक दौड़ नहीं है। मैंने आपके समाधान से निश्चित रूप से कुछ सीखा है। क्या आपने वापस आयोजित किया था क्योंकि मैंने उपयोग किया था transpose, यह संभव है कि एक बेहतर रूबी समाधान सामने नहीं आया होगा। प्रोग्रामिंग के बारे में मुझे जो सबसे ज्यादा पसंद है उनमें से एक है विचारों को सहयोग करना और पर-परागण की इच्छा। जब तक हम फिर मिलते हैं, दयालु महोदय। चीयर्स!
OI

2

PHP 194

function x($a){$a.="\n";$s=strlen($a);$i=0;while($c<$s)if($a{$c}!="\n")$b[$i++].=$a{$c++};else{$c++;for(;$i<$s;$i++)$b[$i].=" ";$i=0;}ksort($b);return rtrim(implode("\n",array_map("trim",$b)));}

गैर golfed:

function x($a) {
    $a.="\n";
    $s=strlen($a);
    $i=0;
    while($c<$s)
        if($a{$c}!="\n")
            $b[$i++].=$a{$c++};
        else{
            $c++;
            for(;$i<$s;$i++)
                $b[$i].=" ";$i=0;
        }
    ksort($b);
    return rtrim(implode("\n",array_map("trim",$b)));
}

यह मेरा पहला गोल्फ प्रयास है, तो कृपया दयालु बनें! इसके अलावा, सुझावों / सुझावों की बहुत सराहना की जाएगी!


यह मेरे php प्रयास से छोटा है। आप "चारों ओर से छुटकारा पाने के द्वारा दो पात्रों को बचा सकते हैं "trim"। php एक चेतावनी देगा, लेकिन यह ठीक काम करता है।
टिम सेगिन

@TimSeguine स्क्रीन पर आउटपुट सही हालांकि? आपको @चेतावनियों को दबाने के लिए उपयोग करना होगा ।
ericw31415

@ ऐरिक मैं थोड़ी देर में सक्रिय नहीं हुआ, इसलिए राय बदल सकती है, लेकिन अतीत में इसे मानक त्रुटि के लिए अप्रासंगिक डेटा आउटपुट के लिए स्वीकार्य माना गया था।
टिम सेगिन

यह अनुमत है? अगर यह सच है, तो मुझे नहीं पता था।
ericw31415

2

MATHEMATICA 117 वर्ण

t = "I am a text.\nTranspose me.\nCan you do it?";

f=(m=Length/@(f=Flatten[Characters/@StringSplit[#,"\n"],{{2},{1}}])//Max;
StringJoin@@@(PadLeft[#,m," "]&/@f)//Column)&

मैं इस एक का परीक्षण नहीं कर सकता, तो क्या आप यह सत्यापित कर सकते हैं कि यह लाइनों के सिरों पर ट्रालिंग व्हाट्सएप को हटा देता है? साथ ही यह किसी फ़ंक्शन को परिभाषित करने के लिए (पहली नज़र में) प्रकट नहीं होता है, जिसके लिए नियमों की आवश्यकता होती है।
टिम सेगिन

हाय @Tim, अब यह एक फंक्शन है f! .. tks
मुरा

2

पर्ल (92 + 1)

स्टडिन पढ़ता है और स्टडआउट को लिखता है। के स्कोर में 1 जोड़ रहा हैsay

@L=map[grep!/\n/,split//],<>;do{$_=join'',map shift@$_||$",@L;s/ +$//;say}while grep@$_>0,@L

2

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

CJam इस चुनौती से नया है, इसलिए यह उत्तर स्वीकार किए जाने के योग्य नहीं है।

User23013 द्वारा काफी छोटा किया गया।

qN/_z,f{Se]}z{S+e`);e~N}%

इसका परीक्षण यहां करें।

qN/                       "Read input, split into lines.";
   _z,                    "Transpose, get length (find maximum line length).";
      f{Se]}              "Pad each line to that length with spaces.";
            z             "Transpose.";
             {         }% "Map this block onto each line in the result.";
              S+          "Add a space to ensure there's at least one.";
                e`        "Run-length encode.";
                  );      "Discard the trailing run of spaces.";
                    e~    "Run-length decode";
                      N   "Push a newline.";

योग्य है या नहीं, यह एक महान देर से उत्तर है। इस उत्तर के लिए सबसे कठिन भाग की तरह लगता है अनुगामी रिक्त स्थान के साथ काम कर रहा था।
टिम सेगिन

@TimSeguine वास्तव में। एक अंतर्निहित ट्रिमिंग ऑपरेटर के बिना, CJam में मैन्युअल रूप से ऐसा करना आश्चर्यजनक रूप से बोझिल है (user23013 के सुझाव ने पहले से ही इसमें काफी सुधार किया है)।
मार्टिन एंडर

2

जावास्क्रिप्ट, 103

s=>[...s].map((_,i)=>s.split`
`.map(b=>r+=b[q=b[i]||q,i]||' ',r=q='')&&r.replace(/ *$/,q?`
`:q)).join``

कम गोल्फ वाला

s=>[...s].map(
     // we need 'i' ranging from 0 to the length of the longest input line
     // so we scan all the input string, that is surely longer
     // but we need to check that after some point the output must be empty
     (_, i) => ( 
       r = '', // the current output row, starts empty
       q = '', // flag to check if we are beyond the longest line
       s.split('\n') // split in rows
       .map( 
         b => ( // for each input row in b
           q = b[i] || q, // if there is a char at position i in b, i goes to q
           r += b[i] || ' ' // add to output the char at position i or a fill space
         )
       ),
       q // if q is still '', we are beyond the longest input line 
       ? r.replace(/ *$/,`\n`) // trim leading space and add newline
       : '' // no output 
     )
   ).join('')

परीक्षा

F=
s=>[...s].map((_,i)=>s.split`
`.map(b=>r+=b[q=b[i]||q,i]||' ',r=q='')&&r.replace(/ *$/,q?`
`:q)).join``

function go() {
  var text=I.value
  var output = F(text)
  O.textContent = output
}

go()
#I { width:50%; height:5em }
<textarea id=I>I am a text.
Transpose me.
Can you do it?</textarea><br>
<button onclick='go()'>Transpose</button>
<pre id=O></pre>


2

रेटिना , 40 बाइट्स

P`.+
~L0$`.
L,$.%'vs,$.(x$%=),`.+
m` *$

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

इस कार्यक्रम के आधार पर जो मैंने आयत के किसी भी आकार को स्थानांतरित करने के लिए बनाया था, जो कि किसी ज्ञात आकार के आयत को स्थानांतरित करने के लिए लियो के सुझाव का उपयोग करता है ।

संपादित करें: अधिक गोल्फ और अब लाइनों पर अनुगामी स्थान नहीं है।


2

पर्ल 5 , 25 बाइट्स

ध्यान दें कि यह एएनएसआई से बचने के क्रम का उपयोग करता है और जैसे कि टीआईओ पर काम नहीं करता है, फिर भी आप इसे यहां कार्रवाई में देख सकते हैं

$"="[1D";$_="[1;$.H@F"

व्याख्या

यह कोड पहले सूची विभाजक ( $") मान को वर्टिकल टैब में बदलता है , इसके बाद ANSI एस्केप अनुक्रम के लिए 'गो बैकवर्ड 1 कॉलम' ( \x1b[1D) होता है, फिर हम अंतर्निहित मुद्रित चर $_को एक स्ट्रिंग बनाते हैं जो ANSI एस्केप अनुक्रम से शुरू होता है 'लाइन 1 कॉलम पर छपाई शुरू करें $.(जहां $.पाठ की वर्तमान लाइन है)' ( \x1b1;$.H) और सूची को इंटरपोलेट करता है @F(जो उस लाइन के सभी वर्णों की सूची है, -aजो खाली विभाजन पैटर्न के साथ ऑटोसप्लिट ( ) द्वारा पॉप्युलेट किया गया है ) ( -F) जो $"प्रत्येक आइटम के बीच की सामग्रियों को रखता है, पिछले चरित्र के बाद निरंतर आउटपुट के बजाय कर्सर को लंबवत रूप से नीचे ले जाता है।

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


1
हे भगवान, सरासर आतंक! मुझे यह पसंद है!
टिम सेगिन

1

C ++ (243 वर्ण)

यहां एक फ़ंक्शन है जो एक स्ट्रिंग लेता है और वापस करता है।

मैं एक दो दर्जन चार्ट मुंडवा सकता था, लेकिन इसे बेवकूफ नहीं कोड के रूप में रखने का फैसला किया (तेजी से चलता है, ठीक पढ़ता है)। शायद मैंने केवल यह करने का फैसला किया क्योंकि यह मेरा पहला कोड गोल्फ है ... मैं अभी तक कट्टर नहीं हूं :)

string f(string s){stringstream ss(s);vector<string> v;for(size_t i=0;getline(ss,s);++i){if(v.size() < s.size())v.resize(s.size());for(size_t j=0;j<s.size();++j){v[j].resize(i,' ');v[j].push_back(s[j]);}}s="";for(auto& i:v)s+=i+'\n';return s;}

प्रारूपण के साथ:

string f(string s)
{
    stringstream ss(s);
    vector<string> v;

    for(size_t i = 0; getline(ss, s); ++i)
    {
        if(v.size() < s.size())
            v.resize(s.size());

        for(size_t j = 0; j < s.size(); ++j)
        {
            v[j].resize(i, ' ');
            v[j].push_back(s[j]);
        }
    }

    s = "";
    for(auto& i : v)
        s += i + '\n';

    return s;
}

मुझे लगता है आप का उपयोग करें using namespace std;
कोनराड बोरोस्की

@xfix सामान्य रूप से नहीं, लेकिन मैंने इसके लिए किया
डेविड

1
अगर मैं अछूता हो रहा हूं, तो मैं कहूंगा कि using namespace std;चरित्र की गिनती में जोड़ा जाना चाहिए।
टिम सेगिन

1

पायथन 2.7 - 115 वर्ण :

एक लाइन:

>>> a
'I am a text.\nTranspose me.\nCan you do it?'

>>> "".join(["".join(i)+'\n' for i in zip(*[x+" "*(len(max(a.splitlines(), key=len))-len(x)) for x in a.splitlines()])])
'ITC\n ra\naan\nmn \n sy\napo\n ou\nts \need\nx o\ntm \n.ei\n .t\n  ?\n'

और एक क्लीनर में मुद्रण:

>>> print "".join(["".join(i)+'\n' for i in zip(*[x+" "*(len(max(a.splitlines(), key=len))-len(x)) for x in a.splitlines()])])
ITC
 ra
aan
mn 
 sy
apo
 ou
ts 
eed
x o
tm 
.ei
 .t
  ?

115 वर्णों में:

>>> len(""""".join(["".join(i)+'\n' for i in zip(*[x+" "*(len(max(a.splitlines(), key=len))-len(x)) for x in a.splitlines()])])""")
115

आप नियमों की आवश्यकता की तरह अपनी तर्ज पर अनुगामी व्हाट्सएप नहीं छीन रहे हैं।
टिम सेगिन

इसके अलावा, यह वास्तव में 116 बाइट्स है, \nइसे lenएक चार वर्ण माना जाता है , लेकिन यह दो है :)
जोआचिम इस्कसन

1
यूनिक्स पर @JoachimIsaksson \nएक है। तो मैं कहता हूं कि एक ठीक है।
टिम सेग्यूनी

@ टिम len("\n")1 दिखाएगा, हालांकि यह निश्चित रूप से स्रोत कोड में 2 अलग-अलग वर्ण हैं। स्रोत को फ़ाइल में सहेजने से lsप्रदर्शन 116 हो जाएगा । बस यह कहना कि lenकोड आकार को मापने का सबसे अच्छा तरीका नहीं है, क्योंकि मापने से पहले संसाधित किए जा रहे पात्रों से बचना है :)
Joachim Isaksson

@JoachimIsaksson ओह, क्षमा करें, मुझे आपकी बात गलत लगी।
टिम सेगिन

1

गोल्फक्राफ्ट, 51 वर्ण

n%.{,}%$-1=" "*:y;{y+y,<}%zip{n\+0{;).32=}do}%((;\+

यह पहला प्रयास है; मुझे संदेह है कि इसमें सुधार किया जा सकता है। अधिकांश कोड पैडिंग और ट्रेलिंग स्पेस रिमूवल आवश्यकताओं का अनुपालन करना है - उनके बिना, बस n%zip n*पर्याप्त होगा।

Ps। निम्नलिखित 46 -चैकर संस्करण दिए गए नमूना इनपुट के लिए कार्य करेगा, लेकिन यदि कोई इनपुट कॉलम पूरी तरह से रिक्त स्थान के होते हैं तो दुर्घटनाग्रस्त हो जाएगा:

n%.{,}%$-1=" "*:y;{y+y,<}%zip{0{;).32=}do]}%n*

मुझे लगता है कि यह अयोग्य घोषित करने के लिए पर्याप्त है, भले ही चुनौती स्पष्ट रूप से ऐसा न कहे।


आपकी धारणा सही है। यह नियमों में अनुमत मान्यताओं के तहत किसी भी ASCII पाठ पर काम करना चाहिए।
टिम सेगिन

1

स्कीम / रैकेट 113

ये पाठ:

(define t (list 
    (string->list "I am a text.") 
    (string->list "Transpose me.")
    (string->list "Can you do it?")
))

नई लाइनों और अतिरिक्त सफेद स्थानों के बिना:

(define s(λ(v x)(if(= x 0)'()(cons(list->string(car v))(s(cdr v)(- x 1))))))(s(apply map list t)(length(car t)))

उपयोगकर्ता के अनुकूल संस्करण

(define text (list 
    (string->list "I am a text.") 
    (string->list "Transpose me.")
    (string->list "Can you do it?")
))

(define transpose
    (λ(text length)
        (if (= length 0)
            '()
            (cons (list->string (car text)) (transpose (cdr text) (- length 1)))
)))

(transpose (apply map list text) (length (car text)))

1

हास्केल

import Data.List
main = interact (unlines . transpose . lines)

यह बहुत छोटा था, मुझे सफेद स्थान में जोड़ने की आवश्यकता थी ...


मुझे लगभग यकीन है कि आप यहां से कुछ व्हाट्सएप को हटा सकते हैं। लेकिन अन्यथा, महान समाधान।
कोनराड बोरोस्की

3
यह मेरे सिस्टम पर काफी काम नहीं करता है। एक टिप्पणी में दिखाना थोड़ा मुश्किल है, लेकिन अगर आप इसे दो बार चलाते हैं तो आपको मिल जाएगा I am a text..? Transpose met Can you do i
मेरिनस

हाँ, मैं सोच रहा हूँ कि शायद आप स्तंभों को नहीं रख रहे हैं उदाहरण के लिए कॉलम को बरकरार रखने के लिए। सैद्धांतिक रूप से, दो बार फ़ंक्शन चलाने का परिणाम मूल स्ट्रिंग होना चाहिए (संभवतया अंतिम न्यूलाइन को जोड़ने या हटाने के साथ।)
टिम सेगिन

1

पायथन 89 103 चार्ट

def f(a):return'\n'.join([''.join(i).rstrip()for i in zip(*[j+' '*99 for j in a.split('\n')])]).rstrip()

मुझे गंदा लगता है। औद्योगिक शक्ति संस्करण के लिए 90 104 चार्ट। : ^)


कोई कार्य नहीं।
टिम सेगिन

@ मेरा बुरा तय है। वैसे भी मेरा समाधान जोआचिम इस्कसन के लिए हीन है। मुझे आश्चर्य है कि यदि पुनरावृत्ति के साथ इस समस्या को हल करने का कोई छोटा तरीका है।
ट्रेवरएम

1

गणितज्ञ, 95 वर्ण

f=""<>Riffle[Thread@PadRight@Characters@StringSplit[#,"\n"]//.{0->" ",{x___," "..}:>{x}},"\n"]&

1

के, ५६

यह अब कल्पना को पूरा करना चाहिए।

एक स्ट्रिंग स्वीकार करता है, एक स्ट्रिंग लौटाता है।

{`/:{$[" "=*|x;|(+/&\" "=|x)_|x;x]}'x@'/:!max@#:'x:`\:x}

k)f:{`/:{$[" "=*|x;|(+/&\" "=|x)_|x;x]}'x@'/:!max@#:'x:`\:x}
k)f"I am a text.\nTranspose me.\nCan you do it?"
"ITC\n ra\naan\nmn\n sy\napo\n ou\nts\need\nx o\ntm\n.ei\n .t\n  ?\n"
k)f f"I am a text.\nTranspose me.\nCan you do it?"
"I am a text.\nTranspose me.\nCan you do it?\n"

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

@ यह है यदि आप एक ही तार चाहते हैं, तो तीन वर्ण जोड़ें। {`/:x@'/:!max@#:'x:`\:x}26. के लिए
tmartin

आपको व्हाट्सएप के पीछे आने की समस्या भी है। और "यदि यह फ़ाइल नाम स्वीकार करता है, तो आप उस फ़ाइल का नाम वापस करते हैं जहां आपने परिणाम सहेजा था।" आपको इनपुट स्वीकार करने के तरीके में आउटपुट वापस करने की आवश्यकता है।
टिम सेगिन

@ समय अभी तय किया जाना चाहिए। मेरे बायटेकाउंट को मारता है
tmartin

मुझे संदेह था :(, लेकिन एक कल्पना एक कल्पना है।
टिम सेगिन

1

ग्रूवी, 98 वर्ण

{i->o=[].withDefault{''};i.readLines().each{it.toList().eachWithIndex{c,d->o[d]+=c}};o.join('\n')}

ऑनलाइन

ungolfed:

{i->
o=[].withDefault{''};//create list with empty string as default value 
i.readLines()
.each{
    it.toList() //split every line to characters
    .eachWithIndex{ 
        c,d->o[d]+=c //append to string from list with right index
    }
};
o.join('\n')}//join list with newlines
}

1

अजगर , 11 बाइट्स

# aYcw1;.tY

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

एक स्ट्रिंग के रूप में इनपुट लेता है, सूचियों की एक सूची आउटपुट करता है

पायथ , 25 बाइट्स

# aYcw1=+Z1;jbcj"".n.tY)Z

एक स्ट्रिंग के रूप में इनपुट लेता है, एक स्ट्रिंग आउटपुट करता है।

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


1

जे, 28 26 बाइट्स

सहेजे गए 2 बाइट्स frownyfrog के लिए धन्यवाद

t=.,@:(,&LF"1)@|:@:>@cutLF

एक स्ट्रिंग लेता है, एक स्ट्रिंग लौटाता है। मुझे यकीन नहीं है कि 'कटोपेन' फ़ंक्शन क्रिया का एक छोटा संस्करण है जिसका मैं उपयोग कर सकता हूं।

छोटा भी है

t=.|:@:>@cutLF

लेकिन मुझे यकीन नहीं है कि यह ओपी के दिशानिर्देशों के अंतर्गत आता है, क्योंकि यह पात्रों की एक सरणी देता है।

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

                     cutLF   | Splits the input on new lines and boxes them
                    @        | Composes verbs (as does @:, but they're not equal)
                   >         | Unboxes this, forming an array of the lines
                 @:          |
               |:            | Transposes the array
      (      )@              |
       ,&LF                  | Appends a new line...
           "1                | To each row of the array
    @:                       |
   ,                         | Flatten the result
t=.                          | Assign this verb to t

अन्य संस्करण समान कार्य करता है, लेकिन ट्रांसपोज़्ड सरणी को एक ठीक से स्वरूपित स्ट्रिंग में परिवर्तित नहीं करता है।

उदाहरण:

NB. Define a multi-line string

    text =: 0 : 0
I am a text.
Transpose me.
Can you do it?
)

    t text
ITC
 ra
aan
mn    NB. There's whitespace after the 'n' here, but I assume it doesn't count as trailing since it's part of the original string
 sy
apo
 ou
ts 
eed
x o
tm 
.ei
 .t
  ?

    t t text
I am a text.     NB. Again, whitespace here, but it's part of the argument of the second 't' (added by the first 't' to keep columns straight)
Transpose me. 
Can you do it?

मैं उपयोग करूंगा cutLF
फ्रॉन्फ्रॉग

1
1 चरित्र को सहेजें0|:>@cutLF
FrownyFrog

1

लुआ ,203 189 बाइट्स

t={{}}i=1m=0(...):gsub(".",function(c)n=#t[i]if c=="\n"then i=i+1t[i]={}else t[i][n+1]=c end m=m<=n and n+1or m end)
for x=1,m do for p=1,i do io.write(t[p][x]or" ")end _=m<=x or print()end

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

मैंने यहां एक और Lua समाधान देखा, लेकिन मुझे नहीं लगता कि एक ही भाषा पर 2 समाधान पोस्ट करने में कोई समस्या है। अगर वहाँ है, मुझे बताओ :)


1
एक ही भाषा में कई उत्तरों के साथ कुछ भी गलत नहीं है। यहां तक ​​कि समान जवाबों को एक हद तक अनुमति दी जाती है (यद्यपि आप कम से कम जांच करने के लिए प्रोत्साहित हैं यदि आप एक समान समाधान पोस्ट कर रहे हैं)
जो किंग

दुर्भाग्य से आपके परिणाम में किसी भी लाइन पर अनुगामी व्हाट्सएप नहीं होना चाहिए
जो किंग

लेकिन मैं अपने कोड के आउटपुट पर व्हॉट्सएप को पीछे नहीं देख सकता। पंक्ति समाप्त होने के बाद कोई स्थान नहीं है और अंत में कोई रिक्त रेखा नहीं है।
विस्कमार्ट

बात यह है कि लोगों को बाहर पकड़ने के लिए लगता है पर किसी भी लाइन । जैसे यह दूसरी पंक्ति पर अतिरिक्त व्हाइट है
जो राजा

ओह्ह अब मैं समझ गया! माफ़ कीजिये। जैसे ही मेरे पास समय होगा मैं इसे काम करने की कोशिश करूंगा। मुझे लगता है कि समस्या यह थी कि केवल 1 उदाहरण परीक्षण है और मुझे लगा कि "तनाव" परीक्षा
हाहा होगा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.