代词操作


24

挑战

编写一个函数或程序,该函数或程序使用由一个或多个主观人称代词(用+号分隔)组成的字符串作为参数。输出必须是单个代词,这是下一段中定义的关系的结果。

当然,您可以随时进行编辑,以纠正确实存在的语法错误;)

这是一个代码挑战,因此以最短的代码为准。

关系

这项任务的目标是将我们日常使用的内容翻译成“讲数学”。我们如何看待“你和我”?好吧,“我们”,不是吗?因此,如果输入为You+I输出,则应为string We。具有两个以上的代词,它应类似于: You+He+They->You

该关系定义为此表:

      I  You    He   We   You   They
I     I  We     We   We   We    We
You      You    You  We   You   You
He              He   We   You   They
We                   We   We    We
You                       You   You
They                            They

“你”的问题

好吧,如您所见,我不是英语母语人士。在我的语言(意大利语)中,的复数形式(voi,意大利语)和单数形式的tu)有所区别。当我想到这个挑战时,我没有用英语思考,因此存在一个问题,即我是使用复数形式还是单数形式,这是无法识别的。幸运的是(或者很明显?),输入/输出在两种形式中都没有改变,因此您可以使用其中一种,并且您将涵盖两种情况!

关于输入

输入将始终为“代词+代词+代词”形式。代词的首字母大写,其余字母小写。加号不会被空格包围,只会被代词包围。空输入是可能的,结果必须是空输出。

奖金

如果该程序可以管理两个新代词:SheIt,则可获得15%的小额奖励。很明显,它们与祂相同。请记住,这种关系是自反的,所以她->她和它->它。因此,仅包含她,他或它的任何组合都应输出它们。

例子

You+I          -> We
You+He+They    -> You
I+You+He+They  -> We
They           -> They
They+You       -> You
You+You+I+You  -> We

For Bonus
She            -> She
She+He         -> They
I+It+He        -> We
It+You         -> You

@Timwi,如果您说的是正确的示例,我将添加一些示例。无论如何,这种“加”关系是自反的,所以他+他是他,我+我是我....
Simone Chelo

5
我得到“ I+I=I”,因为I给定发言者只能有一个“ ”。但是不能“ He+He=They”吗?通常,如果您He在此结构中两次说“ ”,则是指两个不同的男性主题,而不是两次相同的主题。
Darrel Hoffman

许多英语方言都相当于voi。在矿山,这是你们,并在正式注册使用。另一种常见的一种是你要跟,但我不认为人会在正式的演讲中使用真的。传统上,您也拥有ye,这是许多人所熟知的,因为它在某些圣经译本中很常见。你应该在其中的一个添加或折腾,以及真正动摇的东西。
user0721090601

Answers:


9

Retina,62 61 56 53 52字节

(.+)\+(?=\1)

.*(W|.I|I.).*
We
.*Y.*
You
.{4,}
They

稍后会进一步打高尔夫球和进行解释。

4个替换步骤执行以下操作:

  • 多次都是本身
  • 如果有任何We或I +任何结果都是We
  • 对于包含您的其他任何事物,结果就是您
  • 如果我们仍然有多个部分或一个鞋底,那就是它们,因为只有他和他们可以被留下

在这里在线尝试。

感谢MartinBüttner,节省了3个字节。


除最后一个阶段外,您可以使用.代替\+,因为这是大写字母之前或之后允许的唯一字符I
Martin Ender

6

JavaScript(ES6),130个字节

s=>(a=",I,You,He,We,They".split`,`,m="012345014444042242042345044444042545",r=0,s.split`+`.map(p=>r=m[+m[a.indexOf(p)]+r*6]),a[r])

说明

s=>(

  // a = array of each pronoun (including an empty string at index 0)
  a=",I,You,He,We,They".split`,`,

  // m = 6 x 6 map of pronoun indices for each combination of pronouns
  m="012345014444042242042345044444042545",

  r=0,                        // r = index of result pronoun
  s.split`+`.map(p=>          // for each pronoun in the input string
    r=m[+m[a.indexOf(p)]+r*6] // combine each pronoun with the previous one
  ),
  a[r]                        // return the resulting pronoun
)

测试


哇,我喜欢这种方法!我认为我的奖金很差,要达到此目标,您必须在数组中添加7个字节(“,She,It”),在矩阵中添加28个字节,达到165 -15%= 140 ...
Simone Chelo

2

Perl 5,67位元组

确实是79个字节,但有15%的奖金。

$a{$_}=""for split/[+\s]/,<>;@_=%a;say@_<3?@_:I~~@_||We~~@_?We:You~~@_?You:They

2

Python 159153字节

编辑:谢谢@ Pietu1998

这是Javascript ES6答案的直接翻译:

a=",I,You,He,We,They".split(',')
m="012345014444042242042345044444042545"
r=0
for p in raw_input().split('+'):r=int(m[int(m[a.index(p)])+r*6])
print a[r]

在这里尝试


s不需要是变量,您可以删除forr=行之间多余的行和空格。另外,您可能想检查一下是否可以缩短功能。
PurkkaKoodari'1

1

红宝石,150个 136 131 119 111字节

ARGV.each{|a|puts %w[We You I He They][a.bytes.inject(0){|m,c|m|({87=>15,73=>7,89=>11,84=>9,72=>8}[c]||0)}%5]}

附加功能:在同一命令行上处理多个表达式。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.