Niedoskonałości w mon français


13

Aby skoniugować czasownik w l'imparfait , należy wykonać następujące czynności:

  1. Znajdź „rdzeń” słowa; osiąga się to przez pominięcie w -onsnous-skoniugowanej formie słowa. Na przykład vivre to nous vivons ; usuwanie -onsz plonów vivonówviv- .
  2. Weź łodygę i dodaj odpowiednie zakończenie, zgodnie z tematem. Oto zakończenia:

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

Cel Biorąc pod uwagę czasownik i podmiot, uzyskaj niedoskonałą formę tego czasownika w odniesieniu do podmiotu. Format wejściowy może być w dowolnym formacie odpowiednim dla twojego języka. Twoje zgłoszenie może być programem, fragmentem lub funkcją. (Uwaga: czasownik nie musi być prawdziwym czasownikiem).

Możesz założyć, że czasownik jest czasownikiem regularnym, tzn. Elementy takie jak rzyganie będą traktowane jako -irczasownik, a nie nieregularny. Jedyny czasownik, który musisz określić jako nieregularny, to être ; jest skoniugowany jako taki:

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

nous étions
vous étiez
ils/elles étaient

Oto koniugacje dla -er, -reoraz -irczasowniki w nous form

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

Wszystko, co się nie kończy, nie musi być traktowane.

(Zauważ, że je łączy się z następną samogłoską, jeśli taka istnieje. Np je acheter -> j'achetais. , hDla naszych celów zostanie uznana za samogłoskę).

Przykładowe IO

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

Bonusy

  • -5 N bajtów dla wszystkich Ndodatkowych przetwarzanych czasowników nieregularnych.
  • -10%, jeśli wypiszesz również każdą koniugację czasownika w czasie niedokonanym.

To jest , więc wygrywa najkrótszy program w bajtach.


@ CᴏɴᴏʀO'Bʀɪᴇɴ Czy je habiterstaje się j' habitelub j'habite?
user41805,

@KritixiLithos Albo jest w porządku.
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ Czy dla premii -10% dane wejściowe nadal muszą mieć zaimek, czy może to tylko czasownik?
user41805,

Morternie istnieje, zakładam, że odnosisz się do tego, to dieco jest mourir, co dałoby to , co je mouraisfaktycznie jest poprawne.
Fatalize

@Fatalize, o którym mówiłem morter. Jest to technicznie niepoprawne, ponieważ nie jest słowem.
Conor O'Brien

Odpowiedzi:


2

Przetwarzanie, 342-10% (premia) = 307,8

Stworzyłem funkcję. Aby wywołać funkcję, dołącz zaimek jako pierwszy parametr, a czasownik jako drugi. Na przykład,a("je","habiter")

Pamiętaj, że mój program odmienia czasownik dla wszystkich zaimków, więc w ten sposób otrzymałem 10% premii.

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

Czytelna forma:

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

Wyjście (dla a("je", "habiter"))

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

Gratulacje!
Conor O'Brien,

1
Tak! Tak! Tak! Moje pierwsze zwycięstwo w golfie kodowym! Tak! Tak! [odchrząkuje] @ CᴏɴᴏʀO'Bʀɪᴇɴ Dziękuję.
user41805,

Nie wszystkie czasowniki z wiodącym h będą pomijać zaimek. Tylko ci z cichym h. Przykładami przeciwnymi są haïr (je hais) (i tak nieregularne), hacher, haleter, halter, hérisser i wiele innych. Tęsknisz także za czasownikami kończącymi się na -cer, gdzie „nous form” staje się -çons.
Urhixidur

4

Haskell, 366 362 352 bajtów

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

Możesz skompilować to w ghci i używać go w ten sposób, "je"#"choisir"aby uzyskać "choisissais".

Ten kod działa z niektórymi czasownikami nieregularnymi. Może koniugować croire ( je croyais , tu croyais …) lub prendre, a także wszystkie jego pochodne ( aprendre , comprendre itp.).

Nie mogłem znaleźć krótkiego sposobu na sprzężenie innych czasowników kończących się na -ire (takie jak lire , rire , dire , itp.) Lub w -dre (takie jak craindre , soudre itp.).


Czy nie powinno to być 352 bajtów z powodu êi é?
user41805,

2

Java , 389 385 383 382 352,7 443-10% (premia) = 398,7 bajtów

Zmniejszona liczba bajtów dzięki @PeterTaylor i @Fatalize
Pamiętaj, że mój program odmienia czasownik dla wszystkich zaimków, więc w ten sposób otrzymałem 10% premii.

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

Czytelna forma (wciąż dość niechlujna):

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

Wyjaśnienie:

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.



(Stara wersja) 393-10% = 352,7 bajtów

Należy również pamiętać, że mój stary program nie przestrzega nowej zasady jełączenia 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
Dlaczego masz jedno ki drugie l?
Peter Taylor

@PeterTaylor Gee, dzięki za wykrycie tego!
user41805,

Masz tutaj bezużyteczne miejsce:w[1].substring(0, w[1].length()-2)
Fatalizuj

@Fatalize Usunąłem bezużyteczne miejsce w mojej ostatniej edycji.
user41805,

1

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

Ogromne podziękowania dla @WW za uratowanie mnie 35 bajtów!

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

Wypróbuj online!


1
Możesz użyć a, splitaby nieco bardziej skompresować swoje listy. Również używanie ;może pomóc ci uniknąć niektórych wcięć.
Ad Hoc Garf Hunter

1
Nie potrzebujesz również parens wokół twoich warunkowych w ifs.
Ad Hoc Garf Hunter

1
Twoje zgłoszenie wydaje się wstawiać spację j', która nie pasuje do specyfikacji.
Ad Hoc Garf Hunter

1
@WW Dzięki! a w komentarzach do głównego postu OP mówi „j” ze spacją jest w porządku
JathOsh

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.