西班牙不完美共轭/指示不完美共轭


13

给定不定式形式的西班牙语动词的输入,输出以指示性不完美的所有6种形式共轭的动词。

要使不定式与不完美的词缀合,请删除不定式的结尾(-ar,-er,-ir和有时是-ír),并添加下面列出的不完全的结尾。不完全动词中有三个不规则动词,也在下面列出。

Verb ending    Replace with...
--------------------------------------------------------
-ar            -aba, -abas, -aba, -ábamos, -abais, -aban
-er, -ir, -ír  -ía,  -ías,  -ía,  -íamos,  -íais,  -ían
Irreg. verb    Conjugations
--------------------------------------------------------
ser            era,  eras,  era,  éramos,  erais,  eran
ver            veía, veías, veía, veíamos, veíais, veían
ir             iba,  ibas,  iba,  íbamos,  ibais,  iban

出于此挑战的目的,请使用大写字母代替带重音的字母(á变为A,é变为E,í变为I)。这仅是因为带重音的字母在UTF-8中为2个字节,但是在其他编码中它们可以有所不同,因此我宁愿不必处理任何字母,而留在可打印的ASCII中。

不定式动词的长度始终为三个或更多字符,唯一的例外是动词ir,绝不包含重音字母,但以-ír结尾的动词除外,并且始终以-ar,-er,-ir,或-ír。反身动词不需要处理。

输出可以采用空格/逗号分隔的字符串(因此,可以将每个共轭输出到STDOUT本身的行上)或数组/列表/等形式。

由于这是,因此以字节为单位的最短代码为准。

测试用例:

In       Out
---------------------------------------------------------------
hablar   hablaba hablabas hablaba hablAbamos hablabais hablaban
comer    comIa comIas comIa comIamos comIais comIan
vivir    vivIa vivIas vivIa vivIamos vivIais vivIan
sonreIr  sonreIa sonreIas sonreIa sonreIamos sonreIais sonreIan
ser      era eras era Eramos erais eran
ver      veIa veIas veIa veIamos veIais veIan
ir       iba ibas iba Ibamos ibais iban

1
如此多的例外..:P
扎克·盖茨

9
@ZachGates看,您这么说,但是直到您看到了贵族之后,您才看到任何东西。不完美是时态最少的例外之一。
Addison Crump

我选了西班牙文1-3,呵呵。0/10不会推荐@FlagAsSpam
Zach Gates

@ZachGates我也是。:c
Addison Crump

Answers:


6

视网膜100 82字节

\B[^a]r$
I
r$
b
^vI$
veI
^sI$
er
$
a
$
 $_s $_ $_mos $_is $_n
T`l`L`.(?=[^I]amos )

在线尝试。不幸的是,由于使用了$_它,因此无法修改代码以一次运行所有测试,因此您必须复制单个动词。我正在开发一项新功能,尽管这将使之成为可能。

说明

\B[^a]r$
I

如果输入的词不是不规则动词,我们首先将所有不是的词尾ar变成。这需要的护理,,缀合,打乱了不规则动词和唯一的(但缩短他们在这个过程中),和叶和具有拖曳。Iir-er-ir-írserverir-arr

r$
b

如果该单词仍以结尾r,我们将其替换为b。现在,我们讨论了所有标准的变位形式和不规则动词ir

^vI$
veI

这样可以解决在第一阶段ver变成的不规则动词vI

^sI$
er

这样可以解决在第一阶段ser变成不规则动词的问题sI。现在,我们已经正确修改了所有可能的词干。剩下要做的就是附加所有可能的结尾,然后在某些情况下固定第一人称复数的重音。

$
a

首先,我们a在词干后面附加一个,因为这始终是所有结尾的一部分。

$
 $_s $_ $_mos $_is $_n

这利用了很少见的方法$_,该方法将整个字符串插入到替换中(无论匹配了什么)。实际上,在复制字符串(如$`和)时$',它非常有用,它们也很不足。

在此阶段之前,我们已经在字符串中使用了第一人称单数。现在,通过将字符串的末尾与匹配,$并通过将适当的后缀附加到第一人称单数来构建其他形式,从而附加其他共轭。

T`l`L`.(?=[^I]amos )

最后,如果适用,我们为第一人称复数确定重音。只需为元音执行此操作,-amos 除非在之前的两个字符之间,否则在之前的两个字符I。因此,我们匹配一个这样的字符,然后使用音译阶段将小写转换为大写。这使得使用新的字符类的lL我昨天才加入。它们分别扩展到a-zA-Z,因此新功能在此处节省了4个字节。


3

Python 3中,154个 232字节

M=input()
Q={'ser':'er','ver':'veI','ir':'ib'}.get(M)
H=[(Q if Q else M[:-2]+("ab"if M[-2:]=="ar"else"I"))+j for j in"a as a amos ais an".split(' ')]
if M[-2:]=="ar":H[3]=M[:-2]+"Abamos"
if Q in['er','ib']:H[3]=H[3].title()
print(H)

修复了不规则动词中缺少的大写字母的问题。


不打高尔夫球

M=input()
Q={'ser':'er','ver':'veI','ir':'ib'}.get(M)

H=[]
for j in "a as a amos ais an".split(' '):
    if Q:
        F = Q
    else:
        if M[-2:] == "ar":
            F = M[:-2] + "ab"
        else:
            F = M[:-2] + "I"
    H += [F + j]

if M[-2:] == "ar":
    H[3] = M[:-2] + "Abamos"

if Q in ['er', 'ib']:
    H[3] = H[3].title()

print(H)

1

银河1.6.2,281字节

'?{"ser"b_^"er";_}?{"ver"b_^"veI";_}?{"ir"b_^"ib";_}?{_:y2->CH=<1-&{~>;+<1-}^>;+<;_^""0}?{"ar"b_"ab";>+<0_}?{_"I";>+<_^}^;^"an ais amos a as a"" "\?{<y__<^}=3&{~<:>;>;+!^<1-}^?{'C=^"a"b_'C:y2->=^^<ΩG"Abamos"+!^^_}?{<"er"b_"Eramos"!^^_}?{<"ib"b_"Ibamos"!^^_}J:y1-;=<&{~<:>;>;+!^<1-}

好吧花了一段时间!看来我需要添加一些内置程序,呵呵...


用法

./mw <path-to-code> -i <input>

例子

$ ./mw test.mwg -i "hablar"
hablaba
hablabas
hablaba
hablAbamos
hablabais
hablaban

$ ./mw test.mwg -i "ver"
veIa
veIas
veIa
veIamos
veIais
veIan

1

红宝石,151 149

通常,出于可读性考虑,我会尽可能在分号上选择换行符,但是由于没有分号,因此这是一个划线。

->n{%w{a as a amos ais an}.map{|z|['3r','veI','1b',n[0..-3]+(n[-2]==?a?'@b':?I)][("ser ver ir  "+n).index(n)/4].tr('31@',['eia','EIA'][z.size/4])+z}}

一个特征是对31@重读元音使用占位符,这取决于amos结尾。这样就形成了正确的词干,然后将占位符替换为eiaEIA适当的一个

这里有一些负数组索引的用法。因此,n[-2]是指输入的倒数第二个字符,并且n[0..-3]指的是除去了最后两个字符的输入(不定式词干)。

取消测试程序

f=->n{
%w{a as a amos ais an}.map{|z|            #iterate through each verb ending
    ['3r','veI','1b',                     #array index 0,1,2 formats for irregular stems (note numbers 1 and 3 used as placeholders)
    n[0..-3]+(n[-2]==?a?'@b':?I)][        #array index 3 format for regular stems, AR->@b or ER/IR->I depending if A found at index -2 (@ used as placeholder)
    ("ser ver ir  "+n).index(n)/4]        #find index of input verb n in "ser ver ir  "+n, divide by 4 to obtain 0,1,2,3 above
    .tr('31@',['eia','EIA'][z.size/4])+   #if z is 4 characters long (AMOS) replace 3,1,@ with uppercase E,I,A. Otherwise with lowercase e,i,a
    z                                     #add the verb ending to the stem
  }
}

n=gets.chop
puts f[n]
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.