টাইপ করুন ইউনিক্সার!


41

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

একটি অ্যারেতে অনন্য উপাদানগুলির সন্ধানের জন্য কোনও বিল্ট-ইন ব্যবহার করা যাবে না (উদাহরণস্বরূপ, ম্যাটল্যাবের একটি uniqueকার্য রয়েছে যা এটি করে)। ম্যানুয়ালি এটি করার ধারণা।

আরো বিস্তারিত বিবরণ:

  • উভয় ক্ষেত্রেই ফাংশন বা প্রোগ্রাম অনুমতি দেওয়া হয়।
  • ইনপুট এবং আউটপুট ফাংশন আর্গুমেন্ট, স্টিডিন / স্টডআউট (এমনকি ফাংশনগুলির জন্য) বা সেগুলির মিশ্রণের আকারেও হতে পারে
  • যদি স্টিডিন বা স্টডআউট ব্যবহার করা হয় তবে একটি স্ট্রিং কেবল অক্ষরের ক্রম হিসাবে বোঝা যায় । যদি ফাংশন আর্গুমেন্টগুলি ব্যবহার করা হয়, তবে অক্ষরের ক্রমটি উদ্ধৃতি চিহ্নগুলিতে বা সমতুল্য চিহ্নগুলিতে আবদ্ধ হওয়া প্রয়োজন যা পছন্দসই প্রোগ্রামিং ভাষাটি স্ট্রিংগুলি সংজ্ঞায়িত করার জন্য ব্যবহার করে।
  • আউটপুট একটি স্ট্রিং হওয়া শুধুমাত্র ধারণকারী ইনপুটের অনন্য অক্ষর। সুতরাং কোনও অতিরিক্ত লাইনব্রেক, স্পেস ইত্যাদি নেই একমাত্র ব্যতিক্রম: আউটপুটটি স্টডআউটে প্রদর্শিত হয়, সর্বাধিক প্রদর্শিত ফাংশনগুলি একটি ট্রেলিং যুক্ত করে \n(পরবর্তীটি কী স্ট্রিংটি আলাদা হবে) থেকে পৃথক করে। সুতরাং একটি পিছনে \nstdout গ্রহণযোগ্য
  • যদি সম্ভব হয় তবে একটি অনলাইন ইন্টারপ্রেটার / সংকলকের একটি লিঙ্ক পোস্ট করুন যাতে অন্যরা আপনার কোড চেষ্টা করতে পারে।

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

স্ট্যান্ডিন এবং স্টাডআউট ধরে ধরে কিছু উদাহরণ :

  1. ইনপুট স্ট্রিং:

    Type unique chars!
    

    আউটপুট স্ট্রিং:

    Type uniqchars!
    
  2. ইনপুট স্ট্রিং

    "I think it's dark and it looks like rain", you said
    

    আউটপুট স্ট্রিং

    "I think'sdarloe,yu
    
  3. ইনপুট স্ট্রিং

    3.1415926535897932384626433832795
    

    আউটপুট স্ট্রিং

    3.14592687
    

5
কেবলমাত্র দ্বিগুণ পরীক্ষা করার জন্য: কোনও বিল্টইনস নিয়মের অর্থ কী সেট সেটগুলি অনুমোদিত নয়?
Sp3000

@ Sp3000 সেট বস্তু অনুমোদিত allowed কেবল কোনও ফাংশন বা পদ্ধতি (এটি উপস্থিত থাকলে) ব্যবহার করবেন না যা আপনাকে এর অনন্য উপাদান দেয়। এবং ইনপুট / আউটপুটটি স্ট্রিং হওয়া উচিত, টোবজেক্টগুলি সেট করা নয়
লুইস মেন্ডো

@ এসপি 3000 আপনি কি মনে করেন যে কোনও সেট ক্রিয়াকলাপ ব্যবহার না করা থাকলে এটি অর্ধেক দ্বারা বাইট গণনা হ্রাস করা আরও আকর্ষণীয় করে তুলবে? বা চ্যালেঞ্জ সেট হয়ে যাওয়ার পরে নিয়মগুলি পরিবর্তন করা ভাল না?
লুইস মেন্ডো

5
আমি মনে করি কেবলমাত্র আমার উত্তর বর্তমানে সেটগুলি ব্যবহার করে এবং আপনি যদি এটি পরিবর্তন করেন তবে আমার আপত্তি হবে না। তবে, আমি সত্যিই নিশ্চিত নই যে এর মতো বোনাসটি অনেক বেশি পরিবর্তিত হবে, যেমন আমি সন্দেহ করি যে সিজেম সেট ছাড়াই <6 বাইটে করণীয় হবে। এছাড়াও, আমি নিশ্চিত নই যে কোন বিল্টিনের মধ্যে লাইনটি যেখানে অনন্য উপাদানগুলি খুঁজে পায় এবং বেশ কয়েকটি উপাদান থেকে একটি সেট তৈরি করে ...
Sp3000

1
@ Sp3000 হ্যাঁ, এটি একটি অস্পষ্ট সীমানা। আমি প্রত্যাশিত সেট ফাংশন ছিল না। আমি মনে করি আমি চ্যালেঞ্জটি এখনকার মতোই ছেড়ে দেব
লুইস মেন্ডো

উত্তর:


13

গল্ফস্ক্রিপ্ট, 2 বাইট

.&

বা, বিকল্পভাবে:

.|

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


23

সিজেম, 3 বাইট

qL|

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

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


আমি ধরে নিচ্ছি যেহেতু সেটগুলি অনুমোদিত তাই এটি বৈধ, তবে আমি নিশ্চিত নই ...
Sp3000

খুব চালাক! আমি জানতাম সিজেম অন্যতম সেরা হবে তবে আমি কেবল 3 বাইট আশা করিনি!
লুইস মেন্ডো

19

সি # 6, 18 + 67 = 85 বাইট

এই usingবিবৃতি প্রয়োজন :

using System.Linq;

আসল পদ্ধতি:

string U(string s)=>string.Concat(s.Where((x,i)=>s.IndexOf(x)==i));

এই পদ্ধতিটি ল্যাম্বডা হিসাবে ফাংশনটি সংজ্ঞায়িত করে কিছু অক্ষর সংরক্ষণ করে , যা সি # 6 এ সমর্থিত, এটি সি # প্রাক -6 এ দেখতে পাবেন (তবে অবরুদ্ধ):

string Unique(string input)
{
    return string.Concat(input.Where((x, i) => input.IndexOf(x) == i));
}

এটি কীভাবে কাজ করে: আমি দুটি যুক্তিযুক্ত একটি ল্যাম্বদা দিয়ে স্ট্রিংটিতে Whereপদ্ধতিটি কল করি : xবর্তমান উপাদানটির প্রতিনিধিত্ব করে,i প্রতিনিধিত্ব করে, সেই উপাদানটির সূচককে উপস্থাপন করে। IndexOfসর্বদা এতে প্রদত্ত চরের প্রথম সূচকটি ফেরত দেয়, সুতরাং iএর প্রথম সূচকের সমান না হলে xএটি একটি সদৃশ চর এবং এটি অন্তর্ভুক্ত করা উচিত নয়।


3
আমি সত্যিই সি # এই সংক্ষিপ্ত হবে বলে আশা করি না। চমৎকার কাজ!
অ্যালেক্স এ।

UHM। আমার মনে হয় আপনার একটি সম্পূর্ণ প্রোগ্রাম জমা দেওয়া উচিত ( static void Mainইত্যাদি)।
টিমউই

3
@ টিমউই এই চ্যালেঞ্জটিতে বলা হয়েছে "হয় ফাংশন বা প্রোগ্রাম অনুমোদিত।"
এইচডিভি

সি # লিংক ব্যবহার করে আরও সংক্ষিপ্ত পদ্ধতির অনুমতি দেয়। আমি একটি প্রতিযোগিতামূলক উত্তর পোস্ট করেছি। :)
এইচডিভি

@hvd ভাল লাগল! +1
প্রোগ্রামএফক্স

14

অক্ষিপট , 14 বাইট

+`((.).*)\2
$1

প্রতিটি লাইনের নিজস্ব পৃথক ফাইলে যাওয়া উচিত, অথবা আপনি এটি ব্যবহার করতে পারেন -s একটি ফাইল থেকে পড়ার পতাকা ।

এটি ব্যাখ্যা করতে, আমরা এটি আরও দীর্ঘ কিন্তু সহজ সংস্করণ ব্যবহার করব:

+`(.)(.*)\1
$1$2

প্রথম লাইনটি হ'ল রেগেক্সের সাথে মেলে ( +`এটি এমন কনফিগারেশন স্ট্রিং যা সমস্ত প্রতিস্থাপন না করা পর্যন্ত চলতে থাকে)। রেজেক্স একটি অক্ষর সন্ধান করে (আমরা একে সি বলব), পরে শূন্য বা আরও বেশি স্বেচ্ছাচারিত অক্ষর, সি অনুসরণ করবে প্রথম বন্ধনী ক্যাপচারিং গ্রুপকে বোঝায়, তাই আমরা ম্যাচটি সি ( $1) এবং এর মধ্যবর্তী অক্ষরগুলির সাথে প্রতিস্থাপন করি $2, সি এর সদৃশ অপসারণ

উদাহরণস্বরূপ, যদি ইনপুট স্ট্রিং হয় uniqueতবে প্রথম রানটি যথাক্রমে এবং uniquসাথে uএবং niqহিসাবে মিলবে । তখনই মূল ইনপুটে মিলেছে সাবস্ট্রিং প্রতিস্থাপন করবে দান, ।$1$2uniquniqe


3
আমি এটি করার জন্য একটি রেজেক্সের সন্ধান করছিলাম; আমি বুঝতে পারি না যে এটি এত সংক্ষিপ্ত! +1
ETH প্রোডাকশনগুলি

13

পার্ল, 21 (20 বাইট + -p)

s/./!$h{$&}++&&$&/eg

ব্যবহার:

perl -pe 's/./!$h{$&}++&&$&/eg' <<< 'Type unique chars!'
Type uniqchars!

1
আপনি 1 টি বাইট অবহেলা $h{$&}এবং একটি যুক্তি ব্যবহার করে এবং একটি টের্নারি অপারেটরের পরিবর্তে সংরক্ষণ করতে পারেন :s/./!$h{$&}++&&$&/eg
কোস

@ কোস, যদি আপনি আমাকে জিজ্ঞাসা করতেন, আমি আপনাকে বলতাম যে আমি 100% চেষ্টা করেছি এবং 1ফলাফলটি শেষ করেছিলাম , তবে তা হয় না! ধন্যবাদ, আপডেট!
ডম হেস্টিংস

1
ইতিমধ্যে উত্সাহিত :) আমি মনে করি আপনি চেষ্টা করেছেন s/./$h{$&}++||$&/eg(আমি প্রথমে তার জন্যও পড়েছি)। লজ্জা কারণ এটি অন্য একটি সংরক্ষিত বাইট হত।
কোস

11

ম্যাকারনি 0.0.2 , 233 বাইট

set i read set f "" print map index i k v return label k set x _ set _ slice " " length index f e 1 1 set f concat f wrap x return label e set _ slice " " add _ multiply -1 x 1 1 return label v set _ unwrap slice i _ add 1 _ 1 return
  • "অ্যান্টি-গল্ফিং" ভাষা তৈরি করুন: পরীক্ষা করুন
  • যাইহোক এটি গল্ফ: চেক

এটি একটি সম্পূর্ণ প্রোগ্রাম, যা STDIN থেকে ইনপুট দেয় এবং STDOUT এ আউটপুট দেয়।

মোড়ানো সংস্করণ, নান্দনিক মানের জন্য:

set i read set f "" print map index i k v return label k set x _ set _ slice "
" length index f e 1 1 set f concat f wrap x return label e set _ slice " " add
_ multiply -1 x 1 1 return label v set _ unwrap slice i _ add 1 _ 1 return

এবং একটি ভারী "মন্তব্য করা" এবং অসম্পূর্ণ সংস্করণ (ম্যাকারোনীতে কোনও মন্তব্য নেই, তাই আমি কেবল খালি স্ট্রিং আক্ষরিক ব্যবহার করি):

set input read                  "read line from STDIN, store in 'input' var"
set found ""                    "we need this for 'keep' below"
print map index input keep val  "find indeces to 'keep', map to values, print"
return

label keep
    "we're trying to determine which indeces in the string to keep. the special
     '_' variable is the current element in question, and it's also the value
     to be 'returned' (if the '_' variable is '0' or empty array after this
     label returns, the index of the element is *not* included in the output
     array; otherwise, it is"
    set x _ set _ slice
        " "
        length index found exists
        1
        1
    "now we're using 'index' again to determine whether our '_' value exists in
     the 'found' array, which is the list of letters already found. then we
     have to apply a boolean NOT, because we only want to keep values that do
     NOT exist in the 'found' array. we can 'invert' a boolean stored as an
     integer number 'b' (hence, 'length') with 'slice(' ', b, 1, 1)'--this is
     equivalent to ' '[0:1], i.e. a single-character string which is truthy, if
     'b' was falsy; otherwise, it results in an empty string if 'b' was truthy,
     which is falsy"
    set found concat found wrap x  "add the letter to the 'found' array"
return

label exists
    set _ slice
        " "
        add _ multiply -1 x
        1
        1
    "commentary on how this works: since 0 is falsy and every other number is
     truthy, we can simply subtract two values to determine whether they are
     *un*equal. then we apply a boolean NOT with the method described above"
return

label val
    set _ unwrap slice input _ add 1 _ 1  "basically 'input[_]'"
return

(এটি প্রথম আসল ম্যাকারোনি প্রোগ্রাম (এটি আসলে কিছু করে)! \ O /)



11

জাভাস্ক্রিপ্ট ES7, 37 33 25 বাইট

ES6 Setএবং ES7 অ্যারে উপলব্ধিগুলি স্প্রেড অপারেটর ব্যবহার করে খুব সহজ পদ্ধতির :

s=>[...new Set(s)].join``

indexOfপদ্ধতির চেয়ে 22 বাইট কম । হাতে গোনা কয়েকটি পরীক্ষার মামলায় কাজ করেছেন।


প্রায় শূণ্যস্থান forএর অভিব্যক্তি আপনি এটা বেনামী ফাংশন বানাতে পারে অন্য কিছু সমাধান করেনি প্রয়োজনীয় হিসাবে নয় এবং: s=>[for(c of Set(s))c].join``। (হালকা আপডেট: 100% নিশ্চিত নয়, তবে newকীওয়ার্ডটিও অপ্রয়োজনীয় বলে মনে হচ্ছে))
manatwork

আনন ফাংশনগুলির সাথে নিয়মগুলি, এবং স্পেসে ভাল ধরা সম্পর্কে নিশ্চিত ছিল না।
Azz

গুগল ক্রোমের newফলাফল ছাড়াই ট্রান্সপ্লাইড কোড Uncaught TypeError: Constructor Set requires 'new'
Azz

দয়া করে আমার অজ্ঞতাটি ক্ষমা করুন তবে কোন মুহুর্তে এই ফিল্টারটি অনন্য মূল্যবোধ করে? দেখে মনে হচ্ছে এটি কেবল একটি স্ট্রিংকে একটি অ্যারেতে রূপান্তরিত করে আবার মূল স্ট্রিংয়ের ফলে মানগুলিতে মিলিত হয়।
প্যাট্রিক রবার্টস

@ পেট্রিকরোবার্টস এটি একটি সেটে রূপান্তর। সংজ্ঞায়িত একটি সেটটিতে কোনও ডুপ্লুইকেটস নেই
edc65

8

সি # 6 - 18 + 46 = 64

using System.Linq;

এবং তারপর

string f(string s)=>string.Concat(s.Union(s));

Enumerable.Unionএক্সটেনশন পদ্ধতি নির্দিষ্ট করে উপাদানের মূল অর্ডার ফিরে করা হয়:

যখন এই পদ্ধতিতে প্রত্যাবর্তিত বস্তুটি গণনা করা হয়, ইউনিয়ন সেই ক্রমে প্রথম এবং দ্বিতীয় গণনা করে এবং ইতিমধ্যে উত্পাদিত হয়নি এমন প্রতিটি উপাদান দেয়।

অপারেশনগুলি সেট করুন যা বিশেষত অনন্য মানগুলি খুঁজে পাওয়ার উদ্দেশ্যে নয় অন্য উত্তর দ্বারা বিচারের অনুমতি দেওয়া হবে বলে মনে হয়।


খুব ভাল, আমি ভাবছিলাম string u(string s)=>String.Join("",s.Distinct());তবে এটি কিছুটা দীর্ঘ।
জারমি

@germi ধন্যবাদ Distinct()ইতিমধ্যে ব্যবহার করে একটি উত্তর এসেছে , তবে এটি মুছে ফেলা হয়েছে কারণ Distinct()এই চ্যালেঞ্জটিতে এটি অনুমোদিত নয়, কারণ এটি একটি পদ্ধতি যা বিশেষত অনন্য মূল্যবোধগুলি সন্ধান করার উদ্দেশ্যে।
এইচডিভি


কি s => string.Concat(s.Union(s))বৈধ? এটিই হবে Func<string, string>যুক্তি হিসাবে একটি প্রতিনিধি প্রেরণ করা ।
টাইলার স্ট্যান্ডিশম্যান

@ টাইলারস্ট্যান্ডিশমন যদি এটি বৈধ হয় তবে আমি আরও বেশি লোক এটি ব্যবহার করার আশা করবো, এবং আমি এটি আগে দেখিনি, তাই আমি এটি মনে করি না। তবে সম্ভবত এটি বৈধ হওয়া উচিত - আপনার আগ্রহী হলে এটি মেটাতে চেক করার মতো কিছু বলে মনে হচ্ছে।
এইচডিভি

7

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

f=s=>s.replace(/./g,(e,i)=>s.indexOf(e)<i?'':e)

নীচের পরীক্ষাটি সমস্ত ব্রাউজারে কাজ করে।

f=function(s){
  return s.replace(/./g,function(e,i){
    return s.indexOf(e)<i?'':e
  })
}

run=function(){document.getElementById('output').innerHTML=f(document.getElementById('input').value)};document.getElementById('run').onclick=run;run()
<input type="text" id="input" value="Type unique chars!" /><button id="run">Run</button><br />
<pre id="output"></pre>


<i?'':eঅংশটি কী করে ?
ড্যানইম্যান

1
এটি একটি টেরিনারি অপারেটর। যদি কোনও চরিত্রের প্রথম উদাহরণটি eবর্তমান সূচকের আগে হয় তবে iএটি একটি খালি স্ট্রিং প্রদান করে, এইভাবে চরিত্র থেকে মুক্তি পেয়ে। যদি এটি প্রথম উদাহরণ হয় তবে এটি কেবল ফিরে আসে eএবং কোনও পরিবর্তন হয় না।
নিনজাবিয়ারমোনকি

7

ম্যাটল্যাব, ২৩

 @(n)union(n,n,'stable')

'স্থিতিশীল' পদ্ধতিটি বাছাই করে না এবং তারপরে মুদ্রণ করে, নিজের সাথে ইনপুট স্ট্রিংয়ের "সেট ইউনিয়ন" রাখে?

এটি কাজ করে কারণ unionএকত্রীকরণের পরে কেবল অ-সদৃশ মানগুলি প্রদান করে। সুতরাং মূলত যদি আপনি unionনিজের সাথে স্ট্রিং করেন তবে এটি প্রথমে এর মতো একটি স্ট্রিং তৈরি করে Type unique chars!Type unique chars!এবং তারপরে বাছাই ছাড়াই সমস্ত নকলকে সরিয়ে দেয়।

দরকার নেই unique:)


uniqueঅনুমতি নেই, দুঃখিত! এটি চ্যালেঞ্জ সংজ্ঞায় রয়েছে
লুইস মেন্ডো

মিস করেছেন, কিছু মনে করবেন না।
টম কার্পেন্টার

Sp3000 এর উত্তর অনুসরণ করে, আমি বিকল্পটি setdiffদিয়ে পরামর্শ দিতে পারি 'stable'?
লুইস মেন্ডো

1
নিস! এবং হ্যাঁ, আপনি অপসারণ করতে পারেন dispকারণ তারপর আপনি একটি ফাংশন আছে আয় একটি স্ট্রিং, যা অনুমোদিত হয়
লুইস Mendo

1
এছাড়াও আপনি ব্যবহার করতে পারেন intersectসঙ্গে 'stable'খুব একই প্রভাব অর্জন করা। আমি এটি লিখতে যাচ্ছিলাম, তবে এই উত্তরটি দেওয়া হয়েছে, এটি আর আসল লও না।
রায়রিং - মনিকা

7

> <> , 16 বাইট

i:0(?;:::1g?!o1p

> <> এর স্ট্রিং নেই, তাই আমরা কোডবক্সটি ব্যবহার করি। > <> এর টেরোডিয়াল প্রকৃতির কারণে নিম্নলিখিতটি একটি লুপে চলে:

i         Read a char
:0(?;     Halt if EOF
:::       Push three copies of the char
1g        Get the value at (char, 1), which is 0 by default
?!o       Print the char if the value was nonzero
1p        Set the value at (char, 1) to char

মনে রাখবেন যে এটি ইনপুটটিতে কেবল প্রিন্টযোগ্য ASCII রয়েছে, কারণ এটি ASCII 0 উপস্থিত থাকলে এটি কাজ করবে না uses


1
.......এটা অসাধারণ. আমি যদি এই ভেবেছি আমি আমার উত্তরে এর একটি বেফঞ্জ সংস্করণ অন্তর্ভুক্ত করব, তবে প্রাথমিক হিসাবে নয়। সম্পাদনা: দ্বিতীয় ভাবাতে, এটি কাজ করবে না কারণ বেফুঞ্জের সীমাহীন কোড স্পেস নেই। ধূর!
এল'েন্ডিয়া স্টারম্যান

@ এল'েন্দিয়া স্টারম্যান আমি মনে করি বিমের উত্তরও একই কাজ করে, তাই দুর্ভাগ্যক্রমে আমি বলতে পারি না যে আমি প্রথম ছিলাম: পি
এসপি 3000

আহ, হ্যাঁ, আমি মনে করি আপনি ঠিক বলেছেন। যদিও আপনার ব্যাখ্যাটি আরও পরিষ্কার।
এল'ইনিয়া স্টারম্যান


5

এলিমেন্ট , 22 19 18 বাইট

_'{"(3:~'![2:`];'}

উদাহরণ ইনপুট / আউটপুট: hello world->helo wrd

এটি কেবল একবারে স্ট্রিংয়ের একটি অক্ষর প্রক্রিয়াকরণ করে এবং এর আগে কোনটি দেখেছিল তা ট্র্যাক করে কাজ করে।

_'{"(3:~'![2:`];'}
_                        input line
 '                       use as conditional
  {              }       WHILE loop
   "                     retrieve string back from control (c-) stack
    (                    split to get the first character of (remaining) string
     3:                  a total of three copies of that character
       ~                 retrieve character's hash value
        '                put on c-stack
         !               negate, gives true if undef/empty string
          [   ]          FOR loop
           2:`           duplicate and output
               ;         store character into itself
                '        put remaining string on c-stack as looping condition


4

পাইথন 3, 44

r=''
for c in input():r+=c[c in r:]
print(r)

আউটপুট স্ট্রিং rচরিত্রটি অক্ষর দ্বারা তৈরি করে, cইনপুট থেকে অক্ষর সহ কেবলমাত্র যদি আমরা এটি ইতিমধ্যে না দেখি।

পাইথন 2 47 হবে, তার সাথে 4 টি চর হারিয়ে raw_inputএবং 1 টির জন্য পেরের প্রয়োজন হয় না এর জন্য 1 টি সঞ্চয় করে print


Theক্যমত্যটি এখন মনে হচ্ছে আপনি inputপাইথন 2 এ ব্যবহার করতে পারেন , যাতে আপনি নিজের বাইটকে আরও খাটো করতে পারেন।
mbomb007

4

এপিএল, ৩

∊∪/

এটি ভেক্টরটির প্রতিটি উপাদানগুলির মধ্যে ইউনিয়ন (∪) প্রয়োগ করে, পুনরাবৃত্তিগুলি সরিয়ে দেওয়ার ক্ষেত্রে একটি পুনরাবৃত্তি অর্জন করে।

এটি tryapl.org এ পরীক্ষা করুন

পুরোনো একটি:

~⍨\

এটি আর্গুমেন্টের প্রতিটি উপাদানগুলির মধ্যে প্রয়োগ করে ~ (বিপরীত যুক্তির সাথে ⍨) ব্যবহার করে। ফলাফলটি প্রতিটি উপাদানের জন্য, যদি এটি ইতিমধ্যে তালিকায় থাকে তবে এটি মুছে যাবে।


নিতপিকিং: "এবং ইনপুট / আউটপুট স্ট্রিং হওয়া উচিত" লুইস বলেছেন। "ইউনিয়ন হ্রাস" একটি নেস্টেড অ্যারে প্রদান করে, স্ট্রিংকে নয়। ও :-)
lstefano

আপনি ঠিক বলেছেন, সংশোধন করার জন্য শুরুতে একটি adding যোগ করছেন।
মরিস জুচ্চা

3

পার্ল, 54 27 বাইট

map{$h{$_}||=print}<>=~/./g
123456789012345678901234567

টেস্ট:

$ echo Type unique chars! | perl -e 'map{$h{$_}||=print}<>=~/./g'
Type uniqchars!
$

1
print exists($h{$_})?"":$_$h{$_}||print
manatwork

এসও কি সেখানে কোনও ইউনিকোড-চর brokenুকিয়ে রেন্ডারিং করে এটি ভেঙে গেছে?
স্টিভ 16

1
একটি স্টেটমেন্ট মডিফায়ার ব্যবহার করে আপনাকে @ মন্যাটওয়ার্কের পরামর্শ সহ কিছু বাইট বাঁচাতে হবে $h{$_}||=printএবং ব্যবহার <>=~/./gকরা আরও কয়েকটা সঞ্চয় করতে সহায়তা করবে!
ডম হেস্টিংস

1
না, আমি এটি "toোকান" -এর অর্থ সহ সন্নিবেশ করিয়েছি।
manatwork

1
পরিবর্তনের mapফলে map{$h{$_}||=print}<>=~/./g
সঞ্চয়ীকরণের

3

পিএইচপি, 72 বাইট 84 বাইট

<?foreach(str_split($argv[1])as$c)$a[$c]=0;echo join('',array_keys($a));

একটি মিশুক অ্যারের জন্য অক্ষরগুলি কী হিসাবে ব্যবহার করে, তারপরে কীগুলি মুদ্রণ করে। অ্যারে উপাদানগুলির ক্রম সর্বদা সন্নিবেশয়ের ক্রম।

str_splitপরামর্শের জন্য ইসমাইল মিগুয়েলকে ধন্যবাদ ।


1
<?foreach(str_split($argv[1])as$c)$a[$c]=0;echo join('',array_keys($a));খাটো এবং একই কাজ।
ইসমাইল মিগুয়েল

পাওয়া একটি সংক্ষিপ্ত লুপ: while($c=$argv[1][$i++*1])। এটি পুরোপুরি প্রতিস্থাপন করে foreach। অন্য সব কিছুই এক
ইসমাইল মিগুয়েল

আমি প্রথমে অনুরূপ কিছু চেষ্টা করেছিলাম তবে তা থেকে বিরত ছিলাম কারণ এটি এমন একটি চরিত্রের উপরে থামবে যা "মিথ্যা", অর্থাৎ বোঝায় "0"। ইনপুট হিসাবে "abc0def" চেষ্টা করুন।
ফ্যাবিয়ান শেমংলার

আপনি ঠিক এটা সম্পর্কে। অবশ্যই এটির জন্য একটি কাজ রয়েছে যার জন্য 2 বাইটের বেশি দাম পড়বে না cost
ইসমাইল মিগুয়েল

3

পাইথ, 7 বাইট

soxzN{z

সুডোকোড:

z = ইনপুট

জেড সেট ওভার এন এর জেড ইন অর্ডার বাই সূচক যোগফল।


3

জুলিয়া, 45 42 বাইট

s->(N="";[i∈N?N:N=join([N,i])for i=s];N)

পুরাতন রুপ:

s->(N={};for i=s i∈N||(N=[N,i])end;join(N))

কোড এতে নতুন অক্ষর যুক্ত করে নতুন স্ট্রিং তৈরি করে, তারপরে joinসেগুলি শেষে একত্রে একটি যথাযথ স্ট্রিংয়ের সাথে একত্রিত করে। নতুন সংস্করণ অ্যারে বোঝার মাধ্যমে পুনরাবৃত্তি করে কিছু অক্ষর সংরক্ষণ করে। ?:পরিবর্তে ব্যবহার করে একটি বাইট সংরক্ষণ করে ||(এটি কার্যভারের চারপাশে বন্ধনীগুলির প্রয়োজনীয়তা সরিয়ে দেয়)।

পুনরাবৃত্তি এবং রেজেক্স ব্যবহার করে বিকল্প সমাধান, 45 বাইট:

f=s->s!=(s=replace(s,r"(.).*\K\1",""))?f(s):s

জুলিয়া, 17 বাইট

(বিকল্প সংস্করণ)

s->join(union(s))

এটি unionমূলত এর বিকল্প হিসাবে ব্যবহার করে unique- আমি এটিকে "আসল" উত্তর হিসাবে বিবেচনা করি না, কারণ আমি "ব্যাবহার করি না" এর অর্থটি ব্যাখ্যা করি " uniqueকোনও একক অন্তর্নির্মিত ফাংশনটি ব্যবহার করবেন না যা অনন্য ফিরিয়ে দেওয়ার প্রভাব রাখে উপাদান "।


আমারও তেমন ধারণা ছিল তবে এটি সংক্ষিপ্ত ছিল না। চমৎকার কাজ!
অ্যালেক্স এ।

3

জাভা, 78 বাইট

String f(char[]s){String t="";for(char c:s)t+=t.contains(c+"")?"":c;return t;}

ইতিমধ্যে উপস্থিত অক্ষরের জন্য আউটপুট পরীক্ষা করার সময় একটি সাধারণ লুপ। হিসাবে ইনপুট গ্রহণ করে char[]


3

সি, 96 বাইট

#include<stdio.h> 
int c,a[128];main(){while((c=getchar())-'\n')if(!a[c])a[c]=1,putchar(c);}

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


Ungolfed:

#include<stdio.h>
#include<stdbool.h>

int main(void)
{
  int i, c;
  int ascii[128];
  for (i = 0; i < 128; ++i) {
    ascii[i] = false;
  }
  while ((c = getchar()) != '\n') {
    if (ascii[c] == false) {
      ascii[c] = true;
      putchar(c);
    }
  }
  puts("\n");
  return(0);
}

3

সি - 58

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

// @hvd     - always copy to q but only increment q if not found
g(char*s,char*r){char*q=r;for(;*q=*s;q+=q==strchr(r,*s++));}

// @AShelly - keep a histogram of the usage of each character
h(char*s){int a[128]={0};for(;*s;s++)a[*s]++||putchar(*s);}

// @hvd     - modify in place
i(char*s){char*q=s,*p=s;for(;*q=*p;q+=q==strchr(s,*p++));}

// original version - requires -std=c99
void f(char*s,char*r){for(char*q=r;*s;s++)if(!strchr(r,*s))*q++=*s;}

আপনি দেখতে পাচ্ছেন যে স্থানটিতে সংশোধন করা সবচেয়ে কম বলে মনে হচ্ছে (এখন অবধি!) পরীক্ষা প্রোগ্রামটি সতর্কতা ব্যবহার না করে সংকলন করেছে gcc test.c

#include <stdlib.h> // calloc
#include <string.h> // strchr
#include <stdio.h>  // puts, putchar

// 000000111111111122222222223333333333444444444455555555556666666666
// 456789012345678901234567890123456789012345678901234567890123456789

// @hvd     - always copy to q but only increment q if not found
g(char*s,char*r){char*q=r;for(;*q=*s;q+=q==strchr(r,*s++));}

// @AShelly - keep a histogram of the usage of each character
h(char*s){int a[128]={0};for(;*s;s++)a[*s]++||putchar(*s);}

// @hvd     - modify in place
i(char*s){char*q=s,*p=s;for(;*q=*p;q+=q==strchr(s,*p++));}

/* original version - commented out because it requires -std=c99
void f(char*s,char*r){for(char*q=r;*s;s++)if(!strchr(r,*s))*q++=*s;}
*/

// The test program:
int main(int argc,char*argv[]){
  char *r=calloc(strlen(argv[1]),1); // make a variable to store the result
  g(argv[1],r);                      // call the function
  puts(r);                           // print the result

  h(argv[1]);                        // call the function which prints result
  puts("");                          // print a newline

  i(argv[1]);                        // call the function (modifies in place)
  puts(argv[1]);                     // print the result
}

সব ধরনের সাহায্য করার জন্য ধন্যবাদ। এত সংক্ষিপ্ত করে দেওয়া সমস্ত পরামর্শের আমি কৃতজ্ঞ!


ওয়েল, যেহেতু আপনার কোড ইতিমধ্যেই বৈধ সি না, শুধু কোমল সি কম্পাইলার দ্বারা গৃহীত হল: আপনি ডিক্লেয়ার করতে পারেন rহিসাবে int(এবং বাদ int) কিছু বাইট সংরক্ষণ করতে: f(s,r)char*s;{...}। তবে এটি আপনার কোডটিকে প্ল্যাটফর্মগুলিতে সীমাবদ্ধ করে যেখানে char*একই আকারের intএবং অবশ্যই যেখানে সংকলকগুলি আপনার এবং খনি হিসাবে লেনিয়েন্ট।
এইচডিভি

@hvd এটা খারাপ! আমি রিটার্ন মানটি ডিফল্ট করতে রাজি ছিলাম কারণ আমি এটি ব্যবহার করি না। তবে আমি যে হতে চাই তার চেয়ে কিছুটা বেশি দুস্কুল। আমি মনে করি আমি এটিকে এগিয়ে যাওয়ার চেয়ে কমপ্লিট করা পছন্দ করব! আলোর দিকে ফিরিয়ে আনার জন্য ধন্যবাদ।
জেরি যিরমিয়

আপনি প্রতিস্থাপন পর এক গৃহস্থালির কাজ সংরক্ষণ করতে পারবেন if(x)yসঙ্গেx?y:0
ugoren

এখানে একটি 60 চর ফাংশন যা অ্যারে প্যারামিটারের পরিবর্তে f(char*s){int a[128]={0};for(;*s;s++)a[*s]++?0:putchar(*s);}
স্টডআউটকে লিখেছে

আপনি নিঃশর্তে অনুলিপি করে অনুলিপি করতে পারেন *q, এবং কেবলমাত্র qযদি বৃদ্ধিটি চরিত্রের আগে উপস্থিত হয় তবে কিছুটা আরও একসাথে স্টাফিংয়ের অনুমতি দেয়: void f(char*s,char*r){for(char*q=r;*q=*s;strchr(r,*s++)<q||q++);}(নোট যে strchr(r,*s++)<qসর্বদা সংজ্ঞায়িত, সেখানে কোনও ইউবি নেই, কারণ এই সংস্করণে strchrফিরে আসতে পারে না NULL)) রিটার্ন টাইপ ব্যতীত, এটি @ আশেলির সংস্করণের চেয়েও ছোট।
এইচডিভি

2

রুবি, 30 24 টি অক্ষর

(২৩ টি অক্ষরের কোড + 1 অক্ষর কমান্ড লাইন বিকল্প)

gsub(/./){$`[$&]?"":$&}

নমুনা রান:

bash-4.3$ ruby -pe 'gsub(/./){$`[$&]?"":$&}' <<< 'hello world'
helo wrd

2

সিজেম, ৯

Lq{1$-+}/

এটি স্ট্রিংকে একটি সেটে রূপান্তরিত করে না, তবে স্ট্রিংয়ে অক্ষর পাওয়া যায় কিনা তা নির্ধারণ করতে এটি এক ধরণের সেট পার্থক্য সম্পাদন করে। এটি অনলাইনে চেষ্টা করুন

ব্যাখ্যা:

L       push an empty array/string
q       read the input
{…}/    for each character in the input
  1$    copy the previous string
  -     subtract from the character (set difference),
         resulting in the character or empty string
  +     append the result to the string

অন্য সংস্করণ, 13 বাইট:

Lq{_2$#)!*+}/

এটি সেট সম্পর্কিত কোনও কাজ করে না। এটি অনলাইনে চেষ্টা করুন

ব্যাখ্যা:

L       push an empty array/string
q       read the input
{…}/    for each character in the input
  _     duplicate the character
  2$    copy the previous string
  #)    find the index of the character in the string and increment it
  !     negate, resulting in 0 if the character was in the string and 1 if not
  *     repeat the character that many times
  +     append the result to the string

2

টিআই-বেসিক, 49 বাইট

Input Str1
"sub(Str1,X,1→Y₁
Y₁(1
For(X,2,length(Str1
If not(inString(Ans,Y₁
Ans+Y₁
End
Ans

সমীকরণের ভেরিয়েবলগুলি খুব কমই কার্যকর হয় যেহেতু তারা সংরক্ষণ করতে 5 বাইট নেয়, তবে Y₁এখানে X3 বাইট সংরক্ষণ করে স্ট্রিংয়ের অক্ষরের চরিত্র হিসাবে কার্যকর হয়। যেহেতু আমরা টিআই-বেসিকের খালি স্ট্রিংগুলিতে যুক্ত করতে পারছি না, আমরা স্ট্রিংটি স্টার 1 এর প্রথম অক্ষর দিয়ে শুরু করব, তারপরে বাকি স্ট্রিংয়ের মধ্য দিয়ে লুপ করব, ইতিমধ্যে সম্মুখীন না হওয়া সমস্ত অক্ষর যুক্ত করব।

prgmQ
?Why no empty st
rings? Because T
I...
Why noemptysrig?Bcau.

2

মতলব, 46 বাইট

এটি ইনপুট এবং আউটপুট হিসাবে ফাংশন আর্গুমেন্ট সহ একটি বেনামী ফাংশন ব্যবহার করে:

@(s)eval('s(~any(triu(bsxfun(@eq,s,s''),1)))')

(আমি এটি কোনও অক্টাভা অনলাইন দোভাষীর কাজ করতে পারি না))

উদাহরণ ব্যবহার:

>> @(s)eval('s(~any(triu(bsxfun(@eq,s,s''),1)))')
ans = 
    @(s)eval('s(~any(triu(bsxfun(@eq,s,s''),1)))')

>> ans('Type unique chars!')
ans =
Type uniqchars!

যে হিসাবে ভাল :) আমার ধারণা হতো - আপনি প্রয়োজন হবে না ,1সঙ্গে any, BTW।
জোনাস

@ জোনাস ধন্যবাদ! খুব কম, প্রথম বন্ধনীগুলির এই জগাখিচুড়িটি দেখতে খুব কঠিন, এটির 1জন্য triu (আমার তির্যকটি সরিয়ে ফেলতে হবে), এর জন্য নয়any
লুইস মেন্ডো

2

বেফুঞ্জ -93, 124 বাইট

v
<v1p02-1
0_v#`g00: <0_@#+1::~p
 1>:1+10p2+0g-!#v_v
g `#v_10g0^       >:10g00
 ^0g 00$        <
 ^  >:,00g1+:00p1+:1+01-\0p

এটি এই অনলাইন দোভাষীর মাধ্যমে পরীক্ষা করুন


এটি আমার প্রত্যাশার চেয়েও কঠিন ছিল। কেউ যদি আমাকে চায় তবে আমি আগামীকাল একটি পূর্ণাঙ্গ বিবরণ পোস্ট করব, তবে আমার কোডটি কী করে তার একটি সংক্ষিপ্ত বিবরণ এখানে।

  • এখনও অবধি দেখা অনন্য অক্ষরগুলি প্রথম সারিতে সংরক্ষণ করা হয়, থেকে শুরু করে 2,0 ডানদিকে প্রসারিত। বর্তমান অক্ষরটি সদৃশ কিনা তা পরীক্ষা করার জন্য এটি পরীক্ষা করা হয়।
  • এখনও অবধি দেখা অনন্য চরিত্রের সংখ্যাটি সঞ্চিত 0,0এবং চেক-ফর ডুপ্লিকেট লুপের কাউন্টারে সঞ্চিত 1,0
  • যখন কোনও অনন্য চরিত্র দেখা যায়, এটি প্রথম সারিতে সংরক্ষণ করা হয়, মুদ্রিত হয় এবং কাউন্টারে থাকে 0,0 হয়।
  • উপস্থিত স্থানগুলিতে (এএসসিআইআই 32) পড়তে সমস্যা এড়াতে আমি পরবর্তী অনন্য চরিত্রের জন্য পরবর্তী স্লটে -1 (সত্যই, 65536) এর সাথে সম্পর্কিত অক্ষরটি রেখেছি।

2

পিএইচপি, 56 54

// 56 bytes
<?=join('',array_flip(array_flip(str_split($argv[1]))));

// 54 bytes
<?=join(!$a='array_flip',$a($a(str_split($argv[1]))));

@ Fschmengler এর উত্তরarray_flip দু'বার ব্যবহার করে বের করা - দ্বিতীয় সংস্করণটি পরিবর্তনশীল পদ্ধতি ব্যবহার করে এবং স্ট্রিংটিকে সত্য হিসাবে মিথ্যাতে প্রত্যাখ্যান করার উপর নির্ভর করে, তারপরে দ্বিতীয়টিতে কয়েকটা বাইট সংরক্ষণের জন্য প্রথম যুক্তিতে খালি স্ট্রিংটিতে ফিরে কাস্টিংয়ের উপর নির্ভর করে। সস্তা!


2

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

নেস্টেবল, নন-ভেরিয়েবল-নাম ওয়ান-লাইনার:

foldr(\x->(x:).filter(x/=))[]

শীর্ষ গণনা fহিসাবে চিহ্নিত কোনও ফাংশনে একই গণনা সংরক্ষণ করা হয়েছে :

f(x:t)=x:f[y|y<-t,x/=y];f_=[]

মনে রাখবেন যে কিছুটা প্রতারণামূলক অপ্টিমাইজেশন রয়েছে যা আমি কৌতূহলের আত্মায় তৈরি করি নি: প্রযুক্তিগতভাবে এখনও এই চ্যালেঞ্জের নিয়মগুলি স্ট্রিংয়ের জন্য আলাদা ইনপুট এবং আউটপুট এনকোডিং ব্যবহার করার অনুমতি দেয়। কোনো প্রতিনিধিত্বমূলক দ্বারা stringতার আংশিকভাবে-প্রয়োগ চার্চ এনকোডিং দ্বারা \f -> foldr f [] string :: (a -> [b] -> [b]) -> [b](ফাংশন দ্বারা উপলব্ধ bijection ওপারে সঙ্গে ($ (:))এই নিচে golfed পরার) ($ \x->(x:).filter(x/=)), শুধুমাত্র 24 অক্ষর।

আমি আমার অফিসিয়াল হিসাবে 24-চরিত্রের প্রতিক্রিয়া পোস্ট করা এড়িয়ে গেলাম কারণ উপরোক্ত সমাধান উপরোক্ত দোভাষীর উপর চেষ্টা করা যেতে পারে foldr(\x->(x:).filter(x/=))[]"Type unique chars!"যেখানে গল্ফযুক্ত সমাধানটি পরিবর্তে লেখা হবে:

($ \x->(x:).filter(x/=))$ foldr (\x fn f->f x (fn f)) (const []) "Type unique chars!"

আক্ষরিক ঘোষণার সংক্ষিপ্ত রূপ হিসাবে যা আরও উন্মাদ হবে:

($ \x->(x:).filter(x/=))$ \f->f 'T'.($f)$ \f->f 'y'.($f)$ \f->f 'p'.($f)$ \f->f 'e'.($f)$ \f->f ' '.($f)$ \f->f 'u'.($f)$ \f->f 'n'.($f)$ \f->f 'i'.($f)$ \f->f 'q'.($f)$ \f->f 'u'.($f)$ \f->f 'e'.($f)$ \f->f ' '.($f)$ \f->f 'c'.($f)$ \f->f 'h'.($f)$ \f->f 'a'.($f)$ \f->f 'r'.($f)$ \f->f 's'.($f)$ \f->f '!'.($f)$ const[]

তবে এটি বিশুদ্ধ ফাংশন হিসাবে উপস্থাপিত ডেটা কাঠামোর একটি পুরোপুরি বৈধ সংস্করণ। (অবশ্যই, আপনি \f -> foldr f [] "Type unique chars!"এটিও ব্যবহার করতে পারেন তবে এটি সম্ভবত অবৈধ যেহেতু এটি তথ্য সংরক্ষণের জন্য তালিকাগুলি ব্যবহার করে, সুতরাং এর ফোল্ডারের অংশটি সম্ভবত সম্ভবত "উত্তর" ফাংশনে রচনা করা উচিত, যা 24 টিরও বেশি অক্ষরের দিকে পরিচালিত করে))

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