เป็นอย่างไรบ้าง?


20

มาร์ตินได้สร้างตัวอย่างที่ดีที่สามารถใช้ในการติดตามคะแนนสำหรับคำตอบของความท้าทาย มันยอดเยี่ยมและทั้งหมด แต่มันจะดีกว่าไหมถ้าคุณสามารถติดตามมันได้ด้วยตัวเอง?

สร้างโปรแกรมที่เปรียบเทียบจำนวนไบต์ด้วยตัวเองกับคำตอบที่เหลือสำหรับคำถามนี้และส่งคืน "ฉันเป็นคำตอบหมายเลข n"

กฎ:

  • จำนวนไบต์ในคำตอบของคุณสามารถ hardcoded ในรหัส

  • ฟังก์ชั่นสามารถใช้ url เป็นอินพุตหรือฮาร์ดโค้ดได้ ตัวอักษรสำหรับ url จะไม่นับรวมกับจำนวนไบต์ดังนั้นจึงไม่จำเป็นต้องใช้ตัวย่อ URL

  • ที่อยู่ URL สำหรับคำตอบไม่สามารถฮาร์ดโค้ดได้

  • คะแนนสำหรับคำตอบสามารถพบได้จากส่วนหัว (เช่นเดียวกับตัวอย่างของ Martin

  • ส่วนหัวคำตอบจะต้องมีรูปแบบที่ถูกต้อง (อธิบายไว้ด้านล่าง)

  • หากเป็นไปได้ที่จะเรียกใช้โปรแกรมออนไลน์โปรดแชร์ลิงก์ไปยังคอมไพเลอร์ออนไลน์ (หรือโค้ดขนาดสั้นที่สามารถเรียกใช้จากคำตอบได้) ถ้ามันเป็นไปไม่ได้โปรดแสดงวิธีการเรียกใช้ฟังก์ชั่นและแสดงผลลัพธ์จากคอมไพเลอร์ของคุณเอง (ในเวลาที่คุณโพสต์คำตอบคุณไม่จำเป็นต้องอัปเดตเว้นแต่คุณต้องการแน่นอน)

  • คุณต้องเปรียบเทียบคำตอบกับคำตอบอื่น ๆ กับคำถามนี้ การเขียนสคริปต์I'm answer number 1.ในบางภาษานั้นไม่ถูกกฎหมาย

  • หากคำตอบอื่น ๆ มีจำนวนไบต์เท่ากับคุณคุณสามารถเลือกได้ว่าต้องการดีที่สุดหรือแย่กว่านั้น

จะต้องจัดรูปแบบส่วนหัว:

# Language Name, N bytes

ไม่สามารถใช้ Strike-through และอื่น ๆ ได้ดังนั้นหากมีการเปลี่ยนแปลงขนาดรหัสให้แสดงเป็นข้อความตัวหนาด้านล่างส่วนหัวหรือระบุด้วยวิธีอื่น

เอาต์พุตจะต้องเป็นI'm answer number n.โดยที่หมายเลขnคือตำแหน่ง (ขึ้นบรรทัดใหม่ / ช่องว่างตกลง) ดังนั้นคำตอบที่สั้นที่สุดจะออก: "ฉันตอบหมายเลข 1" ส่วนที่สองจะเป็น "ฉันตอบหมายเลข 2" เป็นต้น

นี่คือรหัสกอล์ฟดังนั้นคำตอบที่สั้นที่สุดเป็นไบต์จะเป็นผู้ชนะ


หากคำตอบอื่น ๆ มีจำนวนไบต์เท่ากับคุณคุณสามารถเลือกได้ว่าต้องการดีที่สุดหรือแย่กว่านั้น บางทีวันที่โพสต์ควรจะเป็นไทเบรกเกอร์ดังนั้นคุณไม่มีคำตอบสองข้อที่อ้างว่าเป็นหมายเลขเดียวกัน หรือคุณสามารถใช้มาตรฐานที่ว่าหากพวกเขาถูกผูกไว้พวกเขาทั้งคู่จะถูกผูกไว้กับที่สูงกว่า
— mbomb007

2
ฉันไม่แน่ใจว่าสิ่งนี้จะได้ผล ล่ามออนไลน์ (ดี) ส่วนใหญ่ไม่อนุญาตให้ม้วนหน้าเว็บอื่น ๆ แต่ในความท้าทายมันบอกว่ารหัสต้องทำงานบนล่ามออนไลน์
— สปาเก็ตตี้

พูดคุยเกี่ยวกับเรื่องนี้ในการแชท
— ปาเก็ตตี้

ต้องนับเครื่องหมายคำพูดรอบ URL ใด ๆ หรือไม่ คำตอบบางคำตอบไม่รวมอยู่ในการนับ
— hvd

คำตอบ:


2

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

golfed น้อยกว่าเล็กน้อย:

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

Python 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 ไบต์

(202 ไบต์ - 27 สำหรับ 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&".")

ผลผลิตจาก 2015-10-09 17:47:00 UTC:

I'm answer number 1.

ฉันไม่เคยได้ยิน Autolt มาก่อน แต่มันถูกต้องหรือไม่หากชื่อภาษามีเครื่องหมายจุลภาคอยู่ (ฉันไม่รู้ว่ามีภาษาดังกล่าวหรือไม่ดังนั้นฉันไม่แน่ใจว่ามันสำคัญหรือไม่)
— Stewie Griffin

@StewieGriffin ใช่ แต่ฉันไม่จำภาษาใด ๆ ที่มีเครื่องหมายจุลภาคอยู่ในนั้น ;-) หากมีใครเข้ามาฉันจะเปลี่ยนมัน
— mınxomaτ

@minxomat ชื่อดูเหมือนว่าจะมีการlแทนที่Iดังนั้นฉันผิดมัน เหตุผลเดียวที่ฉันรู้นั่นคือโดยการดูบทความ Wikipediaซึ่งมี serif
— mbomb007

เพียงแค่รอให้ใครบางคนคิดค้นภาษาที่มีเครื่องหมายจุลภาคอยู่ในนั้นเพียงเพื่อก่อวินาศกรรมคำตอบนี้ ...
— Darrel Hoffman

@DollHoffman มันจะต้องมีเครื่องหมายจุลภาคและช่องว่างติดต่อกันในชื่อของมัน ^^
— mınxomaτ

4

JavaScript (ES7), 149 ไบต์

283 ไบต์ - 134 สำหรับ URL ฉันไม่เคยใช้คำขอ 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 ไบต์
— จอร์จ Reith

@ 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 ไบต์

เวอร์ชันที่จัดรูปแบบด้วยสตริงที่ไม่ถูกปรับแต่ง:

<?
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 (หนึ่งครั้งต่อคำตอบจริงเพื่อประหยัด 5 ไบต์ขอบคุณ @Blackhole)
  • รวบรวมร่างคำตอบใน $h
  • แทนที่ข้อความทั้งหมดด้วย "1" (จริง) ถ้านับไบต์เป็น <= 159 หรือ "" (เท็จ) มิฉะนั้น
  • สรุปผลที่ได้

ลำดับอักขระเช่น¶Ø’ßž‘Œˆšß‘Š’šßนั้นเป็นชื่อค่าคงที่ที่ถูกต้องใน PHP แต่เนื่องจากค่าคงที่ไม่มีอยู่จะถือว่าเป็นสตริงตัวอักษร ~สลับกลับค่านี้เป็น"I'm answer number "(บันทึกไบต์สำหรับเครื่องหมายคำพูดแต่ละอัน)

การใช้

php -derror_reporting=0 howareyou.php

ฉันตอบหมายเลข 1


เป็น$aตัวแปรที่จำเป็นจริงๆ? ทำไมคุณไม่เพียงแค่ทำ$h[]=json_decode(…)[items][+$i++][body]? ตัวละครแปลก ๆ นี้คืออะไร?
— Blackhole

จุดดี. สิ่งนี้จะทำให้คำขอใหม่สำหรับแต่ละคำตอบ แต่ใครจะแคร์ :) ตัวละครแปลก ๆ นั้นเป็นสตริงกลับด้าน เป็นชื่อค่าคงที่ที่ถูกต้องใน PHP ที่ใช้เป็นตัวอักษรสตริงหากไม่มีอยู่ดังนั้นฉันสามารถบันทึกเครื่องหมายคำพูดได้ ตัวอย่างเช่น" "(3 ไบต์) สามารถลดเป็น~ß(2 ไบต์)
— Fabian Schmengler

แน่นอนฉันพบคำอธิบายของคุณสำหรับคำตอบนี้แล้ว เนื่องจากเป็นวิธีที่ผิดปกติฉันคิดว่าเป็นความคิดที่ดีที่จะอธิบายอีกครั้งในโพสต์ของคุณ :)
— Blackhole

ฉันคิดว่าคุณสามารถทำมากดีกว่าถ้าคุณข้ามjson_decodeและเพียงแค่splitบน':'หรือบางสิ่งบางอย่างเช่น: codepad.org/7rZg06by
— พรีโม่

ความคิดที่ดี แต่ฉันกลัวว่ามันอาจจะไม่น่าเชื่อถือเพราะจะมีโคลอนจำนวนมากในซอร์สโค้ด การใส่ "ฉันตอบหมายเลข" ก่อนแท็กเปิด PHP จะบันทึกอย่างน้อยสองไบต์ขอบคุณสำหรับสิ่งนั้น!
— Fabian Schmengler

3

Javascript (ES6), 186 ไบต์

(335 - 149 ไบต์สำหรับ 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>`)


ฉันไม่รู้เลยว่าคุณจะทำแบบนั้นได้! ฉันขอถามได้ไหมว่าทำไมคุณถึงใช้\x3Cแทน<?
— ETHproductions

@ETHproductions เนื่องจากเบราว์เซอร์ค้นหาแท็กปิดสคริปต์ทันทีและจะไม่เรียกใช้สคริปต์มิฉะนั้นจะเป็นการปิดแท็กสคริปต์จนกว่าจะมีการแทรกโพสต์ มันใช้ JSONP กับการเรียกกลับและขึ้นอยู่กับ API ว่ารองรับหรือไม่ สุจริตฉันไม่เข้าใจเหตุผลอย่างเต็มที่ แต่เป็นปัญหาที่ถูกกฎหมาย
— George Reith

1

Awk, 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

ฉันลบ 68 ไบต์http://codegolf.stackexchange.com/questions/60204/how-are-you-doingและการเพิ่ม 13 ถึงรหัสสำหรับการเรียกตัวเองและawk -v u=-f a

น้อย golfed นี้อาจสั้นกว่า:

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 ฮะ! ฉันรู้ว่ามันดีเกินกว่าจะเป็นจริงได้ ขอขอบคุณและแก้ไข การเพิ่มไบต์กลับจำเป็นต้องมีการประท้วงหรือไม่?
— n0741337

คุณไม่จำเป็นต้องใช้เช่นเดียวกับที่คุณไม่ต้องการขีดฆ่าเมื่อคุณตีกอล์ฟแบบไบท์
— lirtosiast

1

GNU Awk, 156 ไบต์

(ได้แรงบันดาลใจจากโซลูชัน Awkของn0741337 )

อันนี้มันทำเองทั้งหมดโดยไม่ต้องรันคำสั่งภายนอก

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.