결점 dans mon français


13

l' imparfait 에서 동사를 활용하려면 다음 단계를 수행해야합니다.

  1. 단어의 "줄기"를 찾으십시오. 이것은 -ons단어와 결합 된 형태의 단어 를 생략함으로써 달성됩니다 . 예를 들어, vivrenous 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우리의 목적 모음 간주됩니다.)

예제 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

보너스

  • 모든 N불규칙 동사 처리에 대한 -5N 바이트 .
  • 10 % 만약 당신이 또한 불완전한 시제 동사의 출력마다 활용.

이것은 이므로 바이트 단위의 가장 짧은 프로그램이 승리합니다.


CᴏɴᴏʀO'Bʀɪᴇɴ합니까 @ je habiter이 될 j' habite이나 j'habite?
user41805

@KritixiLithos 어느 쪽이든 괜찮습니다.
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ -10 % 보너스의 경우, 입력에 여전히 대명사가 있어야합니까, 아니면 동사 일 수 있습니까?
user41805

Morter존재하지 않는, 나는 당신이 언급하는 가정 to die이다 mourir얻을 것이다, je mourais실제로 올바른이다.
Fatalize

@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

축하합니다!
Conor O'Brien

1
예! 예! 예! 코드 골프에서의 첫 승리! 예! 예! [목구멍 청소] @ CᴏɴᴏʀO'Bʀɪᴇɴ 감사합니다.
user41805

h를 사용하는 모든 동사가 대명사를 제거하지는 않습니다. 침묵하는 사람 h. 반대의 예는 haïr (je hais) (어쨌든 불규칙), hacher, haleter, halter, hérisser 등입니다. 또한 "nous form"이 -çons가되는 -cer로 끝나는 동사를 놓치게됩니다.
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"있습니다.

이 코드는 불규칙 동사와 함께 작동합니다. 그것은 크로 아르 ( je croyais , tu croyais …) 또는 모든 파생물 ( apprendre , comprendre 등) 뿐만 아니라 prendre 와 결합 할 수 있습니다 .

나는 -ire ( lire , rire , dire 등) 또는 -dre ( craindre , soudre 등) 로 끝나는 다른 동사를 켤 수있는 짧은 방법을 찾을 수 없습니다 .


êé?로 인해 352 바이트가 아니어야합니다 .
user41805

2

자바 , 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 Gee, 그 점을 찾아 주셔서 감사합니다!
user41805

당신은 여기에 쓸모없는 공간이 있습니다 :w[1].substring(0, w[1].length()-2)
Fatalize

@Fatalize 최신 편집에서 쓸모없는 공간을 제거했습니다.
user41805

1

파이썬 3 , 258-10 % = 232.2 223-10 % = 200.7

35 바이트를 절약 해 준 @WW에게 큰 감사를드립니다!

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
a split를 사용하여 목록을 조금 더 압축 할 수 있습니다 . 또한 사용 ;하면 들여 쓰기를 피할 수 있습니다.
Ad Hoc Garf Hunter 5

1
또한 ifs 에서 조건부 주위에 괄호가 필요하지 않습니다 .
Ad Hoc Garf Hunter 5

1
귀하의 제출은 뒤에 공백을 넣은 j'것 같습니다. 사양과 일치하지 않는 것 같습니다.
Ad Hoc Garf Hunter 5

1
@WW 감사합니다! 주요 게시물에 대한 의견에서 OP는 공간이있는 "j"라고 말합니다
JathOsh

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.