ऊर्ध्वाधर शब्दों के साथ एक स्ट्रिंग प्रिंट करें


12

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

स्ट्रिंग को देखते हुए:

Hello, World! My name is Foo.

आउटपुट होना चाहिए:

H W M n i F
e o y a s o
l r   m   o
l l   e   .
o d
, !

यदि आपके प्रोग्राम को सही तरीके से टर्मिनल के चारों ओर लपेटने की आवश्यकता है, तो 10 बोनस अंक प्रदान किए जाएंगे, जिसे हम 80 अक्षरों में सेट करेंगे।

50 अंक अगर आपका प्रोग्राम रिवर्स भी कर सकता है!



3
@manatwork: मुझे लगता है कि यह है। हालांकि यह समान नहीं है - और मैं तर्क दे सकता हूं कि मेरी समस्या थोड़ी आसान है।
फू बैरिग्नो

यह 100% समान नहीं है, लेकिन यह एक डुप्लिकेट के रूप में गिनने के लिए पर्याप्त है: इसे समान बनाने के लिए कमी बस प्रत्येक स्थान को दो न्यूलाइन्स के साथ बदल रही है।
पीटर टेलर

1
@PeterTaylor: बिलकुल नहीं। मेरी समस्या को मूल स्ट्रिंग में newlines का सम्मान करने की कोई आवश्यकता नहीं है। उस समस्या के लिए जरूरी है कि नई लाइनों को स्पेस में बदल दिया जाए और स्पेस को दो न्यूलाइन्स में बदल दिया जाए। यह बहुत मामूली कमी नहीं है।
फू बैरिग्नो

जवाबों:


10

जे, 15

|:>'\S+| 'rxall

उपयोग:

   |:>'\S+| 'rxall 'Hello, World! My name is Foo.'
H W M n i F
e o y a s o
l r   m   o
l l   e   .
o d        
, !        

5

जावास्क्रिप्ट - 228 172 145 126

A=prompt().split(" "),B="",N=A;for(y=0;y<N.length;y++){for(i=0;i<N.length;i++){if(A[i][y]){B+=A[i][y];}else{B+=" ";}}B+="\n";}

मेरा पहला कोड गोल्फ :)


अपने पहले प्रयास के लिए यह बहुत अच्छा है!
फू बैरिग्नो

आपको अपने कोड को यथासंभव कम करने का प्रयास करना चाहिए, उदाहरण के लिए, रिक्त स्थान को हटा दें, यह "Input ?"वास्तव में कार्यक्रम के व्यवहार को प्रभावित नहीं करता है, इसे भी हटा दें।
मनिीप

ठीक हो गया। उम्मीद के
मुताबिक

1
अब सही ढंग से काम करता है। लेकिन कुछ छोटी चीजें: चर एन की कोई आवश्यकता नहीं है, सरणी को lengthदो बार पूछने के बजाय स्टोर करें , कुछ व्यर्थ ब्रेसिज़, कुछ अनावश्यक अर्धवृत्त। A=prompt().split(" "),B="";for(y=0;y<(l=A.length);y++){for(i=0;i<l;i++)if(A[i][y])B+=A[i][y];else B+="_";B+="\n"}alert(B)। ( IO मेटा के लिए जावास्क्रिप्ट मानकों में सवाल सबसे अधिक सहमत राय था कि REPL के निहित उत्पादन पर भरोसा सही माना जाना चाहिए।)
मैनटवर्क

1
(untested) if(A[i][y]){B+=A[i][y];}else{B+=" ";}=>B+=(x=A[i][y])?x:" "
daniero

5

एपीएल, २२

{⍉⊃⍵⊂⍨1+0,+\2≠/⍵=' '}

व्याख्या

{              ⍵=' '}   A. check which chars are spaces           
            2≠/         B. of that vector, which consecutive pairs are different  
          +\            C. compute the partial sums                           
      1+0,              D. insert 0 at the front and add 1 to every item
   ⍵⊂⍨                     use this vector to split the original string
 ⍉⊃                        disclose into a matrix and transpose

    'W o w   S u c h   D o g e'
A.   0 0 0 1 0 0 0 0 1 0 0 0 0
B.    0 0 1 1 0 0 0 1 1 0 0 0
C.    0 0 1 2 2 2 2 3 4 4 4 4
D.  1 1 1 2 3 3 3 3 4 5 5 5 5

उदाहरण

      {⍉⊃⍵⊂⍨1+0,+\2≠/⍵=' '} 'Hello, World! My name is Foo.'
H W M n i F
e o y a s o
l r   m   o
l l   e   .
o d        
, !        

3

रूबी, 91 87

s=gets.split
puts s.map{|x|x.ljust(s.map(&:size).max,' ').split''}.transpose.map &:join

हुर्रे, मैंने पर्ल को हराया! : डी

रूबी, 150 - 50 बोनस = 100

s=$<.read
n=s.index"
"
s=s.split n ?'
':' '
o=s.map{|x|x.ljust(s.map(&:size).max,' ').split''}.transpose.map &:join
puts n ?o.map(&:strip).join(' '):o

यह केवल नई सुर्खियों के लिए पता लगाता है, और यदि उन्हें पता चलता है तो विशेष हैंडलिंग लागू करता है।

इसे वैसे ही चलाएं

ruby transposegolf.rb < transposegolfinput.txt

3

जावास्क्रिप्ट 184 149 123

var a=s.split(" "),b="",c;for(c in a)b+="<div style='float:left'>"+a[c].split("").join("<br>")+"</div>";document.write(b);

परिभाषित स्ट्रिंग के उदाहरण के साथ:

var s = "Hello, World! My name is Foo.";
var a=s.split(" "),b="",c;for(c in a)b+="<div style='float:left'>"+a[c].split("").join("<br>")+"</div>";document.write(b);

आप दूसरे स्टेटमेंट को ब्राउजर्स कंसोल पर कॉपी कर सकते हैं।

unminified:

var res = "Hello, World! My name is Foo.";
var t=res.split(" ");
var s ="";
for (var word in t){
    s+="<div style='float:left'>" + t[word].split("").join("<br />") + "</div>";
}
document.write(s);

JsField लिंक: http://jsfiddle.net/FzMvK/

मेरा पहला कोड गोल्फ पोस्ट: पी


बहुत अच्छी तरह से किया
फू बैरिग्नो

@FooBarrigno ने रिवर्स का समर्थन करने के लिए अद्यतन उत्तर दिया
RononDex

@FooBarrigno अपडेट किया गया उत्तर, रिवर्स समर्थन को हटा दिया और बाइट काउंट को कम करने के लिए तर्क को पूरी तरह से बदल दिया
RononDex

चतुर, मुझे यह पसंद है। क्या आप सिर्फ float:rightरिवर्स के लिए नहीं बदल सकते ?
डैनी

2
निर्भर करता है कि "रिवर्स" का क्या मतलब है। यदि पहला अक्षर सबसे नीचे होना चाहिए तो यह काम नहीं करेगा। यदि यह केवल शब्दों को उलट रहा है, तो इसे हाँ काम करना चाहिए
RononDex

2

पर्ल - 92 97

$_=<>;chop;@x=split$";do{print((substr$_,$q,1or$").$")for@x;$q++,print$/}while/@{['\S'x$q]}/

बहुत सरल तरीके से काम करता है।


स्टेटमेंट मॉडिफ़ायर के भावों के आसपास कोष्ठक की कोई आवश्यकता नहीं है ।
मैनटवर्क

ध्यान दें कि whileयहाँ उपयोग के रूप में भी बयान संशोधक है।
12

क्या यह? क्या यह do{}while()पाश नहीं है ?
मनिीप

नहीं। doखुद के पास और कुछ नहीं है, बस एक ब्लॉक है। whileएक अलग बात है।
13

2

के, ३३

{" "/:',:''x@'/:!max@#:'x:" "\:x}

उदाहरण इनपुट और आउटपुट:

k){" "/:',:''x@'/:!max@#:'x:" "\:x}"Hello, World! My name is Foo."
"H W M n i F"
"e o y a s o"
"l r   m   o"
"l l   e   ."
"o d        "
", !        "

क्या वहां "होना चाहिए?
डॉ। बेलिसियस

@ सबिसिसरियस यह है कि कश्मीर में तार का प्रतिनिधित्व कैसे किया जाता है। यदि आप विशेष रूप से stdout को लिखना चाहते हैं, तो आप {-1@" "/:',:''x@'/:!max@#:'x:" "\:x;}(37 वर्ण) के साथ, जो बिना उत्पादन के उत्पादन करेंगे"
tmartin

4
ठीक है, मुझे लगता है कि उत्पादन आवश्यक होना चाहिए, भाषा के बावजूद
डॉ। बेलिसरियस

2

अजगर:

स्टिंग को संसाधित करने के लिए कोड की एक पंक्ति:

import sys
m = "Hello, World! My name is Foo."

map(lambda y: sys.stdout.write(' '.join(y)+'\n'), zip(*map(lambda x: x.ljust(max(map(len,m.split()))), m.split())))

2

पायथन 2.7, 108 103

मुझे यकीन है कि यह अधिक गोल्फ हो सकता है, लेकिन यहां अजगर में एक प्रारंभिक समाधान है।

w=raw_input().split();m=max(map(len,w));i=0
while i<m:print" ".join(map(lambda x:x.ljust(m)[i],w));i+=1

सुधार:

  • विभाजन ("") => विभाजन ()
  • कुछ अतिरिक्त रिक्त स्थान निकाले

अच्छी नौकरी! यदि आप 0 से शुरू करते हैं i=mऔर लूप डाउन करते हैं, तो आप 100 के लिए एक और 3 अक्षर शेव कर सकते हैं।
DLosc

2

एफ #, 187

let o=Console.ReadLine()
let s=o.Split(' ')
let m=s|>Seq.map String.length|>Seq.max
for l=0 to m-1 do
 for w in s|>Seq.map(fun x->x.PadRight(m,' ').[l])do printf"%c "w
 printfn"%s"""

2

रूबी, ६३

$F.map(&:size).max.times{|i|puts$F.map{|s|s[i]||' '}.join' '}

एल्गोरिथ्म बहुत सीधा है; केवल गोल्फ। कोड 61 बाइट्स लंबा है, साथ ही उन -naविकल्पों के लिए 2 बाइट्स जो इसे काम करने की आवश्यकता है। से ruby -h:

-n   assume 'while gets(); ... end' loop around your script
-a   autosplit mode with -n or -p (splits $_ into $F)

नमूना रन:

$ echo 'This sentence is false' | ruby -na cols.rb
T s i f
h e s a
i n   l
s t   s
  e   e
  n    
  c    
  e

2

पायथन 2.7 - 137 112 बाइट्स

s=raw_input().split()
for c in range(max(map(len,s))):
 for w in s:
    try:print w[c],
    except:print' ',
 print''

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

मैं यह करने का एक बहुत अच्छा तरीका के साथ आया और 25 बाइट्स काट दिया। सूचकांक त्रुटि से बचने के लिए रिक्त स्थान के साथ तार लगाने के बजाय, मैं सीधे त्रुटि को संभालता हूं! जब भी प्रिंट की कोई बात नहीं है, मैं साथ उसके स्थान पर एक भी अंतरिक्ष प्रिंट try:print w[c],, except:print' ',। मुझे यह भी याद आया कि मुझे प्रिंट स्टेटमेंट और एक स्ट्रिंग शाब्दिक के बीच एक स्थान की आवश्यकता नहीं है, जिसने एक बाइट को बचाया।

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

स्वरूपण बहुत आसान था, क्योंकि print 'something',प्रिंट के 'something 'बजाय 'something\n'। मैंने प्रत्येक चरित्र के लिए ऐसा किया, और printजहां मुझे इसकी आवश्यकता थी, वहां पर नई स्टेटमेंट प्राप्त करने के लिए एक खाली कथन का उपयोग किया ।


2

सी, 111 110 95 90 बाइट्स

यह समाधान टर्मिनल पर कर्सर को स्थानांतरित करने के लिए VT-100 नियंत्रण कोड का उपयोग करता है

main(int _,char**v){char*s=*++v;printf("^[7");while(*s)' '==*s?(s++,printf("^[8^[[2C^[7")):printf("%c^[[B^H",*s++);}

^[अनुक्रम एक ASCII ESC चरित्र, कि यहाँ प्रदर्शित नहीं किया जा सकता के लिए एक प्लेसहोल्डर है।

  • ^[7 वर्तमान सूचक स्थिति को बचाता है
  • ^[8 सहेजे गए स्थान पर कर्सर स्थिति को पुनर्स्थापित करता है
  • ^[[2C 2 कदम सही चलता है
  • ^[[B 1 कदम नीचे जाता है

संपादित करें 1:^[[D (1 कदम छोड़ दिया) वीटी -100 कोड एक बैकस्पेस ने ले लिया है (के रूप में दिखाया ^Hयहाँ, लेकिन केवल एक ASCII वर्ण है); यह भी "रिक्त स्थान से अलग" निर्देश, अब तय हो गया है

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

के forबजाय एक लूप का उपयोग करके सहेजे गए 7 चार्ट while, और 32इसके बजाय ' ':

main(int _,char**v){printf("^[7");for(char*s=*++v;*s;s++)32==*s?printf("^[8^[[2C^[7"):printf("%c^[[B^H",*s);}

एक कम कॉल करके 8 और चार्ट सहेजे गए printf: टर्नरी ?:ऑपरेटर अब printfमापदंडों में उपयोग किया जाता है

main(int _,char**v){printf("^[7");for(char*s=*++v;*s;s++)printf(32==*s?"^[8^[[2C^[7":"%c^[[B^H",*s);}

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

उर्फ के sसाथ सीधे काम करते हुए, स्थानीय चर से छुटकारा पा लिया । यह पूरी तरह से छिपा हुआ है। लेकिन 4 चरस बचाई। इसके साथ साथ बदल दिया गया है और इसलिए 1 अधिक चार को बचाने के लिए ऑपरेंड को स्विच किया गया है।argvv==^?:

main(int c,char**v){printf("^[7");for(v++;**v;)printf(32^*(*v)++?"%c^[[B^H":"^[8^[[2C^[7",**v);}

प्रयोग

$ gcc transpose.c -o transpose --std=c99
$ ./transpose 'Hello, World! My name is Foo.'
H W M n i F
e o y a s o
l r   m   o
l l   e   .
o d
, !

बिना गोल्फ वाला संस्करण (पहला संस्करण)

main (int _,char**v) {
    char*s=*++v; // init s with the address of the first letter
    printf("^[7"); // save the current cursor position
    while(*s) 
        ' '==*s ? ( /* if current char is a space */
            s++,printf("^[8^[[2C^[7") /* return to the saved location, move right, save position */
        ) : /* kind of else */
            printf("%c^[[B^H",*s++); /* print the current char, move down, move left */
}

अन-गोल्फ संस्करण (अंतिम संस्करण)

main(int c,char**v) {
    printf("^[7");
    for(v++;**v;) /* v++: make v point to argv[1] */
        printf(     
            32^*(*v)++? /* test if **v is different from ' ', and make *v point to
                           the next char */
                "%c^[[B^H":         
                "^[8^[[2C^[7",      
            **v); /* this undefined behaviour (using *v and (*v)++ in the same expression)
                     works as "expected" with gcc 4.7.2 */
} 

1
यह अन-गोल्‍फेड संस्‍करण बेफुंग की तरह स्‍पष्‍ट है । :)
DLosc

2

मैंने इस सवाल का जवाब बहुत समय पहले दिया था। यह वास्तव में इस साइट के लिए मेरा पहला योगदान था। मैं हाल ही में फिर से आया था और एक तरह से शर्मिंदा था। 112 बाइट्स ?! गवारा नहीं। इसलिए मैंने इसे एक और शॉट दिया:

पायथन 3 - 92 बाइट्स

s=input().split()
print('\n'.join(map(' '.join,zip(*[a.ljust(max(map(len,s)))for a in s]))))

109 दिनों में जब से मैंने वह पहला उत्तर पोस्ट किया है, मुझे लगता है कि मुझे एक लंबा रास्ता तय करना है। यहां तक ​​कि 2.7 1 से अधिक पायथन 3 का उपयोग करने जैसा कुछ मेरे साथ नहीं हुआ होगा। इस कोड के साथ 100 बाइट तक नीचे जाने के बाद, मेरी आत्मा अंत में आराम कर सकती है और मैं इसके बाद आगे बढ़ सकता हूं।

व्याख्या

s=input().split()

इससे एक लाइन मिलती है stdinऔर इसे व्हॉट्सएप के पात्रों में विभाजित करके एक सूची बनाई जाती है। इनपुट में केवल व्हॉट्सएप होने की संभावना है, इसलिए इस लाइन को शब्दों की एक सूची मिलती है।

चलो अंदर से दूसरी लाइन लेते हैं:

                                           max(map(len,s))

mapएक समारोह और तर्कों के रूप में एक पुनरावृत्ति लेता है। यह फ़ंक्शन को पुनरावृत्त के प्रत्येक तत्व पर लागू करता है, और परिणामों का एक नया पुनरावृत्ति देता है। यहां, मैं प्रत्येक इनपुट शब्द की लंबाई के साथ एक चलने योग्य बनाता हूं। maxएक चलने योग्य से अधिकतम मूल्य प्राप्त करता है। इससे हमें इनपुट में सबसे लंबा शब्द मिलता है।

                                  [a.ljust(              )for a in s]

एक सूची समझ के समान है map। यह एक पुनरावृत्ति के हर तत्व के लिए कुछ करता है, और परिणामों की सूची देता है। इनपुट में प्रत्येक शब्द के लिए, मैं that_word.ljust(कुछ कोड करता हूं )ljust"लेफ्ट जस्टिफ़ाइ" के लिए छोटा है। यह एक पूर्णांक को एक तर्क के रूप में लेता है और स्ट्रिंग को रिक्त स्थान जोड़ता है जब तक कि यह लंबे समय तक न हो।

                             zip(*                                    )

यह एक साफ सुथरी चाल है। इस संदर्भ में, *इसका अर्थ है "इस तर्क को कई तर्कों के रूप में अनज़िप करें"। इस तरह, एक मैट्रिक्सzip को स्थानांतरित करने के लिए इस्तेमाल किया जा सकता है (जैसे zip(*[(1,2),(3,4)])-> [(1,3),(2,4)])। एकमात्र प्रतिबंध यह है कि मैट्रिक्स में सभी पंक्तियों की लंबाई समान होनी चाहिए, या सभी पंक्तियों से तत्व लेकिन सबसे छोटा मिलान करने के लिए कट जाता है।

                map(' '.join,                                          )

हम पहले से ही जानते हैं कि क्या mapकरता है। यहाँ केवल एक नई चीज़ है join, जो स्ट्रिंग्स के एक पुनरावृत्ति को लेती है और इसे जुड़े हुए सीमांकक का उपयोग करके एक एकल स्ट्रिंग बनाती है। उदाहरण के लिए, 'a'.join(['I', 'can', 'play', 'the', 'saxophone'])2 बन जाता है Iacanaplayatheasaxophone

print('\n'.join(                                                        ))

यह joinस्ट्रिंग्स का एक गुच्छा लेता है और उन्हें न्यूलाइन्स द्वारा अलग करता है। अब सिर्फ़ करने के लिए है printकरने के लिए stdoutहै और हम काम हो गया!

अब सब एक साथ:

print('\n'.join(map(' '.join,zip(*[a.ljust(max(map(len,s)))for a in s]))))

इनपुट से सबसे लंबे शब्द की लंबाई ज्ञात करें, प्रत्येक शब्द के लिए रिक्त स्थान संलग्न करें जब तक वे एक ही लंबाई न हो, zip(*3 चाल के साथ स्थानांतरित करें, joinप्रत्येक वर्ण को रिक्त स्थान के साथ पंक्ति में अलग करने के लिए उपयोग करें, joinफिर से प्रत्येक पंक्ति को एक नई पंक्ति के साथ अलग करने के लिए, और प्रिंट करें! 92 बाइट प्रोग्राम में एकमात्र गैर-इनपुट-हैंडलिंग लाइन के लिए बुरा नहीं है।


1. अतिरिक्त चरित्रों पर बिताए गए वर्णों print()को 4 वर्णों से बाहर निकाल दिया जाता है, जिन्हें मैं raw_input()-> से गिराता हूं input()
2. मैं वास्तव में सैक्सोफोन नहीं खेल सकता।
3 ).। आपका स्वागत है।


2
मुझे नहीं पता कि यह सीडब्ल्यू क्यों है। मैं गलती से बटन दबा सकता हूं। ओह अच्छा।
भूमिगत

आप बदल सकते हैं print("\n".join(...))करने के लिए *map(print,...),इसे ऑनलाइन आज़माएं!
जो किंग

2

05AB1E , स्कोर 8 -20 -21 ( 30 29 बाइट्स - 50 बोनस):

|Dgi#ζεSðý}»}ë¹ε2ô€¬}ζJεðÜ}ðý

इसे ऑनलाइन (नियमित सिंगल-लाइन इनपुट) आज़माएं।
इसे ऑनलाइन आज़माएं (मल्टी-लाइन उल्टा इनपुट)।

स्पष्टीकरण:

|                     # Take the input split on newlines:
                      #  i.e. 'This is a test' → ['This is a test']
                      #  i.e. 'T i a t\nh s   e\ni     s\ns     t'
                      #    → ['T i a t','h s   e','i     s','s     t']
 Dg                   #  Duplicate this list, and take the length
                      #   i.e. ['This is a test'] → 1
                      #   i.e. ['T i a t','h s   e','i     s','s     t'] → 4
   i         }        # If the length is exactly 1:
    ¹                 #  Take the input again 
     #                #  Split the input-string by spaces
                      #   i.e. 'This is a test' → ['This','is','a','test']
      ζ               #  Zip with space-filler: Swap all rows and columns
                      #   i.e. ['This','is','a','test'] → ['Tiat','hs e','i  s','s  t']
       ε   }          #  For each item:
        S             #   Convert the item to a list of characters
                      #    i.e. 'Tiat' → ['T','i','a','t']
         ðý           #   Join them by a single space
                      #    i.e. ['T','i','a','t'] → 'T i a t'
            »         #  Join the result by newlines (and output implicitly)
    ë                 # Else:
     ε    }           #  For each item:
      2ô              #   Split it into chunks of two characters
                      #    i.e. 'h s   e' → ['h ','s ','  ','e']
        €¬            #   Take the head (first character) of each:
                      #    i.e. ['h ','s ','  ','e'] → ['h','s',' ','e']
           ζ          #  Zip with space-filler: Swap all rows and columns
                      #   i.e. [['T','i','a','t'],['h','s',' ','e'],['i',' ',' ','s'],['s',' ',' ','t']]
                      #     → [['T','h','i','s'],['i','s',' ',' '],['a',' ',' ',' '],['t','e','s','t']]
            J         #  Join each inner list to a single string
                      #   i.e. [['T','h','i','s'],['i','s',' ',' '],['a',' ',' ',' '],['t','e','s','t']]
                      #     → ['This','is  ','a   ','test']
             ε  }     #  For each item:
              ðÜ      #   Remove any trailing spaces
                      #    i.e. 'is  ' → 'is'
                 ðý   #  Join the items by a single space (and output implicitly)

मूल 8-बाइट उत्तर:

#ζεSðý}»

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

स्पष्टीकरण:

#           # Split the input-string by spaces
            #  i.e. 'This is a test' → ['This','is','a','test']
 ζ          # Zip with space-filler: Swap all rows and columns
            #  i.e. ['This','is','a','test'] → ['Tiat','hs e','i  s','s  t']
  ε   }     # For each item:
   S        #  Convert the item to a list of characters
            #   i.e. 'Tiat' → ['T','i','a','t']
    ðý      #  Join them by a single space
            #   i.e. ['T','i','a','t'] → 'T i a t'
       »    # Join the result by newlines (and output implicitly)

1

गणितज्ञ ४ ९

स्पष्ट रूप से गणितज्ञ इसके लिए सबसे अच्छा नहीं है:

Grid[PadRight@Characters@StringSplit@s^T]/. 0->" "

गणितज्ञ ग्राफिक्स

नोट ^T(परिवर्तन) केवल एक चार्ट है (मुझे अब सही चार कोड नहीं मिल सकता है)


1

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

a=prompt().split(' '),c=0,d=a.map(function(a){b=a.length;c=c<b?b:c});for(j=0;j<c;j++){b='';for(i in a)b+=a[i][j]?a[i][j]:' ';console.log(b);}

नमूना

hello, world! this is code golf

hwticg
eohsoo
lri dl
lls ef
od    
,! 

1

गोल्फस्क्रिप्ट [41 बाइट्स]

' '%:x{.,x{,}%$-1=-abs' '*+}%zip{' '*}%n*

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

' '%:x          split text into words and store array in 'x'
{               for each word in the array:
    .,              from word's length
    x{,}%$-1=-      substract the length of the longest word in 'x'
    abs             get absolute value (maybe there is a shorter way?)
    ' '*+           add corresponding number of spaces
}%
zip{' '*}%      transpose array of words and add spaces between letters
n*              join words with a new line character

आप यहां ऑनलाइन डेमो देख सकते हैं ।

पुनश्च: यह मेरा पहला गोल्फस्क्रिप्ट कोड है, इसलिए मुझे कड़ाई से न्याय न करें;)



1

बाश + कोरुटिल्स, 54

eval paste `printf " <(fold -w1<<<%s)" $@`|expand -t2

आउटपुट:

$ ./transpose.sh हैलो, वर्ल्ड! मेरा नाम फू है।
HWM नी एफ
eoyaso
lrmo
लेल।
आयुध डिपो       
;       
$ 

एक अद्यतन के लिए सुझाव: कमांड प्रतिस्थापन के लिए बैकटिक्स को ह्रास किया गया है। $()कंस्ट्रक्शन का उपयोग करना अब कमांड प्रतिस्थापन के लिए सामान्य तरीका है।
योकाई

@ योकाई - यह कोड-गोल्फ है - यहां हम कोड की लंबाई के लिए अनुकूलन कर रहे हैं और मानकों / सर्वोत्तम प्रथाओं के अनुपालन के लिए नहीं। codegolf.stackexchange.com/a/25572/11259
डिजिटल ट्रॉमा

मुझे लगा कि चूंकि कमांड प्रतिस्थापन के लिए मानदंड बदल गया है, मैं एक अपडेट का सुझाव दूंगा। आपको नहीं करना है। यह सिर्फ एक सुझाव था। यह केवल गिनती के लिए एक नया चरित्र जोड़ देगा वैसे भी।
योकाई

1

एपीएल: 18

⍉↑1↓¨a⊂⍨' '=a←' ',

स्पष्टीकरण:

a '', स्ट्रिंग के सामने एक स्थान रखें और एक को असाइन करें

'' = रिक्त स्थान खोजें, एक बूलियन पैदा करता है

1 the ↓a⊂⍨ ऐसे पदार्थ बनाना शुरू कर रहा है जहां बूलियन में 1 है और प्रत्येक का पहला तत्व छोड़ें (ताकि स्थान)

Ings resulting मैट्रिक्स को परिणामी पदार्थ से बाहर करें, और इसे विकर्ण के साथ उल्टा करें


1

आर , 81 बाइट्स

एक बाइट को एक नई पंक्ति के रूप में सहेज eकर रखें, जिसका उपयोग scanकॉल, तुलना कॉल और दोनों में किया जा सकता है cat

w=scan(,e,t=scan(,e<-"
"));while(any((s=substr(w,F<-F+1,F))>e))cat(pmax(" ",s),e)

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



0

पायथन 2.7 - 119 106

१ - १६६ ले लो। मेरे द्वारा वांछित क्रम में पॉप कार्य करने के लिए सूचियों को उलटने की आवश्यकता थी, लेकिन यह बेकार लग रहा था। और जब मैंने मौज-मस्ती के लिए एक ही समझ में आने की कोशिश की, तो पॉप खराब हो गया।

w=raw_input().split(' ');l=max([len(l) for l in w]);
q=[list(p)[::-1]for p in w]+[['\n']*l]
t=[' '+(v.pop() if v else' ')for i in range(l)for v in q]
print ''.join(t)

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

w=raw_input().split(' ');l=max([len(l)for l in w]);print''.join([' '+(v+' '*l)[i]for i in range(l)for v in w+['\n'*l]])

3 ले - धन्यवाद @grc को

w=raw_input().split();l=max(map(len,w));print''.join(' '+(v+' '*l)[i]for i in range(l)for v in w+['\n'*l])

2
[len(l)for l in w]को छोटा किया जा सकता है map(len,w), .split(' ')को .split(), और .join([...])को .join(...)
grc

मैं आपके कोड पर बहुत अधिक विस्तार से नहीं गया हूं, इसलिए यह काम नहीं कर सकता है, लेकिन: "मेरे द्वारा वांछित क्रम में पॉप काम करने के लिए सूचियों को उलटने की आवश्यकता थी" क्या आप v.pop(0)इसके बजाय पहले तत्व को पॉप करने के लिए उपयोग नहीं कर सकते थे आखरी?
भूमिगत

0

पायथन 3, 124

a=input().split()
l=max(map(len,a))
print("\n".join(" ".join(c[i] for c in [i+" "*(l-len(i)) for i in a]) for i in range(l)))

0

हास्केल, 112

golfed:

import Data.List
r s=unlines$transpose$p$words s
p w=m(\s->s++replicate(maximum(m l w)-l s)' ')w
m=map
l=length

व्याख्या की:

import Data.List

-- Break on spaces, then pad, then transpose, then join with newlines
r s=unlines$transpose$p$words s

-- Pads each String in a list of String to have the same length as the longest String
p w=m(\s->s++replicate(maximum(m l w)-l s)' ')w

-- Aliases to save space
m=map
l=length

उदाहरण:

*Main Data.List> putStrLn $ r "Hello Doge"
HD
eo
lg
le
o

0

जावास्क्रिप्ट, 139 (156 कंसोल.लॉग आउटपुट के साथ)

s=" ",b="",a=prompt().split(s),l=0;for(var i in a){m=a[i].length;l=(l<m)?m:l;}for(i=0;i<l;i++){for(var j in a)b+=((x=a[j][i])?x:s)+s;b+="\n"}console.log(b);

मुझे लगता है कि यह उतना ही गोल्फ है जितना मैं इसे प्राप्त कर सकता हूं। मैं बस विभाजित करता हूं, सबसे बड़ा शब्द ढूंढता हूं और तदनुसार स्थानान्तरण करता हूं, अगर रिक्त शब्दों में चार मौजूद नहीं है, तो रिक्त स्थान जोड़ते हैं। पिछले प्रस्तुत जावास्क्रिप्ट उत्तर से अधिक है, लेकिन वह उत्तर काम नहीं करता है?



0

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

jbjL\ Cc

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

बहुत सीधा। उद्धरण, यानी में संलग्न इनपुट लेता है"Hello World"

jbjL\ CcQ
---------
       cQ    Chop the input Q on spaces
      C      Matrix transpose
  jL\        Join each element by spaces,
             i.e. interleave spaces between the characters of each element
jb           Join by newlines

1
Cसबसे छोटी प्रविष्टि की लंबाई को छोटा करता है , इसलिए यह काम नहीं करता हैयहाँ एक त्वरित सुधार है जो 8 बाइट्स भी है।
hakr14

0

एपीएल (एनएआरएस), 79 वर्ण, 158 बाइट्स

{m←⌈/↑∘⍴¨z←(' '≠⍵)⊂,⍵⋄v←∊m{⍵\⍨∊(k⍴1)(0⍴⍨⍺-k←↑⍴⍵)}¨z⋄((2×↑⍴z)⍴1 0)\[2]⍉(↑⍴z)m⍴v}

परीक्षा:

  f←{m←⌈/↑∘⍴¨z←(' '≠⍵)⊂,⍵⋄v←∊m{⍵\⍨∊(k⍴1)(0⍴⍨⍺-k←↑⍴⍵)}¨z⋄((2×↑⍴z)⍴1 0)\[2]⍉(↑⍴z)m⍴v}
  f 'Hello, World! My name is Foo.'
H W M n i F 
e o y a s o 
l r   m   o 
l l   e   . 
o d         
, !         

पुराने फ़ंक्शन का आउटपुट सही नहीं है:

  {⍪¨(' '≠⍵)⊂,⍵}'Hello, World! My name is Foo.'
 H  W  M  n  i  F 
 e  o  y  a  s  o 
 l  r     m     o 
 l  l     e     . 
 o  d             
 ,  !
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.