গল্ফ একটি স্ট্রিং টুইস্টার


24

স্ট্রিংগুলি কীভাবে পাকানো হয়

মোচড়ানো অ্যালগরিদম খুব সহজ। প্রতিটি কলামটি তার সূচকে নীচে স্থানান্তরিত হয় (কল 0 টি 0 নীচে সরানো হয়, 1 টি 1 সরানো 1, ...)। শীর্ষে কলাম শিফট মোড়ানো। এটি এর মতো কাজ করে:

aaaa
bbbb
cccc

হয়ে:

a
ba
cba
----
 cba
  cb
   c

শীর্ষে মোড়ক লাইনের নীচে সবকিছু সহ। বাস্তব উদাহরণ:

Original:
\\\\\\\\\\\\
............
............
............

Twisted:
\...\...\...
.\...\...\..
..\...\...\.
...\...\...\

ইনপুট

ইনপুট হয় স্ট্রিংগুলির একটি অ্যারে বা একাধিক-লাইনের স্ট্রিং। সমস্ত লাইন একই দৈর্ঘ্য আছে।

আউটপুট

বাঁকানো স্ট্রিং, মাল্টি-লাইন আউটপুট থেকে স্টডি-আউট (বা নিকটতম বিকল্প)।

উদাহরণ:

( >ইনপুট বোঝায়, পিছনের স্থান গুরুত্বপূর্ণ)

>Hello, world!
>I am another 
>string to be 
>twisted!     

Hwrmoe oo br!
Ieii ,dttr e 
s lsna !ohl  
ttaltgnw  ed 


>\\\\\\\\\\\\
>............
>............
>............

\...\...\...
.\...\...\..
..\...\...\.
...\...\...\


>abcdefg
>.......

a.c.e.g
.b.d.f.


>abcdefghij
>..........
>..........

a..d..g..j
.b..e..h..
..c..f..i.


>\\\\.....././
>...../.......
>........././.
>..../.^\\....

\.........../
.\....^..../.
..\../.\../..
...\/...\/...

>cdeab
>deabc
>eabcd
>abcde

cbbbb
ddccc
eeedd
aaaae


>aeimquy37
>bfjnrvz48
>cgkosw159
>dhlptx260

ahknqx147
beloru258
cfipsvy69
dgjmtwz30


>abcdefghi
>jklmnopqr
>stuvwxyz1
>234567890

a3ume7yqi
jb4vnf8zr
skc5wog91
2tld6xph0

12
এর জন্য আর কোনও ম্যাথমেটিকার বিল্টিন না থাকুক।
মামা ফান রোল

1
আমরা কি ধরে নিতে পারি যে ইনপুটটিতে কেবল ASCII থাকবে? বা কেবল প্রিন্টযোগ্য এএসসিআইআই + লাইনফিড বা কিছু?
মার্টিন এন্ডার

হ্যাঁ, কেবলমাত্র ASCII এবং নিউলাইন (যদি না আপনি অ্যারের হিসাবে ইনপুট নেন)।
জে আতকিন

উত্তর:


3

ব্র্যাচল্যাগ , 5 বাইট

iᵇ↻₎ᵐ

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

কলামগুলির অ্যারে হিসাবে ইনপুট পান (যা মনে হয় প্রশ্নের নির্দিষ্টকরণের মধ্যে রয়েছে)।

iᵇ- অ্যারের প্রতিটি উপাদানের জন্য, এটির (0-ভিত্তিক) সূচীর সাথে যুক্ত করুন
- ফলাফলের প্রতিটি উপাদানকে এই মানচিত্রটি মানচিত্র করুন:
↻₎- শেষ উপাদান (সূচী) হিসাবে নির্দিষ্ট পরিমাণে বিজ্ঞপ্তি দিয়ে সার্কিট (কলাম) করুন

সহজেই এমন সংস্করণে প্রসারিত হয়েছে যা একক একাধিক স্ট্রিং গ্রহণ করে:

13 বাইট

ṇẹ\iᵇ↻₎ᵐ\cᵐ~ṇ

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


এটি আশ্চর্যজনক তথ্য সংক্ষেপণ।
জে আতকিন


7

এপিএল (ডায়ালগ) , 7 বাইট

⊖⊖⊖⍨⍬⍋⍉

প্রয়োজন ⎕io←0

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

⍬⍋⍉0 থেকে কলামের সংখ্যার পরিসর পেয়ে
উলম্বভাবে
⊖⊖⍨⍬⍋⍉ঘোরানো (উল্লম্বভাবে) উল্টানো ইনপুটটিকে 0,1..
বিপরীত করে ফিরে আসে এবং ফিরে আসে return


6

রেটিনা , 111 101 92 87 বাইট

বাইট গণনাটি আইএসও 8859-1 এনকোডিং ধরেছে।

(?<=((.))*)(?=(?<1>.*¶)*.*(?<=(?=(?<-2>.)*(.))(?<-1>.+¶)*.*(.(?<=^(?<-1>¶?.+)*))*)).
$3

ওহ, এটি একটি একক রেজেক্স বিকল্পে সমাধান করুন। :) (সম্ভাবনা রয়েছে, বেশ কয়েকটি ব্যবহার করে একটি সংক্ষিপ্ত সমাধান পাওয়া যায় তবে এর মধ্যে মজাটা কোথায় ...)

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

ব্যাখ্যা

এর জন্য ভারসাম্যপূর্ণ গোষ্ঠীগুলির কিছু প্রাথমিক জ্ঞান প্রয়োজন । সংক্ষেপে, .NET এর রেজেক্স গন্ধ আপনাকে একক গোষ্ঠীর সাথে একাধিকবার ক্যাপচার করতে দেয়, সমস্ত ক্যাপচারকে স্ট্যাকের দিকে ঠেলে দেয়। সেই স্ট্যাকটি এ থেকে পপ করা যায়, যা আমাদের এটিকে রেজেক্সের অভ্যন্তরের জিনিসগুলি গণনা করার জন্য ব্যবহার করতে দেয়।

(?<=((.))*)

এটি উভয় গ্রুপে 1এবং 2ম্যাচের সামনের প্রতিটি অক্ষরের জন্য (বর্তমান লাইনে) একটি ক্যাপচার ঠেলে দেয় । এটি ম্যাচের অনুভূমিক অবস্থান গণনা করে।

বাকীটি একদম তাকাতে:

(?=(?<1>.*¶)*.* [...] )

আমরা প্রতিটি লাইনের সাথে মেলে এবং এটিকে গ্রুপের দিকেও ঠেলে দেই 1, যেমন গ্রুপটি 1এখন অনুভূমিক এবং উল্লম্ব অবস্থানের সমষ্টি (যেখানে পরবর্তীটি নীচ থেকে গণনা করা হয় )। এটি নীচে বাম কোণ থেকে শুরু করে ক্রমবর্ধমান মানগুলির সাথে গ্রিডের কর্ণগুলি লেবেল করে। যে .*তারপর স্ট্রিংয়ের শেষ প্রান্ত ইঞ্জিন এর কার্সার চলে আসে।

আমরা এখন একটি লুকবিহাইডে স্যুইচ করি, যা ডান থেকে বামে .NET:

(?<= [...] (.(?<=^(?<-1>¶?.+)*))*)

এটি বার বার Hগ্রুপ থেকে ঠিক ক্যাপচারগুলি পপ করবে 1( ইনপুটটির Hউচ্চতা কোথায় )। এর উদ্দেশ্য হ'ল গ্রুপ মডুলো নেওয়া H। এরপরে, গোষ্ঠীতে 1সারি রয়েছে (নীচে থেকে গণনা করা হয়েছে) যা থেকে বর্তমান কলামে নতুন অক্ষরটি চয়ন করা যায়।

(?=(?<-2>.)*(.))(?<-1>.+¶)*.*

অন্য ডানদিকে আবার ডান থেকে শুরু। নতুন অক্ষরটি বেছে নেওয়ার জন্য সারিটি অনুসন্ধান করার জন্য (?<-1>.+¶)*.+এখন গোষ্ঠী ব্যবহার করে 1এবং তারপরে গ্রুপটি ব্যবহার করে লুপহ্যাড সঠিক কলামটি খুঁজে পাবে 2

কাঙ্ক্ষিত চরিত্রটি দলে দলে বন্দী হয় 3এবং প্রতিস্থাপনের মাধ্যমে এটি আবার লেখা হয়।


আহা, রেটিনার উত্সটি পড়া সুন্দর এবং স্পষ্ট ছিল :) $+দরকারী মনে হচ্ছে ... বিশেষ করে যদি আপনি কেবল একটি প্রতিস্থাপন করতে চান: ^)
ফ্রাইআম দ্য এজম্যান

@ ফ্রাইআম দ্য এজিগম্যান $+আসলে বেশ অব্যর্থ ... এটি এমএসডিএন-এর বিবরণটি এর চেয়ে অনেক বেশি কার্যকর বলে মনে হচ্ছে কারণ এর দ্বারা বোঝা যায় যে (a)|(b)-> $+$+সমস্ত aগুলি এবং bগুলি দ্বিগুণ করবে তবে পরিবর্তে এটি সমস্ত aগুলি সরিয়ে ফেলবে , কারণ এটি কেবল সিন্টেক্সিকভাবে শেষ গ্রুপটিকে বোঝায় । এর অর্থ হ'ল আপনি খুব অলস হয়ে থাকলে (যেমন আমি ছিলাম) তবে সমস্ত গ্রুপ গণনা এড়ানোর একমাত্র উপায়। গল্ফ করার জন্য এটি কেবলমাত্র বাইটস সংরক্ষণ করে যখন আপনার 9 টিরও বেশি গ্রুপ রয়েছে, যা সম্ভবত বিরল।
মার্টিন এন্ডার

এটি দুর্ভাগ্যজনক ... সম্ভবত রেটিনার একটি নতুন প্রতিস্থাপন গ্রুপ টাইপ থাকতে পারে যা শেষ খালি খালি ম্যাচ গ্রুপটি ফেরত দিতে পারে? যাইহোক, ব্যাখ্যা জন্য ধন্যবাদ! :)
FryAmTheEggman

@ ফ্রাইআম দ্য এজিগম্যান এটি করবে (রেটিনার Regex.Replaceজন্য পুনর্লিখনের সময় এটি আমার মনে ছিল এমন একটি বিষয় , তবে আমি এখনও এটি বাস্তবায়নের কাছাকাছি পাইনি)।
মার্টিন এন্ডার

4

সিজেম, 13 বাইট

qN/zee::m>zN*

এটি এখানে পরীক্ষা করুন।

ব্যাখ্যা

q    e# Read all input.
N/   e# Split into lines.
z    e# Transpose to get an array of columns.
ee   e# Enumerate, pairing each column with its index.
::m> e# Map: fold: rotate (cyclically shifting each column by its index).
z    e# Transpose again.
N*   e# Join with linefeeds.

2
আপনি প্রায় সেই উত্স কোডটি উচ্চারণ করতে পারেন।
mınxomaτ

4

টিস্ক্রিপ্ট, 10 বাইট

xHl@C(r╢tD

টিস্ক্রিপ্ট 3 এর অত্যন্ত সংক্ষিপ্ত বাক্য গঠনকে ধন্যবাদ, এটি সত্যই সংক্ষিপ্ত: ডি

সিগমা লুপ বগি না হলে 1 বাইট সংক্ষিপ্ত হবে

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

ব্যাখ্যা

      // Implicit, x = input
xH    // Transpose input
l@    // Loop
 C(r╢   // Cycle column by index
        // `╢` exits loop
t    // Transpose
D    // Join on \n

3

পাইথন 3, 164 বাইট

দীর্ঘ শটের সেরা উত্তর নয়, পাইথনের প্রথম ...

s=list(zip(*open(0).readlines()))[:-1]
r=[[s[i][(j-i)%len(s[i])] for j in range(len(s[i]))] for i in range(len(s))]
print('\n'.join([''.join(l) for l in zip(*r)]))

1
বেশ কয়েকটি ক্ষেত্রে যে স্থান অনুসরণ করে )বা ]বেশিরভাগ ক্ষেত্রে আপনি কিছুটা বাইট সংরক্ষণ করতে পারেন , উদাহরণস্বরূপ ''.join(l)for l in....পুরোপুরি বৈধ
wnnmaw

3

ম্যাটল্যাব, 92 36 বাইট

s=bsxfun(@circshift,s,0:size(s,2)-1)

ধরে নিলাম ইনপুট স্ট্রিংটি sইতিমধ্যে 2D চর অ্যারে / ম্যাট্রিক্স আকারে রয়েছে, যেমন

s = ['abcdefg';'.......'];
s = ['\\\\.....././';'...../.......';'........././.';'..../.^\\....'];

ব্যাখ্যা: ম্যাট্রিক্সের কলামগুলির মাধ্যমে পুনরাবৃত্তি। প্রতিটি কলামের জন্য কলামের সূচকের সমান (-1 ম্যাটল্যাব সূচকের কারণে) অক্ষরের সংখ্যা অনুসারে এর উপাদানগুলির একটি বিজ্ঞপ্তি শিফট সম্পাদন করে।


2

ব্র্যাচল্যাগ , 96 বাইট

$\:0{h_.|[M:I]hh:I{bh0,?h.|[C:I]h$)D,I-1=:Dr:2&.}C,I+1=J,Mb:J:1&:[C]rc.}$\{hA,[A]:"~s
"w,?b:3&;}

এটি অক্ষর কোডগুলির স্ট্রিংগুলির একটি তালিকা ইনপুট হিসাবে এবং কোনও আউটপুট হিসাবে প্রত্যাশা করে না eg brachylog_main([`aaaa`,`bbbb`,`cccc`],_).

এটি একটি হাস্যকর দীর্ঘ উত্তর, এবং এটি করার জন্য সম্ভবত আরও একটি ছোট উপায় আছে way

ব্যাখ্যা

§ Main Predicate

$\:0{}$\{}                            § Create a list containing the transposed input and 0
                                      § Call sub-predicate 1 with this list as input
                                      § Transpose its output and pass it as input to
                                      § sub-predicate 3


§ Sub-predicate 1

h_.                                   § If the matrix is empty, output is empty list
   |                                  § Else
    [M:I]hh:I{}C,                     § Input is [M,I], call sub-predicate 2 with the first
                                      § line of M and I as input. Its output is C.
                 I+1=J,Mb:J:1&        § Call sub-predicate 1 with M minus the first line
                                      § and I+1 as input
                              :[C]rc. § Its output is appended after C, which is then
                                      § unified with the output of sub-predicate 1.


§ Sub-predicate 2

bh0,?h.                               § If the second element of the input list is 0,
                                      § output is the first element of the input
       |                              § Else
        [C:I]                         § Input is [C,I]
             h$)D,                    § Perform a circular permutation of C from left to
                                      § right (e.g. [a,b,c] => [c,a,b]) and unify it with D
                  I-1=:Dr:2&.         § Call sub-predicate 2 with D and I-1 as input, unify
                                      § its output with sub-predicate 2's output


§ Sub-predicate 3

hA,[A]:"~s\n"w,                       § Write the first line of the input as a char codes
                                      § string followed by a new line

               ?b:3&;                 § Call sub-predicate 3 with input minus the first
                                      § line. If it fails (empty input), terminate

2

জাভাস্ক্রিপ্ট, 92 89 বাইট

ধন্যবাদ বন্ধ 3 বাইট @Neil

s=>(z=s.split`
`).map((m,i)=>m.replace(/./g,(n,j)=>z[((l=z.length)*j+i-j)%l][j])).join`
`


ব্যবহার করে আপনি 3 বাইট সংরক্ষণ করতে পারবেন replace: m.replace(/./g,(n,j)=>z[((l=z.length)*j+i-j)%l][j])
নিল

1
প্রকৃতপক্ষে, [...m].map(সমস্ত উপায় এবং প্রথমটি সহ .join
নিল

2

পাইথন 2, 115 বাইট

lambda s:'\n'.join("".join(s)for s in zip(*[k[-i%len(k):]+k[:-i%len(k)]for i,k in enumerate(zip(*s.split('\n')))]))

zipএটিকে এক লাইনে নামানোর জন্য বিস্মিত হওয়ার জন্য ধন্যবাদ । এটি এখানে কর্মে দেখুন ।


2

এমএটিএল , 18 21 বাইট

Zy2):"G@Z)@qYS]N$h

ইনপুট ফর্ম হয়

['Hello, world!'; 'I am another '; 'string to be '; 'twisted!']

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

এটি কীভাবে কাজ করে :

Zy       % implicitly take input: 2D char array. Get its size
2)       % second element from size vector: number of columns, say n
:        % create vector [1,2,...,n]
"        % for each element k in that vector
  G      %   push input
  @      %   push k
  Z)     %   k-th column from input
  @qYS   %   circularly shift k-1 positions
]        % end for loop
N$h      % concatenate all stack contents horizontally
         % implicitly display

1

এফ #, 105 বাইট

এটিতে আমার প্রথম ছুরিকাঘাত (কেবল একটি \nচরিত্রের প্রয়োজন):

let m x y=(x%y+y)%y
let f(a:string[])=Array.mapi(fun i x->String.mapi(fun j _->a.[m(i-j)a.Length].[j])x)a

ব্যবহার:

f [| @"\\\\\\\\\\\\"
     "............"
     "............"
     "............" |]

আমি মনে করি না আমি পিপিসিজিতে এর আগে এফ # দেখেছি।
জে আতকিন

1

জাভাস্ক্রিপ্ট (ES6), 73 বাইট

t=>t.replace(/./g,(_,i)=>t[(i+s*l-i%l*l)%s],l=t.search`
`+1,s=t.length+1)

ব্যাখ্যা

t=>
  t.replace(/./g,(_,i)=> // replace each character at index i
    t[                   // get the character at index:
      (i                 // start at i
        +s*l             // add s*l to ensure the result is always positive for %s
        -i%l*l           // move the index upwards the num of chars from start of the line
      )%s                // shift the index into the the range of s
    ],
    l=t.search`
`+1,                     // l = line length
    s=t.length+1         // s = input grid length (+1 for the missing newline at the end)
  )

পরীক্ষা


1

জাপট, 29 বাইট

Uy £XsV=(Y*Xl -Y %Xl)+X¯V}R y

এটি অনলাইন পরীক্ষা!

কিভাবে এটা কাজ করে

Uy        // Transpose rows and columns in the input string.
£     }R  // Map each item X and index Y in the result, split at newlines, to:
Y*Xl -Y   //  Take Y times X.length and subtract Y.
%Xl)      //  Modulate the result by X.length.
XsV=      //  Set V to the result of this, and slice off the first V chars of X.
+X¯V      //  Concatenate this with the first V chars of X.
y         // Transpose the result again.
          // Implicit: output last expression

1

হাস্কেল, ৮১ বাইট

let t=transpose in t.snd.mapAccumR(\c l -> 1+c,take(length l)(drop c$cycle l))0.t

সিজেএম উদাহরণটির পুনরায় বাস্তবায়ন, যদিও বিপরীত, মানচিত্র এবং গণনা মানচিত্রের অংশ, যদিও আমাদের আর এটির প্রয়োজন হবে না, এসএনডি সংগ্রহকারীকে সরিয়ে দেয়, বিপরীতটি ডান ভাঁজের কেবলমাত্র একটি পার্শ্ব প্রতিক্রিয়া।


1

হাস্কেল, 65 বাইট

g l@("":_)=l;g l|t<-tail<$>l=zipWith(:)(head<$>l)$g$last t:init t

ব্যবহারের উদাহরণ: g ["1111","2222","3333"]-> ["1321","2132","3213"]


1

এমএটিএল , 9 বাইট

"@X@qYS&h

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

লুই মেন্দোর বিদ্যমান এমএটিএল উত্তরের সাথে মিলের খুব সুন্দর , তবে সেই বৈশিষ্ট্যগুলি ব্যবহার করে সংক্ষিপ্ত আকারে সম্ভবত ভাষাটি ছিল না: ১. "এখন স্বয়ংক্রিয়ভাবে ম্যাট্রিক্সের কলামগুলির মাধ্যমে পুনরাবৃত্তি ঘটে , সুতরাং কলাম সূচকগুলি তৈরি করে সেগুলির মধ্যে সূচীকরণের কোনও ব্যয়বহুল ব্যবসা নেই ( এটি হ'ল বিগি), ২) &hশর্টহ্যান্ড বলার উপায় হিসাবে N$hএবং ৩ ]নির্দিষ্টভাবে নির্দিষ্ট না হলে অন্তর্ভুক্ত লুপ শেষ end

পর্যায়ক্রমে, একই উপজাতের জন্য:

tsn:ql&YS

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

      &YS   % circularly shift the matrix
     l      % across rows (i.e. shift each column) by the amounts
            %  given by this array:
tsn         % duplicate input, get the sum of each column, get the 
            %  number of elements in that (which is the number of columns)
   :q       % construct range 1 to ncols, then decrement to start at 0
            % (implicit output)

0

সি (ঝনঝন) , 114 বাইট

MinGW এর অধীনে জিসিসিতে কাজ করে in টিআইওর জিসিসি strlenলুপের জন্য প্রথমটির সংক্ষেপে অভিব্যক্তিটি ব্যবহার করে বিভ্রান্ত হয় ।

f(L,n)char**L;{for(int l=strlen(*L),i=0,j,c;i<n;i++)for(j=c=0;j<=l;j++,c=c?c-1:n-1)putchar(l^j?L[(c+i)%n][j]:10);}

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.