একটি ASCII আর্ট চিত্র ঘোরান


17

সমস্ত ASCII অক্ষরগুলির মধ্যে, এটি সহজেই বলা যায় যে তাদের মধ্যে কয়েকটি দল গঠন করে যা একই মূল চরিত্রের আবর্তন। উদাহরণস্বরূপ V > ^ <,। এটি এএসসিআইআই আর্ট নির্মাণের সম্ভাবনাটিকে 90 মিমি দিয়ে 90 ডিগ্রির গুণতে ঘোরানো যেতে পারে এবং এখনও এএসসিআইআই আর্ট থেকে যায়।

চ্যালেঞ্জ

আপনার লক্ষ্যটি এমন একটি প্রোগ্রাম গল্ফ করা যা ASCII আর্ট এবং এটি STDIN থেকে ঘোরানোর জন্য ডিগ্রির সংখ্যা গ্রহণ করে এবং ঘোরানো ASCII আর্টটি STDOUT এ মুদ্রণ করে।

ইনপুটটির প্রথম লাইনে, আপনার প্রোগ্রামটি একটি নম্বর এন পাবে This এই সংখ্যাটি ASCII আর্টের প্রস্থ এবং উচ্চতা উপস্থাপন করে।

এরপরে আপনি প্রতিটি এন-র আরও লাইন পাবেন ঠিক একই অক্ষরের প্রতিটি (নতুন লাইনটি এই সংখ্যায় গণনা করা হয়নি)। শিল্পের আকার সর্বদা একটি বর্গক্ষেত্র হবে, যদিও এটি বর্গক্ষেত্র তৈরির জন্য ফাঁকা আকারে প্যাডিং থাকতে পারে।

তারপরে আপনি একটি চূড়ান্ত লাইনে আরও একটি নম্বর পাবেন: 90, 180 বা 270 This ছবিটি ঘড়ির কাঁটার দিকে কত ডিগ্রি ঘোরানো উচিত তা উপস্থাপন করে।

দ্রষ্টব্য: ইনপুট করা চিত্রটিতে কেবলমাত্র এমন অক্ষর থাকবে যা সঠিক পরিমাণে আবর্তিত হতে পারে। যদি ইনপুটটি এই প্রয়োজনীয়তার সাথে মেলে না, তবে কোনও নির্দিষ্ট আচরণের প্রয়োজন নেই।

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

উদাহরণ (খুব সুন্দর এএসসিআইআই আর্ট নয়)

ইনপুট

5
<- ||
|  |V
+->+ 
   |O
<--+ 
90

আউটপুট

^ +-^
| | |
| V  
+-+--
 O <-

(90 এবং 270 দ্বারা আবর্তন খুব ভাল লাগবে না কারণ অক্ষরগুলি বর্গ নয়)

ইনপুট

6
+ /\ +
| \ \|
(  \/|
 \   )
I \ / 
:) V $
180

আউটপুট

$ ^ (:
 / \ I
(   \ 
|/\  )
|\ \ |
+ \/ +

প্রয়োজনীয় সমর্থিত অক্ষর

সমস্ত ঘোরার জন্য (90, 180 এবং 270), প্রোগ্রামটি ঘোরার জন্য সক্ষম হওয়া উচিত:

  • স্থানগুলি হল +, @, Xএবং Oযা কখনো পরিবর্তন
  • V > < ^
  • | -এবং \ /(180 দ্বারা আবর্তিত তারা একই থাকে)

180 ডিগ্রি ঘোরার জন্য, এই অতিরিক্ত অক্ষরগুলি সমর্থন করা আবশ্যক

  • I N Z % : 0 = S ~ $ # যা একই থাকে
  • P d, ( ), [ ], { }, M W, এবং9 6

আপনার প্রথম উদাহরণে ছোট হাতের অক্ষর রয়েছে vযা কোনও সমর্থিত অক্ষর নয়। আমি ধরে নিয়েছি এটি বড় হাতের নাগরিক হিসাবে বোঝানো হয়েছিল V। এছাড়াও, এটিতে সর্বশেষ লাইনটি 5 টি দীর্ঘ দীর্ঘ প্যাডযুক্ত নয়।
ইলমারি করোনেন

পছন্দ করুন এটা এখন ঠিক।
ফিনোটপিআই

P d, ( ), [ ], { }, M W, and 9 6কখনও কি 90º বা 270º করা যেতে পারে?
ajax333221

না, শিল্পটিতে কেবলমাত্র এমন অক্ষর থাকবে যা সঠিক পরিমাণকে ঘোরানোর জন্য মনোনীত করা হয়েছে। শেষ দুটি বুলেট তালিকার অক্ষর কেবল 180º দ্বারা আবর্তিত হতে পারে। আপনার প্রোগ্রামটিকে এটিকে অন্য কোনও পরিমাণে ঘোরাতে বলা হবে না।
PhiNotPi

উত্তর:


4

গল্ফস্ক্রিপ্ট, 79 75 73 67 অক্ষর

n%(;)~90/{-1%zip{{.'V<^>P(d)[{]}M9W6/\/\|-|'4/\+{.}%n+.@?)=}%}%}*n*

দেখে মনে হচ্ছে আমার এবং পিটার টেলারের সমাধানগুলি নির্দিষ্ট পরিমাণে একত্রিত হচ্ছে। যাইহোক, দেখে মনে হচ্ছে আমি আপাতত কয়েকটা অক্ষর এগিয়ে রয়েছি। :-) পিটার উভয়কে ধন্যবাদ (এবং +1) এবং আমি নির্লজ্জভাবে চুরি করেছি এমন ধারণাগুলির অনুলিপি করুন

এই কোডটি প্রথম লাইনে প্রদত্ত আকারটিকে সম্পূর্ণ উপেক্ষা করে, কারণ এটি অপ্রয়োজনীয় তথ্য। এমনকি অ-বর্গক্ষেত্রের মাত্রাগুলি সহ ইনপুটগুলি পরিচালনা করা উচিত তবে এটি সমস্ত ইনপুট লাইন একই দৈর্ঘ্যে প্যাড করা নির্ভর করে। ঘোরাতে চেষ্টা অক্ষর P, d, (, ), [, ], {, }, M, W, 9, অথবা 690 বা 270 ডিগ্রী অপ্রত্যাশিত আউটপুট তৈরি করতে পারে; অন্য সমস্ত অক্ষর যা স্পষ্টভাবে পুনরায় তৈরি করা হয় না সেগুলি অপরিবর্তিত রাখা হয়।

পুনশ্চ. এখানে আমার আসল 79-চর সমাধান:

n%(;)~90/:z{-1%zip}*n*z'V<^>/|-\V>^<'{:c;{{.c?~.c=@if}%}*}:s~2z='P([{M96W}])d's

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

5

সি, 336 অক্ষর

আমি নিশ্চিত যে উন্নতির জন্য জায়গা আছে।

char*a="<^>V|-|-/\\/\\ppdd(())[[]]{{}}MMWW9966",*p,*q;
n,x,y,r;
z(c){
    return(q=strchr(a,c))?a[(q-a&-4)+(q-a+r&3)]:c;
}
#define A(r)(r&3^3?1-r%4:0)*
f(r){
    return A(r)x+A(~-r)y+(r&2)/2*~-n;
}
main(){
    scanf("%d\n",&n);
    p=q=malloc(n*n+1);
    for(y=n;y--;q+=n)gets(q);
    scanf("%d",&r);
    for(r/=90;++y<n;puts(""))for(x=0;x<n;x++)putchar(z(p[f(r)+n*f(r+1)],r));
}

4

জাভাস্ক্রিপ্ট (181 অক্ষর)

a=prompt(f="V<^>V|-|/\\/P(d)P([{]}[}M9W6M9").split(n="\n");c=a.pop()/90;for(
b=a[0];c--;a=d.split(n))for(e=d=n;e<b*b;++e%b||(d+=n))d+=f[f.indexOf(g=a[b-e
%b][e/b|0])+1||a]||g;alert(d)

প্রতিটি দৈর্ঘ্যের প্রদত্ত দৈর্ঘ্যে প্যাড করা প্রয়োজন।


প্রম্পটে আমাকে ঠিক কী লাগাতে হবে তার একটি উদাহরণ দিতে পারেন? আমি \nপ্রথম
ক্রেডিট

@ ajax333221 একটি সতর্কতা বাক্সে একাধিক লাইন পেস্ট করা কেবল ক্রোমে কাজ করে, আমি কেবল প্রথমবারের জন্য লক্ষ্য করেছি। এছাড়াও নিশ্চিত করুন যে আপনি একটি চূড়ান্ত নিউলাইন অনুলিপি করছেন না।
অনুলিপি করুন

4

গল্ফস্ক্রিপ্ট ( 80 79 78 77 76 টি অক্ষর)

n%(;)~90/{zip{-1%{'V<^>V|-|/\/''Pd()[]{}MW96'{.4*}%4/128,+{.}%+.@?)=}%}%}*n*

এনবি অবৈধ ইনপুট দ্বারা অনুমোদিত "অপরিজ্ঞাত আচরণ" প্রবেশ করানো কিছুটা কৌতূহলী আউটপুট তৈরি করতে পারে, কারণ স্থানধারক অক্ষরগুলির (ASCII এর বাইরে) নির্দিষ্ট অক্ষরের জন্য ব্যবহৃত হয় যার ঘূর্ণনটি 90 ডিগ্রি দ্বারা সংজ্ঞায়িত হয় না। উদাহরণস্বরূপ, (কোড পয়েন্ট 160 এ ম্যাপ করা হবে, যা আইএসও -8859-1 এবং ইউনিকোড একটি অ-ব্রেকিং স্পেস।

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