태그 보관물: classification

classification

언어를 맞춰 최고 정확도 (위의 데이터 세트에서 가장

소개

이 사이트는 코드 스 니펫의 거대한 데이터 세트를 빠르게 구축하고 있으므로 무언가를 해보자!

다음은 데이터 파일 입니다. 이 사이트에서 가져온 113 개 언어에 대한 9,066 개의 고유 한 언어 + 스 니펫 쌍이 포함되어 있습니다. 형식은 탭으로 구분되며 (언어 -TAB- 스 니펫) 스 니펫의 모든 줄 바꿈이로 바뀌고 <LF>모든 탭이 4 개의 공백으로 바뀝니다. 각 언어마다 5 개 이상의 스 니펫이 있습니다.

[업데이트 : 이전에 놓친 일부 Python & RegExp 버전을 병합하기 위해 데이터 파일을 약간 변경했습니다. 위의 링크가 업데이트되었습니다.]

도전

코드 스 니펫을 작성하고 작성된 언어를 출력하는 프로그램 또는 함수를 작성하십시오 (자세한 내용은 아래 참조). 소스의 전체 크기 + 필요한 데이터는 300 바이트 이하 여야하며, 자체 소스 코드가 제공되면 프로그램 에서 올바른 언어를 출력 해야합니다 . 최고 정확도 (위의 데이터 세트에서 가장 정확한 답변)가 이깁니다.

규칙

  • 소스 코드, 리소스 및 필요한 컴파일 / 런타임 플래그의 총 크기는 300 바이트를 초과하지 않아야합니다.
  • 귀하의 답변은 위의 데이터 세트에 대해 테스트됩니다. “스 니펫”값 중 하나가 입력으로 제공되고 출력이 데이터 세트에 따라 “올바른”출력과 비교됩니다. 이는 데이터 세트의 모든 항목에 대해 반복되며 정답의 최종 수는 점수입니다.
  • 입력 인코딩을 선택할 수 있습니다-UTF-8이라고 가정하므로 다른 인코딩이 필요한 경우 답변에 지정하십시오.
  • <LF>바꿈을 위해 대체 를 사용할 필요는 없습니다 . 항목이 개행을 리터럴 개행 (문자 10)으로 수신 할 것으로 예상되는 경우 답변에 지정하십시오.
  • 입력 스 니펫이 작성되었다고 생각되는 언어를 입력해야합니다. 많은 언어 문자열을 압축 할 필요가 없도록 맵핑을 허용합니다 ( “Java”에 대해 3을 출력하려면 괜찮습니다). 답변에서 매핑을 확인하십시오.
  • 각 언어에 대해 하나의 출력 맵핑 만 가질 수 있습니다 (즉, 3이 “Java”를 의미하는 경우 “Java”를 의미하는 4도 가질 수 없음).
  • 자신의 소스 코드를 제공하는 경우, 프로그램이 있어야 정답 (반드시 출력가 작성된 언어)를 생산하고 있습니다.
  • 데이터 세트에서 모든 언어를 지원할 필요는 없으며 원하는 경우 추가 언어를 지원할 수 있습니다 (예 : 항목이 데이터 세트의 언어 중 하나에없는 경우).
  • 프로그램은 결정 론적이어야합니다 (같은 입력을 두 번 제공하면 동일한 출력을 생성해야 함).

타이 브레이킹

  • 동점은 한 항목이 이길 때까지 데이터 집합을 줄여 결정됩니다. 가장 많이 사용되는 언어의 스 니펫을 모두 제거하면 데이터 세트가 줄어 듭니다 (예 : 희귀 언어의 경우 정확도가 저하됨). 예를 들어, 전체 데이터 세트에서 A와 B의 점수가 70 %이면 모든 Python 스 니펫이 제거됩니다. A와 B의 점수가 모두 60 %이면 CJam이 제거됩니다. A가 현재 50 %이지만 B가 55 %이면 B가 승자입니다.
  • 100 % 정확도가 달성되면 동일한 언어에 대해 더 많은 샘플을 포함하는 두 번째 (블라인드) 데이터 집합을 사용하여 연결이 결정됩니다.

실시 예 1

파이썬 스크립트 :

print("python")

이 스크립트는 자체 소스 코드가 제공되면 “python”을 성공적으로 생성하므로 유효합니다. 데이터 세트에서 점수는 1008/9066 = 11.1 %입니다.

실시 예 2

자바 스크립트 기능 :

function f(s){return /function/.test(s)?1:2}

매핑 1 → javascript, 2 → python으로. 다시 한 번 성공적으로 자체 소스에 대해 1 ( “자바 스크립트”)을 생성하고 데이터 세트에서 1092/9066 = 12.0 %를 얻습니다.


데이터는 어디에서 왔습니까?

이 사이트의 [code-golf] 과제에서 샘플을 가져 오기 위해 SEDE 쿼리 를 만들었습니다 . 결과적으로 10,000 개의 답변에서 해킹 된 파이썬 스크립트를 사용하여 각각의 코드 및 언어 이름을 찾은 다음 5 개 미만의 예제로 모든 언어를 필터링했습니다. 데이터가 100 % 깨끗하지는 않지만 (코드 조각이 아닌 스 니펫이 있음을 알고 있습니다) 충분해야합니다.


올해 초이 도전에서 영감을 얻은 것 : 누가 말했습니까? 2016 년 대통령 선거

또한 언어 란 무엇입니까?



답변

C, 297 바이트, 43.194351 % 일치 (v2)

이것은 내가 경쟁 한 최초의 비 골프 도전입니다. 놀랍게도 골프 언어는 실제로 언어별로 약 60 % 일치하는 정확도로 분리하기가 다소 쉽습니다.

이 코드에는 UTF-8 문자열로 입력해야합니다. 결과는 제공된 데이터 세트의 버전 2를 기반으로합니다. 이 코드는 <LF>실제 줄 바꿈으로 바꿀 필요가 없습니다 .

#define S(x)!!strstr(p,#x)
f(char*p){return S(#d)?:S(voi)?0:S(mai)|S(utc)?:S(mbd)|S(impor)|S(input)|S(def)|S(rang)?2:S(log)|S(fun)|S(=>)|S(lert)?3:S(<?)?4:S(echo)|S(sed)?5:S(+++)?6:S(<-)?7:S($_)|S(say)?8:S(\342)|S(\303)?9:S(->)|S(map)?10:S(@#)|S(]])|S([#)?11:S(V)|S(Q)?12:S(Z)|S(Y)?13:S(.)?14:15;}

매핑 테이블 :

 0. java
 1. c
 2. python
 3. javascript
 4. php
 5. bash
 6. brainf*
 7. haskell
 8. perl
 9. apl
10. ruby
11. wolfram
12. pyth
13. matl
14. golfscript
15. cjam

비율은 내 적중 / 총계 계산을 기반으로합니다 : 총 3916 적중 / 9066.


답변

파이썬 3 271 278 바이트 25.049636 % 일치 (V2, 확인되지 않은)

def f(c):
 try:compile(c,'','exec');return 5
 except:
  for j in range(9):
   if any(l in c for l in [['echo'],['require'],['Main','string'],['document','alert','var ','function'],['String'],['def ','lambda','print '],['main','int','char'],['+++','<<<'],[]][j]):break
 return j

지도:

0 = bash
1 = ruby
2 = c#
3 = javascript
4 = java
5 = python
6 = c
7 = brainf*
8 = cjam

훨씬 더 나은 골프 (아마도 여전히 좋지는 않음)가 마침내 25 %의 장벽을 무너 뜨 렸습니다! 입력이 <LF>개행 ( \n)으로 대체되었습니다


답변