マーティンvsデニス-ラウンド1:誰がより多くの担当者を持っていますか?


33

「世界で最高の2人のコードゴルファー」について多くの課題があったことは知っていますが、これはもう少しユニークで、2人が関与する一連の(将来の)課題のラウンド1です。


あなたの仕事は、デニス♦マーティンエンダー♦の間で、プログラムの実行時に評価が高い2つの異なる非空白ASCII文字列を返すプログラムまたは関数を記述することです。トリッキーな部分は、レピュテーションが同一(可能性が低い)で、上記の2つの異なる非空白ASCII文字列「tie」*と異なる場合に、正確な文字列「tie」を出力する必要があることです。

ユーザー名やユーザーIDなどの入力は取得できません。通常どおり、URL短縮サービスは禁止されており、一般的な抜け穴も禁止されています。

例:

Let the chosen string for Dennis be "D" and the chosen one for Martin Ender be "M" (should be specified)

If Dennis' rep > Martin Ender's rep => D
If it's the other way around => M
If it's a tie => tie 

重要!以下のソリューションをテストするためにネクタイに影響を与えることのみを目的としたDennis&Martinによる投稿への投票は、Stack Exchangeネットワーク全体で禁止されているターゲットを絞った投票を構成します。ソリューションが適切に出力することをテストする場合は、その中tieのIDを、関係があることがわかっている2人のユーザーのIDに変更します。詳細については、このメタ投稿を参照してください。

* とにかく誰もそれを使用しなかったと思う


33
「...世界で最高の2人のコードゴルファー...」[要出典]
マーティンエンダー

9
このコミュニティでは常に1位と2位になると想定できますか?
-ovs

7
わかりやすいリマインダー:Stack Exchangeネットワーク全体では、対象を絞った投票は禁止されています。この課題への提出をテストするためだけにMartinと私の投稿に投票すること許可されていません
デニス

2
@Shaggyそのメモを追加できてうれしいです。うまくいけば、関係するユーザーはそれをやって停止します
ミスターXcoder

1
一番上の@MartinEnderには、一般的な知識である事実についての引用は不要です。
グリフォン-モニカの復活

回答:


20

05AB1E65 64バイト

コード:

•в=6{•5ôvy’ƒËŠˆ.‚‹º.ŒŒ/†š/ÿ’.w’„Ö="ˆ"’¡1èт£þ}})ZQā*O<“D M·‡“#è

05AB1Eエンコードを使用します。


説明:

•в=6{•数値в=6{を基数255から基数10に変換し、1201208478になります。前半はDennis(12012)のIDで、後半はMartin(8478)のIDです。次の配列を取得するために使用して、5つの部分に分割します。

['12012', '08478']

幸いにも、我々は以来、マーティンのIDから先行ゼロを残すことができ、これはまだ動作します(先行ゼロを見てクリックする前にリンクを確認してください)。

ここでvy、この05AB1Eコードから次の文字列を使用してこの配列をループし、構築します。

’ƒËŠˆ.‚‹º.ŒŒ/†š/ÿ’  -->  codegolf.stackexchange.com/users/ÿ

一方ÿ、イテレータの現在の要素は(文字列補間を使用)オンラインで試してください!

リンクを作成した後、リンク.wからすべてのデータを読み取り、膨大な量のテキストを作成します。これから評判を奪うために、文字列で分割する必要がありますtitle="reputation"。または、より圧縮されたバージョン:’„Ö="ˆ"’。(と文字列のこの部分に分割¡)と(と第二の要素を取得)し、最初の維持100文字で(т£)を保持します。

さて、削ったテキストは次のようになります。

>
        139,883 <span class="label-uppercase">reputation</span>
   </div>

<div class="ba

この部分は簡単です。レピュテーション番号を維持するために数字以外を削除するだけで、組み込みの(þ)があります。ループを終了し、すべてを配列にラップします}})

最後に、レピュテーション番号の処理に進むことができます。

ZQā*O<“D M·‡“#è   -   On stack: an array in the format [Dennis rep, Martin rep]

Z                 # Get the maximum of the array
 Q                # Check for equality with the array
  ā*              # Multiply by it's index (1-indexed)
    O<            # Sum and decrement by 1
      “D M·‡“#    # Push the array ['D', 'M', 'tie']
              è   # Get the element on the index of the sum

どちらかDMまたはになりtieます。


2
05AB1EがインターネットAPIにアクセスできることを知りませんでしたが、この答えは私を驚かせます=> +1
Mr. Xcoder

私はいつもあなたと他の人が特定の数を得る方法を考え出すのが好きです。:) +1 Btw、「2番目の要素(with 1è) and keep the first **100 characters** (with т£。)」は完全にコードブロック内にあるはずなのか、それとも「2番目の要素(with )で最初の100文字(with т£)を保持する」それはこのようなことになっていた場合にタイプミスが、私は困惑している...
ケビンCruijssenを

@KevinCruijssenええ、どうしてそれが起こったのかわかりませんが、今は修正されています。ヘッドアップをありがとう!:)
アドナン

それは間違っているようです(この種のコードを修正する方法がわかりません、申し訳ありません)Dennis: 140,033、; Martin: 140,003、しかし、ここであなたのコードを試してみましたtio.run/nexus/05ab1e#@/…、それは降伏しtieます。D代わりに出力すべきではありませんか?
エディ

@Eddie .wはWebアクセスを必要としますが、これはTIOで制限されています(05AB1Eをセーフモードで実行します)。オフラインインタープリターでは、動作するはずです。
アドナン

19

PowerShellのV3 +、147 123 119 103 101 96のバイト

$a,$b=irm api.stackexchange.com/users/12012`;8478?site=codegolf|% I*|% r*n;$a-$b|% T*g "D;M;Tie"

名前の代わりにtrue / false出力を使用して24バイトを保存しました。

最終チェックを再構築して、さらに4を保存しました。

リクエストから2人のユーザーの評判のみを取得することで16を節約し、2 |% r*n回以上使用する必要がなくなり、100万個のブラケットと2つの役に立たない変数を取り除くことができます。

-2 TessellatingHecklerのおかげ@-URL に2つの二重引用符の代わりにエスケープ文字を使用し、不要な配列からも削除しました(おっと)

TessellatingHeckler -5が.ToString推奨し、最終的には100未満になるまで、私が知らなかった奇妙なトリックを使用しました。


名前を返すバージョン:

$a,$b=irm "api.stackexchange.com/users/12012;8478?site=codegolf"|% I*
if(($c=$a|% r*n)-eq($d=$b|% r*n)){"tie"}else{@(($a|% d*),($b|% d*))[$c-lt$d]}

パラメータ名が短くなっているため、これはかなり複雑に見えます。

どこでも|% r*n我々が取得している表示されReputatioN、そして|% d*ありますDisplay_name

用途Invoke-RestMethod(別名irmAPIを照会する)、店舗名付け結果Items(使用してもらって|% I*2つの変数に)、$aおよび$b、各プロゴルファーのための1、 ToString|% T*g値のいずれかで)トリック結果DMまたはTie数が偶数奇数/ありますか/ゼロ。


PowerShellが最短になるとは思っていませんでした。1
Rɪᴋᴇʀ

@Riker Pythはおそらくそうでしたが、恐ろしいバグがあります。
エリックアウトゴルファー

1
結構です、あなたは勝ちます。まさかこれをやるつもりはありません!
シャギー

9
あなたのコードは103! = 9.902900716486180407546715254581773349090165822114492483005280554699... × 10^163バイト長です..?:P
完全に人間の

1
@TessellatingHecklerは最後のビットの答えをチェックします。100未満になりました!- ToString+/-数字でそのように動作することを決して知らなかった、将来のために覚えています。
-colsw

16

Python 2、160バイト

from requests import*
print cmp(*[get('http://api.stackexchange.com/users/12012;8478?%ssite=codegolf&filter=!9aK21rboZ'%s).text for s in'order=asc&',''])or'tie'

最短のPythonの答えではなく、これまでのところ、仮定を立てない最短の答えです。

1Martinの担当者がいる-1場合に印刷します(もしあれば)。


14

JavaScriptの(ES6)、167 156 146 144 141 132 103バイト

愚かなfetch、その愚かな、高価なPromise連鎖!

現在許可されているように、Dennis&Martinは常に上位2位のユーザーであると想定しています。のルートレベルから実行する必要がありますapi.stackexchange.com。その時点で最も多くの担当者がいる人のJSONオブジェクトを含むPromiseオブジェクト(現在はconsensusで許可されている)を返しますtie。JSONオブジェクトが有効な出力と見なされない場合、に5バイトを追加します.link

_=>fetch`users/?site=codegolf`.then(r=>r.json()).then(({items:[j,i]})=>j[r="reputation"]==i[r]?"tie":j)
  • の最初の文字ではなくプロファイルを返すことを提案してくれたケビンのおかげで11バイトを節約しました。linkdisplay_name
  • 私の別のソリューションにkamoroso94からのヒントを適応させて5バイト節約しました。

それを試してみてください

f=
_=>fetch`//api.stackexchange.com/users/?site=codegolf`.then(r=>r.json()).then(({items:[j,i]})=>j[r="reputation"]==i[r]?"tie":j)
f().then(console.log)


代替案

デニスとマーティンがトップにいない時が来て、誰が彼らの間で最も多くの担当者を持っているかを知りたいなら、我々は追加の10バイトの費用で以下を必要とします。

_=>fetch`users/12012;8478?site=codegolf`.then(r=>r.json()).then(({items:[j,i]})=>j[r="reputation"]==i[r]?"tie":j)

2
に変更.display_name[0]することもできますが.display_name、さらに短い代替の両方を使用することもできます.link。;)またはJSON全体だけですが、alert-popupに収まるかどうかはわかりません。
ケビンCruijssen

ありがとう、@ KevinCruijssen; Martinにはスペースが含まれているため、ユーザー名の抽出を使用する必要がありましたが、これは許可されていません。linkただし、を使用することで良いコメントがありますが、フィルター処理されたAPIクエリを使用して、必要な情報のみを返していました。
シャギー

@KevinCruijssen AJAXリターンを処理するときに、HTMLページ全体を警告ポップアップにダンプしました。それを処理できます。
Draco18s

alertただし、JSONオブジェクトを入力する@ Draco18s は単にを表示します[object Object]
シャギー

@Shaggy確かにそうです。
-Draco18s

9

Python 3、160 157 151バイト

from requests import*
a,b,*c=get('http://api.stackexchange.com/users?site=codegolf').json()['items']
r='reputation'
print(['tie',a['link']][a[r]>b[r]])

@KevinCruijssenのおかげで-3バイト

評価の高いユーザーへのリンクを印刷します

#1と#2にいると仮定します


仮定なしで、Python 2、157バイト

from requests import*
a,b=get('http://api.stackexchange.com/users/8478;12012?site=codegolf').json()['items']
r='reputation'
print['tie',a['link']][a[r]>b[r]]

6

パイソン、226の 225 221バイト

これは長すぎるように感じます。

import requests as r,re
def f(i):d=re.sub('[, ]','',r.get('http://codegolf.stackexchange.com/users/'+i).text);D=d.index('"reputation">')+14;return int(d[D:d.index('<',D)])
a=f('8478')
b=f('12012')
print([a>b,'tie'][a==b])

"True"MartinがDennisよりも多くの担当者を持っている"False"場合、DennisがMartinよりも多くの担当者"tie"を持っている場合、および同じものを持っている場合に印刷します(理論的には、これをテストできません:P)。

https-> http@KevinCruijssenのおかげで1バイト! re as r, r.sub-> re, re.sub@ovsのおかげで4バイト!


よくわかりませんが、変更httpsすることは可能httpですか?PPCGは完全にhttpsになりましたが、ブラウザの場合と同じように、PythonでHTTPにナビゲートすると、おそらくHTTPSに自動リダイレクトされますか?
ケビンCruijssen

@KevinCruijssenあ、はい、私はそこで何を考えていたのかわかりません。ありがとう!
ハイパーニュートリノ

1
必要ありませんre as R。ただ、使用import requests as r,reおよびre.sub
OVS

@ovsへー、私の最初のアプローチは違っていましたありがとう!
ハイパーニュートリノ

cmp関数を使用して、最後の3行を次のようなものに置き換えることで、いくつかのバイトを節約できると思いますprint['tie',0,1][cmp(f('8478'),f('12012'))]
-Loovjo

6

PHP、167バイト

Dennisの場合は-1、Martin Enderの場合は1を出力します。ネクタイの場合はネクタイ

<?=($b=($t=json_decode(gzdecode(join(file('http://api.stackexchange.com/users/12012;8478?site=codegolf&order=asc'))))->items)[0]->reputation<=>$t[1]->reputation)?:tie;

4

パイソン2228 223 204 199バイト

モバイルホットスポットでこれを行ったので、それは素晴らしいことではありません... 両方とも常に同じ10万になると仮定します。今は何も想定していません。:D

import urllib as l,re
f=lambda i:int(re.search('n">\s*([\d,]+)',l.urlopen('http://codegolf.stackexchange.com/users/%d'%i).read()).group(1).replace(',',''))
d,m=f(12012),f(8478)
print[d>m,'Tie'][d==m]

プリントTrueデニスは、マーティン以上の評価を得ている場合はFalseそうでないと、Tie彼らは...結ばれている場合。


4

バッシュ+ JQ140の 133バイト

w3m 'api.stackexchange.com/users/12012;8478?site=codegolf&sort=name'|jq '.items|map(.reputation)|1/(index(min)-index(max))'||echo tie

書式設定および説明

最初に、APIをw3m カールします(そして--compressed--comgzipの短縮形を使用します)

w3m 'api.stackexchange.com/users/12012;8478?site=codegolf&sort=name'

それはいくつかのJSONです。評判に基づいたものではなく、順序が安定していることに注意してください。その後、JQはJSONを処理します。

.items                          # take the items array
| map(.reputation)              # extract only the reputations
| 1 / 
  (index(min)-index(max))       # This checks if the bigger value is first (1) or last (-1) in array

1/x上記の方法を使用して、min == maxの場合にゼロ除算エラーを生成します。これは、同点の場合です。||echo tiebashのキャッチでいます。

その場合、JQによってstderrに警告が出力されることに注意してください。ただし、プログラムの実際の結果のみを標準出力と見なします;)


1
w3m代わりにcurl --comを使用して、数バイトを節約できます。また、jq 1.4ではゼロによる除算のエラーが発生しなかったため、これにはjq 1.5が必要であることに言及する価値があると思います。
デニス

確かに、ヒントをありがとう。W3mはまさに私が探していたものです。
-opatut

1

Stackexchange APIデータエクスプローラー184 180バイト

-4バイトの@Kevin Cruijssenに感謝

DECLARE @M int,@D int;SELECT @M=reputation from users where id=8478;SELECT @D=reputation from users where id=12012;IF @D=@M PRINT('tie')ELSE BEGIN;IF @D>@M PRINT(1)ELSE PRINT(2)END

デニスの場合は1枚、マーチンの場合は2枚

昨日だけ知ったので SEADEこれは非常に打ち勝つはずです。

ここで試してみてください


あなたは変えることができる'D''M'する01
ケビンCruijssen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.