এএসসিআইআই ড্যান্ডেলিয়নস


17

এগুলি হ'ল এএসসিআইআই ড্যান্ডেলিয়নস:

   \|/      \ /          |      
   /|\       |    \|/    |      
    |        |     |   _\|/_
    |        |     |    /|\

এএসসিআইআই ড্যান্ডেলিয়নের তিনটি প্যারামিটার রয়েছে: কান্ডের দৈর্ঘ্য (1 থেকে 256 এর মধ্যে ধনাত্মক সংখ্যা, বীজের সংখ্যা (0 এবং 7 এর মধ্যে ধনাত্মক সংখ্যা) এবং অভিযোজন (^ বা v) above উপরের ড্যান্ডেলিয়নের দৈর্ঘ্য, বীজ এবং অভিমুখীকরণের জন্য, ( যথাক্রমে 3,5, ^), (3,2, ^), (2,3, ^) এবং (3,7, v)

দৈর্ঘ্য 2 সহ একটি ড্যান্ডেলিয়নে চিত্রিত, নীচের ক্রমে বীজগুলি ভরাট করা হয়েছে (মাথা নীচু করে ড্যানডেলিয়নের জন্য উল্টো দিকে উল্টানো):

seeds:  0    1    2    3    4    5     6      7

             |   \ /  \|/  \ /  \|/  _\ /_  _\|/_
        |    |    |    |   /|\  /|\   /|\    /|\
        |    |    |    |    |    |     |      |

চ্যালেঞ্জ:

একটি প্রোগ্রাম / ফাংশন লিখুন যা যখন ইনপুট হিসাবে কোনও ASCII ড্যান্ডেলিয়ন দেওয়া হয়, তার দৈর্ঘ্য, বীজ গণনা এবং ওরিয়েন্টেশন উপরের উদাহরণগুলির অনুরূপ ফর্ম্যাট করে এবং সেই বিন্যাসে পরামিতিগুলি দেওয়া হয় তখন সেই পরামিতিগুলির সাথে একটি ASCII ড্যানডিলিয়ন দেয়। আপনি প্রথম বন্ধনী উপেক্ষা করতে পারেন এবং ধরে নিতে পারেন ইনপুট / আউটপুটটি একটি সংখ্যা, কমা, একটি সংখ্যা, একটি কমা এবং হয় ^বা হয় v। আপনি অন্য অক্ষরের পরিবর্তে ^/ vএতক্ষণ স্থির করতে পারেন যতক্ষণ না সেগুলি এখনও সহজেই 'আপ' / 'ডাউন' (উদাহরণস্বরূপ, u/ d) হিসাবে ব্যাখ্যা করা যায় । (২, ২, ^) এবং (৩,০, ^) বা (২,১, ^) এবং (২,১, ভি) এর মতো দেখতে দেখতে ডানডিলিয়নগুলির মধ্যে আলাদা করার দরকার নেই। ASCII আর্ট দেওয়া, উভয় পরামিতি সেট একটি গ্রহণযোগ্য আউটপুট হবে, এবং উভয় পরামিতি সেট একই ASCII শিল্প দিতে পারে।

এটি , তাই বাইট জেতে সংক্ষিপ্ততম কোড।


সি # তে একটি উদাহরণ প্রোগ্রাম (এমনকি সামান্য গল্ফও নয়):

    string Dandelion(string s)
    {
        if (s.Contains(','))
        {
            //got parameters as input
            string[] p = s.Split(',');
            //depth and width (number of seeds)
            int d = int.Parse(p[0]);
            int w = int.Parse(p[1]);
            //draw stem
            string art = "  |";
            while (d > 2)
            {
                d--;
                art += "\n  |";
            }
            //draw head
            string uhead = (w % 2 == 1 ? "|" : " ");
            string dhead = uhead;
            if (w > 1)
            {
                uhead = "\\" + uhead + "/";
                dhead = "/" + dhead + "\\";
                if (w > 5)
                {
                    uhead = "_" + uhead + "_\n /|\\";
                    dhead = "_\\|/_\n " + dhead;
                }
                else if (w > 3)
                {
                    uhead = " " + uhead + " \n /|\\";
                    dhead = " \\|/ \n " + dhead;
                }
                else
                {
                    uhead = " " + uhead + " \n  |";
                    dhead = "  |\n " + dhead;
                }
            }
            else
            {
                uhead = "  " + uhead + "\n  |";
                dhead = "  |\n  " + dhead;
            }
            //add head to body
            if (p[2] == "^")
            {
                return uhead + "\n" + art;
            }
            return art + "\n" + dhead;
        }
        else
        {
            //ASCII input
            string[] p = s.Split('\n');
            int l = p.Length - 1;
            int offset = 0;
            //find first non-' ' character in art
            while (p[0][offset] == ' ')
            {
                offset++;
            }
            int w = 0;
            if (p[0][offset] == '|')
            {
                //if '|', either head-down or no head.
                if (offset == 0 || p[l][offset - 1] == ' ')
                {
                    //if no space for a head to the left or no head at the bottom, no head.
                    return l.ToString() + ",1,^";
                }
                //head must have at least size 2, or else indistinguishable from no head case 
                w = 6;
                if (p[l][offset] == '|')
                {
                    //odd sized head
                    w = 7;
                }
                if (offset == 1 || p[l - 1][offset - 2] == ' ')
                {
                    //not size 6 or 7
                    w -= 2;
                    if (p[l - 1][offset - 1] == ' ')
                    {
                        //not size 4 or 5
                        w -= 2;
                    }
                }
                return l.ToString() + "," + w.ToString() + ",v";
            }
            else if (p[0][offset] == '\\')
            {
                //head at least size 2 and not 6/7, or indistinguishable from no head.
                w = 4;
                if (p[0][offset + 1] == '|')
                {
                    w = 5;
                }
                if (p[1][offset] == ' ')
                {
                    w -= 2;
                }
            }
            else
            {
                w = 6;
                if (p[0][offset + 2] == '|')
                {
                    w = 7;
                }
            }
            return l.ToString() + "," + w.ToString() + ",^";
        }
    }

আমরা পরিবর্তে অন্য কিছু স্বতন্ত্র চিহ্ন নিতে পারি ^এবং v?
ক্রিটসি লিথোস

@ ক্রিতিক্সিলিথোস যতক্ষণ না তাদের সহজেই 'আপ' এবং 'ডাউন' হিসাবে ব্যাখ্যা করা যায়, নিশ্চিত।
পি ...

3
একটি দৈর্ঘ্য 2 বীজ 1 এবং একটি দৈর্ঘ্য 3 বীজ 0 ডানডেলিওনের মধ্যে পার্থক্যটি কীভাবে খুঁজে পাবেন? 0 এবং 1 বীজের জন্য তাদের উল্টানো হয়েছে কিনা তা জানাও অসম্ভব ...
লূক

@ লুক আপনাকে একই রকম গাছের মধ্যে পার্থক্য করার দরকার নেই। দৈর্ঘ্য 3 বীজ 1 এর মতো দৈর্ঘ্য 2 বীজ 1 এর ক্ষেত্রে আপনার একই ASCII শিল্পটি ফিরে আসা উচিত, এবং যখন আর্টটি ইনপুট হয় তখন দৈর্ঘ্য 2 বীজ 1 বা দৈর্ঘ্য 3 বীজ 0 ফিরে আসতে পারেন।
পি ...

1
আমার ভুল না হওয়া পর্যন্ত মনে হচ্ছে আমাদের কাছে এমন একটি উত্তর রয়েছে যা প্যারামিটার থেকে এএসসিআইআইতে অনুবাদ করে এবং অন্য একটি উত্তর যা ASCII থেকে পরামিতিগুলিতে অনুবাদ করে। কিন্তু আমাদের উভয় কাজ সমর্থন করার কথা, ঠিক আছে?
আর্নল্ড

উত্তর:


6

বিন , 321 বাইট

স্ট্রিনে নতুন লাইন অনুসরণ না করে ইনপুট একক স্ট্রিং হিসাবে গ্রহণ করে। প্যারামিটারগুলি একই পদ্ধতিতে নেওয়া হবে তবে এর মতো ফর্ম্যাট করা হবে

length (1-256)
orientation (u or d)
seeds (0-7)

ইনপুট ড্যানডেলিয়ন হলে প্রোগ্রামটির আউটপুট প্যারামিটারগুলি উপরের মতো একই ফর্ম্যাটে থাকবে।

Hexdump:

00000000 26 52 ca c1 20 5d d3 d0 80 d5 cd a0 5e 80 4c cc  &RÊÁ ]ÓÐ.ÕÍ ^.LÌ
00000010 a0 45 86 25 3e 88 4d a0 6b 80 4c a0 5e 80 23 60   E.%>.M k.L ^.#`
00000020 cd a0 63 80 43 cd a0 5f 80 50 84 a3 81 00 20 5e  Í c.CÍ _.P.£.. ^
00000030 d0 84 a3 81 01 4d a0 60 80 4a c1 4c a0 45 86 25  Ð.£..M `.JÁL E.%
00000040 3a d0 84 a3 81 02 4c a0 45 92 25 3a d0 84 a3 81  :Ð.£..L E.%:Ð.£.
00000050 03 20 60 a0 5f a3 81 04 cd a0 61 80 50 84 a3 81  . ` _£..Í a.P.£.
00000060 05 20 5e cf 52 cc a0 45 86 25 3c a3 81 06 23 81  . ^ÏRÌ E.%<£..#.
00000070 07 a0 61 cf 53 d0 80 a3 81 08 20 80 b5 4c a0 43  . aÏSÐ.£.. .µL C
00000080 8c 25 3a 00 52 a0 6b d3 50 80 a0 63 20 80 7e 20  .%:.R kÓP. c .~ 
00000090 63 20 80 7b 23 00 53 d0 80 c3 cc d0 80 a0 78 20  c .{#.SÐ.ÃÌÐ. x 
000000a0 80 01 8c 25 3a d2 ce cc a0 5d 80 23 81 09 80 4c  ...%:ÒÎÌ ].#...L
000000b0 d0 84 a0 5e 25 3b 81 23 81 0a ce d3 50 80 a0 78  Ð. ^%;.#..ÎÓP. x
000000c0 20 80 7e 81 23 60 23 71 cc d2 cc d0 84 d0 84 a0   .~.#`#qÌÒÌÐ.Ð. 
000000d0 78 25 3a 25 3a 81 23 81 0b cc a5 3d 8b 4c cc d0  x%:%:.#..Ì¥=.LÌÐ
000000e0 84 d0 84 a0 78 25 39 25 39 81 50 84 d0 84 a0 78  .Ð. x%9%9.P.Ð. x
000000f0 25 3a 25 39 8d 25 3b 4c cc d0 84 d0 84 a0 78 25  %:%9.%;LÌÐ.Ð. x%
00000100 39 25 3c 81 23 81 0b 8d 25 3b 8b 4c d0 84 d0 84  9%<.#...%;.LÐ.Ð.
00000110 a0 78 25 39 25 3b 81 23 81 0b 00 20 80 7b 23 81   x%9%;.#... .{#.
00000120 04 a0 df 20 a0 5c a0 7c a0 2f 0a a0 a0 5f af fc  . ß  \ | /.  _¯ü
00000130 5c a0 fc 20 8a a0 a0 fc a0 20 a0 a0 fc a0 20 7c  \ ü .  ü    ü  |
00000140 20                                                
00000141

সমতুল্য জাভাস্ক্রিপ্ট:

+a?                               // if input is parameters
  (
    b=(C>5)<<(o=b=="d"),          // encoding if seeds > 5 and if orientation is down
    g=[                           // storing dandelion as array of characters
      c=" _ "[b],                 // "_" if seeds > 5 and orientation is up, else " "
      " \\"[d=+(C>1)],            // "\" if seeds > 1, else " "
      " |"[C&1],                  // "|" if seeds is odd, else " "
      " /"[d],
      c,                          // "_" if seeds > 5 and orientation is up, else " "
      "\n",
      e="  _"[b],                 // "_" if seeds > 5 and orientation is down, else " "
      ...(                        // spread characters for .reverse() to be correct
        C>3?                      // if seeds > 3 "/|\" else " | "
          "/|\\":
          " | "
      ),
      e,                          // "_" if seeds > 5 and orientation is down, else " "
      ..."\n  |  ".repeat(A-1)    // repeat stem length - 1 times
    ],
    o?                            // if orientation is down, reverse
      g.reverse():
      g
  ).join(""):                     // join array of characters
  [                               // else if input is dandelion
    _.length-1,                   // length of stem is number of rows - 1
    a=="  |  "||b[2]!="|"?        // test orientation of dandelion
      _.reverse()&&"d":           // reverse rows if necessary and return "d" for down
      "u"                         // else return "u" for up
    ,
    (
      _[1][1]!=" "?               // if 1,1 is not " ", seeds is 4 or more
        4+(_[0][0]!=_[1][0])*2:   // if 0,0 or 1,0 is "_", seeds is 6 or 7
        (_[0][3]!=" ")*2          // if 0,3 is not " ", seeds is 2 or 3
    )+
    (_[0][2]!=" ")                // if 0,2 is not " ", seeds is odd
  ].join("\n")                    // join parameters with newline to match input format

_সুস্পষ্টভাবে স্টিডিনকে অব্যবহৃত স্ট্রিংগুলির নিউলাইন পৃথক পৃথক অ্যারের হিসাবে গ্রহণ করে এবং স্পষ্টভাবে একটি ট্রিপলেট হিসাবে পরামিতিগুলি আউটপুট করে। নীচে টেস্ট স্যুট এবং ডেমো :

const js = String.raw`
+a?                               // if input is parameters
  (
    b=(C>5)<<(o=b=="d"),          // encoding if seeds > 5 and if orientation is down
    g=[                           // storing dandelion as array of characters
      c=" _ "[b],                 // "_" if seeds > 5 and orientation is up, else " "
      " \\"[d=+(C>1)],            // "\" if seeds > 1, else " "
      " |"[C&1],                  // "|" if seeds is odd, else " "
      " /"[d],
      c,                          // "_" if seeds > 5 and orientation is up, else " "
      "\n",
      e="  _"[b],                 // "_" if seeds > 5 and orientation is down, else " "
      ...(                        // spread characters for .reverse() to be correct
        C>3?                      // if seeds > 3 "/|\" else " | "
          "/|\\":
          " | "
      ),
      e,                          // "_" if seeds > 5 and orientation is down, else " "
      ..."\n  |  ".repeat(A-1)    // repeat stem length - 1 times
    ],
    o?                            // if orientation is down, reverse
      g.reverse():
      g
  ).join(""):                     // join array of characters
  [                               // else if input is dandelion
    _.length-1,                   // length of stem is number of rows - 1
    a=="  |  "||b[2]!="|"?        // test orientation of dandelion
      _.reverse()&&"d":           // reverse rows if necessary and return "d" for down
      "u"                         // else return "u" for up
    ,
    (
      _[1][1]!=" "?               // if 1,1 is not " ", seeds is 4 or more
        4+(_[0][0]!=_[1][0])*2:   // if 0,0 or 1,0 is "_", seeds is 6 or 7
        (_[0][3]!=" ")*2          // if 0,3 is not " ", seeds is 2 or 3
    )+
    (_[0][2]!=" ")                // if 0,2 is not " ", seeds is odd
  ].join("\n")                    // join parameters with newline to match input format`;

// bean binary
const bin = bean.compile(js);

// program as function
const prog = bean.program(bin);

(document.body.onchange = function () {
  const parameters = stem.value + '\n' + orientation.value + '\n' + seeds.value;
  dandelion.textContent = prog(parameters);
  params.value = prog(dandelion.textContent);
})();
textarea {
  resize: none;
}
<script src="https://cdn.rawgit.com/patrickroberts/bean/master/dst/bean.min.js"></script>
<input id=stem type=number min=1 max=256 value=5>
<select id=orientation>
  <option value="u">u</option>
  <option value="d">d</option>
</select>
<input id=seeds type=number min=0 max=7 value=5>
<p>Dandelion (output from program given parameters)</p>
<pre id=dandelion></pre>
<p>Parameters (output from program given dandelion)</p>
<textarea id=params rows=3></textarea>


2

জাভাস্ক্রিপ্ট 513 391 379 355 বাইট

গল্ফকে ১৩৪ বাইট বন্ধ এবং ক্রিটসি লিথোসকে ১৩ বাইট বন্ধ সাহায্য করার জন্য @ নীলকে ধন্যবাদ এই প্রোগ্রামটি ধরে নিয়েছে যে কোনও ASCII ড্যান্ডেলিয়নগুলি এটির স্ট্রিংয়ের সমস্ত লাইনের জন্য 5 লাইনের প্রস্থ থাকতে পারে বলে চিহ্নিত করার চেষ্টা করছে। অর্থাত্: কান্ডটি 2 স্পেস, উল্লম্ব রেখা এবং অন্য 2 স্পেস। (এটি এই সমস্যার কারণে তৈরি ড্যান্ডেলিয়নগুলি শ্রেণিবদ্ধ করতে পারে না)

(x,y,z)=>{a=Array(x+1).fill(1);if(x.length>1){a=x.split`
`;h=a.length-1;t=b=i=0;for(;i<(h>1)+1;i++)for(j=0;j<5;a[h-i][j++]!=' '&&b++)a[i][j]!=' '&&t++;return[h,(t>b?t:b)-(h>1),t>b?'^':'v']}z<'v'?(a[0]=y&4?y-2:y,a[1]=y&4?7:1):(a[x-1]=1+(y>4)*2+(y>4)*(y&2),a[x]=y&1+(y>2)*6);return a.map(n=>',  |, \\ /, \\|/,_\\ /_,_\\|/_, / \\, /|\\'.split`,`[n]).join`
`}

কিভাবে এটা কাজ করে

এটি প্রদত্ত প্রথম যুক্তিটির দৈর্ঘ্য> 1 (একটি স্ট্রিং) রয়েছে কিনা তা ফাংশনটি পরীক্ষা করে। যদি প্রথম যুক্তিটি স্ট্রিং হয় তবে এটি ASCII ড্যান্ডেলিয়নের বিশদটি সনাক্ত করে।

ড্যান্ডেলিয়নের উচ্চতা পেতে, এটি নিউলাইন অক্ষরের চারপাশে স্ট্রিং বিভক্ত হয় এবং উপাদানগুলির সংখ্যা গণনা করে - ১. বীজের সংখ্যা পেতে, এটি শীর্ষ দুটি এবং নীচের দুটি লাইনে অ ফাঁক অক্ষরের সংখ্যা গণনা করে। যদি শীর্ষে আরও অক্ষর থাকে তবে তা খাড়া বলে ঘোষণা করা হয় এবং এটি শীর্ষ গণনা -১ ব্যবহার করে, অন্যথায় এটি downর্ধ্বমুখী হিসাবে ঘোষিত হয় এবং নীচের গণনা -১ ব্যবহার করে। যদি মোট উচ্চতা মাত্র 2 হয় তবে এটি প্রতিটি লাইনের গণনা পৃথকভাবে পরীক্ষা করে এবং আরও অ স্পেস অক্ষরের সাথে পার্শ্বটি বেছে নিয়ে খাড়া করে তা নির্ধারণ করে।

অন্যথায়, ফাংশনটি ডানডেলিওনের প্রতিটি স্তরের আকৃতি অনুসারে 0 থেকে 7 পর্যন্ত প্রতিটি স্তরকে যথাযথ স্ট্রিংয়ে রূপান্তর করার আগে আঁকতে হবে এমন মানগুলি নির্ধারণ করতে বিটওয়াইজ ম্যাথ ব্যবহার করে bit

0:  
1:  |  
2: \\ /  
3: \\|/  
4:_\\ /_  
5:_\\|/_  
6: / \\  
7: /|\\

এটি অনলাইনে চেষ্টা করুন



1
কেবলমাত্র আপনার ড্যান্ডেলিয়ন স্রষ্টাকে নিয়ে, আমি তখন 125 বাইট ছাড়িয়ে গল্ফ করতে সক্ষম হয়েছি। আমার কোডটি সরাসরি আপনার সমাধানটিতে ফিরে আটকানো যাবে না, তবে আপনি সঞ্চয়ীগুলির কিছু অন্তর্ভুক্ত করতে পারেন:(x,y,z,a=[...Array(x+1)].fill(1))=>a.map(n=>', |, \\ /, \\|/,_\\ //,_\\|/_, / \\, /|\\'.split`,`[n],z<'v'?(a[0]=y&4?y-2:y,a[1]=y&4?7:1):(a[x-1]=1+(y>4)*2+(y>4)*(y&2),a[x]=y&1+(y>2)*6)).join`\n`
নীল

1
আপনি অপসারণ করতে পারেন elseকারণ আপনি ifযেভাবেই অংশে ফিরে আসছেন। এছাড়াও আমি এখানে থাকাকালীন, আমি কেবল এটি উল্লেখ করতে চেয়েছিলাম যে কিছু ফাংশন যেমন splitএবং যখন আপনি তাদের উদ্ধৃত স্ট্রিং আক্ষরিককে অনুরোধ করবেন তখন joinপ্রয়োজন নেই , এ কারণেই আমি তাদের আমার পূর্ববর্তী মন্তব্যে অন্তর্ভুক্ত করি নি। ()`
নিল

1
আপনাকে সঠিক ধরণের উদ্ধৃতি ব্যবহার করতে হবে, এটি কেবল s বা s এর সাথে কাজ করে `না । '"
নীল

1
আপনি পরিবর্তন করতে পারেন \nমধ্যে join`\n`(চরিত্র হিসেবে) একটি newline করতে। এছাড়াও আপনি পরিবর্তন করতে পারেন (h>2?1:0)শুধু h>2এবং (h>2?2:1)করতে (h>2)+1tio.run/#IRiKF
Kritixi Lithos

1

পাইথন 3.6, 476 453 448 413 394 বাইট

সমাধান :

def h(i):
 l,s,o=i.split(",");s=int(s);z=["  |  "];q=(int(l)-1)*z;b,d,f,h,g,c,a=["  ","\\/"][s>1]+["  ","\\/"][s>3]+["| ","||"][s%2==1]+[" ","_"][s>5]
 if"d"==o:b,d,h,f,c,g=f,h,d,b,g,c
 r=[[a+b+c+d+a]+[" "+h+g+f+" "],z][s==0];return"\n".join([q+r,r+q]["u"==o])
def j(i):
 if","in i:print(h(i))
 else:[print(f"{m},{j},{k}")for m in range(257)for j in range(8)for k in"ud"if i==h(f"{m},{j},{k}")]

ফলাফল

>>> j("6,5,u")
 \|/
 /|\
  |
  |
  |
  |
  |
>>> j("5,2,d")
  |
  |
  |
  |
  |
 / \
>>> j("3,2,u")
 \ /
  |
  |
  |
>>> j("_\|/_\n /|\ \n  |  \n  |  \n  |  \n  |  \n  |  ")
6,7,u
>>> j(" \|/ \n /|\ \n  |  \n  |  \n  |  \n  |  ")
5,5,u
>>> j("  |  \n  |  \n  |  \n  |  \n  |  ")
4,1,u
4,1,d
5,0,u
5,0,d

বিছান

def g(i):
    def h(i):                       # this function draw dandelion
        l, s, o = i.split(",")      # split argument 
        s = int(s)

        # Calcul the string in the flower for up case 
        #   _\|/_   --> abcdb  --> when s=7 we have a=_ b=\ c=| d=/ h=/ g=| f=\ 
        #    /|\    -->  hgf  
        a = "_" if s > 5 else " "
        b = "\\" if s > 1 else " "
        d = "/" if s > 1 else " "
        h = "/" if s > 3 else " "
        f = "\\" if s > 3 else " "
        c = "|" if s%2 == 1 else " "
        g = "|" if s%2 == 1 else "|"

        # Shuffle a bit if the position is down 
        if"d"==o:
            b,d,h,f,c,g=f,h,d,b,g,c

        # treate the case to remove the line with ony white space
        if s==0:
            res=["  |  "]
        else:
            # assemble all piece of the flower
            res += [a+b+c+d+a]
            res += [" "+h+g+f+" "]

        # add stem up or down
        if o=="u":
            res = res + (int(l)-1) * ["  |  "]
        else:
            res = (int(l)-1) * ["  |  "] + res
        return "\n".join(res)

    if "," in i:
        print(h(i))
    else:
        # search in all flower posibility if we can recreate the input
        [print(m,j,k) for m in range(1, 257) for j in range(0, 8)for k in "ud"if i == h(f"{m},{j},{k}")]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.