잘 지내?


20

Martin 은 도전에 대한 답변의 점수를 추적하는 데 사용할 수 있는 멋진 스 니펫 을 만들었습니다 . 훌륭하고 훌륭하지만 직접 추적 할 수 있다면 더 좋지 않을까요?

바이트 수 자체를이 질문에 대한 나머지 답변과 비교하고 "I 'm answer number n"을 반환하는 프로그램을 만듭니다.

규칙 :

  • 자신의 답변에있는 바이트 수는 코드에 하드 코딩 할 수 있습니다

  • 이 함수는 URL을 입력으로 사용하거나 하드 코딩 될 수 있습니다. url의 문자는 바이트 수에 포함되지 않으므로 url-shortener를 사용할 필요가 없습니다.

  • 답변에 대한 URL 주소는 하드 코딩 될 수 없습니다

  • 답변 점수는 헤더에서 찾을 수 있습니다 (Martin의 스 니펫과 같은 방식).

  • 답변 헤더는 올바른 형식이어야합니다 (아래 설명 참조).

  • 온라인으로 프로그램을 실행할 수있는 경우 온라인 컴파일러 (또는 답변에서 실행할 수있는 코드 스 니펫)에 대한 링크를 공유하십시오. 가능하지 않은 경우 함수를 호출하는 방법을 보여주고 자신의 컴파일러의 출력을 표시하십시오 (답을 게시 할 때. 물론 원치 않으면 업데이트 할 필요가 없습니다).

  • 실제로이 질문에 대한 다른 답변과 답변을 비교해야합니다. 단순히 I'm answer number 1.어떤 언어로 스크립트 를 작성하는 것은 합법적이지 않습니다.

  • 다른 답변이 자신의 바이트 수와 동일한 바이트 수를 갖는 경우, 자신이 최선인지 나쁜지를 선택할 수 있습니다.

헤더는 다음과 같은 형식이어야합니다.

# Language Name, N bytes

취소 선 등을 사용할 수 없으므로 코드 크기가 변경되면 머리글 아래에 굵은 글씨로 표시하거나 다른 방법으로 표시하십시오.

출력은이어야합니다 I'm answer number n.. 여기서 숫자 n는 위치입니다 (트레일 링 개행 / 공백은 양호). 따라서 가장 짧은 답변은 "나는 답변 번호 1입니다.", 두 번째는 "나는 답변 번호 2입니다."를 출력합니다. 기타

이것은 코드 골프이므로 바이트 단위의 최단 답변이 이길 것입니다.


다른 답변이 자신의 바이트 수와 동일한 바이트 수를 갖는 경우, 자신이 최선인지 나쁜지를 선택할 수 있습니다. 게시일은 타이 브레이커 여야하므로 같은 숫자라고 주장하는 두 가지 답변이 없습니다. 또는 묶인 경우 더 높은 곳을 위해 묶인 표준을 사용할 수 있습니다.
mbomb007

2
이것이 작동하는지 확실하지 않습니다. 대부분의 (좋은) 온라인 통역사는 다른 웹 페이지를 말리는 것을 허용하지 않지만, 도전에서는 코드가 온라인 통역사에서 실행되어야한다고 말합니다.
스파게티

채팅으로 이것에 대해 이야기합시다.
스파게티

URL 주위에 따옴표를 세어야합니까? 일부 답변은 현재 카운트에서 제외하고 다른 답변은 포함합니다.
hvd

답변:


2

펄, 107 바이트

use LWP;print"I'm answer number ",1+grep($_<107,LWP::UserAgent->new->get('http://codegolf.stackexchange.com/q/60204')->content=~/<h1>.+, (\d+)/g),'.';

약간 덜 골프 :

use LWP;
$agent = new LWP::UserAgent();
$response = $agent->get('http://codegolf.stackexchange.com/q/60204');
@answers = $response->content =~ m/<h1>.+, (\d+)/g;
print "I'm answer number ", 1+grep($_<107, @answers), '.';

샘플 사용법

$ perl my_rank.pl
I'm answer number 1.

7

파이썬 2, 145 바이트

from requests import*
print"I'm answer number %s."%(sorted([int(a["body"].split(",")[1].split()[0])for a in get('http://api.stackexchange.com/2.2/questions/60204/answers?pagesize=99&order=desc&sort=activity&site=codegolf&filter=!SWJ_BpAceOT6L*G2Qa').json()["items"]]).index(145)+1)

2015-10-10 17:30:00 UTC 출력 :

I'm answer number 1.

내가 추가해야 할 금액에 대해 의견을 말해야한다면 점수에 대한 URL을 세지 않았습니다. 자체 점수가 하드 코딩되어 있으며 이미 게시 된 것으로 가정합니다. 99 개 이상의 답변이 게시되면 중단됩니다.


6

AutoIt, 175 바이트

(URL의 경우 202 바이트-27)

#include<String.au3>
$0=_StringBetween
$1=1
For $2 In $0(BinaryToString(InetRead("http://q.codegolf.xyz/60204")),'<h1>',' b')
$1+=$0($2,', ','')[0]<175?1:0
Next
ConsoleWrite("I'm answer number "&$1&".")

2015-10-09 17:47:00 UTC의 출력 :

I'm answer number 1.

나는 심지어 Autolt에 대해 들어 본 적이 없지만 언어 이름에 쉼표가 있으면 작동하지 않는 것이 맞습니까? (그런 언어가 있는지 잘 모르겠 기 때문에
중요한지

@StewieGriffin 네, 그러나 쉼표가있는 언어는 ;-)도 기억하지 않습니다. 하나가 나타나면 변경하겠습니다.
mınxomaτ

@minxomat 이름 l대신에 이름이있는 것 같아서 I잘못 읽었습니다. 내가 깨달은 유일한 이유 는 세리프가있는 Wikipedia 기사 를 보는 것 입니다.
mbomb007

이 답변을 방해하기 위해 누군가가 쉼표로 언어를 발명하기를 기다리는 중 ...
Darrel Hoffman

@DarrelHoffman 글쎄, 쉼표 공백 이 있어야합니다. ^^
mınxomaτ

4

자바 스크립트 (ES7), 149 바이트

URL의 경우 283 바이트-134 나는 전에 HTTP 요청을 사용한 적이 없지만 여기에 간다 ...

x=z=>alert(`I'm answer number ${[for(y of z.items)y.body.match(/, (\d+)/)[1]].sort().indexOf("149")+1}.`);document.write('<script src="//api.stackexchange.com/2.2/questions/60204/answers?pagesize=100&order=desc&sort=votes&site=codegolf&filter=!--pn9sqW9y0T&callback=x">\x3C/script>')

Firefox 41에서 성공적으로 테스트되었습니다.

먼저 모든 응답의 헤더를 통해 바이트 수를 찾은 다음 바이트 수 243 149로 첫 번째 위치를 찾습니다. 현재 첫 번째 100 개의 답변 만 확인하도록 설정되어 있으며 누군가 100 미만인 경우 중단됩니다. 바이트,하지만 지금은 작동합니다. ;)

훨씬 짧은 기술에 대한 @GeorgeReith 에게 감사드립니다 . AJAX (243 바이트)를 사용하는 이전 버전 :

x=new XMLHttpRequest,x.onreadystatechange=_=>{if(x.readyState==4&&x.status==200)alert(`I'm answer number ${[for(y of JSON.parse(x.responseText).items)y.body.match(/, (\d+)/)[1]].sort((a,b)=>a-b).indexOf("243")+1}.`)},x.open("GET","//api.stackexchange.com/2.2/questions/60204/answers?pagesize=100&order=desc&sort=votes&site=codegolf&filter=!--pn9sqW9y0T",!0),x.send()

좋아 보인다 ... 비록 누군가가 또 다른 151 바이트 응답을
올리면

@GeorgeReith Nah,해서는 안됩니다. OP는 관계가 어느 쪽이든 깨질 수 있다고 말합니다.
ETHproductions

아 그는 편집했다. 여전히 게시 날짜를 기준으로 정렬하고 답변을 편집 한 소수의 사용자 대신 자신을 찾을 가능성을 높이기 위해 생성 날짜를 기준으로 정렬하는 것이 좋습니다.
George Reith

@GeorgeReith If other answers have the same number of bytes as your own, you can choose if you want to be best or worse of them.여전히 메인 포스트에 있습니다. 내가 뭔가 오해하고 있습니까?
ETHproductions

나는 편집 기록을 읽고 있었고 사과했다.
George Reith

4

PHP, 158 159 164 바이트

I'm answer number <?for(;$h[]=json_decode(fread(gzopen('http://api.stackexchange.com/2.2/questions/60204/answers?pagesize=99&order=desc&sort=votes&site=codegolf&filter=!--pn9sqW9y0T',r),1e4),1)[items][+$i++][body];);echo array_sum(preg_filter(~„ÑÕß×£›ÔÖ߆‹šŒÃЗÎÑÕ‚Œš,~ÛÎÃÎÊÇ,$h)),~Ñ;

'http://api.stackexchange.com/2.2/questions/60204/answers?pagesize=99&order=desc&sort=votes&site=codegolf&filter=!--pn9sqW9y0T'계산되지 않은 127 바이트

ungolfed 문자열이있는 형식화 된 버전 :

<?
for(;
    $h[]=json_decode(
        fread(
            gzopen(
                'http://api.stackexchange.com/2.2/questions/60204/answers?pagesize=99&order=desc&sort=votes&site=codegolf&filter=!--pn9sqW9y0T',r
            ), 1e4
        ), 1
    )[items][+$i++][body];
);
echo"I'm answer number ",
    array_sum(
        preg_filter('{.* (\d+) bytes</h1.*}se','$1<159', $h)
    ),
    ".";
  • JSON 응답을로드합니다 (@Blackhole 덕분에 응답 당 한 번만 실제로 5 바이트를 절약 함)
  • 응답 본문을 수집합니다 $h
  • 바이트 수가 <= 159이면 전체 텍스트를 "1"(true)로 바꾸고 그렇지 않으면 ""(false)로 바꿉니다.
  • 결과를 합산

¶Ø’ßž‘Œˆšß‘Š’šßPHP에서 문자 시퀀스 는 유효한 상수 이름이지만 상수가 없기 때문에 문자열 리터럴로 취급됩니다. ~그것들을 뒤집습니다 "I'm answer number "(각 따옴표에 대한 바이트 저장)

용법

php -derror_reporting=0 howareyou.php

나는 답변 번호 1입니다.


는 IS $a변수가 정말 필요? 왜 간단하게하지 $h[]=json_decode(…)[items][+$i++][body]않습니까? 그런데이 이상한 캐릭터는 무엇입니까?
Blackhole

좋은 지적. 이것은 각각의 답변에 대해 새로운 요청을 할 것이지만 누가 신경 쓰는가 :) 이상한 문자는 비트 반전 된 문자열입니다. 존재하지 않는 경우 문자열 리터럴로 사용되는 PHP의 유효한 상수 이름이므로 따옴표를 저장할 수 있습니다. 예를 들어 " "(3 바이트)를 (2 바이트) 로 줄일 수 있습니다
Fabian Schmengler

실제로이 답변에 대한 귀하의 설명을 찾았습니다 . 그것은 드문 방법이므로, 여기에 다시 설명하는 것이 좋습니다 :).
블랙홀

난 당신이를 건너 뛸 경우 당신이 더 많은 것을 할 수 있다고 생각 json_decode하고 단지 split':': 예 또는 뭔가 codepad.org/7rZg06by
프리모

좋은 생각이지만 소스 코드에 콜론이 많기 때문에 신뢰할 수 없을 수도 있습니다. 시작 PHP 태그 앞에 "답변 번호"를 입력하면 최소 2 바이트가 절약됩니다.
Fabian Schmengler

3

자바 스크립트 (ES6), 186 바이트

(URL의 경우 335-149 바이트)

a=d=>alert(`I'm answer number ${d.items.map(q=>(y=[q.body.match(/, (\d+)/)[1],(x=q.owner.user_id==11182)])&&x?z=y:y).sort().indexOf(z)+1}.`)
document.write(`<script src="https://api.stackexchange.com/questions/60204/answers?pagesize=100&order=desc&sort=activity&site=codegolf&filter=!)Q2B_A19OPkd2j8JforD00f5&callback=a">\x3C/script>`)


나는 당신이 그렇게 할 수있는 단서가 없었습니다! 내가 왜 \x3C대신 사용했는지 물어봐도 <될까요?
ETHproductions

@ETHproductions 브라우저는 즉시 닫는 스크립트 태그를 찾고 그렇지 않으면 스크립트를 실행하지 않기 때문에 포스트 삽입까지 스크립트 태그를 닫는 것을 지연시킵니다. 콜백과 함께 JSONP를 사용하며 지원 여부에 관계없이 API에 달려 있습니다. 솔직히 나는 그 이유를 완전히 이해하지 못하지만 그것은 합법적 인 문제입니다.
George Reith

1

어썸, 153 바이트

BEGIN{if(u){print"I\047m answer number "system("curl -s "u"|awk -f a")".";exit}FS="1>.*,|es<\/h"}NF==3{r+=($2+0)<153?1:0}END{exit(r<1?1:r)}

이것은 파일에 저장 a되고 다음과 같이 실행 되어야합니다 .

awk -v u=http://codegolf.stackexchange.com/questions/60204/how-are-you-doing -f a

http://codegolf.stackexchange.com/questions/60204/how-are-you-doing부트 스트랩 awk -v u=및 의 코드에 대해 68 바이트를 빼고 13을 코드에 추가 -f a합니다.

덜 골프, 이것은 더 짧을 수 있습니다 :

curl -s http://codegolf.stackexchange.com/questions/60204/how-are-you-doing | awk -F"1>.*,|es<\/h" 'NF==3{r+=(0+$2)<103?1:0}END{print"I\047m answer number "(r<1?1:0)"."}'

항상 유대를 선호합니다. 바이트 수는 각각 하드 코딩되어 있습니다.

골프 버전이 많을수록 스크립트는 자체를 호출하고 시스템을 통해 종료 값을 출력합니다. 각각의 경우에 하드 코딩 된 값 증분보다 카운트 수가 적 r으며,이 값 1이 선행 하는 경우 다시 조정 해야합니다.

이 공백 사이가 있다면 제대로 바이트를 찾기 위해 실패 bytes</h1>아마 다른 경우의 수는 내가 생각하지 않았습니다.

현재로서는 Sun Oct 11 05:17:51 UTC 2015다음을 제공합니다.

I'm answer number 3.

이것이 골프가 처음이기 때문에 내가 규칙, 허점, 수 등을 위반했는지 또는 어떤 개선을 할 수 있는지 알려주십시오.
n0741337

"나는 숫자입니다"대신 "답변 번호"를 인쇄해야한다고 생각합니다.
lirtosiast

@ThomasKwa Hah! 나는 그것이 사실 이기에는 너무 좋다는 것을 알았습니다. 감사합니다. 바이트를 다시 추가하려면 취소 선이 필요합니까?
n0741337

바이트를 깎을 때 취소 선이 필요하지 않은 것처럼 필요하지 않습니다.
lirtosiast

1

GNU Awk, 156 바이트

( n0741337Awk 솔루션에서 영감을 얻었습니다 .)

이것은 외부 명령을 실행하지 않고 모든 것을 스스로 수행합니다.

BEGIN{d="/inet/tcp/0/"h"/80"
print"GET "p" HTTP/1.1\nHost:"h"\n"|&d
while(d|&getline)n+=match($0,/1>.*, ([0-9]+)/,m)&&m[1]<156
print"I'm answer number",n+1}

별도의 값으로 호스트 이름과 경로를 예상합니다. 그들이 무료로 이용할 수 있다고 가정하면, 이것이 규칙을 어 기지 않기를 바랍니다.

샘플 실행 :

bash-4.3$ awk -v h=codegolf.stackexchange.com -v p=/questions/60204/how-are-you-doing -f number.awk 
I'm answer number 4
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.