입력 된 문장에서 반복되는 단어를 모두 제거하십시오.
입력은 비슷할 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@Counts
DeleteDuplicates
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