একটি এন-ডাইমেনশনাল সিম্প্লেক্স (টেটেরাহেড্রন) তৈরি করুন


12

সরলতম এন-ডাইমেনশনাল আকারটি যে কোনও মাত্রার জন্য তৈরি করতে পারে এটি একটি সিম্প্লেক্স এবং এটি এন + 1 পয়েন্টগুলির একটি সেট যা প্রত্যেকেই সমান দূরত্বে দূরে।

২ টি মাত্রার জন্য, এটি একটি সমবাহু ত্রিভুজ, 3 মাত্রার জন্য, এটি একটি নিয়মিত টেট্রহেড্রন, 4 মাত্রায় 5-কোষ এবং এ জাতীয়।

চ্যালেঞ্জ

ইনপুট হিসাবে একটি পূর্ণসংখ্যার এন প্রদান করা হয়, একটি অ্যারে / তালিকা / স্ট্যাক / এন ডাইমেনশনাল পয়েন্টগুলি যাই হোক না কেন যা এই মাত্রার একটি সিম্প্লেক্সকে প্রতিনিধিত্ব করে output এটি হ'ল এন + 1 টি শীর্ষস্থান যা প্রতিটিের থেকে সমান এবং শূন্যের দূরত্ব।

লুয়া রেফারেন্স বাস্তবায়ন

উদাহরণ

1 -> [[0], [1]]
2 -> [[0, 0], [1, 0], [0.5, 0.866...]]
4 -> [[0, 0, 0, 0], [1, 0, 0, 0], [0.5, 0.866..., 0, 0], [0.5, 0.288..., 0.816..., 0], [0.5, 0.288..., 0.204..., 0.790...]]

মন্তব্য

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

1
আপনি বুঝতে পেরেছেন যে আপনি হার্ডকোড না করে জবাব জোর করতে পারবেন না? এটি এড়ানোর সহজ উপায় হ'ল ইনপুটটির পরিধি বাড়ানো। এছাড়াও "বৈধ মানদণ্ড অবশ্যই উদ্দেশ্যমূলক হতে হবে", যুক্তিসঙ্গত উদ্দেশ্য নয়।
ব্যবহারকারী 202729

দেখে মনে হচ্ছে এটি পরিচয় ম্যাট্রিক্স প্লাস এমন একটি অতিরিক্ত ভেক্টর যার প্রবেশদ্বারগুলি সব সমান করে তা নিয়ে সমাধান করা যেতে পারে।
xnor

@ এক্সনর এটি করেছে;)
প্যাটাক্স 8:38 এ 818

উত্তর:


4

জেলি , 11 বাইট

‘½‘÷ẋW
=þ;Ç

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

উৎপাদিত করে কাজ করে পরিচয় ম্যাট্রিক্স আকারের এন এবং পুনরায় দ্বারা উত্পন্ন তালিকা সঙ্গে এটি concatenating এন বার Singleton √ (n + 1) + 1 টি , দ্বারা বিভক্ত এন

‘½‘÷ẋW – Helper link (monadic). I'll call the argument N.

‘      – Increment N (N + 1).
 ½     – Square root.
  ‘    – Increment (√(N + 1) + 1).
   ÷   – Divide by N.
    ẋ  – Repeat this singleton list N times.
     W – And wrap that into another list.

––––––––––––––––––––––––––––––––––––––––––

=þ;Ç   – Main link.

=þ     – Outer product of equality.
  ;Ç   – Concatenate with the result given by the helper link applied to the input.

5

পাইথন 78 66 বাইট

lambda n:[i*[0]+[n]+(n+~i)*[0]for i in range(n)]+[n*[1+(n+1)**.5]]

বিশেষত এন = 1``` পরিচালনা করার ক্ষেত্রে অবশ্যই উন্নতি করা যেতে পারে ``` (এটি কীভাবে সাদাসিধাও?) ঠিক বুঝতে পেরেছি যে এটি প্রয়োজনীয় নয়। সম্ভবত এখনও উন্নতি করা যেতে পারে ^^

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

[i*[0]+[1]+(n+~i)*[0]for i in range(n)]পরিচয় ম্যাট্রিক্স তৈরি করে। সমস্ত পয়েন্ট sqrt(2)একে অপরের থেকে দূরত্ব আছে । (উন্নতির জন্য রডকে ধন্যবাদ)

এখন আমাদের n+1অন্যান্য পয়েন্টগুলির একই দূরত্বের সাথে একটি পয়েন্ট দরকার need আমাদের নির্বাচন করতে হবে (x, x, ... x)

থেকে দূরত্ব (1, 0, ... )থেকে (x, x, ... x)হয় sqrt((x-1)²+x²+...+x²)। আমরা যদি একটি nমাত্রিক সিম্প্লেক্সটি চাই তবে এটি হতে পারে sqrt((x-1)²+(n-1)x²), যেমন আমাদের প্রথম বিন্দুতে এক 1এবং n-1 0এস রয়েছে। কিছুটা সরল করুন:sqrt(x²-2x+1+(n-1)x²) = sqrt(nx²-2x+1)

আমরা এই দূরত্ব হতে চাই sqrt(2)

sqrt(2) = sqrt(nx²-2x+1)
2 = nx²-2x+1
0 = nx²-2x-1
0 = x²-2/n*x+1/n

এই চতুর্ভুজ সমীকরণটি সমাধান করা (একটি সমাধান, অন্য একটি খুব ভাল কাজ করে):

x = 1/n+sqrt(1/n²+1/n) = 1/n+sqrt((n+1)/n²) = 1/n+sqrt(n+1)/n = (1+sqrt(n+1))/n

এটিকে তালিকার nসময়ে রাখুন , সেই তালিকাটিকে একটি তালিকায় রাখুন এবং পরিচয় ম্যাট্রিক্সের সাথে যোগ দিন।


-4 বাইটস অ্যালেক্স ভার্গাকে ধন্যবাদ:

প্রতিটি ভেক্টর দ্বারা গুন করুন n। এটি পরিচয় ম্যাট্রিক্সের lambda n:[i*[0]+[n]+(n+~i)*[0](একই দৈর্ঘ্য) তৈরিতে পরিবর্তিত nহয় এবং অতিরিক্ত বিন্দু দ্বারা বিভাগ থেকে মুক্তি পায় , তাই এটি হয়ে যায় n*[1+(n+1)**.5], দুটি বন্ধনী এবং এর সঞ্চয় করে /n


যদিও এই চ্যালেঞ্জের আওতায় না থাকলেও 0 টি মাত্রিক সিম্প্লেক্সগুলিও একটি জিনিস, যতটা ভয়ঙ্কর শোনা যায়।
এটাকো

আরও কিছুটা পড়ার পরে, বিভিন্ন সংখ্যার প্রতিটি জুটি 1-সিমপ্লেক্স না?
প্যাটাক্স



1
পূর্ববর্তী মন্তব্যের সাথে
মিলিত


2

এপিএল (ডায়ালগ) , 20 18 বাইট

1 বাইট @ngn ধন্যবাদ

∘.=⍨∘⍳⍪1÷¯1+4○*∘.5

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


(∘.=⍨⍳)->∘.=⍨∘⍳
এনজিএন

@ জিএনএন আমার এই গল্ফটি দাঁড়িয়ে আছে, আমি অপেক্ষা করার অপেক্ষা রাখছিলাম আমি এটি স্থাপনের আগে আরও কিছু বাইট গলফ করতে পারি কিনা কারণ সম্পাদনা পোস্টগুলি মোবাইল ব্যবহার করে সত্যই ব্যথা হয়
উরিল

আপনার জন্য এটি সম্পাদনা করার জন্য আমি স্বাধীনতা নিয়েছি। আমিও একজন ভাল উত্তর হতে পারে সন্দেহ - এটা আমাকে মনে করিয়ে দেয় কিন্তু আমি বেশ চিন্তা করতে পারে না এটা কিভাবে কাজ করতে পারে ...
ngn

ম্যাট্রিক্স বিভাজন নিষ্ফল ছিল কিন্তু আমি একটি আকর্ষণীয় বৃত্তাকার ফাংশন পাওয়া গেছে:{÷¯1+4○⍵*.5}⍪⍳∘.=⍳
ngn

@ ধন্যবাদ। আমি একই গণনাটির জন্য আপনার সমাধানের স্বতন্ত্র সংস্করণ ব্যবহার করেছি
উরিল

1

জাভাস্ক্রিপ্ট (ES7), 70 বাইট

n=>[a=Array(n++).fill((1+n**.5)/--n),...a.map((_,i)=>a.map(_=>+!i--))]

@ পট্টুক্সের পাইথন উত্তরটির বন্দর।


1

ওল্ফ্রাম ভাষা (গণিত), 205 বাইট

f1 = Sqrt[# (# + 1)/2]/# /(# + 1) & ;
f2 = Sqrt[# (# + 1)/2]/# & ;
simplex[k_] := {ConstantArray[0, k]}~Join~Table[
   Table[f1[n], {n, 1, n - 1}]~Join~{f2[n]}~Join~
    ConstantArray[0, k - n],
   {n, k}]

গাণিতিকের সিম্প্লেক্স ফাংশন শুরু থেকে {0,0,...]},{1,0,0,...]}, প্রথম পয়েন্টটি প্রথম দিকে স্থাপন করা, xঅক্ষের উপরে দ্বিতীয় বিন্দু, তৃতীয় বিন্দুতে x,yবিমান, চতুর্থ বিন্দু x,y,zইত্যাদি। এই অগ্রগতি পূর্ববর্তী সমস্ত পয়েন্টকে পুনরায় প্রত্যাখ্যান করে, নতুন মাত্রায় এক সময় একটি নতুন পয়েন্ট যুক্ত করে

simplex[6]={{0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1/2, Sqrt[3]/2, 0, 0, 0, 
  0}, {1/2, 1/(2 Sqrt[3]), Sqrt[2/3], 0, 0, 0}, {1/2, 1/(2 Sqrt[3]), 
  1/(2 Sqrt[6]), Sqrt[5/2]/2, 0, 0}, {1/2, 1/(2 Sqrt[3]), 1/(
  2 Sqrt[6]), 1/(2 Sqrt[10]), Sqrt[3/5], 0}, {1/2, 1/(2 Sqrt[3]), 1/(
  2 Sqrt[6]), 1/(2 Sqrt[10]), 1/(2 Sqrt[15]), Sqrt[7/3]/2}}

প্রতিপাদন

In[64]:= EuclideanDistance[simplex[10][[#[[1]]]],simplex[10][[#[[2]]]]] & /@ Permutations[Range[10],{2}]//Simplify
Out[64]= {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}

1
সাইটে স্বাগতম! 1) এটি একটি কোড গল্ফ, আপনার কোডটি যতটা সম্ভব সংক্ষিপ্ত করে তোলা উচিত। 2) আপনার পোস্টটি যতটা সম্ভব পঠনযোগ্য করতে মার্কডাউন ব্যবহার করুন ।
এয়ারড কোয়েনেরিংহিংহিং


0

রুবি , 55 বাইট

সমস্ত মাত্রার জন্য একই পরিমাণের ফিরে আসার পরিবর্তে সূত্রটি সহজ করার জন্য (1+(n+1)**0.5)/nএকটি ফ্যাক্টর দ্বারা আমি স্কেল করা সূত্রটি ব্যবহার না nকরে(1+(n+1)**0.5)

->n{(a=[n]+[0]*~-n).map{a=a.rotate}+[[1+(n+1)**0.5]*n]}

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

পরীক্ষা প্রোগ্রামে ungolfed

একটি ল্যাম্বডা ফাংশন nআর্গুমেন্ট হিসাবে গ্রহণ করে এবং অ্যারের অ্যারে ফিরিয়ে দেয়।

f=->n{
  (a=[n]+[0]*~-n).map{        #setup an array `a` containing `n` and `n-1` zeros. perform `n` iterations (which happens to be the the size of the array.)
  a=a.rotate}+                #in each iteration rotate `a` and return an array of all possible rotations of array `a`     
  [[1+(n+1)**0.5]*n]          #concatenate an array of n copies of 1+(n+1)**0.5
}

p f[3]                        # call for n=3 and print output

আউটপুট

[[0, 0, 3], [0, 3, 0], [3, 0, 0], [3.0, 3.0, 3.0]]


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