Làm thế nào bạn đang làm gì?


20

Martin đã tạo ra một đoạn trích hay có thể được sử dụng để theo dõi điểm số cho câu trả lời cho các thử thách. Điều đó thật tuyệt vời, nhưng sẽ tốt hơn nếu bạn có thể tự mình theo dõi nó?

Tạo một chương trình so sánh số byte trong chính nó với phần còn lại của câu trả lời cho câu hỏi này và trả về "Tôi trả lời số n".

Quy tắc:

  • Số byte trong câu trả lời của riêng bạn có thể được mã hóa cứng trong mã

  • Hàm này có thể lấy url làm đầu vào hoặc có thể được mã hóa cứng. Các ký tự cho url sẽ không được tính vào số byte, do đó không cần thiết phải sử dụng công cụ rút ngắn url.

  • địa chỉ url để trả lời không thể được mã hóa cứng

  • Điểm cho các câu trả lời có thể được tìm thấy từ tiêu đề, (giống như đoạn trích của Martin).

  • Tiêu đề câu trả lời phải có định dạng đúng (mô tả bên dưới).

  • Nếu có thể chạy chương trình trực tuyến, vui lòng chia sẻ liên kết đến trình biên dịch trực tuyến (hoặc đoạn mã có thể được thực thi từ câu trả lời). Nếu không thể, vui lòng chỉ ra cách gọi hàm và hiển thị đầu ra từ trình biên dịch của riêng bạn (tại thời điểm bạn đăng câu trả lời. Bạn không cần cập nhật nó trừ khi bạn muốn tất nhiên).

  • Bạn phải thực sự so sánh câu trả lời với các câu trả lời khác cho câu hỏi này. Đơn giản chỉ cần viết một kịch bản I'm answer number 1.trong một số ngôn ngữ là không hợp pháp.

  • Nếu các câu trả lời khác có cùng số byte như của bạn, bạn có thể chọn nếu bạn muốn tốt nhất hoặc tệ hơn trong số chúng.

Tiêu đề phải được định dạng:

# Language Name, N bytes

Vượt qua vv không thể được sử dụng, vì vậy nếu kích thước mã được thay đổi, hãy hiển thị nó bằng văn bản in đậm bên dưới tiêu đề hoặc chỉ ra nó theo một cách khác.

Đầu ra phải là I'm answer number n., trong đó số nlà vị trí (theo dõi dòng mới / dấu cách là OK). Vì vậy, câu trả lời ngắn nhất sẽ xuất ra: "Tôi là câu trả lời số 1.", câu trả lời thứ hai sẽ là "Tôi trả lời số 2." v.v.

Đây là mã golf, vì vậy câu trả lời ngắn nhất tính bằng byte sẽ giành chiến thắng.


Nếu các câu trả lời khác có cùng số byte như của bạn, bạn có thể chọn nếu bạn muốn tốt nhất hoặc tệ hơn trong số chúng. Có lẽ ngày đăng bài nên là một điểm ngắt, vì vậy bạn không có hai câu trả lời tự xưng là cùng một số. Hoặc, bạn có thể sử dụng tiêu chuẩn mà nếu chúng được gắn, cả hai đều được gắn cho vị trí cao hơn.
mbomb007

2
Tôi không chắc chắn điều này sẽ làm việc. Hầu hết các thông dịch viên trực tuyến (tốt) không cho phép cuộn các trang web khác, nhưng trong thử thách, nó nói rằng mã phải chạy trên một trình thông dịch trực tuyến.
một spaghetto

Hãy nói về điều này trong trò chuyện.
một spaghetto

Có bất kỳ trích dẫn xung quanh URL cần phải được tính? Một số câu trả lời hiện loại trừ chúng khỏi số đếm, số khác bao gồm chúng.
hvd

Câu trả lời:


2

Perl, 107 byte

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

Hơi ít chơi golf:

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), '.';

Sử dụng mẫu

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

7

Python 2, 145 byte

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)

Đầu ra từ 2015-10-10 17:30:00 UTC:

I'm answer number 1.

Tôi đã không đếm bất kỳ URL nào cho điểm của mình, nếu tôi vui lòng nhận xét về số tiền tôi nên thêm vào đó. Có điểm số riêng được mã hóa trong đó, giả sử rằng nó đã được đăng. Sẽ phá vỡ nếu có hơn 99 câu trả lời được đăng.


6

Tự động, 175 byte

(202 byte - 27 cho URL)

#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&".")

Đầu ra từ 2015-10-09 17:47:00 UTC:

I'm answer number 1.

Tôi thậm chí chưa bao giờ nghe về Autolt, nhưng có đúng là nó sẽ không hoạt động nếu tên ngôn ngữ có dấu phẩy trong đó? (Tôi không biết có ngôn ngữ nào như vậy không, vì vậy tôi không chắc nó có vấn đề gì không)
Stewie Griffin

@StewieGriffin Có, nhưng tôi cũng không nhớ bất kỳ ngôn ngữ nào có dấu phẩy trong đó ;-). Nếu ai đó xuất hiện tôi sẽ thay đổi nó.
mınxomaτ

@minxomat Cái tên có vẻ như lthay vì an I, vì vậy tôi đã đọc sai nó. Lý do duy nhất tôi nhận ra đó là bằng cách xem bài viết trên Wikipedia , có một serif.
mbomb007

Chỉ chờ ai đó phát minh ra một ngôn ngữ có dấu phẩy trong đó chỉ để phá hoại câu trả lời này ...
Darrel Hoffman

@DarrelHoffman Chà, nó sẽ phải có dấu phẩy khoảng
trắng

4

JavaScript (ES7), 149 byte

283 byte - 134 cho URL. Tôi chưa bao giờ sử dụng các yêu cầu HTTP trước đây, nhưng ở đây ...

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>')

Đã thử nghiệm thành công trong Firefox 41.

Đầu tiên, nó nhìn qua các tiêu đề của tất cả các câu trả lời để tìm số đếm byte của chúng, sau đó nó tìm vị trí đầu tiên với số đếm byte 243 149. Hiện tại nó được thiết lập để chỉ kiểm tra 100 câu trả lời đầu tiên và sẽ phá vỡ nếu ai đó có dưới 100 byte, nhưng nó hoạt động cho bây giờ. ;)

Nhờ vào @GeorgeReith vì kỹ thuật ngắn hơn nhiều. Phiên bản cũ sử dụng AJAX (243 byte):

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()

Nhìn tốt ... mặc dù có thể sẽ bị hỏng nếu ai đó đăng câu trả lời 151 byte khác
George Reith

@GeorgeReith Nah, không nên. OP nói rằng mối quan hệ có thể bị phá vỡ theo bất kỳ cách nào, và điều này sẽ chỉ đặt nó lên phía trước của mối quan hệ khác.
Sản phẩm ETH

Ah anh chỉnh sửa mà ra. Vẫn có thể tốt hơn để sắp xếp theo ngày tạo thay vì làm cho nhiều khả năng nó tìm thấy bạn thay vì một trong số ít người đã đăng trước đó và chỉnh sửa câu trả lời của họ.
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.Điều đó vẫn còn trong bài viết chính; Có phải tôi đang hiểu nhầm điều gì không?
Sản xuất ETH

Không có lời xin lỗi tôi đã đọc lịch sử chỉnh sửa và bị nhầm lẫn.
George Reith

4

PHP, 158 159 164 byte

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)),~Ñ;

127 byte từ 'http://api.stackexchange.com/2.2/questions/60204/answers?pagesize=99&order=desc&sort=votes&site=codegolf&filter=!--pn9sqW9y0T' không được tính

Phiên bản được định dạng với các chuỗi không được chỉnh sửa:

<?
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)
    ),
    ".";
  • Tải phản hồi JSON (thực tế một lần cho mỗi câu trả lời để tiết kiệm 5 byte, nhờ @Blackhole)
  • Thu thập các cơ quan trả lời trong $h
  • thay thế toàn bộ văn bản bằng "1" (đúng) nếu số byte là <= 159 hoặc "" (sai) nếu không
  • tổng hợp kết quả

Các chuỗi ký tự như ¶Ø’ßž‘Œˆšß‘Š’šßlà các tên hằng hợp lệ trong PHP, nhưng vì các hằng số không tồn tại được coi là chuỗi ký tự. ~đảo ngược chúng, cái này thành"I'm answer number " (lưu một byte cho mỗi dấu ngoặc kép)

Sử dụng

php -derror_reporting=0 howareyou.php

Tôi trả lời số 1.


$abiến thực sự cần thiết? Tại sao bạn không đơn giản làm $h[]=json_decode(…)[items][+$i++][body]? Nhân tiện, những nhân vật kỳ lạ này là gì?
Hố đen

Điểm tốt. Điều này sẽ đưa ra một yêu cầu mới cho mỗi câu trả lời nhưng ai quan tâm :) Các ký tự lạ là các chuỗi đảo ngược theo bit. Chúng là các tên hằng hợp lệ trong PHP được sử dụng làm chuỗi ký tự nếu chúng không tồn tại, vì vậy tôi có thể lưu các dấu ngoặc kép. Ví dụ: " "(3 byte) có thể giảm xuống còn (2 byte)
Fabian Schmengler

Thật vậy, tôi đã tìm thấy lời giải thích của bạn về câu trả lời này . Vì đó là một phương pháp không bình thường, tôi nghĩ có thể nên giải thích lại ở đây trong bài viết của bạn :).
Hố đen

Tôi nghĩ rằng bạn có thể làm tốt hơn rất nhiều nếu bạn bỏ qua json_decodevà chỉ splittrên ':'hoặc một cái gì đó, ví dụ như: codepad.org/7rZg06by
primo

Ý tưởng tốt nhưng tôi sợ nó có thể không đáng tin cậy vì sẽ có rất nhiều dấu hai chấm trong mã nguồn. Đặt "Tôi là số câu trả lời" trước khi mở thẻ PHP sẽ tiết kiệm ít nhất hai byte, cảm ơn vì điều đó!
Fabian Schmengler

3

Javascript (ES6), 186 byte

(335 - 149 byte cho URL)

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>`)


Tôi không có manh mối bạn có thể làm theo cách đó! Tôi có thể hỏi tại sao bạn sử dụng \x3Cthay vì <?
Sản phẩm ETH

@ETHproductions Vì trình duyệt tìm thẻ đóng tập lệnh ngay lập tức và sẽ không thực thi tập lệnh nếu không, điều này sẽ trì hoãn việc đóng thẻ tập lệnh cho đến khi chèn bài. Nó sử dụng JSONP với một cuộc gọi lại và tùy thuộc vào API cho dù nó hỗ trợ nó nhưng may mắn là stackexchange không. Thành thật tôi không hiểu lý do cho nó nhưng đó là một vấn đề hợp pháp.
George Reith

1

Awk, 153 byte

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)}

Điều này nên được lưu vào một tập tin avà chạy như sau:

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

Tôi đang trừ 68 byte cho http://codegolf.stackexchange.com/questions/60204/how-are-you-doingvà thêm 13 vào mã cho bootstrapping awk -v u=-f a.

Ít chơi gôn hơn, điều này thậm chí có thể ngắn hơn:

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)"."}'

Nó luôn thích bản thân trong các mối quan hệ. Số lượng byte được mã hóa cứng trong mỗi.

Phiên bản nhiều gôn hơn có kịch bản tự gọi và xuất giá trị thoát qua hệ thống. Trong mỗi trường hợp, chỉ tính thấp hơn mức tăng giá trị được mã hóa cứng r, sau đó phải điều chỉnh lại 1nếu nó dẫn đầu.

Điều này sẽ thất bại trong việc tìm đúng byte nếu có khoảng trắng giữa bytes</h1>và có lẽ một số trường hợp khác mà tôi đã không được xem xét.

Như Sun Oct 11 05:17:51 UTC 2015, điều này mang lại:

I'm answer number 3.

Vì đây là lần đầu tiên tôi chơi golf, xin vui lòng cho tôi biết nếu tôi đã vi phạm bất kỳ quy tắc, sơ hở, số đếm nào, v.v. hoặc những cải tiến nào tôi có thể thực hiện.
n0741337

Tôi nghĩ bạn cần in "Tôi là số câu trả lời" thay vì "Tôi là số".
lirtosiast

@ThomasKwa Hah! Tôi biết đó là quá tốt là đúng. Cảm ơn và đã sửa. Việc thêm byte trở lại có yêu cầu đình công không?
n0741337

Bạn không cần một cái, giống như bạn không cần một cú đánh khi bạn đánh gôn.
lirtosiast

1

GNU Awk, 156 byte

(Lấy cảm hứng từ n0741337 's giải pháp AWK .)

Cái này tự làm tất cả, không cần chạy lệnh bên ngoài.

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}

Yêu cầu tên máy chủ và đường dẫn là các giá trị riêng biệt. Cho rằng chúng có sẵn miễn phí, hy vọng điều này không phá vỡ các quy tắc.

Chạy mẫu:

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.