পাঠ্যের একটি পৃষ্ঠা স্থানান্তর করুন


28

সম্পাদনা করুন আমি কিছু বিষয় যা আরও স্পষ্টভাবে স্পষ্ট ছিল তা করার জন্য নিয়মের শব্দটির সংশোধন করেছি। আপাত বিভ্রান্তির কিছু বিষয় মুছে ফেলার জন্য আমি কিছুটা জোরও যুক্ত করেছি এবং কোনও ফাংশনের পরিবর্তে স্বতন্ত্র প্রোগ্রামটি করার বিকল্পটি স্পষ্টভাবে সংজ্ঞায়িত করেছি।

এখানে লক্ষ্যটি এমন একটি ফাংশন তৈরি করা যা কোনও পাঠ্য ফাইল (বা স্ট্রিং) নেয় এবং এটিকে স্থানান্তর করে যাতে রেখাগুলি কলাম এবং বিপরীত হয়ে যায়।

উদাহরণ:

আমি একটি পাঠ্য।
আমাকে ট্রান্সপোজ করুন
আপনি এটা করতে পারেন?

ফলাফল স্বরূপ:

আইটিসি
 রা
aan
MN
 SY
APO
 OU
TS
eed
XO
TM
.ই আই
 .t
  ?

নিয়ম:

  • আপনাকে ধরে নেওয়া যায় যে কেবলমাত্র শ্বেতক্ষেত্রের ব্যবহৃত অক্ষর " "এবং "\n"কোনও লাইনে কোনও পূর্ববর্তী শ্বেতস্পেস নেই।
  • আপনি ধরে নিতে পারেন ফাইলটি ASCII। আপনি কোন এন্ডলাইন মার্কারটি ব্যবহার করতে চান তা আপনার উপর নির্ভর করে C (সিআরএলএফ বা এলএফ)। এটি অবশ্যই উদাহরণের সাথে সঠিকভাবে কাজ করবে, তবে উপরের অনুমানগুলিকে সন্তুষ্ট করে এমন কোনও ইনপুটটিতেও এটি কাজ করা উচিত ।
  • কলামগুলি লাইনে রাখার জন্য যেখানে কিছুই ছিল না সেখানে আপনাকে স্থান (উদাহরণ হিসাবে যেমন) সন্নিবেশ করতে হতে পারে।
  • আপনার ফলাফলের কোনও লাইনে শ্বেত স্পেস থাকতে হবে না
  • চূড়ান্ত নিউলাইন চরিত্র (শেষ লাইনের জন্য) isচ্ছিক।
  • এটি ফাংশন বা একটি সম্পূর্ণ প্রোগ্রাম হওয়া উচিত। যদি আপনার ফাংশন কোনও স্ট্রিং গ্রহণ করে তবে তারপরে ফলাফলটি স্ট্রিং হিসাবে ফিরিয়ে দেওয়া উচিত। যদি এটি কোনও ফাইলের নাম স্বীকার করে, তবে আপনি যেখানে ফাইলটি সংরক্ষণ করেছেন সেই ফাইলটির নাম ফিরিয়ে দিন। আপনাকে অতিরিক্তভাবে একটি সম্পূর্ণ প্রোগ্রাম লেখার অনুমতি দেওয়া হয়েছে যা এসটিডিআইএন থেকে ইনপুট গ্রহণ করে এবং সঠিক ফলাফলটি এসটিডিউটে আউটপুট করে; আপনি যদি এটি করেন তবে আপনাকে অবশ্যই এসটিডিআরআর থেকে কোনও আউটপুট আউট করতে হবে না
  • সংক্ষিপ্ত পদ্ধতিটি জিততে পারে তবে আমি যে কোনও উত্তর পছন্দ করব up

নিয়মের ভিত্তিতে, উদাহরণের আউটপুট হয় হয় 53 বা 52 বাইট লম্বা (এলএফ নিউলাইনগুলির জন্য) চূড়ান্ত নিউলাইন অন্তর্ভুক্ত কিনা তা নির্ভর করে।

দ্রষ্টব্য: এটি কোনও নির্দিষ্ট প্রয়োজনীয়তা নয়, তবে যদি আপনার ক্রিয়াকলাপ, যখন ধারাবাহিকভাবে দু'বার চালানো হয় তবে মূলটির সাথে সমান হয় না (চূড়ান্ত নিউলাইনটি পৃথক হতে পারে এবং ফাইলটির শেষে কোনও খালি লাইন মুছে ফেলা হবে), তবে আপনি সম্ভবত একটি নিয়ম ভঙ্গ।


আমি ভাষা বিল্ট ইনগুলিতে নিষেধাজ্ঞাকে সরিয়ে নেওয়ার সিদ্ধান্ত নিয়েছি।
টিম সেগুইন

আমি পূর্ববর্তী হোয়াইটস্পেসের অবস্থাটি পরিষ্কার করতে সম্পাদনা করেছি।
টিম সেগুইন

আপনি একটি ফাংশন জিজ্ঞাসা করছেন? STDIN থেকে কোনও স্ট্রিং গ্রহণ করা এবং সঠিক আউটপুটটি STDOUT এ মুদ্রণ করা কি গ্রহণযোগ্য?
জাস্টিন

@ কুইনকুনস হ্যাঁ, আমি এটিকে একটি "ফাংশন" হিসাবে স্বীকার করছি I
টিম সেগুইন

আপনি পাঠ্যক্রম ডাব্লুএস এর অনুমতি না দিলে পাঠ্য ট্রান্সপোজ ফাংশন কোনও চালান হতে পারে না। উদাহরণ: "a * c \ ndef \ n" -> TT-> "a * \ ncd \ nef \ n" ~ "a \ ncd \ nef \ n" -> TT-> "acd \ nef \ n", যেখানে * =
ডাব্লুএস

উত্তর:



4

জে ( 31 40)

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

এটি এমন একটি ফাংশন যা একটি স্ট্রিং নেয় এবং একটি স্ট্রিং দেয় (অর্থাত্ ডান জায়গায় withোকানো লাইনফিড সহ একটি অক্ষর ভেক্টর , এবং ম্যাট্রিক্স নয়))

সম্পাদনা করুন: কোনও লাইনে কোনও পূর্ববর্তী সাদা স্থান নেই।

টেস্ট:

   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
@ টিম: আমি এপিএলে এটি কেবল 44 এ পেতে পারি। মূল কারণটি হ'ল এপিএল হয় না 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

রুবির একটি অ্যারে ট্রান্সপোজ ফাংশন রয়েছে, সুতরাং এটি কেবল লাইনগুলি প্যাড করে, অক্ষরের একটি অ্যারে রূপান্তর করে, রুবির অ্যারে # ট্রান্সপোজ ফাংশন ব্যবহার করে, তারপরে অক্ষরের অ্যারেটিকে আবার লাইনে পরিণত করে।

এটি গল্ফ করে কেবল একক-অক্ষর সনাক্তকারী ব্যবহার করে, ফাঁকা স্থান সরিয়ে, পাঠ্য.লাইনগুলির জন্য একটি অস্থায়ী ব্যবহার করে এবং সর্বোচ্চ_ দৈর্ঘ্যের ইনলাইন (কার্যক্ষমতাটির জন্য কোনও পয়েন্ট নেই) গণনা করা ছিল।


খুশী হলাম। আপনি প্রতিস্থাপন আরও একটি চরিত্র আউট স্ট্রিপ করতে "\n"সঙ্গে ?\n
ওআই

এছাড়াও, .to_aঅতিরিক্ত অতিরিক্ত হয়। আপনি সেখানে আরও 5 টি চরিত্র অর্জন করতে পারেন।
ওআই

@ ওআই ধন্যবাদ, আমি আপনাকে ছয় অক্ষর .ণী। আমি এটি কর্মক্ষেত্রে বন্ধ করে দিয়েছি, যা ব্যবহার করে 1.9.3। টু_এটি 1.9.3 এ প্রয়োজনীয়, তবে 2.0 তে নয়।
ওয়েইন কনরাড

আমি দেখি. জানা ভাল. এমনকি আমাকে আরও প্রায়ই ব্যবহার করা উচিত রুবিতে স্ট্রিংয়ের কয়েকটি পদ্ধতি দেখানোর জন্য আমাদের বিবেচনা করুন। চিয়ার্স!
ওআই

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)

সম্পাদনা: ফাংশন প্রয়োজনীয়তা মিস করেছেন;

আমি দৃ sure়ভাবে নিশ্চিত যে এখানকার উন্নতি হবে যেহেতু আমি এখানে প্রথম ধরণের আছি, তবে শুরু করার জন্য;

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

কোডটি সরল splitভেক্টরে স্ট্রিংকে বিভক্ত করতে একটি সাধারণ ব্যবহার করে । এরপরে এটি ভেক্টরকে স্থানান্তর এবং প্যাড করতে ( unityক্য ফাংশন) এবং স্প্ল্যাট অপারেটর mapহিসাবে কোনও ফাংশন মান ব্যবহার করে None( zip_longestপাইথন 3 তে অনুরূপ কার্যকারিতা )

বাকি কোডটি কেবল 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
$ 

আপনি এই নিয়মটি ভঙ্গ করছেন বলে মনে হচ্ছে "আপনার ফলাফলের কোনও লাইনে শ্বেত স্পেস থাকতে হবে না।"
টিম সেগুইন

@ টিমসিগুইন উফ আমি সেটিকে মিস করেছি। আমি সবেমাত্র এটি সর্বশেষ সম্পাদনায় স্থির করেছি।
ডিজিটাল ট্রমা

3

সি (২8৮ বাইট)

সম্পাদনা করুন: এটি প্রকৃতপক্ষে নিয়মগুলি ভঙ্গ করে, যেহেতু এটি একটি ফাইল নামটি যুক্তি হিসাবে গ্রহণ করে তবে স্টাডআউটকে লেখেন। আমি পরে এডিট করব কোনও ফাইল লিখতে এবং তারপরে স্ট্যান্ডআউটে ফাইলের নাম মুদ্রণ করব।

এটি আমার প্রথম কোড গল্ফ, তাই দয়া করুন। কিছু সরল পুরানো সি ইনপুট রাখুন 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;
}

সংক্ষিপ্ত ভেরিয়েবল নাম ব্যবহার করে, অকৃত্রিম বিন্যাস অপসারণ করে এবং ফাইল হ্যান্ডলগুলি ফাঁস হওয়ার অনুমতি দেয় এবং সমস্ত সতর্কতা অক্ষম করে এটিকে 278 বাইটে হ্রাস করা হয়। (যেহেতু এটি অন্তর্নিহিত আমদানি ব্যবহার করে, এটি সমস্ত সিস্টেমে সঠিকভাবে লিঙ্ক না করে my আমার মেশিনে কাজ করে!)

#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কিছু ঘোষণাপত্র ছোট করার জন্য অন্তর্ভুক্তির সুবিধা নিতে পারেন , বা এটি এখন অবৈধ?
টিম সেগুইন

হ্যাঁ, আমি স্টিডলিব বা স্ট্রিং। H আমদানি না করে পরবর্তী সম্পাদনায় এটি ব্যবহার করছি। আমি যদি stdio.h আমদানি না করি তবে এটি চালানোর জন্য সিগফাল করে।
wjl

বিধিগুলিতে আপনার সম্পাদনার মন্তব্যের জন্য: আপনার অন্যান্য বিকল্পটি স্টিডিনের ইনপুট গ্রহণ করা। আমি সেই অনুসারেও বিবেচনা করব। এবং এছাড়াও, আমি একটি অভিহিত দৃষ্টিকোণ থেকে বলতে পারি না: এটি কি ট্রান্সপোজ ভার্সনে লাইনের শেষ থেকে সাদা অংশ ছিটকে দেয়?
টিম সেগুইন

যেহেতু আমি র‌্যামে স্টোরেজ এড়াতে একাধিকবার ফাইলটি পুনরায় পড়ি, স্টিডিও থেকে পড়া সম্ভবত আরও কঠিন। :) আমি নিশ্চিত না যে সাদা জায়গাটি ছিনিয়ে নেওয়া উচিত। দুর্ভাগ্যক্রমে, আমি এখনই মনে করি না এটি মোটেও কোনও স্ট্রিপিং করে does আমি এটিতে কাজ করতে হবে।
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(টিএবি-বিচ্ছিন্ন কলাম) ব্যবহার করে
  • প্রান্তিককরণ ট্যাবগুলি সরান, ফিলার ট্যাবগুলিকে 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। অবরুদ্ধ সংস্করণটি নীচে রয়েছে:

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এটি সম্ভবত একটি আরও ভাল রুবি সমাধানের সামনে না আসে। প্রোগ্রামিং সম্পর্কে আমি যে বিষয়গুলিকে সবচেয়ে বেশি পছন্দ করি তা হ'ল হ'ল সহযোগিতা এবং ক্রস-পরাগায়িত ধারণাগুলির আগ্রহ। আমরা আর দেখা না হওয়া অবধি স্যার। চিয়ার্স!
ওআই

2

পিএইচপি 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)));
}

এটি আমার প্রথম গল্ফ করার চেষ্টা, তাই দয়া করে দয়া করুন! এছাড়াও, টিপস / পরামর্শ ব্যাপকভাবে প্রশংসা করা হবে!


এটি আমার পিএইচপি প্রচেষ্টার চেয়ে ছোট। "চারপাশে গুলি ছড়িয়ে দুটি অক্ষর সংরক্ষণ করতে পারেন "trim"। পিএইচপি একটি সতর্কতা দেবে, তবে এটি ঠিক কাজ করে।
টিম সেগুইন

@ টিমসিগুইন সতর্কতা আউটপুট ঠিক আছে যদিও পর্দায়? @সতর্কতা দমন করতে আপনাকে ব্যবহার করতে হবে।
ericw31415

@ এরিক আমি কিছুক্ষণের জন্য সক্রিয় ছিলাম না যাতে মতামত পরিবর্তিত হতে পারে তবে অতীতে এটি অপ্রাসঙ্গিক তথ্য স্ট্যান্ডার্ড ত্রুটিতে আউটপুট হিসাবে গ্রহণযোগ্য বলে মনে করা হত।
টিম সেগুইন

এটা অনুমোদিত? যদি এটি সত্য হয়, তবে আমি এটি জানতাম না।
ericw31415

2

ম্যাথমেটিকা ​​১১7 টি চর

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)&

আমি এটি পরীক্ষা করতে পারছি না, তাই আপনি যাচাই করতে পারেন যে এটি লাইনের শেষ প্রান্তে ট্রলিং হোয়াইটস্পেস সরিয়ে দেয়? এছাড়াও এটি কোনও ক্রিয়াকলাপ সংজ্ঞায়িত করার জন্য (প্রথম নজরে) উপস্থিত হয় না, যা নিয়মের প্রয়োজন।
টিম সেগুইন

হাই @ টিম, এখন এটি একটি ফাংশন f! .. tks
মুর্তা 13

2

পার্ল (92 + 1)

স্টিডিন পড়ে স্টাডাউটকে লেখেন। স্কোর 1 যোগsay

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

2

সিজেম, 32 25 বাইট

সিজেএম এই চ্যালেঞ্জের চেয়ে নতুন, সুতরাং এই উত্তরটি গৃহীত হওয়ার যোগ্য নয়।

ব্যবহারকারী 23013 দ্বারা যথেষ্ট সংক্ষিপ্ত।

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.";

যোগ্য বা না, এটি দুর্দান্ত দেরিতে উত্তর। এই উত্তরের জন্য সবচেয়ে শক্ত অংশটি মনে হচ্ছে পেছনের জায়গাগুলি নিয়ে কাজ করছিল।
টিম সেগুইন

পছন্দ করুন বিল্ট-ইন ট্রিমিং অপারেটর ব্যতীত সিজেমে ম্যানুয়ালি এই কাজটি করা আশ্চর্যরকমভাবে কষ্টকর (ব্যবহারকারী 23013 এর পরামর্শ ইতিমধ্যে এটি যথেষ্ট উন্নত করেছে)।
মার্টিন এন্ডার

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"

ব্যাখ্যা

এই কোডটি প্রথমে তালিকার বিভাজক ( $") মানটিকে উল্লম্ব ট্যাব হিসাবে পরিবর্তন করে , এরপরে 'পিছিয়ে যান 1 টি কলাম' ( \x1b[1D) এর জন্য এএনএসআই এস্কেপ ক্রম অনুসরণ করে , তারপরে আমরা স্পষ্টভাবে মুদ্রিত ভেরিয়েবলটিকে $_একটি স্ট্রিং হিসাবে সেট করি যা এএনএসআই পালানোর ক্রম দিয়ে শুরু হয় 'লাইনের 1 কলামে মুদ্রণ শুরু করুন $.( $.পাঠ্যের বর্তমান রেখাটি কোথায় )' ( \x1b1;$.H) এবং তালিকাটিকে ফাঁকা @Fকরে দেয় (যা সেই লাইনের সমস্ত অক্ষরের একটি তালিকা, -aখালি বিভাজন প্যাটার্ন ( -F) দ্বারা অটোস্প্লিট ( ) দ্বারা জনবহুল ) যা $"প্রতিটি আইটেমের মধ্যে থাকা সামগ্রীগুলি পূর্ববর্তী অক্ষরের পরে ক্রমাগত আউটপুট পরিবর্তে কার্সারটিকে উল্লম্বভাবে নীচে নিয়ে যায়।

এটি অনলাইন চেষ্টা করুন!


1
ওরে খোদা, নিছক ভয়াবহতা! আমি এটা ভালোবাসি!
টিম সেগুইন

1

সি ++ (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;
কনরাড বোরোস্কি

@ এক্সফিক্স সাধারণত না, তবে আমি এটির জন্য করেছি
ডেভিড

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
ইউনিক্সে জোয়াচিমআইসাকসন \nহ'ল একটি। তাই আমি বলি একটি ভাল আছে।
টিম সেগুইন

@ টিমটি len("\n")1 টি দেখায়, যদিও এটি উত্স কোডে অবশ্যই 2 পৃথক অক্ষর। উত্সটি কোনও ফাইলে সংরক্ষণ করা ls116 ডিসপ্লেতে প্রদর্শিত হবে Just কেবল এটুকু বলার অপেক্ষা রাখে lenনা যে পালানোর অক্ষরগুলি পরিমাপ করার আগে প্রক্রিয়াজাত হওয়ার কারণে কোডের আকারটি পরিমাপ করার সর্বোত্তম উপায় নয় :)
জোচিম ইসাকসন

@ জোয়াচিম আইস্যাকসন ওহ, দুঃখিত আমি আপনার বক্তব্য ভুল বুঝেছি।
টিম সেগুইন

1

গল্ফস্ক্রিপ্ট, ৫১ টি চর

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

এটি প্রথম প্রচেষ্টা; আমি সন্দেহ করি এটি উন্নত হতে পারে। বেশিরভাগ কোডটি প্যাডিং এবং ট্রেলিং স্পেস অপসারণের প্রয়োজনীয়তাগুলি মেনে চলতে হয় - এগুলি ব্যতীত কেবল n%zip n*যথেষ্ট।

গীত। নিম্নলিখিত 46 -character সংস্করণ প্রদত্ত নমুনা ইনপুটটির জন্য কাজ করবে, তবে কোনও ইনপুট কলামে ফাঁকা ফাঁকা স্থান থাকলে ক্রাশ হবে:

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

Haskell,

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

এটি খুব ছোট ছিল, আমার সাদা স্থান যুক্ত করা দরকার ...


আমি নিশ্চিত যে আপনি এখানে কিছু সাদা জায়গা সরাতে পারবেন। তবে অন্যথায়, দুর্দান্ত সমাধান।
কনরাড বোরোস্কি

3
এটি আমার সিস্টেমে বেশ কার্যকরভাবে কাজ করে না। কোনও মন্তব্যে দেখানো কিছুটা শক্ত, তবে আপনি যদি এটি চালান তবে আপনি দুবার পান I am a text..? Transpose met Can you do i
মেরিনাস

হ্যাঁ, আমি ভাবছি সম্ভবত আপনি যেমন কলামগুলি অক্ষত রাখতে রেখাগুলি প্যাড করছেন না উদাহরণটির মতো। Theorectally, ফাংশন দুইবার চলমান ফলাফলের মূল স্ট্রিং (সম্ভবত সংযোজন বা চূড়ান্ত সম্পর্কে newline অপসারনের সাথে।) হওয়া উচিত
টিম Seguine

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

কে, 56

এটি এখন অনুমান পূরণ করা উচিত।

একটি স্ট্রিং গ্রহণ করে, একটি স্ট্রিং প্রদান করে।

{`/:{$[" "=*|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

আমি এটা :( পারে সন্দেহভাজন, কিন্তু একটি বৈশিষ্ট একটি বৈশিষ্ট হয়।
টিম Seguine

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 বাইট

Frownyfrog ধন্যবাদ 2 বাইট সংরক্ষণ করা

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
ফ্রাউনফ্রোগ

1

অ্যাপ্লিকেশন Lua ,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

এটি অনলাইন চেষ্টা করুন!

আমি এখানে আরেকটি লুয়া সমাধান দেখেছি, তবে আমি মনে করি না একই ভাষায় 2 টি সমাধান পোস্ট করার ক্ষেত্রে কোনও সমস্যা আছে। যদি সেখানে থাকে তবে আমাকে বলুন :)


1
একই ভাষায় একাধিক উত্তর নিয়ে কোনও ভুল নেই। এমনকি অভিন্ন উত্তরগুলি কিছুটা হলেও অনুমোদিত (যদিও এটির অনুরূপ সমাধান পোস্ট করছেন কিনা তা অন্তত যাচাই করতে উত্সাহিত করা হয়েছে)
জো কিং

দুর্ভাগ্যক্রমে আপনার ফলাফলের কোনও লাইনে শ্বেত স্পেস থাকতে হবে না
জো কিং

তবে আমি আমার কোডের আউটপুটটিতে পেছনের সাদা স্থান দেখতে পাচ্ছি না। লাইন শেষ হওয়ার পরে কোনও ফাঁকা জায়গা নেই এবং শেষে কোনও ফাঁকা লাইন নেই।
ভিসমার্ট

অংশ যে মানুষ আউট ধরা মনে হয় উপর কোন লাইন । উদাহরণস্বরূপ এটির দ্বিতীয় লাইনে অতিরিক্ত সাদা স্থান রয়েছে
জো কিং

ওহহ এখন আমি পেয়েছি! দুঃখিত। আমি সময় পাওয়ার সাথে সাথে এটিকে কাজ করার চেষ্টা করব। আমি মনে করি যে সমস্যাটি ছিল কেবলমাত্র 1 টি পরীক্ষা এবং আমি ভেবেছিলাম যে এটি "স্ট্রেস" পরীক্ষা হাহাহা তবে ঠিক আছে, আমাকে বলার জন্য ধন্যবাদ :)
ভিসমার্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.