Несовершенство Dans Mon Français


13

Для спряжения глагола в l'imparfait необходимо выполнить следующие шаги:

  1. Найдите «ствол» слова; это достигается путем исключения -onsиз сопряженной формы слова nous. Например, Vivre является поиз vivons ; удаление -onsиз урожая вивоновviv- .
  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 23.10.15

@KritixiLithos Либо в порядке.
Конор О'Брайен,

@ CᴏɴᴏʀO'Bʀɪᴇɴ Для бонуса -10%, входное слово все еще должно иметь местоимение, или это может быть просто глагол?
user41805

Morterне существует, я предполагаю, что вы имеете в виду, to dieчто есть mourir, что приведет к тому, je mouraisчто на самом деле правильно.
Роковая

@Fatalize я имел в виду morter. Это технически неверно, потому что это не слово.
Конор О'Брайен

Ответы:


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

Поздравляем!
Конор О'Брайен

1
Да! Да! Да! Моя первая победа в код-гольфе! Да! Да! [прочищает горло] @ C'O'Bʀɪᴇɴ Спасибо.
user41805 25.10.15

Не все глаголы с ведущей буквой h исключают местоимение. Только те, у кого тихий час. Контрпримеры - это haïr (je hais) (в любом случае нерегулярный), hacher, haleter, halter, hérisser и многие другие. Вы также пропускаете глаголы, оканчивающиеся на -cer, где "nous форма" становится -çons.
Urhixidur

4

Хаскелл, 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 , comprendre и т. Д.).

Я не смог найти короткий способ спряжения других глаголов, оканчивающихся на -ire (например, lire , rire , dire и т. Д.) Или на -dre (например, craindre , soudre и т. Д.).


Не должно ли быть 352 байта из-за êи é?
user41805

2

Java , 389 385 383 382 352,7 443-10% (бонус) = 398,7 байта

Количество байтов уменьшилось благодаря @PeterTaylor и @Fatalize.
Обратите внимание, что моя программа спрягает глагол для всех местоимений, поэтому я получил бонус в 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?
Питер Тейлор

@PeterTaylor Ну и дела, спасибо, что заметили это!
user41805

У вас есть бесполезное место здесь:w[1].substring(0, w[1].length()-2)
Fatalize

@Fatalize Я удалил ненужное место в моем последнем редактировании.
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
Вы можете использовать, splitчтобы сжать ваши списки немного больше. Также использование ;может помочь вам избежать некоторых отступов.
Пост Рок Гарф Хантер

1
Вы также не нуждаетесь в скобках вокруг ваших условных обозначений в ifs.
Пост Рок Гарф Хантер

1
Ваша заявка, кажется, ставит пробел после j', который, кажется, не соответствует спецификации.
Пост Рок Гарф Хантер

1
@WW Спасибо! и в комментариях к основному посту ОП говорит, что «j» с пробелом в порядке
JathOsh

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.