স্ব-সনাক্তকরণ সমন্বয়সমূহ


27

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা একটি পূর্ণসংখ্যা দেওয়া হয় , দৈর্ঘ্যের মাত্রা nসহ একটি অ্যারে তৈরি করে , যেখানে প্রতিটি উপাদান তার নিজস্ব স্থানাঙ্কগুলির সনাক্তকারী। এটি হ'ল, একটি অ্যারে দিয়ে শুরু করে এটিকে অ্যারেতে বিশিষ্ট করুন, যেখানে এর প্রত্যেকটিতে আরও বেশি অ্যারে রয়েছে, যার গভীরতা রয়েছে । গভীর অ্যারেগুলির উপাদানগুলি স্থানাঙ্কগুলি যেখানে তারা পুরো অ্যারেতে রয়েছে তা বর্ণনা করে।nnnnn-1

আমার ব্যাখ্যা বিভ্রান্তিকর হওয়ার ক্ষেত্রে কয়েকটি উদাহরণ।

n = 1

["1"]

n = 2

[
 ["11", "12"],
 ["21", "22"]
]

n = 3

[
  [
    ["111","112","113"],
    ["121","122","123"],
    ["131","132","133"]
  ],
  [
    ["211","212","213"],
    ["221","222","223"],
    ["231","232","233"]
  ],
  [
    ["311","312","313"],
    ["321","322","323"],
    ["331","332","333"]
  ]
]

এখানে, "321" এর অর্থ এটি তৃতীয় অ্যারের ২ য় মৌলের 1 ম উপাদান।

নিয়মাবলী:

  • স্থানাঙ্ক এবং মাত্রা ( n) 0 বা 1 ইনডেক্স করা যেতে পারে
  • nঅস্পষ্ট ফলাফলগুলি রোধ করতে উভয় সূচীকরণ বিকল্পের জন্য আপনি 10 এর নীচে সিঙ্গেল ডিজিট ধরে নিতে পারেন
  • আইও নমনীয়।
    • বিশেষত, স্থানাঙ্কগুলি যতক্ষণ না পরিষ্কার হয় ততক্ষণ অ্যারে, স্ট্রিং ইত্যাদি হতে পারে। "321" => [3,2,1]
    • আউটপুট অগ্রণী জিরোগুলি ছাড়াই বা ছাড়াই বেস 10 এ পূর্ণসংখ্যা হতে পারে।
    • স্থানাঙ্কগুলি যদি আপনি চান তবে বিপরীত ক্রমে থাকতে পারে it "321" => "123"
    • আউটপুট অগত্যা আপনার ভাষার একটি অ্যারে কাঠামো হতে হবে না। যতক্ষণ না কোনও অ্যারের শুরু করার জন্য, অ্যারের সমাপ্তি এবং উপাদান পৃথক করার জন্য স্পষ্ট স্বতন্ত্র চিহ্নিতকারী রয়েছে।
    • এর আউটপুট n=1মাত্র 1 হতে পারে
    • যদি আপনার আউটপুটটি atypical হয় তবে ফর্ম্যাটটি ব্যাখ্যা করার বিষয়টি নিশ্চিত করুন।
  • এটি তাই প্রতিটি ভাষার সংক্ষিপ্ত সমাধান জিতে যায়!


হাস্কেলটিতে এটি লিখতে আমার সমস্যা হয়েছিল, আমি বুঝতে পারার আগে যে টাইপ সিস্টেমটি এটি অসম্ভব করে তোলে।
গম উইজার্ড

@ গুগল উইজার্ড: আপনি সর্বদা এটির জন্য একটি নতুন ডেটা কাঠামো সংজ্ঞায়িত করতে পারেন, যেমন। data L a = L [L a] | E a
35


1
@ টাডসওয়েল আপনার কোনও ফাংশন রাখতে পারবেন না যার ধরণ ইনপুটটির উপর নির্ভর করে। এই ফাংশনটি টাইপ থাকতে পারে Int -> [String]বা Int -> [[String]]ইত্যাদি, তার উপর নির্ভর করে কি ইনপুট এবং
H.PWiz

উত্তর:


19

ডায়ালগ এপিএল , 5 3 বাইট

⍳⍴⍨

-২ বাইটস ফ্রাউনফ্রোগকে ধন্যবাদ

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

অ্যারের আকার দেওয়া সমস্ত সূচক দেয় gives যেমন 2 3
বাম দিকের আর্গের আকার হতে ডান আরগটিকে পুনরায় আকার দেয়। উভয়কে সঠিক আর্গ করে তোলে।


10

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

f=lambda n,*l:len(l)//n*l or[f(n,*l,k)for k in range(n)]

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

মিস্টার এক্সকোডার তারকাচিহ্নযুক্ত আনপ্যাকিংয়ের জন্য পাইথন 3 এ স্যুইচিং করে 2 বাইট সংরক্ষণ করেছেন।


3
আপনি পাইথন ≥3.5 এ স্যুইচ করলে f=lambda n,*l:len(l)//n*l or[f(n,*l,k)for k in range(n)]56 বাইটের জন্য কাজ করে।
মিঃ এক্সকোডার


6

জে , 18 বাইট

,"1/^:(]{:)~@,.@i.

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

Iterative সমাধান, অন্তর্নির্মিত কার্তেসিয়ান পণ্য। পিক জে দেখতে এটিই।

                       input                                    2
                i.     range                                 0, 1
             ,.@       reshape each element
                       into a one-dimensional array        [0],[1]   (A)
    ^:(]{:)            (input−1) times...             (1 iteration)
,"1/       ~@             prepend the contents of each 1d array in A    |
                          to every 1d array from the previous iteration,|  
                          assembling the results for each A[n] into     |!CANTEXPLAINTHIS!
                          a larger array                                |
                                                         [ [0,0],       |
                                                           [0,1] ],     |
                                                         [ [1,0],       |
                                                           [1,1] ]      |

প্রথমে উচ্চতর বাইট গণনাটি আমাকে ছাড়িয়ে দেয় তবে এটি সত্যিই সুন্দর জে
জোনাহ

6

জেলি , 8 7 বাইট

ṗ³s³$³¡

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

ব্যাখ্যা

উদাহরণ হিসাবে আর্গুমেন্ট 2 ব্যবহার করুন।

ṗ³s³$³¡   
ṗ        Cartesian power with power
 ³       2 (the argument). Autoranges the left arg.
         Yields [[1,1],[1,2],[2,1],[2,2]]
    $³¡  Do 2 times:
  s³     Split into segments of length 2. 
         This last step molds the array of indices into the proper shape.

যদি ¡ডায়াডসের পুনরাবৃত্তির জন্য এটি সঠিক যুক্তিটি পরিবর্তিত না হয় তবে এটি 4 বাইট হবে:ṗs³¡


এটি আমার কাছে পুরো প্রোগ্রামের মতো দেখাচ্ছে। আপনি কি আউটপুট (STDOUT) এর জন্য 1বৈধ তা নিশ্চিত?
এরিক আউটগল্ফার

@ এরিকথ আউটগল্ফার আমি 1
জো কিং

@ জোকিং তবে এই ক্ষেত্রে, "অ্যারে শুরু করার জন্য, অ্যারের সমাপ্তির জন্য স্পষ্ট স্বতন্ত্র চিহ্নিতকারী" নেই। আপনি কি প্রশ্নটি সম্পাদনা করতে চান? (প্রচুর উত্তর আসলে সেগুলি ধারণ করে না)
এরিক দি আউটগল্ফার

5

জে, 13 বাইট

[:{[;/@$,:@i.

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

আকর্ষণীয় এপিএলের উত্তরের চেয়ে অনেক বেশি দীর্ঘ (যদিও এটি আরও ভাল অনুবাদ দেখতে আমার অক্ষমতা হতে পারে)

ব্যাখ্যা

[: { [ ;/@$ ,:@i.


     [                NB. the argument
            ,:@i.     NB. range 0..arg, considered as one item: ,: is "itemize" 
          $           NB. repeat the right range the left number of times
       ;/@            NB. and then put boxes around them. so, eg, if we had
                      NB. an arg of 3, now we have the list of boxes 
                      NB. [0 1 2][0 1 2][0 1 2]
[: {                  NB. { is "Catalog", it creates the cartesian product
                      NB. in exactly the format we desire.


@ ফ্রাউনফ্রোগ এড়াতে একটি হুক ব্যবহার #.invকরা খুব চালাক, +1 is
কোলে

@ ফ্রভনিফ্রাগ এখন আমি আপনার "বিভিন্ন ঘাঁটিতে গণনা" সমাধানটি দেখেছি, আমি মনে করি এই পদ্ধতির পক্ষে যথেষ্ট আলাদা যে আপনার নিজের এটি অন্য পোস্ট হিসাবে যুক্ত করা উচিত। এটি একটি খুব সুন্দর সমাধান।
জোনাহ

জোনাহ, @ কোল আপনাকে ধন্যবাদ
ফ্রাউনফ্রগ

5

ম্যাটল্যাব, 92 89 55 বাইট

চ্যালেঞ্জের নিয়মগুলি পুনরায় পড়ার সাথে আমার একটি পৃথক উত্তর রয়েছে তবে আমি নীচের আগের প্রচেষ্টাটি পৃথক এবং এখনও দেখতে মজাদার হিসাবে ছেড়ে দেব leave

reshape(string(dec2base(0:n^n-1,n+(n<2))),[~(1:n)+n 1])

ব্যাখ্যা

                        0:n^n-1                        % [0,1,...,n^n-1]
               dec2base(       ,n+(n<2))               % Put into base n (base 2 if n=1)
        string(                         )              % Convert to strings
                                          [~(1:n)+n 1] % Dimension array [n,n,...,n] (length n)
reshape(                                 ,            )% Use dim array to reshape

এটি 0 টি সূচকযুক্ত স্ট্রিংগুলির একটি n-মাত্রিক অ্যারে আউটপুট করে।

পূর্ববর্তী উত্তর (89 বাইট)

আমার প্রথম গল্ফ! এটি সম্ভবত আরও হ্রাস করা যেতে পারে তবে আমি ভেবেছিলাম আমি যা পেয়েছি তা পোস্ট করব।

x=(1:n)';for d=2:n;y=((1:n)*10^(d-1));o=[];for p=1:nnz(y);o=cat(d,o,(x+y(p)));end;x=o end

ব্যাখ্যা

x=(1:n)';                       % Create array x=[1,2,...n]'
for d=2:n                       % d for dimension
    y=((1:n)*10^(d-1));         % Creates an array for each d where
                                %   y=[10,20,30,...] for n=2
                                %   y=[100,200,...] for n=3 etc.
    o=[];                       % o for output
    for p=1:nnz(y)              % For each value of y
        o=cat(d,...             % Concatenate in the dth dimension:
            o,...               % - The current output
            x+y(p));            % - The sum of
                                %   - The array from the last dimension
                                %   - The current value in y (e.g. 100)
    end
    x=o                         % Send the output to x for the next loop
end

সমাধান দেওয়ার জন্য আউটপুট এক্স শেষে

অন্যান্য ম্যাটল্যাব পোস্টের মতো, আউটপুটটি একটি এন-ডাইমেনশনাল অ্যারে হয়, এটি স্থানাঙ্ক প্রদর্শন করার জন্য সংখ্যাগুলি ব্যবহার করে। এটি যে কোনও মানের জন্য কাজ করে, যদিও ল্যাপগুলি ম্যাটল্যাবে খারাপ থাকলেও এটি এন = 8 এর আশেপাশে উল্লেখযোগ্যভাবে ধীর হতে শুরু করে।

সম্পাদনা করুন: -২ বাইট লুইস মেন্ডোকে ধন্যবাদ। আউটপুট মুদ্রণের জন্য চূড়ান্ত সেমিকোলনও সরানো হয়েছে।


4
পিপিসিজিতে আপনাকে স্বাগতম!
শেগি

আমি মনে করি আপনি কয়েকটি বাইট সংরক্ষণ lengthকরে প্রতিস্থাপন করতে পারেন nnz। এছাড়াও, পিপিসিজি নিয়ম অনুসারে কোডটি কিছুটা আসল আউটপুট উত্পন্ন করতে হবে, সাধারণত এটি এসটিডিউটে প্রদর্শিত (আউটপুটটি কোনও ভেরিয়েবলে সংরক্ষণ করার পক্ষে যথেষ্ট নয়), অথবা এটি এমন একটি ফাংশন হতে হবে যা আউটপুট ফেরত দেয়
লুইস মেন্ডো

5

মরিচা ,201 176 167 166 154 বাইট

enum L{S(String),L(Vec<L>)}fn
h(n:u8,d:u8,s:&str)->L{if
d<1{L::S(s.into())}else{L::L((0..n).map(|i|h(n,d-1,&format!("{}{}",s,i))).collect())}}|n|h(n,n,"")

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

ভাষা কঠোরভাবে টাইপ করা হওয়ায় আউটপুট টাইপ দুটি রূপের একটি যোগফল type এটি উভয়ই হতে পারে L, যা এই যোগফলের টাইপযুক্ত একটি তালিকার ধরন বা Sফলাফলের ধরণ (একটি স্ট্রিং)। ফলাফল এই মত দেখতে পারেন।

L::L([
 L::L([ L::S("00"), L::S("01") ]),
 L::L([ L::S("10"), L::S("11") ]),
])

এছাড়াও, ব্যবহার করে পুনরায় ফর্ম্যাট করা rustfmt:

enum L {
    S(String),
    L(Vec<L>),
}
fn h(n: u8, d: u8, s: &str) -> L {
    if d < 1 {
        L::S(s.into())
    } else {
        L::L(
            (0..n)
                .map(|i| h(n, d - 1, &format!("{}{}", s, i)))
                .collect(),
        )
    }
}
|n| h(n, n, "")

4

আর , 102 বাইট

function(n,m=array(T,rep(n,n)))`if`(n<2,'1',{m[]=apply(which(m,T)[,`[<-`(1:n,1:2,2:1)],1,toString);m})

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

  • 1-সূচকযুক্ত, বিপরীত
  • দুর্ভাগ্যক্রমে আর কলাম অনুসারে ম্যাট্রিক্স সঞ্চয় করে, অন্যথায় আমরা down৩ বাইটে নামতে পারি
  • -9 বাইটস whichঅ্যারে ইনডেক্সিং ব্যবহার করার জন্য @ জিউজ্পে পরামর্শের জন্য ধন্যবাদ সংরক্ষণ করেছে

আপনার 76 বাইট উত্তর 73 বাইট হতে পারে যা ইতিমধ্যে কোনও আর উত্তর আছে কিনা তা যাচাই করার আগে আমি এটি প্রয়োগ করেছিলাম। আপনি কিছু পদ্ধতির পরিবর্তন করতে সক্ষম হতে পারে, যদিও? পুরোপুরি নিশ্চিত নয়।
জিউসেপে

1
@ জিউস্পেপ: অ্যারের সূচীকরণ whichযা আমি খুঁজছিলাম, ধন্যবাদ! 9 টি বাইট সংরক্ষিত হয়েছে
ডিজিএমএল

4

জাভা 10, 144 বাইট

সমাধান পদ্ধতি f। এটি অ্যারের স্ট্রিং প্রতিনিধিত্ব করে।

String h(int n,int d,String s){if(d<1)return s;var r="[";for(int i=0;i++<n;)r+=h(n,d-1,s+i)+",";return r+"]";}String f(int n){return h(n,n,"");}

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

Ungolfed

String h(int n, int d, String s) {
    if (d < 1)
        return s;
    var r = "[";
    for (int i = 0; i++ < n;)
        r += h(n, d - 1, s + i) + ",";
    return r + "]";
}
String f(int n) {
    return h(n, n, "");
}

প্রাপ্তি স্বীকার


1
জাভা 10, আপনি প্রতিস্থাপন করতে পারে Object[]সঙ্গে var। এছাড়াও, আমি মনে করি এটা elseব্লক অপ্রয়োজনীয়, যেমন আপনার আছে returnমধ্যে ifব্লক।
কনরাড বোরোস্কি


3

জাভাস্ক্রিপ্ট (নোড.জেএস) , 62 60 58 বাইট

f=(n,i=n,s='')=>i?[...Array(n)].map((_,j)=>f(n,i-1,s+j)):s

এটি অনলাইন চেষ্টা করুন! আউটপুট 0-সূচকযুক্ত। সম্পাদনা: @ জোঙ্কিংকে 2 বাইট সংরক্ষণ করা এবং আরও 2 বাইট ধন্যবাদ @ আরনাউল্ডকে ধন্যবাদ


3

ম্যাটল্যাব, 116 108 104 বাইট

আমার মনে হচ্ছে মাল্টি-ডাইমেনশনাল ম্যাট্রিক্সের প্রতি ম্যাটল্যাবের সান্নিধ্যের জন্য এটি করার জন্য আরও একটি ছোট্ট উপায় থাকতে হবে ... কিছু সংক্ষিপ্ত হাতছাড়া থেকে 4 বাইটের জন্য লুইসকে ধন্যবাদ

a=~(1:n)+n;c=cell(1,n);[c{:}]=ind2sub(a,1:n^n);reshape(arrayfun(@(varargin)[varargin{:}],c{:},'un',0),a)

ব্যাখ্যা

% For using twice, define the array of dimension sizes [n, n, .., n]
a=~(1:n)+n;
% To group variable number of outputs from ind2sub into a cell array
c=cell(1,n);   
% Convert linear indices to self-describing coordinates
[c{:}]=ind2sub(a,1:n^n);     
% reshape to make it the n-dimensional array
% arrayfun to loop over the numerous ind2sub outputs simultaneously
% varargin and {:} usage to account for various numbers of inputs
reshape(arrayfun(@(varargin)[varargin{:}],c{:},'uni',0),a)

আউটপুট হ'ল একটি এন-ডাইমেনশনাল সেল অ্যারে, যেখানে প্রতিটি উপাদান সমন্বয় মানগুলির একটি অ্যারে হয়। nসংখ্যার অ্যারে আউটপুটের কারণে অস্পষ্টতা ছাড়াই কারও জন্য কাজ করে , যতক্ষণ কোনও n^(n+1)উপাদান অ্যারেটি র‌্যামে সংরক্ষণ করা যায়!


3

কাঠকয়লা , 26 বাইট

Nθ≔EXθθ⪫⪪◧⍘ιθθ ¦0υFθ≔⪪υθυυ

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

Nθ

ইনপুট n

≔EXθθ⪫⪪◧⍘ιθθ ¦0υ

nⁿ nবেসে সমস্ত- ডিজিট সংখ্যা তৈরি করুন n

Fθ≔⪪υθυ

তাদের nসময়কে একটি nমাত্রিক মাত্রায় ভাগ করুন যেখানে প্রতিটি মাত্রা আকারের হয় n

υ

অ্যারে মুদ্রণ করুন। ডিফল্ট আউটপুট ফরম্যাট নিজস্ব লাইনে প্রতিটি উপাদান, তারপর প্রতিটি ব্লক nলাইন একটি ফাঁকা লাইন দ্বারা সমাপ্ত করা হয়, তাহলে প্রতিটি ব্লক nব্লক nলাইন আপ তাই একটি দ্বিতীয় ফাঁকা লাইন দ্বারা সমাপ্ত করা হয়, এবং n-1শীর্ষ স্তরে ফাঁকা রেখা ।


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