सांता क्लॉज की सभा


16

सांता क्लॉज की सभा

नोट: यह पहली चुनौती है जिसे मैंने स्थापित करने का प्रयास किया है। यह सैंडबॉक्स के माध्यम से किया गया है लेकिन अगर आपको इसमें कुछ गड़बड़ लगती है तो कृपया इसे न केवल डाउनवोट करें बल्कि एक टिप्पणी छोड़ दें ताकि मैं इसे सुधार सकूं।

पृष्ठभूमि

एक पुरानी बाल पहेली है जहाँ चुनौती यह है कि अपनी कलम को कागज से उठाए बिना या किसी भी लाइन पर दो बार जाने के बिना एक छत और एक क्रॉस के साथ एक बॉक्स खींचना है।

जर्मनी में इसे "दास हौस निकोलस" या "द हाउस ऑफ सांता क्लॉज़" के रूप में जाना जाता है। मैं ईमानदारी से याद नहीं कर सकता कि हम इसे क्या कहते थे। जो कोई भी पहेली से परिचित नहीं है, उनके लिए पूरी जानकारी यहाँ उपलब्ध है

यहाँ घर का एक ASCII कला प्रतिनिधित्व है।

 /\
/__\
|\/|
|/\|
----

चुनौती

अपनी पसंद की किसी भी भाषा में सांता क्लॉज़ की सभा को आकर्षित करने के लिए एक कार्यक्रम या फ़ंक्शन लिखें।

बहुत आसान लगता है? खैर यहाँ पकड़ है। यह ड्राइंग के प्रत्येक चरण को आउटपुट करना चाहिए और पहेली के नियमों का पालन करना चाहिए। किसी भी इनपुट को लेने के लिए आपके प्रोग्राम की आवश्यकता नहीं है। तैयार घर को ठीक उसी तरह दिखना चाहिए जैसा ऊपर दिखाया गया है।

ऊपर की साइट के अनुसार 44 संभव समाधान हैं। आप उनमें से किसी एक का उपयोग कर सकते हैं। यह एक ASCII कला चुनौती है, इसलिए आपको समाधान की गणना करने की आवश्यकता नहीं है, लेकिन केवल इसे आकर्षित करने के लिए।

उत्पादन

44 में से एक समाधान से आवश्यक आउटपुट का एक उदाहरण नीचे दिखाया गया है:

---- 

 \
  \
----

 __
 \
  \
----

  \
 __\
 \
  \
----

 /\
/__\
 \
  \
----

 /\
/__\
|\
| \
----

 /\
/__\
|\/
|/\
----

 /\
/__\
|\/|
|/\|
----

नियम

  • मैंने आवश्यकताओं को स्पष्ट करने के लिए प्रत्येक अपेक्षित आउटपुट के बीच 1 अतिरिक्त न्यूलाइन जोड़ा है। यह वैकल्पिक है। प्रत्येक आउटपुट के बीच रिक्त लाइनों की संख्या की अनुमति है।
  • आपके आउटपुट में केवल वर्ण, /, -, _, और स्थान शामिल होना चाहिए जैसा कि ऊपर दिखाया गया है। ट्रेलिंग रिक्त स्थान की अनुमति है।
  • आपके ड्राइंग में प्रत्येक पंक्ति को पिछली पंक्ति के अंत से जारी रखना चाहिए और आप किसी भी पंक्ति को नहीं दोहरा सकते हैं।
  • मानक कमियां निषिद्ध हैं।
  • आपको उपरोक्त लिंक में उल्लिखित कविता को आउटपुट करने की आवश्यकता नहीं है।
  • यह कोड गोल्फ है इसलिए बाइट्स में सबसे छोटा उत्तर विजेता होगा।

परिणाम

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


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


4
@ प्रतिक्रिया के लिए धन्यवाद। मेरा इरादा विशेष रूप से कठिन चुनौती का निर्माण करना नहीं था, बल्कि ऐसा बनाना था जो काफी आसानी से संभव हो और इसलिए समाधानों को प्रस्तावित करने के लिए अधिक से अधिक लोगों को प्रोत्साहित किया जा सके। मैं अपने अगले प्रयास के लिए बोर्ड पर आपके सुझाव लूंगा।
एलपेड्रो

1
मेरी गलती; मुझे आस्की कला के लिए बहुत जटिल चीजों की उम्मीद थी। :) लेकिन मुझे अभी भी जिफ पसंद है।
टाइटस

जवाबों:


10

जेली , 40 39 36 बाइट्स

“ḥ%DtƊVḍI’ḃ9W;“|_/-\/\|‘ˤy@\FỌ»⁶s4Y

इसे ऑनलाइन आज़माएं!

यह काम किस प्रकार करता है

“ḥ%DtƊVḍI’

एक विशेषण आधार -250 शाब्दिक है; प्रत्येक चरित्र जेली के कोड पृष्ठ में अपने कोड बिंदु से मेल खाता है । परिणाम पूर्णांक 13192938935880491074 है

          ḃ9

उत्पन्न पूर्णांक को जीवनी आधार 9 में परिवर्तित करता है, पूर्णांक सरणी
[9, 6, 7, 9, 6, 2, 2, 7, 1, 5, 3, 8, 1, 3, 5, 8, 4, 4, 4 ” को परिवर्तित करता है। ४, ४] । पूर्णांक 9 के अपवाद के साथ स्ट्रोक के क्रम के अनुरूप है , जो एक स्थान को इंगित करता है।

            W

उत्पन्न सरणी को एक सिंगलटन सरणी में लपेटता है, जिसे अब हम उत्पन्न होने वाले सरणी में इसे प्रस्तुत करने की आवश्यकता होगी।

              “|_/-\/\|‘ˤ

निम्नानुसार काम करता है। ¤बाईं ओर के दो लिंक को एक निलाडिक श्रृंखला में जोड़ता है। पहला वाला, “|_/-\/\|‘निर्दिष्ट वर्णों के कोड बिंदुओं को पैदावार देता है, [124, 95, 47, 45, 92, 47, 92, 124] । फिर, Ėकोड अंक,
[1, 124], [2, 95], [3, 47], [4, 45], [5, 92], [6, 47], [7, 92] की गणना करता है। , [8, 124]] । जोड़ी [n, c] का अर्थ है कि n वें स्ट्रोक कोड बिंदु c के साथ ASCII वर्ण होगा ।

             ;

उत्पन्न सरणियों को समेटता है। परिणाम है
[[9,6,7,9,6,2,2,7,1,5,3,8,1,3,5,8,4,4,4,4], [1,124] ], [२, ९ ५], [३,४]], [४,४५], [५, ९ २], [६,४]], [[, ९ २], [12,१२४]]

                          y@\

एक संचयी करता है (यानी, सभी मध्यवर्ती चरणों को दिखाते हुए y), अदला-बदली तर्कों के साथ लिप्यंतरण ( ) का उपयोग करते हुए कम करता है @। पहले चरण में, उदाहरण के लिए, हम प्रत्येक की जगह 1 के साथ मूल सरणी में 124 है, जो चरित्र का कोड है |

                             FỌ

परिणाम को समतल करता है और सभी कोड बिंदुओं को संबंधित ASCII वर्णों के साथ बदल देता है। सभी चरणों में, यह कोड अंक 1 से 9 के साथ कुछ अनपेक्षित वर्ण उत्पन्न करेगा ।

                               »⁶

अंतरिक्ष चरित्र के साथ चरित्र-वार अधिकतम लेता है, सभी अनपेक्षित वर्णों को रिक्त स्थान के साथ प्रतिस्थापित करता है।

                                 s4Y

चार की लंबाई में उत्पन्न स्ट्रिंग को विभाजित करता है और उन्हें विभाजक के रूप में एक लाइनफीड के साथ जोड़ता है।


2
वाह। बस वाह। +1
एलपेड्रो

लेकिन रुकिए, वो बाइट्स हैं?
लीफ विलर्ट्स

1
@LeifWillerts हाँ। अनपेक्षित वर्णों से बचने के लिए, जेली एक कस्टम कोड पृष्ठ का उपयोग करता है जो 256 वर्णों को एक ही बाइट के रूप में समझता है। बाइट्स यह करने के लिए शीर्ष लेख अंक में जोड़ देते हैं।
डेनिस

क्षमा करें, फिर उस लिंक पर क्लिक करने के लिए नहीं पता लगाने के लिए: D
Leif Willerts

यह कुछ के रूप में स्पष्टीकरण के लिए जीतता है। आदर करना।
एलपीड्रो

13

जावास्क्रिप्ट (ईएस 6), 119 116 96 92 91 बाइट्स

for(i=8;i--;)console.log(`834
3554
2610
2160
7777`.replace(/./g,c=>'|/|/\\_\\- '[c<i?8:c]))


अच्छा उत्तर। मुझे लग रहा था कि जावास्क्रिप्ट वहाँ होगा या उसके
ठिकाने होंगे

कई संपादन के लिए क्षमा करें। मुझे दूसरी कॉफी से पहले पोस्ट नहीं करना चाहिए।
अरनुलद

एकाधिक संपादन अच्छे हैं। बाइट की गिनती नीचे जाती हुई देखकर अच्छा लगा।
एलपीड्रो

क्या आपके उत्तर में कोड की दो समान प्रतियां होने का कोई मतलब है?
नील

@ नील - मैं केवल एक को तब तक रखूंगा जब तक मुझे उनमें से दो का अच्छा कारण नहीं मिल जाता। ^ ^
अरनौल्ड

9

बैच, 356 344 341 337 बाइट्स

@set s=@set "
%s%g=@goto 1
%s%r=
%s%c=
%s%u=|
%s%l=|
%s%f=
@for /l %%i in (1,1,7)do @call:%%i
%s%u=|\/|
%s%l=|/\|
%g%
:7
%s%u=|\/
%s%l=|/\
%g%
:6
%s%f=----
%g%
:5
%s%u=|\
%s%l=| \
%g%
:4
%s%c=/__\
%g%
:3
%s%r= /\
%s%c=/  \
%g%
:2
%s%r= /
%s%c=/
:1
@for %%l in ("%r%" "%c%" "%u%" "%l%" "%f%")do @echo(%%~l

स्टूपिड बैच |नियम उद्धृत करते हुए ... यदि आप |एक चर में चाहते हैं , तो आपको इसे तीन ^एस के साथ उद्धृत करने की आवश्यकता है , इसलिए इसके @बजाय इसका उपयोग करना सस्ता है और इसे आउटपुट पर स्थानापन्न करें, हालांकि इसे प्राप्त करने के लिए मुझे बाईं दीवार से शुरू करना होगा। लाइन एक में एक अनुगामी स्थान है। echo(क्योंकि प्रयोग किया जाता है r, cऔर fचर खाली हो सकता है और हम नहीं चाहते ECHO is off.छपी।

संपादित करें: अंतिम भाग के लिए फाल्ट का उपयोग करके 12 बाइट्स सहेजे गए। forप्रत्येक भाग को प्रिंट करने के लिए एक लूप का उपयोग करके 3 बाइट्स सहेजे गए , इसका मतलब है कि मैं अब |अपने चर में एस का उपयोग करता हूं जो कोड को पढ़ने में थोड़ा आसान बनाता है। के @बजाय स्पष्ट वर्णों का उपयोग करके 4 बाइट्स सहेजे गए @echo off। मुझे लगता है कि बाईं दीवार से शुरू करके अभी भी सबसे कम बाइट्स की आवश्यकता है।


2
कम से कम नहीं हो सकता है, लेकिन वास्तव में इसे बैच +1 में करने का प्रबंधन करने के लिए मुझसे एक अपवॉट हो जाता है
ElPedro

echo:अधिक मानक है, लेकिन echo(ऐसा लगता है कि आप किसी भाषा सुविधा का दुरुपयोग कर रहे हैं, इसलिए +1।
wizzwizz4

@ wizzwizz4 echo:कुछ अस्पष्ट किनारे के मामलों में विफल रहता है, लेकिन मैं किसी भी असफल मामलों के बारे में नहीं जानता echo(
नील

@ wizzwizz4 आप एक फ़ाइल है, तो foo.batवर्तमान निर्देशिका, में echo(\..\foo.batइको \..\foo.batलेकिन echo:\..\foo.batकार्यान्वित foo.bat
नील

@ नील क्या आप जानते हैं कि ऐसा क्यों है? ऐसा लगता echo:.\foo.batहै कि इसके बजाय इसका प्रभाव होगा। क्या यह एक निर्देशिका स्टैक गड़बड़ के कारण है, जहां रूट निर्देशिका से "यूपी" वर्तमान निर्देशिका है?
wizzwizz4

7

सी, 118 बाइट्स

main(){char *p,n;for(n='B';n++<'J';)for(p="ZFEAFDDEAGCHIAGHCIABBBBAA";*p;p++)putchar(" \n-\\_\\/|/|"[(*p<n)**p&15]);}

प्रभावशाली! अच्छा पहला उत्तर, और साइट पर आपका स्वागत है!
DJMcMayhem 16

1
3 बाइट्स बचाने के लिए: char*p(कोई स्थान नहीं) और परिवर्तन 'B'और 'J'उनके ASCII कोड।
स्तर नदी सेंट

जवाब के लिए धन्यवाद। मैं सी भी प्रतिस्पर्धा करने की उम्मीद नहीं की थी। यह वास्तव में प्रभावशाली है और अच्छी तरह से लायक है +1
ElPedro

6

/// , 112 बाइट्स

/!/\/\///*/----
 !@/\\\\!$/ @@!^/
*@\/@@
@\/__@@
/*@
 $
*__
$
 $
*$
 __@
$
 $^$
 $^|@
|$^|@\/
|\/@^|@\/|
|\/@|
*

इसे ऑनलाइन आज़माएं!


मुझे 112 का एक भी बाइट समझ में नहीं आया, लेकिन मैंने इसे ऑनलाइन आज़माया और यह वही करता है जो टिन पर कहता है इसलिए +1
ElPedro

1
@ElPedro हेडर पर लिंक पर क्लिक करने का प्रयास करें, आप अवधारणा को समझ सकते हैं, लेकिन, यदि नहीं, तो बस मेरे पास वापस जाएं। मैं चाहता हूं कि अधिक से अधिक लोग एक भाषा को समझने में सक्षम हों, और यदि आप नहीं करते हैं, तो यह एक दुखद तथ्य है। मुझे पता है कि मैं सभी को समझ नहीं पा रहा /// (कुछ लोग सिर्फ खाना और पानी चाहते हैं , /// और PPCG उससे बहुत दूर हैं, हालांकि असंभव नहीं है)।
आउटगॉल्फ

धन्यवाद। सीखने के लिए बहुत सारी भाषाएँ हैं! मैं जरूर देखूंगा। मैं अभी भी पायथन और लोटस फॉर्मूला में गोल्फ कर रहा हूं, लेकिन इसे और अधिक प्राप्त कर रहा हूं। ज्यादा भाषाएं ज्यादा मजेदार हैं। आपके योगदान के लिए फिर से धन्यवाद :)
ElPedro

2

PHP, 98 95 बाइट्स

Arnauld´s समाधान से प्रेरित है

for($i=8;$i--;)for($p=24;$p--;)echo"|/|/\\_\\- 
"[($c="977779061290162945539438"[$p])<$i?8:$c];

नोट: पहली कोड लाइन में एक अनुगामी स्थान होता है।


एक अच्छा @ टिट्स। ट्रेलिंग रिक्त स्थान की अनुमति है।
एलपीड्रो

@ElPedro: मैं अभी कुछ लोगों को जानता हूं, जिन्होंने वहाँ संपादकों को कॉन्फ़िगर किया है जो उन्हें स्वचालित रूप से ट्रिम कर सकते हैं; इसलिए मैंने इसका उल्लेख किया है।
टाइटस

1

जीडी के साथ PHP, 348 338 बाइट्स (प्रतिस्पर्धा नहीं)

नहीं वास्तव में क्या के लिए कहा जा रहा था, लेकिन ...

function f($v,$w){global$x,$y,$i;imageline($i,$x,$y,$x=$v,$y=$w,1);ob_start();imagepng($i);$s=ob_get_clean();ob_end_clean();echo'<img src="data:image/png;base64,',base64_encode($s),'" > ';}$i=imagecreate($w=9,$h=$w+$z=$w/2);imagecolorallocate($i,255,255,255);f(--$w,$y=--$h);f(0,$z);f($w,$z);f($w/2,0);f(0,$z);f(0,$h);f($w,$z);f($w,$h);

फ़ाइल में सहेजें, ब्राउज़र में कॉल करें

टूट - फूट

function f($v,$w)
{
    global$x,$y,$i;
    imageline($i,$x,$y,$x=$v,$y=$w,1);      // draw line, set end coords as new start coords
    ob_start();imagepng($i);$s=ob_get_clean();ob_end_clean();           // get image output
    echo'<img src="data:image/png;base64,',base64_encode($s),'" > ';    // print <img> tag
}
// calculate dimensions, create image, allocate background color (foreground implicitly black)
$i=imagecreate($w=9,$h=$w+$z=$w/2);imagecolorallocate($i,255,255,255);
// paint lines: implicit `$x=0`
f(--$w,$y=--$h);f(0,$z);f($w,$z);f($w/2,0);f(0,$z);f(0,$h);f($w,$z);f($w,$h);

एक बड़ा घर बनाने के लिए, $w=9अपनी इच्छित चौड़ाई में परिवर्तन करें।


और मैं इसे एक +1 भी देता हूं। भले ही यह प्रत्यक्ष चुनौती को संबोधित नहीं करता है, लेकिन यह आपके सुझाए गए सुधारों को शामिल करता है और बहुत ही अच्छा लगता है :)
ElPedro
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.