Codegolf — Мартин Против Денниса — Раунд 1: У Кого Больше Репутации?

  • Автор темы Jurik
  • Обновлено
  • 18, Oct 2024
  • #1

Я знаю, что было много проблем, связанных с «двумя лучшими игроками в код-гольф в мире», но этот немного более уникален, поскольку Раунд 1 в серии (будущих) испытаний, в которых участвуют они оба.


Ваша задача — написать программу или функцию, которая возвращает две разные строки ASCII без пробелов, соответствующие той, у которой больше репутации на момент запуска программы, между Деннис ♦ и Мартин Эндер ♦. Сложность заключается в том, что вы должны вывести точную строку. "галстук" в случае, если репутация идентична (маловероятно), и два различные строки ASCII без пробелов упомянутое выше должно отличаться от "галстук" *.

Никакие входные данные, такие как имена пользователей или идентификаторы пользователей, не могут быть приняты. Как обычно, сокращатели URL-адресов запрещены, как и обычные лазейки.

Примеры:

 tie 

ВАЖНЫЙ! Голосование за сообщения Денниса и Мартина с единственной целью добиться ничьей и протестировать приведенные ниже решения представляет собой целевое голосование, которое запрещено в сети Stack Exchange. Если вы хотите проверить, что решение правильно выводит 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 then change the IDs in it to those of 2 users you know to be tied. See этот мета-пост для более подробной информации.

*Я думаю, что все равно никто бы этим не воспользовался

#код-гольф #интернет #stack-exchange-api

Jurik


Рег
23 Jan, 2021

Тем
75

Постов
189

Баллов
574
  • 26, Oct 2024
  • #2

05AB1E, 65 64 байта

Код:

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 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
 

Использует 05AB1E кодировка.


Объяснение:

Tie converts the number False от основания 255 до основания 10, в результате чего 1201208478. Первая половина — это идентификатор Денниса (12012), а вторая половина — это идентификатор Мартина (8478). Разделите на части по 5, используя True to get the following array:

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]

К счастью, мы можем оставить ведущий ноль в идентификаторе Мартина, поскольку это все равно будет работать (проверьте ссылку, прежде чем нажать, чтобы увидеть ведущий ноль).

Теперь мы просматриваем этот массив, используя ||echo tie and construct the following string from this 05AB1E code:

1/x

Тогда как .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 is the current element of the iterator (using string interpolation) Попробуйте онлайн!

После создания ссылки w3m 'api.stackexchange.com/users/12012;8478?site=codegolf&sort=name' reads all data from the link, resulting into a huge amount of text. To scrape the reputation from this, we need to split on the string --com . Или в более сжатой версии: --compressed . Разделите этот кусок веревки (с w3m 'api.stackexchange.com/users/12012;8478?site=codegolf&sort=name'|jq '.items|map(.reputation)|1/(index(min)-index(max))'||echo tie ) and get the second element (with re, re.sub ) и держи первое 100 символовre as r, r.sub ).

Теперь наш очищенный текст выглядит примерно так:

http

Эта часть проста, мы просто удаляем все, что угодно. но цифры останется номер репутации, для которого у нас есть встроенный ( https ). We end the loop and wrap everything into an array "tie" .

Наконец, мы можем перейти к обработке чисел репутации:

"False"

Что приводит либо к "True" , 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]) или <?=($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; .

 

Amaniuto


Рег
25 Aug, 2011

Тем
65

Постов
169

Баллов
524
  • 26, Oct 2024
  • #3

PowerShell v3+, 147 123 119 103 101 96 байт

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]]

Сохранено 24 байта с использованием вывода true/false вместо имен.

Сэкономил еще 4 за счет реструктуризации финальных проверок.

сэкономлено 16, получив только репутацию двух пользователей из запроса, избавляет от необходимости использовать 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]]) more than once, also means we can get rid of like a million brackets, and two useless variables.

-2 спасибо ТесселяцияХеклер - использование escape-символа вместо двух двойных кавычек для URL-адреса, также удалено _=>fetch`users/12012;8478?site=codegolf`.then(r=>r.json()).then(({items:[j,i]})=>j[r="reputation"]==i[r]?"tie":j) from the array which was un-needed (oopsie)

использовал странный 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) trick I never knew existed until now reccomended by ТесселяцияХеклер -5 и, наконец, ниже 100.


Версия, которая возвращает имена:

display_name

это выглядит довольно беспорядочно из-за сокращения имен параметров.

где угодно link appears we're getting the _=>fetch`users/?site=codegolf`.then(r=>r.json()).then(({items:[j,i]})=>j[r="reputation"]==i[r]?"tie":j) , и .link is the tie

использует Promise (alias api.stackexchange.com ) для запроса API, сохраняет результат с именем Promise (gotten using fetch ), в две переменные -1 & 1 , по одному на каждого профессионального игрока в гольф, 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' ( Tie ) трюк приводит к одному из значений M , D или |% T*g if the number is odd/even/zero.

 

Hover


Рег
09 Mar, 2007

Тем
68

Постов
169

Баллов
549
  • 26, Oct 2024
  • #4

Питон 2, 160 байт

ToString

Не самый короткий ответ на Python, но самый короткий на данный момент, не делающий никаких предположений.

Принты $b if Martin has more rep, $a если я это сделаю.

 

Марія це я


Рег
07 Dec, 2011

Тем
73

Постов
188

Баллов
583
  • 26, Oct 2024
  • #5

JavaScript (ES6), 167 156 146 144 141 132 103 байта

Глупый |% I* и это глупо и дорого Items приковывать!

Предполагается, как это разрешено в настоящее время, что Деннис и Мартин всегда будут двумя пользователями с самым высоким рейтингом. Необходимо запускать с корневого уровня irm . Returns a Invoke-RestMethod объект (как сейчас разрешено консенсусом), содержащий Display_name or the JSON object for whoever has the most rep at the time. If the JSON object isn't considered valid output then add 5 bytes for |% d* .

ReputatioN
  • Сэкономлено 11 байт благодаря Кевин предлагаю вернуть профиль |% r*n rather than the first letter of the $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]} , что также обеспечивает лучшую защиту от того, чтобы они в будущем меняли свои имена пользователей, начинающиеся с той же буквы!
  • Сэкономлено 5 байт, адаптировав подсказку из каморосо94 о другом моем решении.

Попробуйте это

.ToString

Альтернатива

Если придет время, когда Деннис и Мартин не окажутся наверху, и мы все еще хотим знать, у кого из них больше всего репутации, нам понадобится следующее, за счет дополнительных 10 байт.

@ ||answer||

Python 3, 160 157 151 байт

|% r*n

-3 байта благодаря @KevinCruijssen

Печатает ссылку на пользователя с большей репутацией

Предполагается, что они находятся на № 1 и № 2.


Не делая никаких предположений, Python 2, 157 байт:

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

PHP, 167 байт

выводит -1 для Денниса, 1 для Мартина Эндера. галстук в случае ничьей

tie ||answer||

Питон, 226 225 221 байт

Мне кажется, это слишком долго.

M

Принты D if Martin has more rep than Dennis, 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 если у Денниса больше репутации, чем у Мартина, и }}) if they have the same (theoretically. I can't test this :P).

þ -> > 139,883 <span class="label-uppercase">reputation</span> </div> <div class="ba за 1 байт спасибо @KevinCruijssen! т£ -> за 4 байта спасибо @ovs!

 

Mobstardos


Рег
08 Jun, 2016

Тем
82

Постов
180

Баллов
610
  • 26, Oct 2024
  • #6

Баш + jq, 140 133 байт

¡

Оформлено и объяснено

Во-первых, мы завиток w3m API (и используйте ’„Ö="ˆ"’ , or short title="репутация" чтобы разархивировать):

.w

Это какой-то JSON. Обратите внимание, что порядок стабилен, а не основан на репутации. Затем JQ обрабатывает JSON, для чего он и создан.

ÿ

Мы используем ’ƒËŠˆ.‚‹º.ŒŒ/†š/ÿ’ --> codegolf.stackexchange.com/users/ÿ above to generate an division-by-zero error when min==max, so in a tie situation. The vy в bash это улавливает.

Обратите внимание, что в этом случае JQ выводит предупреждение на stderr, но фактическим результатом программы мы считаем только stdout ;)

 

Татьяна Никищенко


Рег
29 Oct, 2020

Тем
66

Постов
211

Баллов
581
  • 26, Oct 2024
  • #7

Питон 2, 228 223 204 199 байт

Я сделал это на мобильной точке доступа, так что... это не здорово... Предполагается, что они оба всегда будут в одной и той же сотне тысяч. Сейчас ничего не предполагает. :D

['12012', '08478']

Принты if Dennis has more reputation than Martin, в=6{ в противном случае и •в=6{• if they are... tied.

 

Ckipochka


Рег
04 Nov, 2008

Тем
69

Постов
179

Баллов
574
  • 26, Oct 2024
  • #8

Обозреватель данных Stackexchange API, 184 180 байт

Спасибо @Kevin Cruijssen за -4 байта.

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

Распечатывает 1 для Денниса и 2 для Мартина.

Поскольку я только вчера узнал о SEADE, это должно быть очень легко победить.

Попробуйте здесь

 

Thetro


Рег
17 Jul, 2018

Тем
71

Постов
200

Баллов
585
Тем
403,760
Комментарии
400,028
Опыт
2,418,908