এটি সমস্ত উপায় অবনমিত!


23

এই চ্যালেঞ্জটি এই দুর্দান্ত অ্যানিমেটেড ডায়াগ্রাম দ্বারা অনুপ্রাণিত হয়েছে (চ্যাটে পোস্ট করার জন্য flawr ধন্যবাদ)।

একটি ইনপুট দেওয়া হয়েছে n, নির্দিষ্ট হিসাবে বিন্দুগুলির নেস্টেড বহুভুজ হিসাবে এর সমস্ত মৌলিক উপাদানগুলি আঁকুন।

উদাহরণস্বরূপ, সংখ্যাটি প্রদত্ত 357 = 17x7x3, আপনি একটি ত্রিভুজের 3 টি বিন্দু, একটি হেপটাগনে সেই ত্রিভুজগুলির 7 সংস্করণ এবং 17-গনগুলিতে he হেপাটাগনের 17 সংস্করণ সজ্জিত করুন। সংক্ষেপে, নেস্টেড বহুভুজগুলি বাইরের বৃহত্তম প্রধান ফ্যাক্টর থেকে ভিতরের ক্ষুদ্রতম দিকে চলে যাচ্ছে। কারণ 357, আপনার উত্তরটি দেখতে কিছুটা দেখতে (রঙ সহ বা বর্ণহীন) হওয়া উচিত:

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

প্রতিটি প্রাইমের প্রতিটি বহুভুজ >= 3ডায়াগ্রামের চারদিকে ঘোরানো উচিত নয়।

একমাত্র ব্যতিক্রম প্রধান 2, বিশেষত বিজোড় শক্তির জন্য 2। যেমন আপনি 376 = 47x2x2x2নীচের উদাহরণে দেখতে পাচ্ছেন , 8এসগুলি ঘোরানো হয় এবং s এর একক লাইন নয় 2, তবে এটি 4বর্গক্ষেত্রের জন্য উল্লম্ব স্ট্যাক ks এমনকি 2স্কোয়ারগুলিতে সাজানো শক্তিগুলিও এইভাবে ঘোরানোর দরকার নেই।

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

আসলে, 448 = 7x2x2x2x2x2x2একটি ডায়াগ্রাম রয়েছে যা 64এর হেপাটাগনের মতো দেখায় এবং 64এটি একটি স্কোয়ারের স্কোয়ারে সাজানো হয় তবে কোনও আবর্তন ছাড়াই।

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

আরও দুটি উদাহরণ 440 = 11x5x2x2x2এবং 432 = 3x3x3x2x2x2x2। আমরা দেখতে পাই যে 4402 এর একটি বিজোড় শক্তি দিয়ে 8গুলি ঘুরেছে , তবে এর 432একটি এমনকি শক্তির সাথে 2এর 16গুলি ঘোরান না ।

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

এবং পরিশেষে, এখানে 10 = 5x2পাইথন এবং এর turtleমডিউলটি নিয়ে মশকরা করা রঙ ছাড়াই এখানে একটি সর্বনিম্ন উদাহরণ ।

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

চ্যালেঞ্জ

  • একটি ইনপুট দেওয়া হয়েছে nযেখানে 1 <= n <= 10000, তার নেস্টেড ফ্যাক্টর বহুভুজগুলির একটি চিত্র আউটপুট দেয়।
  • বিধিগুলি হ'ল:
    • চিত্রটি বিন্দুগুলির নেস্টেড বহুভুজ দ্বারা গঠিত, একটি বহুভুজ থেকে বাইরের দিকে (বৃহত্তম প্রাইম ফ্যাক্টর) পাশের অভ্যন্তরে ক্ষুদ্রতম প্রধান উপাদান পর্যন্ত।
    • 2 ফ্যাক্টরের জন্য, 2 এর শক্তিগুলি একটি রেখা, তারপরে একটি বর্গক্ষেত্র, তারপরে স্কোয়ারগুলির একটি লাইন এবং এই জাতীয় হিসাবে স্ট্যাক করা উচিত। এমনকি 2 এর শক্তি ঘোরানো উচিত নয়। 2 এর বিজোড় শক্তিগুলি তাদের নিজ নিজ বহুভুজগুলির চারদিকে ঘোরানো উচিত এবং এগুলি ঘোরার আগে উল্লম্বভাবে স্ট্যাক করা উচিত।
  • আপনি পছন্দ মতো ইমেজটি ওরিয়েন্ট্ট করতে পারেন (যদিও আমি পছন্দ করি) তবে প্রতিটি নেস্টেড বহুভুজ 2 এর বিজোড় শক্তির একক ব্যতিক্রম ব্যতীত অন্য বহুভুজ হিসাবে একই দিকের মুখোমুখি হওয়া উচিত।
  • আপনার কাছে চিত্রের আকার এবং বিন্দু আকারের জন্য দুটি বিকল্প রয়েছে:
    • চিত্রের আকার স্থিতিশীল এবং বিন্দুর আকার হ্রাস nপায় (অ্যানিমেশন হিসাবে) as
    • বিন্দু আকার স্থিতিশীল এবং চিত্র আকার বৃদ্ধি হিসাবে nবৃদ্ধি পায়।
  • বহুভুজগুলির প্রথম তিনটি স্তর প্রতিবেশী বহুভুজ (যেমন স্পর্শ নয়) থেকে পৃথক হওয়া উচিত, তবে আশেপাশের চিত্রগুলির আকার বিবেচনা করে n=10000যদি স্তরগুলি স্পর্শ করা শুরু করে তবে ঠিক আছে। আমি এটি পছন্দ করি না যদি তারা না করে তবে স্ট্যাক এক্সচেঞ্জে আপলোডযোগ্য এমন কোনও চিত্রের সাথে এটি ফিট করা অবশ্যম্ভাবী হতে পারে।
  • রঙ .চ্ছিক।
  • বিন্দুর আকার আপনার উপর নির্ভর করে। স্কোয়ারগুলি যদি আপনার ভাষার জন্য ভাল হয় তবে সেগুলি ব্যবহার করুন।
  • কোনও বোনাস নেই, তবে আমি কাউকে মূল পোস্টে ডায়াগ্রামগুলি অ্যানিমেটেড এবং রঙ করতে চাই।

এই প্রশ্নটি লেখার ক্ষেত্রে সহায়তার জন্য কনর ও ব্রায়ান, ইস্টারলিআইর্ক, মার্টিন ইন্ডার, ক্রিটিক্সী লিথোস, মেগো, ডিজে ম্যাকমেহেম এবং এল'েন্ডিয়া স্টারম্যানকে ধন্যবাদ জানাই।

এই কোড গল্ফ, তাই সংক্ষিপ্ততম কোড জিতেছে। শুভকামনা এবং ভাল গল্ফিং!

উত্তর:


8

পাইথন 3.5, 331 309 308 306 304 বাইট

বহুভুজের ফাঁকে ফাঁকে ফাঁকে ফাঁকে ফাঁকে ফাঁকে ফাঁকে ফাঁকে (এবং স্পেসিফিকেশনটিও, সত্যি বলতে গেলে,) এই উত্তরটি কাজে লাগাতে পেরেছি, তবে শেষ পর্যন্ত আমি এটি করেছি এবং আশা করি অন্যান্য উত্তরগুলি আসতে শুরু করতে পারে।

সম্পাদনা: -২ বাইটগুলি ফ্লিপট্যাককে ধন্যবাদ। -8 কোডের কোনও বিভাগ অপসারণ থেকে বাইটস যা আমি আগে সরিয়ে দিতে ভুলে গিয়েছিলাম। শেষ ফাংশন গল্ফিং থেকে -12 বাইট। -1 থেকে আঁকা পরিধি পরিবর্তন করা থেকে বাইট size=2500থেকে size=2e3(স্ক্রিনে ভাল ফিট এর, যা আঁকা পারবেন diameter ~= 795.77নিচে diameter ~= 636.62)। বাগ ফিক্সিং থেকে -2 বাইট। -2 পূনর্গঠনকারী আমি গড়ে তুলতে থেকে বাইট a

গল্ফিং পরামর্শ স্বাগত জানাই। শীঘ্রই পরীক্ষার জন্য চিত্র এবং চিত্রগুলি অনুসরণ করুন।

from math import*
from turtle import*
ht();pu()
def g(n):
 i=1;a=[]
 while n%4<1:a+=4,;n//=4
 while n>1:
  i+=1
  while n%i<1:a+=i,;n//=i
 return f(a,2e3)
def f(a,s,x=0,y=0,t=0):
 if a:
  *c,b=a;s/=b
  for i in range(b):u=2*pi*i/b+t*(b<3)+pi/4*(b==4);f(c,s,x+s*sin(u),y+s*cos(u),u)
 else:goto(x,y);dot(4)

এখানে g(448)এখন আমার 1366x768 স্ক্রিনে ফিট করে।

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

Ungolfing

import math
import turtle

turtle.hideturtle()     # don't display the turtle itself)
turtle.penup()          # don't draw lines, just dots later on

def g(n):
    i = 1
    a = []
    while n % 4 == 0:   # get 4's into the list first,
        a = a + [4]     # so that the fractal will be easier to structure
        n = n // 4
    while n > 1:        # now get all of the other factors (including any stray 2's)
        i += 1
        while n % i == 0:
            a = a + [i]
            n = n // i
    return f(a, 2000)   # 2000 is the circumference of the circle
                        # on which we draw the polygons
def f(a, s, x=0, y=0, t=0):
    if a:
        c = a[-1]       # the size of the current outermost polygon
        b = a[:-1]      # the rest of the factors for recursion
        s = s/b         # the current circumference / the number of polygons at this layer
        for i in range(b):
            u = 2*math.pi*i/b   # angle around the circle
            if b == 2:          # if b == 2, add the previous angle to rotate the structure
                u += t
            if b == 4:          # if b == 4, add 45 degrees to keep the squares upright
                u += math.pi/4
            dx = s * math.sin(u)    # our coordinate changes for this polygon
            dy = s * math.cos(u)
            f(c, s, x+dx, y+dy, u)  # call the function again
                                    # on a new circle with new starting coordinates
    else:                   # when we run out of factors,
        turtle.goto(x,y)    # go to each coordinate
        turtle.dot(4)       # and draw a dot

থাকার n = n //= iকথা n//= i?
বোবাস_পেট

@ বোবিয়াস_পেট নাহ, আপনি দুর্বৃত্তদের / ব্যাখ্যাটির দিকে তাকিয়ে আছেন এবং এটি বলার কথা রয়েছে n = n // i। আমি এটি সংশোধন করতে যাব এবং আমি এটি উপস্থিত থাকাকালীন ব্যাখ্যাটিতে যুক্ত করব।
শার্লক 9
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.