Sự không hoàn hảo dans mon français


13

Để chia động từ trong l'imparfait , người ta cần thực hiện các bước sau:

  1. Tìm "gốc" của từ; điều này đạt được bằng cách bỏ đi -onstừ dạng liên hợp nous của từ. Ví dụ, vivrenous vivons ; loại bỏ -onstừ năng suất vivonsviv- .
  2. Lấy thân cây và thêm một kết thúc thích hợp, theo chủ đề. Đây là kết thúc:

    je         -ais
    tu         -ais
    il/elle    -ait
    
    nous       -ions
    vous       -iez
    ils/elles  -aient
    

Mục tiêu Cho một động từ và một chủ ngữ, xuất ra dạng không hoàn hảo của động từ đó đối với chủ ngữ. Các định dạng đầu vào có thể ở bất kỳ định dạng thuận tiện cho ngôn ngữ của bạn. Nội dung gửi của bạn có thể là chương trình, đoạn trích hoặc chức năng. (Lưu ý rằng động từ không phải là một động từ thực sự.)

Bạn có thể cho rằng động từ là một động từ thông thường, nghĩa là các mục như avoir sẽ được coi là một -irđộng từ, không phải là một động từ bất quy tắc. Động từ duy nhất bạn phải định lượng là không đều là être ; nó được liên hợp như vậy:

j'étais
tu étais
il/elle était

nous étions
vous étiez
ils/elles étaient

Dưới đây là cách chia cho -er, -re-irđộng từ trong các hình thức nous

-ER => (e)ons           ; e is added after a 'g'
-RE => ons
-IR => issons

Bất cứ điều gì không kết thúc với như vậy không phải xử lý.

(Lưu ý rằng je hòa trộn với các nguyên âm tiếp theo, nếu có. Ví dụ, je acheter -> j'achetais. hSẽ được coi là một nguyên âm cho mục đích của chúng tôi.)

IOs ví dụ

input: tu vivre
output: tu vivais

input: elles nager
output: elles nageaient

input: je morter
output: je mortais     ; incorrect in real life, but correct for our purposes

input: vous finir
output: vous finissiez

input: il croire
output: il croiait

input: nous jouer
output: nous jouions

Tiền thưởng

  • -5N byte cho tất cả Ncác động từ bất quy tắc bổ sung được xử lý.
  • -10% nếu bạn cũng xuất ra mọi cách chia động từ trong thì không hoàn thành.

Đây là một , vì vậy chương trình ngắn nhất tính bằng byte sẽ thắng.


@ CᴏɴᴏʀO'Bʀɪᴇɴ Có je habitertrở thành j' habitehay j'habitekhông?
Kritixi Lithos

@KritixiLithos Hoặc là tốt.
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ Với phần thưởng -10%, đầu vào vẫn cần phải có đại từ, hay nó chỉ có thể là động từ?
Kritixi Lithos

Morterkhông tồn tại, tôi giả sử bạn đang đề cập đến to diecái mourirnào sẽ mang lại je mouraiscái nào thực sự chính xác.
Gây tử vong

@Firthize Tôi đã tham khảo morter. Đó là kỹ thuật không chính xác bởi vì nó không phải là một từ.
Conor O'Brien

Câu trả lời:


2

Đang xử lý, 342-10% (tiền thưởng) = 307,8

Tôi đã tạo ra một chức năng. Để gọi hàm, bao gồm đại từ là tham số đầu tiên và động từ là thứ hai. Ví dụ,a("je","habiter")

Xin lưu ý rằng chương trình của tôi chia động từ cho tất cả các đại từ, vì vậy đó là cách tôi nhận được 10% tiền thưởng.

void a(String a,String b){String[]e={"ais","ais","ait","ait","ions","iez","aient","aient"},p={"je","tu","il","elle","nous","vous","ils","elles"};if("aehiou".contains(b.charAt(0)+""))p[0]="j'";for(String i:p)println(i+" "+b.substring(0,b.length()-2)+(b.endsWith("ger")?"e":b.endsWith("ir")?"iss":"")+e[java.util.Arrays.asList(p).indexOf(i)]);}

Hình thức dễ đọc:

void a(String a,String b){
  String[]e={"ais","ais","ait","ait","ions","iez","aient","aient"},p={"je","tu","il","elle","nous","vous","ils","elles"};
  if("aehiou".contains(b.charAt(0)+""))p[0]="j'";
  for(String i:p)
    println(i+" "+b.substring(0,b.length()-2)+(b.endsWith("ger")?"e":b.endsWith("ir")?"iss":"")+e[java.util.Arrays.asList(p).indexOf(i)]);
}

Đầu ra (cho a("je", "habiter"))

j' habitais
tu habitais
il habitait
elle habitait
nous habitions
vous habitiez
ils habitaient
elles habitaient

Xin chúc mừng!
Conor O'Brien

1
Đúng! Đúng! Đúng! Chiến thắng đầu tiên của tôi trong môn đánh gôn! Đúng! Đúng! [hắng giọng] @ CᴏɴᴏʀO'Bʀɪᴇɴ Cảm ơn bạn.
Kritixi Lithos

Không phải tất cả các động từ có h dẫn đầu sẽ bỏ qua đại từ. Chỉ những người có một h im lặng. Ví dụ truy cập là haïr (je hais) (dù sao không thường xuyên), hacher, haleter, halter, hérisser và nhiều hơn nữa. Bạn cũng bỏ lỡ các động từ kết thúc bằng -cer, trong đó "dạng nous" trở thành -çons.
Urhixidur

4

Haskell, 366 362 352 byte

s#v=m++g++d++t
 where
 m|v=="être"="ét"|i/="rio"&&i/="erd"&&i/="eri"=r 2 v|otherwise=r 3 v
 g=if(last m=='g'&&head t/='i')then"e"else""
 d|init i=="ri"="iss"|i=="eri"="y"|otherwise=""
 t|s=="je"||s=="tu"="ais"|elem s["il","elle","on"]="ait"|s=="nous"="ions"|s=="vous"="iez"|s=="ils"||s=="elles"="aient"
 r i=reverse.drop i.reverse
 i=take 3$reverse v

Bạn có thể biên dịch cái này trong ghci và sử dụng nó như vậy "je"#"choisir"để có được "choisissais".

Mã này hoạt động với một số động từ bất quy tắc. Nó có thể liên hợp croire ( je croyais , tu croyais Cách ) hoặc prendre cũng như tất cả các dẫn xuất của nó ( apprendre , comprendre , v.v.).

Tôi không thể tìm thấy một cách ngắn để kết hợp các động từ khác kết thúc bằng -ire (chẳng hạn như lire , rire , dire , v.v.) hoặc in -dre (như craindre , soudre , v.v.).


Không phải là 352 byte vì êé?
Kritixi Lithos

2

Java , 389 385 383 382 352,7 443-10% (tiền thưởng) = 398,7 byte

Số lượng byte giảm nhờ @PeterTaylor và @Firthize
Xin lưu ý rằng chương trình của tôi chia động từ cho tất cả các đại từ, vì vậy đó là cách tôi nhận được 10% tiền thưởng.

class A{public static void main(String[]a){String[]e={"ais","ais","ait","ait","ions","iez","aient","aient"},p={"je","tu","il","elle","nous","vous","ils","elles"},w=new java.util.Scanner(System.in).nextLine().split(" ");if("aehiou".contains(w[1].charAt(0)+""))p[0]="j'";for(String i:p)System.out.println(i+" "+w[1].substring(0,w[1].length()-2)+(w[1].endsWith("ger")?"e":w[1].endsWith("ir")?"iss":"")+e[java.util.Arrays.asList(p).indexOf(i)]);}}

Hình thức dễ đọc (vẫn còn khá lộn xộn):

 1| class A{
 2|   public static void main(String[]a){
 3|     String[]e={"ais","ais","ait","ait","ions","iez","aient","aient"};
 4|     String[]p={"je","tu","il","elle","nous","vous","ils","elles"};
 5|     String[]w=new java.util.Scanner(System.in).nextLine().split(" ");
 6|     if("aehiou".contains(w[1].charAt(0)+""))p[0]="j'";
 7|     for(String i: p) {
 8|       System.out.print(i+" "+w[1].substring(0,w[1].length()-2)+(w[1].endsWith("ger")?"e":w[1].endsWith("ir")?"iss":"")+e[java.util.Arrays.asList(p).indexOf(i)]);
 9|     }
10|   }
11| }

Giải trình:

Lines 3-4: Initialisation of arrays.
Line    5: Read a line as input and split it into words
Line    6: Shorten the `je` to `j'` in presence of a succeeding vowel or a `h`.
Line    7: Create a for-loop iterating through all of the pronouns .
Line    8: Conjugate the verb(remove the ending from the infinite form of the verb and add ending accordingly) and print the result, along with the pronoun.



(Phiên bản cũ) 393-10% = 352,7 byte

Cũng xin lưu ý rằng chương trình cũ của tôi không tuân thủ quy tắc mới về việc jesáp nhập vào j'.

class A{public static void main(String[]a){String[]e={"ais","ais","ait","ait","ions","iez","aient","aient"},p={"je","tu","il","elle","nous","vous","ils","elles"},w=new java.util.Scanner(System.in).nextLine().split(" ");for(String i:p)System.out.println(i+" "+w[1].substring(0,w[1].length()-2)+(w[1].endsWith("ger")?"e":w[1].endsWith("ir")?"iss":"")+e[java.util.Arrays.asList(p).indexOf(i)]);}}

2
Tại sao bạn có cả hai kl?
Peter Taylor

@PeterTaylor Gee, cảm ơn vì đã phát hiện ra cái đó!
Kritixi Lithos

Bạn có một không gian vô dụng ở đây:w[1].substring(0, w[1].length()-2)
Fatalize

@Firthize Tôi đã xóa không gian vô dụng trong lần chỉnh sửa mới nhất của mình.
Kritixi Lithos

1

Python 3 , 258-10% = 232.2 223-10% = 200.7

Rất cảm ơn @WW vì đã tiết kiệm cho tôi 35 byte!

def t(x,y):
 z=y[-2:];y=y[:-2];y+='e'*(y[-1]=='g');y+='iss'*(z=='ir')
 return[('j'+"e'"[y[0]in'aeiouh']+' tu il elle nous vous ils elles').split()[i]+' '+y+'ais ais ait ait ions iez aient aient'.split()[i]for i in range(8)]

Hãy thử trực tuyến!


1
Bạn có thể sử dụng a splitđể nén danh sách của mình thêm một chút. Ngoài ra sử dụng ;có thể giúp bạn tránh một số vết lõm.
Đăng Rock Garf Hunter

1
Bạn cũng không cần parens xung quanh các điều kiện của bạn trong ifs.
Đăng Rock Garf Hunter

1
Nội dung gửi của bạn dường như đặt một khoảng trắng sau j', dường như không khớp với thông số kỹ thuật.
Đăng Rock Garf Hunter

1
@WW Cảm ơn! và trong các bình luận của bài đăng chính, OP nói "j '" với một khoảng trống là ổn
JathOsh 18/07/18

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.