मोंड्रियन पेंटिंग वर्णन भाषा


16

यह चुनौती एक मोंड्रियन पेंटिंग विवरण भाषा (एमपीडीएल) के लिए दुभाषिया कोडिंग में शामिल है ।

भाषा की परिभाषा

भाषा आयतों के ढेर पर काम करती है। एक आयत को इसके ऊपरी बाएँ समन्वय और निचले दाएँ समन्वय द्वारा परिभाषित किया गया है। निर्देशांक पूर्णांक होना चाहिए। स्टैक को विशेषताओं के साथ एकल आयत के साथ आरंभीकृत किया गया है(1,1,254,254)

प्रत्येक कमांड में निम्नलिखित प्रारूप है: <character><integer>

तीन आदेश हैं:

v<integer>: स्टैक में नवीनतम आयत पर एक ऊर्ध्वाधर विभाजन करें, पैरामीटर द्वारा इंगित स्थिति में (प्रतिशत के रूप में)। स्रोत आयत को स्टैक से हटा दिया जाता है और विभाजन के परिणामस्वरूप दो नए आयतों के साथ बदल दिया जाता है। बाईं आयत को स्टैक पर धकेल दिया जाता है, फिर दायाँ आयत। जैसा कि आयत निर्देशांक पूर्णांक होते हैं, भिन्नों को सबसे बड़े पूर्णांक में गोल किया जाना चाहिए।

h<integer>: क्षैतिज विभाजन। शीर्ष आयत को स्टैक पर धकेल दिया जाता है, फिर नीचे आयत।

c<integer>: स्टैक से नवीनतम आयत को हटाता है और इसे पैरामीटर के रूप में दिए गए रंग में पेंट करता है। 1 = सफेद, 2 = लाल, 3 = नीला, 4 = पीला

चुनौती

एक प्रोग्राम लिखें जो एक पेंटिंग विवरण के रूप में लेता है और चित्रित आयतों का 256x256 बिटमैप प्रतिनिधित्व बनाता है। आयतों को 3 पिक्सेल काली रेखा के साथ अलग किया जाना चाहिए। एक या दो पिक्सेल आयत में उनके गैर-काले पिक्सेल सीमा ब्लैक पिक्सल्स द्वारा छिपे होने चाहिए।

इनपुट को एक पैरामीटर के रूप में या एक फ़ाइल के रूप में, आपके ऊपर पढ़ा जा सकता है। आदेशों को एक स्थान से अलग किया जाना चाहिए। आप मान सकते हैं कि इनपुट फ़ाइल में सिंटैक्स सही है और इसमें अनुगामी या प्रमुख स्थान, टैब आदि नहीं हैं। आउटपुट को सीधे स्क्रीन पर प्रदर्शित किया जा सकता है, या फ़ाइल में सहेजा जा सकता है, आपके ऊपर।

सबसे छोटा कोड जीतता है।

परीक्षा

निम्नलिखित स्रोत:

v25 h71 v93 h50 c4 c1 c1 c2 h71 c3 h44 c1 c1

लाल, नीले और पीले रंग में संरचना II का उत्पादन करना चाहिए :

यहाँ छवि विवरण दर्ज करें


1
भाषा महान नहीं है। vऔर hतर्क पिक्सेल में होना चाहिए
जॉन ड्वोरक

इसके अलावा, मुझे यकीन नहीं है कि पॉपिंग के बजाय स्टैक को घुमाने की क्या बात है।
जॉन ड्वोरक

प्रतिशत का उपयोग करने से आपको आउटपुट बिटमैप के लिए जो भी आकार चुनने की अनुमति मिलती है - परिणाम एक ही होगा (केवल इसे बढ़ाया जाएगा)
अरनौद

1
हाँ ऐसा कुछ है, लेकिन ध्यान दें कि आप अभी भी अतिरिक्त सिंटैक्स तत्वों के बिना कर सकते हैं क्योंकि सभी ऑपरेटरों के पास निरंतर संख्या में पैरामीटर हैं। तो उपरोक्त को तब भी पार्स किया जा सकता है जब इसे प्रस्तुत किया जाता है v30 v50 c1 c5 h70 v50 c1 c3 c2
नटकी

3
वास्तव में उम्मीद है कि कोई पीट में समाधान लिखता है !
स्काइलर

जवाबों:


6

पर्ल 5 + इमेजमैजिक - 297

कुछ के साथ शुरू करने के लिए:

sub a{my($x,$y,$X,$Y,$d)=@_;$_=shift@ARGV;
/v/?a($d=$x+($X-$x)*$'/100,$y,$X,$Y).a($x,$y,$d,$Y):
/h/?a($x,$d=$y+($Y-$y)*$'/100,$X,$Y).a($x,$y,$X,$d):
/c/&&"-fill ".qw/white red blue yellow/[$'-1]." -draw 'rectangle $x,$y $X,$Y' "}
system"convert -size 256x256 -stroke black xc: ".a(0,0,255,255)."a.gif"

कमांड लाइन पर इनपुट लेता है और उत्पन्न करता है a.gif


2

हास्केल - 335

import Diagrams.Prelude
import Diagrams.Backend.SVG
c=centerXY
d((x:n):i)|x=='v'=(b#scaleX s#c|||a#scaleX(1-s)#c,k)|x=='h'=(b#scaleY s#c===a#scaleY(1-s)#c,k)|x=='c'=(square 1#fc([white,red,blue,yellow]!!(read n-1)),i)where{s=(read n)/100;(a,j)=d i;(b,k)=d j}
main=getLine>>=renderSVG"a.svg"(Width 256).pad 1.02.c.lwG 0.012.fst.d.words

कार्यक्रम स्टड से निर्देशों को एक पंक्ति के रूप में पढ़ता है , अगर यह अस्वीकार्य है तो मुझे बताएं।

एक प्रोग्राम में संकलित करता है जो झंडे में ले जाता है -w चौड़ाई -h ऊँचाई -o outputfile "A.svg" फ़ाइल को आउटपुट करता है, यदि यह कोड से तुरंत स्पष्ट नहीं है। चूंकि आउटपुट एक वेक्टर इमेज है, इसलिए यह 'पिक्सेल परफेक्ट' नहीं है।

यह मेरा पहली बार डायग्राम्स-पैकेजेज के साथ काम करना है, जो मैंने की गई गलतियों को इंगित करने के लिए स्वतंत्र महसूस किया है। विशेष रूप से कोई भी बैकएंड जो मुझे कम कोड के साथ आउटपुट देगा, अच्छा होगा।

आप http://paste.hskll.org/get/1737 में कोड विकसित करते समय पहले उठाए गए कुछ कदम देख सकते हैं । यह आयात में ऊपर दिए गए कोड से अलग है और पेस्ट के बाद से मुख्य का अभाव है। Hskll.org अपना मुख्य और ड्राइंग वातावरण प्रदान करता है।


2

अजगर - 434 405 377 364 361

मेरा पहला अजगर गोल्फ। यह शायद एक बहुत सुधार किया जा सकता है, इसलिए किसी भी प्रतिक्रिया की सराहना की है।

from turtle import*
a=[[1,1,254,254]]
for c in input().split():
 v,w,x,y=a.pop();p,b,f,g=int(c[1::1]),'hvc'.index(c[0]),x-v,y-w
 if b>1:goto(v,-w),color('#000',['#fff','red','#00f','#ff0'][p-1]),begin_fill(),[(fd(o),rt(90))for o in[f,g]*2],end_fill()
 else:a+=[[v,w,(x,v+(((x-v)/100)*p))[b],(w+(((y-w)/100)*p),y)[b]])],a+=[[[v,a[-1][2]][b],[a[-1][3],w][b],x,y]]

1
आप अर्धविराम के साथ लाइनों 4, 5 को मर्ज करके एक चार को बचा सकते हैं। के a+=[x]बजाय भी a.append(x)। यदि व्हॉट्सएप द्वारा अलग किया जाता है और विभाजन को एक तर्क की आवश्यकता नहीं है।
Sp3000

1

HTML + जावास्क्रिप्ट ईएस 6 (407)

फ़ायरफ़ॉक्स 32.0.3 के साथ परीक्षण किया गया

<canvas id=c width=256 height=256><script>r=[[1,1,253,253]]
p=x=>r.push(x)
o=c.getContext("2d")
o.lineWidth=3
prompt().split(" ").map(x=>{q=r.pop()
v=q[0]
b=q[1]
n=q[2]
m=q[3],{c:x=>{o.beginPath()
o.rect(v,b,n,m)
o.fillStyle=[,"#fff","red","blue","#ff0"][x]
o.fill()
o.stroke()},v:x=>{s=x/100*n|0
p([v,b,s,m])
p([v+s,b,n-s,m])},h:x=>{s=x/100*m|0
p([v,b,n,s])
p([v,b+s,n,m-s])}}[x[0]](+x.slice(1))})</script>


1
इतना अधिक गोल्फ! x.charAt(0)-> x[0]; x.substr-> x.slice; white yellow-> #fff #ff0; document.getElementById("c")-> c... और अधिक
edc65

@ edc65 धन्यवाद! मैं कल इसमें और सुधार करूंगा।
मिका लम्मी

उत्तर के लिए धन्यवाद, लेकिन मैं इसका परीक्षण करने की कोशिश करता हूं और मेरे पास एक सफेद स्क्रीन है?
अरनौद

@SuperChafouin आप किस ब्राउज़र का उपयोग कर रहे हैं? मुझे नहीं लगता कि फ़ायरफ़ॉक्स को छोड़कर एरो फ़ंक्शंस (और अन्य ES6 सामान) वास्तव में समर्थित हैं।
मिका लम्मी

1

HTML + जावास्क्रिप्ट (ES6) 335

@Mika उत्तर के समान - Cw को चिह्नित करना।

  • विभाजन के बजाय फ़ंक्शन के साथ बदलें ... नक्शा
  • प्रसार संचालक
  • एक बार में 2 मान बढ़ाएं
  • समारोह गुणों के बजाय टर्नरी ऑपरेटर

<canvas id=c><script>
c.width=c.height=256,
s=[[1,1,253,253]],
o=c.getContext('2d'),
o.translate(0.5,0.5), // to avoid anti-alias on straight lines
o.lineWidth=3,
prompt().replace(/(\S)(\d+)/g,(_,c,n)=>(
p=s.pop(o.fillStyle=[,'#fff','red','#00f','#ff0'][n]),
c<'d'?(o.fillRect(...p),o.strokeRect(...p))
:(c=c<'i'|2,
 q=[...p],
 q[c]=r=q[c]*n/100|0,
 p[c]-=r,
 p[c-2]+=r,
 s.push(q,p))))
</script>

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