Escriba un programa que, de acuerdo con si el script tiene acceso a Internet, produce una salida que es "Truthy / Falsey" . Puede intentar conectarse a cualquier sitio existente, a su propia discreción (no use un sitio sombreado que solo tenga un tiempo de actividad del 10%; intente mantener un tiempo de actividad anual superior al 80%). Si el sitio está caído, su programa no tiene que funcionar.
Debe ser un programa independiente o una función . Puede usar bibliotecas fuera de la biblioteca estándar para lograr esto. Las lagunas estándar están prohibidas. Este es el código de golf, por lo que gana el código con el conteo de bytes más corto.
Pseudocódigo de ejemplo:
function a:
try:
connect to internet
return 1
catch error:
return 0
Esta es mi primera publicación en el código de golf, por lo que si esto viola alguna regla de alguna manera o es un engaño, por favor avísenme.
EDITAR: Debido a numerosas sugerencias, he eliminado la restricción de conteo de bytes UTF-8
fuente
true
yfalse
, recomiendo permitir cualquiera de nuestros valores predeterminados de veracidad y falsedad . Además, por internet, ¿se refiere a la red fuera de su red local? ¿Los programas todavía tienen que funcionar si Google dice que está inactivo o cualquier otro sitio grande?g.gl
/http://g.gl/
, peroto.
/http://to./
parece ser un byte más corto (no todos los idiomas lo ven como una URL válida).PRINT "0"
Respuestas:
Bash (con dnsutils ), 3 bytes
Envía una solicitud DNS para "." (Raíz DNS), el código de salida es 0 para el éxito y> 0 en caso contrario.
Golfed
Prueba
Descargo de responsabilidad
Obviamente, esto solo funcionará si su servidor DNS está en la red del proveedor, es decir, en "Internet" (ya que su red de proveedor normalmente forma parte de él), o si su sistema está utilizando un servidor DNS público (como 8.8.8.8 de Google, que usan los sistemas basados en Android), de lo contrario, puede obtener una copia en caché de un servidor LAN local (o localhost).
Pero supongo que esto no va en contra de las reglas del código de golf , ya que obviamente hay más de un sistema en el que esto funciona según lo previsto.
Los métodos HTTP puros también pueden dar falsos positivos, debido a un proxy de almacenamiento en caché intermedio, y no se garantiza que funcionen en todas partes, por lo que no es algo exclusivo de este método.
Una versión un poco más confiable, 8 bytes
(Un pequeño homenaje a @ Dig ital Tra uma!)
Habilita el "modo de rastreo", que obligará a cavar a hacer la búsqueda recursiva por sí mismo (consulte https://serverfault.com/a/778830 ), evitando cualquier problema de caché.
fuente
man dig
: A menos que se le indique que consulte un servidor de nombres específico, dig intentará con cada uno de los servidores enumerados en /etc/resolv.conf . Si no se encuentran direcciones de servidor utilizables, dig enviará la consulta al host local .Bash + GNU utils, 8
Las otras respuestas de shell comprueban el código de retorno y hacen eco de alguna salida de estado en consecuencia. Esto es innecesario El código de retorno de shell ya es un código utilizable de Truthy / Falsey y accesible en el
$?
parámetro que es idiomático para bash. El código de retorno 0 significa verdadero. El código de retorno> 0 significa falso.En uso:
fuente
to.
lugar de8.8.8.8
, para ahorrar bastante.to
que el resolutor esté configurado para buscar, seguirá yendo al correcto (y tal vez poder hacer ping a un localto
es suficiente para estar conectado a Internet )to
veces funciona y a veces no. Supongo que hay algo de caché. Lo usaréto.
solo por seguridad.Lote de 8 bytes.
ping
estableceráERRORLEVEL
a1
si la dirección no se puede resolver o alcanzado.fuente
05AB1E ,
119 bytesGuardado 2 bytes en "a". cortesía de ev3commander
Comprueba si la longitud del contenido en http: // a . es mayor que 1.
.w
devuelve 0 en caso de error.fuente
MATL ,
1514 bytesUn byte guardado gracias a la sugerencia de Kevin Cruijssen
La salida es a través de STDOUT. Esto muestra una cadena no vacía que contiene caracteres distintos de cero (lo cual es cierto) si hay una conexión a Internet; y no muestra nada (lo cual es falso) si no hay conexión.
Esto no se puede probar en línea porque
Xi
no está permitido en los intérpretes en línea.Explicación
fuente
urlread('http://g.gl')
que es una respuesta correcta por sí misma? Se producirá un error y dejará el espacio de trabajo vacío si la conexión no funciona. Mostrará un mensaje de error, pero técnicamente eso es para STDERR ...? Pensé que era un poco exagerado, así que lo hice de esta manera . Pero saltartry
parece dar el mismo resultado que tu código, o? Dejas la pila vacía también, ¿no? Buena respuesta por cierto ... :)urlread('http://g.gl')
es válido (y es el mismo que mi código), ya que STDERR se ignora por defecto y un STDOUT vacío es falso en MATLABftp
lugar dehttp
- guardar otro byte?ftp
no parece funcionar para ese sitioBash
666221 bytesGracias @Alex L. por el consejo de acortamiento de URL.
Versión sin golf:
Esta es mi primera respuesta en Bash, no estoy seguro de haber acortado lo suficiente el script.
fuente
echo $?
lugar de esa declaración if completa.;
en la línea de golf.echo $?
imprime un0
éxito, o de lo contrario devuelve un2
en este caso. No he examinado el código fuente de la implementación,ping
pero supongo que hay diferentes códigos de retorno dependiendo de la situación. Por lo tanto, usé laif else
estrategia.R, 20 bytes
Hay una función para exactamente esta tarea en el
curl
paquete.fuente
function() !is.null(nslookup("r-project.org", error = FALSE))
httr::url_ok('g.gl')
(aunque en desuso).Java, 72 bytes
fuente
java.net.InetSocketAddress
Perl, 15 bytes
Corre con:
curl
salidas de productosSTDERR
, no les importa. Si la computadora tiene acceso a Internet, imprimirá algunas líneas de html (verdadero), de lo contrario, no imprimirá nada (falso).Ahorré 1 bytes usando
to.
(en lugar de mi anteriorb.io
) gracias a @Kevin Cruijssen.fuente
print
?wget
lugar decurl
pero es lo mismo)).C #, 87 bytes
Si una excepción se considera falsey, que no creo que sea, entonces son 65 bytes:
También intenté usar el enlace
http://to.
según lo indicado por @KevinCruijssen pero no pareció funcionar.fuente
8 ,
2321 bytesDos bytes guardados gracias a la sugerencia de Kevin Cruijssen y a mi descubrimiento:http: // parece funcionar tan bien comohttp: // a . (guardando otro byte)
Si se puede acceder al sitio http: // to , se imprime
true
. De lo contrario, se imprimefalse
. Deja los datos recuperados en la pila.fuente
MATLAB,
3222 bytesExplicación:
Si la conexión a Internet está activa, esto dará como resultado
ans
(la variable predeterminada) una cadena con todo el código html en texto plano (lo cual es cierto en MATLAB).Si la conexión a Internet no funciona, esto escribirá un mensaje de error en STDERR y dejará el espacio de trabajo vacío (que es falso en MATLAB).
Desafortunadamente,
urlread
requiere una dirección URL completa , porg.gl
lo que no es suficiente. 11 de los 22 bytes son, por lo tanto, solo la dirección URL.Enfoque alternativo:
Una solución que detecta el error y deja un 0 (también falso ) en el espacio de trabajo si la conexión no funciona:
0;
inicializa la variable predeterminadaans
a0
, que estáfalse
en MATLAB. Luego vamostry
a leer la url. Esto dará un error si la conexión a Internet no funciona, o una matriz de caracteres si no (que estátrue
en MATLAB).No necesitamos atrapar nada, así que simplemente terminamos. Si la llamada urlread fue exitosa, entonces
ans
será una cadena larga con el contenido del sitio web, de lo contrarioans=0
.fuente
Bash, 39 bytes
fuente
! exec 4<>/dev/tcp/to./80;echo $?
exec 4<>/dev/tcp/to./80
JavaScript ES6,
7143 bytesAlertas 1 si está en línea, alerta una cadena vacía si está fuera de línea. Gracias a Patrick Roberts por ayudarme a eliminar algunos bytes
Versión antigua
Alertas
[object Reponse]
si está en línea, alertas0
si está fuera de líneaSe eliminó el fragmento de código, no funciona porque se carga desde un dominio diferente sin CORS, pero funciona en la consola del navegador
fuente
fetch('://to.').then(a=>alert(1)).catch(a=>alert(0))
JavaScript ES6,
9081 BytesJavaScript ES6,
2221 bytes (no válido)Algunos navegadores no son totalmente compatibles o no producen el resultado esperado cuando se utiliza navigator.onLine.
fuente
f=a=>
f=
.a=>{with(new Image()){src="//placehold.it/1x1";onload=b=>a(1);onerror=c=>a()}}´ (got rid of
f = `y usadowith(){}
)Scala, 54 bytes
Bastante simple; ejecuta un comando ping a
http://ai./
, y devuelve verdadero si sale con 0, o falso en caso contrario.fuente
Brainfuck (no competidor) 21 bytes
Brainfuck no puede conectarse a Internet (por lo que yo sé), por lo que como el programa no puede conectarse, la respuesta es siempre
0
No compite porque parece caer dentro del vacío estándar de salida codificado , a pesar de que este programa técnicamente es correcto para el desafío.
fuente
Powershell,
642623 bytesAhorró 38 bytes, gracias a Shawn Esterman
Guardado 3 bytes y script reparado, gracias a briantist
fuente
to.
, deberías usarlog.gl
en su lugar. Además puedes acortarlo aTest-Connection -q g.gl
.PHP, 23PHP + Curl, 14Usando el operador de backtick de PHP:
Respuesta original:
Intentaré comenzar:
Esto no genera nada si no se puede alcanzar x.gl y
Array
si lo es.Otra versión donde no estoy muy seguro si encajan:
fuente
"Array"
cuando intentas imprimirla (<?=
) y boolean false se convertirá a""
. Por lo tanto, el valor de retorno real no es una matriz, sino una cadena no vacía o una cadena vacía.if ("Array") echo 'thruthy';
tomaría una rama , por lo tanto, es verdad . La cadena vacía no tomaría la rama y, por lo tanto, es falsey.Python 3 + solicitudes,
595553 bytesTiene que haber una respuesta de solicitud, ¿verdad?
El estado de salida es 0 para internet, 1 para no internet. Ejemplo:
Registro de cambios:
fuente
ftp
quizás) y haciendoexcept:0/0
.Elixir, 33 bytes
0 si está conectado, 1 de lo contrario.
fuente
PowerShell , 12 bytes
fuente
Mathematica 10 Bytes
Suponiendo que tiene una copia válida de Mathematica y credenciales de inicio de sesión en user.wolfram.com
escribirá el valor 1 en la nube. Verdad: CloudObject [""] Falsey: $ Failed
Devolverá el valor 1 que se cargó en la nube.
fuente
&
después para convertirlo en una función sin nombre.CloudPut@1&===$Failed
el & no hace absolutamente ninguna diferencia. Por último, el programa devuelve e imprime la salida, por lo que, de hecho, no es un fragmento REPL como usted sugiere.Python 2.7, 70
77BytesUtiliza 1 para la verdad, 0 para la falsedad. a.uk redirige a una empresa de ropa de motos. Se guardaron 3 bytes al asignar a una variable e imprimir eso. Y otro para el "a". truco (confirmado para trabajar con urllib), dos para deshacerse de los molestos sangrados.fuente
from urllib import*
podría ahorrar un char (y caer,l.
por supuesto).import
y*
por lo que creo que tienes razón, pero estoy en el móvil y lo arreglaré más tardeJulia + Bash (con dnsutils), 10 bytes
`command`
en julia crea uncmd
objeto con el que se puede ejecutarrun
.fuente
Clojure, 49 bytes
Devuelve
1
si se puede conectar, y de lonil
contrario.Solo intenta
slurp
la página; lanzando unaNoRouteToHostException
excepción en caso de falla, que se detecta.Desafortunadamente, el protocolo y el punto parecen ser obligatorios.
fuente
Javascript (Nashorn), 61 bytes
Basado en la respuesta Java de Huntro.
fuente