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


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.