스페인어 불완전한 활용 / Conjugue en el imperfecto de indicativo


13

부정사 형태의 스페인어 동사의 입력이 주어지면, 동사는 6 가지 형태의 불완전한 형태로 결합 된 동사를 출력합니다.

불완전한 부정사를 결합하려면 부정사 끝 (-ar, -er, -ir 및 때로는 -ír)을 제거하고 아래 나열된 불완전한 끝을 추가하십시오. 불완전한 동사에는 불규칙 동사가 3 개 있으며 아래에 또한 나와 있습니다.

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는 E, I는 I가 됨). 이것은 악센트 부호 문자가 UTF-8에서 2 바이트이기 때문에 다른 인코딩에서는 다를 수 있기 때문에 그 중 하나를 처리하고 대신 인쇄 가능한 ASCII 내에 머물 필요가 없습니다.

부정사 동사는 항상 동사의 유일한 예외 세 이상의 자 할 것이다 IR , 동사를 제외한 악센트 문자를 포함하지 않습니다이를 -IR에, 항상 하나 -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
Zach Gates

9
@ZachGates See, 당신은 그렇게 말하지만, 당신은 미신을 볼 때까지 아무것도 보지 못했습니다. 불완전은 예외가 가장 적은 시제 중 하나입니다.
애디슨 크럼

나는 스페인어 1-3을 he 다. 0/10은 @FlagAsSpam 권하고 싶지 않다
자크 빌 게이츠

@ZachGates 저도 요. : c
Addison Crump

답변:


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 . 따라서 이러한 문자를 일치시킨 다음 음역 단계를 사용하여 소문자를 대문자로 변환합니다. 이것은 새로운 캐릭터 클래스를 사용 l하며 L어제 추가 한 것입니다. 그들은으로 확장 a-zA-Z새로운 기능이 여기에 4 바이트를 저장 그래서, 각각.


3

파이썬 3, 154232 바이트

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. 따라서 올바른 스템이 형성되고 자리 표시자가 하나 eia또는 EIA적절한 것으로 대체 됩니다.

여기에 음의 배열 인덱스를 몇 가지 사용합니다. 따라서 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]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.