입력 된 문장에서 반복되는 단어를 모두 제거하십시오.
입력은 비슷할 cat dog cat dog bird dog Snake snake Snake것이고 출력은이어야합니다 cat dog bird Snake snake. 단어를 구분하는 단일 공백이 항상 있습니다.
출력 순서는 입력과 동일해야합니다. (예 참조)
구두점을 처리 할 필요는 없지만 대문자 처리가 필요합니다.
Snake그리고 snake단순히 다른로 취급됩니다
입력 된 문장에서 반복되는 단어를 모두 제거하십시오.
입력은 비슷할 cat dog cat dog bird dog Snake snake Snake것이고 출력은이어야합니다 cat dog bird Snake snake. 단어를 구분하는 단일 공백이 항상 있습니다.
출력 순서는 입력과 동일해야합니다. (예 참조)
구두점을 처리 할 필요는 없지만 대문자 처리가 필요합니다.
Snake그리고 snake단순히 다른로 취급됩니다
답변:
{1↓∊∪(∊∘' '⊂⊢)' ',⍵}
이것은 이름없는 monadic 함수를 생성하여 오른쪽의 문자열을 받아들이고 문자열을 반환합니다.
설명:
' ',⍵} ⍝ 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
Dennis 덕분에 2 바이트를 절약했습니다!
( 이 답변 참조 )
EcmaScript 6 호환 브라우저에서 아래 스 니펫 실행 테스트 (Set, spread operator, 템플릿 문자열 및 화살표 기능 구현-Firefox를 사용함).
참고 : Set으로 변환하면 모든 중복이 삭제 되고 Set은 원래 순서를 유지합니다.
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>
TeaScript는 골프를위한 JavaScript입니다.
xs` `u()j` `
꽤 짧습니다. 각 공간에서 분할되고 중복을 필터링 한 다음 다시 참여합니다.
cdfghijklmnopstuvw이전의 모든 초기화 0으로 변수 위해 예약되어, 그들이 b또한 변수 이름이 예약되어, 그것은 빈 문자열로 초기화 사전입니다
$args|select -u
우와, PowerShell이 다소 경쟁적인 실제 항목? 그건 불가능 해!
문자열을 입력 인수로 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 바이트 ( blabb 덕분에 일부 바이트 절약) 에서 다음 을 수행 하십시오 . 흥미롭게도, 이 방향으로 단항 연산자를 사용하면 입력 문자열이 따옴표로 구분 되거나 개별 인수로 작동하는 경우에도 작동 -split합니다. 기본값 은 공백입니다. 보너스.
-split$args|select -u
StringRiffle@*Keys@*Counts@*StringSplit
StringRiffle[].
Keys@CountsDeleteDuplicates
Keys@Counts질서를 유지 합니까 ?
Counts[list]은 키가 목록의 요소로 처음 나타나는 순서와 동일한 순서로 연결을 제공합니다.
#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 필요). 온라인으로 사용해보십시오
set않습니까? 의도적으로 복제 할 수 없습니다. 그냥 밀어 넣으십시오.
set는 추가 된 순서와 동일한 순서로 항목을 가질 수 없습니다.
unique(d,'stable')
곳 d이다 d = {'cat','dog','cat','dog','bird','dog','Snake','snake','Snake'}.
결과는 'cat' 'dog' 'bird' 'Snake' 'snake'
d가 이미 할당 된 것으로 가정합니다 . @(d)unique(d,'stable')4 바이트의 비용으로 함수 핸들 :을 사용하여이를 수정할 수 있습니다 .
String.Join(" ",s.Split().Distinct());
s인수로 가져와야한다고 생각합니다.
전체 프로그램으로 작성하는 유일한 방법은 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;
출력이 List 인 반면, 문자열 화 컨텍스트에 넣으면 요소 사이에 공백이 생깁니다. 문자열을 반환해야하는 ~경우 앞에 a 를 추가 할 수 있습니다 ~*.words.unique.
스 니펫이 허용 된 경우을 제거하여 스 니펫을 13 바이트로 줄일 수 있습니다 *.
$_ = 'cat dog cat dog bird dog Snake snake Snake';
say .words.unique
전체 프로그램 버전이 더 짧습니다
s=input().split(' ')
print(' '.join(e for i,e in enumerate(s)if e not in s[:i]))
정규 표현식없이 그것을 했습니까, 나는 행복합니다
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....
function(s){o={};s.split(' ').map(function(w){o[w]=1});a=[];for(w in o)a.push(w);return a.join(' ')}
// JS가 너무 길다 :(
*\S=${$0;$0}@set{$0;}
( Gema에는 배열이 없으므로 고유 한 문자 솔루션 과 매우 유사 하므로 내장 고유 함수를 허용해도 큰 도움이되지 않습니다.)
샘플 실행 :
bash-4.3$ gema '*\S=${$0;$0}@set{$0;}' <<< 'cat dog cat dog bird dog Snake snake Snake'
cat dog bird Snake snake