স্ট্রিং থেকে অনন্য উপাদান সরানো


12

আমি এই প্রশ্নের উপরে এসেছি, কারণ স্ট্রিংয়ের মধ্যে অনন্য অক্ষরগুলি খুঁজে পেতে এটি খুব সাধারণ ব্যবহারের ক্ষেত্রে বলে মনে হয়। তবে আমরা যদি সেগুলি থেকে মুক্তি পেতে চাই?

ইনপুটটিতে কেবল ছোট ছোট বর্ণমালা থাকে। শুধুমাত্র a থেকে z পর্যন্ত বর্ণ ব্যবহার করা হয়। ইনপুট দৈর্ঘ্য 1 থেকে 1000 বর্ণের হতে পারে।

উদাহরণ:
ইনপুট
: হেলিওর্ল্ড আউটপুট: লোল

উদ্দেশ্য: সংক্ষিপ্ততম কোড জয়
ভাষা: টিআইওবি ভাষার শীর্ষ 20 টির মধ্যে যে কোনওটি

উত্তর:


7

পার্ল, ২৮ 24 টি অক্ষর ('পি' বিকল্পের জন্য 1 টি অন্তর্ভুক্ত)

s/./$&x(s!$&!$&!g>1)/eg

ব্যবহার:

> perl -pe 's/./$&x(s!$&!$&!g>1)/eg'
helloworld
llool

প্রথমে আমি ভেবেছিলাম আমি নেতিবাচক চেহারা-এগিয়ে এবং নেতিবাচক চেহারা-পিছনে এটি করতে পারি, তবে এটি দেখা গেছে যে নেতিবাচক চেহারা-পিছনের অবশ্যই একটি নির্দিষ্ট দৈর্ঘ্য থাকতে হবে। সুতরাং আমি পরিবর্তে নেস্টেড রেজেক্সেসের জন্য গিয়েছিলাম। টিপ জন্য ভিড় ধন্যবাদ $&


+1 টি। আমি নির্লজ্জভাবে ভেবেছিলাম আমি আমার রুবির উত্তর দিয়ে এই জিনিসটি নিতে পারি।
স্টিভেন রাম্বালস্কি

আমি চাইনিজ পাঠ্যে এটি চেষ্টা করেছি এবং এটি কৌশলটি করেনি। = (
ixtmixilix

@ixtmixilix - তারপরে -CDSঅপশনটি দিয়ে পার্ল চালান
ভিড় করুন

@ixtmixilix আমি ইউনিকোড এবং পার্ল এর সমর্থন সম্পর্কে যথেষ্ট জানি না এটি চীনা ভাস্কর দিয়ে কাজ করার উপায়ের পরামর্শ দেওয়ার জন্য আমি ভীত। ভাগ্যক্রমে আমার জন্য প্রশ্নটি কেবলমাত্র ছোট কেস টু জেড বলে।
গ্যারেথ

1
সমস্তটির $1সাথে প্রতিস্থাপন করুন $&এবং আপনি কয়েক জোড়া বন্ধনী হারাতে পারেন।
ভিড়

12

(গল্ফস্ক্রিপ্ট, 15 13 টি অক্ষর)

:;{.;?);>?)},

গল্ফস্ক্রিপ্ট শীর্ষ ২০ জনের মধ্যে একটি নয়, তবে গল্ফস্ক্রিপ্টবিহীন একটি কোডগল্ফ ... ( নিজে এটি চালান )

পূর্ববর্তী সংস্করণ: ( স্ক্রিপ্ট চালান )

1/:;{;\-,;,(<},

1
:;? আপনি ইচ্ছাকৃতভাবে newbies বিভ্রান্ত করার চেষ্টা করছেন, আপনি না? ;)
পিটার টেলর

@ পিটারটেলর আপনি ঠিক বলেছেন আমার একটি বেছে নেওয়া উচিত ছিল )- এটি তখন এটি একটি হাসিখুশি করে তুলবে :)। দুর্ভাগ্যক্রমে, আমি এমনকি 1 সংখ্যাটি মুছে ফেলার কোনও উপায় খুঁজে পাইনি (গল্ফস্ক্রিপ্ট newbies জন্য দ্রষ্টব্য: আপনি কোডটিতে যে কোনও ;একটি x(বা অন্য কোনও চিঠি বা অঙ্ক - বা স্ক্রিপ্টে অন্য কোনও অক্ষর ব্যবহার করা হয়নি) দিয়ে প্রতিস্থাপন করতে পারেন । এই বিশেষ ক্ষেত্রে ;কেবল একটি পরিবর্তনশীল নাম - এবং "পপ এবং বাতিল" এর অর্থ নেই Golf
হাওয়ার্ড

আরেকটি 13-চর সমাধান::a{]a.@--,(},
ইলমারি করোনেন

7

জে, 12 টি অক্ষর

একটি বৈধ পার্ল উত্তর সন্নিবেশ করানোর পরে, এখানে একটি অবৈধ (টিআইওবি শীর্ষ 20 তে ভাষা নেই)'s

a=:#~1<+/@e.

ব্যবহার:

   a 'helloworld'
llool

এমন একটি ক্রিয়া ঘোষণা করে aযা কেবল অনন্য আইটেমকেই আউটপুট করে।



4

রুবি 46 40 36

gets.chars{|c|$><<c if$_.count(c)>1}

আপনি যদি ইনলাইন হন sএবং $_দ্বিতীয় উপস্থিতির জন্য ব্যবহার করেন তবে আপনি 4 টি অক্ষর সাশ্রয় করতে পারেন (এর আগে স্থানটি তখন ডিসপেনসেবল)।
হাওয়ার্ড

@ হাওয়ার্ড: দুর্দান্ত ক্যাচ ধন্যবাদ। রুবির সাথে আমার প্রায় জিরো অভিজ্ঞতা আছে।
স্টিভেন রাম্বালস্কি

2

পার্ল 44

$l=$_;print join"",grep{$l=~/$_.*$_/}split""

এক্সেকিউশন:

perl -lane '$l=$_;print join"",grep{$l=~/$_.*$_/}split""' <<< helloworld
llool


2

পাইথন 2.7 ( 52 51), পাইথন 3 (52)

আমি এটি এত সংক্ষিপ্ত হবে আশা করিনি।

2.7: a=raw_input();print filter(lambda x:a.count(x)>1,a)

3.0: a=input();print''.join(i for i in a if a.count(x)>1)

raw_input(): স্ট্রিং ইনপুটটিকে স্ট্রিং হিসাবে ( input()= eval(raw_input()))
(পাইথন 3.0: input()রূপান্তরিত করা হয়েছে raw_input())

filter(lambda x:a.count(x)>1,a): aযদি সমস্ত অক্ষর aএকাধিকবার পাওয়া যায় তবে এর মধ্যে ফিল্টার করুন ( a.count(x)>1)।


আপনি যদি এর পরিবর্তে পাইথন 3 ব্যবহার করেন, তাহলে আপনি ব্যবহার করতে পারেন input()বরং raw_input()। যদিও আপনাকে একটি বন্ধনী বন্ধনীর জন্য একটি চরিত্র যুক্ত করতে হবে, যেহেতু printঅজগর 3 এ একটি ফাংশন
স্ট্রাইগয়েডস

@ স্ট্রিগোয়াইডস: আমি আমার উত্তরে একটি পাইথন 3 কোড স্নিপেট যুক্ত করেছি।
beary605

পাইথন 3 এর ফিল্টার একটি পুনরুক্তি ফেরত দেয় ... আপনাকে এটি করতে হবে''.join(...)
জবার্নার্ডো

@ জার্নার্ডো: :( ডাং। আমাকে জানানোর জন্য ধন্যবাদ। আপনি দেখতে পাচ্ছেন, আমি ৩.০ ব্যবহার করি না।
বেরি 605

2

সেড এবং কোর্টিলস (128)

মঞ্জুর যে এটি টিআইওবি তালিকার অংশ নয়, তবে এটি মজাদার (-:

<<<$s sed 's/./&\n/g'|head -c -1|sort|uniq -c|sed -n 's/^ *1 (.*)/\1/p'|tr -d '\n'|sed 's:^:s/[:; s:$:]//g\n:'|sed -f - <(<<<$s)

ডি-গল্ফ করা সংস্করণ:

s=helloworld
<<< $s sed 's/./&\n/g'        \
| head -c -1                  \
| sort                        \
| uniq -c                     \
| sed -n 's/^ *1 (.*)/\1/p'   \
| tr -d '\n'                  \
| sed 's:^:s/[:; s:$:]//g\n:' \
| sed -f - <(<<< $s)

ব্যাখ্যা

প্রথম সেড প্রতি লাইনে একটি অক্ষরে ইনপুট রূপান্তর করে। দ্বিতীয় সেড অক্ষরগুলি সন্ধান করে যা কেবল একবারই ঘটে। তৃতীয় সেড একটি সেড স্ক্রিপ্ট লিখেছেন যা অনন্য অক্ষর মুছে দেয়। শেষ সেড উত্পন্ন স্ক্রিপ্টটি কার্যকর করে।


2

ব্র্যাচল্যাগ (ভি 2), 8 বাইট

⊇.oḅlⁿ1∧

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

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

ব্যাখ্যা

⊇.oḅlⁿ1∧
⊇         Find {the longest possible} subset of the input
  o       {for which after} sorting it,
   ḅ        and dividing the sorted input into blocks of identical elements,
    lⁿ1     the length of a resulting block is never 1
 .     ∧  Output the subset in question.

আপনি কেন আপনার সমস্ত সমাধান সিডব্লিউ করেন?
শেগি

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

2

জাপট , 6 5 বাইট

ÆèX É

-1 বাইট @ অলিভারকে ধন্যবাদ

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


2
জাপটে স্বাগতম! এর জন্য আসলে একটি শর্টকাট রয়েছে o@:Æ
অলিভার

@ অলিভার আরেকটি শর্টকাট যা আমি মিস করেছি, শীতল, ধন্যবাদ :)
কুইনটেক

@ অলিভার, আরও ভাল প্রশ্ন হ'ল আমি কীভাবে এটি মিস করেছি ?! : \
শেগি

1

পাইথন (56)

পাইথনে আরও কিছু বিকল্প (এখানে কয়েক অক্ষর) রয়েছে:

a=raw_input();print''.join(c for c in a if a.count(c)>1)

আপনি যদি আউটপুটটিকে তালিকা হিসাবে গ্রহণ করেন (যেমন ['l', 'l', 'o', 'o', 'l']), তবে আমরা এটিকে 49 টি অক্ষরে সিদ্ধ করতে পারি :

a=raw_input();print[c for c in a if a.count(c)>1]

আরে, >1ভাল ধারণা! আমি কি আমার সমাধানের সাথে এটি যুক্ত করতে পারি?
beary605

@ beary605 অবশ্যই কোনও সমস্যা নেই - কোনও চরিত্র ছাঁটাই করার সহজ উপায়: ডি
আরশাজি

1

গণিত 72 63

ঠিক আছে, ম্যাথমেটিকা ​​শীর্ষ 20 টি ভাষার মধ্যে নয়, তবে আমি যেভাবেই হোক পার্টিতে যোগদানের সিদ্ধান্ত নিয়েছি।

x ইনপুট স্ট্রিং হয়।

"" <> Select[y = Characters@x, ! MemberQ[Cases[Tally@y, {a_, 1} :> a], #] &]

1

পার্ল (55)

@x=split//,<>;$s{$_}++for@x;for(@x){print if($s{$_}>1)}

স্টিডিনের কাছ থেকে পড়ে।


1

সি # - 77 টি অক্ষর

Func<string,string>F=s=>new string(s.Where(c=>s.Count(d=>c==d)>1).ToArray());

আপনি যদি আউটপুটটিকে অ্যারে হিসাবে স্বীকার করেন তবে তা 65 টি অক্ষরে ফোটে :

Func<string,char[]>F=s=>s.Where(c=>s.Count(d=>c==d)>1).ToArray();

1

ওকামল, 139 133

এক্সটলিবের এক্সট্রিং স্ট্রিং ব্যবহার করুন

open ExtString.String
let f s=let g c=fold_left(fun a d->a+Obj.magic(d=c))0 s in replace_chars(fun c->if g c=1 then""else of_char c)s

নন-গল্ফ সংস্করণ

open ExtString.String
let f s =
  let g c =
    fold_left
      (fun a c' -> a + Obj.magic (c' = c))
      0
      s
  in replace_chars
  (fun c ->
    if g c = 1
    then ""
    else of_char c)
  s

ফাংশনটি gস্ট্রিংয়ে সি এর উপস্থিতির সংখ্যা প্রদান করে। ফাংশনটি fখালি স্ট্রিং বা উপস্থিতি সংখ্যার উপর নির্ভর করে চরটিযুক্ত স্ট্রিং দ্বারা সমস্ত অক্ষরকে প্রতিস্থাপন করে। সম্পাদনা করুন: আমি বলের অভ্যন্তরীণ উপস্থাপনাকে গালি দিয়ে 6 টি অক্ষর দিয়ে কোডটি ছোট করেছি :-)

ওহ, এবং ocaml টিআইওবি সূচকে 0- ;)


চ *** টিআইওবি সূচক।
ixtmixilix

আমি রাজী. এছাড়াও, upvote জন্য ধন্যবাদ। এখন আমি মন্তব্য করতে পারি :-)
রেইচার্সস


1

জাভা 8, 90 বাইট

s->{for(char c=96;++c<123;s=s.matches(".*"+c+".*"+c+".*")?s:s.replace(c+"",""));return s;}

ব্যাখ্যা:

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

s->{                         // Method with String as both parameter and return-type
  for(char c=96;++c<123;     //  Loop over the lowercase alphabet
    s=s.matches(".*"+c+".*"+c+".*")?
                             //   If the String contains the character more than once
       s                     //    Keep the String as is
      :                      //   Else (only contains it once):
       s.replace(c+"",""));  //    Remove this character from the String
  return s;}                 //  Return the modified String

1

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

"$args"-replace"[^$($args|% t*y|group|?{$_.Count-1}|% n*)]"

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

কম গল্ফড:

$repeatedСhars=$args|% toCharArray|group|?{$_.Count-1}|% name
"$args"-replace"[^$repeatedСhars]"

দ্রষ্টব্য: $repeatedCharsএকটি অ্যারে। ডিফল্টরূপে, একটি পাওয়ারশেল অ্যারেগুলিকে স্ট্রিংয়ে রূপান্তর করার সময় স্পেস চর দ্বারা অ্যারে উপাদানগুলিতে যোগদান করে। সুতরাং, regexp স্পেস থাকে (এই উদাহরণে, [^l o])। স্পেসগুলি ফলাফলকে প্রভাবিত করে না কারণ ইনপুট স্ট্রিংয়ে কেবলমাত্র অক্ষর থাকে।


1

এপিএল (ডায়ালগ প্রসারিত) , 8 বাইট এসবিসিএস

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

∊⊢⊆⍨1<⍧⍨

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

⍧⍨ কাউন্ট-ইন সেলফি (আর্গুমেন্টের মধ্যে যুক্তির উপাদানগুলির উপস্থিতি গণনা করুন)

1< বুলিয়ান মাস্ক যেখানে তার চেয়ে কম less

⊢⊆⍨ সেই মুখোশটি দিয়ে আর্গুমেন্টটি ভাগ করুন (1s-তে একটি নতুন পার্টিশন শুরু করা এবং 0 সেটে সরানো)

ε nlist (চেপ্টা)


1

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

s=>[...s].filter(c=>s.match(c+'.*'+c)).join``

1

আর , 70 বাইট

a=utf8ToInt(scan(,''));intToUtf8(a[!a%in%names(table(a)[table(a)<2])])

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

এমনকি টিআইওবি শীর্ষ 20 টি ভাষা থেকেও একটি দুর্বল প্রচেষ্টা। আমি জানি দ্বিতীয়ার্ধ সম্পর্কে কিছু করা যেতে পারে তবে এই মুহুর্তে কোনও গল্ফ আমাকে ছেড়ে যায়।


1

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

স্ট্রিং হিসাবে ইনপুট, একটি অক্ষরের অ্যারে হিসাবে আউটপুট।

s=>[...s].filter(x=>s.split(x)[2])

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


খুশী হলাম। এখানে একটি বিকল্প ব্যবহার 34 byter এর map: tio.run/##BcExDoAgDADAvzgYOtjBHT9CTCSICqmUWKL8vt5l/...
অলিভার

@Oliver, বেশ
শেগি


0

পিএইচপি - 137

কোড

implode('',array_intersect(str_split($text),array_flip(array_filter(array_count_values(str_split($text)),function($x){return $x>=2;}))));

সাধারণ কোড

$text   = 'helloworld';
$filter = array_filter(array_count_values(str_split($text)), function($x){return $x>=2;});
$output = implode('',array_intersect(str_split($text),array_flip($filter)));

echo $output;

0

পিএইচপি - 83 78

<?for($a=$argv[1];$i<strlen($a);$r[$a[$i++]]++)foreach($ras$k=>$c)if($c>1)echo$k

উন্নত সংস্করণ:

<?for($s=$argv[1];$x<strlen($s);$c=$s[$x++]) echo substr_count($s,$c)>1?$c:'';

অবশ্যই এটি বন্ধ করার জন্য নোটিশ প্রয়োজন

সম্পাদনা: উন্নতি @ চেংকি মুয়ালিয়ানো দ্বারা অনুপ্রাণিত

আমি কোডগল্ফে খুব খারাপ :)


0

সি ++, 139 বাইট

string s;cin>>s;string w{s}; auto l=remove_if(begin(s),end(s),[&w](auto&s){return count(begin(w),end(w),s)==1;});s.erase(l,end(s));cout<<s;

ungolfed:

#include <algorithm>
#include <string>
#include <iostream>

int main() {
  using namespace std;
  string s;
  cin >> s;
  const string w{s};
  auto l = remove_if(begin(s), end(s), [&w](auto& s) {
                                         return count(begin(w), end(w), s) == 1;
                                       });
  s.erase(l, end(s));
  cout << s;
  return 0;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.