Imperfecciones dans mon français


13

Para conjugar un verbo en l'imparfait , uno debe realizar los siguientes pasos:

  1. Encuentra el "tallo" de la palabra; esto se logra omitiendo la -onsforma de la palabra conjugada con nous. Por ejemplo, vivre es nous vivons ; quitando -onsde los rendimientos vivonsviv- .
  2. Tome el tallo y agregue un final apropiado, según el tema. Aquí están los finales:

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

Objetivo Dado un verbo y un sujeto, genera la forma imperfecta de ese verbo con respecto al sujeto. El formato de entrada puede estar en cualquier formato conveniente para su idioma. Su envío puede ser un programa, fragmento o función. (Tenga en cuenta que el verbo no tiene que ser un verbo real).

Puede suponer que el verbo es un verbo regular, es decir, elementos como avoir serían tratados como un -irverbo, no uno irregular. El único verbo que tienes que cuantificar como irregular es être ; se conjuga como tal:

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

nous étions
vous étiez
ils/elles étaient

Aquí están las conjugaciones de -er, -rey -irverbos en las formas nous

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

Cualquier cosa que no termine con tal no tiene que ser manejada.

(Tenga en cuenta que je se fusiona con la siguiente vocal, si lo hay. Por ejemplo, je acheter -> j'achetais. hSerá considerado una vocal para nuestros fines).

Ejemplo 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

Bonos

  • -5N bytes para todos Nlos verbos irregulares extra manejados.
  • -10% si también emites cada conjugación del verbo en tiempo imperfecto.

Este es un , por lo que gana el programa más corto en bytes.


@ CᴏɴᴏʀO'Bʀɪᴇɴ ¿Se je habiterconvierte en j' habiteo j'habite?
Kritixi Lithos

@KritixiLithos Cualquiera está bien.
Conor O'Brien el

@ CᴏɴᴏʀO'Bʀɪᴇɴ Para el bono de -10%, ¿la entrada todavía necesita tener el pronombre, o puede ser simplemente el verbo?
Kritixi Lithos

Morterno existe, supongo que se está refiriendo a to diecuál es mourir, cuál produciría je mouraiscuál es realmente correcto
Fatalize

@Fatalize me refería morter. Es técnicamente incorrecto porque no es una palabra.
Conor O'Brien el

Respuestas:


2

Procesamiento, 342-10% (bonificación) = 307.8

He creado una función. Para llamar a la función, incluya el pronombre como primer parámetro y el verbo como segundo. Por ejemplo,a("je","habiter")

Tenga en cuenta que mi programa conjuga el verbo para todos los pronombres, así es como obtuve el 10% de bonificación.

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

Forma legible:

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

Salida (para a("je", "habiter"))

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

¡Felicidades!
Conor O'Brien

1
¡Si! ¡Si! ¡Si! ¡Mi primera victoria en code-golf! ¡Si! ¡Si! [se aclara la garganta] @ CᴏɴᴏʀO'Bʀɪᴇɴ Gracias.
Kritixi Lithos

No todos los verbos con h inicial eluirán el pronombre. Solo aquellos con una h silenciosa. Los ejemplos opuestos son haïr (je hais) (irregular de todos modos), hacher, haleter, halter, hérisser y muchos más. También echa de menos los verbos que terminan en -cer, donde la "forma de nous" se convierte en -çons.
Urhixidur

4

Haskell, 366 362 352 bytes

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

Puede compilar esto en ghci y usarlo así "je"#"choisir"para obtener "choisissais".

Este código funciona con algunos verbos irregulares. Puede conjugar croire ( je croyais , tu croyais ...) o prendre , así como todos sus derivados ( apprendre , comprendre , etc.).

No pude encontrar una forma corta de conjugar otros verbos que terminen en -ire (como lire , rire , dire , etc.) o en -dre (como craindre , soudre , etc.).


¿No deberían ser 352 bytes debido a la êy é?
Kritixi Lithos

2

Java , 389 385 383 382 352,7 443 a 10% (bono) = 398,7 bytes

El recuento de bytes se redujo gracias a @PeterTaylor y @Fatalize.
Tenga en cuenta que mi programa conjuga el verbo para todos los pronombres, así es como obtuve el 10% de bonificación.

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

Forma legible (aún bastante desordenada):

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

Explicación:

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.



(Versión anterior) 393-10% = 352.7 bytes

Tenga en cuenta también que mi antiguo programa no obedece con la nueva regla sobre la jefusión en 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
¿Por qué tienes ambos ky l?
Peter Taylor

@PeterTaylor Gee, ¡gracias por verlo!
Kritixi Lithos

Tienes un espacio inútil aquí:w[1].substring(0, w[1].length()-2)
Fatalize

@Fatalize He eliminado el espacio inútil en mi última edición.
Kritixi Lithos

1

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

¡Muchas gracias a @WW por salvarme 35 bytes!

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

Pruébalo en línea!


1
Puede usar a splitpara comprimir sus listas un poco más. El uso también ;puede ayudarlo a evitar parte de la sangría.
Post Rock Garf Hunter

1
Tampoco necesita parens alrededor de sus condicionales en el ifs.
Post Rock Garf Hunter

1
Su envío parece poner un espacio después j', que no parece coincidir con la especificación.
Post Rock Garf Hunter

1
@WW ¡Gracias! y en los comentarios de la publicación principal, el OP dice "j '" con un espacio está bien
JathOsh

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.