आईसीएस मैरीटाइम फ्लैग वर्णमाला


14

सिग्नल का अंतर्राष्ट्रीय कोड ध्वज वर्णमाला संचार के लिए जहाजों द्वारा उपयोग किया जाता है, विशेष रूप से स्थिर संकेतों के लिए।

आपकी चुनौती एक प्रोग्राम या फ़ंक्शन लिखना है जो STDIN से या एक तर्क के रूप में एक स्ट्रिंग लेगा, और ICS ध्वज वर्णमाला में संबंधित पाठ प्रदर्शित करेगा। यदि आपकी भाषा स्क्रीन पर प्रदर्शित नहीं होती है, तो फ़ाइल को सहेजना स्वीकार्य है।

आपका कार्यक्रम या समारोह पत्र का समर्थन करेगा AZ अपर और लोअर केस, प्लस में अंतरिक्ष और Newline । अन्य पात्रों के साथ व्यवहार अपरिभाषित है।

प्रदर्शन काफी बड़ा होगा , जो क्षैतिज रूप से कम से कम 8 झंडे और खड़ी 6 झंडे प्रदर्शित करने में सक्षम हो । यदि एक नई रेखा प्राप्त होने से पहले दाहिने हाथ की धार तक पहुँच जाता है, या यदि संदेश लंबवत रूप से प्रदर्शित करने के लिए संदेश बहुत लंबा है, तो व्यवहार अपरिभाषित है।

ध्वज वर्णमाला नीचे दी गई है (रोमन अक्षर केवल संदर्भ के लिए हैं, वे आउटपुट में आवश्यक नहीं हैं।)

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

आयाम

इन झंडे के आयामों के लिए कोई सार्वभौमिक रूप से सहमत मानक नहीं है, इसलिए इस चुनौती के उद्देश्य के लिए निम्नलिखित लागू होंगे:

झंडे 60x60 पिक्सेल के होंगे, जिनमें क्षैतिज और लंबवत दोनों के बीच 30 पिक्सेल का अंतर होगा।

A और B पर कटा हुआ स्वैगलेट 15 पिक्सेल गहरा होगा।

अन्य सभी लाइनें क्षैतिज, ऊर्ध्वाधर या 45 डिग्री पर होंगी।

सुविधाओं को 3,4,5 या 6 वर्गों के काल्पनिक NxN ग्रिड में ध्वज को विभाजित करके स्थित किया जाएगा। उपरोक्त छवि देखें, लेकिन आगे स्पष्टीकरण के लिए:

A, E, H, K, L और U एक 2x2 ग्रिड पर आधारित हैं: प्रत्येक रंग क्षेत्र की चौड़ाई 30pixels होगी। इसके अलावा एफ में हीरे के अंक ध्वज के प्रत्येक तरफ आधे रास्ते में होंगे।

J और T एक 3x3 ग्रिड पर आधारित हैं: प्रत्येक बैंड 20 पिक्सेल का होगा।

पी, एन और एस 4x4 ग्रिड पर आधारित हैं। इसके अलावा Y की विकर्ण रेखाएं ध्वज के किनारों को 4 में विभाजित करेंगी।

C, D, R और X 5x5 ग्रिड पर आधारित होंगे। क्रॉस के बैंड और हथियार 12 पिक्सेल चौड़े होंगे।

जी, डब्ल्यू, एम, वी 6x6 ग्रिड पर आधारित हैं। G की बॉन्ड और W की सीमाएं 10 पिक्सेल चौड़ी होंगी। एम और वी पर क्रॉस के हथियार ध्वज के प्रत्येक किनारे के पहले और आखिरी 10 पिक्सल को कवर करेंगे, जिससे त्रिकोण क्षेत्र लंबे किनारे के साथ 40 पिक्सल को मापेंगे।

I का वृत्त ध्वज के केंद्र में होगा और व्यास 30 पिक्सेल होगा।

उपरोक्त पाठ से +/- 1 पिक्सेल की त्रुटि की अनुमति है। यदि आपकी भाषा केवल स्केलेबल ग्राफिक्स का समर्थन करती है, तो आप "इकाइयों" का अर्थ "इकाइयों" के लिए कर सकते हैं।

रंग की

रंग लाल, सफेद, नीले, पीले और काले होंगे जैसा कि आपकी भाषा या इसके प्रलेखन द्वारा परिभाषित किया गया है। यदि आपकी भाषा रंगों को परिभाषित नहीं करती है, तो आप निम्नलिखित का उपयोग कर सकते हैं: Red FF0000, व्हाइट FFFFFF, ब्लू 0000FF, येलो FFFF00, ब्लैक 0000000।

पृष्ठभूमि 25% और 75% तीव्रता के बीच ग्रे (r, g और b चैनल) के बराबर होगी।)

स्कोरिंग / लूपहोल्स

यह कोडगोल्फ है। बाइट्स में सबसे छोटा कोड जीतता है।

मानक खामियों को अस्वीकार कर दिया जाता है।

झंडे प्रदर्शित करने के लिए कोई बिल्टइन या लाइब्रेरी फ़ंक्शंस का उपयोग नहीं किया जा सकता है। आउटपुट गैर-पाठ होगा (और विशेष रूप से, यूनिकोड वर्णों का उपयोग ध्वज के आकार को बनाने के लिए नहीं किया जाएगा।)

उदाहरण

JFK got
my VHS
PC
and XLR
web quiz

निम्नलिखित उत्पादन करना चाहिए

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


मुझे पूरी तरह से यकीन नहीं है कि आपका मतलब क्या है " डिस्प्ले क्षैतिज रूप से बड़े और कम से कम 8 झंडे प्रदर्शित करने के लिए पर्याप्त होगा और ऊर्ध्वाधर रूप से 6 झंडे ", विशेष रूप से यह देखते हुए कि आपका परीक्षण मामला एक आउटपुट दिखाता है जो केवल 5 झंडे लंबा है। क्या यह सिर्फ इतना है कि उत्तरों को उन आयामों तक संदेशों को संभालना चाहिए और उन्हें बड़े लोगों को संभालने की आवश्यकता नहीं है, या क्या आपको इस बात की आवश्यकता है कि सभी पंक्तियों को कम से कम 8 वर्णों तक और सभी संदेशों को कम से कम 6 पंक्तियों में गद्देदार किया जाए?
पीटर टेलर

1
@PeterTaylor यदि आपका प्रोग्राम या भाषा आउटपुट के अनुसार डिस्प्ले को आकार देने के लिए पर्याप्त बुद्धिमान है, तो आउटपुट छोटा होने पर डिस्प्ले को 8x6 पर पैड करने की आवश्यकता नहीं है। आउटपुट में एक ग्रे बैकग्राउंड होगा और आयताकार (सभी लाइनें कम से कम सबसे लंबी लाइन की लंबाई वाली होती हैं।)
लेवल रिवर सेंट

जवाबों:


15

CJam, 464 बाइट्स

आपको लगता है कि CJam में छवि हेरफेर कार्य नहीं थे? ठीक है, आपने सही सोचा! लेकिन मैं यह नहीं होने देने वाला था कि मुझे रोको।

"P3
690 690 4
"3a3*a690_@*a*qeuN/{0:U;{_'C<.5*:N;i[{XY+Z<[E8][9C]?XY<=}WWWW{XH<9F?}C{YC/[9FCF]=}{YC/3&9E?}{YH<9F?}{X29.5:R-zYR-z+H>FC?}{XA/1&9E?}{XH<FC?}{XR-_*YR-_*+F_*>E8?}{YK/(9F?}{XH<E9?}{XH<YH<^8E?}{XY+Z-A/XY-A/e&9F?}{XF/YF/^1&F9?}{XY<EC?}{XH-F/YH-F/|9F?}E{XHm6/YHm6/e&CE?}{XH-F/YH-F/|F9?}{XK/[CF9]=}{XH<YH<^FC?}{XY+Z-A/XY-A/e&FC?}{XR-zYR-ze>iA/[CF9]=}{XHm6/YHm6/e&F9?}{XY+F/1&CE?}]=:P~!!{60:Z{Z30:HYH-z-N*-{YV+_2$=XU+P2b1>4f*tt}fX}fY}*U90+:U;}/V90+:V;}/`"[]"-

यह प्रोग्राम छवि को बेहतरीन तरीके से CJam कर सकता है: पाठ के रूप में जो PPM फ़ाइल के रूप में सहेजे जाने पर छवि का प्रतिनिधित्व करता है । यहां तक ​​कि ऑनलाइन दुभाषिया के साथ इसे चलाने की कोशिश न करें, वैसे; आप ढेर को उड़ा देंगे। इसे जावा दुभाषिया के साथ चलाएं और आउटपुट को एक कमांड जैसी फ़ाइल के साथ पाइप पर रखें java -jar cjam-0.6.4.jar flags.cjam > flags.ppm। एक बार जब आप अपना इनपुट प्रदान कर देते हैं, तो यूनिक्स या ctrl + Z के साथ विंडोज पर ctrl + D के साथ EOF (एक नई पंक्ति के तुरंत बाद की आवश्यकता हो सकती है) भेजें।

नमूना

अगर यह वास्तव में वांछित है, तो मैं कहीं और मूल ~ 3 एमबी छवि स्रोत को चिपकाने की कोशिश कर सकता हूं। लेकिन यहाँ परिणाम GIMP में खोला गया और एक PNG को दिया गया:

ABCDEFG
hijklmn
OPQRSTU
vwxyz z

flags_alphabet.png

व्याख्या

छवि हेडर, स्रोत में आसानी से पहचाने जाने योग्य, मैजिक नंबर, चौड़ाई, ऊंचाई और अधिकतम चैनल मान के होते हैं। इसलिए आउटपुट प्रत्येक R, G और B मान के साथ 690 * 690 छवि (8 * 8 60px झंडे के लिए 30px के बीच के अंतर के लिए पर्याप्त) है।

छवि डेटा को 690 * 690 * 3 सरणी के साथ 3 के रूप में आरंभीकृत किया जाता है, जिससे पूरी छवि हल्की धूसर हो जाती है। फिर इनपुट पढ़ा जाता है, अपरकेस में परिवर्तित होता है, और लाइनों में विभाजित होता है। लाइनों को एक लूप में संसाधित किया जाता है, ध्वज Y को बढ़ाकर 90 प्रत्येक पुनरावृत्ति द्वारा समन्वित किया जाता है, और प्रत्येक पंक्ति में, प्रत्येक वर्ण को एक लूप में संसाधित किया जाता है, ध्वज X को बढ़ाते हुए प्रत्येक पुनरावृत्ति को 90 से समन्वयित करता है। अब जादू शुरू हुआ।

प्रत्येक वर्ण को ध्वज के पिक्सेल फ़ंक्शन में मैप किया जाता है, जिसे जब बुलाया जाता है, तो ध्वज पर स्थिति (X, Y) पर पिक्सेल का रंग वापस आ जाता है। यह वह जगह है जहां सबसे ज्यादा मेहनत की गई: 26 छवियों को गणितीय कार्यों के रूप में संक्षिप्त रूप से वर्णित करना। इनमें से प्रत्येक फ़ंक्शन 8-15 से एक रंग मूल्य देता है। यह सीमा इस तथ्य का लाभ उठाती है कि, जब बेस 2 में परिवर्तित किया जाता है, तो परिणामी बिट सरणी को [1, R, G, B] के रूप में व्याख्या किया जा सकता है। पहला तत्व हटाया जा सकता है और बाकी को 4 से गुणा करके आसानी से वांछित प्रारूप में पिक्सेल मूल्य दिया जा सकता है जो सभी संभव ध्वज रंगों (साथ ही हरे, सियान और मैजेन्टा) को कवर करता है। यह भी अच्छी तरह से काम करता है कि 10-15 वर्णों के लिए प्रारंभिक वर्ण चर हैं, और चूंकि varibibles को उन्हें अलग करने के लिए स्थान की आवश्यकता नहीं है,

एक बार फ़ंक्शन को पुनर्प्राप्त करने के बाद, यह 0-60 से X और Y दोनों पर पुनरावृत्ति करने का मामला है, प्रत्येक चरण पर फ़ंक्शन को कॉल करता है, और परिणाम को छवि डेटा सरणी पर वापस लिखता है। एक आश्चर्यजनक पर्यवेक्षक देख सकता है कि प्रत्येक ध्वज फ़ंक्शन द्वारा लौटाए गए रंग मान हालांकि, ग्रे होने की अनुमति नहीं देते हैं। तो रिक्त स्थान को छोड़ने के लिए कुछ अतिरिक्त तर्क है। लेकिन अभी भी 'ए' और 'बी' पर स्वैगलेट्स की कटौती है। तो वहाँ कुछ अतिरिक्त तर्क भी है। यदि वर्ण मान 'C' से कम है, तो एक मान ऐसा निर्धारित किया जाता है कि X लूप पर ऊपरी बाउंड Y के संबंध में सही ढंग से भिन्न होता है और कट-आउट क्षेत्र कभी खींचे नहीं जाते हैं।

कुल मिलाकर, मैं बहुत खुश हूं कि यह कैसे हुआ। यह बहुत काम आया, लेकिन यह मजेदार था। कुछ झंडे पूरी तरह से संदर्भ छवि से मेल नहीं खाते हैं, लेकिन मुझे लगता है कि मुझे लक्ष्य के 1px के भीतर होने के लिए सभी आकृतियाँ मिली हैं (यदि कोई इससे अधिक है, तो मुझे बताएं और मैं उन्हें ठीक कर दूंगा)। और वहाँ निश्चित रूप से अभी भी अनुकूलन करने की क्षमता है, क्योंकि 26 ध्वज कार्यों के बीच अतिरेक की उचित मात्रा है।


पहले प्रयास के दौरान, 559 बाइट्स

कम से कम मैंने इसे कभी खत्म नहीं किया है, मैं इसे भी पोस्ट करूंगा, क्योंकि यह बहुत दिलचस्प है। (X, Y) → रंग के फंक्शन द्वारा प्रत्येक झंडे को मॉडलिंग करने के बजाय, झंडे को साधारण आकृतियों की रचना के रूप में तैयार किया जाता है। लेकिन मुझे प्रत्येक भिन्न आकृति के लिए पर्याप्त मात्रा में रेंडरिंग कोड लिखने की आवश्यकता थी। बहुत सारे विचार-विमर्श के बाद, मुझे एहसास हुआ कि मैं उन सभी को सौंप सकता हूं, केवल एक छद्म आकार के साथ कुछ चतुर अतिव्यापी और अतिव्यापन के साथ: एक निर्दिष्ट बिंदु के एक निश्चित दूरी के भीतर सभी बिंदु, जहां "दूरी" की परिभाषा परिवर्तनशील है। चेसबोर्ड दूरी एक वर्ग देता है, मैनहट्टन दूरी एक हीरा देता है, और यूक्लिडियन दूरी एक चक्र देता है। इसका मतलब था कि हर आकृति में एक ही पाँच पैरामीटर (रंग, दूरी मोड, x, y,) थे।

"P3
690 690 4
"3a3*a690_@*a*qeuN/{0:U;{_'C<.5*:N;i[[8EX30:Q0Q9X60:ZQQCXQZQ]LLLL[F9TTQQ]Ca[9FTQ42QCTQ54QFTQ66Q9TQ78Q][E9TIQI9T42QI][9FTQZQ][FCXQQQ][E9T40QQET50QQ9TZQQET70QQ9T80QQ][FCTZQQ][E8YQQF][9FTQAQ9TQ9~Q][E9TZQQ][8ETTTQETZZQ][F9XQTK9XZQK9XQZK9XTQK][F4{4{JW^1&6*9+TJ)F*W)F*F}fJ}fW][CEX0ZZ][9FTQQF]Ea[E[TZ]_m*{CT@~24}/][F9TQQF][9FTAQQCT9~QQ][FCTTTQCTZZQ]C9$1>9a/Fa*+[9FTQQKCTQQA]9 6$1>Ca/Fa*+[C7{7\-_1&2*C+X@TT@F*}/]]=_!!{([TQQQ]+\+}*5/{~:R;.5-:H;.5-:G;:M;2b1>4f*:O;Z{ZQWQ-z-N*-{JG-{zM_!+#}:P~WH-PM{+}{e>}?RP<{WV+_2$=JU+Ott}*}fJ}fW}/U90+:U;}/V90+:V;}/`"[]"-

1
बहुत बढ़िया, यह उसी तरह का रचनात्मक जवाब है जिसकी मुझे तलाश थी। बाद में इसे चलाने की कोशिश करेंगे।
लेवल रिवर सेंट

1
यह संभवतः सबसे लंबा CJam कोड है जिसे मैंने कभी देखा है। हालांकि अच्छा काम, +1।
एलेक्स ए।

फिर से, सीजेम दिन बचाने के लिए दिखाई देता है।
ASCIIThenANSI

9
दुर्भाग्यवश, CJam कोड को 200 बाइट्स से अधिक समय तक रखना एक संघीय अपराध है। मैं तुम्हें हिरासत में लेने के लिए जा रहा हूँ।
देउसोवी

2

PHP, 811 बाइट्स

function f($s){echo"<body bgcolor=#ccc>";$z=split("\n",gzinflate(base64_decode("vVfNasMwDL7vKQK7xlT+iaHQ9LDTLnuIQus6ENhgxS19+kmO0yRrkhbqGIxtyV8sWbIkZ/Prjtm52p9suYbMHqqjPdHMVYfzx/elhBzyNbXtZoXQ7dvm+Q9+dieb7csvZFkJToNlEq6Zqeq6fAcw2arDqCKXUPMCEYQicIc1xmNfUkBDzXgQkpMQ3W0PEGF7fz49dT7IuSCQ1APJ5h9IKAIhdGn1jIHH6oUzvCpZzhtGjoDiePzuzAPJEkG1JPk1uw29G5rC7pxAvAFxuHqd+nQxpCP65S4gR6wzAkphE4rPHfbYaAueky59BrmrZ4wU0Ss8SES/pCNugMduiBSYs25oJTeBSYNMbHO6+bUg22PPhA8E5LCWhT3SFBjEwxaWiOMYD1+FtZSZxateEAZ7pvsEL7w1aQxD3HxLcmayfNA9ZeXzcdteJLm0H5ZITzAwolDkXeGwVAvlSzUOSDDkMRqRxDkuLquVecbKMRKFaESLSYOMg4b6qVHQMnkMns5jyZLBAnksRehirQWrwClEqakDNrqKpjqKpZ8K5rVYTFE56ZmCyT68KinJX+n/puFpyHXg4RRLwg1oW6YipqfimfJTt6/c6XIv6Tnc/HxNXIj+a9nORdwN5Qa3qzvGHw==")));while($c=ord(ucfirst($s))){$s=substr($s,1);echo$c<32?'<br>':($c^32?$z[$c-64]:$z[0]);}}

संपीडित बूँद में 26 ध्वज में से प्रत्येक के लिए एसवीजी कोड होता है। एक साधारण लूप तब इनपुट के प्रत्येक वर्ण के अनुरूप SVG इमेज को अर्क और आउटपुट करता है।

"यह \nएक परीक्षण है" के लिए नमूना आउटपुट :

<body bgcolor=#ccc><svg width=90 height=90 viewBox=0,0,90,90><path d=M0,0h20v60h-20z fill=#f00 /><path d=M20,0h20v60h-20z fill=#fff /><path d=M40,0h20v60h-20z fill=#00f /></svg><svg width=90 height=90 viewBox=0,0,90,90><path d=M0,0h30v60h-30z fill=#fff /><path d=M30,0h30v60h-30z fill=#f00 /></svg><svg width=90 height=90 viewBox=0,0,90,90><path d=M0,0h60v60h-60z fill=#ff0 /><path d=M15,30a15,15,0,0,1,30,0a15,15,0,0,1-30,0z fill=#000 /></svg><svg width=90 height=90 viewBox=0,0,90,90><path d=M0,0h60v60h-60z fill=#fff /><path d=M15,15h30v30h-30z fill=#00f /></svg><svg width=90 height=90 viewBox=0,0,90,90></svg><svg width=90 height=90 viewBox=0,0,90,90><path d=M0,0h60v60h-60z fill=#ff0 /><path d=M15,30a15,15,0,0,1,30,0a15,15,0,0,1-30,0z fill=#000 /></svg><svg width=90 height=90 viewBox=0,0,90,90><path d=M0,0h60v60h-60z fill=#fff /><path d=M15,15h30v30h-30z fill=#00f /></svg><br><svg width=90 height=90 viewBox=0,0,90,90><path d=M0,0h30v60h-30z fill=#00f /><path d=M45,30l15-30h-30v60h30z fill=#fff /></svg><svg width=90 height=90 viewBox=0,0,90,90></svg><svg width=90 height=90 viewBox=0,0,90,90><path d=M0,0h20v60h-20z fill=#f00 /><path d=M20,0h20v60h-20z fill=#fff /><path d=M40,0h20v60h-20z fill=#00f /></svg><svg width=90 height=90 viewBox=0,0,90,90><path d=M0,0h60v30h-60z fill=#00f /><path d=M0,30h60v30h-60z fill=#fff /></svg><svg width=90 height=90 viewBox=0,0,90,90><path d=M0,0h60v60h-60z fill=#fff /><path d=M15,15h30v30h-30z fill=#00f /></svg><svg width=90 height=90 viewBox=0,0,90,90><path d=M0,0h20v60h-20z fill=#f00 /><path d=M20,0h20v60h-20z fill=#fff /><path d=M40,0h20v60h-20z fill=#00f /></svg>

( आप इसे आइडोन पर आज़मा सकते हैं , हालांकि यह आपके लिए पेज रेंडर नहीं करेगा।)

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