你好吗?


20

马丁创建了一个不错的代码段,可用来跟踪得分以解决挑战。太好了,但如果您自己跟踪它,会不会更好?

创建一个程序,将自身的字节数与该问题的其余答案进行比较,并返回“我是答案编号n”。

规则:

  • 您自己答案中的字节数可以在代码中进行硬编码

  • 该函数可以将url作为输入,也可以进行硬编码。网址的字符数不会计入字节数,因此无需使用网址缩短器。

  • 答案的网址不能硬编码

  • 答案的分数可以从标题中找到(与Martin的摘要相同)。

  • 答案标题必须具有正确的格式(如下所述)。

  • 如果可以在线运行该程序,请共享一个在线编译器的链接(或可以从答案中执行的代码段)。如果不可能,请显示如何调用该函数,并显示您自己的编译器的输出(在发布答案时。您当然不需要更新它)。

  • 您必须将答案与该问题的其他答案进行实际比较。仅以I'm answer number 1.某种语言编写脚本是不合法的。

  • 如果其他答案的字节数与您自己的相同,则可以选择是最好还是最差。

标头必须格式化:

# Language Name, N bytes

无法使用删除线等,因此,如果更改了代码大小,请在标题下方以粗体显示该代码,或以其他方式进行指示。

输出必须为I'm answer number n.,其中数字n为位置(尾随换行符/空格可以)。因此,最短的答案将输出:“我是1号答案”,第二个是“我是2号答案”。等等

这是代码高尔夫,所以最短的答案(以字节为单位)将获胜。


如果其他答案的字节数与您自己的相同,则可以选择是最好还是最差。也许发布日期应该是平局,所以您不会有两个声称相同号码的答案。或者,您可以使用这样的标准:如果它们被捆绑在一起,它们两者都被捆绑到更高的位置。
mbomb007

2
我不确定这是否行得通。大多数(好的)在线解释器不允许卷曲其他网页,但在挑战中它说代码必须在在线解释器上运行。
意大利面条

让我们在聊天中讨论一下。
意大利面条

是否需要对网址周围的引号进行计数?当前,有些答案将其从计数中排除,其他答案将其包括在内。
hvd 2015年

Answers:


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

略少打高尔夫球:

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字节-URL为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,但如果语言名称中包含逗号,这是行不通的,这是正确的吗?(我不知道是否有这样的语言,所以我不确定是否重要)
Stewie Griffin

@StewieGriffin是的,但是我也不记得任何带有逗号的语言;-)。如果出现问题,我将对其进行更改。
mınxomaτ

@minxomat该名称看起来像是用l而不是代替I,所以我读错了它。我意识到这一点的唯一原因是看了Wikipedia文章,其中有一个衬线。
mbomb007

只是在等待有人发明一种带有逗号的语言,以破坏这个答案……
Darrel Hoffman

@DarrelHoffman嗯,就必须有一个逗号一个在它的名字^^连续的空间
mınxomaτ

4

JavaScript(ES7),149字节

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字节的答案可能会中断
George Reith

@GeorgeReith Nah,不应该。OP表示,可以以任何一种方式打破联系,而这只会使自己处于另一种领先地位。
ETHproductions 2015年

啊,他编辑了出来。最好还是按创建日期进行排序,而不是使它更有可能找到您的文件,而不是以前发布并编辑答案的少数几个文件之一。
乔治·瑞斯

@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's October

没有道歉,我在阅读编辑历史并感到困惑。
乔治·瑞斯

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

127个字节('http://api.stackexchange.com/2.2/questions/60204/answers?pagesize=99&order=desc&sort=votes&site=codegolf&filter=!--pn9sqW9y0T'未计入)

带有非高尔夫字符串的格式化版本:

<?
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”(真),否则用“”(假)替换
  • 总结结果

像这样的字符序列¶Ø’ßž‘Œˆšß‘Š’šß在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,2015年

确实,我已经找到了您对此答案的解释。由于这是一种不寻常的方法,因此我认为在您的帖子中再次进行解释可能是个好主意:)。
Blackhole,2015年

我认为,如果您跳过,json_decode然后再split执行':'诸如此类的操作,则可以做得更好,例如:codepad.org/7rZg06by
primo

好主意,但我担心它可能不可靠,因为源代码中会有很多冒号。在打开的PHP标记之前加上“我是答案号”可以节省至少两个字节,谢谢!
Fabian Schmengler,2015年

3

Javascript(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 2015年

@ETHproductions因为浏览器会立即寻找结束脚本标签,否则将不会执行该脚本,因此这会推迟脚本标签的关闭,直到插入后为止。它使用带回调的JSONP并取决于API是否支持它,但幸运的是stackexchange支持。老实说,我不完全理解它的原因,但这是一个合理的问题。
乔治·瑞斯

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并在引导程序awk -v u=和的代码中添加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,2015年

@ThomasKwa哈!我知道这太真实了。谢谢,并固定。向后添加字节是否需要删除线?
n0741337

您不需要一个,就像打高尔夫球时不需要删除线一样。
lirtosiast,2015年

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.