সংখ্যা ত্রিভুজ ফ্লিপ


30

বলুন আপনি একটি ত্রিভুজটিতে ধনাত্মক পূর্ণসংখ্যার তালিকা তৈরি করুন, তারপরে এটিকে বাম থেকে ডানে উল্টান। একটি নম্বর দেওয়া হয়েছে, এতে প্রেরিত নম্বরটি আউটপুট করুন। এটি একটি স্ব-বিপরীত ম্যাপিং।

         1                      1         
       2   3                  3   2       
     4   5   6    <--->     6   5   4     
   7   8   9  10         10   9   8   7   
11  12  13  14  15     15  14  13  12  11

এটি এক- সূচকযুক্ত A038722 এর n তম উপাদান :

1, 3, 2, 6, 5, 4, 10, 9, 8, 7, 15, 14, 13, 12, 11, ...

এই ক্রমটি ক্রমবর্ধমান দৈর্ঘ্যের সাথে ধনাত্মক পূর্ণসংখ্যার সংলগ্ন অংশগুলি বিপরীত করে:

 1, 3, 2, 6, 5, 4, 10, 9, 8, 7, 15, 14, 13, 12, 11, ...
<-><----><-------><-----------><------------------>

পরীক্ষার কেস:

1 -> 1
2 -> 3
3 -> 2
4 -> 6
14 -> 12
990 -> 947
991 -> 1035
1000 -> 1026
1035 -> 991
1036 -> 1081
12345 -> 12305

লিডারবোর্ড:

উত্তর:


15

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

n=>((2*n)**.5+.5|0)**2-n+1

ওইআইএস থেকে নিম্নলিখিত সূত্র একটি বাস্তবায়ন :

সূত্র

ডেমো


আমি এটির পূর্ণসংখ্যায় পরিণত করতে OR অপারেশনটি পছন্দ করি! সুন্দর কাজ!
ক্রেগআর 8806

7

জেলি , 8 7 বাইট

RṁR€UFi

1 বাইট সংরক্ষণের জন্য @ এরিকটআউটগলফারকে ধন্যবাদ!

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

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

RṁR€UFi  Main link. Argument: n

R        Range; yield [1, ..., n].
  R€     Range each; yield [[1], [1, 2], [1, 2, 3], ..., [1, ..., n]].
 ṁ       Mold the left argument like the right one, yielding
         [[1], [2, 3], [4, 5, 6], ...]. The elements of the left argument are 
         repeated cyclically to fill all n(n+1)/2 positions in the right argument.
    U    Upend; reverse each flat array, yielding [[1], [3, 2], [6, 5, 4], ...].
     F   Flatten, yielding [1, 3, 2, 6, 5, 4, ...].
      i  Index; find the first index of n in the result.

6

অ্যালিস , 27 বাইট

ধারণাটির জন্য Sp3000 ধন্যবাদ .C

/o
\i@/.2:e2,tE*Y~Z.H2*~.C+

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

ব্যাখ্যা

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

প্রাথমিক ধারণাটি অ্যালিসের "প্যাক" এবং "আনপ্যাক" বিল্ট-ইনগুলি ব্যবহার করা। "প্যাক", বা Z, দুটি পূর্ণসংখ্যার মানচিত্রগুলিকে একক পূর্ণসংখ্যায় বাইজিকভাবে নেয়। "আনপ্যাক করুন", বা Y, এই সক্ষমতাটিকে উল্টে দেয় এবং একটি পূর্ণসংখ্যাকে দুটি করে তোলে। সাধারণত, এটি একটি একক (বৃহত) পূর্ণসংখ্যায় পূর্ণসংখ্যার একটি তালিকা বা গাছ সঞ্চয় করতে এবং পরে পৃথক মানগুলি পুনরুদ্ধার করতে ব্যবহৃত হতে পারে। তবে, এক্ষেত্রে আমরা দ্বিপক্ষের প্রকৃতিটি আমাদের জন্য কাজ করতে, বিপরীত ক্রমে ফাংশনগুলি ব্যবহার করতে পারি।

একটি পূর্ণসংখ্যাকে দুটি পূর্ণসংখ্যায় আনপ্যাক করা মূলত তিনটি ধাপ নিয়ে গঠিত:

  1. সাধারণ "ভাঁজ" সহ মানচিত্র zero → → (শূন্য সহ) এটি, অদ্ভুত প্রাকৃতিকগুলিতে নেতিবাচক পূর্ণসংখ্যার মানচিত্র এবং এমনকি প্রাকৃতিকগুলিতে অ-নেতিবাচক পূর্ণসংখ্যার মানচিত্র।
  2. ক্যান্টোর জুড়ি ফাংশনটি ব্যবহার করে মানচিত্র ℕ → ℕ 2 । এটি হ'ল প্রকৃতিগুলি অসীম গ্রিডের তির্যক বরাবর রচিত এবং আমরা সূচকগুলি ফিরিয়ে দিই:

       ...
    3  9 ...
    2  5 8 ...
    1  2 4 7 ...
    0  0 1 3 6 ...
    
       0 1 2 3
    

    উদাহরণস্বরূপ 8জোড় ম্যাপ করা হবে (1, 2)

  3. প্রতিটি পূর্ণসংখ্যায় পৃথকভাবে পদক্ষেপ 1 এর বিপরীতটি ব্যবহার করে মানচিত্র 2 → ℤ 2 । এটি, অদ্ভুত প্রাকৃতিকগুলি নেতিবাচক পূর্ণসংখ্যার সাথে ম্যাপ হয় এবং প্রাকৃতিক এমনকি অ-নেতিবাচক পূর্ণসংখ্যায় ম্যাপ হয়।

একটিতে দুটি পূর্ণসংখ্যার প্যাক করতে, আমরা কেবল সেই পদক্ষেপগুলির প্রতিটি উল্টে করি।

এখন, আমরা দেখতে পারি ক্যান্টোর জুড়ি ফাংশনের কাঠামোটি আমাদের প্রয়োজনীয় ত্রিভুজটি সুবিধামতভাবে এনকোড করে (যদিও মানগুলি একে অপরের দ্বারা পৃথক হয়)। এই ত্রিভুজগুলিকে বিপরীতে ফেলার জন্য আমাদের x এবং y স্থানাঙ্কগুলি গ্রিডে অদলবদল করতে হবে ।

দুর্ভাগ্যক্রমে, যেহেতু উপরের তিনটি পদক্ষেপ একক অন্তর্নির্মিত Y(বা Z) এর সাথে একত্রিত হয়েছে , তাই আমাদের নিজেরাই ℤ → ℕ বা ℕ → ℤ ম্যাপিংগুলি পূর্বাবস্থায় ফেলা দরকার । তবে, এটি করার সময় আমরা টেবিলের বাইরের ওয়ান ত্রুটির যত্ন নিতে সরাসরি + → ℤ বা ℤ → ℕ + ম্যাপিংগুলি ব্যবহার করে কয়েকটি বাইট সংরক্ষণ করতে পারি । সুতরাং এখানে সম্পূর্ণ অ্যালগরিদম:

  1. ম্যাপ + + → ℤ ব্যবহার (ঢ / 2) * (-1) এন -1 । এই ম্যাপিংটি এমনভাবে চয়ন করা হয়েছে যে এটি আনপ্যাক করার সময় অন্তর্নিহিত ℤ → ℕ ম্যাপিং বাতিল করে , ব্যতীত এটি মানটিকে 1 দ্বারা নামিয়ে দেয়।
  2. ফলাফলটি দুটি পূর্ণসংখ্যায় আনপ্যাক করুন।
  3. তাদের অদলবদল করুন।
  4. অদলবদল করা মানগুলি একটি একক পূর্ণসংখ্যায় আবার প্যাক করুন।
  5. | 2n | ব্যবহার করে মানচিত্র ℤ → ℕ + + + (N≥0) । আবার, এই ম্যাপিংটি এমনভাবে বেছে নেওয়া হয়েছে যে এটি প্যাকিংয়ের সময় অন্তর্নিহিত ℕ। ℤ ম্যাপিং বাতিল করে , ব্যতীত এটি মানটিকে 1 দ্বারা উপরে স্থানান্তর করে।

উপায় ছাড়াই, আমরা প্রোগ্রামটি দেখতে পারি:

/o
\i@/...

এটি কেবল পূর্ণসংখ্যার ইনপুট এবং আউটপুট সহ রৈখিক গাণিতিক প্রোগ্রামগুলির জন্য একটি কাঠামো।

.    Duplicate the input.
2:   Halve it.
e    Push -1.
2,   Pull up the other copy of the input.
t    Decrement.
E    Raise -1 to this power.
*    Multiply. We've now computed (n/2) * (-1)^(n-1).
Y    Unpack.
~    Swap.
Z    Pack.
.H   Duplicate the result and take its absolute value.
2*   Double.
~    Swap with other copy.
.C   Compute k-choose-k. That's 1 for k ≥ 0 and 0 for k < 0.
+    Add. We've now computed |2n| + (n≥0).



4

অক্টাভা , 71 68 বাইট

3 বাইট কনর ওব্রায়েনকে ধন্যবাদ রক্ষা করেছে ।

x=triu(ones(n=input('')));x(~~x)=1:nnz(x);disp(nonzeros(flip(x))(n))

স্মৃতি সীমাবদ্ধতার কারণে এটি বড় ইনপুটগুলির জন্য কাজ করে না।

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

ব্যাখ্যা

ইনপুট বিবেচনা করুন n = 4। কোডটি প্রথমে ম্যাট্রিক্স তৈরি করে

 1     1     1     1
 0     1     1     1
 0     0     1     1
 0     0     0     1

তারপর এটি কলাম-প্রধান অনুক্রমে অশূন্য এন্ট্রি প্রতিস্থাপন (নিচে, তারপর জুড়ে) দ্বারা 1, 2, 3...:

 1     2     4     7
 0     3     5     8
 0     0     6     9
 0     0     0    10

তারপরে এটি ম্যাট্রিক্সকে উল্লম্বভাবে উল্টে:

 0     0     0    10
 0     0     6     9
 0     3     5     8
 1     2     4     7

অবশেষে, এটি nকলাম-প্রধান ক্রমে-তম নঞ্জেরো মান নেয় , যা এই ক্ষেত্রে 6


1
@ rahnema1 যে eপ্রতিভা! আপনার অন্যান্য খুব ভাল পরামর্শের সাথে উত্তর হিসাবে অবশ্যই এটি পোস্ট করা উচিত। যেমন ans =, আমি কখনই নিশ্চিত নই যে এটি বৈধ বা না
লুইস মেন্ডো

4

হাস্কেল , 31 বাইট

r=round
f n=r(sqrt$2*n)^2-r n+1

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

এই উত্তরটি কেবল সূত্রটি ব্যবহার করে। এটি এখানে সবচেয়ে কম আকর্ষণীয় উত্তর, তবে এটি গল্ফিয়েস্ট হিসাবেও ঘটে।

হাস্কেল , 38 36 34 বাইট

x!y|x<=y=1-x|v<-y+1=v+(x-y)!v
(!0)

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

(!0) আমাদের সাথে সম্পর্কিত পয়েন্ট ফ্রি ফাংশন।

ব্যাখ্যা

আমি এই উত্তরটি দিয়ে খুব খুশি হয়ে বলে শুরু করি।

এখানে মূল ধারণাটি হ'ল আমরা যদি আমাদের ইনপুটের চেয়ে ছোট বৃহত্তম ত্রিভুজাকার সংখ্যাটি সরিয়ে ফেলি তবে আমরা এটিকে বিপরীত করতে এবং ত্রিভুজাকার সংখ্যাটি আবার যুক্ত করতে পারি। সুতরাং আমরা একটি অপারেটর সংজ্ঞায়িত !, !আমাদের নিয়মিত ইনপুট, লাগে x, কিন্তু এটি একটি অতিরিক্ত নেয় yyক্রমবর্ধমান ত্রিভুজাকার সংখ্যার আকারের উপর নজর রাখে। তাহলে x>yআমরা recurse করতে চাই, আমরা হ্রাস xদ্বারা yএবং বৃদ্ধি yএকের পর। সুতরাং আমরা গণনা (x-y)!(y+1)এবং y+1এটিতে যুক্ত। তাহলে x<=yআমরা আমাদের বেস কেস পৌঁছেছেন, বিপরীত xত্রিভুজ আমরা ফিরে সারি 's বসানো 1-x

হাস্কেল , 54 বাইট

f x|u<-div(x^2-x)2=[u+x,u+x-1..u+1]
(!!)$0:(>>=)[1..]f

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

(!!)$0:(>>=)[1..]f একটি বিন্দু মুক্ত ফাংশন

ব্যাখ্যা

প্রথম জিনিস আমরা সঙ্গে উদ্বিগ্ন f, fএকটি ফাংশন যে লাগে xএবং আয় xবিপরীত তম ত্রিভুজ তম সারি। এটি প্রথমে x-1এনডি ত্রিভুজাকার সংখ্যা গণনা করে এবং এটি প্রদান করে uu<-div(x^2-x)2। তারপরে আমরা তালিকাটি ফিরিয়ে দিই [u+x,u+x-1..u+1]u+xহয় xতম ত্রিদলীয় নম্বর এবং সারিতে প্রথম সংখ্যা, u+x-1যে এর চেয়ে এক কম এবং সারিতে দ্বিতীয় সংখ্যা u+1এক শেষ ত্রিদলীয় সংখ্যা বেশি এবং এইভাবে সারিতে শেষ নম্বর।

একবার আমরা fএকটি তালিকা তৈরি করি (>>=)[1..]fযা ত্রিভুজটির সমতলকরণ। আমরা সামনের সাথে শূন্য যুক্ত করব 0:যাতে আমাদের উত্তরগুলি একের সাথে অফসেট না হয়ে যায় এবং এটি আমাদের সূচক ফাংশনে সরবরাহ করে (!!)

হাস্কেল , 56 বাইট

f 0=[0]
f x|u<-f(x-1)!!0=[u+x,u+x-1..u+1]
(!!)$[0..]>>=f

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

এটি একটি 2 বাইট লম্বা তবে আমার মতে কিছুটা মার্জিত।


3

সি (জিসিসি) , 48 বাইট

k,j,l;f(n){for(k=j=0;k<n;)l=k,k+=++j;n=1+k-n+l;}

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

সম্ভবত suboptimal, কিন্তু আমি এই এক সাথে খুব খুশি। সত্য যে ব্যবহার করে

এনটিএফ এন = টি এন + এ 057944 ( এন ) - এন + 1

(আমি যদি সূত্রটি সঠিকভাবে লিখে রাখি তবে তা))


আপনি রিটার্ন কল করছেন না, তবে ফেরতের মান ব্যবহার করা হচ্ছে। এটি অপরিজ্ঞাত আচরণ।
2501

@ 2501 যতক্ষণ প্রোগ্রামটি কাজ করে ততক্ষণ এটি অনুমোদিত। এবং, কোনও ফাংশনের প্রথম যুক্তিতে লিখন একটি মান ফেরত দেওয়ার সমতুল্য।
কনর ও'ব্রায়েন

এবং, কোনও ফাংশনের প্রথম যুক্তিতে লিখন একটি মান ফেরত দেওয়ার সমতুল্য। সি ভাষায় এ জাতীয় কোনও বিষয় বিদ্যমান নেই। মান এমনকি স্পষ্টতই বলে দেয় যে ফাংশন থেকে প্রত্যাবর্তিত মান ব্যবহার করে যা প্রত্যাবর্তন করে না তা হ'ল সংজ্ঞায়িত আচরণ।
2501

1
@ 2501 আপনি সি নির্দিষ্টকরণের জন্য সি পরিবেশ (জিসিসি) বিভ্রান্ত করছেন বলে মনে হচ্ছে। হ্যাঁ, সি ল্যাঙ্গুয়েজ / স্পেক এটিকে অনির্ধারিত বলে ডাকে, তবে এটি যেমন বাস্তবায়িত হয়। সুতরাং যখন আমি "সমতুল্য" বলি, আমি সেক্ষেত্রে সর্বাধিক স্পষ্টতই জি সি সি এবং অন্যান্য সংকলক দ্বারা সি প্রয়োগের কথা উল্লেখ করছি। পিপিসিজিতে আমরা "নিখুঁত" কোডটি লিখি না - গল্ফিংয়ের কারণে অনেক কোড স্পেসিফিকেশনের বিপরীতে যায়। আমি যেমন বলেছি, যতক্ষণ না এটি কাজ করে ততক্ষণ এটি বৈধ উত্তর।
কনর ও'ব্রায়ান

@ 2501 আমি আপনাকে মেটা সাইটের কিছু নিবন্ধ পড়তে উত্সাহিত করছি, বিশেষত এটি
কনর ও'ব্রায়েন

2

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

U1V[YLO>X›iYLOX-UY<LO>X+,q}Y>V

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


আমি "কি? কোনও 05 ইউ 1 ই উত্তর ইউনিকোড ছাড়াই বলতে চলেছি?" তবে তারপরে একটি নন-এএসসিআইআই চরিত্রটি এটিকে নষ্ট করে দেয় ...: পি চমৎকার উত্তরটি প্রথমদিকে প্রোগ্রামিং ধাঁধা এবং কোড গল্ফে স্বাগতম!
ক্লিমেমিক

@ কিওয়ার্প-ডের্প আপনাকে অনেক ধন্যবাদ! আমি এই ভাষাটি শিখতে শুরু করেছি, তাই আমার উত্তরটি খারাপ ছিল তা নিয়ে আমি অবাক হই না।
এডুয়ার্ডো হোয়েফেল


2

টিনাইলিস্প , 78 বাইট

(d _(q((R N T)(i(l T N)(_(a R 1)N(a T R))(a 2(a T(s T(a N R
(d f(q((N)(_ 2 N 1

fম্যাপিং সম্পাদন করে এমন একটি ফাংশন সংজ্ঞায়িত করে। এটি অনলাইন চেষ্টা করুন!

Ungolfed

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

  • যদি বর্তমান ত্রিভুজাকার সংখ্যা N এর চেয়ে কম হয় তবে ত্রিভুজের পরবর্তী সারিতে পুনরাবৃত্তি করুন। (আমরা গণিতকে আরও সহজ করার জন্য উপরের সারিকে 2 সারি হিসাবে বিবেচনা করি))
  • অন্যথায়, এন এর উল্টানো সংস্করণটি হ'ল (টিএন) + (টিআর) +২।

মূল ফাংশনটি শীর্ষ সারি থেকে শুরু flipকরে সহায়ক সহায়কটিকে কল করে _flip

(load library)

(def _flip
 (lambda (Num Row Triangular)
  (if (less? Triangular Num)
   (_flip Num (inc Row) (+ Triangular Row))
   (+ 2
    (- Triangular Num)
    (- Triangular Row))))))

(def flip
 (lambda (Num) (_flip Num 2 1)))

1

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

·LD£í˜¹<è

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

ব্যাখ্যা

·L          # push range [1 ... 2n]
  D         # duplicate
   £        # split the first list into pieces with size dependent on the second list
    í       # reverse each sublist
     ˜      # flatten
      ¹<è   # get the element at index <input>-1

দুর্ভাগ্যক্রমে অ্যারে চ্যাপ্টা বড় তালিকা খুব ভাল পরিচালনা করে না।
1 বাইট খরচ আমরা কাজ করতে পারে · t2z + + ïn¹-> গাণিতিক সূত্র ব্যবহার করে floor(sqrt(2*n)+1/2)^2 - n + 1পাওয়া OEIS


1

ব্যাচ, 70 বাইট

@set/ai=%2+1,j=%3+i
@if %j% lss %1 %0 %1 %i% %j%
@cmd/cset/ai*i+1-%1

কমপক্ষে বৃহত্তর ত্রিভুজাকার সংখ্যার সূচক খুঁজতে একটি লুপ ব্যবহার করে n




0

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

আমি একই বাইকোয়েন্টে দুটি সমাধান পেয়েছি।

একটি ট্রেন:

⊢⊃⊃∘(,/{⌽(+/⍳⍵-1)+⍳⍵}¨∘⍳)

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

এবং একটি ডিএফএন:

{⍵⊃⊃((⍳⍵),.{1+⍵-⍳⍺}+\⍳⍵)}

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

এই উভয় সমাধানই প্রথমে উল্টানো ত্রিভুজ তৈরি করে এবং তারপরে আর্গুমেন্ট দ্বারা বর্ণিত সূচীতে উপাদানটি বের করে ( 1-ভিত্তিতে)।


0

জে, 25 বাইট

3 :'>:y-~*:>.-:<:%:>:8*y'

ব্যাখ্যা হিসাবে বিবেচনা করুন f(n) = n(n+1)/2f(r)সারি দেওয়া হলে r, মিররযুক্ত ত্রিভুজটির rতম সারির বামতম সংখ্যাটি প্রদান করে । এখন, বিবেচনা করুন g(n) = ceiling[f⁻¹(n)]g(i)সূচকটি দেওয়া হলে i, আমি যে সারিটি খুঁজে পাই তার সারিটি প্রদান করে। তারপরে, f(g(n))যে সারির উপর সূচক n পাওয়া গেছে তার সর্বাধিক বাম সংখ্যাটি প্রদান করে। সুতরাং, h(n) = f(g(n)) - (n - f(g(n)-1)) + 1উপরের সমস্যার উত্তর।

সরলকরণ, আমরা পেয়েছি h(n) = [g(n)]² - n + 1 = ceiling[(-1 + sqrt(1 + 8n))/2]² - n + 1

@ আরনাউল্ডের সূত্রটি দেখে, এটি প্রদর্শিত হবে:

ceiling[(-1 + sqrt(1 + 8n))/2] = floor[1/2 + sqrt(2n)]


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