স্কয়ার-স্ট্রিং-এ স্ট্রিং!


12

একটি স্ট্রিং দেওয়া হয়েছে, প্রথমে এটি নীচে বর্গাকার করুন:

প্রথমে স্ট্রিং লিখুন।

abcde

এরপরে, এক বামে আবর্তিত স্ট্রিংটি লিখুন।

abcde
bcdea

আপনি লেন (স্ট্রিং) লাইন না লিখে অবিরত এটি চালিয়ে যান ।

abcde
bcdea
cdeab
deabc
eabcd

এখন, স্ট্রিং থেকে এটি পড়ুন:

----+
+--+|
|+>||
|+-+|
+---+

যা দেয়:

abcdeabcdcbaedcbcdeabaede

এই স্ট্রিংটি মুদ্রণ করুন।

পরীক্ষার মামলা

abcdef -> abcdefabcdedcbafedcbcdefabcbafedefaf
cena! -> cena!cenanec!anena!cec!a!
ppcg -> ppcgppcppgcpcgpg
abc -> abcabacbc
ab -> abab
a -> a
 -> 

কোনও পরীক্ষার কেস ভুল হলে মন্তব্য করুন।

মনে রাখবেন, এটি , তাই সর্বনিম্ন সংখ্যক বাইট বিজয়ী কোড।


2
cena!ভূল. abcdeউভয় 5 অক্ষর cena!cenanec!anena!cec!a!
লিনাস

@ লিনাস আপনাকে ধন্যবাদ, আমি এটি ঠিক করেছি।
অলিভার নি

উত্তর:


7

জাভাস্ক্রিপ্ট (ES7), 83 80 78 77 বাইট

s=>s.repeat(l=s.length).replace(/./g,_=>s[(c-=--i**.5-l&1||-1)%l],c=-1,i=l*l)

বোনাস ইএস 3-অনুবর্তী প্রোগ্রাম:

for(s=prompt(r=""),c=-1,l=s.length,i=l*l;i;)r+=s[(c-=l-Math.sqrt(i--)&1||-1)%l];alert(r)

ব্যাখ্যা

এটি এই সত্যটির সুবিধা নেয় যে উদাহরণস্বরূপ দৈর্ঘ্য 5 স্ট্রিংয়ের জন্য আউটপুটটি উপস্থাপন করা যেতে পারে:

abcdeabcd cbaedcb cdeab aed e
012345678 7654321 23456 543 4

যেখানে প্রতিটি অঙ্ক স্ট্রিংয়ের একটি সূচক উপস্থাপন করে (0 থেকে শুরু), স্ট্রিংয়ের দৈর্ঘ্যকে মডুলো করে। অন্য কথায়, যদি n স্ট্রিংয়ের দৈর্ঘ্য হয়, আমরা সূচক 2n - 1 বার বৃদ্ধি করি , তারপরে এটি 2 (এন - 1) - 1 বার হ্রাস করে , তারপর এটি 2 (এন - 2) - 1 বার ইত্যাদি বৃদ্ধি করে etc. এটি নিম্নলিখিত অ্যালগরিদমে সরল করা যেতে পারে:

  • সূচি i -1 এ শুরু করুন ।
  • ব্যাপ্তির প্রতিটি পূর্ণসংখ্যার x এর জন্য [n 2 ..1] :
    • তাহলে মেঝে (SQRT (এক্স)) একই ভাবে সমতা বজায় (এমনকি / বিজোড়) হিসাবে হয় এন , বাড়ায় আমি
    • অন্যথায় হ্রাস i
    • আউটপুটটিতে সূচক i মোড এন- তে অক্ষর যুক্ত করুন ।

এটি কাজ করে কারণ মেঝে (স্কয়ার্ট (এক্স)) 2n - 1 পুনরাবৃত্তির পরে প্যারিটিগুলি পরিবর্তন করে , তারপরে 2 (এন - 1) - 1 পুনরাবৃত্তি ইত্যাদি


Rediculous। ভাল করেছ!
মেয়রমন্টি

1

পাইথ , 15 বাইট

.Wp.(H0_CZ.<LQU

একটি প্রোগ্রাম যা একটি এর ইনপুট নেয় "quoted string"এবং ফলাফল মুদ্রণ করে।

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন (একাধিক ইনপুট জন্য সংশোধিত)।

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

.Wp.(H0_CZ.<LQU  Program. Input: Q
            L U  Map over [0, 1, 2, 3, ..., Q-1] (implicit input):
          .< Q     Q left-shifted by that many characters
                 Call this X
.W               While
   .(H0          popping the first element of X (mutates X in-place)
  p              and printing it with no trailing newline is truthy:
         Z           X = 
        C            X transposed
       _             reversed

1

পাইথন ২.7 (সিএমডি.এক্সইএইজে), 91 বাইট 91

এটির জন্য একটি ওয়ার্কিং ব্যাকস্পেস ( \b) সহ একটি টার্মিনাল প্রয়োজন , এবং repl.it বা ideone.com এ কাজ করবে না । কমাতে শেষ হওয়া একটি মুদ্রণ বিবৃতি নতুন লাইন বা রিটার্নের পরিবর্তে স্থানের সাথে আরও আউটপুট পৃথক করে। ব্যাকস্পেস আমাদের পৃথককারী স্থানটি ওভাররাইট করতে দেয়।

s=input();r=s[::-1];n=len(s)-1;i=0
while i<=n:print'\b'+s[i:]+s[:n-i]+r[i+2:]+r[:n-i],;i+=2

পাইথন 2.7, 96 বাইট

আইডোন.কম বা repl.it এ চেষ্টা করুন (অলিভারকে ধন্যবাদ) ইনপুট একটি পাইথন স্ট্রিং, যেমন হওয়া আবশ্যক 'cena!'

s=input();r=s[::-1];n=len(s)-1;i=0;S=''
while i<=n:S+=s[i:]+s[:n-i]+r[i+2:]+r[:n-i];i+=2
print S

চার টুকরা লুপ দ্বারা যোগ করা ( s[i:], s[:n-i], r[i+2:], r[:n-i]) সর্পিল চার প্রান্ত থেকে নেয়া হয়। 01234বর্গ সহ উদাহরণস্বরূপ :

01234
12340
23401
34012
40123

সুতরাং আমরা নিতে 01234, 0123, 210, 4321। চলকটি iপ্রক্রিয়াটির প্রতিটি ধাপে উপরের-বাম মানের সূচক হয় is চূড়ান্ত সর্পিল মধ্যে বেশ কয়েকটি স্লাইস খালি থাকতে পারে।


এটা সম্ভবত শুধুমাত্র বাঁচাতে, কিন্তু পাইথন 3 পরিবর্তিত করে, পরিত্রাণ এর S='', print Sএবং S+=, এবং পূর্বে মোড়ানো সবকিছু i+=2একটি print()সঙ্গে বিবৃতি sep='', আপনি 2 বাইট সংরক্ষণ করতে পারবেন।
কেদে

@ শেবাং আমি এখনই অনুসরণ করছি না। একটি অজগর 3 নিখরচায় নিজেকে উত্তর দিন।
লিনাস

আপনি পরিবর্তন i<=nকরতে পারেনn>i
অলিভার নি

এটি একটি বাইট সংরক্ষণ করে।
অলিভার নি

@ অলিভার, ধন্যবাদ ... তবে এটি কার্যকর হয় না"a string of odd length."
লিনাস

1

জেলি , 11 10 বাইট

ẋ2µṖȮṖUµÐL

TryItOnline! , বা সমস্ত পরীক্ষা

কিভাবে?

নিরবিচ্ছিন্ন বর্গক্ষেত্রটি "শীর্ষ-প্রান্তের সাথে সাথে ডান-প্রান্ত" এবং "নীচে-প্রান্তের সাথে বাম-প্রান্ত" রানগুলির একটি সিরিজ, যার প্রতিটিই প্রথম এবং শেষ অক্ষর ছাড়াই পূর্ববর্তী রানের বিপরীত এবং যার প্রথমটি শেষ অক্ষর ব্যতীত ইনপুট প্লাস (যেমন ইনপুটটির "abcde"আউটপুট থাকে "abcdeabcd" + "cbaedcb" + "cdeab" + "aed" + "e")।

ẋ2µṖȮṖUµÐL - Main link: s                            e.g. abcde
ẋ2         - repeat s twice                          e.g. abcdeabcde
  µ    µ   - monadic chain separation
        ÐL - repeat until results are no longer unique:
   Ṗ       -     remove the last character                abcdeabcd / cbaedcb / cdeab / aed / e   / ""
    Ȯ      -     print z (with no linefeed) and return z
     Ṗ     -     remove the last character                abcdeabc  / cbaedc  / cdea  / ae  / ""  / ""
      U    -     reverse                                  cbaedcba  / cdeabc  / aedc  / ea  / ""  / "" <- no longer unique.

1

05 এ বি 1 ই, 12 বাইট

2×[DõQ#¨D?¨R

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

ব্যাখ্যা:

 2×[DõQ#¨D?¨R
               # Implicit input
 2×            # Repeat twice
   [           # Begin infinite loop
┏>  DõQ#       # If empty string, break
┃       ¨      # Remove last character
┃        D     # Duplicate
┃         ?    # Print with no newline and pop
┃          ¨   # Remove last character
┃           R  # Reverse
┗━━━━━━━━━━━━┛ # Implicit end infinite loop


0

সি, 95 94 বাইট

i,j,k,l;f(char*s){for(k=-1,l=i=strlen(s);i--;)for(j=i*2;~j--;putchar(s[(k+=(l-i)%2*2-1)%l]));}

@ETH প্রোডাকশন উত্তর দ্বারা অনুপ্রাণিত।


0

পার্ল, 99 বাইট

$_=<>;
chop;
@a=split//;
print(@a[$%,(@f=1-($b=@a-$%)..$b-3),$b-1?$b-2:(),reverse@f]),$%+=2 until$%>@a

হোয়াইটস্পেস প্রোগ্রামটির অংশ নয় এবং পাঠযোগ্যতার জন্য সরবরাহ করা হয়েছে।

অত্যন্ত দক্ষ কোড নয়। আমার প্রথম তিনটি লাইন একরকমভাবে সংক্ষিপ্ত করতে সক্ষম হওয়া উচিত তবে আমি যা করার চেষ্টা করেছি তা ব্যর্থ হয়েছে। এই টেরিনারি অপারেটরটিকেও কোনওভাবে সংশোধন করা দরকার, তবে এইভাবে রাখার ফলে 10 কোড বাইটের মতো করে আমার কোডটি সংক্ষিপ্ত করা সম্ভব হয়েছে কারণ আমি এতটাই কাটতে পারি।

কোডটি প্যালিনড্রোমগুলির একটি তালিকা সংকলন করে কাজ করে, এমনকি সংখ্যার দ্বারা পৃথক করে, যা টানতে হবে স্ট্রিংয়ের স্থান মানগুলি উপস্থাপন করে।


আপনি -F 1 এবং 3 লাইন প্রতিস্থাপন করবে যা ব্যবহার করতে পারেন এটিকে echo -nসরানোর জন্য ইনপুট দিন chop। (এটি আপনাকে 81 বাইটের কাছাকাছি পাওয়া উচিত)
দাদা

0

আসলে , 21 13 বাইট

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

গল্ফিং পরামর্শ স্বাগত জানাই। এটি অনলাইন চেষ্টা করুন!

2*`dX;╕dXR`Y╛

Ungolfing

         Implicit input s.
2*       Push a string that repeats s two times.
`...`Y   Call the following function until there is no change from the last call
  dX       Discard the last element. Call this new string m.
  ;╕       Duplicate m and add it to the running total in register 1.
  dXR      Discard the last element again and reverse the string.
╛        Push the unspiralled string from register 1 to the stack.
         Implicit return.

0

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

x=input()*2
while x:x=x[:-1];print(x,end='');x=x[:-1][::-1]

repl.it

আমার জেলি উত্তর একটি সরাসরি বন্দর ; কেবলমাত্র একটি সম্পূর্ণ প্রোগ্রাম ইনপুট গ্রহণ করছে (কোনও ফাংশনের চেয়ে)। একটি মুদ্রণ বিবৃতি যা ডিফল্টভাবে সম্পর্কে newline মুদ্রণ করতে হবে।
print(x,end='')


-1

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

s=input();r,n,i=s[::-1],len(s)-1,0
while n-i:print(s[i:]+s[:n-i]+r[i+2:]+r[:n-i],end='');i+=2

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


পরিবর্তে print(...,end=''), করুনprint(end=s[i:]+s[:n-i]+r[i+2:]+r[:n-i]
ফ্লিপট্যাক

1
যাইহোক, এই সমাধানটি কাজ করে না abcde, এটি eশেষে একটি অনুপস্থিত ।
ফ্লিপট্যাক

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