Kusurlar dans mon français


13

L'imparfait'te bir fiil çekimi yapmak için aşağıdaki adımları gerçekleştirmeniz gerekir:

  1. Kelimenin "kök" ünü bulun; bu, -onskelimenin nous-konjuge formundan çıkartılarak elde edilir . Örneğin, vivre olan akıl vivons ; çıkarılması -onsile ilgili vivons verimleri viv-.
  2. Sapı alın ve konuya göre uygun bir son ekleyin. İşte sonlar:

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

Amaç Bir fiil ve özne verildiğinde, söz konusu fiilin özne ile ilgili kusurlu formunu çıktılar. Giriş formatı dilinize uygun herhangi bir formatta olabilir. Gönderiminiz bir program, snippet veya işlev olabilir. (Fiilin gerçek bir fiil olması gerekmediğini unutmayın.)

Fiilin düzenli bir fiil olduğunu varsayabilirsiniz, yani kaçınma gibi öğeler -irdüzensiz bir fiil olarak ele alınmaz. Düzensiz olarak ölçmeniz gereken tek fiil être ; şu şekilde konjuge edilir:

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

nous étions
vous étiez
ils/elles étaient

İşte için çekimleri vardır -er, -reve -irnous formlarda fiiller

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

Böyle bitmeyen hiçbir şeyin ele alınması gerekmez.

(Not bu je sonraki sesli harfle birleştirir, bir. Örneğin varsa, je acheter -> j'achetais. hBizim amacımız bir sesli harf olarak kabul edilecektir.)

Örnek ES'ler

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

Bonuslar

  • Ele Nalınan tüm ekstra düzensiz fiiller için -5N bayt .
  • -10% eğer ayrıca kusurlu gergin fiilin çıktı her konjugasyon.

Bu bir , bu yüzden bayttaki en kısa program kazanıyor.


CᴏɴᴏʀO'Bʀɪᴇɴ Does @ je habiterhaline j' habiteveya j'habite?
user41805

@KritixiLithos İkisi de iyi.
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ% -10 bonus için, girişin zamir sahibi olması gerekiyor mu, yoksa sadece fiil olabilir mi?
user41805

Morteryoksa, sana kastediyoruz varsayalım to dieki mourirdoğuracak olan, je mouraisaslında doğru olan.
16:18 de ölümcül

@Fatalize'den bahsediyordum morter. Teknik olarak yanlış çünkü bir kelime değil.
Conor O'Brien

Yanıtlar:


2

İşleniyor,% 342-10 (bonus) = 307.8

Bir fonksiyon yarattım. İşlevi çağırmak için, zamiri birinci parametre ve fiili ikinci parametre olarak ekleyin. Örneğin,a("je","habiter")

Programımın tüm zamirler için fiil çektiğini lütfen unutmayın, bu yüzden% 10 bonus aldım.

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

Okunabilir form:

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

Çıktı (için a("je", "habiter"))

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

Tebrikler!
Conor O'Brien

1
Evet! Evet! Evet! Kod golfü için ilk zaferim! Evet! Evet! [boğazı temizler] @ CᴏɴᴏʀO'Bʀɪᴇɴ Teşekkür ederim.
user41805

Başında h olan tüm fiiller zamiri eleyemez. Sadece sessiz h olanlar. Karşı örnekler haïr (je hais) (yine de düzensiz), hacher, haleter, yular, hérisser ve daha fazlasıdır. Ayrıca, "nous form" un -çons olduğu -cer ile biten fiilleri de kaçırırsınız.
Urhixidur

4

Haskell, 366 362 352 bayt

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

Sen GHCi bu derlemek ve böylece gibi kullanabilirsiniz "je"#"choisir"olsun "choisissais".

Bu kod bazı düzensiz fiillerle çalışır. Croire ( je croyais , tu croyais …) veya prendre ile tüm türevlerini ( apprendre , comprendre vb.) Konjuge edebilir .

-İre ( lire , rire , dire , vb.) Veya -dre ( craindre , soudre , vb.) İle biten diğer fiilleri konjuge etmek için kısa bir yol bulamadım .


Bunun yüzünden 352 bayt olması gerekmiyor êve é?
user41805

2

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

@PeterTaylor ve @Fatalize sayesinde bayt sayısı azaldı
Lütfen programımın tüm zamirler için fiil çektiğini unutmayın, bu yüzden% 10 bonus aldım.

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

Okunabilir form (hala oldukça dağınık):

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

Açıklama:

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.



(Eski Sürüm) 393-10% = 352.7 bayt

Ayrıca eski programımın jebirleştirme konusundaki yeni kurala uymadığını da unutmayın 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
Neden ikisine birden sahipsin kve l?
Peter Taylor

@PeterTaylor Gee, bunu tespit ettiğiniz için teşekkürler!
user41805

Burada işe yaramaz bir w[1].substring(0, w[1].length()-2)
yeriniz

@Fatalize Son düzenlememdeki yararsız alanı kaldırdım.
user41805

1

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

Beni 35 bayt kurtardığı için @WW'ye çok teşekkürler!

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

Çevrimiçi deneyin!


1
splitListelerinizi biraz daha sıkıştırmak için a tuşunu kullanabilirsiniz . Ayrıca kullanmak ;, girintilerden bazılarından kaçınmanıza yardımcı olabilir.
Ad Hoc Garf Hunter

1
Ayrıca ifs koşullu çevresinde parens gerekmez .
Ad Hoc Garf Hunter

1
Gönderiniz daha sonra bir boşluk bırakıyor gibi görünüyor ve j'bu özellik ile eşleşmiyor.
Ad Hoc Garf Hunter

1
@WW Teşekkürler! ve ana
yazının

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.