অ ইউনিক উপাদানসমূহ


24

এমন একটি প্রোগ্রাম লিখুন যা স্বাক্ষরিত পূর্ণসংখ্যার অ্যারের অ-অনন্য উপাদানগুলি খুঁজে পায়। ফলাফল অ্যারে যে কোনও ক্রমে হতে পারে।

আপনার উত্তরটি একটি স্নিপেট হতে পারে যা ইনপুটটিকে একটি ভেরিয়েবল ( d, বলুন) এ সংরক্ষণ করতে হবে এবং সঠিক ফলাফলের জন্য মূল্যায়ন করে।

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

প্রতিটি পরীক্ষার ক্ষেত্রে বিন্যাসে একটি লাইন হয় input => output। নোট করুন যে আউটপুট এর অন্যান্য অনুমতিও বৈধ।

[]                        => []
[-1, 0, 1]                => []
[1, 1]                    => [1]
[3, 0, 0, 1, 1, 0, 5, 3]  => [3, 0, 1]
[-34, 0, 1, -34, 4, 8, 4] => [-34, 4]

উপাদানগুলির ক্রম কোনও ব্যাপার নয়।

এটি কোড গল্ফ, তাই সংক্ষিপ্ত উত্তরটি (বাইটে) জেতে।



1
যেহেতু এটি পূর্ণসংখ্যার অ্যারের জন্য কোড আলাদা হবে। আমি অনেক ছোট মনে করি। এটি একটি স্ট্রিং জন্য।
garg10may

1
আমরা কি অ্যারের পরিবর্তে লাইন হিসাবে ইনপুট গ্রহণ করতে পারি? উদাহরণস্বরূপ, পরিবর্তে জন্য [-1, 0, 1], আমরা ইনপুট (প্রতিস্থাপন \ নতুন লাইন দিয়ে ঢ) করতে পারেন: "-1\n0\n1"?
অ্যাডিসন ক্রম্প

1
আউটপুটটির কি কোনও তালিকা থাকতে হবে বা কোনও সেট গ্রহণযোগ্য হবে?
ডেনিস

এবং এটি যে বিন্যাসে আউটপুট আছে?
অ্যাডিসন ক্রম্প

উত্তর:


16

কে 5, 5 বাইট

ধরে নিচ্ছি ইনপুটটি ইতিমধ্যে একটি ভেরিয়েবল নামে রয়েছে d,

?d^?d

( ?) ডি ( d^) এর পৃথক উপাদান ব্যতীত ডি এর স্বতন্ত্র উপাদান ( ?d) নিন। সুন্দরভাবে প্রতিসম, না? এটি কাজ করে কারণ "বাদে" অপারেটর বাম আর্গুমেন্ট থেকে ডান আর্গুমেন্টের কেবলমাত্র প্রথম উপস্থিতিকে সরিয়ে দেয়।

আরো সাধারণভাবে,

nu: {?x^?x}

পদক্ষেপে:

  nu'(();-1 0 1;1 1;3 0 0 1 1 0 5 3;-34 0 1 -34 4 8 4)
(()
 ()
 ,1
 0 1 3
 -34 4)

সম্পাদনা:

যদি আমরা অ-অনন্য উপাদানগুলির প্রথম উপস্থিতির ক্রমটি সংরক্ষণ করতে চাই, আমরা 4 টি অতিরিক্ত বাইট ব্যতীত অনন্য উপাদানগুলি সরিয়ে নেওয়ার আগে এবং পরে উত্স তালিকাটি উল্টাতে পারি:

  nu: {?|(|x)^?x}
  nu'(();-1 0 1;1 1;3 0 0 1 1 0 5 3;-34 0 1 -34 4 8 4)
(()
 ()
 ,1
 3 0 1
 -34 4)

10

সিজেম, 10

অ্যারে ধরে নিচ্ছি ইতিমধ্যে চলক ডিতে রয়েছে ( এই মন্তব্যের ভিত্তিতে ):

D{De=(},_&

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

ব্যাখ্যা:

D{…},   filter items of D based on the block
  De=   count occurrences in D
  (     decrement (resulting in true/false for duplicate/unique)
_&      remove duplicates from the results

দ্রষ্টব্য: pআপনি যদি প্রিন্ট করতে চান তবে একটি সংযোজন করুন , অন্যথায় ফলস্বরূপ অ্যারেটি কেবলমাত্র পূর্বনির্ধারিত কোনও ডেলিফিটর ছাড়াই মুদ্রিত। এটি গ্রহণযোগ্য কারণ প্রশ্ন স্নিপেটকে কেবল "সঠিক ফলাফলের মূল্যায়ন" করতে হবে।

স্ট্যান্ডার্ড ইনপুট / আউটপুট সংস্করণ, 13:

q~_{1$e=(},&p

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

ব্যাখ্যা:

q~      read and evaluate the input array
_       duplicate the array
{…},    filter items based on the block
  1$    copy the array
  e=    count occurrences
  (     decrement (resulting in true/false for duplicate/unique)
&       set intersection with the initial array (removes duplicates)
p       pretty print

1
13:q~$e`{((<~}%p
Sp3000

3
@ Sp3000 আপনার মন্তব্য পড়ার আগে আমি আরও একটি 13-বাইট সংস্করণ পেয়েছি :) এটি অর্ডারও সংরক্ষণ করে।
aditsu

9

হাস্কেল - 32

import Data.List;f l=nub$l\\nub l

খুব সংক্ষিপ্ত এমনকি আমদানি সহ। a \\ bপ্রতিটি উপাদান প্রথম সংঘটন সরিয়ে ফেলা bথেকে a, এবং nubএকটি তালিকা সমস্ত উপাদান অনন্য করে তোলে।


7

পাইথ, 7 বাইট

S{.-Q{Q

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

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

পাইথ স্বয়ংক্রিয়ভাবে মূল্যায়ন ইনপুটটিকে সঞ্চয় করে Qএবং সমস্ত অব্যবহৃত রিটার্ন মান মুদ্রণ করে।

     {Q  Convert Q into a set. This removes duplicates.
  .-Q    Perform "bagwise" difference of Q and set(Q).
         This removes the first occurrence of all elements in Q.
 {       Convert to set to deduplicate.
S        Sort. Returns a list.

7

এসকিউএল, 44 42 বাইট

SELECT*FROM D GROUP BY I HAVING COUNT(*)>1

আমি আশা করি এটি সঠিকভাবে ধরে নেওয়া ঠিক হবে যে টেবিল ডি তে পূর্ণসংখ্যাগুলি সঞ্চয় করা আছে? এটি এসকিউএল সার্ভার, পোস্টগ্রেএসকিউএল এবং সম্ভবত অন্যরা উভয়েই কাজ করবে। 2 বাইট থেকে @ মান্যাটওয়ার্ককে ধন্যবাদ


ধরে নিই যে টেবিল ডি-এর একমাত্র ক্ষেত্র, পোস্টগ্রিজ এসকিউএলএ আপনি এটিকে হ্রাস করতে পারবেন select*from d group by 1having count(*)>1। (মাইএসকিউএল এবং select*from1having
এসকিউএলাইটের পার্সারও অপ্রয়োজনীয়

@ মানাটওয়ার্ক এটির জন্য চিয়ার্স করে, স্ক্যুয়াল সার্ভারটিও বুঝতে পারে select*from1havingযদিও এটি পছন্দ করে না .. এটি ছেড়ে দেবেI having
মিকিটি

6

গণিত, 29 26 বাইট

ধরে নিচ্ছি যে ইনপুট এতে সঞ্চিত আছে d:

Select[d⋃d,d~Count~#>1&]

অন্যথায় এটি নামবিহীন ফাংশন হিসাবে এটি 29 বাইট:

Cases[#⋃#,n_/;#~Count~n>1]&

এখানে d⋃d(বা #⋃#) ডুপ্লিকেটগুলি মুছে ফেলার জন্য একটি গল্ফিং ট্রিক - সেট ইউনিয়নকে নিজের সাথে নিয়ে, ম্যাথামেটিকা ​​সেই তালিকাটিকে একটি সেট হিসাবে ব্যাখ্যা করে, ডুপ্লিকেটগুলি স্বয়ংক্রিয়ভাবে অপসারণ করে, যখন প্রকৃত ইউনিয়ন কিছুই করে না।

এরপরে, উভয় পদ্ধতিই সেই উপাদানগুলিকে কেবল ফিল্টার করে যা মূল তালিকায় অন্তত দুবার প্রদর্শিত হয়।


6

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

এটি জাভাস্ক্রিপ্ট কনসোলটিতে চালান:

e={};d.filter(x=>(e[x]=1+e[x]||0)==1)

সাধারণভাবে এটাই গৃহীত যে জাভাস্ক্রিপ্ট স্পষ্ট "আউটপুট / মুদ্রণ" ফাংশন কিছু বাছাই (যেমন প্রয়োজন console.log, alertইত্যাদি) সম্পূর্ণ বিবেচনা করা। যদি কোনও চ্যালেঞ্জ "একটি প্রোগ্রাম বা ফাংশন লিখুন" বলে, তবে ফাংশনটিও যথেষ্ট। পাশাপাশি, খুব কার্যকর সমাধান!
Mwr247

1
@ এমডব্লিউ 247 প্রশ্নটিতে বলা হয়েছে যে অ্যানভার এমন একটি স্নিপেট হতে পারে যা সঠিক ফলাফলের জন্য মূল্যায়ন করে
ক্রিশ্চিয়ান লুপাস্কু

1
মনে হয় আমি সেই অনুচ্ছেদে ভুল ব্যাখ্যা করেছি। ক্ষমা
প্রার্থনা

@ Mwr247 কোন সমস্যা নেই! :)
ক্রিশ্চিয়ান লুপাস্কু

6

মতলব / অষ্টাভ, 40

আমি ধরে নিচ্ছি ইনপুট মানগুলি আসল (জটিল নয়)। ইনপুটটি একটি ভেরিয়েবলের মধ্যে রয়েছে d

unique(d(sum(triu(bsxfun(@eq,d,d')))>1))

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


ইনপুট করার দরকার নেই, আপনি ভেরিয়েবল 'ডি'
তে

1
@ Garg10may ধন্যবাদ আপডেট করা হয়েছে। আপনার পোস্টে এটি উল্লেখ করা উচিত
লুইস মেন্ডো

যখন আউটপুট ভুল হয় d = [3, 0, 0, 1, 1, 0, 5, 3]। সেখানে দুটি 0এস।
আলেফালফ

@ এলফাল্ফ ধন্যবাদ! সংশোধন করা হয়েছে (আরও 8 বাইট)
লুইস মেন্ডো

অপেক্ষাকৃত ছোট: d(sum(triu(bsxfun(@eq,d,d')))==2)। বা d(sum(triu(d==d'))==2)
অক্টোবায়

6

পাইথন 3.5, 30

[x for x in{*d}if~-d.count(x)]

পাইথন 3.5 এর সেট আনপ্যাকিং ব্যবহার করে। ~-Subtracts 1, যা 1 0 একটি গণনা যা Falsy বেশি সময় লাগে।

এটি একটি তালিকা দেয়। যদি সেট দেওয়া ঠিক থাকে তবে আমরা 1 সেট সংরক্ষণ করব এবং সংস্করণ 3.5 র প্রয়োজন নেই:

{x for x in d if~-d.count(x)}

SyntaxError: invalid syntaxপাইথন 3 এর জন্য এটি কি কেবল 3.5 এর জন্য বৈধ? অজগর কখন রহস্যময় হয়ে উঠতে শুরু করেছে।
garg10may

@ garg10may আপনি অপেক্ষা করুন যতক্ষণ না আপনি দেখতে পাচ্ছেন 3.6 এর কী স্টোর রয়েছে ...
Sp3000

1
@ Sp3000 অসাধারণ। স্কালার মতো একই সেট আপ হিসাবে মনে হচ্ছে। আরও বিকল্পের চেয়ে অসীম আরও পঠনযোগ্য।
কারসিজেনিকেট

6

পাওয়ারশেল, 31 29 বাইট

($d|group|?{$_.Count-1}).Name

অনুমান যে $dইতিমধ্যে জনবহুল (প্রদত্ত হিসাবে) - যেমন $d=@(-34,0,1,-34,4,8,4),।

Group-Objectঅ্যারেগুলিকে সেমিডলেটে পাইপ দেয় , যা পছন্দসই আইটেমগুলিকে একসাথে গ্রুপ করে এবং মূলত অ্যারেগুলির একটি অ্যারের এমন একটি বস্তুকে স্পিট করে। আমরা পাইপ করি এটির Where-Object( ?অপারেটর) যার Countএকের বেশি (যেমন ডুপ্লিকেট রয়েছে), এবং .Nameএই আইটেমগুলির আউটপুট । প্রারম্ভিক অর্ডার সংরক্ষণেরও একটি পার্শ্ব বোনাস রয়েছে।

সম্পাদনা করুন - ডানকো দুর্বিয়কে ধন্যবাদ দুটি বাইট সংরক্ষণ করা হয়েছে ć


1
আমার মনে হয় আপনি প্রতিস্থাপন করতে পারেন $_.Count-gt1সঙ্গে $_.Count-1যে কোনো জন্য সত্য হবে Countএক তার চেয়ে অনেক বেশী।
ডানকো দুর্বিć

@ দানকোডুর্বিć দুর্দান্ত!
অ্যাডমবর্কবার্ক

6

এপিএল (ডায়ালগ ইউনিকোড) , 13 9 বাইট এসবিসিএস

বেনামে ট্যাসিট প্রিফিক্স ফাংশন।

∊(⊂1↓⊣¨)⌸

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

(...)⌸  প্রতিটি অনন্য উপাদান (বাম আর্গুমেন্ট) এবং সূচকগুলি যেখানে এটি ঘটে (ডান যুক্তি) এর জন্য নিম্নলিখিত সূক্ষ্ম ফাংশনটি প্রয়োগ করুন:

⊣¨ ডানদিকে প্রতিটি জন্য বামের একটি (অনন্য উপাদান) (সূচকগুলি)

1↓ এক ড্রপ

 ঘেরযুক্ত (নন-র‌্যাগড ম্যাট্রিক্স তৈরি করতে জিরো দিয়ে প্যাডিং প্রতিরোধ করে)

ε nlist (চেপ্টা)


5

জুলিয়া, 30 29 বাইট

∪(d[find(sum(d.==d',1)-1)])

d.==d'i,jযদি সত্য হয় d[i]==d[j]এবং অন্যথায় মিথ্যা হয় তবে মানটি সহ একটি প্রতিসম ম্যাট্রিক্স তৈরি করে । sumএক মাত্রায় মিশ্রণ এবং তারপরে 1 টি বিয়োগ করা শূন্য উত্পন্ন করবে যদি সেখানে উপাদানগুলির মধ্যে একটি থাকে এবং যদি একের বেশি থাকে তবে ননজারো থাকে। findঅ-শূন্য উপাদানগুলির সূচকগুলি প্রাপ্ত করবে, যা পরে অ্যারেটিকেই dসূচীকরণের জন্য ব্যবহৃত হয় । (ইউনিয়ন) uniqueপুনরায় পুনরুদ্ধারগুলি সরিয়ে এইভাবে ব্যবহৃত হওয়ার মতো কাজ করে।

পুরানো সমাধান:

∪(filter(i->sum(d.==i)>1,d))

সহজ - প্রতিটি প্রবেশের জন্য, এটি অ্যারের মধ্যে একের বেশি রয়েছে কিনা তা পরীক্ষা করে। যাদের জন্য একের অধিক রয়েছে তারা "ফিল্টার" দ্বারা ফিরে আসেন এবং তারপরে (ইউনিয়ন) uniqueপুনরাবৃত্তিগুলি সরিয়ে এইভাবে ব্যবহার করার মতো কাজ করে।

দ্রষ্টব্য: মূলত এটি একটি ফাংশন হিসাবে ছিল, তবে প্রশ্নটি অ্যারেটিকে একটি ভেরিয়েবলের মধ্যে সঞ্চয় করতে দেয়, যার জন্য আমি dপ্রশ্নে প্রস্তাবিত হিসাবে বেছে নিয়েছি ।


5

পাইথন 2.7, 36 42

list(set(filter(lambda x:d.count(x)>1,d)))

সম্পাদনা : প্রশ্নের প্রয়োজনীয় বিন্যাসটি মেনে চলার জন্য তালিকাটি (..) দিয়ে অভিব্যক্তিটিকে ঘিরে রেখেছে


এটি আউটপুট কোনও তালিকা নির্ধারণ করবে না

তাহলে আমি কি আমার স্নিপেটকে তালিকাতে কল করার সাথে ঘিরে ফেলব (...)?
ডাইটার

হ্যাঁ আউটপুট কেবল একটি অ্যারে হওয়া উচিত।
garg10may


5

আর, 31 24 বাইট

7 বাইটের জন্য ফ্লোদেলকে ধন্যবাদ ।

ধরে নিচ্ছি ইনপুটটি ইতিমধ্যে রয়েছে d

কোড:

unique(d[duplicated(d)])

সম্পাদনা: অ্যাডিতসু দ্বারা নির্দেশিত 2 টির বেশি সদৃশ থাকলে এখন এটি সঠিকভাবে আউটপুট হবে ।


2
দেখতে সুন্দর! তবে চতুর্থ পরীক্ষার মামলাটি সঠিক বলে মনে হচ্ছে না ...
aditsu

1
আপনি অপসারণ করতে পারেন whichযেহেতু [একটি যৌক্তিক যুক্তিও গ্রহণ করে।
ফ্লোডেল

5

পাইথন 3 - 33 30 বাইট

{_ for _ in d if d.count(_)>1}

প্রতিস্থাপন আউটপুট, dইনপুট হিসাবে।



4

পাইথ, 7 বাইট

ft/QT{Q

ব্যাখ্যা:

ft/QT{Q
           Q = eval(input())
     {Q    set(Q) - deduplicate
f          filter - with T as the filter variable.
  /QT      count in Q of T
 t         minus 1.

ফিল্টার উপাদানগুলির সেট থেকে একবারে প্রদর্শিত সমস্ত উপাদান সরিয়ে দেয়।


4

লিনিকিউ, 62 54 বাইট

কিন্ডা এখানে নতুন, কিন্তু এখানে কিছুই যায় না।

d.GroupBy(c=>c).Where(g=>g.Count()>1).Select(g=>g.Key)

সাইটে স্বাগতম! আমি লিনকিউ জানি না, তবে এমন কিছু শ্বেত স্পেস রয়েছে যা আপনি সম্ভবত আপনার স্কোরটি উন্নত করতে এটি থেকে সরাতে পারেন।
DLosc



3

গণিত, 23 বাইট

ইনপুট এতে সঞ্চিত রয়েছে d:

Pick[#,#2>1]&@@@Tally@d

একটি ফাংশন হিসাবে, 24 বাইট:

Pick[#,#2>1]&@@@Tally@#&

উদাহরণস্বরূপ, সাথে

d = {3, 0, 0, 1, 1, 0, 5, 3}
Tally@d

এটি ফেরত দেয়:

   {{3, 2},
    {0, 3},
    {1, 2},
    {5, 1}}

(প্রতিটি সাবলিস্টের প্রথম উপাদানটি হ'ল উপাদান, দ্বিতীয়টি সংঘটনটির ফ্রিকোয়েন্সি)। এই তালিকায় প্রয়োগ করা এটিকে Pick[#,#2>1]&@@@রূপান্তরিত করে

{Pick[3,2>1], Pick[0,3>1], Pick[1,2>1], Pick[5,1>1]}

এবং যেখানে প্রথম যুক্তির Pickমূল্যায়নের দ্বিতীয় যুক্তিটি Trueফিরে আসে।


3

কে (কে 5 নয়), 10 বাইট

x@&1<#:'=x

ধরে নিই ইনপুট রয়েছে x। আমি ভেবেছিলাম একটি নন-কে 5 উত্তর দেওয়া মজা পাবে!


3

পার্ল 6, 16 বাইট

ধরে নিচ্ছি যে তালিকাটি সঞ্চিত আছে $_আপনি নীচের যে কোনও স্নিপেট ব্যবহার করতে পারেন।
(যা বিশেষভাবে অনুমোদিত ছিল)

(--«.BagHash).Set.keys # 23 bytes
keys .Bag (-) .Set # 18 bytes
# U+2216 SET MINUS
keys .Bag∖.Set # 16 bytes in utf8

আপনি যদি কোনও ব্যাগ পান সেদিকে খেয়াল না রাখেন তবে আপনি ছেড়ে যেতে পারেন keys 

$_ = [3, 0, 0, 1, 1, 0, 5, 3];
.Bag∖.Set  3 # True
.Bag∖.Set  5 # False

এগুলির মধ্যে কেবলমাত্র স্বাক্ষরিত পূর্ণসংখ্যার উপর কাজ করার সীমাবদ্ধতা নেই, বা এমনকি এই বিষয়ে কেবল সংখ্যাও।

say keys .Bag∖.Set given |(<a b c d a a c>), 1/3, 2/3 - 1/3;
# (a c 0.333333)




2

অক্টাভা, 33 বাইট

[~,a]=unique(d);d(a)=[];unique(d)
  • প্রতিটি অনন্য পূর্ণসংখ্যার প্রথম ঘটনার সূচকগুলি সন্ধান করে,
  • এই ঘটনাগুলি সরিয়ে দেয়, এবং
  • অবশিষ্ট অ্যারের অনন্য উপাদানগুলি সন্ধান করে।

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


2

জাভা 8, 80 বাইট

x.stream().filter(i->x.indexOf(i)!=x.lastIndexOf(i)).collect(Collectors.toSet())

ধরে নেওয়া x এর ইনপুট সংখ্যার তালিকা রয়েছে।


2

পিএইচপি, 35 37 বাইট

অনেকটাই অকপট:

array_diff_key($a,array_unique($a))

একটি দ্রষ্টব্য হিসাবে:; প্রশ্নগুলির উত্তর হিসাবে আমি লাইনের শেষে যোগ করিনি :

আপনার উত্তরটি একটি স্নিপেট হতে পারে যা ইনপুটটিকে একটি ভেরিয়েবলের (ডি, বলি) সংরক্ষণ করতে পারে এবং সঠিক ফলাফলের মূল্যায়ন করে

সুতরাং এই স্নিপেটটি এর মতো ব্যবহার করা যেতে পারে এবং সঠিক ফলাফলের জন্য মূল্যায়ন করে:

print implode(' ', array_diff_key($a,array_unique($a)));

আরেকটি নোট

উপরের কোডটি চ্যালেঞ্জে সরবরাহিত সমস্ত পরীক্ষার ক্ষেত্রে কাজ করে। এই সমস্ত অ-অনন্য অক্ষর সর্বাধিক সদৃশ। যদি কোনও উপাদান দু'বারের বেশি সংঘটিত হতে পারে, তবে অন্যটির array_unique()প্রয়োজন হবে, যা দৈর্ঘ্য 49 বাইটে বাড়িয়ে দেয় :

array_unique(array_diff_key($a,array_unique($a)))

সম্পাদনাগুলি


1
array_diff_keyপরিবর্তেarray_diff_assoc
Jörg Hülsermann

@ JörgHülsermann ভাল ক্যাচ ধন্যবাদ। পরের দিনগুলির মধ্যে আপনার অন্যান্য পরামর্শগুলি একবার দেখে নিবে।
সন্নিবেশকারীর নাম এখানে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.