ত্রিভুজ গণনাগুলির বাইনারি চিত্রগুলি


18

আমার চ্যালেঞ্জগুলি কিছুটা শক্ত এবং অপ্রকৃত হতে থাকে। তাই এখানে কিছু সহজ এবং মজাদার।

আলকুইনের ক্রম

অ্যালকুইনের ক্রমটি A(n) ত্রিভুজ গণনা দ্বারা সংজ্ঞায়িত করা হয়। A(n)পূর্ণসংখ্যার দিক এবং ঘেরের সাথে ত্রিভুজগুলির সংখ্যা n। এই সিক্যুয়েন্সকে ইয়র্কের আলকুইনের পরে ডাকা হয়।

এই অনুক্রমের প্রথম কয়েকটি উপাদান, এর সাথে শুরু করে n = 0:

0, 0, 0, 1, 0, 1, 1, 2, 1, 3, 2, 4, 3, 5, 4, 7, 5, 8, 7, 10, 8, ...

উদাহরণ হিসেবে বলা যায় A(9) = 3, কারণ পূর্ণসংখ্যা পক্ষের এবং ঘের একমাত্র ত্রিভুজ 9হয় 1 - 4 - 4, 3 - 3 - 3এবং 2 - 3 - 4। নীচে 3 টি বৈধ ত্রিভুজ দেখতে পাবেন।

পূর্ণসংখ্যার দিক এবং ঘের 9 সহ ত্রিভুজ

এই অনুক্রমের মধ্যে বেশ কিছু আকর্ষণীয় প্যাটার্ন রয়েছে। উদাহরণস্বরূপ A(2*k) = A(2*k - 3)

আরও তথ্যের জন্য, ওইআইএসে A005044 দেখুন ।

চ্যালেঞ্জ

তবে আপনার চ্যালেঞ্জ এই সংখ্যার বাইনারি উপস্থাপনা সম্পর্কে। আমরা যদি প্রতিটি অনুক্রমের নম্বরটিকে বাইনারি উপস্থাপনায় রূপান্তর করি, তাদের কলাম ভেক্টরগুলিতে রাখি এবং তাদের সারি রাখি, এটি বেশ আকর্ষণীয় বাইনারি চিত্র তৈরি করে।

নীচের ছবিতে আপনি ক্রম সংখ্যাগুলির বাইনারি উপস্থাপনা দেখতে পারেন A(0), A(1), ..., A(149)। প্রথম কলামে আপনি বাইনারি উপস্থাপনা দেখতে পারবেন A(1), দ্বিতীয় কলামে উপস্থাপনা A(1)ইত্যাদি।

এন = 0 থেকে 149 পর্যন্ত অ্যালকুইনের ক্রম বাইনারি উপস্থাপনা

আপনি এই ছবিতে কিছু ধরণের পুনরাবৃত্তি প্যাটার্ন দেখতে পারেন। এমনকি ভঙ্গুরগুলির মতো এটিও দেখতে খুব সুন্দর, যদি আপনি ছবিটির সিক্যুয়েন্স নম্বর সহ সন্ধান করেন A(600), A(601), ..., A(899)

এন = 600 থেকে 899 পর্যন্ত অ্যালকুইনের ক্রমটির বাইনারি উপস্থাপনা

আপনার কাজ হ'ল এই জাতীয় চিত্র তৈরি করা। আপনার ফাংশন, আপনার স্ক্রিপ্টটি দুটি পূর্ণসংখ্যা গ্রহণ করবে 0 <= m < nএবং এটি আলকুইনের ক্রমের বাইনারি চিত্র উত্পন্ন করতে হবে A(m), A(m+1), A(m+2), ..., A(n-2), A(n-1)। সুতরাং ইনপুটটি 0, 150প্রথম চিত্র উত্পন্ন করে, 600, 900দ্বিতীয় চিত্রটি ইনপুট দেয়।

আপনি যে কোনও জনপ্রিয় গ্রাফিক্স ফর্ম্যাটটি ব্যবহার করতে পারেন। আসুন যে বিন্যাসে ব্যবহার png রূপান্তরিত করা যেতে পারে বলে image.online-convert.com । বিকল্পভাবে, আপনি স্ক্রিনে চিত্রটি প্রদর্শন করতে পারেন। কোন নেতৃস্থানীয় সাদা সারি অনুমোদিত নয়!

এটি কোড-গল্ফ। তাই সংক্ষিপ্ততম কোডটি (বাইটে) জিতে যায়।


3
এহ, আমি বাইনারি ইমেজ তৈরির বিষয়ে অংশ না পাওয়া পর্যন্ত আমি এই চ্যালেঞ্জটি করতে আগ্রহী ছিলাম। মনে হচ্ছে এটি বহিরাগত পদক্ষেপের মতো। পাইথনে ছবি তৈরির জন্য একটি গ্রন্থাগার শেখার মতো মনে হয় না এবং আমি আশা করি যে আমি যদি এটি করি তবে গল্ফের পক্ষে খুব বেশি কিছু হবে না।
xnor

1
@ এক্সনোর: তারপরে পিবিএম এর মতো কিছু সাধারণ চিত্র বিন্যাস ব্যবহার করুন ।
জাকুবে

এটা white=1 and black=0নাকি অন্য পথে?
মালটিসেন

@Maltysen white=0 and black=1। অন্যভাবে। A(0)একটি সাদা কলাম A(9)=3তৈরি করে, নীচে 2 কালো পিক্সেল সহ একটি সাদা কলাম তৈরি করে।
জাকুবে

1
আপনি কি নিশ্চিত যে প্রথম চিত্রটি সঠিক? এটা আছে 0,0,0,1,0,2যখন প্রশ্ন শুরুতে তালিকা বলছেন 0,0,0,1,0,1
মালটিসেন

উত্তর:


2

জে ( 52 45 (কোডপেজ 437))

এটি অনুমোদিত হবে (আমার মনে হয়)

[:|:' █'{~[:#:[:([:<.48%~*:+24+6*]*2|])(}.i.)

হেক্স ডাম্প

(সত্যিই বিশেষ কিছু নয়, কালো বর্গাকার কোডেপ 437 এ ডিবি 16 বা 219 10 )

0000: 5b 3a 7c 3a 27 20 db 27 7b 7e 5b 3a 23 3a 5b 3a   [:|:' .'{~[:#:[:
0010: 28 5b 3a 3c 2e 34 38 25 7e 2a 3a 2b 32 34 2b 36   ([:<.48%~*:+24+6
0020: 2a 5d 2a 32 7c 5d 29 28 7d 2e 69 2e 29            *]*2|])(}.i.)

ব্যবহার

এই আউটপুটগুলি নীচে দেওয়া হয়েছে (কোড ট্যাগগুলি লাইনগুলির মধ্যে স্পেস যোগ করে এটি বিচলিত করে):

   A=:[:|:' █'{~[:#:[:([:<.48%~*:+24+6*]*2|])(}.i.)
   0 A 100
                                                                             █ █████████████████████                                          
                                                     █ ██████████████████████ █              █ █████                          
                                     █ ██████████████ █          █ ██████████ █      █ ██████ █                   
                         █ ██████████ █      █ ██████ █    █ ████ █    █ ████ █  █ ██ █  █ ██ █  █ █  
                 █ ██████ █    █ ████ █  █ ██ █  █ ██ █  █  █  █  █  █  ██ ██ ██  ██  ██  ██  ██  ██
           █ ████ █  █ ██ █  █  █  █  ██  ██  ██  ██  ██  █  █  █  █ ██ █  █ ████ █                               
       █ ██ █  █  ██  ██  ██  █  █ ██ █                █ ██ █  █  ██  ██  ██  █  █ ██ █                                   
   █ ██ ██  ██ ██ █        █ ██ ██  ██ ██ █        █ ██ ██  ██ ██ █        █ ██ ██  ██ ██ █        █    
   2000 A 2100
████████████████████████████████████████████████████████████████████████████████████████████████████

████████████████████████████████████████████████████████████████████████████████████████████████████
                                                                             █ █████████████████████
                             █ ██████████████████████████████████████████████ █
     █ ██████████████████████ █                      █ ██████████████████████ █
█████ █          █ ██████████ █          █ ██████████ █          █ ██████████ █          █ █████████
 ████ █    █ ████ █    █ ████ █    █ ████ █    █ ████ █    █ ████ █    █ ████ █    █ ████ █    █ ███
█  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █
██  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █ ██ ██ █
 █ ██ ██ ██ ██ ██ █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  █  ██ ██ ██ ██ ██  █  █
  ██ ██ ██  █  █  ██ ██ ██  █  █  █  █  █  █  █  █  █  █  █  █  █  █ ██ ██ ██ █  █  █  █ ██ █  █ ██
 █ ██ █  █ ██ █  █ ██ █  █ ██ █  █  █  █  █  █  █  █  █  █  ██ ██ ██  █  █  ██  ██ ██ ██  ██  ██  ██
  ██  ██  ██  ██  ██  ██  ██  ██ ██ ██  █  █  █  █  █  █ ██ █  █ ██ █  █ ████ █    █ ██████ █
█ █                        █ ████ █  █ ██ █  █  █  █  ██  ██  ██  ██  ██  █  █  █  █ ██ █  █ ████ █
 █ ██ █                █ ██ █  █  ██  ██  ██  █  █ ██ █                █ ██ █  █  ██  ██  ██  █  █ █
██  ██ ██ █        █ ██ ██  ██ ██ █        █ ██ ██  ██ ██ █        █ ██ ██  ██ ██ █        █ ██ ██

স্ট্যান্ডার্ড জে কনসোলে লাইনগুলির মধ্যে কোনও ব্যবধান নেই, তাই আমি এই নিয়মটিকে কল করি 'বিকল্পভাবে, আপনি চিত্রটি পর্দায় প্রদর্শিত করতে পারেন call' (কোথাও কোথাও বলা হয়নি যে এই চিত্রটি অভ্যন্তরীণভাবে একটি বুদ্ধিমান চিত্রের ফর্ম্যাট হিসাবে উপস্থাপন করতে হবে)

সম্পাদনা করুন: জকনসোল (জেকিউটির বিপরীতে) কোডডেজ 437 ডিফল্ট হিসাবে ব্যবহার করে এবং কোনও স্ট্রিং থেকে যখন ব্যবহার করে আয়তক্ষেত্রগুলি সঠিকভাবে রেন্ডার করে।


9

গণিত, 126 122 121 89 বাইট

Image[1-Thread@IntegerDigits[l=Round[(#+3#~Mod~2)^2/48]&/@Range@##,2,⌈2~Log~Max@l⌉]]&

এটি দুটি নাম্বারকে পরামিতি হিসাবে গ্রহণ করে এবং স্ক্রিনে চিত্রটি প্রদর্শন করে এমন একটি নামহীন ফাংশন সংজ্ঞায়িত করে। এটি প্রতিটি বর্গক্ষেত্রকে একক পিক্সেল হিসাবে প্লট করে তবে আপনি যদি পছন্দ করেন তবে আপনি আসলে জুম ইন করতে পারেন।

আমি এখন ওইআইএস নিবন্ধে প্রদত্ত একটি সুস্পষ্ট সূত্র ব্যবহার করছি (ম্যাথামেটিকা ​​বিভাগের প্রথমটি, এটি নির্দেশ করার জন্য ডেভিড ক্যারাহারকে ধন্যবাদ)। এটি এখন নির্লজ্জভাবে দ্রুত।

এখানে কয়েকটি মন্তব্য সহ ইনডেন্ট কোডটি দেওয়া হয়েছে:

Image[1-Thread@IntegerDigits[   (* 3. Convert each number to padded binary, transpose
                                      invert colours, and render as Image. *)
    l = Round[
      (#+3#~Mod~2)^2/48
    ] & /@ Range@##,            (* 1. Turn input into a range and get the Alcuin
                                      number for each element. *)
    2,
    ⌈2~Log~Max@l⌉               (* 2. Determine the maximum number of binary digits. *)
]] &

এখানে ফলাফল 0, 600:

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


প্রায় একই আকারের (কারণ বাম এবং ডান সিলিং অবশ্যই বানান করতে হবে):Image[1 - Thread@IntegerDigits[ l = Round[If[EvenQ[#], #^2, (# + 3)^2]/48] & /@ Range@##, 2, \[LeftCeiling]2~Log~Max@l\[RightCeiling]]] &
ডেভিডসি

@ ডেভিডকারারহর ধন্যবাদ, আমি এটি আরও কিছুটা গল্ফ করেছিলাম। :) (ওইআইএস নিবন্ধটি পরীক্ষা করা উচিত ছিল))
মার্টিন এন্ডার

8

সিজেম ( 56 55 53 টি) / গল্ফস্ক্রিপ্ট (64৪ অক্ষর)

CJam:

"P1"q~,>{_1&3*+_*24+48/}%_:e>2b,\2_$#f+2fbz(,@@:~~]N*

GolfScript:

"P1"\~,>{.1&3*+.*24+48/}%.$-1=2base,\{2.$?+2base}%zip(,@@{~}/]n*

উভয়ই নেটপবিএম ফর্ম্যাটে আউটপুট উত্পাদন করে এবং তারা মূলত একে অপরের বন্দর।

ব্যবচ্ছেদ

CJam                 GolfScript           Explanation

"P1"                 "P1"\                NetPBM header
q~,>                 ~,>                  Create array [m .. n-1]
{_1&3*+_*24+48/}%    {.1&3*+.*24+48/}%    Map the sequence calculation
_:e>2b,\             .$-1=2base,\         Compute image height H as highest bit
                                          in largest number in sequence
2_$#f+2fb            {2.$?+2base}%        Map sequence to bits, ensuring that
                                          each gives H bits by adding 2^H
z(,@@                zip(,@@              Transpose and pull off dummy row to use
                                          its length as the "width" in the header
:~~                  {~}/                 Flatten double array and dump on stack
]N*                  ]n*                  Separate everything with whitespace

সিজেএম 56 -> 53 এর জন্য অপ্টিমাইজারকে ধন্যবাদ ।


1
শুরুতে আপনার কাছে "পি 1" না থাকার কোনও কারণ নেই এবং এভাবে by `এড়িয়ে 1 বাইট সংরক্ষণ করবেন?
অপ্টিমাইজার

@ অপ্টিমাইজার, জিএস-তে চিন্তা করতে অভ্যস্ত।
পিটার টেলর

বেশ নয়: আউটপুটে উচ্চতাটি উপস্থিত হওয়া দরকার। তবে মানচিত্রটি সংক্ষিপ্ত করে তৈরি করার জন্য এখনও একটি সঞ্চয় রয়েছে।
পিটার টেলর

51:'PoXq~{_1&3*+_*24+48/}%>_:e>2b,\2_$#f+2fbz(,@@]e_N*
অপ্টিমাইজার

5

পাইথ - 101 60 59

ফলাফল আ .pbm। সম্ভবত আরও গল্ফ করা যেতে পারে।

Km.B/++24*dd**6%d2d48rvzQJCm+*\0-eSmlkKlddK"P1"lhJlJjbmjbdJ

উচ্চ নিরপেক্ষ কারণ আমি পাইথ অনুবাদ করব।

ব্যাখ্যা আসছে। এখনই সমতুল্য পাইথন কোডটি দেখুন।

এটি ক্রম গণনা করতে OEIS অ্যালগরিদম ব্যবহার করে এবং তারপর এটি বাইনারি রূপান্তরিত করে, সংখ্যাগুলিকে প্যাড করে, একটি ম্যাট্রিক্স আবর্তন করে এবং এটিকে একটি pbmচিত্রে ফর্ম্যাট করে । যেহেতু আমি নিষ্ঠুর শক্তি ব্যবহার করছি না, এটি অবিশ্বাস্যভাবে দ্রুত।

         K=
 m          rvzQ      Map from eval input to eval input
  .B                  Binary rep
   /      48          Divided by 48
    ++                Triple sum      
     24               Of 24,
     *dd              Square of d
     **               Triple product
      6               6
      %d2             Modulo d%2
      d               Var d
J                     Set J=
 C                    Matrix rotation from columns of row to rows of columns
  m           K       Map K (This does padding)
   +                  String concat
    *                 String repeat
     \0               "0"
     -     ld         Subtract the length of the column from
      eS              The max
       mlkK           Of all the column lengths
    d                 The column
"P1"                  Print header "P1"
l                     Length of
 hJ                   First row
lJ                    Number of columns
jb                    Join by linebreaks
 m  J                 Map on to J
  jb                  Joined columns by linb
   d

এখানে 600,900উদাহরণ:

600 - 900

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


4

আর - 127 125

আমি নিশ্চিত নই যে এটি পুরোপুরি নিয়ম মেনে চলে কিনা। এটি কোনও ছবিতে কোনও চিত্র আউটপুট দেয় না, তবে এটি একটি রাস্টার তৈরি করে এবং আউটপুট ডিভাইসে প্লট করে।

আমি মার্টিনের মতো একই সূত্রটি পেয়েছি তবে এখানে

এটি একটি নামহীন ফাংশন ব্যবহার করে।

require(raster);function(m,n)plot(raster(mapply(function(n)rev(as.integer(intToBits(round((n+n%%2*3)^2/48)))),m:n),0,n,0,32))

নিম্নলিখিত হিসাবে চালান

require(raster);(function(m,n)plot(raster(mapply(function(n)rev(as.integer(intToBits(round((n+n%%2*3)^2/48)))),m:n),0,n,0,32)))(0,600)

নিম্নলিখিত প্লট উত্পাদন করে

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


rasterনেমস্পেসের সাথে সংযুক্ত না করে আপনি 7 বাইট ফেলে দিতে পারেন , যেহেতু raster()সেই প্যাকেজটির জন্য নির্দিষ্ট কেবলমাত্র সেখানে। পরিবর্তে শুধু না raster::raster(...)
অ্যালেক্স এ।

@AlexA। ধন্যবাদ, সম্পাদনাটি করবেন
মিকিটি

@AlexA। দুর্ভাগ্যক্রমে আমি এটি চেষ্টা করেছিলাম এবং এটি আমার জন্য ত্রুটিযুক্ত হয়েছিল। আমি সন্দেহ করি যে এটি কারণ রাস্টার এছাড়াও এসপি প্রয়োজন। আমি এটি ট্র্যাক করতে পারি কিনা তা দেখতে পাব।
মিকিটি

হতাশাজনক। আপনাকে ভুল পথে চালিত করার জন্য দুঃখিত।
অ্যালেক্স এ।

3

পাইথন 2 + পিআইএল , 255 184

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

i,R,B=input,range,lambda x:bin((x*x+6*x*(x%2)+24)/48)[2:]
def F(k,v):i.load()[k]=v
a,b=i(),i();h=len(B(b));from PIL import Image;i=Image.new('P',(b-a,h))
[F((x-a,y),int(B(x).zfill(h)[y])) for x in R(a,b) for y in R(h)]
i.putpalette([255]*3+[0]*3)
i.show()

নতুন সংস্করণটি স্টাডাউটে সবেমাত্র বি-ডাব্লু ডব্লু পিএমএম চিত্র তৈরি করে:

i,R,B=input,range,lambda x:bin((x*x+6*x*(x%2)+24)/48)[2:]
def p(s):print s
a,b=i(),i();h=len(B(b));p('P1 %i %i'%(b-a,h))
[p(' '.join([B(x).zfill(h)[y] for x in R(a,b)])) for y in R(h)]

কিছু অক্ষর পিপিএম সংস্করণের জন্য সংরক্ষণ করে: আপনার আগে কোনও স্থানের দরকার নেই forx%2অর্ডার পরিবর্তন করে আপনি পেরেনকে এড়িয়ে যেতে পারেন x%2*...। মুদ্রণটিকে একটি ফাংশন হিসাবে সংজ্ঞায়িত না করা এবং নতুন লাইন এড়ানোর জন্য নতুন লাইন এবং ফাঁকা ফাঁকা forব্যবহার করে কেবল দুটি নেস্টেড লুপ ব্যবহার print ...,করা সংক্ষিপ্ত print। বাইনারি সম্প্রসারণ hছাড়াই দৈর্ঘ্য থাকতে বাধ্য করার একটি কৌশল zfillযুক্ত করা হয় 2**h, তারপরে শেষ hসংখ্যাগুলি বের করুন ।
xnor

2

জাভাস্ক্রিপ্ট - 291

কোড:

(function(a,b,c){c.width=b;t=c.getContext('2d');t.strokeStyle='black';for(i=a;i<=b;i++){g=(Math.floor(((i*i)+6*i*(i%2)+24)/48)>>>0).toString(2);l=g.length;for(j=0;j<l;j++){if(g[l-1-j]=='1'){t.rect(i-a,j,1,1);t.fill();}}}document.body.appendChild(c);})(0,300,document.createElement('canvas'))

ব্যাখ্যা:

(function (a, b, c) {
    //setting canvas width
    c.width = b;
    //get context 2d of canvas
    t = c.getContext('2d');
    //setting storke style.
    t.strokeStyle = 'black';
    //looping from a to b
    for (i = a; i <= b; i++) {
        //calculating A(i) and converting it to a binary string
        g = (Math.floor(((i * i) + 6 * i * (i % 2) + 24) / 48) >>> 0).toString(2);
        //looping through that string
        for (j = 0; j < g.length; j++) {
            //since canvas is upside down and the first digit is actually the last digit:
            if (g[g.length - 1 - j] == '1') {
                //we create the 1 by 1 rect
                t.rect(i - a, j, 1, 1);
                //we draw the rect
                t.fill();
            }
        }
    }
    //we append everything to the body
    document.body.appendChild(c);
    //parameters are put here
})(0, 300, document.createElement('canvas'))

ফলাফল:

হ্যাঁ ফলাফলের উলটাইয়া, কিন্তু কারণ যে 0,0একটি উপর js canvasশীর্ষ ছেড়ে দেওয়া হয়। : 3 আলকুইনের ক্রম

ডেমো:

জেসফিডেলে ডেমো

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