텍스트의 철자 오류를 세십시오. 코드에서 철자 오류 수를 최소화


28

두 가지 입력을받는 프로그램이나 함수를 작성하십시오.

  1. 문자 메시지
  2. Github 파일에 나타나는 영어 사전 (약 60000 단어 포함)

메시지의 철자 오류 수를 출력합니다 (정의 및 테스트 사례는 아래 참조).

프로그램에서 찾을 수있는 미리 정의 된 파일, 코드의 하드 코딩 된 데이터 또는 기타 합리적인 방법으로 사전을 함수의 매개 변수로받을 수 있습니다.


코드 자체는 문자 메시지처럼 보이고 철자 오류가 최소화됩니다. 따라서 코드 자체를 입력으로 공급하여 코드 의 점수 를 계산합니다 .

승자는 가장 낮은 점수를받은 코드입니다 (최소 가능한 점수는 0). 점수가 같은 답변이 여러 개인 경우 코드 크기 (문자)로 우승자가 결정됩니다. 두 개의 답변이 여전히 연결되어 있으면 승자가 더 빠른 답변입니다.


필요한 경우 입력 메시지가 일반 방식으로 인코딩 된 줄 바꿈 (1 바이트 "10"또는 2 바이트 "13 10")이 있고 ASCII가 아닌 ASCII (바이트 32 ... 126)로 가정 할 수 있습니다. 그러나 코드에 비 ASCII 문자가있는 경우 비 ASCII 입력도 지원해야하므로 자체 점수를 계산할 수 있습니다.

문자는 다음 클래스로 세분됩니다.

  • 문자 a ... z 및 A ... Z
  • 공백 (여기서는 공백 문자 또는 개행 문자로 정의 됨)
  • 구두 . , ; : ! ?
    • 문장 끝 . ! ?
  • 쓰레기 (나머지)

단어 (즉, 둘 선행되지도 문자가 뒤에) 최대입니다 문자의 순서로 정의된다.

문장은 문장 끝없는 문자의 최대 순서로 정의된다.

맞춤법 규칙을 위반 하는 문자는 맞춤법 오류입니다 .

  1. 문자는 사전 단어에 속해야합니다. 즉, 사전에 나타나지 않는 길이가 N 인 각 단어는 N 철자 오류로 계산됩니다.
  2. 첫 공백 문자를 무시하고 문장의 첫 문자는 대문자 여야합니다.
  3. 이전 규칙에서 지정한 것을 제외한 모든 글자는 소문자 여야합니다
  4. 문장 부호 문자는 문자 나 쓰레기 후에 만 ​​허용됩니다.
  5. 개행 문자는 문장 끝 문자 뒤에 만 허용됩니다.
  6. 메시지의 시작과 공백 문자 뒤에 공백 문자를 사용할 수 없습니다
  7. 가비지가 없어야합니다 (즉, 각 가비지 문자 수가 철자 오류 임)

또한 마지막 문장은 비어 있거나 정확히 하나의 줄 바꿈 문자로 구성되어야합니다 (즉, 메시지는 문장 끝 문자와 선택적인 줄 바꿈으로 끝나야합니다-규칙 8이라고합시다).

테스트 사례 (각 문자 아래에 위배되는 규칙 =>이 있으며 필수 답변 이후 는 다음과 같습니다) :

Here is my 1st test case!!
           711           4                => 4

main(){puts("Hello World!");}
2   777    883     3     77 78            => 12

  This message starts with two spaces
66                                   8    => 3

What ? No apostrophe's??
     4              71 4                  => 4

  Extra   whitespace   is   BAD!
66      661111111111 66   66333           => 21

Several
lines?
Must be used only to separate sentences.
                                          => 1 (first linebreak is en error: rule 5)

"Come here," he said.
73         7                              => 3 (sentence starts with '"', not 'C')

2
나는 허점을 많이 기대하고 있었지만 당신은 그것들을 모두 덮고있는 것처럼 보였습니다. 나에게서 +1
Nathan Merrill

4
나는 SPL 이 승자 라고 생각 합니다.
Gurupad Mamadapur

2
Gertrude 가 더 좋습니다. 명령은 임의의 문장이며, 단어 수와 평균 단어 길이 만 중요합니다.
Rainer P.

나는 이것을 보았을 때 "애플 스크립트"를 생각했다. 그러나 Mac이 없습니다.
PurkkaKoodari

1
@PeterTaylor 규칙이 너무 복잡 해지는 것을 원하지 않습니다. 테스트 케이스는 괜찮습니다. 내 게시물에 추가했습니다.
아나 톨릭

답변:


6

펄 6 , 134 철자 오류

my token punctuation {<[.,;:!?]>}
my \text = slurp; my \mistakes=[]; for split /\.|\!|\?/, text { for .trim.match: :g, /<:letter>+/ -> \word { (append mistakes, .comb when none words slurp pi given lc word) or (push mistakes, $_ if ((.from or word.from) xor m/<[a..z]>/) for word.match: :g, /./) }}
append mistakes, comb / <after \s | <punctuation>> <punctuation> | <!before <punctuation> | <:letter> | \s> . | <!after \.|\!|\?> \n | [<before ^> | <after \s>] \s /, text; say mistakes.Numeric

가독성을위한 추가 공백 :

my token punctuation {<[.,;:!?]>}
my \text = slurp;
my \mistakes=[];
for split /\.|\!|\?/, text {
    for .trim.match: :g, /<:letter>+/ -> \word {
        (append mistakes, .comb when none words slurp pi given lc word)
        or
        (push mistakes, $_ if ((.from or word.from) xor m/<[a..z]>/) for word.match: :g, /./)
    }
}
append mistakes, comb /
  <after \s | <punctuation>> <punctuation>
  | <!before <punctuation> | <:letter> | \s> .
  | <!after \.|\!|\?> \n
  | [<before ^> | <after \s>] \s
/, text;
say mistakes.Numeric

노트:

  • 3.14159265358979현재 작업 디렉토리에서 호출 된 파일의 사전을 예상합니다 .
  • 영감을 얻은 유일한 부분은 선
    append mistakes, .comb when none words slurp pi given lc word이고
    나머지는 꽤 나쁩니다. 그러나 아마도 더 나은 솔루션의 기준으로 적어도 역할을 할 수 있습니다 ... :)

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