90 ° স্ব-ঘূর্ণায়মান প্রোগ্রাম


20

ভূমিকা

এমন একটি সম্পূর্ণ প্রোগ্রাম লিখুন যা ASCII অক্ষরের একটি আয়তক্ষেত্রাকার ব্লককে 90 ডিগ্রি ঘড়ির কাঁটার দিকে ঘোরায়। যখন প্রোগ্রামটি নিজেই 90 ডিগ্রি ঘড়ির কাঁটার দিকে ঘোরানো হয়, তখন এটি ASCII অক্ষরের একটি ব্লককে 90 ঘড়ির কাঁটার দিকে ঘোরায়।

বিধি

  • আপনি অনেকগুলি বিল্ট-ইনগুলি ব্যবহার করেন না যা ম্যাট্রিকগুলি ঘোরান বা স্থানান্তর করে। উদাহরণস্বরূপ, ম্যাটল্যাব / অক্টেভে rot90এবং ট্রান্সপোজ অপারেটরের 'অনুমতি নেই।
  • আপনাকে অবশ্যই একটি সম্পূর্ণ প্রোগ্রাম লিখতে হবে যা STDIN এবং STDOUT বা নিকটতম সমতুল্য ব্যবহার করে।
  • আপনার প্রোগ্রামটি অবশ্যই আয়তক্ষেত্রাকার হবে এবং ধরে নিও যে ইনপুটটিও আয়তক্ষেত্রাকার।
  • ইনপুট এবং আউটপুট একটি নতুন লাইনের দ্বারা পৃথক স্ট্রিং এবং এর পিছনে নতুন লাইনের উপস্থিতি থাকবে না।

যখন এর উত্স কোডটি ইনপুট হিসাবে চালিত হয়, আপনার প্রোগ্রামটি অবশ্যই 90 ডিগ্রি ঘড়ির কাঁটার দিকে ঘোরান। আউটপুট অবশ্যই একই ভাষার দ্বিতীয় প্রোগ্রাম হতে হবে যা 90% ডিগ্রি ঘড়ির কাঁটার দিকে তার ইনপুটটিকে ঘোরায়। যখন ঘোরানো প্রোগ্রামটিকে তার উত্স কোডটি ইনপুট হিসাবে দেওয়া হয়, তখন এটি মূল প্রোগ্রামটির উত্স কোড আউটপুট করে।

দ্রষ্টব্য: উভয় প্রোগ্রামই কেবল কোনও নিজস্ব উত্স কোড নয়, যে কোনও ইনপুট জন্য কাজ করবে , সুতরাং একটি অক্ষরের কুইন অনুমোদিত নয়।

উদাহরণ

বলুন নীচেরটি একটি বৈধ প্রোগ্রাম যা এর ইনপুটটি 90 ডিগ্রি অনুমানমূলক ভাষায় উদাহরণস্বরূপ ঘোরাচ্ছে।

^f a2% 3
lk (^_^&
       v
D8 $4  /

ইনপুট হিসাবে নিজেকে চালিত করার সময়, এটি অন্য একটি বৈধ প্রোগ্রাম আউটপুট দেয় যা তার ইনপুটটিকে ঘড়ির কাঁটার দিকে ঘোরায়:

D l^
8 kf

$ (a
4 ^2
  _%
  ^ 
/v&3

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

$ examplelang program < program > rotProg
$ examplelang rotProg < rotProg > program1
$ diff -s program program1
Files program and program1 are identical

সংক্ষিপ্ততম প্রোগ্রামের জয়। স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ করা হয়েছে।

উত্তর:


17

সিজেম, 26 25 21 বাইট

WqN/":.+""\%"(~+N-~N*

চারটি বাইট বন্ধ করে দেওয়ার জন্য @ মার্টিনব্যাটনারকে ধন্যবাদ!

সিজেএম ইন্টারপ্রেটার: মূল প্রোগ্রাম | অনলাইনে এটি ব্যবহার করে দেখুন ঘোরানো প্রোগ্রাম

এটি ঘোরানো প্রোগ্রাম:

W
q
N
/
"
:
.
+
"
"
\
%
"
(
~
+
N
-
~
N
*

ধারণা

লাইনফিডে বিভক্ত করে, ফলস্বরূপ সারিগুলির ক্রমকে বিপরীত করে, কলামগুলির সাথে সারিগুলি স্থানান্তর করে এবং শেষ পর্যন্ত সারিগুলিতে যোগ দিয়ে লাইনফিডগুলি দিয়ে পৃথক করে আমরা ইনপুটটিকে ঘূর্ণায়মান দিকে এক চতুর্থাংশ ঘোরান।

তেমনি, আমরা প্রথমে ট্রান্সপোসেস করে, তারপরে সারিগুলিকে বিপরীত করে ঘড়ির কাঁটার বিপরীতে ঘোরান।

যেহেতু অন্তর্নির্মিত স্থানান্তর zনিষিদ্ধ, তাই আমরা :.+একই প্রভাব অর্জন করতে (ভেক্টরাইজড চরিত্র বা স্ট্রিং-ক্যারেক্টারেশন দ্বারা হ্রাস) ব্যবহার করতে পারি ।

:.+উত্স কোডের একমাত্র অংশ যা ভাঙা যায় না। আমরা স্ট্রিংগুলিকে ধাক্কা দিয়ে থাকি "W%"এবং ":.+"দ্বিতীয় শর্তে যদি একটি লাইনফিড থাকে, কনটেনেট থাকে, সমস্ত লাইনফিড সরিয়ে দেয় এবং ফলাফলটি মূল্যায়ণ করে তবে শর্তসাপেক্ষে এগুলি বিপরীত করুন।

কোড

W     e# Push -1.
qN/   e# Read all input at split it at linefeeds.
":.+" e# Push a string that, when evaluated, transposes rows and columns.
      e# As explained in the previous section, this does NOT use a built-in
      e# for matrix transposition.
"\%"  e# Push a string that, when evaluated, reverses the rows.
(~    e# Shift out the first character and evaluate it.
      e# For the original code, this evaluates '\', swapping the strings on
      e# the stack. For the rotated code, this evaluates `\n', doing nothing.
+N-   e# Concatenate and remove linefeeds.
      e# The stack now contains:   -1 input "%:.+"   or   -1 input ":.+\%"
~     e# Evaluate the string on top of the stack.
N*    e# Join the resulting array, separating by linefeeds.

এটা এত সংক্ষিপ্ত কিভাবে? সিরিয়াসলি যদিও, কেন :.+বিভিন্ন লাইনে ভেঙে দেওয়া যায় না ?
ইন্ট্রিপিডকোডার

1
সিনট্যাক্টিক্যাল কারণে @intrepidcoder উভয়ের অর্থ :এবং তাদের পরবর্তী. চরিত্রের উপর নির্ভর করে এবং লাইনফিডগুলি কোনও একটির পরে বৈধ নয় (এবং এমনকি তারা থাকলেও এটি প্রোগ্রামটির অর্থ বদলে দেবে)।
মার্টিন ইন্ডার

6

সি (জিসিসি) , 1420 1399 463 বাইট

আহ ... নির্ধারিত দৈর্ঘ্যের তারের আনন্দ!

অনুমান sizeof(char*) == sizeof(int)এবং sizeof(char**) <= 16

নতুন পদ্ধতির

char**L,*r;n,i//j=>]l n}q(( 
,j,q;R(l){for(//,l)l, +;;rr 
r=l=0;(j=     //i=)[r +))oa 
getchar())>10;//,r(r( *l(fh}
r[l++]=j,r[l]=//n(r,c=6=R)c;
0)r=realloc(r,//;rajoL1q()t)
l+2);l&&R((L= //roh=l(,,r"u)
realloc(L,++n*//*fc]l(Lro"p]
16))[n-1]=r,q=//,{t+aR(=f(;q
l);}main(){for//L)e+e&c]{sn[
(R();i<q;i++, //*lglr&o1)t<]
puts(""))for(j//*(=[=ll-(uj+
=n;j--;putchar//rRjrr;lnnp;+
(L[j][i]));}  //a;(;))a[i;0j
////////////////hq;002e)a-=[
////////////////c,01=+r)m-jL

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

উপরের ফলাফল

সমাধানটি শেষ পর্যন্ত বিব্রতকরভাবে সহজ ছিল। আপনি একটি প্রোগ্রাম এ তৈরি করেন যা জিনিসগুলিকে ঘড়ির কাঁটার দিকে ঘোরায় এবং একটি প্রোগ্রাম বি যা ঘড়ির কাঁটার বিপরীতে ঘুরবে:

একজন

char**L,*r;n,i,j,q;R(l){for(r=l=0;(j=getchar())>10;r[l++]=j,r[l]=0)r=realloc(r,l+2);l&&R((L=realloc(L,16*++n))[n-1]=r,q=l);}main(){for(R();i<q;i++,puts(""))for(j=n;j--;)putchar(L[j][i]);}

বি

char**L,*r;n,i,j,q;R(l){for(r=l=0;(j=getchar())>10;r[l++]=j,r[l]=0)r=realloc(r,l+2);l&&R((L=realloc(L,16*++n))[n-1]=r,q=l);}main(){for(R();q--;puts(""))for(j=0;j<n;j++)putchar(L[j][q]);}

যুক্তিসঙ্গত অনুপাতের একটি আয়তক্ষেত্র তৈরি করুন এবং এটিকে একটিতে আবদ্ধ করুন এবং তার চারপাশে মন্তব্যের প্রহরী রাখুন:

char**L,*r;n,i//
,j,q;R(l){for(//
r=l=0;(j=     //
getchar())>10;//
r[l++]=j,r[l]=//
0)r=realloc(r,//
l+2);l&&R((L= //
realloc(L,++n*//
16))[n-1]=r,q=//
l);}main(){for//
(R();i<q;i++, //
puts(""))for(j//
=n;j--;putchar//
(L[j][i]));}  //
////////////////
////////////////

প্রোগ্রাম বিটিকে একটি বর্গক্ষেত্রে সীমাবদ্ধ করুন যা এ প্লাস টু (নীচের প্রান্তে মন্তব্যের অতিরিক্ত লাইনগুলির জন্য) এর সমান প্রস্থের মধ্যে রয়েছে, এটি সিসিডাব্লু ঘোরান এবং প্রোগ্রাম এ এর ​​ডানদিকে চড় মারুন এবং আপনি উপরের সমাধানটি পান।

পুরানো পদ্ধতির

 /*                                       r                               c                                                         c                                                  r               
r                                         a                               o                         n                               o                          s                       a               
a                          r              h                               l                         i       r                       l             r      -     t        r  =    +      h         q     
h                          o              c        0     +                l                         a       o             +         l       6     o      -     u    "   o  j<   +      c  */           
char**L,*s,*r;n,i,q;R(l,c){for(r=l=0;(c=getchar())>10;r[l++]=c,r[l]=0)r=realloc(r,l+2);q=l?l:q;l=r;}main(j){for(;s=R();L[n++]=s)L=realloc(L,16*n);for(;i<q;i++,puts(""))for(j=n;j--;)putchar(L[j][i]);}
 ///                        //          //e////     /     /             //e////                      ///     //            /      //e////    /     //  //  //// ///  /   // ;/   /// //u////      /    
 ///                        //          //g////     /     /             //r////                      ///     //            /      //r////    /     //  //  //// ///  /   // 0/   /// //p////      /    

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

উপরের ফলাফল

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