お元気ですか?


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番目は「私は答え番号2です」を出力します。等

これはコードゴルフであるため、バイト単位の最短回答が勝ちます。


他の回答が自分の回答と同じバイト数を持っている場合、あなたはそれらの中で最高かもっと悪いかを選択できます。投稿日はタイブレーカーになるはずなので、同じ番号であると主張する2つの答えはありません。または、標準が使用されている場合、それらが関連付けられている場合は、両方が上位の場所に関連付けられます。
mbomb007

2
これがうまくいくかどうかはわかりません。ほとんどの(良い)オンラインインタープリターは、他のWebページをカールすることを許可しませんが、チャレンジでは、コードはオンラインインタープリターで実行する必要があると言います。
spaghetto

これについてチャットで話しましょう。
spaghetto

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

やや少ないゴルフ:

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グリフィン

@StewieGriffinはい、ただし、カンマが含まれている言語は思い出せません;-)。出てきたら変更します。
mınxomaτ

@minxomat名前はのl代わりにがあるように見えるIので、誤解しています。私が気づいた唯一の理由は、セリフのあるウィキペディアの記事を見たことです。
mbomb007

ただ、ただ...この答えを妨害することにカンマで言語を発明するために誰かを待っている
ダレル・ホフマン

@DarrelHoffmanまあ、それはコンマ持たなければならないだろうし、それの名前^^での連続したスペース
mınxomaτ

4

JavaScript(ES7)、149バイト

283バイト-URLの場合は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バイトの回答中断しますが...良い探している
ジョージReithの

@GeorgeReithいや、そうすべきではない。OPは、どちらの方法でも関係を破ることができると言っており、これは単に自分自身を他の先に置くだけです。
ETHproductions

ああ、彼はそれを編集しました。おそらく、以前に投稿して回答を編集した数少ない人の1人ではなく、自分の日付を見つけやすくするために、作成日でソートする方が良いでしょう。
ジョージリース

@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

編集履歴を読んでいて混乱したことをおaびしません。
ジョージリース

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バイトを節約するために回答ごとに1回)
  • 回答体を収集します $h
  • バイトカウントが<= 159の場合、テキスト全体を "1"(true)で置換し、そうでない場合は ""(false)で置換します。
  • 結果を合計します

などの文字シーケンス¶Ø’ßž‘Œˆšß‘Š’šßはPHPで有効な定数名ですが、定数が存在しないため、文字列リテラルとして扱われます。~これを反転します"I'm answer number "(1つの引用符ごとにバイトを節約します)

使用法

php -derror_reporting=0 howareyou.php

回答番号1です。


ある$a変数は本当に必要?どうして単純にしないの$h[]=json_decode(…)[items][+$i++][body]ですか?ところで、この奇妙なキャラクターは何ですか?
ブラックホール

いい視点ね。これにより、各回答に対して新しいリクエストが行われますが、誰が気にします:)奇妙な文字はビットごとに反転した文字列です。これらは、PHPで有効な定数名であり、存在しない場合に文字列リテラルとして使用されるため、引用符を保存できます。たとえば、" "(3バイト)は(2バイト)に減らすことができます
ファビアンシュメングラー

確かに、この答えに関するあなたの説明を見つけました。これは珍しい方法なので、ここであなたの投稿でもう一度説明するのは良い考えだと思います:)。
ブラックホール

私はあなたがスキップ場合は、より良い多くを行うことができると思うjson_decodeだけsplit':'例えば、または何か:codepad.org/7rZg06by
プリモ

良い考えですが、ソースコードに多くのコロンが含まれているため、信頼できない可能性があります。PHPの開始タグの前に「I'm answer number」を置くと、少なくとも2バイト節約されます。
ファビアンシュメングラー

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

@ETHproductionsブラウザは終了スクリプトタグをすぐに検索し、それ以外の場合はスクリプトを実行しないため、ポスト挿入までスクリプトタグの終了を延期します。JSONPをコールバックとともに使用し、サポートするかどうかはAPI次第ですが、幸いなことにスタック交換はサポートします。正直なところ、私はその理由を完全には理解していませんが、それは正当な問題です。
ジョージリース

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

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

それは常に自分自身を結びつきで好む。バイト数はそれぞれにハードコードされています。

よりゴルフ的なバージョンには、それ自体を呼び出してシステムを介して終了値を出力するスクリプトがあります。いずれの場合も、ハードコーディングされた値incrementよりも少ないカウントのみで、それが先頭の場合は、r調整して戻す必要があり1ます。

これは、間に空白がbytesあり</h1>、おそらく私が考慮していない他の多くのケースがある場合、バイトを正しく見つけることができません。

の時点でSun Oct 11 05:17:51 UTC 2015、これにより以下が得られます。

I'm answer number 3.

これは私の初めてのゴルフなので、ルール、抜け穴、カウントなどに違反したかどうか、またはどんな改善ができるか教えてください。
n0741337

「私は数字です」ではなく「私は答えです」と印刷する必要があると思います。
リルトシアスト

わーい!私はそれが本当であるには余りにも良いことを知っていました。ありがとう、修正しました。バイトを追加し直すには取り消し線が必要ですか?
n0741337

バイトを打つときに打ち消しが必要ないのと同じように、あなたはそれを必要としません。
リトシアスト

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.