আমার আউটপুট তির্যক অবস্থানগুলি বর্গক্ষেত্র


18

একটি নম্বর দেওয়া হয়েছে n, n*nবর্গক্ষেত্রের ম্যাট্রিক্সের যে কোনও ত্রিভুজের উপর পড়ে 1-ভিত্তিক সূচকগুলির একটি আদেশযুক্ত তালিকা আউটপুট করুন ।

উদাহরণ:

এর একটি ইনপুট জন্য 3:

বর্গটি হবে:

1 2 3
4 5 6
7 8 9

এখন আমরা সব দ্বারা প্রতিনিধিত্ব সূচকের নির্বাচন \, /বা X( #বা অ তির্যক অবস্থানের বাতিল করা হয়)

\ # /
# X #
/ # \

আউটপুট হবে:

[1,3,5,7,9]

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

1=>[1]
2=>[1,2,3,4]
3=>[1,3,5,7,9]
4=>[1,4,6,7,10,11,13,16]
5=>[1,5,7,9,13,17,19,21,25]

কোনও গ্রহণযোগ্য উত্তর থাকবে না। আমি প্রতিটি ভাষার জন্য সংক্ষিপ্ততম কোডটি জানতে চাই।


1
প্রশ্নটি ইমেজগুলিতে /, / এবং এক্স অক্ষরের সূচকগুলির জন্য (1-সূচিত) জিজ্ঞাসা করছে। প্রতি সেজে কোনও খারাপ প্রশ্ন নয়, তবে ব্যাখ্যাটির অভাব রয়েছে।
আরেফি

আপনি যদি চান তার একটি সংক্ষিপ্ত এবং স্পষ্ট ব্যাখ্যা সরবরাহ করতে রাজি হন তবে আমরা সম্ভবত এটি আবার খুলব, কারণ এটি কোনও খারাপ চ্যালেঞ্জ নয়। এখন পর্যন্ত এটি কেবল খুব স্পষ্ট নয়
মিঃ এক্সকোডার

আমি আবার খোলার পক্ষে মতামত দিয়েছি, যদিও আপনি বিভ্রান্তি এড়াতে উদাহরণস্বরূপ আসকি চিত্রগুলি সরিয়ে নিতে চাইবেন। প্রথমে আমি নিশ্চিত ছিলাম না যে আমিও সেগুলি উত্পাদন করতে পেরেছি (তবে আমি বুঝতে পারি যে ওয়ান্টেড আউটপুটটি কেবল সূচকগুলির তালিকা)
আরফি

7
অর্ডার কি ব্যাপার?
মিঃ এক্সকোডার

9
এফডাব্লুআইডাব্লু আমি মনে করি অর্ডারটি অপ্রাসঙ্গিক হওয়ায় আরও আকর্ষণীয় গল্ফগুলি হতে পারে ...
জোনাথন অ্যালান

উত্তর:



7

জাভাস্ক্রিপ্ট (ES6), 48 বাইট

স্ট্রিং হিসাবে পূর্ণসংখ্যার ড্যাশ-বিচ্ছিন্ন তালিকা আউটপুট করে।

f=(n,k=n*n)=>--k?f(n,k)+(k%~-n&&k%-~n?'':~k):'1'

ফর্ম্যাট এবং মন্তব্য

f = (n, k = n * n) => // given n and starting with k = n²
  --k ?               // decrement k; if it does not equal zero:
    f(n, k) + (       //   return the result of a recursive call followed by:
      k % ~-n &&      //     if both k % (n - 1) and
      k % -~n ?       //             k % (n + 1) are non-zero:
        ''            //       an empty string
      :               //     else:
        ~k            //       -(k + 1) (instantly coerced to a string)
    )                 //   end of iteration
  :                   // else:
    '1'               //   return '1' and stop recursion

পরীক্ষার মামলা


পৃথক হিসাবে চিহ্নগুলি ব্যবহার করে খুব ভাল লাগছে ar &বাইট বাঁচাতে আপনি কি বিটউজি ব্যবহার করতে পারবেন?
শেগি

@ শেগি না, এটি কাজ করবে না। উদাহরণস্বরূপ: 4%3এবং 4%5কোনও বিট মিল নেই, তবে উভয়ই শূন্য নয়।
আর্নল্ড

হ্যাঁ, সবেমাত্র এটি পরীক্ষা করে n=5দেখেছি যে এটি কার্যকর হবে না।
শেগি

k%~-n&&k%-~nকাজ করা উচিত. বিভাজক সঙ্গে দুর্দান্ত কৌশল!
টাইটাস

@ টিটাস এটি নয় যে গল্ফিংয়ের ক্ষেত্রে এটি আসলেই গুরুত্বপূর্ণ but তবে হ্যাঁ, এটি কিছুটা বেশি পঠনযোগ্য। :-) (আপডেট হয়েছে)
আর্নল্ড

7

আর , 38 35 34 38 বাইট

whichফাংশনের অস্তিত্ব সম্পর্কে মনে পড়লে 3 বাইট সংরক্ষণ করা হয়েছে ..., 1 বাইট সংরক্ষিত হয়েছে @ রিফ্টকে ধন্যবাদ

d=diag(n<-scan());which(d|d[n:1,])

ec=Tদ্বারা পূর্ণ প্রোগ্রাম হিসাবে কল করার পরে আর্গুমেন্টের জন্য +4 বাইটsource()

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

ব্যাখ্যা:

n<-scan()            # take input
d=diag(n);           # create an identity matrix (ones on diagonal, zeros elsewhere)
d|d[n:1,]            # coerce d to logical and combine (OR) with a flipped version
which([d|d[n:1,]])   # Find indices for T values in the logical expression above

1
-1 বাইটd=diag(n<-scan());which(d|d[n:1,])
রিফ্ট

যখন এটি সম্পূর্ণ প্রোগ্রাম হিসাবে চালিত হয় ( source) এটি কোনও কিছুই মুদ্রণ করে না। আপনাকে ফোন করতে হবে cat। মেটাতে এই পোস্টটি দেখুন ।
জেএডি

@ জারকো ডাবডেলডাম ফেয়ার যথেষ্ট! আমি সর্বদা এই ভিত্তিতে কাজ করেছিলাম যে এটি টিআইওতে বৈধ আউটপুট দেয়, সত্যই কখনও "পূর্ণ প্রোগ্রাম" হওয়ার প্রয়োজনীয়তা বিবেচনা করে না।
ব্যবহারকারী 2390246

যদিও আমি এটিকে ঠিক করার জন্য আমার সমস্ত পুরানো উত্তর ফিরে যেতে এবং সম্পাদনা করার পরিকল্পনা করছি না!
ব্যবহারকারী 2390246

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

6

জেলি , 8 বাইট

⁼þ`+Ṛ$ẎT

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

তার এমএটিএল উত্তরে লুই মেন্ডোর অ্যালগরিদম ব্যবহার করুন।


মিঃএম, আমি আপনাকে অবাক করে দিয়েছি না ŒD
মিঃ এক্সকোডার

@ মিঃ এক্সকোডার ŒDএকটি নির্দিষ্ট আকারের এক্স থেকে সম্পূর্ণ আলাদা কিছু করে।
এরিক দি আউটগল্ফার

5

অক্টাভা , 41 37 বাইট

এটি এমএটিএলবি-তেও উপায় দ্বারা কাজ করে। কোনও ছদ্মবেশী অক্টাভে নির্দিষ্ট কার্যকারিতা নেই :)

@(x)unique([x:x-1:x^2-1;1:x+1:x*x+1])

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

ব্যাখ্যা:

বর্গক্ষেত্রের ম্যাট্রিক্স তৈরি করার পরিবর্তে এবং দুটি তির্যকটি খুঁজে বের করার পরিবর্তে আমি ঠিক করেছি এর পরিবর্তে সরাসরি ত্রিভুজ গণনা করেছি ulate এটি ছিল 17 বাইট সংক্ষিপ্ত! =)

@(x)                                   % Anonymous function that takes 'x' as input
    unique(...                   ...)  % unique gives the unique elements, sorted
           [x:x-1:x^2-1                % The anti-diagonal (is that the correct word?)
                       ;               % New row
                        1:x+1:x*x+1])  % The regular diagonal

এটি দেখতে দেখতে এটির মতো দেখাচ্ছে unique:

ans =    
    6   11   16   21   26   31
    1    8   15   22   29   36

হ্যাঁ, এটিকে আরও মানব-বান্ধব করার জন্য আমার সম্ভবত ত্রিভুজগুলির ক্রমটি উল্টানো উচিত ছিল।


5

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

XytP+f

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

ব্যাখ্যা

আমার অক্টাভা উত্তর হিসাবে একই পন্থা।

3উদাহরণ হিসাবে ইনপুট বিবেচনা করুন ।

Xy   % Implicit input. Identity matrix of that size
     % STACK: [1 0 0;
               0 1 0;
               0 0 1]
t    % Duplicate
     % STACK: [1 0 0
               0 1 0
               0 0 1],
              [1 0 0
               0 1 0
               0 0 1]
P    % Flip vertically
     % STACK: [1 0 0
               0 1 0
               0 0 1],
              [0 0 1
               0 1 0
               1 0 0]
+    % Add
     % STACK: [1 0 1
               0 2 0
               1 0 1]
f    % Linear indices of nonzero entries. Implicit display  
     % STACK:[1; 3; 5; 7; 9]

লিনিয়ার সূচি কলাম-প্রধান , 1-ভিত্তিক। আরও তথ্যের জন্য দৈর্ঘ্য-12 snippet দেখতে এখানে


"ট্রান্সপোজ" এর অর্থ কী?
এরিক দি আউটগল্ফার

দুঃখিত, আমার খারাপ। tসদৃশ, ট্রান্সপোজ নয়। এছাড়াও, আমি একটি
লুইস মেন্ডো

অ্যামেজিং! আমি এটি সম্পাদন করতে চাইলে আমার দুটি লুপ লাগবে।
এমআর 5

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


4

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

14 বাইট সংরক্ষণের জন্য @ স্টিভি গ্রিফিনকে ধন্যবাদ!

@(x)unique([diag(m=reshape(1:x^2,x,x)),diag(flip(m))])

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

ম্যাটল্যাব, 68 বাইট

x=input('');m=reshape([1:x*x],x,x);unique([diag(m) diag(flipud(m))])

ব্যাখ্যা:

@(x)                               % Anonymous function
m=reshape([1:x*x],x,x);            % Create a vector from 1 to x^2 and
                                   % reshape it into an x*x matrix.
diag(m)                            % Find the values on the diagonal.
diag(flip(m))                      % Flip the matrix upside down and
                                   % find the values on the diagonal.
unique([])                         % Place the values from both diagonals
                                   % into a vector and remove duplicates.

@ লুইস মেন্ডো ধন্যবাদ, জিমি আমার প্রিয়।
স্টেডিবক্স

4

গণিত, 42 বাইট

Union@Flatten@Table[{i,#+1-i}+i#-#,{i,#}]&

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

পছন্দ করেছেন

গণিত, 37 বাইট

##&@@@Table[{i-#,1-i}+i#,{i,#}]⋃{}&

এবং @ আলেফালফ টেবিলটি ফেলে দিলেন!

গণিত, 34 বাইট

Union@@Range[{1,#},#^2,{#+1,#-1}]&

##&@@@Table[{i-#,1-i}+i#,{i,#}]⋃{}&5 বাইট সংক্ষিপ্ত
কেলি লোডার

Union@@Range[{1,#},#^2,{#+1,#-1}]&
আলেফাল্ফ


2


কি দারুন! দয়া করে এটি পোস্ট করুন, আমি শেষ পর্যন্ত আমার মুছে
ফেলব

1
আপনি যদি আপনার উত্তরের সাথে এটি যুক্ত না করে থাকেন তবে আমি এটি পোস্ট করব; তবে আপনার মুছতে হবে না
লুইস মেন্ডো


2

সি # (.নেট কোর) , 97 83 বাইট

f=>{var s="[";for(int i=0;i<n*n-1;)s+=i%-~n<1|i++%~-n<1?i+",":"";return s+n*n+"]";}

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

এখানে পরিবর্তনগুলি অনুসন্ধানের জন্য সংখ্যার মধ্যে স্থানান্তরের ভিত্তিতে তৈরি। 0 থেকে শুরু দুই বদল আনতে হয় n-1এবং n+1, তাই যদি n=5, জন্য নম্বর n-1হবে 0,4,8,12,16,20এবং জন্য n+1হবে 0,6,12,18,24। এগুলির সাথে সম্মিলন করে 1-ইনডেক্সিং (0-ইনডেক্সিংয়ের পরিবর্তে) দেয় 1,5,7,9,13,17,19,21,25। অফসেটটি nবিটওয়াইজ নেগেশন (বিটওয়াইস পরিপূরক অপারেশন), কোথায় ~-n==n-1এবং ব্যবহার করে অর্জন করা হয়েছে -~n==n+1

পুরাতন রুপ

f=>{var s="[";for(int i=0;i<n*n-1;i++)s+=(i/n!=i%n&&n-1-i/n!=i%n?"":i+1+",");return s+$"{n*n}]";}

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

এই পদ্ধতির সংখ্যাটি ত্রিভুজটিতে রয়েছে কিনা তা নির্ধারণের জন্য কলাম এবং সারি সূচকগুলি ব্যবহার করে। i/nসারি সূচক i%nদেয় এবং কলাম সূচি দেয়।

কেবলমাত্র নম্বর অ্যারে রিটার্নিং

যদি কেবল সংখ্যার অ্যারে তৈরি করা বাইট ব্যয়ের জন্য গণনা করা হয়, তবে ডেনিসের ভিত্তিতে নিম্নলিখিতটি করা যেতে পারে er ভার্ভিজের পরামর্শ ( using System.Linq;অতিরিক্ত 18 বাইট যোগ করুন):

সি # (.নেট কোর) , 66 + 18 = 84 বাইট

x=>Enumerable.Range(1,x*x).Where(v=>~-v%~-x<1|~-v%-~x<1).ToArray()

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


আপনি অতিরিক্ত ছাড়িয়ে কোডটি হ্রাস করতে পারেন &। অতিরিক্ত &আছে শুধুমাত্র তুলনা বিরতি যদি প্রথম ইনপুট মিথ্যা দুটিই MSDN
Dennis.Verweij


@ ডেনিস.ভেরউইজ ঝরঝরে, আমি টিআইও-র শিরোনাম বা পাদচরণে কতটা স্থানান্তর করতে পারি তা নিশ্চিত ছিলাম না। আমার সাথে আমার একটা খেলা হবে
আইয়ব

আপনাকে লিনকের রেফারেন্সের জন্য 18 বাইট অন্তর্ভুক্ত রাখতে হবে (সিস্টেম.লিনক ব্যবহার করে) যা দুর্ভাগ্যজনক তবে এটি কীভাবে কাজ করে: এস
ডেনিস।ভেরউইজ

আহ, ঠিক আছে. কিন্তু এর জন্য using System;কি প্রয়োজনীয় নয় ? (আমি ধরে নিলাম এটি একটি মোড়কে namespace System.Linqবৈধ নয়?)
আইয়ব 4 বিটিটু

2

জাভাস্ক্রিপ্ট, 73 63 বাইট

পুরাতন রুপ

n=>[...Array(y=n*n).keys(),y].filter(x=>(--x/n|0)==x%n||(x/n|0)==n-x%n-1)

@ শ্যাগগি 10 টি বাইট সংরক্ষণ করা হয়েছে

n=>[...Array(n*n)].map((_,y)=>y+1).filter(x=>!(--x%-~n&&x%~-n))

প্রথমবার গল্ফিং! এখানে আমি আশা করি যে আমি খুব খারাপভাবে গণ্ডগোল করিনি।


পিপিসিগিতে স্বাগতম: :) ​​আমি যার সাথে কাজ করছিলাম তার অনুরূপ সমাধান (কেবলমাত্র খনি 0-সূচিযুক্ত)। আপনার filterফাংশনে নিম্নলিখিতটি ব্যবহার করে আপনি কিছু বাইট সংরক্ষণ করতে সক্ষম হতে পারেন : !(--x%(n+1)&&x%(n-1))এবং আপনার অ্যারেটি তৈরি করে:[...Array(n*n+1).keys()]
শেগি

@ শেগি আপনাকে ধন্যবাদ! আমি কাজ থেকে বাড়ি আসার সাথে সাথে আপনার পরামর্শ দিয়ে উত্তরটি উন্নত করার চেষ্টা করব!
মার্কো লেপোর

আপনাকে স্বাগতম. উপায় দ্বারা: " এটির [1...n*n]সাথে একটি পরিসর তৈরি করার চেয়ে কিছুটা ছোটArray(n*n).fill().map((x,i)=>i+1) " - [...Array(n*n)].map((_,y)=>y+1)ভবিষ্যতের রেফারেন্সের জন্য এটি করার একটি ছোট উপায়।
শেগি

এটির সাথে আরও কিছু করেছিলেন এবং 56 বাইটের জন্য এটি শেষ হয়েছিল:n=>[...Array(n*n+1).keys()].filter(x=>!(--x%-~n&&x%~-n))
শেগি

@ শেগি আমি আপনার শেষ সংস্করণটি চেষ্টা করেছি তবে এটি চ (1) এবং চ (2) এর জন্য অতিরিক্ত শূন্য আউটপুট দেবে, এটি একটি [1 ... n * n] পরিসীমা নিয়ে কাজ করে যদিও আপনি আমাকে যেভাবে দেখিয়েছেন আমি সেভাবেই ব্যবহার করেছি পূর্ববর্তী মন্তব্য। নাকি আমি কোনওভাবেই গণ্ডগোল করেছি?
মার্কো লেপোর


1

পার্ল 5 , 56 + 1 (-n) = 57 বাইট

!(($_+1+$_/$,)%$,&&$_%($,+1))&&say++$_ for 0..($,=$_)**2

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


3 -n` +3 হওয়া উচিত নয়?
সার্জিওল

1
না অনুমান কমান্ড লাইন হয় perl -e। এই উদাহরণের জন্য কমান্ড লাইন হবে perl -ne। এটি +1 এর পার্থক্য।
এক্সকালি


1

জাপট , 16 বাইট

এর থেকে আরও ভাল করার মতো বলে মনে হচ্ছে না তবে আমি নিশ্চিত এটি সম্ভব possible আমরা 1-ইনডেক্সিং ব্যবহার করি না এমন অপ্রয়োজনীয় প্রয়োজনীয়তার জন্য 2 বাইটের বলি দিতে হয়েছিল।

²õ f@´XvUÉ ªXvUÄ

এটা পরীক্ষা করো



0

পিএইচপি, 56 54 + 1 বাইট

-Rপতাকা জন্য +1 বাইট

for(;$z**.5<$n=$argn;$z++)$z%-~$n&&$z%~-$n||print~+$z;

ড্যাশ দ্বারা প্রিন্ট করা সংখ্যাগুলি প্রিন্ট করে। পাইপ হিসাবে চালনা করুন-nR বা এটি অনলাইনে চেষ্টা করুন

**অপারেটরের জন্য পিএইচপি 5.6 বা তার পরে প্রয়োজন ।
পুরোনো পিএইচপি জন্য এক বাইট যোগ করুন প্রতিস্থাপন ;$z**.5<$n=$argnসঙ্গে $z=$argn;$z<$n*$n


0

রুবি, 45 বাইট

->n{(n*n).times{|i|i%-~n>0&&i%~-n>0||p(i+1)}}

অভ্যন্তরীণভাবে শূন্য সূচক হিসাবে কাজ করে। চেক যদি iমডিউল n+1বা n-10, তাই কপি করে প্রিন্ট যদি i+1

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