Imperfezioni in francese


13

Per coniugare un verbo in l'imparfait , è necessario eseguire i seguenti passaggi:

  1. Trova la "radice" della parola; ciò si ottiene omettendo la -onsforma coniugata dal nous della parola. Ad esempio, vivre è nous vivons ; togliendo -onsdai vivoni rendimenti viv-.
  2. Prendi lo stelo e aggiungi un finale appropriato, in base al soggetto. Ecco i finali:

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

Obiettivo Dato un verbo e un soggetto, genera la forma imperfetta di quel verbo rispetto al soggetto. Il formato di input può essere in qualsiasi formato conveniente per la tua lingua. L'invio può essere un programma, uno snippet o una funzione. (Nota che il verbo non deve essere un verbo reale.)

Puoi presumere che il verbo sia un verbo regolare, cioè elementi come avoir verrebbero trattati come un -irverbo, non come un irregolare. L'unico verbo che devi quantificare come irregolare è être ; è coniugato come tale:

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

nous étions
vous étiez
ils/elles étaient

Qui ci sono le coniugazioni per -er, -ree -irverbi nelle forme nous

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

Tutto ciò che non termina con tale non deve essere gestito.

(Si noti che je si fonde con il prossimo vocale, se ce n'è uno. Ad esempio, je acheter -> j'achetais. hSarà considerato una vocale per i nostri scopi.)

IO di esempio

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

bonus

  • -5 N byte per tutti Ni verbi extra irregolari gestiti.
  • -10% se si genera anche ogni coniugazione del verbo al tempo imperfetto.

Questo è un , quindi vince il programma più breve in byte.


@ CᴏɴᴏʀO'Bʀɪᴇɴ je habiterDiventa j' habiteo j'habite?
user41805,

@KritixiLithos O ​​va bene.
Conor O'Brien,

@ CᴏɴᴏʀO'Bʀɪᴇɴ Per il bonus del -10%, l'input deve ancora avere il pronome o può essere solo il verbo?
user41805,

Morternon esiste, presumo tu ti riferisca a to diequale è mourir, che produrrebbe je mouraisquale è effettivamente corretto.
Fatalizza il

@Fatalize a cui mi riferivo morter. È tecnicamente scorretto perché non è una parola.
Conor O'Brien,

Risposte:


2

Elaborazione, 342-10% (bonus) = 307,8

Ho creato una funzione. Per chiamare la funzione, includere il pronome come primo parametro e il verbo come secondo. Per esempio,a("je","habiter")

Nota che il mio programma coniuga il verbo per tutti i pronomi, quindi è così che ho ottenuto il bonus del 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)]);}

Modulo leggibile:

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

Uscita (per a("je", "habiter"))

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

Congratulazioni!
Conor O'Brien,

1
Sì! Sì! Sì! La mia prima vittoria nel golf di codice! Sì! Sì! [si schiarisce la gola] @ CᴏɴᴏʀO'Bʀɪᴇɴ Grazie.
user41805,

Non tutti i verbi con una h iniziale elimineranno il pronome. Solo quelli con un silenzio h. Esempi contrari sono haïr (je hais) (comunque irregolare), hacher, haleter, halter, hérisser e molti altri. Ti mancano anche i verbi che terminano in -cer, dove la "forma del nous" diventa -ç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

Puoi compilarlo in ghci e usarlo così "je"#"choisir"per ottenere "choisissais".

Questo codice funziona con alcuni verbi irregolari. Può coniugare croire ( je croyais , tu croyais ...) o prendre e tutti i suoi derivati ​​( apprendre , comprendre , ecc.).

Non sono riuscito a trovare un modo breve per coniugare altri verbi che terminano in -ire (come lire , rire , dire , ecc.) O in -dre (come craindre , soudre , ecc.).


Non dovrebbe essere 352 byte a causa del êe é?
user41805,

2

Java , 389 385 383 382 352,7 443-10% (bonus) = 398,7 byte

Numero di byte ridotto grazie a @PeterTaylor e @Fatalize
Nota che il mio programma coniuga il verbo per tutti i pronomi, quindi è così che ho ottenuto il bonus del 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)]);}}

Modulo leggibile (ancora piuttosto disordinato):

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

Spiegazione:

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.



(Vecchia versione) 393-10% = 352,7 byte

Nota anche che il mio vecchio programma non obbedisce alla nuova regola sulla jefusione 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
Perché hai entrambi ke l?
Peter Taylor,

@ Peter Taylor, grazie per aver individuato quello!
user41805,

Hai uno spazio inutile qui:w[1].substring(0, w[1].length()-2)
Fatalizzare

@Fatalize Ho rimosso lo spazio inutile nella mia ultima modifica.
user41805,

1

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

Enorme grazie a @WW per avermi salvato 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)]

Provalo online!


1
Puoi usare a splitper comprimere un po 'di più le tue liste. Anche l'utilizzo ;può aiutarti a evitare alcuni dei rientri.
Post Rock Garf Hunter,

1
Inoltre non hai bisogno di parentesi attorno ai tuoi condizionali negli anni if'70.
Post Rock Garf Hunter,

1
La tua richiesta sembra mettere uno spazio dopo j', che non sembra corrispondere alle specifiche.
Post Rock Garf Hunter,

1
@WW Grazie! e nei commenti del post principale l'OP dice "j '" con uno spazio va bene
JathOsh

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.