সূচকের তালিকার তালিকা উল্টানো


14

এই স্ট্যাক ওভারফ্লো পোস্টটি দ্বারা অনুপ্রাণিত ।

ভূমিকা

বব এর কাজ স্প্রেডশীট তৈরি এবং তাদের সংগঠিত করা। তিনি যেভাবে তাদের সংগঠিত করেছেন তা বব ব্যতীত খুব কম লোকই জানেন তবে তিনি একই গ্রুপের অধীনে থাকা প্রতিটি স্প্রেডশিটের একটি তালিকা তৈরি করেন। তিনি যে স্প্রেডশিটটি তৈরি করেন তাতে প্রচুর ডেটা থাকে, তবে আমরা এখনই কেবলমাত্র এক টুকরো তথ্য খুঁজছি: যেদিন তিনি এই কাজটি শুরু করেছিলেন এবং যেদিন সে স্প্রেডশিট তৈরি করেছিল তার মধ্যে কত দিন রয়েছে। প্রথম দিন তিনি দুটি স্প্রেডশিট তৈরি করেছেন, সেগুলিকে উভয় হিসাবেই 0নোট করেছেন এবং তাদের যথাযথ স্থানে সাজিয়েছেন।

এখন, তাঁর বস প্রতিদিন কী ধরণের স্প্রেডশিট ঘটেছিল তার একটি পর্যালোচনা জিজ্ঞাসা করছেন, এবং এমন কিছু কোড লিখে আপনার কাজ যা ববকে বুঝতে পারে; হাতে হাতে এটি করার জন্য তাঁর কাছে অনেক বেশি স্প্রেডশিট রয়েছে।

ইনপুট

বব যে তথ্য তিনি আপনাকে দিয়েছেন তা (0-বা -1 সূচকযুক্ত) জেগড অ্যারে আকারে আসে যেখানে প্রতিটি ড্যাটাম ফর্মের হয় x = a[i][j]aএটাকে আমি নিজেই জ্যাগড অ্যারে বলছি, iএটি স্প্রেডশিটের ধরণ এবং xঅ্যারে তৈরি হওয়ার তারিখ। jগুরুত্বহীন।

কাজটি

তাদের ধরণের দ্বারা সজ্জিত স্প্রেডশীট তৈরির দিনগুলির একটি দাগযুক্ত অ্যারে দেওয়া, স্প্রেডশীট তৈরির দিন দ্বারা সজ্জিত স্প্রেডশিট প্রকারের জাগযুক্ত অ্যারেটি ফিরিয়ে দিন।

উদাহরণ

বব আপনাকে কেবল এই বিমূর্ত ডেটা দিয়ে ছাড়বে না। তিনি আমাকে তাঁর কিছু স্প্রেডশিটের একটি সাবসেট দিয়েছেন যা আপনাকে কী বলে মনে হচ্ছে তা নির্ধারণে সহায়তা করতে।

উদাহরণ ইনপুট (0-সূচকযুক্ত):

a = [
[3,2,5,0], # Bob doesn't necessarily sort his lists
[1,3],
[2,1,0,4],
[4,5,3],
[6,6]
]

উদাহরণ আউটপুট (মন্তব্য সহ, অবশ্যই কোনটি প্রয়োজন হয় না):

output = [
[0,2] # On day 0, Bob made one type 0 and one type 2 spreadsheet
[1,2] # On day 1, Bob made one type 1 and one type 2 spreadsheet
[0,2] # On day 2, Bob made one type 0 and one type 2 spreadsheet
[0,1,3] # On day 3, Bob made one type 0, one type 1, and one type 3 spreadsheet
[2,3] # On day 4, Bob made one type 2 and one type 3 spreadsheet
[0,3] # On day 5, Bob made one type 0 and one type 3 spreadsheet   
[4,4] # On day 6, Bob made two type 4 spreadsheets
]

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

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

[[3,5,6,2],[0,0,0],[1,0,3,4]] -> [[1,1,1,2],[2],[0],[0,2],[2],[0],[0]]
[[-1]] -> Undefined behavior, as all input numbers will be non-negative integers. 
[[0],[0],[],[0]] -> [[0,1,3]]

আউটপুটটির অভ্যন্তরীণ তালিকাগুলি বাছাই করার দরকার নেই।

সর্বদা হিসাবে, কোনও স্ট্যান্ডার্ড ফাঁক নেই এবং অবশ্যই সংক্ষিপ্ততম কোড জিততে পারে।

(যেহেতু এটি আমার প্রথম প্রশ্ন, দয়া করে এটির উন্নতি করার জন্য আমি কী করতে পারি তা আমাকে জানান))


বব কোনও প্রকারের কোনও স্প্রেডশিট তৈরি করতে পারে না?
xnor

1
@ এক্সনর নো, বব সর্বদা প্রতিদিন একটি স্প্রেডশিট তৈরি করবে। এই স্প্রেডশিটগুলি সংস্থার পরিচালনার পক্ষে এতটা গুরুত্বপূর্ণ যে ববকে যদি অসুস্থ অবস্থায় ডাকতে হয় তবে অন্য একজনকে সেই দিনের স্প্রেডশিট তৈরি করতে সাময়িকভাবে পোস্ট করা হয় এবং পরের দিন সকালে বব তার নিজস্ব স্প্রেডশিটগুলি তৈরি করার আগে সেগুলি সংগঠিত করে।
স্টিভেন এইচ।

1
@ ডেনিস এই উদাহরণটি একসাথে রাখার সময় আমি কিছুটা ক্লান্ত হয়ে পড়েছিলাম এবং আমি অনুমান করি যে এটি প্রদর্শিত হয়েছিল। : পি স্থির (উভয়)!
স্টিভেন এইচ।

6
সুন্দর লাগছে. এটি একটি খুব সুন্দর চ্যালেঞ্জ, বিশেষত বিবেচনা করে যে এটি আপনার প্রথম। :) বিটিডব্লিউ, আপনি যদি সচেতন না হন তবে আমাদের কাছে একটি স্যান্ডবক্স রয়েছে যেখানে সম্প্রদায়টি "লাইভ" হওয়ার আগে প্রতিক্রিয়া সরবরাহ করতে পারে।
ডেনিস

1
আমি আপনার মন্তব্যের ভিত্তিতে একটি বিবৃতিতে সম্পাদনা করেছি " না, বব সর্বদা প্রতিদিন একটি স্প্রেডশিট তৈরি করবে ", তবে এখন আমি আমার নিজের উত্তরটি অনুকূল করার চেষ্টা করেছি আমি বুঝতে পেরেছি যে এটি সম্ভবত আপনি যা চেয়েছিলেন তার চেয়ে আরও বেশি নিয়ন্ত্রণমূলক। খালি অ্যারেগুলি অনুসরণ করার অনুমতি রয়েছে? যেমন [[0 0]]আউটপুট দিতে পারে [[0 0] []]?
পিটার টেলর

উত্তর:





4

ব্র্যাচল্যাগ , 28 বাইট

:1f.
cdo:Im:?:2f.
t:.m:Im~h?

ব্যাখ্যা

  • প্রধান শিকারী, ইনপুট ( ?) = তালিকার একটি তালিকা

    :1f.              Find all valid outputs of predicate 1 with ? as input
    
  • ভবিষ্যদ্বাণী 1:

    c                 Concatenate the list of lists into a single list
     do               Remove duplicates and sort
       :Im            Take the Ith element of that sorted list
          :?:2f.      Find all valid outputs of predicate 2 with [Element:?] as input
    
  • ভবিষ্যদ্বাণী 2:

    t:.m              Take the (Output)th element of the list of lists
        :Im           Take the Ith element of that list
           ~h?        This element is the element of the input [Element:List of lists]
    


3

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

a=>a.map((b,i)=>b.map(j=>(r[j]=r[j]||[]).push(i)),r=[])&&r

3

সিজেএম ( 30 29 বাইট)

Mq~{W):W;{:X)Me]_X=W+X\t}/}/`

অনলাইন ডেমো

কৌতূহলীভাবে এটি Wব্যবহারের চেয়ে চারপাশে হ্যাক করা আরও ছোট ee, মূলত কারণ আমি চাই যে সূচকটি যে কোনওভাবে পরিবর্তিত হয়। e]প্রথমে সর্বাধিক উপাদান খুঁজে পাওয়া mএবং m+1খালি অ্যারেগুলির একটি অ্যারে শুরু করে দুটি বাইট সংরক্ষণ করা ।

ধন্যবাদ মার্টিন এক বাইট মধ্যে একটি মানের মজুত করে সংরক্ষণের জন্য Xপরিবর্তে স্ট্যাকের প্রায় এটা juggling।

এনবি যদি খালি অ্যারেগুলি অনুসরণ করার অনুমতি দেওয়া হয় তবে স্প্রেডশীট যতগুলি ফাঁকা দিন রয়েছে তার পরিবর্তে বিকল্প 29-বাইট পদ্ধতির বিকল্প রয়েছে:

q~_e_,Ma*\{W):W;{_2$=W+t}/}/`

3

সিজোম, 20 বাইট

পিটার টেলরকে তার সমাধানের ভিত্তিতে আমাকে এই কোডটি বেজ করতে এবং 3 বাইট সংরক্ষণ করার জন্য ধন্যবাদ।

{ee::f{S*\+S/}:~:.+}

একটি নামবিহীন ব্লক যা স্ট্যাকের উপরে ইনপুটটি প্রত্যাশা করে এবং আউটপুট দিয়ে এটি প্রতিস্থাপন করে।

এটি এখানে পরীক্ষা করুন।

ব্যাখ্যা

ee    e# Enumerate the input. E.g. if the input is 
      e#   [[3 5 6 2] [0 0 0] [1 0 3 4]]
      e# this gives:
      e#   [[0 [3 5 6 2]] [1 [0 0 0]] [2 [1 0 3 4]]]
::f{  e# The exact details of how this works are a bit tricky, but in effect
      e# this calls the subsequent block once for every spreadsheet and
      e# its correspond index, so the first time we'll have 0 and 3 on the
      e# stack, the next time 0 5, and at the last iteration 2 and 4.
      e# Note that this is a map operation, so we'll end up with an array
      e# on the stack.
  S*  e#   So the stack holds [... index date] now. We start by creating
      e#   a string of 'date' spaces, so "   " on the first iteration.
  \+  e#   We swap this with the index and append the index.
  S/  e#   Now we split this thing on spaces, which gives us 'date' empty
      e#   lists and a list containing the index, e.g. [[] [] [] [0]].
}
:~    e# This flattens the first level of the result, so that we get a list
      e# of all those lists we just created. This is simply one list for
      e# every spreadsheet with its type in the last element.
:.+   e# Finally we fold pairwise concatenation over this list. All the 
      e# empty lists won't affect the result so we'll just end up with all
      e# the types in lists for the correct date.


2

গণিত, 35 বাইট

Table[#&@@@#~Position~i,{i,Max@#}]&

একটি নামবিহীন ফাংশন যা একটি রাগযুক্ত তালিকা গ্রহণ করে এবং ফেরত দেয়। 1-ভিত্তিক সূচকগুলি ব্যবহার করে।

কৃতজ্ঞতার সাথে Maxতার সমস্ত ইনপুট স্বয়ংক্রিয়ভাবে ফ্ল্যাট করে, সুতরাং ইনপুটটি একটি রগড তালিকা থাকা সত্ত্বেও এটি আমাদের শেষ দিনের সূচি দেয়। তারপরে আমরা কেবল #&@@@#~Position~iসমস্ত দিন সূচকগুলির জন্য একটি তালিকা গণনা করি i। এই অভিব্যক্তিটি নিজেই iর‌্যাগড তালিকার ভিতরে অবস্থান আবিষ্কার করে (ক্রমাগত গভীরতায় সূচকের অ্যারে হিসাবে প্রত্যাবর্তন), সুতরাং আমরা যে মানগুলি চাই তা সেই তালিকাগুলির প্রত্যেকটিরই প্রথম মান। #&@@@প্রতিটি উপ-তালিকা থেকে প্রথম উপাদানটি পুনরুদ্ধার করার জন্য একটি আদর্শ গল্ফিং ট্রিক #&, সেই সমস্ত সাবলিস্টের প্রতি প্রয়োগ করে এটি একটি নামহীন ফাংশন যা তার প্রথম যুক্তিটি ফিরিয়ে দেয়।

বিকল্পভাবে, আমরা একই বাইট-কাউন্টের জন্য একটি আইয়ানারি অপারেটরকে সংজ্ঞায়িত করতে পারি (একটি আইএসও 8859-1 এনকোডেড উত্স ফাইলটি ধরে নিচ্ছি):

±n_:=#&@@@n~Position~#&~Array~Max@n

2

জাভা, 314 বাইট

int[][]f(int[][]n){int w=0;Map<Integer,List<Integer>>m=new TreeMap<>();for(int i=0;i<n.length;i++)for(Integer x:n[i]){if(m.get(x)==null)m.put(x,new ArrayList<>());m.get(x).add(i);w=x>w?x:w;}int[][]z=new int[w+1][];for(int i=0,j;i<w+1;i++){z[i]=new int[m.get(i).size()];j=0;for(int x:m.get(i))z[i][j++]=x;}return z;

বিশদ

public static Integer[][] f(Integer[][]n)
{
    int w=0;
    Map<Integer,List<Integer>>m=new TreeMap<>();

    for(int i=0;i<n.length;i++)
    {
        for(Integer x : n[i])
        {
            if(m.get(x)==null) m.put(x,new ArrayList<Integer>());
            m.get(x).add(i);
            w=x>w?x:w;
        }
    }

    Integer[][]z=new Integer[w+1][];
    for(int i=0,j; i<w+1; i++)
    {
        z[i]=new Integer[m.get(i).size()];
        j=0;for(Integer x : m.get(i))z[i][j++]=x;
    }

    return z;
}

1
আপনার কি সত্যিই দরকার Map?
ফুটো নুন

0

পার্ল 5, 48 বাইট

একটি সাবরুটিন:

{for$i(0..@_){map{push@{$b[$_]},$i}@{$_[$i]}}@b}

এটি এর মতো ক্রিয়াতে দেখুন:

perl -e'print "@$_$/" for sub{for$i(0..@_){map{push@{$b[$_]},$i}@{$_[$i]}}@b}->([3,2,5,0],[1,3],[2,1,0,4],[4,5,3],[6,6])'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.