एक स्ट्रिंग से दोहराए गए शब्दों को हटा दें


12

इनपुट किए गए वाक्य से सभी दोहराए गए शब्दों को हटा दें।

इनपुट कुछ इस तरह होगा cat dog cat dog bird dog Snake snake Snakeऔर आउटपुट होना चाहिए cat dog bird Snake snake। हमेशा एक ही स्थान को अलग करने वाले शब्द होंगे।

आउटपुट ऑर्डर इनपुट के समान होना चाहिए। (उदाहरण के लिए देखें)

आपको विराम चिह्न को संभालने की आवश्यकता नहीं है लेकिन कैपिटल लेटर हैंडलिंग की आवश्यकता है।


13
मैं कम से कम कुछ दिनों के लिए उत्तर स्वीकार करने की प्रतीक्षा कर रहा हूं। एक छोटा समाधान अभी भी आ सकता है।
एलेक्स ए।

1
मैं uniqchars के समान समाधानों की अपेक्षा करता हूं , सिवाय इसके कि डुप्लिकेट को हटाने वाले बिल -इन को प्रतिबंधित नहीं करता है।
xnor

2
उदाहरण को देखते हुए, कोई विशेष कैपिटल लेटर हैंडलिंग नहीं है: Snakeऔर snakeइसे अलग
edc65

@ एलेक्सा: वास्तव में, पहले से ही एक है। codegolf.stackexchange.com/questions/62044/…
ev3commander

जवाबों:


1

gs2 , 3 बाइट्स

,É-

CP437 में एन्कोड किया गया

कार्यक्रम की शुरुआत में STDIN को धक्का दिया जाता है। ,इसे स्थानों पर विभाजित करता है। Éहै uniqजो डुप्लिकेट फिल्टर,। -रिक्त स्थान से जुड़ता है।


10

CJam, 7 वर्ण

qS/_&S*

शायद बहुत कम हो सकता है ... लेकिन जो भी मैंने लगभग कभी सीजेएम का उपयोग नहीं किया है। ^। ^

qइनपुट पढ़ता है, S/रिक्त स्थान पर विभाजन करता है, _&डुप्लिकेट करता है और लागू करता है और (इसलिए डुप्लिकेट से छुटकारा पा रहा है), और S*अंतरिक्ष में फिर से जुड़ता है।

ऑनलाइन दुभाषिया लिंक


1
आप 7 से भी ज्यादा छोटे कैसे हो सकते हैं? lol
क्रन्चर

कुछ एक बस किया।
एलियन जी

8

हास्केल, 34 बाइट्स

import Data.List
unwords.nub.words

प्रयोग उदाहरण: (unwords.nub.words) "cat dog cat dog bird dog Snake snake Snake"-> "cat dog bird Snake snake"


8

एपीएल, 22 20 बाइट्स

{1↓∊∪(∊∘' '⊂⊢)' ',⍵}

यह एक अनाम मानदंड फ़ंक्शन बनाता है जो दाईं ओर एक स्ट्रिंग को स्वीकार करता है और एक स्ट्रिंग लौटाता है।

स्पष्टीकरण:

               ' ',⍵}    ⍝ Prepend a space to the input string
     (∊∘' '⊂⊢)          ⍝ Split the string on spaces using a fork
    ∪                    ⍝ Select the unique elements
{1↓∊                     ⍝ Join into a string and drop the leading space

इसे ऑनलाइन आज़माएं

डेनिस के लिए धन्यवाद 2 बाइट्स सहेजे गए!


3
मुझे कोई भी उत्तर पसंद है जो गैर-गूढ़, गैर-गोल्फ भाषा का उपयोग करता है।
डार्थ एलीगेंटस


7

जावास्क्रिप्ट (ईएस 6) 33

( यह उत्तर देखें )

EcmaScript 6 अनुरूप ब्राउज़र (कार्यान्वयन सेट, प्रसार ऑपरेटर, टेम्पलेट स्ट्रिंग्स और तीर फ़ंक्शन - मैं फ़ायरफ़ॉक्स का उपयोग करता हूं) में नीचे स्निपेट का परीक्षण कर रहा हूं।

नोट: सभी डुप्लिकेट को सेट करने और मूल ऑर्डर सेट करने के लिए रूपांतरण सेट करता है ।

f=s=>[...Set(s.split` `)].join` `

function test() { O.innerHTML=f(I.value) }

test()
#I { width: 70% }
<input id=I value="cat dog cat dog bird dog Snake snake Snake"/><button onclick="test()">-></button>
<pre id=O></pre>


वाह वाह वाह ... मैं लगातार 25% या उससे अधिक किसी भी समाधान को काटने की आपकी क्षमता से चकित हूं। +1
ETHproductions

1
समस्या को देखा और तुरंत सेट के बारे में सोचा ... केवल यह महसूस करने के लिए कि आपने पहले ही यह कर लिया है = P बहुत अच्छा!
Mwr247

मूल आदेश कैसे बनाए रख सकते हैं?
nzzk2

@ njzk2 भाषा के डेवलपर्स से पूछें। यह हो सकता है: एक सेट आंतरिक रूप से एक ऐरे है, और प्रत्येक प्रविष्टि में डुप्लिकेट को अस्वीकार करने के लिए एक चेक है। यह वैसे भी एक कार्यान्वयन विवरण है
edc65

@ njzk2 जब मैं नहीं जानता कि कैसे , मुझे पता है कि यह तथ्य भाषा द्वारा निर्दिष्ट किया गया है: सेट ऑब्जेक्ट्स मूल्यों का संग्रह हैं, आप सम्मिलन क्रम में इसके तत्वों को पुनरावृत्त कर सकते हैं । सेट में एक मान केवल एक बार हो सकता है; यह सेट के संग्रह में अद्वितीय है। ( developer.mozilla.org/it/docs/Web/JavaScript/Reference/… )
edc65

6

टीस्क्रिप्ट , 12 बाइट्स

TeaScript गोल्फिंग के लिए जावास्क्रिप्ट है।

xs` `u()j` `

यह काफी कम है। यह प्रत्येक स्थान पर विभाजित होता है, डुप्लिकेट को फ़िल्टर करता है, फिर जुड़ता है।

इसे ऑनलाइन आज़माएं


यह है tee-a scriptया tee script?

@ मैथियासफॉस्टर यह "टी-स्क्रिप्ट" होगा
डाउनगेट

क्या TeaScript में चर नामों के लिए अक्षर सुरक्षित हैं? उनमें से अधिकांश अंतर्निहित गुणों के लिए शॉर्टहैंड दिखाई देते हैं।
intrepidcoder

@intrepidcoder हाँ ये सभी: cdfghijklmnopstuvwचरों के लिए आरक्षित हैं, वे सभी पूर्व-प्रारंभिक 0. हैं b, यह भी एक चर नाम के लिए आरक्षित है, यह एक खाली स्ट्रिंग के लिए प्रारंभिक-प्रारंभिक है
डाउनटाउन

6

पॉवरशेल, 15 बाइट्स

$args|select -u

वाह, एक वास्तविक प्रविष्टि जहां पावरशेल कुछ प्रतिस्पर्धी है? यह असंभव है!

स्ट्रिंग को इनपुट तर्कों के रूप में ले जाता है, ध्वज के Select-Objectसाथ पाइप करता है -Unique। अनुरोध के अनुसार ऑर्डर और कैपिटलाइज़ेशन को संरक्षित करते हुए, स्ट्रिंग्स की एक सरणी को बाहर निकालता है।

उपयोग:

PS C:\Tools\Scripts\golfing> .\remove-repeated-words-from-string.ps1 cat dog cat dog bird dog Snake snake Snake
cat
dog
bird
Snake
snake

यदि इनपुट को कमांड लाइन तर्क के रूप में माना जा सकता है, तो यह "धोखा" है, तो 24 21 बाइट्स ( ब्लेब के लिए कुछ बाइट्स को सहेजा गया ) पर निम्न के लिए जाएं । दिलचस्प बात यह है कि इस दिशा में एकरी संचालक का उपयोग तब भी होता है जब इनपुट स्ट्रिंग को उद्धरणों के साथ या व्यक्तिगत तर्कों के साथ सीमांकित किया जाता है, क्योंकि डिफ़ॉल्ट -splitरिक्त स्थान से होता है। बक्शीश।

-split$args|select -u

स्पून फीडिंग कोड के साथ पर्यावरण के व्यवहार पर भरोसा करते हुए आसानी से इनपुट को विभाजित करें ...?
मैनटवर्क

@manatwork मैंने एक स्पष्टीकरण जोड़ा है यदि पहला उपयोग बहुत "धोखा" माना जाता है - क्योंकि यह स्पष्ट नहीं है कि इनपुट कैसे निर्दिष्ट किया गया है, हम इसे ओपी तक छोड़ देंगे।
AdmBorkBork

और अब स्पष्ट है कि पावरशेल के अपने फीचर्स कैसे हैं। वह 24 वास्तव में एक उत्थान का हकदार है।
14

@timmyD आप अनचाहे 3 बाइट्स काट सकते हैं ?? कमांडरी आर्ग में यूरी स्प्लिट और "" "की कोई आवश्यकता नहीं होने पर भी वर्जन: \> एलएस-एल स्प्लिट.प्स 1 और टाइप स्प्लिट.प्स 1 और इको। & पॉवर्सशेल -नोलोगो-एफ स्प्लिट। पीएस 1 डॉग बिल्ली डॉग बर्ड डॉग। साँप साँप Snake -rw-rw-rw- 1 एडमिन 0 21 2015-11-02 19:06 विभाजन ।ps1 -split $ args | चुनिंदा -u बिल्ली कुत्ता पक्षी साँप साँप
blabb

4

जूलिया, 29 बाइट्स

s->join(unique(split(s))," ")

यह एक अनाम फ़ंक्शन बनाता है जो स्ट्रिंग को रिक्त स्थान पर वेक्टर में विभाजित करता है, केवल अद्वितीय तत्व रखता है (ऑर्डर को संरक्षित करता है), और रिक्त स्थान के साथ सरणी को वापस स्ट्रिंग में जोड़ता है।


4

आर, 22 बाइट्स

cat(unique(scan(,"")))

यह STDIN से एक स्ट्रिंग को पढ़ता है और इसका उपयोग करके रिक्त स्थान पर एक वेक्टर में विभाजित scan(,"")करता है, केवल अद्वितीय तत्वों का चयन करता है, फिर उन्हें एक स्ट्रिंग में सम्मिलित करता है और इसे STDOUT का उपयोग करने के लिए प्रिंट करता है cat


4

रेटिना , 22 बाइट्स

 (\w+)\b(?<=\b\1\b.+)

फ़ाइल को अनुगामी लाइनफ़ीड के साथ सहेजें और -sध्वज के साथ चलाएँ ।

यह काफी हद तक सीधे है कि यह एक शब्द से मेल खाता है, और खोजबीन यह जांचती है कि क्या यह शब्द पहले भी स्ट्रिंग में दिखाई दिया है। ट्रेसिंग लाइनफीड रेटिना को रिप्लेस मोड में काम करने के लिए खाली प्रतिस्थापन स्ट्रिंग के साथ काम करने का कारण बनता है, जिससे सभी मैचों को हटा दिया जाता है।


4

गणितज्ञ, 43 39 बाइट्स

StringRiffle@*Keys@*Counts@*StringSplit

उपयोग करने के लिए यश StringRiffle[]
माइकल स्टर्न

के Keys@Countsबजाय का उपयोग कर सकते हैंDeleteDuplicates
Branislav

@branislav क्या Keys@Countsआदेश की रक्षा करता है?
लीजनमोनियल

@ LegionMammal978 Counts[list]एक संघ देता है जिसकी कुंजी उसी क्रम में होती है जब वे पहली बार सूची के तत्वों के रूप में होते हैं।
ब्रांकिस्लाव

3

पायथ - 9 बाइट्स

खैर यही कारण है कि हम सभी Pyth5 की प्रतीक्षा कर रहे हैं, 5 बाइट्स हो सकते थे।

jdoxzN{cz

इसे यहाँ ऑनलाइन आज़माएँ


Pyth5 मान्य क्यों नहीं है? यह लागू होता दिख रहा है
९'१५ lirtosiast

@ThomasKwa मुझे नहीं लगता कि यह खत्म हो गया है। अभी तक कोई संस्करण जारी नहीं हुआ है।
एलेक्स ए।

3

सी ++ 11, 291 बाइट्स

#include<iostream>
#include<string>
#include<list>
#include<sstream>
#include<algorithm>
using namespace std;main(){string s;getline(cin,s);list<string>m;stringstream b(s);while(getline(b,s,' '))if(find(m.begin(),m.end(),s)==m.end())m.push_back(s);for(auto a:m)cout<<a<<' ';cout<<endl;}

मुझे गोल्फ भाषाओं की तुलना में C ++ उत्तरों की एक पूरी संख्या दिखाई नहीं देती है, इसलिए क्यों नहीं। ध्यान दें कि यह C ++ 11 सुविधाओं का उपयोग करता है, और इसलिए यदि आपका कंपाइलर अंधेरे युग में पर्याप्त रूप से पर्याप्त पुराना है, तो आपको C ++ 11 मानक का उपयोग करने के लिए एक विशेष संकलन स्विच पास करने की आवश्यकता हो सकती है। के लिए g++, यह -std=c++11(केवल संस्करणों के लिए आवश्यक है <5.2)। इसे ऑनलाइन आज़माएं


यदि आप अन्य भाषाओं के साथ बाइट्स की संख्या की तुलना करते हैं, तो आप देखेंगे कि कोई भी C ++ का उपयोग क्यों नहीं कर रहा है।
4

3
@CroCo यदि आपको पता है कि इस साइट का बिंदु प्रत्येक भाषा में सबसे छोटा समाधान खोजना है, तो आप देखेंगे कि मैंने यह उत्तर क्यों पोस्ट किया है।
मेगो

क्षमा करें, मुझे इसकी जानकारी नहीं है।
क्रोको

1
क्यों नहीं एक का उपयोग करें set? यह डिजाइन द्वारा कोई डुप्लिकेट नहीं देता है। बस इसमें धकेल दो।
edmz

1
@black A setको उसी क्रम में आइटम की गारंटी नहीं है, जिस क्रम में उन्हें जोड़ा गया था।
Mego

3

K5, 9 बाइट्स

" "/?" "\

FYI करें, यह एक फ़ंक्शन है।

व्याख्या

     " "\    Split the input on spaces
    ?        Find all the unique elements
" "/         Join them back together

2

मतलाब: 18 बाइट्स

unique(d,'stable')

जहां dहै d = {'cat','dog','cat','dog','bird','dog','Snake','snake','Snake'}

परिणाम है 'cat' 'dog' 'bird' 'Snake' 'snake'


4
प्रोग्रामिंग पहेलियाँ और कोड गोल्फ में आपका स्वागत है! यहाँ प्रस्तुतियाँ या तो पूर्ण कार्यक्रम होनी चाहिए जो STDIN से पढ़े और STDOUT को लिखें, या ऐसे कार्य जो इनपुट को स्वीकार करते हैं और आउटपुट वापस करते हैं। जैसा कि यह खड़ा है, यह केवल एक स्निपेट है; यह मानता है कि चर dपहले से ही सौंपा गया है। आप इसे एक फ़ंक्शन हैंडल का उपयोग करके ठीक कर सकते हैं: @(d)unique(d,'stable')4 बाइट्स की कीमत पर।
एलेक्स ए।

2

पायथन 3, 55

l=[]
for x in input().split():l+=[x][x in l:]
print(*l)

येश, यह लंबा है। दुर्भाग्य से, पायथन setतत्वों के क्रम को नहीं रखता है, इसलिए हमें स्वयं कार्य करना होगा। हम lउन तत्वों की सूची रखते हुए इनपुट शब्दों के माध्यम से पुनरावृति करते हैं जो अभी तक अंदर नहीं हैं l। फिर, हम lअंतरिक्ष से अलग की गई सामग्री को प्रिंट करते हैं ।

lयदि कुछ शब्द अन्य शब्दों के सबस्ट्रिंग हैं तो एक स्ट्रिंग संस्करण काम नहीं करेगा।


2

सी #, 38 बाइट्स

String.Join(" ",s.Split().Distinct());

2
मुझे यकीन नहीं है कि आप मान सकते हैं कि इनपुट पहले से ही आबादी में है s, मुझे लगता है कि आपको इसे तर्क के रूप में प्राप्त करना चाहिए।
जैकब

3
PPCG में आपका स्वागत है! कृपया हमारे डिफ़ॉल्ट उत्तर प्रारूपों पर एक नज़र डालें । उत्तर पूर्ण कार्यक्रम या कार्य होने चाहिए। फ़ंक्शंस (जैसे लैम्ब्डा लिटरल्स) ठीक हैं, लेकिन स्निपेट्स जो कोड की उम्मीद करते हैं कि कोड पहले से ही कुछ वेरिएबल / स्टैक आदि पर मौजूद हैं या एक REPL वातावरण की आवश्यकता है, जब तक कि ओपी स्पष्ट रूप से उन्हें अनुमति नहीं देता।
मार्टिन एंडर

2

पर्ल 6, 14 बाइट्स

एक पूरे कार्यक्रम के रूप में आप इसे लिखेंगे एकमात्र तरीका 21 बाइट्स लंबा है

say $*IN.words.unique # 21 bytes

एक लंबोदर अभिव्यक्ति के रूप में सबसे छोटा 14 बाइट्स है

*.words.unique # 14 bytes
say ( *.words.unique ).('cat dog cat dog bird dog Snake snake Snake')

my &foo = *.words.unique;
say foo $*IN;

जबकि आउटपुट एक सूची है, यदि आप इसे एक कड़े संदर्भ में रखते हैं तो यह तत्वों के बीच एक स्थान रख देगा। यदि आपको एक स्ट्रिंग वापस करने की आवश्यकता होती है तो आप ~सामने वाले को जोड़ सकते हैं ~*.words.unique


यदि स्निपेट्स की अनुमति थी, तो आप इसे हटाकर 13 बाइट्स तक छोटा कर सकते हैं *

$_ = 'cat dog cat dog bird dog Snake snake Snake';

say .words.unique


1

लुआ, 94 बाइट्स

function c(a)l={}return a:gsub("%S+",function(b)if l[b]then return""else l[b]=true end end)end

एक अनाम उपयोगकर्ता ने ... return""else l[b]=true end end...साथ बदलने का सुझाव दिया ...return""end l[b]=""end...
जोनाथन फ्रीच


1

जावास्क्रिप्ट, 106 102 100 बाइट्स

function(s){o={};s.split(' ').map(function(w){o[w]=1});a=[];for(w in o)a.push(w);return a.join(' ')}

// जेएस के लिए बहुत लंबा रास्ता :(


JS (aka ECMAScript) 6 एरो फ़ंक्शंस का उपयोग करने का प्रयास करें , जिससे 6 बाइट्स बचनी चाहिए। इसके अलावा, मैं पहले से ही कॉफीस्क्रिप्ट के लिए इसे देख सकता हूं, कम से कम 30 बाइट्स बचाएंगे।
kirbyfan64sos

यह उत्तर देशी जावास्क्रिप्ट (ECMA5) में है, वहाँ es6 के लिए edc65 का एक है।
याकूब


1

पीएचपी 64 59 बाइट्स

function r($i){echo join(" ",array_unique(split(" ",$i)));}

explode()split(), implode()join()?
मैनटवर्क

धन्यवाद! अच्छा सुझाव है। लगता splitहै कि हालांकि वंचित किया जा रहा है, लेकिन लगता है कि कोडग्यूलेशन के लिए कोई फर्क नहीं पड़ता।
जेरोन

1

AppleScript, 162 बाइट्स

दिलचस्प बात यह है कि यह नॉन-रिपीटिंग कैरेक्टर्स की चीज के समान है।

सेट एक्स टू (प्रदर्शन डायलॉग "" डिफॉल्ट आंसर "") का टेक्स्ट वापस लौटे शब्द
"ओ" पर सेट करें
i के साथ x में दोहराएं
मामले पर विचार
यदि नहीं तो मैं ओ में हूं और ओ से मैं और ""
समाप्त
समाप्त
ओ

मुझे वास्तव में इससे पहले विचार करने वाले कीवर्ड का पता नहीं था। जितना अधिक आप जानते हैं...


1

बर्लेस्क, 6 बाइट्स

blsq ) "cat dog cat dog bird dog Snake snake Snake"wdNBwD
cat dog bird Snake snake

सरल के बजाय: विभाजित शब्द, नब (नूब = डुप्लिकेट हटा दें), शब्दों को वापस रूपांतरित करें।


1

गामा, 21 वर्ण

*\S=${$0;$0}@set{$0;}

(बहुत ही विशिष्ट चरित्र समाधान के समान है , क्योंकि गीमा में कोई सरणियाँ नहीं हैं, इसलिए अंतर्निहित अद्वितीय कार्यों की अनुमति देने से हमें बहुत मदद नहीं मिलती है।)

नमूना रन:

bash-4.3$ gema '*\S=${$0;$0}@set{$0;}' <<< 'cat dog cat dog bird dog Snake snake Snake'
cat dog bird Snake snake 

1

स्काला, 44 47 बाइट्स

(s:String)=>s.split(" ").distinct.mkString(" ")

संपादित करें : toSetआदेश का उपयोग नहीं किया जा सकता है, इसलिए मैं अब अलग-अलग // का उपयोग कर रहा हूं, बस मुझे 3 बाइट का खर्च करना है :(


0

PHP, 37 बाइट्स

मान लें $sकि इनपुट स्ट्रिंग है।

print_r(array_flip(explode(' ',$s)));
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.