从输入的句子中删除所有重复的单词。
输入将类似于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
被简单地视为不同
Answers:
{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运算符,模板字符串和箭头功能-我使用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>
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
#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
不保证@black A 的项目顺序与添加顺序相同。
" "/?" "\
仅供参考,这是一个功能。
" "\ Split the input on spaces
? Find all the unique elements
" "/ Join them back together
unique(d,'stable')
哪里d
是d = {'cat','dog','cat','dog','bird','dog','Snake','snake','Snake'}
。
结果是 'cat' 'dog' 'bird' 'Snake' 'snake'
d
已分配。您可以使用函数handle:来纠正此问题@(d)unique(d,'stable')
,其代价为4个字节。
整个程序的唯一写法是21字节长
say $*IN.words.unique # 21 bytes
作为lambda表达式,最短为14个字节
*.words.unique # 14 bytes
say ( *.words.unique ).('cat dog cat dog bird dog Snake snake Snake')
my &foo = *.words.unique;
say foo $*IN;
虽然输出是列表,但是如果将其放在字符串化上下文中,则会在元素之间放置一个空格。如果需要返回字符串,则可以~
在前面添加a ~*.words.unique
。
如果允许使用摘要,则可以通过删除来将其缩短为13个字节*
。
$_ = 'cat dog cat dog bird dog Snake snake Snake';
say .words.unique
有趣的是,这与非重复字符几乎相同。
将x设置为(显示对话框““默认答案”“))返回的文字 设置为“” 在x中重复我 考虑情况 如果不是,则将o设置为o&i&“ 结束 结束 Ø
在此之前,我实际上并不知道正在考虑的关键字。你知道的越多...