마틴 대 데니스-1 라운드 : 누가 더 많은 담당자가 있습니까?


33

"세계 최고의 코드 골퍼 두 가지"에 대해 많은 도전이 있었음을 알고 있지만,이 두 가지가 관련된 일련의 (미래의) 도전에서 1 라운드로 다소 독특 합니다.


여러분의 임무는 Dennis ♦Martin Ender ♦ 사이에서 프로그램이 실행되는 시점에 더 평판이 좋은 두 개의 다른 공백이 아닌 ASCII 문자열을 반환하는 프로그램이나 함수를 작성하는 것입니다 . 까다로운 부분은 평판이 같을 가능성이있는 경우 정확한 문자열 "tie" 를 출력 해야하며 위에서 언급 한 두 개의 다른 공백이 아닌 ASCII 문자열"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의 게시물에 대한 투표는 스택 교환 네트워크에서 금지 된 대상 투표를 구성합니다. 솔루션이 올바르게 출력되는지 테스트하려는 경우 솔루션 tie의 ID를 연결되어있는 2 명의 사용자로 변경하십시오. 자세한 내용은 이 메타 게시물 을 참조하십시오.

* 어쨌든 아무도 그것을 사용하지 않았을 것이라고 생각합니다.


33
"... 세계에서 가장 좋은 코드 골퍼 2 개 ..."[인용 필요]
Martin Ender

9
우리는 그들이이 공동체에서 항상 1 위와 2 위가 될 것이라고 가정 할 수 있습니까?
ovs

7
친숙한 알림 : 전체 스택 Exchange 네트워크에서 대상 투표는 금지되어 있습니다. 이 도전에 대한 제출을 테스트하기 위해 Martin과 내 게시물에 대한 투표는 허용 되지 않습니다.
Dennis

2
@Shaggy 그 메모를 추가 한 것이 좋습니다. 바라건대, 관련 사용자는 그 일을 중지합니다
씨 Xcoder

1
맨 위의 @MartinEnder에게는 상식적인 사실에 대한 인용이 필요하지 않습니다.
그리폰 (Gryphon)-Reinstate Monica

답변:


20

05AB1E , 65 64 바이트

암호:

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

05AB1E 인코딩을 사용합니다 .


설명:

•в=6{•в=6{255에서 10으로 숫자 를 변환하여 결과 값은 1201208478 입니다. 전반은 Dennis의 ID (12012)이고 후반은 Martin (8478)의 ID입니다. 5를 사용 하여 다음 배열을 얻습니다.

['12012', '08478']

운 좋게도 우리는 Martin의 ID에서 앞에 오는 0을 남겨 둘 수 있습니다. 여전히 작동하기 때문입니다 (앞에 오는 0을 보려면 클릭하기 전에 링크를 확인하십시오).

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

중 하나에서 어떤 결과를 D, M또는 tie.


2
05AB1E가 인터넷 API에 액세스 할 수 있다는 것을 몰랐습니다.이 답변은 나를 놀라게합니다. => +1
Mr. Xcoder

나는 항상 당신과 다른 사람들이 특정 숫자를 얻는 방법을 생각해내는 것을 좋아합니다. :) +1 Btw, 부분 " 두 번째 요소 (with 1è) and keep the first **100 characters** (with т£. ")는 코드 블록에 완전히 있어야하거나 " 두 번째 요소 (with )이고 첫 번째 100 자 (with т£)를 유지해야합니다 . " 오타가 있지만, 이런 식으로 생각하면 혼란 스러워요 ..
Kevin Cruijssen

@KevinCruijssen 허, 어떻게 된건 지 모르겠지만 지금은 고쳐졌습니다. 고마워요! :)
Adnan 2016 년

잘못된 것 같습니다 (이런 종류의 코드를 수정하는 방법을 모르겠습니다 Dennis: 140,033. 죄송합니다) ; Martin: 140,003,하지만 난 여기에 코드를 시도 tio.run/nexus/05ab1e#@/... , 그것을 얻을 tie. D대신 출력해야합니까 ?
Eddie

@Eddie .w는 웹 액세스가 필요하며, TIO에서 제한됩니다 (안전 모드에서 05AB1E를 실행 함). 오프라인 인터프리터에서는 작동합니다.
Adnan

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를 저장했습니다.

요청에서 두 사용자의 평판 만 얻음으로써 16을 절약하고 두 |% r*n번 이상 사용해야하는 시간을 절약 할 수 있습니다. 또한 백만 개의 대괄호와 두 개의 쓸모없는 변수를 제거 할 수 있습니다.

-2 TessellatingHeckler 덕분에 -URL 에 두 개의 큰 따옴표 대신 이스케이프 문자를 사용하여 @필요하지 않은 배열에서 배열을 제거했습니다 (oopsie)

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*는 ISDisplay_name

사용 Invoke-RestMethod(별칭 irm)을 저장, 이름, 결과 API를 쿼리 Items(받은 사용을 |% I*두 변수에) $a$b각 프로 골퍼의 하나는, ToString( |% T*g값 중 하나에서) 트릭 결과 D, M또는 Tie심지어 숫자 인 경우 홀수 / / 제로.


나는 powershell이 ​​가장 짧을 것으로 기대하지 않았다. +1
Rɪᴋᴇʀ

@Riker Pyth는 아마도 그랬지만 끔찍한 버그가 있습니다.
아웃 골퍼 에릭

1
좋아, 당신은 이긴다; 내가 지금 이길 방법은 없습니다!
Shaggy

9
따라서 코드 103! = 9.902900716486180407546715254581773349090165822114492483005280554699... × 10^163길이 는 바이트입니다 ..? : P
완전히 인간적인

1
@TessellatingHeckler는 마지막 비트에 대한 답을 확인하십시오 .100 이하로 받았습니다! - ToString+/- 숫자와 같은 방식으로 작동 한다는 것을 결코 알지 못했습니다 .
colsw

16

파이썬 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 답변은 아니지만 지금까지 가장 짧은 Python은 가정하지 않습니다.

1Martin이 더 많은 담당자를 가지고 있는지 인쇄 합니다 -1.


14

자바 스크립트 (ES6) 167 156 146 144 141 132 103 바이트

바보 fetch와 그 바보, 비싼 Promise체인!

현재 허용 된대로 Dennis & Martin이 항상 2 위의 사용자라고 가정합니다. 의 루트 수준에서 실행해야합니다 api.stackexchange.com. 당시 가장 많은 담당자를 가진 사람 또는 JSON 객체를 포함 하는 Promise객체 (현재 합의에 의해 허용됨 )를 반환합니다 tie. JSON 객체가 유효한 출력으로 간주되지 않으면에 5 바이트를 추가하십시오 .link.

_=>fetch`users/?site=codegolf`.then(r=>r.json()).then(({items:[j,i]})=>j[r="reputation"]==i[r]?"tie":j)
  • Kevin의 덕분에 11 바이트를 절약 link하여의 첫 글자 대신 프로파일을 반환 할 것을 제안했습니다. display_name또한 동일한 글자로 시작하도록 사용자 이름을 변경하는 것에 대비하여 더 나은 미래 보장 기능을 제공합니다!
  • 5 바이트 는 다른 솔루션으로 kamoroso94 의 팁을 적용하는 것을 절약했습니다 .

시도 해봐

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이지만 경고 팝업에 맞는지 확실하지 않습니다.
케빈 크루이 센

감사합니다, @KevinCruijssen; Martin의 공백이 포함되어 있으므로 허용되지 않는 사용자 이름의 추출을 사용해야했습니다. 그래도을 link사용하는 것이 좋았지 만 필터링 된 API 쿼리를 사용하여 필요한 정보 만 반환했습니다.
Shaggy

@KevinCruijssen AJAX 반환을 처리 할 때 전체 HTML 페이지를 경고 팝업으로 덤프했습니다. 처리 할 수 ​​있습니다.
Draco18s

alert그러나 JSON 객체를 사용하는 @ Draco18s 는을 표시 [object Object]합니다.
얽히고 설킨

@Shaggy 사실, 맞습니다.
Draco18s

9

파이썬 (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에 있다고 가정


어떤 가정도하지 않고 파이썬 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).

httpshttp@KevinCruijssen 덕분에 1 바이트 -> ! re as r, r.sub-> re, re.sub@ovs 4 개 바이트 감사합니다!


확실하지 않지만로 변경할 httpshttp있습니까? PPCG는 이제 완전히 https이지만 브라우저에서와 마찬가지로 Python에서 HTTP를 탐색 할 때 HTTPS로 자동 리디렉션 될 수 있습니까?
케빈 크루이 센

@KevinCruijssen 아 그래, 나는 내가 무슨 생각을했는지 모르겠다. 감사!
HyperNeutrino

1
당신은 필요하지 않습니다 re as R. 그냥 사용 import requests as r,re하고re.sub
ovs

@ovs Heh, 내 원래 접근 방식은 달랐습니다. 감사합니다!
HyperNeutrino

cmp마지막 세 줄을 다음과 같이 바꾸면 바이트를 절약 할 수 있다고 생각합니다.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

파이썬 (2) , 228 (223) 204 (199) 바이트

모바일 핫스팟에서이 작업을 수행 했으므로 ... 대단하지 않습니다 ... 둘 다 항상 같은 십만에 있다고 가정합니다. 지금 아무것도 가정하지 않습니다. :디

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]

TrueDennis가 Martin보다 평판이 좋으면 인쇄 하고 False그렇지 않으면 인쇄 합니다 Tie.


4

배시 + JQ , 140 133 바이트

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

형식화 및 설명

먼저, 우리는 w3m API를 컬링 하고 gzip을 사용하여 --compressed짧게--com 만듭니다 .

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 일 때 0으로 나누기 오류를 생성하므로 동점 상황입니다. ||echo tiebash는 어획량이.

이 경우 JQ에 의해 stderr에 경고가 인쇄되지만 프로그램의 실제 결과 만 stdout으로 간주합니다.)


1
w3m대신 curl --com몇 바이트를 절약 할 수 있습니다 . 또한 jq 1.4는 0으로 나누기 오류가 발생하지 않으므로 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

Dennis는 1, Martin은 2를 인쇄합니다.

내가 어제 SEADE 에 대해 배웠기 때문에 이것은 매우 두려운 것입니다.

여기 사용해보십시오


당신은 변경할 수 'D''M'01.
Kevin Cruijssen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.