আমার ত্রিভুজটির আরও নোড দরকার


20

ব্যারেন্সেন্ট্রিক স্থানাঙ্কগুলি ব্যবহার করে নোডযুক্ত লেবেল সহ স্ট্যান্ডার্ড সমান্তরীয় ত্রিভুজটি বিবেচনা করুন :

আমরা 3 প্রকারের একটি নতুন লাইন যোগ করে (এক বেশি মূল 3 নোড ত্রিভুজ একটি পাশ দিয়ে উপস্থিত ছিলেন), কোনো অভ্যন্তরীণ প্রান্ত (কিন্তু অপসারণ একটি 6 নোড ত্রিভুজ এই 3 নোড ত্রিভুজ চালু করতে পারেন না অভ্যন্তরীণ নোড) এবং পুনরায় স্থানাঙ্কগুলি স্বাভাবিক করুন:

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

10 নোড ত্রিভুজ করার জন্য একটি 6 নোড ত্রিভুজ থেকে যান প্রক্রিয়া পুনরাবৃত্তি, 4 ছেদচিহ্ন (আবার, এক বেশি মূল 6 নোড ত্রিভুজ একটি পাশ দিয়ে উপস্থিত ছিলেন), কোনো অভ্যন্তরীণ প্রান্ত (কিন্তু অপসারণ একটি লাইন যোগ না অভ্যন্তরীণ নোড ) এবং স্থানাঙ্কগুলি পুনরায় সাধারণকরণ করুন:

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

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

ইনপুট

আপনার প্রোগ্রাম / ফাংশনটি ইনপুট হিসাবে নেওয়া উচিত একটি একক অ-নেতিবাচক পূর্ণসংখ্যার Nপ্রতিনিধিত্ব করে যে এই প্রক্রিয়াটি কতবার প্রয়োগ হয়েছে। মনে রাখবেন যে এর জন্য N=0আপনার 3 টি নোডের সাথে মূল ত্রিভুজটি আউটপুট করা উচিত।

ইনপুটটি কোনও উত্স থেকে আসতে পারে (ফাংশন প্যারামিটার, স্টিডিও ইত্যাদি)।

আউটপুট

আপনার প্রোগ্রাম / ফাংশনটি সমস্ত নোডকে নরমালাইজড বেরিয়েন্স্রিক সমন্বয়গুলিতে আউটপুট করে। নোডের ক্রম কোনও ব্যাপার না। একটি সংখ্যা ভগ্নাংশ (ভগ্নাংশ হ্রাস প্রয়োজন না) বা ভাসমান পয়েন্ট সংখ্যা হিসাবে নির্দিষ্ট করা যেতে পারে। নোড নির্দিষ্ট করতে আপনি "স্কেলড" ভেক্টরগুলি আউটপুটও করতে পারেন। উদাহরণস্বরূপ, নিম্নলিখিত আউটপুটগুলির সমস্ত 3 সমতুল্য এবং অনুমোদিত:

0.5,0.5,0

1/2,2/4,0

[1,1,0]/2

যদি ভাসমান পয়েন্ট আউটপুট ব্যবহার করা হয় তবে আপনার আউটপুটটি 1% এর মধ্যে সঠিক হওয়া উচিত। আউটপুটটি কোনও সিঙ্ক পছন্দসই (স্টিডিও, রিটার্ন মান, রিটার্ন প্যারামিটার ইত্যাদি) হতে পারে। নোট করুন যে যদিও ব্যারিসেনট্রিক স্থানাঙ্কগুলি নোডের জন্য কেবলমাত্র 2 টি সংখ্যা দ্বারা অনন্যভাবে নির্ধারিত হয়, আপনার নোডের জন্য সমস্ত 3 নম্বর আউটপুট করা উচিত।

উদাহরণ

উদাহরণস্বরূপ কেসগুলি ফর্ম্যাট করা হয়:

N
x0,y0,z0
x1,y1,z1
x2,y2,z2
...

যেখানে প্রথম লাইনটি ইনপুট N, এবং নিম্নলিখিত সমস্ত লাইনগুলি নোড তৈরি করে x,y,zযা আউটপুটে ঠিক একবার হওয়া উচিত। সমস্ত সংখ্যা আনুমানিক ভাসমান পয়েন্ট সংখ্যা হিসাবে দেওয়া হয়।

0
1,0,0
0,1,0
0,0,1

1
1,0,0
0,1,0
0,0,1
0.5,0,0.5
0.5,0.5,0
0,0.5,0.5

2
1,0,0
0,1,0
0,0,1
0.667,0,0.333
0.667,0.333,0
0.333,0,0.667
0.333,0.333,0.333
0.333,0.667,0
0,0.333,0.667
0,0.667,0.333

3
1,0,0
0.75,0,0.25
0.75,0.25,0
0.5,0,0.5
0.5,0.25,0.25
0.5,0.5,0
0.25,0,0.75
0.25,0.25,0.5
0.25,0.5,0.25
0.25,0.75,0
0,0,1
0,0.25,0.75
0,0.5,0.5
0,0.75,0.25
0,1,0

স্কোরিং

এটি কোড গল্ফ; বাইটস মধ্যে সংক্ষিপ্ত কোড। স্ট্যান্ডার্ড লুফোলস প্রযোজ্য। আপনি পছন্দসই কোনও বিল্ট-ইন ব্যবহার করতে পারেন।


তুমি বলো " যদি ভাসমান পয়েন্ট আউটপুট ব্যবহার করা হয় "। কি বিকল্প আছে? ভগ্নাংশ? যদি তা হয় তবে সেগুলি কি হ্রাস করতে হবে? ছোট আকারের ভেক্টরগুলির মতো কীভাবে [1,2,3]/6?
পিটার টেলর

হ্যাঁ, এই সমস্ত বিকল্পের অনুমোদিত। আমি সমস্যার বিবৃতি আপডেট করব।
helloworld922

উত্তর:


7

সিজেএম (22 বাইট)

{):X),3m*{:+X=},Xdff/}

এটি একটি বেনামে ব্লক (ফাংশন) যা Nস্ট্যাকটি গ্রহণ করে এবং স্ট্যাকের উপর ডাবলসের অ্যারে ছেড়ে দেয়। অনলাইন ডেমো

ব্যবচ্ছেদ

{         e# Define a block
  ):X     e# Let X=N+1 be the number of segments per edge
  ),3m*   e# Generate all triplets of integers in [0, X] (inclusive)
  {:+X=}, e# Filter to those triplets which sum to X
  Xdff/   e# Normalise
}


5

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

এটি আসলে একটি মন্তব্য বলে মনে করা হচ্ছে দ্য বাইকিংভাইকিংয়ের সমাধানটির আমার যথেষ্ট খ্যাতি নেই।

কেবলমাত্র ত্রুটিগুলি পরিবর্তন করে i,jএবং তৃতীয়টি দিয়ে তারা যুক্ত করে তা ব্যবহার করে কেউ কয়েকটি বাইট সংরক্ষণ করতে পারে n+1

def f(n):d=n+1;r=range(n+2);print([[i/d,j/d,(d-i-j)/d]for i in r for j in r if d>=i+j])

4

গণিত,  44  43 বাইট

Select[Range[0,x=#+1]~Tuples~3/x,Tr@#==1&]&

এটি একটি একক পূর্ণসংখ্যার যুক্তি নিয়ে একটি নামবিহীন ফাংশন। আউটপুট হ'ল ভগ্নাংশের হ্রাসের তালিকার একটি তালিকা।

1/(N+1)অন্তর্ভুক্ত সহ 0 এবং 1 এর মধ্যে গুণমানের 3-টি-টি-গুন উত্পাদন করে এবং তারপরে যাদের সমষ্টি 1 হয় তাদের (বেরিসেন্ট্রিক স্থানাঙ্কের প্রয়োজন অনুসারে) বাছাই করে।


4

05 এ বি 1 ই , 10 বাইট

ÌL<¤/3ãDOÏ

ব্যাখ্যা

ÌL<          # range(1,n+2)-1
   ¤/        # divide all by last element (n+1)
     3ã      # cartesian product repeat (generate all possible triples)
       DO    # make a copy and sum the triples
         Ï   # keep triples with sum 1

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


যেহেতু ¤অ্যারে গ্রাস করে, তাই /দ্বারা অ্যারে ভাগ করে দেয় কেন ? এটি কি সর্বশেষ পপড মানটিকে "মনে রাখে" এবং প্রয়োজনে এটি ব্যবহার করে?
লুইস মেন্ডো

@ লুইসমেন্ডো: ¤কয়েকটি কমান্ডগুলির মধ্যে একটি যা স্ট্যাক থেকে পপ এবং গ্রাস করে না। এটি স্ট্যাকের উপরে তালিকাগুলি রেখে তালিকার শেষ উপাদানটিকে পুশ করে।
এমিগানা



ওহ অবশ্যই! ব্যাখ্যার জন্য ধন্যবাদ
লুইস মেন্ডো

3

এমএটিএল , 17 বাইট

2+:qGQ/3Z^t!s1=Y)

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

ব্যাখ্যা

অন্যান্য উত্তরগুলির মতই পদ্ধতিটি একই:

  1. অ্যারে তৈরি করুন [0, 1/(n+1), 2/(n+1), ..., 1], nইনপুটটি কোথায় ;
  2. এই মানগুলির সাথে সমস্ত 3-টিপল তৈরি করুন;
  3. যাদের যোগফল রয়েছে কেবল তাদের রাখুন 1

আরো নির্দিষ্টভাবে:

2+     % Take input and add 2: produces n+2
:q     % Range [0 1 ... n+1]
GQ/    % Divide by n+1 element-wise: gives [0, 1/(n+1), 2/(n+1)..., 1]
3Z^    % Cartesian power with exponent 3. Gives (n+1)^3 × 3 array. Each row is a 3-tuple
t      % Duplicate
!s     % Sum of each row
1=     % Logical index of entries that equal 1
Y)     % Use that index to select rows of the 2D array of 3-tuples

1

জেলিফিশ , 37 33 বাইট

4 বাইট সংরক্ষণের জন্য জগারবকে ধন্যবাদ

p
*%
# S
`
=E   S
`/
1+r#>>i
   3

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

আমার ম্যাথেমেটিকা ​​এবং পিটারের সিজেমের উত্তরের মত, এটি পরীক্ষার্থীর একটি সেট তৈরি করে এবং তারপরে কেবল ১ টির সমষ্টি নির্বাচন করে I'm আমি এখনও লেআউটটি নিয়ে পুরোপুরি খুশি নই, এবং আমি ভাবছি যে আমি কিছু বাইট হুক বা কাঁটাচামচ দিয়ে সংরক্ষণ করতে পারি কিনা, তবে আমি পরে এটি দেখতে হবে।


1

পার্ল 6: 50 40 বাইট

{grep *.sum==1,[X] (0,1/($_+1)...1)xx 3}

(সঠিক) যৌক্তিক সংখ্যার 3-উপাদান তালিকাগুলির ক্রম ফেরৎ দেয়।

ব্যাখ্যা:

  • $_
    সুস্পষ্টভাবে ল্যাম্বডারের প্যারামিটার ঘোষণা করা হয়েছে।
  • 0, 1/($_ + 1) ... 1
    ...পাটিগণিত ক্রমটি তৈরি করতে সিকোয়েন্স অপারেটর ব্যবহার করে যা সম্ভাব্য সমন্বয় মানগুলির সাথে মিলে যায়।
  • [X] EXPR xx 3
    এক্সপিআরটির তিনটি অনুলির কার্টেসিয়ান পণ্য গ্রহণ করে, অর্থাত্ সমস্ত সম্ভাব্য 3 টি-টিপল তৈরি করে।
  • grep *.sum == 1, EXPR
    1 টি যোগফল দিয়ে ফিল্টার করুন।

1

রুবি, 62

যদি এর উন্নতি না করা যায় তবে আমি অবাক হব:

->x{0.step(1,i=1.0/(x+1)){|a|0.step(1-a,i){|b|p [a,b,1-a-b]}}}

ধাঁধাটিতে সুপ্ত পরামর্শটি গ্রহণ করে, এটি প্রথমটির উপর ভিত্তি করে দ্বিতীয় নোড বিকল্পগুলি এবং প্রথম দুটি বিয়োগ করে তৃতীয় নোড গণনা করে।



0

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

def f(n):r=range(n+2);print([x for x in[[i/-~n,j/-~n,k/-~n]for i in r for j in r for k in r]if sum(x)==1])

একটি ফাংশন তারা আর্গুমেন্টের মাধ্যমে ইনপুট নেয় এবং এসটিডিওটিতে ফ্লোটের তালিকার একটি তালিকা মুদ্রণ করে।

পাইথন কার্টেসিয়ান পণ্যগুলিতে ভাল নয় ...

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

def f(n):                         Function with input iteration number n
r=range(n+2)                      Define r as the range [0, n+1]
for i in r for j in r for k in r  Length 3 Cartesian product of r
[i/-~n,j/-~n,k/-~n]               Divide each element of each list in the product
                                  by n+1
[x for x in ... if sum(x)==1]     Filter by summation to 1
print(...)                           Print to STDOUT

আইডিয়নে চেষ্টা করে দেখুন


0

আসলে , 15 বাইট

এটি থাইবাইকিংকিংয়ের পাইথন উত্তরের মতো একটি অ্যালগোরিদম ব্যবহার করে । গল্ফিং পরামর্শ স্বাগত জানাই। এটি অনলাইন চেষ্টা করুন!

u;ur♀/3@∙`Σ1=`░

Ungolfed:

u;                Increment implicit input and duplicate.
  ur              Range [0..n+1]
    ♀/            Divide everything in range by (input+1).
      3@∙         Take the Cartesian product of 3 copies of [range divided by input+1]
         `Σ1=`    Create function that takes a list checks if sum(list) == 1.
              ░   Push values of the Cartesian product where f returns a truthy value.

0

রুবি, 77 74 বাইট

দ্য বাইকিংভিকিংয়ের পাইথনের উত্তরটিতে অ্যালগরিদম ব্যবহার করে অন্য একটি উত্তর । গল্ফিং পরামর্শ স্বাগত জানাই।

->n{a=[*0.step(1,i=1.0/(n+1))];a.product(a,a).reject{|j|j.reduce(&:+)!=1}}

চার্লসের রুবি উত্তর নয় এর ভিত্তিতে আর একটি 74-বাইট অ্যালগরিদম ।

->x{y=x+1;z=1.0/y;[*0..y].map{|a|[*0..y-a].map{|b|p [a*z,b*z,(y-a-b)*z]}}}

0

জাভাস্ক্রিপ্ট (ফায়ারফক্স 30-57), 88 81 বাইট

n=>[for(x of a=[...Array(++n+1).keys()])for(y of a)if(x+y<=n)[x/n,y/n,(n-x-y)/n]]

ভাসমান-পয়েন্ট সংখ্যাগুলির অ্যারেগুলির অ্যারে প্রদান করে। সম্পাদনা করুন: সরাসরি তৃতীয় স্থানাঙ্ক গণনা করে 7 বাইট সংরক্ষণ করা হয়েছে। আমি সরাসরি ifব্যাপ্তিটি গণনা করে মুছে ফেলার চেষ্টা করেছি yতবে এটির জন্য অতিরিক্ত বাইট লাগবে:

n=>[for(x of a=[...Array(++n+1).keys()])for(y of a.slice(x))[x/n,(y-x)/n,(n-y)/n]]

শেষে, আপনি লিখেছেন [x/n,y/n/z/n], আপনি কমা ভুলে গেছেন?
kamoroso94

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