ความไม่สมบูรณ์ของfransçaisจันทร์


13

ในการผันคำกริยาในl'imparfaitเราจำเป็นต้องทำตามขั้นตอนต่อไปนี้:

  1. ค้นหา "ก้าน" ของคำ; นี่คือความสำเร็จโดยการตัด-onsออกจากรูปแบบของคำเรา nous - ผัน ยกตัวอย่างเช่นVivreเป็นvivons เซ้นส์ ; ลบ-onsจากvivonsviv-อัตราผลตอบแทน
  2. ใช้ก้านและเพิ่มจุดจบที่เหมาะสมตามหัวข้อ นี่คือตอนจบ:

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

วัตถุประสงค์ให้กริยาและหัวเรื่องออกรูปแบบที่ไม่สมบูรณ์ของกริยานั้นด้วยความเคารพต่อหัวเรื่อง รูปแบบอินพุตสามารถอยู่ในรูปแบบใดก็ได้ที่สะดวกกับภาษาของคุณ ข้อมูลที่คุณส่งอาจเป็นโปรแกรมตัวอย่างหรือฟังก์ชัน (โปรดทราบว่าคำกริยาไม่จำเป็นต้องเป็นคำกริยาจริง)

คุณสามารถสันนิษฐานได้ว่าคำกริยาเป็นคำกริยาปกติเช่นรายการเช่นavoirจะถือว่าเป็น-irคำกริยาไม่ใช่สิ่งผิดปกติ เพียงคำกริยาคุณมีปริมาณเป็นที่ผิดปกติคือêtre ; มันผันกันเช่น:

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

nous étions
vous étiez
ils/elles étaient

นี่ผันสำหรับเป็น-er, -reและ-irคำกริยาในรูปแบบเซ้นส์

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

สิ่งใดก็ตามที่ไม่ได้ลงท้ายด้วยสิ่งเหล่านี้ไม่จำเป็นต้องได้รับการจัดการ

(หมายเหตุว่าjeผสานกับสระถัดไปถ้ามีหนึ่ง. เช่นje acheter -> j'achetais. hจะถือเป็นสระสำหรับวัตถุประสงค์ของเรา.)

ตัวอย่าง IOs

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

โบนัส

  • -5N ไบต์สำหรับการNใช้กริยาที่ผิดปกติเป็นพิเศษทั้งหมด
  • -10% ถ้าคุณยังส่งออกทุกผันของคำกริยาในที่ไม่สมบูรณ์เครียด

นี่คือดังนั้นโปรแกรมที่สั้นที่สุดในหน่วยไบต์ชนะ


@ CᴏɴᴏʀO'Bʀɪᴇɴไม่je habiterกลายเป็นj' habiteหรือj'habite?
user41805

@KritixiLithos ไม่เป็นไร
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴสำหรับโบนัส -10% อินพุทยังจำเป็นต้องมีสรรพนามหรือไม่หรือมันอาจจะเป็นคำกริยา?
user41805

Morterไม่มีอยู่ฉันคิดว่าคุณกำลังอ้างถึงto dieสิ่งที่เป็นmourirซึ่งจะให้ผลje mouraisซึ่งถูกต้องจริง
ทำให้เสียชีวิต

@Fatalize morterฉันหมายถึง มันไม่ถูกต้องทางเทคนิคเพราะไม่ใช่คำ
Conor O'Brien

คำตอบ:


2

กำลังดำเนินการ, 342-10% (โบนัส) = 307.8

ฉันสร้างฟังก์ชั่นแล้ว หากต้องการเรียกใช้ฟังก์ชันให้รวมคำสรรพนามเป็นพารามิเตอร์แรกและคำกริยาเป็นตัวที่สอง ตัวอย่างเช่น,a("je","habiter")

โปรดทราบว่าโปรแกรมของฉันผันคำกริยาสำหรับสรรพนามทั้งหมดนั่นคือวิธีที่ฉันได้รับโบนัส 10%

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)]);}

แบบฟอร์มที่อ่านได้:

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)]);
}

เอาท์พุท (สำหรับa("je", "habiter"))

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

ขอแสดงความยินดี!
Conor O'Brien

1
ใช่ ใช่ ใช่ ชัยชนะครั้งแรกของฉันในการเขียนโค้ดกอล์ฟ! ใช่ ใช่ [ล้างคอ] @ CᴏɴᴏʀO'Bʀɪᴇɴขอบคุณ
user41805

คำกริยาทั้งหมดที่มี h นำหน้าจะไม่รวมสรรพนาม เฉพาะผู้ที่มี h เงียบ ตัวอย่างตัวนับคือhaïr (je hais) (ไม่สม่ำเสมออยู่ดี), hacher, haleter, halter, hérisserและอีกมากมาย คุณยังพลาดคำกริยาที่ลงท้ายด้วย -cer ซึ่ง "nous form" กลายเป็น-çons
Urhixidur

4

Haskell, 366 362 352 ไบต์

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

คุณสามารถรวบรวมใน ghci และใช้ต้องการเพื่อที่จะได้รับ"je"#"choisir""choisissais"

รหัสนี้ใช้ได้กับคำกริยาที่ผิดปกติ มันสามารถผันคำกริยาCroire ( je croyais , tu croyais ... ) หรือprendreรวมถึงอนุพันธ์ทั้งหมดของมัน ( apprendre , assembendre , ฯลฯ )

ฉันไม่สามารถหาคำกริยาอื่นที่ลงท้ายด้วย -ire (เช่นlire , rire , dire , etc. ) หรือใน -dre (เช่นcraindre , soudreเป็นต้น)


ไม่ควรเป็น 352 ไบต์เนื่องจากêและé?
user41805

2

Java , 389 385 383 382 352.7 443-10% (โบนัส) = 398.7 ไบต์

จำนวนไบต์ลดลงขอบคุณ @PeterTaylor และ @Faleize
โปรดทราบว่าโปรแกรมของฉันผันคำกริยาสำหรับคำสรรพนามทั้งหมดนั่นคือวิธีที่ฉันได้รับโบนัส 10%

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)]);}}

รูปแบบที่อ่านได้ (ยังค่อนข้างยุ่ง):

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

คำอธิบาย:

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.



(เวอร์ชั่นเก่า) 393-10% = 352.7 ไบต์

โปรดทราบว่าโปรแกรมเก่าของฉันไม่ปฏิบัติตามกฎใหม่เกี่ยวกับการjeรวมเข้า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
ทำไมคุณถึงมีทั้งkและl?
Peter Taylor

@PeterTaylor Gee ขอบคุณสำหรับการค้นพบสิ่งนั้น!
user41805

คุณมีพื้นที่ว่างเปล่าที่นี่:w[1].substring(0, w[1].length()-2)
เสียชีวิต

@ กระชับฉันได้ลบพื้นที่ที่ไม่มีประโยชน์ออกจากการแก้ไขล่าสุดของฉัน
user41805

1

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

ขอบคุณมากสำหรับ @WW ที่ช่วยฉันได้ 35 ไบต์!

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)]

ลองออนไลน์!


1
คุณสามารถใช้ a splitเพื่อบีบอัดรายการของคุณได้อีกเล็กน้อย การใช้;สามารถช่วยคุณหลีกเลี่ยงการเยื้อง
Ad Hoc Garf Hunter

1
นอกจากนี้คุณยังไม่จำเป็นต้อง parens รอบเงื่อนไขของคุณในifs
Ad Hoc Garf Hunter

1
การส่งของคุณดูเหมือนจะเว้นวรรคj'ซึ่งดูเหมือนจะไม่ตรงกับข้อมูลจำเพาะ
Ad Hoc Garf Hunter

1
@WW ขอบคุณ! และในความคิดเห็นของโพสต์หลัก OP กล่าวว่า "เจ' มีช่องว่างที่จะปรับ
JathOsh

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.