Escreva um programa que, conforme o script tenha acesso à Internet, produza uma saída que seja "Truthy / Falsey" . Você pode tentar se conectar a qualquer site existente, a seu critério (não use um site obscuro que tenha apenas 10% de tempo de atividade - tente manter acima de 80% de tempo de atividade anual). Se o site estiver inativo, seu programa não precisa funcionar.
Deve ser um programa independente ou uma função . Você pode usar bibliotecas fora da biblioteca padrão para conseguir isso. As brechas padrão são proibidas. Esse é o código golf, portanto o código com a menor contagem de bytes vence.
Exemplo de pseudocódigo:
function a:
try:
connect to internet
return 1
catch error:
return 0
Este é o meu primeiro post sobre código de golfe, por isso, se isso violar alguma regra ou for um tolo, por favor me avise.
EDIT: Devido a inúmeras sugestões, removi a restrição de contagem de bytes UTF-8
fonte
true
efalse
, recomendo permitir que qualquer um de nossos padrões seja verdade e falsidade . Além disso, por internet, você quer dizer a rede fora da sua rede local? Os programas ainda precisam funcionar se o Google estiver inativo ou em outro site grande?g.gl
/http://g.gl/
, masto.
/http://to./
parece ser um byte mais curto (nem todos os idiomas o veem como um URL válido).PRINT "0"
Respostas:
Bash (com dnsutils ), 3 bytes
Envia uma solicitação de DNS para "." (Raiz do DNS), o código de saída é 0 para obter sucesso e> 0 em caso contrário.
Golfe
Teste
aviso Legal
Obviamente, isso só funcionará se o servidor DNS estiver na rede do provedor, ou seja, na "Internet" (como a rede do provedor normalmente faz parte dela) ou se o sistema estiver usando um servidor DNS público (como 8.8.8.8 do Google, que os sistemas baseados no Android usam), caso contrário, você pode obter uma cópia em cache de um servidor LAN local (ou host local).
Mas suponho que isso não seja contrário às regras do código-golfe , pois obviamente há mais de um sistema em que isso funciona como pretendido.
Os métodos de HTTP puro também podem fornecer falsos positivos, devido a um proxy de armazenamento em cache intermediário, e não é garantido que funcionem em todos os lugares, portanto, isso não é algo exclusivo desse método.
Uma versão um pouco mais confiável, 8 bytes
(uma pequena homenagem a @ Dig ital Tra uma!)
Ativa o "modo de rastreamento", que forçará a escavação a fazer a pesquisa recursiva por si só (consulte https://serverfault.com/a/778830 ), evitando problemas de cache.
fonte
man dig
: A menos que seja solicitado a consultar um servidor de nomes específico, o dig tentará cada um dos servidores listados em /etc/resolv.conf . Se nenhum endereço de servidor utilizável for encontrado, o dig enviará a consulta ao host local .Utilitários Bash + GNU, 8
As outras respostas do shell verificam o código de retorno e ecoam alguma saída de status de acordo. Isso é desnecessário. O código de retorno do shell já é um código Truthy / Falsey utilizável e acessível no
$?
parâmetro que é idiomático para o bash. O código de retorno 0 significa True. Código de retorno> 0 significa Falso.Em uso:
fonte
to.
vez de8.8.8.8
, para economizar bastante.to
que o resolvedor está configurado para encontrar, ainda vai para o caminho certo (e talvez ser capaz de ping em um local,to
é o suficiente de estar conectado à internet )to
às vezes funciona e às vezes não. Eu acho que algum cache está acontecendo. Vou usarto.
apenas por segurança.Lote, 8 bytes
ping
será definidoERRORLEVEL
como1
se o endereço não puder ser resolvido ou alcançado.fonte
05AB1E ,
119 bytes2 bytes salvos em "para". cortesia de ev3commander
Verifica se o tamanho do conteúdo em http: // to . é maior que 1.
.w
retorna 0 em erro.fonte
MATL ,
1514 bytesUm byte salvo graças a Kevin Cruijssen sugestão de
A saída é feita por STDOUT. Isso exibe uma seqüência de caracteres não vazia contendo caracteres diferentes de zero (que é verdade) se houver uma conexão com a Internet; e não exibe nada (o que é falso) se não houver conexão.
Isso não pode ser testado on-line porque
Xi
não é permitido nos intérpretes on-line.Explicação
fonte
urlread('http://g.gl')
uma resposta correta por si só? Irá um erro e deixará a área de trabalho vazia se a conexão estiver inoperante. Ele exibirá uma mensagem de erro, mas tecnicamente isso é para STDERR ...? Eu pensei que era um pouco exagerado, então eu fiz dessa maneira . Mas pulartry
parece dar o mesmo resultado que o seu código, ou? Você deixa a pilha vazia também, não é? Resposta agradável pelo caminho ... :)urlread('http://g.gl')
é válido (e é o mesmo que o meu código faz), como STDERR é ignorado por padrão, e um STDOUT vazio é Falsas no MATLABftp
vez dehttp
- salvar outro byte?ftp
do doesn parecem trabalhar para que o siteBash
666221 bytesObrigado @Alex L. pela dica de redução de URL.
Versão não destruída:
Esta é a minha primeira resposta no Bash, não tenho certeza se reduzi o script o suficiente.
fonte
echo $?
invés dessa declaração if inteira.;
na linha do golfe.echo $?
imprime um0
if success, ou então retorna a2
nesse caso. Eu não olhei para o código-fonte da implementação de,ping
mas estou assumindo, existem diferentes códigos de retorno, dependendo do status. Por isso, useiif else
estratégia.R, 20 bytes
Há uma função para exatamente essa tarefa no
curl
pacote.fonte
function() !is.null(nslookup("r-project.org", error = FALSE))
httr::url_ok('g.gl')
(embora obsoleta).Java, 72 bytes
fonte
java.net.InetSocketAddress
Perl, 15 bytes
Correr com:
curl
produz coisasSTDERR
, não se importe com elas. Se o computador tiver acesso à Internet, ele imprimirá algumas linhas de html (verdade), caso contrário, ele não imprimirá nada (falso).Salvei 1 bytes usando
to.
(em vez do meu anteriorb.io
) graças a @Kevin Cruijssen.fonte
print
?wget
vez de,curl
mas é a mesma coisa)).C #, 87 bytes
Se uma exceção é considerada falsey, o que eu não acho que seja, então são 65 bytes:
Também tentei usar o link,
http://to.
conforme indicado por @KevinCruijssen, mas ele não parecia funcionar.fonte
8 ,
2321 bytesDois bytes salvos graças à sugestão de Kevin Cruijssen e à minha descoberta:http: // parece funcionar tão bem quantohttp: // para . (salvando outro byte)
Se o site http: // to puder ser acessado, ele será impresso
true
. Caso contrário, ele imprimefalse
. Ele deixa os dados recuperados na pilha.fonte
MATLAB,
3222 bytesExplicação:
Se a conexão à Internet estiver ativa, isso resultará em
ans
(a variável padrão) uma string com todo o código html em texto sem formatação (o que é verdadeiro no MATLAB).Se a conexão à Internet estiver inativa, isso gravará uma mensagem de erro no STDERR e deixará a área de trabalho vazia (o que é falso no MATLAB).
Infelizmente,
urlread
requer um endereço de URL completo , portantog.gl
não é suficiente. 11 dos 22 bytes são, portanto, apenas o endereço da URL.Abordagem alternativa:
Uma solução que captura o erro e deixa um 0 (também falso ) no espaço de trabalho se a conexão estiver inoperante:
0;
inicializa a variável padrãoans
para0
, que estáfalse
em MATLAB. Então vamostry
ler o URL. Isso causará um erro se a conexão à Internet estiver inativa ou uma matriz de caracteres, se não (que estátrue
no MATLAB).Não precisamos pegar nada, então acabamos. Se a chamada urlread foi bem-sucedida,
ans
haverá uma longa sequência com o conteúdo do site, caso contrárioans=0
.fonte
Bash, 39 bytes
fonte
! exec 4<>/dev/tcp/to./80;echo $?
exec 4<>/dev/tcp/to./80
JavaScript ES6,
7143 bytesAlertas 1 se online, alerta uma string vazia se estiver offline. Agradeço a Patrick Roberts por me ajudar a eliminar alguns bytes
Versão antiga
Alertas
[object Reponse]
se online, alertas0
se offlineRemovido o trecho de código, ele não funciona porque é carregado de um domínio diferente sem o CORS, mas funciona no console do navegador
fonte
fetch('://to.').then(a=>alert(1)).catch(a=>alert(0))
JavaScript ES6,
9081 bytesJavaScript ES6,
2221 bytes (inválido)Alguns navegadores não oferecem suporte total ou produzem o resultado esperado ao usar o navigator.onLine.
fonte
f=a=>
f=
.a=>{with(new Image()){src="//placehold.it/1x1";onload=b=>a(1);onerror=c=>a()}}´ (got rid of
f = `e usadowith(){}
)Scala, 54 bytes
Bem simples; executa um comando ping em
http://ai./
e retorna true se sair com 0 ou false caso contrário.fonte
Brainfuck (não concorrente) 21 bytes
O Brainfuck não pode se conectar à Internet (pelo que sei); portanto, como o programa não consegue se conectar, a resposta é sempre
0
Não concorrente porque parece estar dentro da brecha padrão de saída codificada , mesmo que este programa tecnicamente esteja correto para o desafio.
fonte
Powershell,
642623 bytesEconomizou 38 bytes, graças a Shawn Esterman
Economizou 3 bytes e script reparado, graças ao briantist
fonte
to.
, você precisaria usarg.gl
. Além disso, você pode reduzi-lo paraTest-Connection -q g.gl
.PHP, 23PHP + Ondulação, 14Usando o operador backtick do PHP:
Resposta original:
Vou tentar começar:
Isso não produz nada se x.gl não puder ser alcançado e
Array
se for.Outra versão em que não tenho certeza se eles se encaixam:
fonte
"Array"
quando você tenta imprimi-lo (<?=
) e o boolean false será convertido em""
. Portanto, o valor de retorno real não é uma matriz, mas uma sequência não vazia ou uma sequência vazia.if ("Array") echo 'thruthy';
seriam tomadas, portanto, é truthy . A cadeia vazia não pegaria o galho e, portanto, é falsa.Solicitações Python 3 +,
595553 bytesTem que haver uma resposta de pedidos, certo?
O status de saída é 0 para internet, 1 para não internet. Exemplo:
Changelog:
fonte
ftp
, talvez) e fazendoexcept:0/0
.Elixir, 33 bytes
0 se conectado, 1 caso contrário.
fonte
PowerShell , 12 bytes
fonte
Mathematica 10 Bytes
Supondo que você tenha uma cópia válida do Mathematica e credenciais de login em user.wolfram.com
gravará o valor 1 na nuvem. Verdade: CloudObject [""] Falsey: $ Falha
Retornará o valor 1 que foi carregado na nuvem.
fonte
&
depois para transformá-lo em uma função sem nome.CloudPut@1&===$Failed
& não faz absolutamente nenhuma diferença. Por fim, o programa retorna e imprime a saída, portanto, não é de fato um trecho REPL, como você sugere.Python 2.7, 70
77bytesUsa 1 para verdade, 0 para falsidade. O a.uk redireciona para uma empresa de roupas para motocicletas. Economizou 3 bytes atribuindo a uma variável e imprimindo isso. E outro para o "to". truque (confirmado para trabalhar com urllib), dois para se livrar dos recuos traquinas.fonte
from urllib import*
poderia salvar um char (e soltar, él.
claro).import
e*
então eu acho que você está certo, mas eu estou no celular e eu vou corrigi-lo mais tardeJulia + Bash (com dnsutils), 10 bytes
`command`
em julia cria umcmd
objeto que pode ser executadorun
.fonte
Clojure, 49 bytes
Retorna
1
se ele pode se conectar e,nil
caso contrário.Apenas tentativas para
slurp
a página; lançando umaNoRouteToHostException
exceção em caso de falha, que é capturada.Infelizmente, o protocolo e o ponto parecem ser obrigatórios.
fonte
Javascript (Nashorn), 61 bytes
Baseado na resposta Java do Huntro.
fonte