নিম্নতম বাইটে কীভাবে নীচের বিন্যাসটি মুদ্রণ করবেন?


20

এই চ্যালেঞ্জ দ্বারা অনুপ্রাণিত হয় এই , এখন মুছে ফেলা প্রশ্ন।


ইনপুট হিসাবে ইতিবাচক পূর্ণসংখ্যক এন নিন এবং 1 .. N 2 নম্বর সহ একটি ম্যাট্রিক্স আউটপুট করুন যা নীচের প্যাটার্নটি অনুসরণ করে:

প্রথম সারিতে 1 .. N দিয়ে পূরণ করুন তারপরে শেষ সারিটি (সারির নম্বর এন ) সাথে (N + 1) পূরণ করুন .. 2N , তারপরে দ্বিতীয় সারিতে (2N + 1) পূরণ করুন .. 3N এবং আপনি পূরণ না করা অবধি চালিয়ে যান সমস্ত সারি।

আউটপুট ফর্ম্যাটটি নমনীয়, সুতরাং তালিকার তালিকা ইত্যাদি গ্রহণ করা হয়।

N = 1
1

N = 2
1  2
3  4

N = 3
1  2  3
7  8  9
4  5  6

N = 4
 1  2  3  4
 9 10 11 12
13 14 15 16
 5  6  7  8

N = 5
 1  2  3  4  5
11 12 13 14 15
21 22 23 24 25
16 17 18 19 20
 6  7  8  9 10

স্ট্যান্ডার্ড বিধি প্রয়োগ। প্রতিটি ভাষার জিতে বাইটের সংক্ষিপ্ত উত্তর। ব্যাখ্যা সর্বদা হিসাবে উত্সাহিত হয়।


ত্রুটি সহ এন্ট্রিগুলিকে শেষ করার অনুমতি দেওয়া হচ্ছে, ততক্ষণ ত্রুটিটি STDOUT এ মুদ্রিত হয় না?
সোড

@ হ্যাঁ হ্যাঁ, এটি ডিফল্টরূপে অনুমোদিত।
মার্টিন ইন্ডার

1
আমার ধারণা, মুছে ফেলা প্রশ্ন থেকে শিরোনামটি নেওয়া হয়েছে, তবে এটি খুব সন্ধানযোগ্য নয় (ডুপ ইত্যাদির সন্ধানে), আপনি কি আরও ভাল কোনওটিতে পরিবর্তন করতে পারবেন?
ব্যবহারকারী 202729

1
যেহেতু "আউটপুট ফর্ম্যাটটি নমনীয়", আমি লাইন থেকে লাইনে অর্ডার করা সংখ্যার সাথে একটি মাত্রিক অ্যারে আউটপুট করতে পারি? (প্রাক্তন 1 2 3 7 8 9 4 5 6:) আউটপুট ফর্ম্যাট কি নমনীয়?
অলিভিয়ার গ্রাওগায়ার

4
এপিএল সমাধান সম্ভবত পুরান ফারসি কিউনিফর্মের একক চরিত্র।
চিহ্নিত করুন

উত্তর:


7

05 এ বি 1 ই , 13 8 বাইট

সংরক্ষিত 5 ধন্যবাদ বাইট ডান্ডা

nLô«āÉÏ

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

ব্যাখ্যা

n           # push input^2
 L          # push range [1 ... input^2]
  ô         # split into pieces each the size of the input
   «       # append the reverse of this 2D-list
     ā      # push range [1 ... len(list)]
      É     # check each element for oddness
       Ï    # keep only the elements in the 2D list which are true in this list

5

রুবি , 53 বাইট

->n{r=*1..n*n;n.times{|x|p r.slice!(r[x*=n]?x:-n,n)}}

ব্যাখ্যা:

সমস্ত সংখ্যা প্রথমে একটি একক অ্যারেতে রাখুন, তারপরে প্রতিটি পুনরাবৃত্তির জন্য একটি লাইন এড়িয়ে অ্যারেগুলি কেটে দিন। প্রথম (n / 2 + n% 2) পুনরাবৃত্তির পরে এড়িয়ে যাবার কিছুই বাকি নেই, তারপরে বাকী সমস্ত লাইন পিছনের দিকে পান।

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



4

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

@ ব্যবহারকারী 71546 দ্বারা রক্ষিত 3 বাইট সম্পাদনা করুন

সুস্পষ্ট রুট অনুসরণ করে প্রথমে চেষ্টা করুন : 1 থেকে গণনা করুন এবং বাইরের দিক থেকে অভ্যন্তরে উভয় দিক থেকে অ্যারে পূরণ করুন

n=>(v=0,q=[...Array(n)]).map((_,i)=>q[i&1?--n:i/2]=q.map(_=>++v))&&q

পরীক্ষা

var F=
n=>(v=0,q=[...Array(n)]).map((_,i)=>q[i&1?--n:i/2]=q.map(_=>++v))&&q

function test() {
  var n=+N.value;
  O.innerHTML = '<tr><td>'
  +F(n).map(r=>r.join('</td><td>')).join('</td></tr><tr><td>')
  +'</td></tr>'
}

test()
#O { margin: 1em }
td { text-align: right }
<input id=N type=number min=1 value=5 oninput='test()'>
<table id=O>



1
@ ব্যবহারকারী71546 এখন 68
edc65


3

> <> , 51 + 3 = 54 47 বাইট

:&v
?!\1-:&:&*}}r:
 ~\
!~>1+::n&:&%:a84*@@?$~o?

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

প্রোগ্রামটি -vপতাকা ব্যবহার শুরু করার সময় স্ট্যাকের উপরে ইনপুট প্রত্যাশিত । আউটপুটটিতে একক স্পেস দ্বারা বিভাজনযুক্ত নন-প্রান্তিক সংখ্যা থাকে এবং প্রতিটি লাইন একক নিউলাইন দ্বারা পৃথক হয়। উদাহরণস্বরূপ আউটপুট N=5:

1 2 3 4 5
11 12 13 14 15
21 22 23 24 25
16 17 18 19 20
6 7 8 9 10

... একটি একক নিউলাইন পরে। প্রোগ্রামটি একটি ত্রুটি ( something smells fishy...) দিয়ে শেষ হয় তবে এটি STDERR এর পরিবর্তে STDOUT।

Explaination:

প্রথম লাইনটি কেবল Nরেজিস্টারে একটি অনুলিপি সঞ্চয় করে।

দ্বিতীয় লাইনটি প্রতিটি আউটপুট সারির জন্য অফসেট তৈরি করে 1 থেকে 1 টি বিয়োগ Nকরে N, এটি দ্বারা গুণ করে , স্ট্যাকের নীচে ঘোরানো এবং তারপরে পুরো স্ট্যাকটি বিপরীত করে। যখন স্ট্যাকের শীর্ষে সংখ্যা 0 পৌঁছে যায় তখন স্ট্যাকটি দেখতে দেখতে (উদাহরণ ব্যবহার করে N=5):

5 15 20 10 0 0

তৃতীয় লাইনটি 0স্ট্যাকের শীর্ষ থেকে অনুলিপিটি সরিয়ে দেয় ।

চতুর্থ লাইন স্ট্যাকের শীর্ষটিকে বাড়িয়ে তোলে এবং এর একটি অনুলিপি দেয়। এরপরে এটি মোডে নেওয়া হবে N, এবং কোনও স্থান বা নিউলাইন প্রিন্ট করা উচিত কিনা তা নির্ধারণ করার জন্য এটি ব্যবহার করা হয়, এবং যদি স্ট্যাকের শীর্ষটি বাতিল করা উচিত - যদি শেষ সংখ্যাটি মুদ্রিত হয় x, তবে x mod N == 0নির্দেশ করে যে আউটপুট সারির শেষটি পৌঁছেছে । 1+সমাপ্তি ত্রুটি ছুঁড়ে একটি ফাঁকা স্ট্যাকের উপর কার্যকর করা হলে কার্যকর করা শেষ হয় ।

পূর্ববর্তী সংস্করণ

এটি কার্যকরভাবে শেষ করার জন্য একটি খালি স্ট্যাকের জন্য স্পষ্টতই পরীক্ষা করেছিল এবং -vপতাকা ব্যবহারের জন্য আমি 3 বাইটও অন্তর্ভুক্ত ছিল ।

:&v
?!\1-:&:&*}}r:
 ~\
!;>1+::n&:&%:a84*@@?$~o?!~l?

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


এই মেটা অনুসারে , আমরা আর বাইট গণনাতে পতাকা যুক্ত করব না তাই এটি যথেষ্ট যে আপনি নির্দিষ্ট করেছেন যে পতাকাটি ব্যবহৃত হয়েছে।
এমিগনা 10

@ এমিগনা ও_ও তার জন্য সদাচরণের ধন্যবাদ! মাথা জন্য ধন্যবাদ
সোক


2

জাভা (ওপেনজেডিকে 9) , 101 বাইট

n->{int x[][]=new int[n][n],i=0,j;for(;i<n;i++)for(j=0;j<n;)x[i%2<1?i/2:n+~i/2][j]=++j+i*n;return x;}

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

ক্রেডিট


1
আপনি অবস্থানটি পরিবর্তন করে তিনটি বাইট সংরক্ষণ করতে পারবেন j++: ১০২ বাইট
কেভিন ক্রুইজসেন

1
এবং আরেকটি বাইট 101 101 বাইটে পরিবর্তিত n-i/2-1হয়েছেn+~i/2
কেভিন ক্রুইজসেন 12

ধন্যবাদ কেভিন ক্রুজসেন! আমি কোনওভাবে কাঁচা সংস্করণ পোস্ট করেছি, পুরো গল্ফড সংস্করণ নয়। আমার ভুল, প্রথম সংখ্যাটি সমাধান করা হয়েছিল, তবে দ্বিতীয়টি নয়। তবে আপনি সেগুলি লিখেছেন, তাই আপনার কাছে ক্রেডিট ;-)
অলিভিয়ার গ্রাগোয়ার

দ্রষ্টব্য: যদি কোনওভাবে এক-মাত্রিক অ্যারে গ্রহণ করা হয়,n->{int i=n*n,x[]=new int[i],r;for(;i-->0;x[(r%2<1?r/2:n+~r/2)*n+i%n]=i+1)r=i/n;return x;}
অলিভিয়ার গ্রাওগায়ার

2

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

n=>[...Array(n)].map((_,i,a,j=((i*=2)<n?i:n+n+~i)*n)=>a.map(_=>++j))

আমি এটি পোস্ট করার আগে ভাল এটি আউটগল্ফড হয়ে গেছে তবে এখানে এটি যাইহোক। সম্পাদনা: @ কেভিনিক্রুজসেনকে ধন্যবাদ 1 বাইট সংরক্ষিত।


n+n-i-1n+n+~i-1 বাইটের জন্য হতে পারে , সুতরাং আপনি আবার অন্য জাভাস্ক্রিপ্ট উত্তরের সাথে টু টু টো করতে পারেন। :)
কেভিন ক্রুইজসেন 12

@ কেভিন ক্রুজসেন উজ্জ্বল ধন্যবাদ!
নীল

2

জেলি , 10 বাইট

²ss2Ṛj@/Fs

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

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

²ss2Ṛj@/Fs  Main link. Argument: n

²           Square; yield n².
 s          Split; promote n² to [1, ..., n²] and split it into chuks of length n.
  s2        Split 2; generate all non-overlapping pairs of chunks.
            If n is odd, this leaves a singleton array at the end.
    Ṛ       Reverse the order.
     j@/    Reduce by join with reversed arguments.
            In each step, this places the first and second element of the next pair
            at the top and bottom of the accumulator.
        Fs  Flatten and split to restore the matrix shape.

2

স্ট্যাক্স , 10 বাইট

│æ╘▐⌡r▌═∟Y

এটি চালান এবং অনলাইনে ডিবাগ করুন

একই প্রোগ্রামটির সংশ্লিষ্ট ascii উপস্থাপনাটি 12 টি অক্ষর।

JRx/r{]+rFmJ

এখানে কিভাবে এটা কাজ করে.

JR              range [1 .. x^2] where x=input
  x/            split into subarrays of size x
    r           reverse
     {   F      for each subarray, execute block
      ]+r       concat array, and reverse result
          m     for each row, output ...
           J        each subarray joined by spaces

2

জেলি , 13 ... 6 বাইট

-1 বাইটের জন্য জোনাথন অ্যালানকে ধন্যবাদ !

²sm0m2

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


05AB1E উত্তরের জন্য অভিন্ন অ্যালগরিদম ব্যবহার করুন।


বামের অন্তর্নিহিত পরিসীমা রয়েছে তাই অপসারণ করেR একটি বাইট সংরক্ষণ করুন s
জোনাথন অ্যালান

2

আর , 70 59 47 বাইট

function(n)matrix(1:n^2,n,,T)[c(1:n,n:1)*!0:1,]

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

রবিন রাইডারকে ধন্যবাদ 4 বাইট গল্ফের জন্য , যা আমি পরে আরও গল্ফ করেছিলাম।

একটি ম্যাট্রিক্স প্রদান করে; নির্মান matrixক্রম, যেমন এ, [[1 2 3] [4 5 6] [7 8 9]]তারপর, সারি rearranges।


এড়িয়ে 66 বাইটrbind
রবিন রাইডার

@ রবিনরাইডার ৫৯ বাইট - মোবাইলে তাই আমি পরে এটি সম্পাদনা করব
জিউসেপে


1

অক্টাভা , ১০২ বাইট

n=input('');A=B=vec2mat(1:n*n,n);i=j=0;do
B(++i,:)=A(++j,:);if++j<n
B(n-i+1,:)=A(j,:);end;until j>=n
B

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


নিস! আমি জানতাম না অষ্টাভের একটি untilকমান্ড ছিল। এবং আমি এটি সম্পর্কে জানতাম না vec2mat:( দুর্ভাগ্যক্রমে একই দৈর্ঘ্য: A=B=vec2mat(1:(n=input(''))*n,n):(
স্টিভি গ্রিফিন

while j++<nএছাড়াও ঠিক একই দৈর্ঘ্য ... আপনি বিভিন্ন বিকল্প ব্যবহার করে দেখেছেন বা সেগুলি কেবল কাকতালীয়?
স্টিভি গ্রিফিন

@ স্টেভিগ্রিফিন এই ক্ষেত্রে whileলুপটি একই দৈর্ঘ্যের, আমি এটি উভয় উপায়ে চেষ্টা করেছি। যদিও প্রায়শই do ... untilএক বাইট ছোট হয় orter while ... end
স্টেডিবক্স

1

সি (জিসিসি) , ১১০ বাইট

i,c,t,b;f(a,n)int*a;{for(b=n-1;i<n*n;t++,b--){for(c=0;c<n;)a[t*n+c++]=++i;for(c=0;c<n&i<n*n;)a[b*n+c++]=++i;}}

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

সারিগুলির জন্য ২ টি সূচকের মধ্যে বিকল্প পরিবর্তে একটি অ্যারে পূরণ করুন: শীর্ষে শুরু হওয়া একটি সূচক এবং নীচে শুরু হওয়া একটি সূচক। শীর্ষ সারির সূচকটি 0 থেকে শুরু হয় এবং প্রতি 2 টি সারি বাড়ানো হয়; নীচের সারি সূচকটি এন -1 এ শুরু হয় এবং প্রতি 2 টি সারিতে হ্রাস হয়।

Ungolfed:

void f(int* a, int n)
{
    //i = value to be written [1,n]; c = column index; t = top row index; b = bottom row index
    for(int i=1, c=0, t=0, b=n-1;
        i <= n*n; //when i = n*n, we have written all the values and we're done
        t++, b--) //t increments every 2 rows, b decrements every 2 rows
    {
        //write out 2 rows per loop

        //first row: fill out row at t
        for(c=0; c<n; c++, i++)
            a[t*n+c]=i;

        //second row: fill out row at b
        //this step will be skipped on the final loop for odd values of n, hence the (i<=n*n) test
        for(c=0; c<n && i<=n*n; c++, i++) 
            a[b*n+c]=i;
    }
}

1

সি ++ + রেঞ্জ ভি 3 , 159 বাইট

#include<range/v3/all.hpp>
using namespace ranges::view;

[](int n){auto r=iota(1,n*n+1)|chunk(n);return concat(r|stride(2),r|reverse|drop(n%2)|stride(2));}

ওয়ান্ডবক্সে লাইভ

2 টি নতুন লাইনের পরে গণনা করা হচ্ছে না using namespace range::view; ল্যাম্বডা থেকে আমদানি আলাদা করতে তারা কেবল সেখানে রয়েছে।

হালকা আকর্ষণীয় সত্য: এই সমাধানটি কোনও গাদা বরাদ্দ দেয় না। এটি O(1)মহাকাশে সমস্যার সমাধান করে ।


ব্যাখ্যা:

  1. iota(1, n*n+1) -> [1 ... n*n]
  2. chunk(n): প্রতিটি nউপাদান একসাথে, তাই[1 ... n] [n+1 ... 2*n] ...
  3. কল যে r
  4. r | stride(2): প্রতিটি অন্যান্য উপাদান গ্রহণ: [1 ... n] [2*n+1...] ...
  5. এর সাথে সম্মতি জানাতে:
  6. r | reverse | drop(n % 2): বিপরীত করুন, তারপরে বিজোড় [1 ... n]হলে শব্দটি ড্রপ করুন n(সারিগুলির একটি বিজোড় সংখ্যা হবে এবং আমরা কেবল একবার প্রথম শব্দটি মুদ্রণ করতে চাই)। দেখে মনে হচ্ছে আমার ঠিক করা সম্ভব হবে r | reverse | takeতবে এটি কোনও কারণে কার্যকর হয় না।
  7. stride(2)আবার, প্রতিটি অন্যান্য উপাদান নিন। এবার এটি বিপরীতে।

আরও পাঠযোগ্য এবং পরীক্ষামূলক:

#include <range/v3/all.hpp>
using namespace ranges::view;

auto f(int n)
{
    auto rows = iota(1, n * n + 1)
        | chunk(n);
    return concat(
        rows | stride(2),
        rows
            | reverse
            | drop(n % 2)
            | stride(2));
}

#include <iostream>
int main(int argc, char** argv)
{
    std::cout << "N = " << argc << '\n';
    auto res = f(argc);

    for (auto const& row : res | bounded) {
        for (auto const& elem : row | bounded) {
            std::cout << elem << ' ';
        }
        std::cout << '\n';
    }
}

ইনপুট সংরক্ষণের জন্য ও (লগ (এন)), যদি বিট জটিলতায় পরিমাপ করা হয়।
ব্যবহারকারী 202729

@ ব্যবহারকারী202729 আপনার অর্থ কী তা নিশ্চিত করুন। আপনি কি বলছেন যে একটির জন্য int n, আমার log(n)ইনপুটটি সঞ্চয় করার জন্য বিটগুলি দরকার ? তবে এটি যাইহোক ইনপুট, এবং আমরা intযেখানে sizeof(int) == 4(বেশিরভাগ সিস্টেমে) ডিল করছি , সুতরাং এটি ইনপুট নির্বিশেষে ব্যবহার করা ধ্রুব সংখ্যা বাইট।
জাস্টিন 5




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