100 자 이내에서 프랑스어로 남성과 여성 명사 구별


21

100 자 이내로 아주 작은 프로그램을 작성해야합니다. 프로그램은 남성과 여성 프랑스어 명사를 구별해야합니다. 결과 un는 남성적이고 une여성 적인 경우에 출력되어야합니다 . 종종 따를 수있는 특정 통계 규칙이 있습니다 (예 : "e"로 끝나는 경우 남성보다 여성적 일 가능성이 높습니다).

입력 :

프랑스어 단어; 악센트가있는 소문자를 포함하여 소문자와 대시로 구성 될 수 있습니다.

입력 예 : ami

출력 :

un단어가 남성적이고 une단어가 여성이라면.

출력 예 : un

모든 단어를 올바르게 얻을 필요는 없습니다. 당신의 목표는 가능한 한 정확해야합니다.

점수 : 답 100 자 이내 여야합니다 . 같은 문 print이나 console.log또는 alert않습니다 하지 총 바이트의 한 부분으로 계산합니다. 이 작업을 수행하는 함수 또는 메소드를 작성할 수도 있습니다.이 경우 f=x=>함수 선언의 일부인 처음 몇 바이트 (예 :) 가 총계에 포함되지 않습니다. 총점은 오답의 수입니다. 타이는 코드 크기에 따라 구분됩니다.

테스트 할 명사 :

un ami
un café
un chapeau
un concert
un crayon
un garage
un garçon
un lit
un livre
un mari
un musée
un oncle
un ordinateur
un pantalon
un piano
un pique-nique
un portable
un père
un sandwich
un saxophone
un stade
un stylo
un théâtre
un téléphone
un voisin
une botte
une boum
une chaise
une chaussette
une chemise
une clarinette
une copine
une femme
une fille
une glace
une heure
une lampe
une maison
une montagne
une personne
une piscine
une pizza
une radio
une raquette
une salade
une souris
une sœur
une table
une télé
une voiture

6
나는 일을 어렵게 만들기 위해 목록에 squelette 를 추가했을 것입니다.
200_success

답변:


23

CJam, 0, 32 29 바이트

이 코드는 몇 개의 홀수 문자 (일부는 인쇄 할 수 없음)를 사용하지만 모두 확장 된 ASCII 범위 내에 있습니다. 다시 한 번, 각 문자를 단일 바이트로 계산합니다.

"un"'el2b"zPB:  ":i+:%2/*

인쇄 할 수없는 문자로 인해 Stack Exchange가 일부를 삼킬 것이라고 확신하므로 문자 카운터에서 코드를 복사 할 수 있습니다 ( 이 문자 는 UTF-8 인코딩으로 바이트를 표시합니다.이 도전에는 차선책입니다. Firefox에서는 작동하지 않지만 Chrome에서는 작동합니다).

여기에서 테스트하십시오.

채팅에서 더 많은 토론을 한 후에, 우리는 정규식 골프가 우리에게 더 이상 도움이되지 않을 것이라고 생각했습니다. 그래서 이전의 (농담) 제안에 따라 특정 기능을 가진 단어의 문자 코드를 조작하기 시작했습니다. 따라서 한 그룹의 모든 단어가 확인하기 쉬운 속성을 가진 숫자를 얻을 수 있습니다. 그리고 우리는 예상보다 운이 좋았습니다! 다음은 코드가 단어에 수행하는 작업입니다.

  • 단어의 문자를 암시 적으로 코드 포인트로 변환합니다.
  • 기본 2의 숫자로 해석하십시오 (예, 숫자는 0 또는 1보다 훨씬 크지 만 CJam은이를 처리 할 수 ​​있습니다).
  • 반복 결과 모듈 ... 다음 번호를 수행하십시오 [133, 122, 80, 66, 58, 26, 20, 14, 9, 4]. 이 일련의 숫자는 문자열의 코드 포인트로 인코딩됩니다 (이상하고 인쇄 할 수없는 문자가 나오는 곳).
  • 마술처럼 모든 25 개 남성 명사는 양보 0하거나 1, 모든 25 개 여성 명사 산출 2또는 3이 절차. 따라서 이것을 2(정수 나누기)로 나누면 남성 명사와 여성 명사에 대해 0을 얻습니다.

반올림하기 "un"위해 스택을 밀고 단일을 푸시합니다 e. 그런 다음 STDIN에서 입력 단어를 읽고 위의 계산을 수행하고 마지막으로 e결과를 곱합니다 .

나는 이전에 어떤 목록에도 모듈로를 접어 본 적이 없으며 다시는 결코하지 않을 것 같은 느낌이 든다 ...

아이디어를 던지고 제수 체인 검색을 도와 준 xnor와 Sp3000에게 많은 감사를드립니다.


짧을뿐만 아니라 2 분 더 빠릅니다. 공포!
Dennis

@sudo;) ... 나는 당신을 이길 수있는 드문 시간 중 하나입니다 ... 나는 당신의 설명에 매우 관심이 있습니다 :)
Martin Ender

11
잠깐, 혼란스러워 마법이 존재한다면 왜 바보 같은 프로그래밍 도전 사이트에서 그것을 낭비하고 세계 평화 나 무언가를 해결하지 않습니까? (아니오, 그러나 심각하게 woah . +1)
Doorknob

22

루비, 0 개 올바르지 않음, 63 56 53 52 51 50 바이트

모든 문자는 확장 ASCII , 특히 ISO 8859-1 이므로 각 문자를 단일 바이트로 계산합니다.

f=->s{s[/la|tt|i.e|[égdzœu]..$|^b|^f|so|^ta/]?'une':'un'}

테스트 세트가 너무 짧은 것 같습니다. Peter Norvig의 메타 정규식 골퍼로 정규식을 생성했습니다 .

위와 같은 함수를 호출 할 수 있습니다 f["ami"]. 이 테스트 하네스를 사용하여 모든 테스트 사례를 확인할 수 있습니다.

puts "ami café chapeau concert crayon garage garçon lit livre mari musée 
      oncle ordinateur pantalon piano pique-nique portable père sandwich 
      saxophone stade stylo théâtre téléphone voisin botte boum chaise 
      chaussette chemise clarinette copine femme fille glace heure lampe 
      maison montagne personne piscine pizza radio raquette salade souris 
      sœur table télé voiture".split.map{|s|f[s]+" "+s}

코딩 그라운드에서 테스트하십시오.

편집 : Peter Norvig의 두 번째 스크립트를 사용하여 실제로 1 바이트 더 길지만 수동 으로 2 바이트 단축 할 수 있는 다른 정규식을 찾았습니다 .

편집 : Sp3000 은 최근 정규식 도전에 대해 쓴 정규식 골퍼를 설정하고 사용할 36 35 34 바이트 정규식을 발견했습니다 . 고마워요!


2
table의 부분 문자열 이기 때문에 메타 정규식 골프의 악몽을 여기 portable
재현

13

CJam, 0 오류 ( 36 32 29 28 바이트)

{"un"oEb72^"+ÕåWïº"583b2b='e*o}:F;

이것은 명명 된 함수이므로 내부 코드 만 계산합니다. 또한 o인쇄 문이므로 바이트 수에 영향을 미치지 않습니다.

에서 테스트 사례를 사용해보십시오 CJam 인터프리터 .

작동 원리

"un"o       " Print 'un'.                                                  ";
Eb          " Consider the input a base 14 number.                        ";
72^         " XOR the result with 72.                                     ";
"+ÕåWïº"    " Push that string.                                           ";
583b2b      " Convert from base 583 to base 2.                            ";
=           " Retrieve the corresponding element (0 or 1) from the array. ";
'e*o        " Print 'e' that many times.                                  ";

해시 함수와 테이블 조회 만하면됩니다.

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