এই পরিবর্তিত বৃত্ত দিয়ে বিমানটি টাইল করুন


22

উত্সকে কেন্দ্র করে একটি ইউনিট বৃত্ত নিন। যে কোনও দুটি প্রতিবেশী চতুষ্কোণে , বৃত্তের এক্স এবং ওয়াই ইন্টারসেপ্টকে সংযুক্ত করে রেখাগুলি জুড়ে বৃত্তের বক্ররেখা আয়না করুন।

ফলস্বরূপ আকারের সাহায্যে, আপনি বিমানটি টাইল করতে পারেন:

বৃত্ত টেস্টেলেশন

আমি দুর্দান্ত ছবিটি 2 ডি পদার্থবিজ্ঞানের স্যান্ডবক্স আলগোডো দিয়ে তৈরি করেছি !

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

নিয়মাবলী:

  • সমগ্র উল্লম্বভাবে ইশারা টাইলস, অনুভূমিকভাবে ইশারা টাইলস জন্য এক এক: চিত্র কোন দুটি দৃশ্যত স্বতন্ত্র আরজিবি রং ব্যবহার রুপান্তরিত-বৃত্ত টাইলস সঙ্গে চৌখুপী অংকিত করা আবশ্যক।

  • বৃত্ত টাইলসের ব্যাসার্ধ কমপক্ষে 32 পিক্সেল হওয়া উচিত। (উপরের চিত্রের ব্যাসার্ধটি প্রায় 110 পিক্সেল)

  • চিত্রটি কমপক্ষে 4 টি টাইল প্রশস্ত এবং 4 টি টাইল লম্বা হওয়া উচিত। এটি, উপরের নিয়মের সাথে একত্রিত হওয়ার অর্থ হল যে চিত্রগুলির সর্বনিম্ন আকার 256 × 256 পিক্সেল থাকতে পারে। (উপরের চিত্রটি 4 টাইল বাই 4 টাইল)

  • পরীক্ষার যেকোন পরিমাণে অনুবাদ করা যেতে পারে। উদাহরণস্বরূপ, চিত্রের উপরের বাম কোণটি টাইলসের সাথে মিলিত হওয়ার প্রান্তিকের হওয়ার দরকার নেই। (তবে পরীক্ষাটি ঘোরানো উচিত নয়))

  • আপনি বহিরাগত গ্রাফিক্স লাইব্রেরি ব্যবহার করতে পারেন যা চেনাশোনাগুলি আঁকার এবং চিত্রগুলি এবং আউটপুট করার জন্য কমান্ড রয়েছে।

  • মিডপয়েন্ট সার্কেল অ্যালগরিদম দিয়ে সম্পন্ন কর্কগুলি সত্যই আনুমানিক চেনাশোনাগুলি করা উচিত , যা বেশিরভাগ গ্রাফিক্স লাইব্রেরি আপনার জন্য করবে।

  • টাইলসের প্রান্তের চারদিকে অ্যান্টি-এলিয়জিং অনুমোদিত তবে প্রয়োজনীয় নয়।

বাইটস মধ্যে সংক্ষিপ্ততম জমা জয়।

উত্তর:


4

জিএস 2, 49 বাইট

50 31 05 0d 1f 2a 48 0a 1e 2e 40 83 2c e8 64 2d
1e 73 ed 1e 33 40 20 30 9a a2 22 e8 e9 40 20 30
9a 30 40 20 30 ee 40 20 30 12 32 e9 12 32 55 e8
2b

একটি পিবিএম চিত্র উত্পন্ন করে:

আউটপুট

স্মৃতিবর্ধনবিদ্যা:

# Print header
"P1" space 256 double
2dup new-line

# Make 1/4 circle
64 range dup cartesian-product
square m1 sum sqrt 64 >= m6
64 /

# Make tile
dup reverse + transpose
@2 not m1 m2
dup reverse + transpose
+

# Make quarter of image
dup reverse + z1
dup reverse +

# Loop
2 * m2
2 *

# Format
show-words m1
unlines

36

পিওভ-রে, 1993 163

Old version
camera{location -9*z}light_source{-9*z}#declare L=union{#for(X,-9,9,2)#for(Y,-9,9,2)cylinder{X*x+x+Y*y,<.001*pow(-1,(X+Y)/2),0,.1>+X*x+x+Y*y,1}#end#end}object{L pigment{color x}}object{L rotate z*90}

Same output, but golfed down further by using default light/camera, so I dont even need to specify them
#declare L=union{#for(X,-9,9,2)#for(Y,-9,9,2)cylinder{<X+1,Y,9>,<.001*pow(-1,(X+Y)/2),0,.1>+<X+1,Y,9>,1}#end#end}object{L pigment{color rgb x}rotate z*90}object{L}

এখানে চিত্র বর্ণনা লিখুন
আমি যতটা সম্ভব অন্ধকার কেন ক্যামেরা এবং লাইটসোর্সের জন্য অনেকগুলি ডিফল্ট প্যারামিটার ব্যবহার করছি। প্রথমে উনলগলফকে দেয়

camera{location 9*z look_at 0}
light_source{9*z color 1} 
#declare L=union{
    #for(X,-9,9,2)
        #for(Y,-9,9,2)
            cylinder{<1+X,Y,0>,                                 //central axis, start
                     <1+X,Y,0> + <.001*pow(-1,(X+Y)/2), 0, .1>, //central axis, end
                      1}                                        //radius
        #end         
    #end
}                         
object{L pigment{color x}} // x is the <1,0,0> vector, here interpreted as RGB
object{L rotate<0,0,90>}

সিলিন্ডার অক্ষের অফসেটটি বাড়ানো এবং দৃষ্টিকোণ পরিবর্তন করার পরে এটি ঘটছে তা স্পষ্ট

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


1
3 ডি দৃষ্টিকোণের জন্য কি প্রান্তগুলি সামান্য বিকৃত হবে না?
orlp

6
উচ্চতার সাথে 0.1এবং 0.001ডিস্কের অফসেটটি $ \ phi = \ আর্টিকান (0.01) = 0.57 $ by দ্বারা কাত করা হয়, উপরের দিকে তাকিয়ে ডিস্কগুলি $ \ কোস (\ ফাই) = 0.99995 of এর একটি ফ্যাক্টর দ্বারা আটকানো প্রদর্শিত হয়, পিক্সেলের চেয়ে অনেক কম।
ডেনডেনডো

@ ডেনডেনডো কি পভ-রে অনন্তর ক্যামেরা রাখতে সক্ষম নন?
এলোমেলো 832

@ Random832 এটা দিয়ে করতে পারেন, camera{orthographic location -9z}। তবে দৃশ্যটি মূলত 2 ডি হওয়ায় এটি কোনও পার্থক্য angle 170করে না, ফলস্বরূপ আপনি কোনও ফিশিয়ে বিকৃতি ছাড়াই এটি দেখার সাথে রেন্ডার করতে পারেন ।
ডেনডেনডো

11

Gnuplot, 182

আমি লক্ষ করেছি যে কোষগুলির মধ্যে সীমানাগুলি খুব সাইনোসয়েডাল দেখাচ্ছে, তাই আমি একটি খুব সাধারণ মূল সমীকরণ নিয়ে বিশ্লেষণাত্মক সমাধানের জন্য গেলাম
এখানে চিত্র বর্ণনা লিখুন

set view map
set isosamples 900
f(x,y)=.3*sin(x*3.14)+y
splot(ceil(f(x,y))+ceil(f(y,x)))%2?1:NaN   #can only modulo integers

এখানে চিত্র বর্ণনা লিখুন
এটি দেখতে দেখতে একইরকম, চেনাশোনাগুলি খুব চতুর। একই ধারণাটির সাথে, আমি sinকনক্রিটেটেড কোয়ার্টার সার্কেল-আরাকস থেকে তৈরি একটি বক্ররেখা প্রতিস্থাপন করি এবং এটি 45 ° প্রতিস্থাপন করে xএবং এর yসাথে x+yএবংx-y

set view map
set samples 800
set isosamples 800
d=.5**.5
c(x,k)=(-1)**k*sqrt(1-(x-d*(1+2*k))**2)-(-1)**k*d  # k-th circle arc
# s(x)=c(x,floor(x/d/2))                           # circlified sinus
# f(x,y)=d*s(x/d)+y
f(x,y)=d*c(x/d,floor(x))+y                         # combined commented functions
splot(ceil(f(x+y,x-y))+ceil(f(x-y,x+y)))%2?1:NaN

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


9

কনটেক্সট ফ্রি, 99 বাইট

startshape d CF::Tile=[s 4]CF::Symmetry=CF::pmg,0,1,0path d{ARCTO(-1,1,1)ARCTO(1,1,-1)ARCTO(0,0,1)}

আপনি প্রসঙ্গটি ফ্রি গ্যালারী এ ফলাফল দেখতে পারেন ।


দুর্দান্ত এক, এটি কনটেক্সট ফ্রি একটি আশ্চর্যজনক ব্যবহার। :)
মার্টিন ইন্ডার

7

এইচটিএমএল + জাভাস্ক্রিপ্ট, 277

<canvas id=C></canvas><script>r=50,C.width=C.height=9*r,T=C.getContext('2d');
for(f=1,P=Math.PI,i=0;i<45;f=-f,i+=i&7?1:2)x=2*r*(i%8-2),y=2*r*(i>>3),T.moveTo(x,y+f*r),
T.arc(x+r,y+f*r,r,P,-f*P/2,f<0),T.arc(x,y,r,0,P,f>0),T.arc(x-r,y+f*r,r,-f*P/2,0,f<0);
T.fill()</script>

পরীক্ষা করতে, এইচটিএমএল ফাইল হিসাবে সংরক্ষণ করুন এবং একটি ব্রাউজার দিয়ে খুলুন। অন্যথায়, স্নিপেট চালান

r=50,C.width=C.height=9*r,T=C.getContext('2d')
for(f=1,P=Math.PI,i=0;i<45;f=-f,i+=i&7?1:2)
  x=2*r*(i%8-2),y=2*r*(i>>3),
  T.moveTo(x,y+f*r),
  T.arc(x+r,y+f*r,r,P,-f*P/2,f<0),
  T.arc(x,y,r,0,P,f>0),
  T.arc(x-r,y+f*r,r,-f*P/2,0,f<0)
T.fill()
<canvas id=C></canvas>

জনপ্রিয় চাহিদার কারণে, এখানে আউটপুট চিত্র। সর্বোপরি এত উত্তেজনাপূর্ণ নয় ...

টাইলস


1
আপনি কোনও চিত্র পোস্ট করতে চাইতে পারেন যাতে প্রতিবার কেউ আউটপুট দেখতে চাইলে কোডটি চালাতে হয় না।
ক্যালভিনের

@ ক্যালভিনের শখগুলি ওহ ভাল এটি যথেষ্ট দ্রুত এবং প্রতিটি আধুনিক ব্রাউজারে চলছে। পরিবর্তে আমি চিত্রটি আরও বড় করব
edc65

সেটা সত্য. আমি ভেবেছিলাম এটি =>আপনার অনেক পোস্টের মতো ব্যবহার করেছে এবং এটি কেবল ফায়ারফক্সে কাজ করবে। তবে কোনও উদ্বেগ নেই।
ক্যালভিনের

1
একটি ছবি পোস্ট করার সর্বোত্তম কারণ: এই স্নিপেটগুলি মোবাইলে খুব বেশি ভাল কাজ করে না :(
স্প 3000

6

আইডিএল 8.3, 201 193 183 বাইট

চিত্রটি একটি আইডিএল গ্রাফিক্স উইন্ডোতে আউটপুট; আমি নীচে একটি স্ক্রিনশট নিয়েছি।

সম্পাদনা: @ অ্যালেক্সা ধন্যবাদ। এবং আমাকে কিছু বাইট শেভ করতে সহায়তার জন্য @ Sp3000

p=!pi/99*[0:99]
q=p[49:0:-1]
o=p[99:50:-1]
window,xs=(ys=400)
for i=0,24 do cgpolygon,i mod 5*100+50*[cos(p),cos(q)-1,cos(o)+1],i/5*100+(-1)^i*50*[sin(p),sin(q)-1,sin(o)-1],/d,/fi
end

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


6

গণিত: 86 বাইট (বা 82 বাইট)

চতুর অ্যারে-ভিত্তিক পদ্ধতির জন্য অসীম @ এল্যাফালফাকে ধন্যবাদ :

Image@ArrayFlatten@Array[DiskMatrix@32~RotateLeft~32/.a_/;OddQ@+##:>1-Thread@a&,{5,5}]

অ্যারের অভ্যন্তরে একটি বেনামি ফাংশন রয়েছে যা এর যুক্তিগুলি যুক্ত করতে ( +##) যোগ করতে এবং যোগফলটি বিজোড় কিনা তা নির্ধারণ করতে একটি চৌকস কৌশল ব্যবহার করে । সেই বুলিয়ান শর্তসাপেক্ষ হিসাবে এমন একটি প্যাটার্নে ব্যবহৃত হয় যা পুরো 'সাদা' টাইলকে পরিবর্তিত, 'কালো' টাইলের সাথে প্রতিস্থাপন করে। সেখান থেকে, ArrayFlattenটাইলস একসাথে যোগদান করে এবং Imageতাদের প্রদর্শন করে।

সংক্ষিপ্ত ব্যবহার Threadপ্রতিস্থাপনের জন্য নোট করুন Transpose। পরিবর্তে ট্রান্সপোজ চিহ্ন ব্যবহার করে আমরা 4 বাইট সংরক্ষণ করতে পারি।

পূর্ববর্তী: 97 বাইট (বা 90 বাইট)

Image@ArrayFlatten@Partition[
 Join@@Table[{#,1-Transpose@#}&@RotateLeft[DiskMatrix@32,32],{13}],5]

Transpose@#সুপারস্ক্রিপ্ট-টি প্রতীক (কোডপয়েন্ট ইউ + এফ 3 সি 7, শর্টকাট ESCtrESC) দিয়ে প্রতিস্থাপন করে আপনি বাইটের সংখ্যা হ্রাস করতে পারেন । ইউটিএফ -8 এ এটি 88 টি অক্ষরে 90 টি বাইট নিয়ে আসে ।

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

আমরা শুরু করি DiskMatrix, যা বাইনারি ম্যাট্রিক্স উত্পন্ন করে:

DiskMatrix@32 // Image

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

তারপরে টাইলিংয়ের জন্য ইউনিট সেল তৈরি করতে আমরা ম্যাট্রিক্সের সারিগুলিকে বিজ্ঞপ্তি-শিফট করি:

RotateLeft[DiskMatrix@32, 32] // Image

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

প্লেনটি যদি দাবা বোর্ড হয় তবে এগুলি হল 'সাদা' স্কোয়ার। 'কালো' স্কোয়ারগুলির জন্য, আমাদের রঙগুলি উল্টাতে হবে এবং 90 ডিগ্রি ঘোরানো দরকার। আমরা 1 ( 1 - 1 -> 0এবং 1 - 0 -> 1) থেকে বিয়োগ করে বিপরীত করতে পারি এবং ট্রান্সপোজ নিয়ে ঘোরান:

Image /@ {#, 1 - Transpose@#} &@RotateLeft[DiskMatrix@32, 32]

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

যদি চিত্রটির মাত্রাগুলি সমান হয় (সর্বনিম্ন আকারের মতো, 4), তবে ডান প্রান্তে একটি টাইল বাম প্রান্তের পরেরটির মতো হবে। তবে, বিজোড় আকার পেতে একটি টাইল যুক্ত করা (5) তারপরে সারিগুলিকে সংযুক্ত করে একটি নিয়মিত বিকল্প বিন্যাস তৈরি করে।

এটি পরামর্শ দেয় যে আমরা বিকল্প টাইলগুলির একক সারিতে মোড়ক দিয়ে পুরো চিত্রটি পেতে পারি Partition। আমরা কালো / সাদা টাইল জোড়গুলির একটি তালিকা তৈরি করতে এবং 26 টি টাইলের তালিকায় জোড়ের তালিকাটি সমতল Tableকরতে ব্যবহার করি । তারপর আমরা একটি মধ্যে তালিকা দ্বারা টাইলস ম্যাট্রিক্স ( পরিত্যাগ trailing 26 তম টালি):13JoinPartition55Partition

Map[Image] /@ 
  Partition[
   Join @@ Table[{#, 1 - #\[Transpose]} &@
      RotateLeft[DiskMatrix@32, 32], {13}], 5] // MatrixForm

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

অবশেষে ArrayFlattenটাইলের ম্যাট্রিক্সের ম্যাট্রিক্সকে ফ্ল্যাট ম্যাট্রিক্সে পরিণত Imageকরে এবং ফলাফলটি প্রদর্শন করে।

পূর্ববর্তী: 111 বাইট

Image[ArrayFlatten[{{#, #}, {#, #}}] &[
  Join[#, Reverse@#, 2] &[
   Join[1 - Transpose@#, #] &@RotateLeft[DiskMatrix[32], 32]]]]

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


Image@ArrayFlatten@Array[RotateLeft[DiskMatrix@32,32]/.a_/;OddQ[+##]:>1-Thread@a&,{5,5}]
আলেফাল্ফ 12'15

4

জাভা, 550 540 508 504 বাইট

এটি একটি জাভা অ্যাপলেট।

import java.awt.*;public class T extends java.applet.Applet{int a=98,b=49,x,y;public void paint(Graphics g){for(x=0;x<5;x++)for(y=0;y<5;y++)a(g.create(x*a,y*a,a,a),x%2^y%2);}void a(Graphics g,int c){if(c>0){g.translate(a,0);((Graphics2D)g).scale(-1,1);}g.setColor(Color.red);g.fillRect(0,0,b,b);g.fillRect(b,b,b,b);g.setColor(Color.blue);g.fillRect(b,0,b,b);g.fillRect(0,b,b,b);g.fillArc(0,-b,a,a,180,90);g.fillArc(0,b,a,a,0,90);g.setColor(Color.red);g.fillArc(-b,0,a,a,0,-90);g.fillArc(b,0,a,a,90,90);}}

বয়লারপ্লেট সহ প্রসারিত:

import java.awt.*;
public class T extends java.applet.Applet{
    int a = 98, b = 49, x, y; //Make these larger for better quality pictures. a = b * 2
    public void paint(Graphics g) {
        for (x=0; x < 5; x++)      //Make these larger for more tiles.
            for (y=0; y < 5; y++)  //
                a(g.create(x * a, y * a, a, a), x % 2 ^ y % 2);
    }

    void a(Graphics g, int c) {
        if (c > 0) {
            g.translate(a, 0);
            ((Graphics2D) g).scale(-1, 1);
        }
        g.setColor(Color.red);            //Change colors for nicer looking colors.
        g.fillRect(0, 0, b, b);
        g.fillRect(b, b, b, b);
        g.setColor(Color.blue);
        g.fillRect(b, 0, b, b);
        g.fillRect(0, b, b, b);
        g.fillArc(0, -b, a, a, 180, 90);
        g.fillArc(0, b, a, a, 0, 90);
        g.setColor(Color.red);
        g.fillArc(-b, 0, a, a, 0, -90);
        g.fillArc(b, 0, a, a, 90, 90);
    }
}

অ্যাপলেট: একটি ছোট অ্যাপ্লিকেশন প্রোগ্রাম যা অন্য অ্যাপ্লিকেশনটিতে কাজ করার সময় ব্যবহারের জন্য ডাকা যেতে পারে।

উদাহরণ চিত্র:

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

ব্যাখ্যা:

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

টাইল তৈরি করতে, আমরা নিম্নলিখিত পদ্ধতিটি ব্যবহার করি:

void a(Graphics g, int c) {
    g.setColor(Color.red);
    g.fillRect(0, 0, b, b);
    g.fillRect(b, b, b, b);
    g.setColor(Color.blue);
    g.fillRect(b, 0, b, b);
    g.fillRect(0, b, b, b);
    g.fillArc(0, -b, a, a, 180, 90);
    g.fillArc(0, b, a, a, 0, 90);
    g.setColor(Color.red);
    g.fillArc(-b, 0, a, a, 270, 90);
    g.fillArc(b, 0, a, a, 90, 90);
}

তবে সঠিক চিত্রটি তৈরি করতে অবশ্যই অন্যান্য প্রতিটি টাইল অনুভূমিকভাবে প্রতিবিম্বিত হতে হবে।

একটি টাইল প্রতিবিম্বিত করার জন্য, আমরা কেবল graphicsএই কোড দিয়ে সরবরাহ করা বস্তুটি সংশোধন করি :

g.translate(a, 0);
((Graphics2D) g).scale(-1, 1);

ধন্যবাদ 4 কুলগুয়ের জন্য 4 বাইট


1
ক্লাসের ক্ষেত্রগুলি হিসাবে xএবং ঘোষণা করে আপনি এটি আরও গল্ফ করতে পারেন y:int a = 98, b = 49,x,y;
স্পিক্যাট্রিক্স

4

গণিত 299 256

শব্দযুক্ত তবে এটি বের করে ভাল লাগলো।

বেসিক টাইলটি r (নীচে প্রদর্শিত), যা অঞ্চলপ্লট দ্বারা প্রদর্শিত অঞ্চল। টাইলের একটি বাম-ডান প্রতিবিম্ব তৈরি করা হয় এবং r এর সাথে যুক্ত। দুটি টাইল একত্রিত চিত্র আবার স্থান টালি পুনরাবৃত্তি হয়।

R

a_~f~b_ := (x + a)^2 + (y + b)^2 <= 1;
a = ImageAssemble;
r = RegionPlot[(0~f~0 && y <= 0 && ! f[-1, 1]) \[Or] (0~f~2 && 
      y >= -2 && ! f[1, 1]), {x, -1, 1}, {y, -2, 0}, Frame -> False,
    BoundaryStyle -> None];
s = ImageCrop@Rasterize@r;
t = s~ImageReflect~Right;
i = a@{s, t};
j = a@{t, s};
a@{k = {i, i, i, i}, m = {j, j, j, j}, k, m, k, m}

টালি


1

সি, 237 209 180 বাইট

180 বাইট। এই সংস্করণটিতে একটি মন্তব্যে edc65 দ্বারা প্রস্তাবিত পরিবর্তনগুলি অন্তর্ভুক্ত রয়েছে। ঝাঁকুনি এবং ডিফল্ট বিকল্পগুলির সাথে ম্যাকের ভিত্তিতে এটি 9 সংকলক সতর্কতা দেয়:

a,b,c,d,x,y;main(){for(puts("P1 256 256");b=a+32&64,a<256;++a){for(c=0;d=c+32&64,x=(a&64)-d?31-a&31:a&31,y=(c&64)-b?c&31:31-c&31,c++<256;)putchar(48+(x*x+y*y<962^b==d));puts("");}}

209 বাইট, মার্টিনের মন্তব্য থেকে কিছু পরামর্শ ব্যবহার করে। ঝাঁকুনি দিয়ে সতর্কতা ছাড়াই সংকলন:

#include <stdio.h>
int a,b,c,d,x,y;int main(){puts("P1 256 256");for(;b=a+32&64,a<256;++a){for(c=0;d=c+32&64,x=(a&64)-d?31-a&31:a&31,y=(c&64)-b?c&31:31-c&31,c<256;++c)putchar(48+(x*x+y*y<962^b==d));puts("");}}

আসল সংস্করণ, 237 বাইট:

#include <stdio.h>
int main(){puts("P1 256 256");for(int a=0;a<256;++a){int b=a+32&64;for(int c=0;c<256;++c){int d=c+32&64;int x=(a&64)-d?31-a&31:a&31;int y=(c&64)-b?c&31:31-c&31;putchar(48+(x*x+y*y<962^b==d));}puts("");}}

ফলাফল (256x256):

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

আরও ভাল পঠনযোগ্যতার জন্য সাদা জায়গার সাথে মূল কোড:

#include <stdio.h>
int main()
{
    puts("P1 256 256");
    for (int a = 0; a < 256; ++a)
    {
        int b = a + 32 & 64;
        for (int c = 0; c < 256; ++c)
        {
            int d = c + 32 & 64;
            int x = (a & 64) - d ? 31 - a & 31 : a & 31;
            int y = (c & 64) - b ? c & 31 : 31 - c & 31;
            putchar(48 + (x * x + y * y < 962 ^ b == d));
        }
        puts("");
    }
}

এটি কোনও গ্রাফিক্স লাইব্রেরি ব্যবহার করে না, রেন্ডারিং পুরোপুরি কোডের মধ্যে রয়েছে।

মূল ধারণাটি হ'ল সমস্ত 256x256 পিক্সেলের উপরে লুপ করা, এবং তারা যে 32x32 সাব-বর্গক্ষেত্রের বৃত্তাকার চাপের ভিতরে / বাইরে রয়েছে তা দেখুন the উপ-বর্গ। (x, y)ব্যাসার্ধের সাথে আর্কের অভ্যন্তরে / বাইরের পরীক্ষাটি rতখন মান:

x * x + y * y < r * r

বেশিরভাগ যুক্তি হ'ল সাব-স্কোয়ারের সঠিক কোণায় চাপটি কেন্দ্র করে রেখে এবং ভিতরে / বাইরে কোন রঙটি নির্ধারণ করে।

সমাধান সম্পর্কে কিছু মন্তব্য:

  • কোডটি PBM ASCII ফর্ম্যাটে চিত্রটি তৈরি করে। আমি জিম্পে ফলাফলটি লোড করেছি এবং আমি এখানে পোস্ট করা প্রকৃত ফাইলটি তৈরি করতে একটি অনুলিপি এবং পেইন্টে আটকালাম। সুতরাং ফর্ম্যাটটি রূপান্তরিত হয়েছিল তবে সামগ্রীটি হুবহু মূল আউটপুট হিসাবে।
  • আপনি যদি কাছ থেকে তাকান, আপনি লক্ষ্য করতে পারেন যে গুণটি দুর্দান্ত নয়। এটি কারণ পিক্সেল কেন্দ্রের পরিবর্তে পিক্সেলের কোণার জন্য অভ্যন্তরীণ / বাহিরের গণনা করা হয়, যার ফলে পুরো জিনিসটি 1/2 পিক্সেল বন্ধ হয়ে যায়। আমার মনে হয় না আরও ভাল কাজ করা খুব কঠিন হবে তবে কোডটি কিছুটা দীর্ঘতর হবে। এবং যেহেতু নির্দিষ্ট মানের প্রয়োজনীয়তা ছিল না, তাই আমি বিশ্বাস করি এটি যথেষ্ট।
  • কোডটি ম্যাকের ক্ল্যাং ব্যবহার করে সংকলিত হয়েছিল। সর্বশেষ সংস্করণ সতর্কতা দেয়, প্রাথমিক সংস্করণ দেয় নি।
  • এই প্রথম আমি এইগুলির মধ্যে কোনওটির চেষ্টা করেছিলাম, তাই সম্ভবত শেষ বাইটটি সংরক্ষণ করার জন্য আমি কয়েকটি কৌশল মিস করেছি।

3
পিপিসিজিতে আপনাকে স্বাগতম! আমি কোনও বড় সি গল্ফার নই, তবে আমি মনে করি যে আমি কয়েকটি উন্নতি দেখতে পাচ্ছি: আপনার ঘোষণাগুলির মতো গোষ্ঠী করুন int a,b,c,d,x,y;... আমি মনে করি আপনি সম্ভবত এমনটি করতে সক্ষম হবেন main(a,b,c,d,x,y)আমি এমন কোনও কিছু মনে করতে পারি যা ডিফল্ট টাইপটি অন্তর্ভুক্ত। একবার আপনি এর থেকে মুক্তি পেয়ে গেলে, আপনি অ্যাসাইনমেন্টগুলি d, x এবং y এ অভ্যন্তরীণ forবর্ধিত বিবৃতিতে সরিয়ে নিতে পারেন d=c+32&64,...,++c(সম্ভবত আপনি যে ++কোনও জায়গায় উল্লেখ করেছেন এমন cকোনও জায়গায় সরিয়ে নিয়ে যেতে পারেন), এবং তারপরে বন্ধনীগুলি বাদ দিতে পারেন can ভিতরের for। ভালো কাজ, বিটিডব্লিউ! :)
মার্টিন ইন্ডার

ধন্যবাদ! টিপসের তালিকায় কোনও প্রকার ছাড়াই যুক্তি ঘোষণার কৌশলটি আমি দেখেছি, তবে এটি এতটাই নোংরা বলে মনে হয়েছিল যে আমি নিজেকে সেখানে যেতে পারি নি। ;) আমি মনে করি না যে এর জন্য মানহীন আর্গুমেন্টগুলি main()মান মেনে চলতে হবে। আমার অবশ্যই ঘোষণাগুলিকে গ্রুপ করা উচিত। এবং ইনক্রিমেন্টগুলি সরিয়ে নেওয়াও বেশ কয়েকটি বাইট সংরক্ষণ করবে। puts()সম্পর্কে newline জন্য বাইরের লুপ, তাই আমি নিশ্চিত নই আমি যদি ধনুর্বন্ধনী পরিত্রাণ পেতে পারেন।
রেটো কোরাডি

যতক্ষণ না এটি কিছু সাধারণ সংকলক সংকলিত হয় ততক্ষণ আমরা এটির সাথে ঠিক আছি (যাতে এটি সম্পূর্ণ স্ট্যান্ডার্ড সি হওয়া দরকার না)। এছাড়াও হ্যাঁ আমি মনে করি না আপনি বাইরের ধনুর্বন্ধনীগুলি থেকে মুক্তি পেতে পারেন তবে অভ্যন্তরীণগুলি সরিয়ে ফেলতে আপনার সক্ষম হওয়া উচিত।
মার্টিন ইন্ডার

এটি 210 বাইটে নামা হয়েছে। ধারণার জন্য ধন্যবাদ।
রেটো কোরাডি

1
ইঙ্গিত: stdioপ্রয়োজন নেই, ফাংশনের ডিফল্ট ঘোষণা ব্যবহার করুন। intগ্লোবালগুলির জন্য ডিফল্ট এবং বাদ দেওয়া যায় (ভেরিয়েবল এবং মূল)। প্রথম putsজন্য ভিতরে যেতে পারেন। সি ভেরি অভ্যন্তরীণ লুপের অভ্যন্তরে ব্যবহৃত হয় না, তাই শর্তে বৃদ্ধি করা। 180: a,b,c,d,x,y;main(){for(puts("P1 256 256");b=a+32&64,a<256;++a){for(c=0;d=c+32&64,x=(a&64)-d?31-a&31:a&31,y=(c&64)-b?c&31:31-c&31,c++<256;)putchar(48+(x*x+y*y<962^b==d));puts("");}}(অনেক সতর্কতার সাথে সংকলন করে তবে রান)
edc65
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.