एक ASCII कला छवि घुमाएँ


17

सभी ASCII वर्णों में से, यह बताना आसान है कि उनमें से कुछ ऐसे समूह बनाते हैं जो एक ही मूल चरित्र के घूर्णन हैं। उदाहरण के लिए, V > ^ <। यह ASCII कला के निर्माण की संभावना को अनुमति देता है जिसे 90 डिग्री के गुणकों से घुमाया जा सकता है और अभी भी ASCII कला बनी हुई है।

चुनौती

आपका लक्ष्य एक ऐसा कार्यक्रम करना है, जो ASCII कला और STDIN से इसे घुमाने के लिए डिग्री की संख्या को स्वीकार करता है, और घुमाए गए ASCII कला को STDOUT में प्रिंट करता है।

इनपुट की पहली पंक्ति पर, आपके प्रोग्राम को एक नंबर N मिलेगा। यह संख्या ASCII कला की चौड़ाई और ऊंचाई को दर्शाती है।

तब आपको प्रत्येक N अक्षर की N अधिक रेखाएँ प्राप्त होंगी (इस पंक्ति में नई रेखा को नहीं गिना जाता है)। कला का आकार हमेशा एक वर्ग होगा, हालांकि इसे एक वर्ग बनाने के लिए रिक्त स्थान के रूप में पैडिंग हो सकती है।

फिर आपको अंतिम पंक्ति पर एक और संख्या प्राप्त होगी: 90, 180, या 270. यह दर्शाता है कि चित्र को कितने डिग्री पर घुमाया जाना चाहिए।

नोट: इनपुट की गई छवि में केवल वे अक्षर होंगे जिन्हें सही मात्रा में घुमाया जा सकता है। यदि इनपुट इन आवश्यकताओं से बिल्कुल मेल नहीं खाता है, तो किसी विशिष्ट व्यवहार की आवश्यकता नहीं है।

आउटपुट के रूप में, आपके प्रोग्राम को प्रत्येक वर्ण के बाद नई वर्णमाला के साथ एन वर्णों की एन लाइनों को प्रिंट करना चाहिए। छवि को घुमाया जाना चाहिए ताकि मूल में प्रत्येक चरित्र को एक घुमाए गए संस्करण द्वारा बदल दिया गया है और छवि में सही स्थान पर ले जाया गया है।

उदाहरण (बहुत सुंदर ASCII कला नहीं)

इनपुट

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 चार्ट लंबी होने के लिए गद्देदार नहीं है।
इल्मरी करोनें

@ इल्मारिकारोनन अच्छा कैच। यह अब तय हो गया है।
PhiNotPi

P d, ( ), [ ], { }, M W, and 9 6कभी 90 ever या 270º हो सकता है?
अजाक्स333221

नहीं, कला में केवल ऐसे अक्षर होंगे जो सही मात्रा को घुमाने में सक्षम होने के लिए नामित हैं। अंतिम दो गोलियों की सूची पात्रों को 180 two तक घुमाया जा सकता है। आपके कार्यक्रम को किसी अन्य राशि से इन्हें घुमाने के लिए नहीं कहा जाएगा।
फीनोटपी

जवाबों:


4

गोल्फस्क्रिप्ट, 79 75 73 67 वर्ण

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

लगता है कि मेरे और पीटर टेलर के समाधान एक निश्चित मात्रा में अभिसरण का अनुभव कर रहे हैं। वैसे भी, लग रहा है कि मैं अभी भी कुछ चार्ट के लिए आगे हूँ। :-) धन्यवाद (और +1) दोनों पीटर के लिए और उन विचारों के लिए कॉपी करें जिन्हें मैंने बेशर्मी से चुरा लिया है।

यह कोड पहली पंक्ति में दिए गए आकार को पूरी तरह से अनदेखा करता है, क्योंकि यह अनावश्यक जानकारी है। यह गैर-वर्ग आयामों के साथ इनपुट को भी संभालना चाहिए, लेकिन यह बहुत हद तक सभी इनपुट लाइनों पर निर्भर करता है जो एक ही लंबाई में गद्देदार होती है। बारी बारी से करने की कोशिश कर रहा वर्ण P, d, (, ), [, ], {, }, M, W, 9, या 690 या 270 डिग्री अप्रत्याशित उत्पादन का उत्पादन कर सकते हैं; अन्य सभी वर्ण जो स्पष्ट रूप से रीमेक नहीं किए गए हैं, उन्हें अपरिवर्तित रखा गया है।

Ps। यहाँ मेरा मूल 79-चार समाधान है:

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

कन्वर्जेंस? : PI ने (कई) वर्णों को दोहराए बिना लुकअप करने के लिए आपकी चाल को पसंद किया, लेकिन यह इफ से बचने के लिए मेरी चाल के साथ संगत नहीं लगता है।
पीटर टेलर

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

@ ajax333221 अलर्ट बॉक्स में कई लाइनों को चिपकाने से केवल क्रोम में काम होता है, मैंने पहली बार देखा। यह भी सुनिश्चित करें कि आप अंतिम नई पंक्ति की प्रतिलिपि नहीं बना रहे हैं।
कॉपी

4

गोल्फस्क्रिप्ट ( 80 79 78 77 76 वर्ण)

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

नायब अमान्य इनपुट द्वारा अनुमत "अपरिभाषित व्यवहार" दर्ज करने से कुछ पात्रों के लिए उपयोग किए जाने वाले प्लेसहोल्डर वर्ण (ASCII के बाहर) के कारण कुछ हद तक उत्सुक उत्पादन हो सकता है, जिसका रोटेशन 90 डिग्री से परिभाषित नहीं होता है। उदाहरण के लिए, (कोड बिंदु 160 पर मैप किया जाएगा, जो ISO-8859-1 में है और यूनिकोड एक गैर-ब्रेकिंग स्पेस है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.