Imperfeições em francês


13

Para conjugar um verbo em l'imparfait , é necessário executar as seguintes etapas:

  1. Encontre o "radical" da palavra; isso é obtido omitindo a -onsforma nous-conjugada da palavra. Por exemplo, vivre é nous vivons ; removendo -onsdos vivons produz viv-.
  2. Pegue a haste e adicione um final apropriado, de acordo com o assunto. Aqui estão os finais:

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

Objetivo Dado um verbo e um assunto, produza a forma imperfeita desse verbo com relação ao assunto. O formato de entrada pode estar em qualquer formato conveniente para o seu idioma. Seu envio pode ser um programa, snippet ou função. (Observe que o verbo não precisa ser um verbo real.)

Você pode assumir que o verbo é um verbo regular, ou seja, itens como avoir seriam tratados como -irverbo, não irregular. O único verbo que você precisa quantificar como irregular é être ; é conjugado como tal:

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

nous étions
vous étiez
ils/elles étaient

Aqui estão as conjugações para -er, -ree -irverbos nas formas nous

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

Tudo o que não termina com isso não precisa ser tratado.

(Observe que je se funde com a próxima vogal, se houver uma. Por exemplo je acheter -> j'achetais,. hSerá considerada uma vogal para nossos propósitos.)

Exemplos de veiculação

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

Bónus

  • -5N bytes para todos Nos verbos irregulares extras manipulados.
  • -10% se você também imprimir todas as conjugações do verbo no tempo imperfeito.

Este é um , portanto o programa mais curto em bytes vence.


@ CᴏɴᴏʀO'Bʀɪᴇɴ Torna- je habiterse j' habiteou j'habite?
Kritixi Lithos

@KritixiLithos Está tudo bem.
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ Para o bônus de -10%, a entrada ainda precisa ter o pronome ou pode ser apenas o verbo?
Kritixi Lithos

Morternão existe, presumo que você esteja se referindo a to diequal é mourir, o que produziria o je mouraisque é realmente correto.
Fatalizar

@Fatalize eu estava me referindo morter. É tecnicamente incorreto porque não é uma palavra.
Conor O'Brien

Respostas:


2

Processamento, 342-10% (bônus) = 307,8

Eu criei uma função. Para chamar a função, inclua o pronome como o primeiro parâmetro e o verbo como o segundo. Por exemplo,a("je","habiter")

Observe que meu programa conjuga o verbo para todos os pronomes, e foi assim que recebi o bônus de 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)]);}

Formulário legível:

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

Saída (para a("je", "habiter") )

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

Parabéns!
Conor O'Brien

1
Sim! Sim! Sim! Minha primeira vitória no código-golfe! Sim! Sim! [limpa a garganta] @ CᴏɴᴏʀO'Bʀɪᴇɴ Obrigado.
Kritixi Lithos

Nem todos os verbos com um h inicial eliminarão o pronome. Somente aqueles com um h silencioso. Os exemplos de contador são haïr (je hais) (irregular de qualquer maneira), hacher, haleter, halter, hérisser e muitos mais. Você também perde os verbos que terminam em -cer, onde a "forma nous" se torna -çons.
Urhixidur 23/10/19

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

Você pode compilar isso em ghci e usá-lo como tal "je"#"choisir"para chegar "choisissais".

Este código funciona com alguns verbos irregulares. Pode conjugar croire ( je croyais , tu croyais ...) ou prendre , bem como todos os seus derivados ( apprendre , comprendre , etc.).

Não consegui encontrar uma maneira curta de conjugar outros verbos terminados em -ire (como lire , rire , dire , etc.) ou em -dre (como craindre , soudre , etc.).


Não deveria ter 352 bytes por causa do êe é?
Kritixi Lithos 23/10/2015

2

Java , 389 385 383 382 352,7 443-10% (bónus) = 398,7 bytes

Contagem de bytes reduzida graças a @PeterTaylor e @Fatalize
Observe que meu programa conjuga o verbo de todos os pronomes, e foi assim que recebi o bônus de 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)]);}}

Forma legível (ainda bastante confusa):

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

Explicação:

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.



(Versão antiga) 393-10% = 352.7 bytes

Observe também que meu antigo programa não obedece à nova regra sobre a jefusã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
Por que você tem os dois ke l?
Peter Taylor

@ PeterTaylor Gee, obrigado por avistar esse!
Kritixi Lithos 23/10/2015

Você tem um espaço inútil aqui:w[1].substring(0, w[1].length()-2)
Fatalize 23/10

@Fatalize Eu removi o espaço inútil na minha edição mais recente.
Kritixi Lithos

1

Python 3 , 258-10% = 232,2 223-10% = 200,7

Muito obrigado a @WW por me salvar 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)]

Experimente online!


1
Você pode usar a splitpara compactar um pouco mais suas listas. O uso também ;pode ajudá-lo a evitar parte do recuo.
Post Rock Garf Hunter

1
Você também não precisa de parênteses em torno de suas condicionais nos ifs.
Post Rock Garf Hunter

1
Sua submissão parece colocar um espaço depois j', que não parece corresponder às especificações.
Post Rock Garf Hunter

1
@WW Obrigado! e nos comentários do post principal, o OP diz que "j '" com um espaço é bom
JathOsh 18/07/1918

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.