বিজ্ঞপ্তি গ্রাফিক্স হিসাবে নম্বর


36

প্রথমে আপনি কী উত্পাদন করবেন তার অনুভূতি পেতে এই ধাঁধাটি অধ্যয়ন করুন ।

আপনার চ্যালেঞ্জটি হ'ল এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা ধাঁধাটির মতো একটি বৃত্তাকার গ্রাফিককে আউটপুট দেবে, 1 (100) সহ একটি (বেস 10) নম্বর দেওয়া হবে। এটি এই চ্যালেঞ্জের অনুরূপ , আপনি রোমান সংখ্যার চেয়ে গ্রাফিক তৈরি করবেন। নিম্নলিখিত চেনাশোনাগুলি বাম থেকে ডানে 1-10 সংখ্যা উপস্থাপন করে:

বৃত্ত প্যাটার্ন

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

Number  Roman Numeral   Line Width
1       I               1px
5       V               3px
10      X               5px
50      L               7px
100     C               9px

আপনার আউটপুটের দুটি নমুনা পোস্ট করুন। ধরে নিই ইনপুটটি সঠিক, স্ট্যান্ডার্ড লুফোলস ইত্যাদি forth এটি কোড গল্ফ, তাই খুব কম বাইট জিতেছে। টাই হওয়ার সময়ে বেশিরভাগ ভোটে জয়লাভ হয়। শুভকামনা!


3
চিত্রটির সঠিক পরম আকারটি প্রয়োজনীয়, বা সঠিক আপেক্ষিক মাপের পক্ষে যথেষ্ট?
ডেভিড জাং

@ ডেভিডজ্যাং হ্যাঁ, দয়া করে ন্যায্যতার জন্য, আমি তালিকাভুক্ত লাইন এবং প্যাডিং মাপগুলিকে আটকে থাকি।
রিপ লীব

উত্তর:


15

গণিত - 166 181 বাইট

অন্যান্য ম্যাথমেটিকার উত্তরের চেয়ে কিছুটা সংক্ষিপ্ত, অংশকে আরও বিন্দু মুক্ত শৈলীর জন্য ধন্যবাদ।

c = Characters; r = Riffle;
Graphics[r[{0, 0}~Disk~# & /@ Reverse@Accumulate[
    l = {3} ~Join~ r[2 Position[c@"IVXLC", #][[1, 1]] - 1 & /@ 
        c@IntegerString[#, "Roman"], 3]], {White, Black}],
    ImageSize -> 2 Total@l] &

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

অ্যানিমেশন

অ্যানিমেটেড চেনাশোনা

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

Table[Show[%@n, PlotRange -> {{-100, 100}, {-100, 100}}, 
    ImageSize -> 200], {n, 1, 399, 1}];
Export["animcircles.gif", %]

উদাহরণ আউটপুট

উদাহরণ আউটপুট


দয়া করে কয়েকটি ফলাফল পোস্ট করুন। এটি প্রথম স্থান না জিজ্ঞাসা করার জন্য দুঃখিত। আমি কার্যগুলি গ্রহণ করার জন্যও প্রশ্নটি পরিবর্তন করেছি।
রিপ লীব

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

3
আপনার অ্যানিমেশন wiggles। আমি আরও ভাল করতে পারে না যে।
কর্সিকা

হুম, আপনি ঠিক বলেছেন। আমি সত্যিই নিশ্চিত নই কেন এটি এমন হয়, বিবেচনা করে আমি ম্যাথমেটিকার জন্য স্পষ্টভাবে প্লটের পরিসর নির্দিষ্ট করেছিলাম।
ডেভিড জাং

: হয়তো করতে wiggling সম্পর্কিত mathematica.stackexchange.com/q/134272
coredump

15

সাধারণ লিপ - 376 331 304 বাইট

(use-package(car(ql:quickload'vecto)))(lambda(n o &aux(r 3)l p)(map()(lambda(c)(setf l(position c" I V X L C D M")p(append`((set-line-width,l)(centered-circle-path 0 0,(+(/ l 2)r))(stroke))p)r(+ r l 3)))(format()"~@R"n))(with-canvas(:width(* 2 r):height(* 2 r))(translate r r)(map()'eval p)(save-png o)))

উদাহরণ

এখানে চিত্র বর্ণনা লিখুন(1) এখানে চিত্র বর্ণনা লিখুন(24)

এখানে চিত্র বর্ণনা লিখুন(104) এখানে চিত্র বর্ণনা লিখুন(1903) এখানে চিত্র বর্ণনা লিখুন(3999)

অ্যানিমেশন

1 থেকে 400 পর্যন্ত সংখ্যার জন্য:

নতুন

নোট: রেকর্ডের জন্য, এই অ্যানিমেশনটি নিম্নলিখিতভাবে করা হয়েছে:

আমার কাছে কোডটির একটি সংশোধিত সংস্করণ রয়েছে, ringsযা উত্পাদিত চিত্রটির প্রস্থকে দেয় named সুতরাং, নীচের লুপটির ফলাফলটি এখানে সর্বোচ্চ আকার, 182 :

 (loop for x from 1 to 400
       maximize (rings x (format nil "/tmp/rings/ring~3,'0d.png" x)))

পুরো লুপটি 9.573 সেকেন্ড সময় নেয়। এটি প্রতিটি পূর্ণসংখ্যার জন্য প্রায় 24ms দেয়। তারপরে, একটি শেল:

 convert -delay 5 -loop 0 -gravity center -extent 182x182 ring*png anim.gif

Ungolfed

(ql:quickload :vecto)
(use-package :vecto)

(lambda (n o)
  (loop with r = 3
        for c across (format nil "~@R" n)
        for l = (1+ (* 2(position c"IVXLCDM")))
        for h = (/ l 2)
        collect `(,(incf r h),l) into p
        do (incf r (+ h 3))
        finally (with-canvas(:width (* 2 r) :height (* 2 r))
                  (loop for (x y) in p
                        do (set-line-width y)
                           (centered-circle-path r r x)
                           (stroke))
                  (save-png o))))

ব্যাখ্যা

  • ফাংশনটি N1 এবং 3999 এবং একটি ফাইল নামের মধ্যে একটি পূর্ণসংখ্যা নেয়

  • আমি (format nil "~@R" N)দশমিক থেকে রোমান রূপান্তর করতে ব্যবহার করি । উদাহরণ স্বরূপ:

     (format nil "~@R" 34) => "XXXIV"
    

    ~@R বিন্যাস নিয়ন্ত্রণ স্ট্রিং 1 এবং 3999. এটা কেন সেখানে অনুমতি ইনপুট ব্যাপ্তির জন্য আপনি একটি সীমাবদ্ধতা হল মধ্যে পূর্ণসংখ্যার জন্য কাজ করার নির্দিষ্ট করা হয়েছে।

  • আমি বারবার ফলে স্ট্রিং উপর একটি তালিকা নির্মাণ করতে Pধারণকারী (radius width), দম্পতিরা একে সংখ্যা সি জন্য

    • প্রস্থটি একটি সাধারণ লিনিয়ার ম্যাপিং: আমি সিটির অবস্থান গণনা করার জন্য ধ্রুব স্ট্রিং "IVXLCDM" ব্যবহার করি। দুটি দিয়ে গুণ এবং একটি যুক্ত করে আমরা পছন্দসই মানটি পাই:

             (1+ (* 2 (position c "IVXLCDM")))
      

      এটি গল্ফযুক্ত সংস্করণে কিছুটা আলাদাভাবে করা হয়:

             (position c " I V X L C D M")
      
    • প্রতিটি ব্যাসার্ধের গণনা প্রতিটি রিংয়ের প্রশস্ততা এবং রিংগুলির মধ্যে ফাঁকা স্থান বিবেচনা করে। কোনও গতি অপ্টিমাইজেশন ছাড়াই, গণনাগুলি যথাযথ থাকে কারণ সেগুলি ফ্লোটের উপর ভিত্তি করে নয়, তবে যুক্তিযুক্ত সংখ্যার উপর নির্ভর করে।

      সম্পাদনা করুন : আমি প্যাডিংগুলির নিয়ম মেনে চলার জন্য প্যারামিটারগুলি পরিবর্তন করেছি।

  • এটি সম্পন্ন হয়ে গেলে, আমি ফলাফল ক্যানভাসের প্রয়োজনীয় আকার জানতে পারি (সর্বশেষতম গণনা ব্যাসার দ্বিগুণ)।

  • অবশেষে, আমি Pক্যানভাসের প্রতিটি উপাদানের জন্য একটি বৃত্ত আঁকি এবং সংরক্ষণ করি।

1
"এই কোডটি সমস্ত রোমান সংখ্যার (IVXLCDM) সমর্থন করে"। এর অর্থ কি আপনার প্রোগ্রামটি রোম্যান অঙ্কগুলিকে ইনপুট হিসাবে নেয়? এটাই আমার উদ্দেশ্য নয়, তবে দুর্দান্ত। অ্যানিমেশন জন্য প্রপস খুব।
রিপ লীব

1
না, না, দুঃখিত যদি এটি অস্পষ্ট থাকে: এটি 1 থেকে 3999 এর মধ্যে কোনও পূর্ণসংখ্যার জন্য কাজ করে your আপনার প্রশ্নে আপনার কেবল 1 থেকে 100 পর্যন্ত ইনপুট প্রয়োজন এবং আপনার টেবিলটিতে ডি বা এম এর উল্লেখ নেই ... আমি এটি সম্পাদনা করব অংশ।
26:51

8

এইচটিএমএল + জিকুয়েরি, ২৮৮

এইচটিএমএল

<canvas>

জাতীয়

    r=3;w=9;c=$('canvas').get(0).getContext('2d')
    for(i=prompt(),e=100;e-.1;e/=10){
    if((x=Math.floor(i/e)%10)==4)d(w)+d(w+2)
    else if(x==9)d(w)+d(w+4)
    else{if(x>4)d(w+2)
    for(j=x%5;j;j--)d(w)}
    w-=4}
    function d(R){c.lineWidth=R
    c.beginPath()
    c.arc(150,75,r+=R/2,0,7)
    c.stroke()
    r+=R/2+3}

বেহালা


স্ট্যাক স্নিপেট নেই?
অপ্টিমাইজার

@ অপ্টিমাইজার সম্পূর্ণরূপে ভুলে গেছি আমাদের এখন তা আছে
টুইনাইট

5

জাভা, 565

import java.awt.*;class Z{public static void main(String[]s){int i=new Byte(s[0]),j=i/10,k=i%10;String t="",u;if(j>8)t="59";if(j>9)t="9";if(j==4)t="57";else if(j<9){t=j>4?"7":"";j-=j>4?5:0;if(j>0)t+="5";if(j>1)t+="5";if(j>2)t+="5";}if(k>8)t+="15";if(k==4)t+="13";else if(k<9){t+=k>4?"3":"";k-=k>4?5:0;if(k>0)t+="1";if(k>1)t+="1";if(k>2)t+="1";}u=t;Frame f=new Frame(){public void paint(Graphics g){g.setColor(Color.BLACK);int x=0;for(char c:u.toCharArray()){int z=c-48,q=x;for(;x<q+z;)g.drawOval(99-x,99-x,x*2,x++*2);x+=3;}}};f.setSize(200,200);f.setVisible(1>0);}}

উদাহরণ

15

15

84

84

93

93

সুন্দরভাবে ফর্ম্যাট করা:

import java.awt.*;    
class Z {    
    public static void main(String[] s) {
        int i = new Byte(s[0]), j = i / 10, k = i % 10;
        String t = "", u;
        if (j > 8)
            t = "59";
        if (j > 9)
            t = "9";
        if (j == 4) {
            t = "57";
        } else if (j < 9) {
            t = j > 4 ? "7" : "";
            j -= j > 4 ? 5 : 0;
            if (j > 0)
                t += "5";
            if (j > 1)
                t += "5";
            if (j > 2)
                t += "5";
        }
        if (k > 8)
            t += "15";
        if (k == 4) {
            t += "13";
        } else if (k < 9) {
            t += k > 4 ? "3" : "";
            k -= k > 4 ? 5 : 0;
            if (k > 0)
                t += "1";
            if (k > 1)
                t += "1";
            if (k > 2)
                t += "1";
        }
        u = t;
        Frame f = new Frame() {
            public void paint(Graphics g) {
                g.setColor(Color.BLACK);
                int x = 0;
                for (char c : u.toCharArray()) {
                    int z = c - 48, q = x;
                    for (; x < q + z;) {
                        g.drawOval(99 - x, 99 - x, x * 2, x++ * 2);
                    }
                    x += 3;
                }
            }
        };
        f.setSize(200, 200);
        f.setVisible(1 > 0);
    }
}

দয়া করে কয়েকটি ফলাফল পোস্ট করুন। এটি প্রথম স্থান না জিজ্ঞাসা করার জন্য দুঃখিত।
রিপ লীব

3

গণিত 9 - 301 249 বাইট

: ডি এটি অন্তর্নির্মিতটি রোমান সংখ্যায় রূপান্তর করতে ব্যবহার করতে প্রতারণা বোধ করে তবে ওহে।

l=Length;k=Characters;r@n_:=(w=Flatten[Position[k@"IVXLC",#]*2-1&/@k@IntegerString[n,"Roman"]];Show[Table[Graphics@{AbsoluteThickness@w[[i]],Circle[{0,0},(Join[{0},Accumulate[3+w]]+3)[[i]]+w[[i]]/2]},{i,Range@l@w}],ImageSize->{(Total@w+(l@w)*3)*2}])

(আমি যখন গত রাতে এই সময়টি করেছিলাম তখন আমার খুব বেশি সময় ছিল না তবে আমি বুঝতে পেরেছিলাম যে এটি আরও বেশিভাবে ঝুঁকতে পারে And

আরও কিছুটা স্পষ্ট:

l=Length;
k=Characters;
r@n_:=
    (
    w=Flatten[Position[k@"IVXLC",#]*2-1&/@k@IntegerString[n,"Roman"]];
    Show[Table[Graphics@{AbsoluteThickness@w[[i]],Circle[{0,0},(Join[{0},Accumulate[3+w]]+3)[[i]]+w[[i]]/2]},{i,Range@l@w}],ImageSize->{(Total@w+(l@w)*3)*2}]
    )

এটি এমন একটি ফাংশন যা আপনি এটির মতো কল করতে পারেন:

r[144]

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

অথবা, আপনি মান থেকে ফলাফল দেখাতে পারেন যে একটি থেকে সাথেTable[r[i],{i,a,b}]

দ্রষ্টব্য : এটি কেবল 399 পর্যন্ত মানগুলির জন্য কাজ করে।


1

পাইথন 2, 322 296

স্ক্রিপ্টটি স্টিডিন থেকে রূপান্তর করার জন্য সংখ্যাটি পড়ে এবং এসভিজি মার্কআপ হিসাবে চিত্রটি আউটপুট করে।

.. আমি 'কালো' এর পরিবর্তে 'লাল' ব্যবহার করি কারণ এটি 2 টি অক্ষর সংরক্ষণ করে :)

এখানে কয়েকটি নমুনা রয়েছে: 23 এর জন্য: http://jsfiddle.net/39xmpq49/ 42 এর জন্য: http://jsfiddle.net/7Ls24q9e/1/

i=input();r=9
def R(n,p):
 global r,i;i-=n;print '<circle r="{0}" stroke-width="{1}"/>'.format(r,p);r+=p+3
print '<svg viewBox="-50 -50 99 99" fill="none" stroke="red">',[[R(n,int(p)) for p in s*int(i/n)] for n,s in zip([100,90,50,40,10,9,5,4,1],'9/59/7/57/5/15/3/13/1'.split('/'))]and'','</svg>'

1

জাভাস্ক্রিপ্ট 342 334 308

function R(n){var v=document,o=[],x=1,c=v.body.appendChild(v.createElement('canvas')).getContext('2d')
while(n)v=n%10,y=x+2,o=[[],[x],[x,x],[x,x,x],[x,y],[y],[y,x],[y,x,x],[y,x,x,x],[x,x+=4]][v].concat(o),n=(n-v)/10
v=3
while(x=o.shift())c.lineWidth=x,c.beginPath(),c.arc(150,75,v+x/2,0,7),c.stroke(),v+=x+3}

for (var i = 1; i <= 100; i++) {
  R(i);
}

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