Err, onde estou?

26

Ah não! Estou preso em uma grande floresta (ok, na verdade não, mas apenas assuma) e não sei onde estou!

Felizmente, eu trouxe meu laptop. Mas quando pesquisei 'Maps', dizia 'Sem resultados', e estou perguntando isso como último recurso.

Faça um programa que mostre a longitude e latitude da minha localização em qualquer formato de dois números. any two number formatinclui:

  • Uma tupla.
  • Uma sequência que inclui a longitude e a latitude.
  • Um objeto JSON.
  • etc ..

Qualquer API ou bibliotecas podem ser usadas. Ou seja, você pode consultar o Google Maps etc. (acho que eles não jogaram na lixeira suas APIs: \)

Matthew Roh
fonte
19
PowerShell tem glpara Get-Location, infelizmente, eu não acho que C:\Users\Connorvai ajudá-lo a escapar da floresta muito.
Colsw
C: \ Users \ @Connor> sudo yes
Matthew Roh

Respostas:

72

Mathematica, 4 bytes

Err, onde estou?

Here

Avalia como GeoPosition[{latitude, longitude}].

Martin Ender
fonte
5
o_O Mathematica tinha um builtin para isso?
Matthew Roh
4
@SIGSEGV Claro ... (trecho # 4)
Martin Ender
33
Mathematica tem um builtin para tudo
Skidsdev
10
Ainda melhor: o comando Sunset[Here] - Nowretorna corretamente a quantidade de tempo até o pôr do sol.
Greg Martin
4
Estou divertido de ver uma resposta com mais votos do que a pergunta. Parabéns 👏👏👏
Matthew Roh
11

JavaScript (ES6), 89 82 bytes

navigator.geolocation.watchPosition(x=>alert([(y=x.coords).latitude,y.longitude]))

Experimente online! (Por algum motivo, isso não estava funcionando no snippet).

Explicação

navigatorO objeto faz parte da lista técnica . geolocationé uma propriedade sua e também é um objeto, que contém dados de geolocalização do usuário. watchPosition()é um método de geolocationobjeto. Ele utiliza uma função de retorno de chamada que é executada após a recuperação dos dados de localização geográfica. A função de retorno de chamada x=>alert((y=x.coords).latitude+","+y.longitude)é uma função anônima (lambda) que recebe um objeto xe alert()são as propriedades latitudee separadas por uma vírgula. Observe que o objeto é passado para a função de retorno de chamada quando a função de retorno de chamada é chamada (ou seja, após a recuperação dos dados de localização geográfica). longitudex.coordsxwatchPosition()


Nota: Os dados de localização geográfica são baseados no GPS, se o GPS estiver disponível; caso contrário, serão baseados no IP.

Arjun
fonte
2
watchPositionem vez de getCurrentPositionsalva 5 bytes. alert([(y=x.coords).latitude,y.longitude])economiza mais 2
Johan Karlsson
1 caractere menor, gera um erro:for(f in r=navigator.geolocation)r=r[f](x=>alert((y=x.coords).latitude+","+y.longitude))
user2428118 5/17/17
3
É uma ocasião rara, de fato, quando o JS pode ser competitivo, contando com nomes de propriedades excessivamente longos.
Shaggy
@JohanKarlsson Thanks! Implementado!
Arjun
@ Shaggy True, de fato.
Arjun
8

Python com solicitações, 101 100 75 bytes

4 bytes salvos graças a @ КириллМалышев

21 bytes salvos graças a @Rod

from requests import*;print(get('http://su0.ru/auls').text.split(',')[5:7])
Uriel
fonte
Se este for Python 2, você pode economizar 1 byte, removendo o parêntese
Wondercricket
Talvez seja melhor usar um URL curto? Por exemplo, su0.ru/auls . Então você salvará 4 bytes.
Кирилл Малышев
Você não precisa de toda essa formatação, from requests import*;print(get('http://ip-api.com/json').text.split(',')[5:7])deve ser suficiente
Rod
O link está quebrado! Se você usar um encurtador de URL, é melhor usar um encurtador já estabelecido.
19418 Jakob
5

PowerShell, 130 bytes

Add-Type -A System.Device;($a=[Device.Location.GeoCoordinateWatcher]::new()).Start();for(;($b=$a|% Po*n|% L*)|% I*){}$b|select L*e

Ungolfed:

Add-Type -AssemblyName System.Device #Required to access System.Device.Location namespace
$GeoWatcher = New-Object System.Device.Location.GeoCoordinateWatcher #Create the required object
$GeoWatcher.Start() #Begin resolving current locaton
whille ($GeoWatcher.Status -ne "Ready") do { sleep -Milliseconds 100 } #Wait for discovery.
$GeoWatcher.Position.Location | Select Latitude,Longitude #Select the relevent results.

Retorna como:

PS C:\users\sweeneyc\Desktop> Add-Type -A System.Device;($a=[Device.Location.GeoCoordinateWatcher]::new()).Start();for(;($b=$a|% Po*n|% L*)|% I*){}$b|select L*e

        Latitude         Longitude
        --------         ---------
53.4064177191653 -6.36202495701332

Acontece que existe uma maneira de fazer isso, mas não é tão bonito.

bônus: abre o Google Maps em sua localização atual.

Add-Type -A System.Device;($a=[Device.Location.GeoCoordinateWatcher]::new()).Start();for(;($b=$a|% Po*n|% L*)|% I*){};saps "https://www.google.ie/maps/@$($b.Latitude),$($b.Longitude)z"

poderia economizar 3 bytes usando, TryStartmas gera um truepara o pipeline e custa mais para suprimir isso.

Add-Type -A System.Device;($a=[Device.Location.GeoCoordinateWatcher]::new()).TryStart($true,[int]9e8);$a|% Po*n|% L*|select L*e

PowerShell (não concorrente), 44 bytes

(irm freegeoip.net/xml).Response|select *ude

Usa um serviço externo, pois o PowerShell não possui recursos internos para 'local atual' - esse é um local geográfico baseado em IP; portanto, quase definitivamente não retornará sua localização real, ele retornará um local 'padrão' para o seu ISP e, se você executar isso em uma VPN será apresentado onde estiver o ponto de saída.

Eu tentei (não como um exercício de golfe) fazer com que a API do google maps funcionasse com o método de geolocalização sem fio, mas está longe de ser preciso ou jogável.

marcado como não concorrente devido à imprecisão dos resultados.

PS C:\Users\sweeneyc> (irm freegeoip.net/xml).Response|select *ude
Latitude Longitude
-------- ---------
53.3472  -6.2439

isso é exibido Central Dublin, Irelandquando procurado, mas atualmente estou um pouco fora do centro da cidade, a cerca de 13 quilômetros do ponto retornado.

colsw
fonte
No C #, GeoCoordinateWatcherexiste um TryStartmétodo que você pode tentar, que parece que retorna quando o status é em Readyvez de repetir. Se esse método estiver disponível, obviamente.
TheLethalCoder
1
O @TheLethalCoder foi a primeira coisa em que olhei, adicionado no exemplo, ele salva apenas 3 bytes no geral, mas despeja um trueno pipeline antes que eu possa produzir o lat / long, e acho que provavelmente viola as especificações quando é produzido .
colsw
@TheLethalCoder poderia viabilizar salvar um byte (s) na [int]9e8parte quando você definir o tempo limite em TryStartmas eu não posso obtê-lo para trabalhar com 9999999e [int]9e8é o mesmo que adicionar um extra 9.
colsw
2

(não concorrente) Angolf , 110 107 bytes

❦™navigator.geolocation.getCurrentPosition#x=>™alert##y=x.coords▷.latitude+","+y.longitude▷▷●
    ❦                                   Define an IIFE
       ™                                Get the scope
         navigator                      Get JavaScript's navigator object from the scope
             geolocation                Get the geolocation property of the navigator object
                 getCurrentPosition     Get the current position and execute a function
                     x=>                Define a function with x as a parameter
                         ™              Get the scope
                            alert       Call alert and alert the following string:
                         #y=x.coords▷ Define y with the value of the coordinates of x
                         latitude       Get y's latitude
                         +","           Append "," to the string
                         +y.longitude   Append the longitude to the string
    ●                                   Close the IIFE and call it with the scope
thatoneuser
fonte
1
Bem vindo ao site! Não consigo encontrar nenhuma informação sobre Angolf; você se importaria de vincular seu site?
ETHproductions
github.com/XtremePlayzCODE/angled/blob/master/angolf.js , Desculpe pela resposta tardia
thatoneuser 6/17
1
Bem vindo ao site! você tem um link mais antigo que esse? caso contrário, o idioma é considerado mais novo que o desafio. é o costume para marcar respostas em línguas mais recentes do que o desafio com (não concorrentes) no título
Destrutível Lemon
Eu tive Angolf por 3 meses, mas agora eu só agora o upload para o GitHub, uma vez que não tinha um link antes
thatoneuser
Infelizmente, neste idioma, os idiomas precisam ser publicados para serem marcados como "concorrentes", por favor, marque-o como não-competitivo (isso significa que você pode participar e angariar votos, mas você será considerado como uma marca de tique aceita.
Rohan Jhunjhunwala
0

C #, 132 bytes

_=>{var w=new System.Device.Location.GeoCoordinateWatcher();w.Start();var c=w.Position.Location;return c.Longitude+","+c.Latitude;};
TheLethalCoder
fonte
0

Excel VBA (Windows, Office 2016 ou superior), 278 272 bytes

Restrito ao Windows, Office 2016+ para uso do Microsoft.Mashup.OleDb.1provedor

subRotina completa que não recebe entrada e gera sua localização atual como uma Excel.ListObjecttabela digitada, incluindo informações extras.

Sub a
ThisWorkbook.Queries.Add"x","let S=Json.Document(Web.Contents(""su0.ru/auls""))in S
With Sheet1.ListObjects.Add(0,"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=x",,,[A1]).QueryTable
.CommandText="SELECT * FROM [x]
.Refresh
End With
End Sub

Saída de exemplo excluída por razões óbvias.

-2 bytes para uso de [Sheet1]mais deSheets(1)

Taylor Scott
fonte
0

Swift 4 , 125 117 96 bytes

Infelizmente, isso só pode ser testado localmente.

import CoreLocation;var c=CLLocationManager().location!.coordinate;print(c.longitude,c.latitude)
Mr. Xcoder
fonte