Liên hợp trong không hoàn hảo Tây Ban Nha / Conjugue en el không hoàn hảo de chỉativo


13

Đưa ra một đầu vào của một động từ tiếng Tây Ban Nha ở dạng nguyên bản, xuất ra động từ được liên hợp trong tất cả 6 dạng của không hoàn hảo chỉ định.

Để liên hợp một phần tử không hoàn hảo, hãy loại bỏ phần kết thúc nguyên bản (-ar, -er, -ir và đôi khi -ír) và thêm các phần cuối không hoàn hảo được liệt kê bên dưới. Có ba động từ bất quy tắc trong không hoàn hảo, cũng được liệt kê dưới đây.

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

Đối với mục đích của thử thách này, hãy sử dụng chữ in hoa thay vì chữ cái có dấu (á trở thành A, é trở thành E và í trở thành I). Điều này chỉ bởi vì các chữ cái có dấu là 2 byte trong UTF-8, nhưng chúng có thể khác nhau trong các bảng mã khác và thay vào đó tôi không phải xử lý bất kỳ ký tự nào trong số đó và nằm trong ASCII có thể in được.

Các động từ nguyên thể sẽ luôn có ba hoặc nhiều ký tự với ngoại lệ duy nhất của động từ ir , sẽ không bao giờ chứa các chữ cái có dấu ngoại trừ các động từ kết thúc bằng -ír và sẽ luôn kết thúc bằng -ar, -er, -ir, hoặc -ír. Động từ phản xạ không cần phải xử lý.

Đầu ra có thể ở dạng chuỗi được phân tách bằng khoảng trắng / dấu phẩy (do đó, việc in mỗi cách chia thành STDOUT trên dòng riêng của nó là được) hoặc một mảng / danh sách / v.v.

Vì đây là , mã ngắn nhất tính bằng byte sẽ thắng.

Các trường hợp thử nghiệm:

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
Rất nhiều trường hợp ngoại lệ ..: P
Zach Gates

9
@ZachGates Xem, bạn nói vậy, nhưng bạn chưa thấy gì cho đến khi bạn thấy nguyên thủy. Không hoàn hảo là một trong những thì có ít ngoại lệ nhất.
Addison Crump

Tôi đã lấy tiếng Tây Ban Nha 1-3, hehe. 0/10 sẽ không đề xuất @FlagAsSpam
Zach Gates

@ZachGates Tôi cũng vậy. : c
Addison Crump

Câu trả lời:


6

Võng mạc , 100 82 byte

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

Hãy thử trực tuyến. Thật không may, do $_không thể sửa đổi mã để chạy tất cả các bài kiểm tra cùng một lúc, vì vậy bạn sẽ phải sao chép trong các động từ riêng lẻ. Tôi đang làm việc trên một tính năng mới sẽ làm cho điều này có thể mặc dù.

Giải trình

\B[^a]r$
I

Chúng tôi bắt đầu bằng cách biến tất cả các kết thúc không arthành I, với điều kiện đầu vào không phải là động từ bất quy tắc ir. Mà sẽ chăm sóc của -er, -ir, -írcách chia động từ, messes lên các động từ bất quy tắcserver(nhưng rút ngắn họ trong quá trình này), và lá chỉ ir-arvới một dấu r.

r$
b

Nếu từ vẫn kết thúc bằng r , chúng ta thay thế nó bằng a b. Bây giờ chúng tôi đã bao gồm tất cả các cách chia tiêu chuẩn cũng như động từ bất quy tắc ir.

^vI$
veI

Điều này sửa chữa động từ bất quy tắc verđã được chuyển thành vItrong giai đoạn đầu tiên.

^sI$
er

Điều này sửa chữa động từ bất quy tắc serđã được chuyển thành sItrong giai đoạn đầu tiên. Bây giờ chúng tôi đã sửa đổi tất cả các thân có thể chính xác. Tất cả những gì còn lại phải làm là nối tất cả các kết thúc có thể, và sau đó sửa dấu trọng âm cho ngôi thứ nhất số nhiều trong một số trường hợp.

$
a

Đầu tiên chúng tôi nối một a thân cây, bởi vì đó luôn là một phần của tất cả các kết thúc.

$
 $_s $_ $_mos $_is $_n

Điều này làm cho việc sử dụng hiếm thấy $_ mà chèn toàn bộ chuỗi vào thay thế (bất kể những gì được khớp). Điều này thực sự rất hữu ích khi nhân đôi chuỗi, cũng như , $`$'nó cũng không được đánh giá đúng mức.

Trước giai đoạn này, chúng ta đã có người đầu tiên trong chuỗi. Bây giờ chúng ta nối thêm các cách chia khác, bằng cách khớp phần cuối của chuỗi với$ và xây dựng các dạng khác bằng cách nối các hậu tố thích hợp cho số ít người thứ nhất.

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

Cuối cùng, chúng tôi sửa dấu trọng âm cho ngôi thứ nhất số nhiều nếu có. Điều này chỉ cần được thực hiện cho một nguyên âm, hai ký tự ở phía trước -amos trừ khi ký tự ở giữa là I. Vì vậy, chúng tôi khớp một ký tự như vậy và sau đó sử dụng một giai đoạn chuyển ngữ để chuyển đổi chữ thường thành chữ hoa. Điều này làm cho việc sử dụng các lớp nhân vật mới lLmà tôi chỉ thêm vào ngày hôm qua. Chúng mở rộng đến a-zA-Ztương ứng, để tính năng mới tiết kiệm 4 byte ở đây.


3

Python 3, 154 232 byte

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)

Đã sửa lỗi viết hoa bị thiếu trong các động từ bất quy tắc.


Ung dung

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

Dải ngân hà 1.6.2 , 281 byte

'?{"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-}

Vâng , mất một lúc! Có vẻ như tôi cần thêm một số nội trang, hehe ...


Sử dụng

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

Ví dụ

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

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

1

Ruby, 151 149

Thông thường, tôi sẽ chọn một dòng mới trên dấu chấm phẩy nếu có thể vì lợi ích của khả năng đọc, nhưng vì không có dấu chấm phẩy, đây là một dòng.

->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}}

Một tính năng là việc sử dụng trình giữ chỗ 31@cho các nguyên âm có dấu phụ thuộc vào phần amoscuối. Do đó, thân chính xác được hình thành, và sau đó giữ chỗ được thay thế cho một eiahoặc EIAkhi thích hợp

Có một vài cách sử dụng các chỉ mục mảng âm ở đây. Do đó, n[-2]đề cập đến ký tự thứ hai đến cuối cùng của đầu vào và n[0..-3]đề cập đến đầu vào với 2 ký tự cuối cùng bị loại bỏ (gốc vô tận).

Ungolfed trong chương trình thử nghiệm

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]
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.