स्नोमैन बॉलिंग


29

(संबंधित / से प्रेरित: एक गेंदबाजी गठन ड्रा )

यहां सर्दियों के महीनों में एक मजेदार शगल है एक बड़ी गेंद (जैसे बास्केटबॉल) और छोटे स्नोमैन आंकड़े का उपयोग करके स्नोमैन गेंदबाजी करना। आइए ASCII में इसे फिर से बनाएँ।

प्रत्येक स्नोमैन में निम्नलिखित शामिल हैं:

(.,.)
( : )

यहाँ दस स्नोमैन "पिन" का संरेखण है

(.,.) (.,.) (.,.) (.,.)
( : ) ( : ) ( : ) ( : )
   (.,.) (.,.) (.,.)
   ( : ) ( : ) ( : )
      (.,.) (.,.)
      ( : ) ( : )
         (.,.)
         ( : )

ये "पिन" से लेबल रहे हैं 1करने के लिए 10के रूप में

7 8 9 10
 4 5 6
  2 3
   1

अब तक, इतने मानक। हालांकि, सामान्य गेंदबाजी के विपरीत, स्नोमैन पिन केवल चपटा होता है और पूरी तरह से हटाया नहीं जाता है। यह किसी व्यक्ति द्वारा किसी भी पिन के बर्फ को मैन्युअल रूप से समतल करने की आवश्यकता के कारण किया जाता है। एक चपटा स्नोमैन ऊपर _____(व्हाट्सएप) के साथ (पांच अंडरस्कोर) का प्रतिनिधित्व करता है । यहाँ 1 3 5 6 9 10पिंस के साथ एक उदाहरण चपटा हुआ है (जिसका अर्थ है कि केवल 2 4 7 8पिंस शेष है):

(.,.) (.,.)
( : ) ( : ) _____ _____
   (.,.)
   ( : ) _____ _____
      (.,.) 
      ( : ) _____

         _____

इनपुट

  • एक से पूर्णांकों की सूची 1के लिए 10 किसी भी सुविधाजनक प्रारूप में जो पिन मारा गया है और इस तरह की जरूरत का प्रतिनिधित्व चपटा किया जाना है।
  • प्रत्येक नंबर केवल एक ही बार दिखाई देगा, और नंबर किसी भी क्रम में हो सकते हैं (सॉर्ट किए गए, अनसोल्ड, सॉर्ट किए गए अवरोही) - आपकी पसंद, जो भी आपके कोड को गोल्फर बनाता है।
  • इनपुट में कम से कम एक पूर्णांक होने की गारंटी है।

उत्पादन

हिममानव पिंस के परिणामस्वरूप ASCII कला का प्रतिनिधित्व, सही पिंस के साथ समतल हो गया।

नियम

  • लीडिंग या अनुगामी newlines या व्हाट्सएप सभी वैकल्पिक हैं, जब तक कि वर्ण खुद को सही ढंग से पंक्तिबद्ध करते हैं।
  • या तो एक पूर्ण कार्यक्रम या एक समारोह स्वीकार्य हैं। यदि कोई फ़ंक्शन है, तो आप इसे प्रिंट करने के बजाय आउटपुट वापस कर सकते हैं।
  • यदि संभव हो, तो कृपया ऑनलाइन परीक्षण वातावरण का लिंक शामिल करें ताकि लोग आपके कोड को आज़मा सकें!
  • मानक खामियों को मना किया जाता है।
  • यह इसलिए सभी सामान्य गोल्फिंग नियम लागू होते हैं, और सबसे छोटा कोड (बाइट्स में) जीतता है।

उदाहरण

1 3 5 6 9 10

(.,.) (.,.)
( : ) ( : ) _____ _____
   (.,.)
   ( : ) _____ _____
      (.,.) 
      ( : ) _____

         _____

1 2 3

(.,.) (.,.) (.,.) (.,.)
( : ) ( : ) ( : ) ( : )
   (.,.) (.,.) (.,.)
   ( : ) ( : ) ( : )

      _____ _____

         _____

1 2 3 4 5 6 8 9 10

(.,.)
( : ) _____ _____ _____

   _____ _____ _____

      _____ _____

         _____

18
कोड गोल्फ ? कोड गेंदबाजी नहीं ?
मार्क

क्या हम 0 से अनुक्रमित इनपुट संख्याओं को ले सकते हैं? और यदि संभव हो तो 1 2 3 4 5 6 7 8 9 10 के बजाय 0123456789 जैसे रिक्त स्थान के बिना इनपुट मान लें?
टीले पेलिकन

बिल्कुल सही: D यह मुझे
चैती पेलिकन

4
मैं चपटा हिमपात का अनुमोदन नहीं करता।

मैं खुद को एक स्नोमैन के रूप में पहचानता हूं और इस चपटेपन को पाता हूं।
विजय

जवाबों:


7

05AB1E , 45 44 बाइट्स

TF"(.,.)( : )"„ _5×{«4ä2ä¹N>åè})4L£Rvyø»}».c

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

व्याख्या

TF                                           # for N in [0 ... 9] do:
  "(.,.)( : )"                               # push string
              „ _                            # push the string " _"
                 5×                          # repeat it 5 times
                   {                         # sort
                    «                        # concatenate the strings
                     4ä                      # split the string in 4 parts
                       2ä                    # split the list in 2 parts
                         ¹N>åè               # if index+1 is in the input, push the first part
                                             # else push the second part
                              }              # end loop
                               )             # wrap stack in a list
                                4L£          # split list in parts of size 1,2,3,4
                                   R         # reverse list
                                    v        # for each list in list of lists
                                     yø      # transpose the list
                                       »     # join by spaces and newlines
                                        }    # end loop
                                         »   # join by newlines
                                          .c # centralize

46

स्नोमैन 1.0.2 , 157 बाइट्स

(()("789:045600230001"4aG::48nSdU][:#:]eq]/nM;AsI[:"_____"wR["     "wR/aC;:"( : )"wR["(.,.)"wR/aC;bI;:"  "wRdUaC;bI\#**\;aMaZ:" "aJ1AfL;aM;aM1AfL"
"aJ1AfL*))

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

जब मैंने इस चुनौती को देखा, तो मुझे पता था कि मुझे सिर्फ सही भाषा में जवाब देना है ...

यह एक सबरूटीन है जो इनपुट की संख्या के रूप में लेता है और वर्तमान परमिट के माध्यम से एक स्ट्रिंग के रूप में आउटपुट करता है।

"पठनीयता" / सौंदर्यशास्त्र के लिए लिपटे:

(()("789:045600230001"4aG::48nSdU][:#:]eq]/nM;AsI[
:"_____"wR["     "wR/aC;:"( : )"wR["(.,.)"wR/aC;bI
;:"  "wRdUaC;bI\#**\;aMaZ:" "aJ1AfL;aM;aM1AfL"
"aJ1AfL*))

थोड़ा ungolfed / टिप्पणी संस्करण:

}
1wR`
3wR`aC`
5wR`aC`
6wR`aC`
9wR`aC`
*

((
    )(
    "789:045600230001"  // pin layout data
    4aG                 // split into groups of 4; we need each row twice
    :                   // map over groups of 2 output lines
        :               // map over pins (or whitespace)
            48nS        // subtract ascii '0'
            dU][        // duplicate the pin; we need it in the if{}
            :           // if (pin) {
                #:]eq]/nM;AsI[:"_____"wR["     "wR/aC;:"( : )"wR["(.,.)"wR/aC;bI
            ;:          // } else {
                "  "wRdUaC
            ;bI         // }
            \#**\       // maneuver the permavars around to discard pin
        ;aM
        aZ:" "aJ1AfL;aM
    ;aM
    1AfL                // flatten (simulate a flatmap)
    "
"aJ                     // join on newline
    1AfL                // flatten again into a single string
    *
))

#sP

17
काफी केवल संदर्भ है कि यह "सही भाषा" के रूप में जाना जाएगा,: पी
DJMcMayhem

2
एक स्नोमैन अपनी ही तरह की हत्या ... आप राक्षस!
रुडोल्फजेलिन

10

स्टैक्ड , नॉन-कमिंग, 118 बाइट्स

मैंने जोड़ा deepmapऔर इस चुनौती के बाद कुछ अन्य चीजें, टन के साथ बगफिक्स। यहाँ कोशिश करो!

@a((7 8 9 10)(4 5 6)(2 3)(1)){e:('(.,.)
( : )' ' 
_'5 hrep)a e has#'  'hcat
}deepmap{e i:' 
 'i 3*hrep e,$hcat#/!LF+}map

Ungolfed

{ a :
  ((7 8 9 10) (4 5 6) (2 3) (1))
  { e :
    (
      '(.,.)' LF '( : )' + + 
      ' ' LF '_' + + 5 hrep
    ) @possible
    a e has @ind
    possible ind get @res
    '  ' @padding
    res padding hcat return
  } deepmap
  { e i:
    ' ' LF ' ' + + i 3 * hrep
    e ,
    $hcat insert!
    LF +
  } map
} @:bowl

(1 2 3 4 6 10) bowl out

आउटपुट:

(.,.) (.,.) (.,.)       
( : ) ( : ) ( : ) _____ 
         (.,.)       
   _____ ( : ) _____ 

      _____ _____ 

         _____ 

यह भाषा बहुत अच्छी लगती है। विकी में फिशर-येट्स का उदाहरण सुंदर है।
जॉर्डन

@ जोर्डन आपको बहुत बहुत धन्यवाद! इसका मेरे लिए काफी महत्व है :)
रखता है

7

अजगर 2, 248 243 241 226 224 223 221 210 206 200 177 बाइट्स

-5 @ धन्यवाद के साथ

-15 फिर से रॉड के लिए धन्यवाद

-1 रॉड से फिर से अंतरिक्ष गणना का उपयोग करना

अधिक लाइनों और संकेत के कारण लंबे समय तक दिखता है, लेकिन आश्चर्यजनक रूप से 11 बाइट्स छोटी होती हैं।

मुझे यकीन है कि यह 200 के नीचे जाएगा ...

मैं सही था लेकिन बिना 23 बाइट्स के गंभीर संकेत @ Pietu1998 से नहीं थे। बहुत धन्यवाद!

i,z=input(),0;m=['']*10;n=m[:]
for x in range(11):m[x-1],n[x-1]=('(.,.)',' '*5,'( : )','_'*5)[x in i::2]
for y in 10,6,3,1:
 for q in m,n:print' '*3*z+' '.join(q[y-4+z:y])
 z+=1

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

पूर्णांकों की सूची के रूप में इनपुट लेता है। 248 में बहुत बड़ा रास्ता है, लेकिन यह काम करता है।



6

सी # 233 221 213 203 बाइट्स

विधि एक अंतर सरणी को गिरी हुई पिंस की सूची के रूप में लेती है

string S(int[]a){string o="",x=o,y=o,z=o;for(int i=10;i>0;){var c=a.Contains(i);x=(c?"      ":"(.,.) ")+x;y=(c?"_____ ":"( : ) ")+y;if(i==7|i<5&i--!=3){o+=$"{z}{x}\n{z}{y}\n";x=y="";z+="   ";}}return o;}

लपेटा हुआ

string S(int[]a){string o="",x=o,y=o,z=o;for(int i=10;i>0;)
{var c=a.Contains(i);x=(c?"      ":"(.,.) ")+x;y=(c?"_____ ":
"( : ) ")+y;if(i==7|i<5&i--!=3){o+=$"{z}{x}\n{z}{y}\n";x=y="";
z+="   ";}}return o;}

विस्तार

string S(int[] a)
{
    string o = "", x = o, y = o, z= o;
    for (int i = 10; i > 0;)
    {
        var c = a.Contains(i);
        x = (c ? "      " : "(.,.) ") + x;
        y = (c ? "_____ " : "( : ) ") + y;

        if (i==7|i<5&i--!=3)
        {
            o += $"{z}{x}\n{z}{y}\n";
            x = y = "";
            z += "   ";
        }
    }
    return o;
}

घोस्ट, रज़्नगुल और औहमैन की टिप्पणियों में सुझावों के आधार पर कुछ बाइट्स दीं।


2
PPCG में आपका स्वागत है!
AdmBorkBork

अच्छा! आप कुछ बाइट्स (5?) बचा सकते हैं - अगर आप i-- को अंदर डालते हैं और बदल new[]{7,4,2,1}.Contains(i--)जाते हैंi<9&&i%3==1||i==2
घोस्ट

उस पर दो और (-7) के साथ सुधार कर सकते हैंi==7||i<5&&i!=3
भूत

@Ghost धन्यवाद! नॉन-शॉर्टसर्किट ors और ands का उपयोग करके इसे थोड़ा और नीचे गिरा दिया, और अभी भी अंतिम रेफरी के साथ Ii==7|i<5&i--!=3
Erresen

आप की जगह कुछ बाइट्स बचा सकता var o="";var x=...द्वारा string o="",x=""...
raznagul

5

बैच, 262 बाइट्स

@echo off
for /l %%i in (1,1,10)do set s%%i=( : ) 
for %%i in (%*)do set s%%i=_____ 
set l=call:l 
%l%%s7%%s8%%s9%%s10%
%l%"   %s4%%s5%%s6%
%l%"      %s2%%s3%
%l%"         %s1%
exit/b
:l
set s=%~1
set s=%s:( : )=(.,.)%
echo(%s:_____=     %
echo(%~1

नोट: लाइनें 2, 3 और 4 एक स्थान पर समाप्त होती हैं, और प्रत्येक पंक्ति पर एक अनुगामी स्थान को आउटपुट भी करती हैं। इन्हें 5 बाइट की कीमत पर हटाया जा सकता है। बर्फ के नीचे के हिस्सों के रूप में चर s1 ... s10 बनाकर काम करता है, फिर कमांड लाइन तर्क के रूप में दिए गए लोगों को समतल करता है। उपयुक्त पंक्तियों को दो बार मुद्रित किया जाता है, नीचे के हिस्सों के साथ पहली बार शीर्ष हिस्सों के साथ बदल दिया जाता है। यह शीर्ष और निचले आधे चर के दो सेटों का उपयोग करके 18 बाइट बचाता है।


1
यह एक चालाक जवाब है।
AdmBorkBork

4

जावास्क्रिप्ट, 154 149 बाइट्स

f=
a=>`6 7 8 9
_3 4 5
__1 2
___0
`[r='replace'](/\d|_/g,m=>++m?~a.indexOf(m)?'_____':'( : )':'   ')[r](/.*\n?/g,m=>m[r](/ : |_/g,s=>s=='_'?' ':'.,.')+m)


I.oninput=()=>O.innerHTML=f(JSON.parse(`[${I.value.match(/\d+/g)}]`))
I.oninput()
<input id=I value="1 3 5 6 9 10"><pre id=O>


3

पायथ, 63 बाइट्स

j.ejm+**3k;j;db)_CcR[1 3 6).e:*T]btMQ@m*T]*5d,d\_kc2"(.,.)( : )

एक प्रोग्राम जो पूर्णांक की सूची का इनपुट लेता है और परिणाम को प्रिंट करता है।

परीक्षण सूट

[स्पष्टीकरण बाद में आ रहा है]


3

पायथ, 51 बाइट्स

कोड में कुछ xxdunprintables हैं , इसलिए यहां एक हेक्सडंप है।

00000000: 6a6d 2e5b 3233 5f6a 3b6d 4063 323f 7d6b  jm.[23_j;m@c2?}k
00000010: 5172 2235 2035 5f22 392e 2220 3b5b 8db2  Qr"5 5_"9." ;[..
00000020: 1778 a822 6472 4673 4d50 4253 2d34 2f64  .x."drFsMPBS-4/d
00000030: 323b 38                                  2;8

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

बिना प्रिंट के, 52 बाइट्स

jm.[23_j;m@c2?}kQr"5 5_"9").,.() : ("drFsMPBS-4/d2;8

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


2

जावास्क्रिप्ट 178 169 बाइट्स

अनिवार्य रूप से मेरे सी # उत्तर से एक बंदरगाह।

चपटा "पिंस" की सूची के रूप में एक अंतर सरणी लेता है;

f=a=>{o=x=y=z="";for(i=10;i>0;){c=a.includes(i);x=(c?"      ":"(.,.) ")+x;y=(c?"_____ ":"( : ) ")+y;if(i==7|i<5&i--!=3){o+=z+x+"\n"+z+y+"\n";x=y="";z+= "   ";}}return o}

लपेटा हुआ:

f=a=>{o=x=y=z="";for(i=10;i>0;){c=a.includes(i);
x=(c?"      ":"(.,.) ")+x;y=(c?"_____ ":"( : ) ")+y;
if(i==7|i<5&i--!=3){o+=z+x+"\n"+z+y+"\n";x=y="";
z+= "   ";}}return o}

विस्तारित और समझाया गया:

// function f takes parameter a (an array of ints) 
f = a => {

    // four strings:
    // o: output
    // x: top row of snowmen
    // y: bottom row of snowmen
    // z: padding to indent the snowmen
    o = x = y = z = "";

    // loop from 10 to 1 (the pins)
    // remove the "afterthought" decrement - we can do that later
    for (i = 10; i > 0;) {

        // set the boolean c to whether the current pin has been flattened
        c = a.includes(i);

        // prefix x and y with the appropriate "sprite"
        // using a ternary if on c
        x = (c ? "      " : "(.,.) ") + x;
        y = (c ? "_____ " : "( : ) ") + y;

        // determine if we've reached the end of a row (i equals 7, 4, 2 or 1)
        // use non shortcircuit operators to save bytes and ensure we hit the final i, because...
        // we also decrement i here 
        // (we didn't do this in the for loop declaration to save a byte)
        if (i == 7 | i < 5 & i-- != 3) {

            // concatenate our rows x & y,
            // prefixing them with the padding z,
            // postfixing them with a newline
            o += z + x + "\n" + z + y + "\n";

            // reset x and y rows
            x = y = "";

            // increase our padding for next time
            z += "   ";
        }
    }

    // return our final string (no semicolon to save a byte)
    return o
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.