Eu sei que houve muitos desafios sobre "os dois melhores jogadores de código do mundo", mas este é um pouco mais exclusivo, sendo a Rodada 1 em uma série de desafios (futuros) envolvendo os dois.
Sua tarefa é escrever um programa ou função que retorne duas seqüências ASCII diferentes de espaço em branco, correspondendo àquele que tem mais reputação no momento em que o programa é executado, entre Dennis ♦ e Martin Ender ♦ . A parte complicada é que você deve gerar a string exata "tie" caso a reputação seja idêntica (não provável) e as duas strings ASCII diferentes de espaço em branco não mencionados acima mencionadas devem ser diferentes de "tie" * .
Nenhuma entrada pode ser obtida, como nomes de usuário ou IDs de usuário. Como de costume, os encurtadores de URL são proibidos e as brechas comuns.
Exemplos:
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
IMPORTANTE! A votação em posts de Dennis & Martin com o único objetivo de afetar um empate, a fim de testar as soluções abaixo, constitui votação direcionada, proibida na rede Stack Exchange. Se você quiser testar se uma solução é exibida corretamente
tie
, altere os IDs para aqueles de 2 usuários que você sabe que estão vinculados. Veja esta publicação do Meta para mais detalhes.
* Eu acho que ninguém teria usado isso, de qualquer maneira
fonte
Respostas:
05AB1E ,
6564 bytesCódigo:
Usa a codificação 05AB1E .
Explicação:
•в=6{•
converte o númeroв=6{
da base 255 para a base 10, resultando em 1201208478 . A primeira metade é o ID de Dennis (12012) e a segunda metade é o ID de Martin (8478). Divida em pedaços de 5 usando5ô
para obter a seguinte matriz:Felizmente, podemos deixar o zero inicial do ID de Martin, pois isso ainda funcionará (verifique o link antes de clicar para ver o zero inicial).
Agora, passamos por esse array usando
vy
e construímos a seguinte string desse código 05AB1E:Considerando que
ÿ
é o elemento atual do iterador (usando interpolação de string) Experimente online!Depois de construir o link,
.w
lê todos os dados do link, resultando em uma enorme quantidade de texto. Para tirar a reputação disso, precisamos dividir a stringtitle="reputation"
. Ou em uma versão mais comprimido:’„Ö="ˆ"’
. Divida esse pedaço de corda (com¡
) e obtenha o segundo elemento (com1è
) e mantenha os primeiros 100 caracteres (comт£
).Agora, nosso texto raspado se parece um pouco com isso:
Essa parte é fácil, apenas removemos qualquer coisa, exceto dígitos, para permanecer o número da reputação, para o qual criamos um (
þ
). Terminamos o loop e agrupamos tudo em uma matriz}})
.Por fim, podemos continuar processando os números de reputação:
O que resulta em
D
,M
outie
.fonte
1è) and keep the first **100 characters** (with т£
. " Deveria estar completamente em blocos de código ou deveria ser " segundo elemento (com1è
) e manter os primeiros 100 caracteres (comт£
). ")? um erro de digitação, mas se é suposto ser assim estou confuso ..Dennis: 140,033
,;Martin: 140,003
, mas eu tentei o seu código aqui tio.run/nexus/05ab1e#@/… , ele produztie
. Não deveria sair emD
vez disso?.w
requer acesso à web, que é restrito no TIO (ele executa 05AB1E no modo de segurança). No intérprete offline, ele deve funcionar.PowerShell v3 +,
14712311910310196 bytesSalva 24 bytes usando saída true / false em vez dos nomes.
Economizou outros 4 reestruturando as verificações finais.
economizou 16 obtendo apenas a reputação dos dois usuários da solicitação, economiza a necessidade de usar
|% r*n
mais de uma vez, também significa que podemos nos livrar de um milhão de colchetes e duas variáveis inúteis.-2 graças a TessellatingHeckler - usando um caractere de escape em vez de duas aspas duplas para o URL, também removeu o
@
da matriz que era desnecessária (oopsie)usou um
.ToString
truque estranho que eu nunca soube que existia até agora recomendado por TessellatingHeckler -5 e, finalmente, abaixo de 100.Versão que retorna nomes:
isso parece bastante confuso devido ao encurtamento dos nomes dos parâmetros.
em qualquer lugar
|% r*n
aparece que estamos recebendo oReputatioN
, e|% d*
é oDisplay_name
usos
Invoke-RestMethod
(apelidoirm
) para consultar a API, armazena o resultado com o nomeItems
(obtido usando|% I*
), para as duas variáveis$a
e$b
, um para cada golfista profissional de, osToString
(|% T*g
) truque resulta em um dos valoresD
,M
ouTie
se o número for ímpar / par / zero.fonte
103! = 9.902900716486180407546715254581773349090165822114492483005280554699... × 10^163
bytes de comprimento ..? : PToString
funcionou assim com +/- números, lembrarei para o futuro.Python 2 , 160 bytes
Não é a resposta mais curta do Python, mas a mais curta até agora que não faz nenhuma suposição.
Imprime
1
se Martin tiver mais representantes,-1
se eu tiver.fonte
JavaScript (ES6),
167156146144141132103 bytesEstúpido
fetch
e seu estúpido,Promise
encadeamento caro !Supõe, como atualmente permitido, que Dennis & Martin sempre serão os 2 usuários mais bem classificados. Precisa ser executado a partir do nível raiz de
api.stackexchange.com
. Retorna umPromise
objeto (como agora é permitido por consenso ) contendotie
ou o objeto JSON para quem tiver mais representantes no momento. Se o objeto JSON não for considerado uma saída válida, adicione 5 bytes para.link
.link
em vez da primeira letra dodisplay_name
, que também fornece uma melhor proteção contra o futuro, alterando seus nomes de usuário para começar com a mesma letra!Tente
Alternativo
Se chegar a hora de Dennis e Martin não estarem no topo e ainda queremos saber quem tem mais representantes entre eles, precisaremos do seguinte, a um custo de 10 bytes adicionais.
fonte
.display_name[0]
para.display_name
, ou uma alternativa ainda mais curto que ainda é único para ambos:.link
. ;) Ou apenas o JSON inteiro, mas não tenho certeza se ele se encaixa no alerta-pop-up.link
, no entanto, eu estava usando uma consulta de API filtrada para retornar apenas as informações necessárias.alert
um objeto JSON será exibido[object Object]
.Python 3,
160157151 bytes-3 bytes graças a @KevinCruijssen
Imprime um link para o usuário com mais reputação
Assume que eles estão nos nºs 1 e 2
Sem fazer nenhuma suposição, Python 2, 157 bytes :
fonte
Pitão,
226225221 bytesEu sinto que isso é muito longo.
Imprime
"True"
se Martin tem mais representantes que Dennis,"False"
se Dennis tem mais representantes que Martin e"tie"
se eles têm o mesmo (teoricamente. Não posso testar isso: P).https
->http
por 1 byte, graças a @KevinCruijssen!re as r, r.sub
->re, re.sub
por 4 bytes, graças a @ovs!fonte
https
parahttp
? Eu sei que o PPCG é totalmente https agora, mas talvez ele direcione automaticamente para HTTPS quando você navega para HTTP em Python, assim como em um navegador?re as R
. Basta usarimport requests as r,re
ere.sub
cmp
função para salvar alguns bytes, substituindo as últimas três linhas com algo parecidoprint['tie',0,1][cmp(f('8478'),f('12012'))]
PHP, 167 bytes
imprime -1 para Dennis, 1 para Martin Ender. empate em caso de empate
fonte
Python 2 ,
228223204199 bytesEu fiz isso em um hotspot móvel, então ... não é ótimo ...
Supõe que os dois sempre estarão na mesma cem mil.Não assume nada agora. : DImprime
True
se Dennis tem mais reputação que Martin,False
caso contrário eTie
se eles estão ... empatados.fonte
Bash + jq ,
140133 bytesFormatado e explicado
Primeiro, enrolamos a API do w3m
(e usamosouabreviamosparadescompactar ogzip):--compressed
--com
Isso é algum JSON. Observe que o pedido não é estável, não com base na reputação. A JQ processa o JSON, para o que foi criado.
Usamos
1/x
acima para gerar um erro de divisão por zero quando min == max, portanto, em uma situação de empate. O||echo tie
in bash pega isso.Observe que um aviso é impresso no stderr pelo JQ nesse caso, mas consideramos apenas stdout o resultado real do programa;)
fonte
w3m
vez decurl --com
salvar alguns bytes. Além disso, acho que vale a pena mencionar que isso requer o jq 1.5, pois o jq 1.4 não aumentou em zero o erro de divisão.Stackexchange API Data Explorer ,
184180 bytesObrigado a @Kevin Cruijssen por -4 bytes
Imprime 1 para Dennis e 2 para Martin
Desde ontem, eu aprendi sobre o SEADE, isso deve ser muito superável.
Experimente aqui
fonte
'D'
e'M'
para0
e1
.