সূচক এবং মানগুলি অদলবদল করুন


29

কাজটি

একটি প্রোগ্রাম বা ফাংশন যার ইনপুট একটি তালিকা / অ্যারে লিখুন এক্স পূর্ণসংখ্যার, যার আউটপুট পূর্ণসংখ্যার সেট একটি তালিকা রয়েছে ওয়াই , এই ধরনের প্রতিটি উপাদানের জন্য প্রতিটি সেটে ওয়াই [ আমি ], এক্স [ ] = আমি , এবং যেমন Y এর সেটগুলিতে মোট উপাদানগুলির সংখ্যা X এর পরিমাণের সমান ।

(এটি মূলত হ্যাশ টেবিল / অভিধানের বিপরীত হিসাবে একই ক্রিয়া, পরিবর্তে অ্যারেগুলিতে প্রয়োগ না করে))

উদাহরণ

এই উদাহরণগুলি 1-ভিত্তিক সূচক ধরে নিয়েছে, তবে আপনি যদি পছন্দ করেন তবে 0-ভিত্তিক সূচী ব্যবহার করতে পারেন।

X             Y
[4]           [{},{},{},{1}]
[1,2,3]       [{1},{2},{3}]
[2,2,2]       [{},{1,2,3}]
[5,5,6,6]     [{},{},{},{},{1,2},{3,4}]
[6,6,5,5]     [{},{},{},{},{3,4},{1,2}]

ব্যাখ্যা

  • আপনি যদি চান তবে একটি তালিকা হিসাবে একটি সেট উপস্থাপন করতে পারেন। আপনি যদি এটি করেন তবে এর উপাদানগুলির ক্রম কিছু যায় আসে না, তবে আপনি উপাদানগুলি পুনরাবৃত্তি করতে পারেন না।
  • আপনি যে কোনও যুক্তিসঙ্গত দ্ব্যর্থহীন I / O ফর্ম্যাট ব্যবহার করতে পারেন; উদাহরণস্বরূপ, আপনি শূন্যস্থান সহ একটি সেটের উপাদানগুলি আলাদা করতে পারেন এবং সেটগুলি নতুন লাইনের সাথে সেট করে।
  • Y এর চূড়ান্তভাবে দীর্ঘ হওয়া উচিত, এবং অ্যারের সূচকগুলি হিসাবে এক্স এর সমস্ত উপাদান থাকতে কমপক্ষে দীর্ঘ । তবে এটি এক্সের সর্বোচ্চতম উপাদানের চেয়ে দীর্ঘ হতে পারে (অতিরিক্ত উপাদানগুলি খালি সেট হবে)।
  • এক্স এর উপাদানগুলি সমস্ত বৈধ অ্যারে সূচকগুলি হবে, আপনি যদি 0-ভিত্তিক সূচক ব্যবহার করেন তবে অ-নেতিবাচক পূর্ণসংখ্যা বা আপনি 1-ভিত্তিক সূচক ব্যবহার করলে ধনাত্মক পূর্ণসংখ্যার সমষ্টি হবে।

বিজয় শর্ত

হিসেবে চ্যালেঞ্জ, খাটো উত্তম।


সম্পর্কিত । ইন স্যান্ডবক্স পোস্টে (এখন মোছা হয়েছে, কিন্তু আপনি তা দেখতে পারবেন যদি আপনার খ্যাতি আছে), আমরা সিদ্ধান্ত নিয়েছি এটা সম্ভবত একটি ডুপ্লিকেট ছিলেন না কিন্তু ঘনিষ্ঠ ভোট যদি আপনি অসম্মতি মুক্ত মনে।

"তার উপাদানের ক্রম কোন ব্যাপার না" মানে আউটপুটের [5,5,6,6]এবং [6,6,5,5]অভিন্ন হতে পারে?
লিকি নুন

1
@ লিক্যুনুন আউটপুট তালিকার সেটের উপাদানগুলির ক্রমের কোনও ব্যাপার নেই। সুতরাং [5,5,6,6]এবং [6,6,5,5]অভিন্ন আউটপুট থাকতে পারে না, তবে এর জন্য আউটপুটও [5,5,6,6]হতে পারে, যেমন [{},{},{},{},{2,1},{4,3}],।
নেজেনিসিস

এক্সে কোনও সূচকের কোনও অবিশ্বাস্য সর্বাধিক মান আছে? এছাড়াও খালি সেটগুলিতে আসলে খালি হওয়ার পরিবর্তে সেগুলিতে 0 থাকতে পারে? উদাহরণস্বরূপ [{0},{0},{0},{0},{1,2},{3,4}]জন্য বৈধ আউটপুট হবে [5,5,6,6]?
স্কিডদেব

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

উত্তর:


9

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

tn:IXQ&D

ইনপুট একটি কলাম ভেক্টর, ;বিভাজক হিসাবে (উদাহরণস্বরূপ [2;2;2])। আউটপুট হ'ল সারি ভেক্টরগুলির একটি সেল অ্যারের স্ট্রিং প্রতিনিধিত্ব (উদাহরণস্বরূপ {[]; [1 2 3]})। একটি একক উপাদানের একটি সারি ভেক্টর একটি সংখ্যার সমান (সুতরাং {1; 2; 3}পরিবর্তে আউটপুট হবে {[1]; [2]; [3]})।

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা

t     % Implicit input, say x. Duplicate
n     % Number of elements, say N
:     % Range: [1 2 ... N]
IXQ   % accumarray(x, [1 2 ... N], [], @(x){sort(x).'})
&D    % String representation

বেশিরভাগ কাজ মতলবের উচ্চতর আদেশ ক্রিয়াকলাপ দ্বারা সম্পন্ন হয় accumarray, যা প্রথম ইনপুটগুলিতে প্রথমটির সাথে মানগুলির সাথে মিল রাখে এবং প্রতিটি গোষ্ঠীতে একটি নির্দিষ্ট ফাংশন প্রয়োগ করে। এই ক্ষেত্রে ফাংশনটি হ'ল @(x){sort(x).'}যা প্রতিটি গ্রুপে বাছাই করা উপাদানগুলিকে আউটপুট দেয় এবং সমস্ত গোষ্ঠীর জন্য ফলাফলগুলি একটি সেল অ্যারে প্যাক করে।


7

পাইথন, 69 বাইট

lambda s:[[j for j,x in enumerate(s)if x==i]for i in range(max(s)+1)]

0-ভিত্তিক সূচক ব্যবহার করে।



5

জেলি , 8 বাইট

Jẋ"Ṭ€;"/

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

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

Jẋ"Ṭ€;"/  argument: z           eg. [6,6,4,4]
J         [1 .. len(z)]             [1,2,3,4]
   Ṭ€     untruth each of z         [[0,0,0,0,0,1],
                                     [0,0,0,0,0,1],
                                     [0,0,0,1],
                                     [0,0,0,1]]
 ẋ"       repeat each of ^^         [[[],[],[],[],[],[1]],
          as many times as           [[],[],[],[],[],[2]],
          each of ^                  [[],[],[],[3]],
                                     [[],[],[],[4]]]
       /  reduce by...
     ;"   vectorized concatenation  [[],[],[],[3,4],[],[1,2]]

4

গণিত, 36 বাইট

Join@@@#~Position~n~Table~{n,Max@#}&

ব্যাখ্যা

এখানে চিত্র বর্ণনা লিখুন

প্রত্যেকের জন্য n{1, 2, ..., Max@#}, যেখানে Max@#ইনপুট তালিকার মধ্যে বৃহত্তম পূর্ণসংখ্যা, নির্ণয় Positionগুলি যেখানে nইনপুট তালিকায় দেখা #। যেহেতু Position[{6,6,5,5},5](উদাহরণস্বরূপ) ফেরত আসে {{3},{4}}, আমরা তারপরে ফলাফলের Apply Joinস্তরে সমস্ত উপাদানগুলিতে চলে যাই {1}


3

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

sপূর্ণসংখ্যার একটি তালিকা নেয় এবং তালিকার একটি তালিকা ফেরত দেয়। পরীক্ষার কেস ইনপুটগুলি আনমোডাইফড রাখতে 1-ইনডেক্সড (যদিও আউটপুট কিছু অতিরিক্ত খালি তালিকা পায়)।

s l=[[i|(i,y)<-zip[1..]l,y==x]|x<-[1..sum l]]

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

এগুলি বেশ সহজবোধ্য নেস্টেড তালিকা বোঝার। কেবলমাত্র সামান্য সাম্প্রতিক আলোর sumপরিবর্তে ব্যবহার করে দীর্ঘ তালিকা তৈরির বিকল্পটি গ্রহণ করা হচ্ছে maximum


3

পিএইচপি, 55 বাইট

<?while($i<=max($_GET))print_r(array_keys($_GET,$i++));

0-ইন্ডেক্স।


3

আর, 68 49 47 বাইট

lapply(1:max(x<-scan()),function(y)which(y==x)) 

আশ্চর্যজনকভাবে, দীর্ঘ সমাধানগুলির চেয়ে অনেক বেশি সোজা। একটি ভেক্টর লাগে x, stdin থেকে একটি ভেক্টর সৃষ্টি 1করতে max(x), পরোক্ষভাবে দৈর্ঘ্য একটি তালিকা তৈরি করেmax(x) , এবং চেক যা সূচকের xনতুন তালিকা ঐ সঙ্গে সংগতিপূর্ণ। সুস্পষ্টভাবে আউটপুট মুদ্রণ।

পুরানো সংস্করণ:

o=vector('list',max(x<-scan()));for(i in x)o[[i]]=c(o[[i]],F<-F+1);o

অন্যান্য আর উত্তরের জন্য সামান্য ভিন্ন পদ্ধতির। STDIN এ কোনও ভেক্টর নেয়, ইনপুটটির সর্বোচ্চ মানের সমান দৈর্ঘ্য সহ একটি তালিকা তৈরি করে। ইনপুটটি লুপ করে এবং সঠিক জায়গায় সূচকটি যুক্ত করে।

1-ভিত্তিক সূচক ব্যবহার করে।


2

পাইথন 2 , 91 86 85 বাইট

আমি আমার ফোনে প্রোগ্রামিং করছি তবে আমি এই চ্যালেঞ্জটি সত্যই পছন্দ করেছি। আমি অবশ্যই আরও এই গল্ফ করতে পারেন।

def f(a):
 r=[[]for i in range(max(a)+1)]
 for i,j in enumerate(a):r[j]+=[i]
 print r

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


নেস্টেড তালিকা বোঝার দ্বারা আবার গল্ফড। : ডি
সম্পূর্ণরূপে

2

জেলি , 9 বাইট

Ṭ+\ịĠȧ@"Ṭ

1-ইনডেক্সড, খালি সেট হিসাবে উপস্থাপিত 0, এক আইটেমের Nসেট হিসাবে উপস্থাপিত একাধিক আইটেমের সেট হিসাবে উপস্থাপিত[M,N,...]

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

কিভাবে?

Ṭ+\ịĠȧ@"Ṭ - Main link: list a        e.g. [6,6,4,4]
Ṭ         - untruth a                     [0,0,0,1,0,1]
  \       - cumulative reduce with:
 +        -   addition                    [0,0,0,1,1,2]
    Ġ     - group indices of a by value   [[3,4],[1,2]]
   ị      - index into                    [[1,2],[1,2],[1,2],[3,4],[3,4],[1,2]]
        Ṭ - untruth a                     [0,0,0,1,0,1]
       "  - zip with:
     ȧ@   -   and with reversed @rguments [0,0,0,[3,4],0,[1,2]]

2

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

@ স্টিভবেনেট ধন্যবাদ 2 বাইট সংরক্ষণ করা


0-ইনডেক্সড ইনপুট নেয়। কমা-বিচ্ছিন্ন সেটগুলির তালিকা ফিরিয়ে দেয়।

a=>a.map((n,i)=>o[n]=[i,...o[n]||[]],o=[])&&`{${o.join`},{`}}`

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


বিকল্প সংস্করণ, 53 বাইট

যদি সরলীকৃত আউটপুট যেমন '||||3,2|1,0'গ্রহণযোগ্য হয় তবে আমরা কেবল এটি করতে পারি:

a=>a.map((n,i)=>o[n]=[i,...o[n]||[]],o=[])&&o.join`|`

কি দারুন. আমি কীভাবে `{${o.join`},{`}}`ES2015 আইনী তা ভ্রান্ত।
স্টিভ বেনেট

@ স্টিভবেনেট, এটি একটি টেমপ্লেট আক্ষরিক । জেএস এর পুরানো সংস্করণগুলিতে এটি হতে হবে "{" + o.join("},{") + "}", যদি এটি এটিকে আরও স্পষ্ট করে তোলে।
শেগি

না, আমি সেগুলি সম্পর্কে জানি - এই শব্দটি যুক্ত হওয়ার পরে এটি আমার পশ্চাদমূহ। এটি স্ট্রিংটি বন্ধ করে দিচ্ছে (যে ক্ষেত্রে ডাব্লুটিএফ) বা আপনি কীভাবে একটি বন্ধনী বন্ধনী থেকে বাঁচেন?
স্টিভ বেনেট

হুঁ, ঠিক আছে, সুতরাং এই প্রসঙ্গে join`সমতুল্য join('। আপনি এটা করতে পারেন কোন ধারণা ছিল।
স্টিভ বেনেট

আহ, এখন দেখছি। এটি একটি ট্যাগযুক্ত টেম্পলেট আক্ষরিক। কোনটি আপনি যখনই একটি ফাংশন যে এক পংক্তি আর্গুমেন্ট গ্রহণ করা (এবং অন্যদের উপেক্ষা করে) কলিং অক্ষরের একটি দম্পতি সংরক্ষণ করতে অপব্যবহার করতে পারেন: array.join` `। এখানে দুর্দান্ত বিভ্রান্তিকর কারণ আপনি এটি একটি টেম্পলেট স্ট্রিংয়ের মধ্যে এম্বেড করছেন এবং আরও বিভ্রান্তিকরভাবে যোগ দেওয়ার স্ট্রিংটি },{কাকতালীয়ভাবে টেম্পলেট স্ট্রিংয়ের অংশের মতো দেখাচ্ছিল ... এবং যাইহোক এটি কেবল অদ্ভুত এবং কুরুচিপূর্ণ। :)
স্টিভ বেনেট


1

গণিত 62 বাইট

(Y={}~Table~Max@#;Y[[#[[j]]]]~AppendTo~j~Table~{j,Tr[1^#]};Y)&

আমি আপনার জন্য এটি চালাতে হবে

(Y={}~Table~Max@#;Y[[#[[j]]]]~AppendTo~j~Table~{j,Tr[1^#]};Y)&[{4,5,2,3,3,8,6,3}]

{{}, {3}, {4, 5, 8}, {1}, {2}, {7}, {}, {6}

এটি অনলাইনে ব্যবহার করে দেখুন (কেবলমাত্র সিটিআরএল-ভি দিয়ে কোডটি পেস্ট করুন এবং শিফট + এন্টার টিপুন)
উপরের উদাহরণের মতো শেষের দিকে ইনপুট তালিকাটি পেস্ট করতে ভুলবেন না


পিপিসিজিতে আপনাকে স্বাগতম! আপনি ইনফিক্স স্বরলিপি ব্যবহার করে একটি বাইট সংরক্ষণ করতে পারেন AppendTo। এছাড়াও, {j,1,Length[#1]}সবেমাত্র {j,Length@#}বা আরও ছোট হতে পারে {j,Tr[1^#]}Tr[1^#]একটি হল প্রশংসনীয় সাধারণ কৌতুক ব্যবহার উপর একটি বাইট সংরক্ষণ করতে Length
নেজেনিসিস

1

পার্ল 6 ,  36 32  29 বাইট

->\a{map {a.grep(*==$_):k},1..a.max}

চেষ্টা করে দেখুন

{map {.grep(*==$^a):k},1.. .max}

চেষ্টা করে দেখুন

{map {.grep($^a):k},1.. .max}

চেষ্টা করে দেখুন


সম্প্রসারিত:

{  # bare block lambda with implicit parameter 「$_」

  map

    {  # bare block lambda with placeholder parameter 「$a」

      .grep(  # grep for the values in 「$_」
        $^a   # that are equal to the currently tested value (and declare param)
      ) :k    # return the key (index) rather than the value
    },

    1 .. .max # Range from 1 to the maximum value in 「$_」

}

রিটার্নস ভিত্তিক সূচী শূন্য, 1 ভিত্তিক পেতে ব্যবহার ক্রস অপারেটর ( X) সঙ্গে মিলিত +অপ । (৩৩ বাইট)

{1 X+.grep($^a):k}

এটি সেট করতে ফিরে আসার জন্যset সেখানে কেবল যুক্ত করুন (মোট 37 বাইট)

{set 1 X+.grep($^a):k}

1

আর, 80 72 বাইট

1-ইনডেক্সড, Xস্টিডিন থেকে নেয় । NULLখালি সেট হিসাবে সূচকগুলির ভেক্টরের একটি তালিকা ফেরত দেয় ।

X=scan();Y=vector('list',max(X));Y[X]=lapply(X,function(x)which(X==x));Y

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

পুরনো সংস্করণ:

X=scan();Y=vector('list',max(X));for(i in 1:length(X))Y[[X[i]]]=c(Y[[X[i]]],i);Y

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


আমি মনে করি এটি Y=list();ঠিক একইভাবে কাজ করে
rturnbull

একটি বন্ধ শেভ পরিচালিত fewআমার উত্তর বাইট :) codegolf.stackexchange.com/a/120024/59530
JAD




0

জিএনইউ মেক , 214 213 208 204 বাইট

X=$(MAKECMDGOALS)
M=0
P=$(eval N=$(word $1,$X))$(if $N,$(if $(shell dc -e$Nd$Mds.\>.p),$(eval M=$N),)$(eval A$N+=$1$(call $0,$(shell expr $1 + 1))),)
$(call P,1)$(foreach K,$(shell seq $M),$(info $(A$K)))

আই / ও: আর্গুমেন্টের মাধ্যমে ইনপুট অ্যারে, স্টাডআউট থেকে আউটপুট, ফাঁকা দ্বারা পৃথক পৃথক প্রতি লাইনে একটি।

$ make -f swap.mk 2 2 2

3 2 1
make: *** No rule to make target `2'.  Stop.

ব্যাখ্যা

X=$(MAKECMDGOALS)     # Input array
M=0                   # Max value encountered in X
P=$(eval
    N=$(word $1,$X))  # Get next word from X
  $(if $N,$(if $(shell dc -e$Nd$Mds.\>.p),
    $(eval M=$N),)    # Update M
    $(eval A$N+=$1    # Append index to a variable named after value
      $(call $0,      # Recurse (call returns empty string)
        $(shell expr $1 + 1))),)
$(call P,1)           # Initial call to P. 1 is the first index
$(foreach K,          # Print all values of A* variables
  $(shell seq $M),
  $(info $(A$K)))     # Uninitialized ones default to empty strings

সেটগুলিতে সূচকগুলির ক্রমটি বিপরীত হয় কারণ Pআপডেট হওয়ার আগে নিজেকে পুনরাবৃত্তভাবে কল করে A$2(ডান পাশের মূল্যায়নে কল কার্যকর করা হয়)।


না makeকোন ভাবেই নিজেই গাণিতিক কি আছে? বাহ্যিক প্রোগ্রামগুলিতে ডাকার জন্য এটি কিছুটা প্রতারণার মতো অনুভূত হয়, কারণ আপনি সম্ভবত সেই প্রোগ্রামগুলিতে অ্যালগরিদমের আরও অনেক কিছু রাখতে পারেন এবং একটি সংক্ষিপ্ত প্রোগ্রাম দিয়ে শেষ করতে পারেন।

@ ais523 এটি নেই। পূর্ববর্তী সংস্করণ ব্যবহৃত bcএবং grep। আমিও ব্যবহার করতে পারে testএবং $?dcএকটি টিয়ার সিনট্যাক্স রয়েছে, তবে প্রকৃতপক্ষে এগুলির সমস্ত একই অনুভব করে।
eush77


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