সুন্দর প্যাটার্ন ড্রয়ার (সামান্য কিউব অন্তর্ভুক্ত)


18

সুন্দর প্যাটার্ন ড্রয়ার

গুড মর্নিং পিপিসি!

অন্য দিন, যখন আমি স্ট্যাক ওভারফ্লোতে কাউকে সাহায্য করার চেষ্টা করছিলাম, তখন তার সমস্যার একটি অংশ আমাকে এই চ্যালেঞ্জের জন্য একটি ধারণা দিয়েছে।

প্রথমত, নিম্নলিখিত আকারটি যাচাই করুন:

এখানে চিত্র বর্ণনা লিখুন

সমস্ত কালো সংখ্যা যেখানে আকারের পয়েন্টগুলির সূচক এবং সমস্ত গা dark়-নীল সংখ্যা হ'ল পয়েন্টগুলির মধ্যে লিঙ্কগুলির সূচক।

এখন, 0x00000 থেকে 0xFFFFF এর জন্য একটি হেক্সাডেসিমাল নম্বর দেওয়া, আপনাকে কেবল অক্ষরের স্থান এবং "■" ("ও" অক্ষরটি ব্যবহার করা ঠিক আছে) ব্যবহার করে কনসোলটিতে একটি আকার আঁকতে হবে।

এখানে কয়েকটি উদাহরণ যেখানে হেক্সাডেসিমাল সংখ্যাটি ইনপুট এবং আকারটি আউটপুট:

0xE0C25 :
■ ■ ■ ■ ■ ■ ■ ■ ■ 
■               ■ 
■               ■ 
■               ■ 
■ ■ ■ ■ ■       ■ 
        ■       ■ 
        ■       ■ 
        ■       ■ 
        ■ ■ ■ ■ ■
0xC1043 :
■ ■ ■ ■ ■ ■ ■ ■ ■ 
              ■   
            ■     
          ■       
        ■         
      ■           
    ■             
  ■               
■ ■ ■ ■ ■ ■ ■ ■ ■ 
0xE4F27 :
■ ■ ■ ■ ■ ■ ■ ■ ■ 
■       ■       ■ 
■       ■       ■ 
■       ■       ■ 
■ ■ ■ ■ ■ ■ ■ ■ ■ 
■       ■       ■ 
■       ■       ■ 
■       ■       ■ 
■ ■ ■ ■ ■ ■ ■ ■ ■ 
0xF1957 :
■ ■ ■ ■ ■ ■ ■ ■ ■ 
■ ■           ■ ■ 
■   ■       ■   ■ 
■     ■   ■     ■ 
■       ■       ■ 
■     ■   ■     ■ 
■   ■       ■   ■ 
■ ■           ■ ■ 
■ ■ ■ ■ ■ ■ ■ ■ ■ 
0xD0C67 :
■ ■ ■ ■ ■ ■ ■ ■ ■ 
  ■             ■ 
    ■           ■ 
      ■         ■ 
■ ■ ■ ■ ■       ■ 
      ■ ■       ■ 
    ■   ■       ■ 
  ■     ■       ■ 
■ ■ ■ ■ ■ ■ ■ ■ ■ 
0x95E30 :
■ ■ ■ ■ ■       ■ 
  ■     ■     ■ ■ 
    ■   ■   ■   ■ 
      ■ ■ ■     ■ 
■ ■ ■ ■ ■ ■ ■ ■ ■ 
        ■ ■       
        ■   ■     
        ■     ■   
        ■       ■ 
0x95622 :
■ ■ ■ ■ ■       ■ 
  ■     ■     ■   
    ■   ■   ■     
      ■ ■ ■       
■ ■ ■ ■ ■ ■ ■ ■ ■ 
        ■         
        ■         
        ■         
■ ■ ■ ■ ■         
0xC5463 : 
■ ■ ■ ■ ■ ■ ■ ■ ■ 
        ■     ■   
        ■   ■     
        ■ ■       
■ ■ ■ ■ ■         
      ■ ■         
    ■   ■         
  ■     ■         
■ ■ ■ ■ ■ ■ ■ ■ ■ 
0xE5975 :
■ ■ ■ ■ ■ ■ ■ ■ ■ 
■       ■     ■ ■ 
■       ■   ■   ■ 
■       ■ ■     ■ 
■       ■       ■ 
■     ■ ■ ■     ■ 
■   ■   ■   ■   ■ 
■ ■     ■     ■ ■ 
■       ■ ■ ■ ■ ■ 
0xB5E75 :
■ ■ ■ ■ ■       ■ 
■ ■     ■     ■ ■ 
■   ■   ■   ■   ■ 
■     ■ ■ ■     ■ 
■ ■ ■ ■ ■ ■ ■ ■ ■ 
      ■ ■ ■     ■ 
    ■   ■   ■   ■ 
  ■     ■     ■ ■ 
■       ■ ■ ■ ■ ■ 
0xF4C75 :
■ ■ ■ ■ ■ ■ ■ ■ ■ 
■ ■     ■       ■ 
■   ■   ■       ■ 
■     ■ ■       ■ 
■ ■ ■ ■ ■       ■ 
      ■ ■ ■     ■ 
    ■   ■   ■   ■ 
  ■     ■     ■ ■ 
■       ■ ■ ■ ■ ■
0xF5D75 :
■ ■ ■ ■ ■ ■ ■ ■ ■ 
■ ■     ■     ■ ■ 
■   ■   ■   ■   ■ 
■     ■ ■ ■     ■ 
■ ■ ■ ■ ■       ■ 
■     ■ ■ ■     ■ 
■   ■   ■   ■   ■ 
■ ■     ■     ■ ■ 
■       ■ ■ ■ ■ ■ 

এটি কীভাবে কাজ করে সে সম্পর্কে এখানে কিছু ব্যাখ্যা দেওয়া হল:

0xFFFFF(16) = 1111 1111 1111 1111 1111(2)

আপনার এখানে 20 টি বিট রয়েছে, প্রতিটি বিট লিঙ্ক উপস্থিত রয়েছে কি না তা বলে।

সর্বাধিক উল্লেখযোগ্য বিট (এমএসবি) এর সূচক 0 (চিত্রের রেফারেন্স) বা কম উল্লেখযোগ্য বিট (এলএসবি) 19 (আবার চিত্রের রেফারেন্স)।

উদাহরণস্বরূপ প্রদত্ত প্রথম আকারের জন্য এটি কীভাবে কাজ করে তা এখানে:

0xE0C25(16) = 1110 0000 1100 0010 0101(2)

মানে আপনার নীচের বিদ্যমান লিঙ্কগুলি রয়েছে: 0,1,2,8,9,14,17,19।

আপনি যদি এই সংখ্যাগুলির সাথে রেফারেন্স চিত্রের লাইনগুলি হাইলাইট করেন তবে এটি আপনাকে এই আকার দেবে:

■ ■ ■ ■ ■ ■ ■ ■ ■ 
■               ■ 
■               ■ 
■               ■ 
■ ■ ■ ■ ■       ■ 
        ■       ■ 
        ■       ■ 
        ■       ■ 
        ■ ■ ■ ■ ■

আপনার যদি আরও সহায়তার প্রয়োজন হয় তবে এখানে একটি সরল ও অদম্য পাইথন বাস্তবায়ন রয়েছে:

patterns = [
  0xE0C25, 0xC1043, 0xE4F27, 0xF1957, 
  0xD0C67, 0x95E30, 0x95622, 0xC5463, 
  0xE5975, 0xB5E75, 0xF4C75, 0xF5D75
]

def printIfTrue(condition, text = "■ "):
  if condition:
    print(text, end="")
  else:
    print(" "*len(text), end="")

def orOnList(cube, indexes):
  return (sum([cube[i] for i in indexes]) > 0)

def printPattern(pattern):
  cube = [True if n == "1" else False for n in str(bin(pattern))[2::]]
  for y in range(9):
    if y == 0: printIfTrue(orOnList(cube, [0, 2, 3]))
    if y == 4: printIfTrue(orOnList(cube, [2, 4, 9, 11, 12]))
    if y == 8: printIfTrue(orOnList(cube, [11, 13, 18]))
    if y in [0, 4, 8]:
      printIfTrue(cube[int((y / 4) + (y * 2))], "■ ■ ■ ")
      if y == 0: printIfTrue(orOnList(cube, [0, 1, 4, 5, 6]))
      if y == 4: printIfTrue(orOnList(cube, [3, 5, 7, 9, 10, 13, 14, 15]))
      if y == 8: printIfTrue(orOnList(cube, [12, 14, 16, 18, 19]))
      printIfTrue(cube[int((y / 4) + (y * 2)) + 1], "■ ■ ■ ")
    elif y in [1, 5]:
      for i in range(7):
        if i in [2, 5]:
          print(" ", end=" ")
        printIfTrue(cube[y * 2 + (1 - (y % 5)) + i])
    elif y in [2, 6]:
      for i in range(5):
        if i in [1, 2, 3, 4]:
          print(" ", end=" ")
        if i in [1, 3]:
          if i == 1 and y == 2:
            printIfTrue(orOnList(cube, [3, 4]))
          elif i == 3 and y == 2:
            printIfTrue(orOnList(cube, [6, 7]))
          if i == 1 and y == 6:
            printIfTrue(orOnList(cube, [12, 13]))
          elif i == 3 and y == 6:
            printIfTrue(orOnList(cube, [15, 16]))
        else:
          printIfTrue(cube[(y * 2 - (1 if y == 6 else 2)) + i + int(i / 4 * 2)])
    elif y in [3, 7]:
      for i in range(7):
        if i in [2, 5]:
          print("  ", end="")
        ri, swap = (y * 2 - 2) + (1 - (y % 5)) + i, [[3, 6, 12, 15], [4, 7, 13, 16]]
        if ri in swap[0]: ri = swap[1][swap[0].index(ri)]
        elif ri in swap[1]: ri = swap[0][swap[1].index(ri)]
        printIfTrue(cube[ri])
    if y == 0: printIfTrue(orOnList(cube, [1, 7, 8]))
    if y == 4: printIfTrue(orOnList(cube, [6, 8, 10, 16, 17]))
    if y == 8: printIfTrue(orOnList(cube, [15, 17, 19]))
    print()

for pattern in patterns:
  printPattern(pattern)

অবশ্যই এটি নিখুঁত নয় এবং এটি করা উচিত এটির জন্য এটি দীর্ঘ দীর্ঘ এবং আপনি এখানে আসার সঠিক কারণ!

হাস্যকরভাবে এই প্রোগ্রামটি তৈরি করা :)

এটি কোড-গল্ফ, তাই সংক্ষিপ্ত উত্তর জেতে!


আমরা কি লাইনে একক পেছনের স্থান মুদ্রণ করতে পারি? আপনার উদাহরণগুলিতে সেগুলি রয়েছে।
orlp

হ্যাঁ :) এটি অনুমোদিত
সিগ্মেই

4
গ্রাফিকাল আউটপুট অনুমোদিত?
12 মে 21

1
আপনার কি হেক্সাডেসিমাল ইনপুট দরকার বা দশমিক ঠিক আছে?
তিতাস

1
হতে পারে সমস্ত কোড গল্ফ কেবল আমার কাছে আসছে, তবে সেই কোডটি পড়তে বেদনাদায়ক…
লিন

উত্তর:


8

জাভাস্ক্রিপ্ট (ES6), 202 188 187 বাইট

let f =

n=>`0${x=',16,-54,21,-26,21,21,-26,21,166'}${x},16`.split`,`.map((d,i)=>(k-=d,n)>>i&1&&[..."ooooo"].map(c=>g[p-=(k&3||9)^8]=c,p=k>>2),g=[...(' '.repeat(9)+`
`).repeat(9)],k=356)&&g.join``

console.log(f(0xE0C25))
console.log(f(0xC1043))
console.log(f(0xE4F27))
console.log(f(0xF1957))

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

n =>                                                 // given 'n':
  `0${x = ',16,-54,21,-26,21,21,-26,21,166'}${x},16` // build the list of delta values
  .split`,`.map((d, i) =>                            // split the list and iterate
    (k -= d, n) >> i & 1 &&                          // update 'k', test the i-th bit of 'n'
    [..."ooooo"].map(c =>                            // if the bit is set, iterate 5 times:
      g[                                             // 
        p -= (k & 3 || 9) ^ 8                        // compute the direction and update 'p'
      ] = c,                                         // write a 'o' at this position
      p = k >> 2                                     // initial value of 'p'
    ),                                               //
    g = [...(' '.repeat(9) + `\n`).repeat(9)],       // initialization of the 'g' array
    k = 356                                          // initial value of 'k'
  )                                                  //
  && g.join``                                        // yield the final string

আমরা একটি গ্রিডে কাজ করি g 10 টি অক্ষরের 9 সারির । গ্রিডটি প্রথমে ফাঁকা জায়গায় ভরা হয় প্রতি 10 তম অক্ষর একটি লাইনফিডের সাথে।

প্রতিটি বিভাগটি একটি শুরুর অবস্থান এবং দিক দ্বারা সংজ্ঞায়িত করা হয়।

দিকনির্দেশগুলি নিম্নলিখিত হিসাবে এনকোড করা হয়েছে:

ID | Dir.| Offset
---|-----|-------
 0 |  W  |  -1        Offset encoding formula:
 1 | NE  |  -9        -((ID || 9) ^ 8)
 2 |  N  |  -10
 3 | NW  |  -11

প্রতিটি বিভাগকে পূর্ণসংখ্যা হিসাবে এনকোড করা হয়:

  • দিকটি বিট # 0 এবং # 1 এ সংরক্ষণ করা হয়
  • প্রারম্ভিক অবস্থান বিট # 2 থেকে 8 8 এ সংরক্ষণ করা হয়

উদাহরণস্বরূপ, বিভাগ # 3 55 অবস্থান থেকে শুরু হয় এবং তৃতীয় দিকটি ব্যবহার করে। অতএব, এটি হিসাবে এনকোড করা আছে(55 << 2) | 3 == 223

নীচে # 19 থেকে বিভাগ # 0 পর্যন্ত পূর্ণসংখ্যার ফলাফলের তালিকা রয়েছে:

356,340,394,373,399,378,357,383,362,196,180,234,213,239,218,197,223,202,36,20

একবার ডেল্টা-এনকোডড, 356 থেকে শুরু করে, এটি হয়ে যায়:

0,16,-54,21,-26,21,21,-26,21,166,16,-54,21,-26,21,21,-26,21,166,16

যা শেষ পর্যন্ত এনকোড করা হয়েছে:

`0${x=',16,-54,21,-26,21,21,-26,21,166'}${x},16`

ওহো ... এর মধ্যে ফাঁকা স্থানগুলি ভুলে গেছি। ফিক্সিং।
আর্নৌল্ড

5

পাইথন 3, 289 বাইট

def f(n):
 for r in range(9):print(*(" o"[any(n&1<<ord(c)-97for c in"trq|t|t|t|tspon|s|s|s|sml|r|q||p|o|n||m|l|r||qp||o||nm||l|r|p||q|o|m||n|l|rpkih|k|k|k|qomkjgfe|j|j|j|nljdc|i|h||g|f|e||d|c|i||hg||f||ed||c|i|g||h|f|d||e|c|igb|b|b|b|hfdba|a|a|a|eca".split("|")[r*9+c])]for c in range(9)))

স্মার্ট কিছুই নেই, কেবল হার্ডকোডিং।


"trq|t...a|eca".split("|")হয়ে গেল না "tqr t...a eca".split()?
লুভজো

@Loovjo না, .split()ধ্বংস ||
orlp

3

রুবি, 116 বাইট

->n{s=[' '*17]*9*$/
20.times{|i|j=i%9
n>>19-i&1>0&&5.times{|k|s[i/9*72+(j>1?~-j/3*8+k*18:j*16)+k*(2--j%3*2)]=?O}}
s}

এটি আমি পর্যবেক্ষণ করেছি এমন কয়েকটি ধরণের উপর নির্ভর করে। প্রথমত, প্যাটার্নটি প্রতি 9 টি লাইনে পুনরাবৃত্তি করে। দ্বিতীয়ত, যদি অনুভূমিক রেখাগুলির শুরুর পয়েন্টগুলি যথাযথভাবে বেছে নেওয়া হয়, তবে এক্স দিক নির্দেশাবলী নিয়মিতভাবে ডান, বাম, সোজা হয়ে চক্রের মধ্য দিয়ে যায়।

পরীক্ষা প্রোগ্রামে অসম্পূর্ণ

f=->n{
   s=[' '*17]*9*$/                    #Setup a string of 9 newline separated lines of 17 spaces.
   20.times{|i|                       #For each of the 20 bits..
     j=i%9                            #The pattern repeats every 9 bits.
     n>>19-i&1>0&&                    #If the relevant bit is set,
     5.times{|k|                      #draw each of the 5 points on the relevant line.
       s[i/9*72+                      #There are 9 lines starting on each row. Row y=0 starts at 0 in the string, row y=1 at 72, etc.
       (j>1?~-j/3*8+k*18:j*16)+       #~-j=j-1. For j=2..8, the starting x coordinates are (0,0,1,1,1,2,2)*8. For j=0 and 1 starting x coordinates are 0 and 16. 
       k*(2--j%3*2)                   #From the starting points, draw the lines right,left,straight. Down movement if applicable is given by conditional k*18 above.
       ]=?O                           #Having described the correct index to modify, overwrite it with a O character.
     }
   }
s}                                    #Return the string.


[0xE0C25, 0xC1043, 0xE4F27, 0xF1957, 
  0xD0C67, 0x95E30, 0x95622, 0xC5463, 
  0xE5975, 0xB5E75, 0xF4C75, 0xF5D75].map{|m|puts f[m],'---------'}

আমি বিশ্বাস করি যে 20-বর্ণের স্ট্রিং ব্যবহার করে একটি 112 বাইট সমাধান রয়েছে এবং 20 লাইনের পরামিতিগুলি সংজ্ঞায়িত করতে কিছু ডিকোডিং রয়েছে। আমি সময় পেলে এটি পরে চেষ্টা করব।


সুন্দর ব্যাখ্যা!
সিগ্মেই

2

পিএইচপি, 142 150 149 বাইট

for($r="";$c=ord(",(NMKJIGFHDjigfecbd`"[$i]);)if(hexdec($argv[1])>>$i++&1)for($p=96^$c&~$k=3;$k++<8;$p+=7+($c&3?:-6))$r[$p]=o;echo chunk_split($r,9);

যতদূর প্রয়োজন আকারটি মুদ্রণ করে; অর্থাত্ নীচের অংশটি খালি থাকলে এটি কেটে যাবে।
সাথে চালাও php -nr '<code>' <input>। ইনপুট উপসর্গ করবেন না

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

কোনও কাটার জন্য 11 বাইট যুক্ত করুন: ,$r[80]=" "পরে sert োকান $r=""

এনকোডিং ব্যাখ্যা

প্রতিটি লাইন একটি প্রারম্ভিক পয়েন্ট এবং চারটি দিকের একটি দিয়ে বর্ণনা করা যেতে পারে।
একটি 9x9 গ্রিডে অঙ্কন করা, শুরুর অবস্থান থেকে শুরু 0,0করে 8,4; বা, থেকে, মিলিত 0করার 8*9+4=76। ভাগ্যক্রমে, সমস্ত সূচনা পয়েন্ট [0,4,8,36,40,44,72,76]4 দ্বারা বিভাজ্য; সুতরাং নির্দেশ কোড[0..3] 0 এবং 1 বিটগুলিতে সংকোচিত হতে পারে -> কোনও স্থানান্তরিত করার প্রয়োজন নেই।

কার্সার চলাচলের একটি সহজ গণনার 0জন্য, পূর্বের জন্য নেওয়া হয় (কোনও উল্লম্ব গতিবিহীন একমাত্র দিক) এবং [1,2,3]দক্ষিণ-পশ্চিম, দক্ষিণ, দক্ষিণ-পূর্ব, যেখানে অফসেটটি 9(উল্লম্ব আন্দোলনের জন্য) প্লাস [-1,0,1]-> [8,9,10]-> হয় delta=code?code+7:1

প্রথম এবং শেষ লাইনগুলি পূর্ব দিকে যাওয়ার দিকটি, যার ফলাফল 0 থেকে 76 অবধি রয়েছে [0+0,4+0,0+2,0+3,4+1,4+2,4+3,8+1,8+2,...,44+1,44+2,72+0,76+0]; এবং বিটওয়াইজ এক্সওর 96 মুদ্রণযোগ্য এবং অযৌক্তিক এসকি কোডগুলিতে প্রতিটি মান ফলাফল [96,100,98,99,101,102,103,105,106,68, 72,70,71,73,74,75,77,78,40,44]-> `dbcefgijDHFGIJKMN(,। কোডটি বিট 0 এর জন্য এলএসবি ব্যবহার করে, যখন লাইন 0 এমএসবি-র সাথে সম্পর্কিত, তাই স্ট্রিংটি বিপরীত করতে হবে। Finito।

ভাঙ্গন

for($r="";                  // init result string, loop through line codes
    $c=ord(",(NMKJIGFHDjigfecbd`"[$i]);)
    if(hexdec($argv[1])>>$i++&1)// if bit $i is set, draw line 19-$i:
        for($p=96^$c&~$k=3          // init $k to 3, init cursor to value&~3
            ;$k++<8;                // loop 5 times
            $p+=7+($c&3?:-6)            // 2. map [0,1,2,3] to [1,8,9,10], move cursor
        )
            $r[$p]=o;                   // 1. plot
echo chunk_split($r,9);     // insert a linebreak every 9 characters, print

কিছু গল্ফিং ব্যাখ্যা

  • যেহেতু ^96নীচের দুটি বিটের কোনও প্রভাব নেই, তাই দিকটি বের করার সময় এটি উপেক্ষা করা যেতে পারে; সুতরাং কোন ভেরিয়েবলের মধ্যে মানটি সংরক্ষণ করার দরকার নেই যা কার্সর ইনপিতে 5 বাইট সংরক্ষণ করে।
  • ~3পরিবর্তে ব্যবহার 124করে একটি বাইট সংরক্ষণ করে এবং পরবর্তী গল্ফিংয়ের অনুমতি দেয়:
  • অ্যাসাইনমেন্টের $k=3ভিতরে লুপিং কাউন্টারটি শুরু করা $pদুটি বাইট সংরক্ষণ করে
    এবং এটি প্রাক-অবস্থার ক্ষতি করতে পারে না (যেহেতু উপরের মানটির এখনও একটি অঙ্ক থাকে)।
  • ফলাফলের জন্য একটি স্ট্রিং ব্যবহার করে স্বল্পতম সূচনা এবং প্লট করা সম্ভব হয়: যখন কোনও অক্ষর একটি স্ট্রিংয়ের শেষের বাইরে সেট করা থাকে, পিএইচপি অন্তর্নিহিতভাবে অনুপস্থিত অক্ষরগুলিকে সেট করে। এবং chunk_splitলাইন ব্রেকগুলি সন্নিবেশ করানোর সবচেয়ে সংক্ষিপ্ততম উপায়।
    আমি আরও জানতে চাই না যে আরও কত কিছু লাগবে।
  • 7+($c&3?:-6)এর চেয়ে এক বাইট ছোট $c&3?$c%4+7:1
  • hexdec()ইনপুট সীমাবদ্ধতা মেটানোর জন্য যুক্ত (8 বাইট)।

2

জাভাস্ক্রিপ্ট, 184 183 178 168 167 বাইট

f=
n=>[...`<>K[LM]NO\\^k{lm}no|~`].map((e,i)=>n>>i&1&&[0,2,4,6,8].map(i=>a[(e&102)*4+(e&17||15)*i]=`o`,e=~e.charCodeAt()),a=[...(` `.repeat(31)+`
`).repeat(9)])&&a.join``
<input oninput=o.textContent=f(+this.value)><pre id=o>

মূলত 206 বাইট ছিল কিন্তু @ আরনল্ডের উত্তর আমাকে এক-মাত্রিক অ্যারে সমাধান অনুসন্ধান করতে অনুপ্রাণিত করেছিল। সম্পাদনা: @ বর্ধিত 1 বাইট ধন্যবাদ @ edc65। সংরক্ষিত 5 15 বাইট @ অরনাউল্ডকে ধন্যবাদ। চরিত্রের পছন্দটি টুইট করে আরও একটি বাইট সংরক্ষণ করেছেন।


[0,1,2,3,4]সংক্ষিপ্ত
edc65

আমি মনে করি আপনি ব্যবহার করে 4 বাইট সংরক্ষণ করতে পারবেন [67,65,52,36,51,50,34,49,48,35,33,20,4,19,18,2,17,16,3,1]এবং[0,2,4,6,8].map(i=>a[(e&102)*4+(e&17||15)*i]='o')
আর্নল্ড

1
অথবা আপনি আরও 10 টি বাইট ব্যবহার করতে [..."ecVFUTDSREC6&54$32%#"]এবং [0,2,4,6,8].map(i=>a[(e&102)*4+(e&17||15)*i]='o',e=e.charCodeAt()-34)সংরক্ষণ করতে পারেন ।
আর্নল্ড

@ আরনাউল্ড আপনার নিজের সাশ্রয়টি 1 এর চেয়ে কম হয়েছে বলে মনে হয়েছে এবং আমি এর ~পরিবর্তে অতিরিক্ত বাইটটি গল্ফ করতে সক্ষম -34হয়েছি (দুঃখের সাথে আমি `\` এর ফলস্বরূপ হয়ে পড়েছি যার কারণে আমি 2 বাইট সংরক্ষণ করি না)।
নীল

আমি ভাবছি আপনি যদি এই '\' কে ASCII চরিত্র # 220 দিয়ে প্রতিস্থাপন করতে পারেন।
আর্নল্ড

1

ব্যাচ, 491 বাইট

@set n=%1
@for %%i in ("720896 524288 524288 524288 843776 262144 262144 262144 268288" "131072 65536 0 32768 16384 8192 0 4096 2048" "131072 0 98304 0 16384 0 12288 0 2048" "131072 32768 0 65536 16384 4096 0 8192 2048" "165248 1024 1024 1024 89312 512 512 512 10764" "256 128 0 64 32 16 0 8 4" "256 0 192 0 32 0 24 0 4" "256 64 0 128 32 8 0 16 4" "322 2 2 2 171 1 1 1 17")do @set s=&(for %%j in (%%~i)do @set/am=%1^&%%j&call:c)&call echo(%%s%%
:c
@if %m%==0 (set s=%s%  )else set s=%s%o 

দ্রষ্টব্য: শেষ রেখাটি একটি স্থান দিয়ে শেষ হবে। একটি রাখাif একটি ভিতরে একটি পরিবর্তনশীল সঙ্গে শর্তসাপেক্ষ forলুপ যাতে তার নিজস্ব সাবরুটিন প্রয়োজন ব্যাচ পরলোক হল। যেহেতু এটি দৃশ্যমান কিছুই করে না আমি প্রস্থান করার জন্য এর মধ্যে পড়ে যাই। ~বাইরের লুপ সংখ্যার উপর লুপ ভেতরের লুপ যার ফলে স্ট্রিং unquotes। সংখ্যাগুলি সমস্ত জায়গাগুলির জন্য বিটমাস্কগুলি যেখানে oএস আঁকতে হবে।


1

সি, 267 262 260 256 টি অক্ষর

গণনা 1 টি চরিত্র হিসাবে পালিয়ে যায়

void f(int i){char*k="\0\x1\x2\x3\x4\x4\x5\x6\x7\x8\0\x9\x12\x1b\x24\0\xa\x14\x1e\x28\x4\xc\x14\x1c\x2d\x4\xd\x16\x1f\x28\x4\xe\x18\x22\x2c\x8\x10\x18\x20\x28\x8\x11\x1a\x23\x2c\x24\x25\x26\x27\x28\x28\x29\x2a\x2b\x2c\x24\x2d\x36\x3f\x48\x24\x2e\x38\x42\x4c\x28\x30\x38\x40\x48\x28\x31\x3a\x43\x4c\x28\x31\x3a\x43\x4c\x28\x32\x3c\x46\x50\x2c\x35\x3e\x47\x50\x48\x49\x4a\x4b\x4c\x4c\x4d\x4e\x4f\x50";for(int n=0,s,l;n<81;!(++n%9)&&putchar(10))for(s=l=0;s<20;!(++l%5||++s^20)&&putchar(32))if(i<<s&1<<19&&k[l]==n&&putchar(111))break;}

কে হ'ল একটি অনুসন্ধান যা কোন বাক্সগুলিতে একটি 'ও' রাখতে হবে তা উল্লেখ করে।

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


1

বেফুঞ্জ, 468 বাইট

~:85+`!#v_86*-:9`7*-48*%\82**+
3%2:/2\<$v0%2:/2\*g02*!g03%2:/2\*!+4g07%2:/2\*g02*!-8g06%2:/2\*g02*!-4g0
g!*20g*^00>50g*\2/:2%00g8-!*40g*\2/:2%30g8-!*20g*\2/:2%60g66+-!*\2/:2%70
`\5:p00:<g^*!-8g00%2:\-10:\p07-g00:p06+g00:p05`3:p04`\5:p03:<0\p02`3:p01
#o 8`#@_^4>*50g*\2/2%00g!*40g*0\>:#<1#\+_$!1+4g,48*,\1+:8`!#^_55+,$\1+:
g03%2:/2<-^!g00%2:/2\*g01*!g03%2:/2\*g01*!g07%2:/2\*!-4g06%2:/2\*g01*!-4
70g4-!*\^>!*50g*\2/:2%00g4-!*40g*\2/:2%30g8-!*10g*\2/:2%60g8-!*10g*\2/:2%

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

প্রথম লাইনে হেক্সাডেসিমাল সংখ্যা হিসাবে মূল্যায়ন করে স্টিডিনের স্ট্রিং পড়ে reads বাকি কোডটি গ্রিডের x / y স্থানাঙ্কের উপর মূলত মাত্র একটি ডাবল লুপ, একটি বিশাল বুলিয়ান গণনা oযা প্রতিটি জায়গার জন্য আউটপুট হবে কিনা তা নির্ধারণ করে ।

মূলত ২০ টি গ্রিড পয়েন্টের জন্য পৃথক শর্ত রয়েছে, উদাহরণস্বরূপ (প্রথম চারটি):

(y==0) * (x<5) * bit0
(y==0) * (x>3) * bit1
(x==0) * (y<5) * bit2
(x==y) * (y<5) * bit3

এবং তারপরে একবার আমরা তাদের সমস্ত 20 টি গণনা করি, আমরা বা অনেকগুলি একসাথে করি এবং যদি ফলাফলটি সত্য হয়, আমরা একটি আউটপুট o , অন্যথায় আমরা একটি স্থান আউটপুট করব।

বিফঞ্জের বিট ম্যানিপুলেশন অপারেশনের পথে কিছু নেই, সুতরাং ইনপুট থেকে বিটগুলি বের করতে আমরা কেবল বারবার বিস্তৃত হয়েছি n%2এবং তারপরে n/=2আমরা 20 শর্ত গণনার মধ্য দিয়ে চলেছি ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.