메시지가 50 바이트로 표시 될지 여부를 예측합니다


41

아래에 설명되고 링크 된 목록에서 가져온 사이트 대화방의 메시지로 구성된 문자열이 입력 되면 해당 메시지가 50 바이트 이하로 표시되는지 여부를 예측하는 참 또는 거짓 값을 출력합니다.

진실 또는 허위 값을 사용할 수는 있지만 동일해야합니다 (즉, 하나는 진실과 하나는 거짓). 입력은 줄 바꿈이 제거 된 원시 HTML로 제공되며 ASCII가 아닌 유니 코드 문자를 포함 할 수 있습니다. UTF-8 이외의 다른 입력이 필요한 경우 답변으로 입력하십시오.

이 챌린지에 대한 성공적인 제출은 아래 링크 된 목록에서 가장 높은 비율의 채팅 메시지를 정확하게 예측하는 것입니다. 주어진 두 제출이 동일한 성공률을 갖는 경우 더 짧은 제출이 이길 것입니다.

전체 메시지 세트에서 코드를 실행하고 정확한 백분율을 계산하기위한 지침을 제공하십시오. 이상적으로는 긍정적 인 테스트 사례를 반복하고 코드가 올바른 코드 수를 출력 한 다음 부정적인 테스트 사례에서 동일한 코드를 생성하는 약간의 상용구 코드 (50 바이트로 계산되지 않음) 여야합니다. 그런 다음 전체 점수는을 통해 수동으로 계산할 수 있습니다 (correctPositive + correctNegative) / totalMessages.

귀하의 코드는 합리적으로 테스트 가능하므로 합리적인 최신 하드웨어의 전체 채팅 메시지 목록에 대해 5 분 이내에 완료해야합니다.

채팅 메시지의 전체 목록은 여기 에서 확인할 수 있으며 진지한 테스트 사례로 별표가 표시된 1000 개의 최신 메시지와 허위 테스트 사례로 별표가없는 1000 개의 최신 메시지로 구성됩니다. 요점에는 두 개의 파일이 있습니다. 별표가 표시되지 않은 메시지는 반쯤 아래로 스크롤하십시오.


4
채팅의 행동을 알면 다음의 Pyth로 충분하다고 생각합니다.O2
Arcturus

9
과거 별표 표시된 메시지, Regex, 11 바이트의 이력을 고려할 때 :Don'?t star
Downgoat

11
입력의 일부로 사용자에게도 제공하면 훨씬 쉽습니다.
Mama Fun Roll

3
어느 시점에서 나는 Regex, 2 바이트에 대답했을 것이다\^
PurkkaKoodari

14
다음 1,000 개 메시지에서이 메시지를 다시 실행하고 별표를 실제로 예측 한 메시지를 확인하십시오.
abligh

답변:


29

망막 , 50 바이트, 71.8 % 72.15 %

^.*([[CE;ಠ-ﭏ]|tar|ol|l.x|eo|a.u|pin|nu|o.f|"$)

@ MartinBüttner의 제안에서 정규식 골프를 시도했습니다. 별표 표시된 704 개의 메시지와 별표가없는 739 개의 메시지와 일치하지 않습니다.

^.*( ... )반드시 망막 기본적으로 일치의 수를 출력하기 때문에, 하나는 항상 0 또는 1 일치하는 항목이 있는지 확인하는 것입니다. 여러 줄 m`모드 앞에 붙인 다음 입력 파일에서 프로그램의 점수를 매길 수 있습니다.

Retina stars.retina < starred.txt

마찬가지로 unstarred.txt.


분석 / 설명

프로그램을 사용하여 위의 스 니펫을 생성 한 다음 수동으로 원하는 스 니펫을 선택했습니다. 위의 스 니펫이 작동하는 이유에 대한 직관이 있습니다.

  • C: 일치 PPCG,@CᴏɴᴏʀO'Bʀɪᴇɴ
  • E: 일치 @ETHproductions,@El'endiaStarman
  • ;: 테스트 케이스이 일치 HTML을, 때문에 &lt;&gt;
  • ಠ-ﭏ: ಠ_ಠ와 가장 두드러지게 유니 코드 문자 범위와 일치@Doorknob冰
  • tar: 변형 일치 star, @El'endiaStarman(다시)을, 또한 gravatar새로운 글 봇에 의해 게시 OneBox를에 나타나는
  • ol: rel="nofollow"많은 링크와 onebox에있는 일치
  • l.x: 일치 @AlexA.,@trichoplax
  • eo: 주로 일치 people하지만@Geobits
  • a.u: 주로 일치 graduation, status, featureabuse
  • pin:로 ping끝나는 단어와 일치 ping합니다. 또한 pineapple과적 합의 예로서 에 대한 토론의 일부 게시물과 일치합니다 .
  • nu: 단어의 혼합 된 백과 일치하며 가장 일반적인 단어는 number
  • o.f: 일치 golf,conf(irm|use)
  • "$: 큰 따옴표를 마지막 문자로 일치시킵니다. 예 : @phase He means "Jenga."

이것은 [특별한 것이 아닙니다. 방금 문자를 남겼으므로 한 번 더 사용하기 위해 사용할 수 있다고 생각했습니다.


(테스트 코드는 아직 느리게 실행되는 것 같아서 아직 게시하지 않았으며 이유를 알고 싶습니다. 너무 늦었습니다.)
Sp3000

1
각 테스트 케이스마다 Retina를 한 번 실행하는 데 시간이 오래 걸립니다. 멀티 라인 모드는 청구 된 점수를 거의 즉시보고합니다.
Dennis

@ 데니스 감사합니다, 나는 내가 할 수있는 것을 완전히 잊어 버렸습니다.
Sp3000

3
LOL, 이제 이름은 별 자석이야?
ETHproductions

18

자바 스크립트 ES6, 50 바이트, 71.10 %

별표 670 개와 별표 표시되지 않은 752를 올바르게 식별합니다.

x=>/ .[DERv]|tar|a.u|l.x|<i|eo|ol|[C;ಠ]/.test(x)

이제 70 %의 장벽을 넘어 Retina를 제외한 모든 사람을 때렸습니다!

true메시지에 다음 내용이 포함되어 있으면 반환 합니다.

  • 두 번째 문자가있는 단어 D, E, R, 또는 v;
  • tar(보통 star);
  • a그리고 u사이에 하나의 문자가 있습니다.
  • l그리고 x사이에 하나의 문자가 있습니다 (보통 alex).
  • 이탤릭체 텍스트;
  • eo또는 ol;
  • a C, 세미콜론 또는 .

다음은 다른 사람들을 제거 할 가치가없는 것으로 보이는 몇 가지 더 유익한 경기입니다.

  • nf
  • nu
  • yp
  • n.m

이것은 Retina 답변에 점점 더 가까워지고 있지만 대부분의 개선 사항을 스스로 발견했습니다.

별표 텍스트 , 별표가없는 텍스트 중 하나의 콘솔에서 테스트하십시오.

var r=document.body.textContent.replace(/\n<br/g,"<br").split("\n").slice(0,-1);
var s=r.filter(function(x){return/ .[DERv]|tar|a.u|l.x|<i|eo|ol|[C;ಠ]/.test(x)}).length;
console.log("Total:",r.length,"Matched:",s,"Not matched:",r.length-s);

다른 버전이 있습니다. /a/.test기술적으로는 기능이지만 기준을 충족하지 않습니다 .

/ .[ERv]|a.u|l.x|<i|eo|yp|ol|nf|tar|[C;ÿ-ff]/.test

이 점수는 71.90 % (697 개 별표, 741 개 별표 없음)입니다.


나는 목록에 대해 몇 가지 분석을 수행하여 가장 별표가 있고 별표가 가장 적은 게시물과 일치하는 정규식 그룹을 확인했습니다. 분석은 이 요지 에서 찾을 수 있습니다 . 지금까지 확인 aa하고 a.a일치합니다. a.u28 점을 기록하며 50 위로 떨어졌지만 가장 효율적인 형식입니다 ...


1000 개의 메시지 만 있습니다 ...?
코너 오브라이언

2
@ CᴏɴᴏʀO'Bʀɪᴇɴ 일부는 스 니펫에서 설명되지 않은 멀티 라인입니다. 이것은 수정되었습니다.
ETHproductions

왜 아무도 사용하지 /regexp/.test()않습니까? 나는 더 많은 경우에 짜낼 수 있다고 생각합니다.
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ 2012 년

8
오늘 나는 내 이름을 말함으로써 채팅 스타를 얻을 수 있다는 것을 배웠다.
Alex A.

@ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ 고마워요, 내가 어떻게 생각하지 않았는지
몰라요

15

Pyth, 50 바이트, 67.9 %

0000000: 21 40 6a 43 22 03 91 5d d3 c3 84 d5 5c df 46 69 b5 9d  !@jC"..]....\.Fi..
0000012: 42 9a 75 fa 74 71 d9 c1 79 1d e7 5d fc 25 24 63 f8 bd  B.u.tq..y..].%$c..
0000024: 1d 53 45 14 d7 d3 31 66 5f e8 22 32 43 7a              .SE...1f_."2Cz

322 버킷 중 하나의 입력을 해시하고 해당 버킷에 따라 부울을 선택합니다.

채점

$ xxd -c 18 -g 1 startest.pyth
0000000: 72 53 6d 21 40 6a 43 22 03 91 5d d3 c3 84 d5 5c df 46  rSm!@jC"..]....\.F
0000012: 69 b5 9d 42 9a 75 fa 74 71 d9 c1 79 1d e7 5d fc 25 24  i..B.u.tq..y..].%$
0000024: 63 f8 bd 1d 53 45 14 d7 d3 31 66 5f e8 22 32 43 64 2e  c...SE...1f_."2Cd.
0000036: 7a 38                                                  z8
$ echo $LANG
en_US
$ pyth/pyth.py startest.pyth < starred.txt
[[345, False], [655, True]]
$ pyth/pyth.py startest.pyth < unstarred.txt
[[703, False], [297, True]]

14

CJam, 45 바이트, 65.55 %

l_c"\"#&'(-.19<CEFHIJLMOPSTXY[_qಠ"e=\1b8672>|

첫 번째 문자가 특정 목록에 있는지 또는 모든 코드 포인트의 합이 8,672보다 큰지 확인합니다.

채점

$ cat startest.cjam
1e3{l_c"\"#&'(-.19<CEFHIJLMOPSTXY[_qಠ"e=\1b8672>|}*
$ java -jar cjam-0.6.5.jar startest.cjam < starred.txt | fold -1 | sort | uniq -c
    308 0
    692 1
$ java -jar cjam-0.6.5.jar startest.cjam < unstarred.txt | fold -1 | sort | uniq -c
    619 0
    381 1

fold실제 답변과 함께 명령 에 대해 가르쳐 +1 .
Doorknob

6

Matlab / Octave, 17 바이트 60.15 %

490 개의 메시지를 별표로, 713 개의 메시지를 별표로 올바르게 분류

현재 버전 :

길이 만 확인하면됩니다.

f=@(w)numel(w)>58

구 버전:

다른 언어로 번역 될 수 있습니다. 메시지에 별표 가 포함되어 있는지 여부 만 확인합니다 .score: 59/911/52.5%

f=@(w)nnz(strfind(lower(w),'star'))>0 %

이 코드를 사용한 테스트 케이스 결과 :

slCharacterEncoding('UTF-8');

fid = fopen('codegolf_starred_messages_starred.txt');
line = fgetl(fid);
starred = 0;
while ischar(line)
    if f(line);
        starred = starred +1;
    end

    disp(line)
    line = fgetl(fid);
end
fclose(fid);


fid = fopen('codegolf_starred_messages_unstarred.txt');
line = fgetl(fid);
unstarred = 0;
while ischar(line)
    if ~f(line);
        unstarred = unstarred +1;
    end

    disp(line)
    line = fgetl(fid);
end
fclose(fid);

disp(['  correctly classified as *ed: ',num2str(starred)])
disp(['correctly classified as un*ed: ',num2str(unstarred)])
disp(['                  total score: ',num2str((starred+unstarred)/20),'\%'])

3

CJam, 32 바이트, 전체 점수 0.5605 (56 %).

별표 표시된 428 개 메시지와 별표 표시되지 않은 메시지 693 개를 올바르게 식별합니다. 총점은 (360+730)/2000=0.545입니다.

l_el"sta"/,1>\,)4%!|

이길 것으로 기대하지 않고, 그것이 어떻게 수행되는지 볼 것이다. 위는 단일 메시지에 대한 코드이며 별표 표시된 메시지의 양을 반환하는이 수정 된 버전을 여러 번 사용하여 실행합니다.

1000{l_el"star"/,1>\,)6%!|}fA]:+

STDIN을 두 파일의 원시 텍스트로 사용하여 테스트하십시오. 메시지에 "star"가 포함되어 있거나이면 true를 반환합니다 length + 1 mod 4 = 0.


2
그렇다면 ... 4 개가 메시지 길이보다 1을 더 많이 나누면 별표가 표시 될 가능성이 있습니까?
코너 오브라이언

2
@ CᴏɴᴏʀO'Bʀɪᴇɴ 네, 그러나 그것은 높은 점수를 제공합니다
GamrCorps

3

자바 스크립트 ES6, 0.615 = 61.5 %

342는 별표로 올바르게 식별되었으며, 888은 별표로 표시되지 않았습니다. (342+888)/2000 = 0.615

x=>-~x.search(/(bo|le)x|sta|ಠ|ツ/i)

이것 또는 이것에 대해 이와 같이 테스트 하십시오 :

r=document.body.innerHTML.replace(/<\/*pre>/g,"").split`
`.filter(x=>-~x.search`(bo|le)x|sta|ಠ|ツ`).length

나는 당신을 얻을 수 있습니다, 나의 예식!


1
나는 지금 당신을 얻었다;)
ETHproductions

@ETHproductions GG. 좀 더 일반적인 패턴을 찾아 보겠습니다.
코너 오브라이언

3

레티 나, 46 바이트, 68.55

^.*([zj_C;&¡-ff]|sta|san|soc|bo|eo|xk|l.x|<.>)

679 스타 : 692 언 스타

더 많은 정규 표현식을 얻기 위해 Retina로 전환했습니다 ... 아직 완료되지 않았습니다.


네, 잊어 버렸습니다. 내가 고칠 게
Mama Fun Roll

1

C # 6.0 (.NET Framework 4.6), 50 바이트, 63,60 %

bool s(string i)=>Regex.IsMatch(i,"ol|tar|l.x|ಠ");

테스트 목적으로 사용한 프로그램 :

void Main()
{
    var starred = @"C:\starred.txt";
    var unstarred = @"C:\unstarred.txt";

    var linesStarred = File.ReadAllLines(starred);
    var linesUnstarred = File.ReadAllLines(unstarred);

    var cls = linesStarred.Count();
    var clsc = 0;

    foreach (var line in linesStarred)
    {
        if ( s(line) ) clsc++;
    }

    var clu = linesUnstarred.Count();
    var cluc = 0;

    foreach (var line in linesUnstarred)
    {
        if (!s(line)) cluc++;
    }

    $"Starred {clsc}/{cls} correct ({(clsc/cls*100):0.00}%)".Dump();
    $"Unstarred {cluc}/{clu} correct ({(cluc /clu*100):0.00}%)".Dump();
    $"{(((clsc+cluc)/(decimal)(cls+clu))*100):0.00}".Dump();
}

bool s(string i)=>Regex.IsMatch(i,"ol|tar|l.x|ಠ");
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.