Err, dove sono io?


26

Oh no! Sono intrappolato in una grande foresta (Okay, non proprio, ma supponilo) e non so dove sono!

Per fortuna, ho portato il mio laptop. Ma quando ho cercato "Maps", ha detto "Nessun risultato" e lo sto chiedendo come ultima risorsa.

Si prega di creare un programma che trasmetta la longitudine e la latitudine della mia posizione in qualsiasi formato di due numeri. any two number formatcomprende:

  • Una tupla.
  • Una stringa che include la longitudine e la latitudine.
  • Un oggetto JSON.
  • eccetera..

È possibile utilizzare qualsiasi API o libreria. Cioè, puoi eseguire query su Google Maps, ecc. (Immagino che non abbiano eliminato le loro API: \)


19
PowerShell ha glper Get-Location, purtroppo non credo che C:\Users\Connorti aiuteranno a fuggire nella foresta molto.
Colsw,

C: \ Users \ @Connor> sudo yes
Matthew Roh,

Risposte:


72

Mathematica, 4 byte

Err, dove sono io?

Here

Valuta a GeoPosition[{latitude, longitude}].


5
o_O Mathematica aveva una soluzione per questo?
Matthew Roh,

4
@SIGSEGV Certo ... (snippet # 4)
Martin Ender

33
Mathematica ha tutto per

10
Ancora meglio: il comando Sunset[Here] - Nowrestituisce correttamente la quantità di tempo fino al tramonto.
Greg Martin,

4
Sono divertito nel vedere una risposta con più voti della domanda. Congratulazioni
Matthew

11

JavaScript (ES6), 89 82 byte

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

Provalo online! (Per qualche motivo, questo non funzionava nello snippet).

Spiegazione

navigatorL'oggetto fa parte della DBA . geolocationè una sua proprietà ed è anche un oggetto, che contiene dati geografici dell'utente. watchPosition()è un metodo di geolocationoggetto. Accetta una funzione di callback che viene eseguita dopo il recupero dei dati geografici. La funzione di callback x=>alert((y=x.coords).latitude+","+y.longitude)è una funzione anonima (lambda) che accetta un oggetto xe alert()le proprietà latitudee longitudesono x.coordsseparate da una virgola. Si noti che l'oggetto xviene passato alla funzione di richiamata watchPosition()quando viene chiamata la funzione di richiamata (cioè dopo il recupero dei dati geografici).


Nota: i dati geografici sono basati sul GPS se il GPS è disponibile, altrimenti è basato sull'IP.


2
watchPositioninvece di getCurrentPositionsalvare 5 byte. alert([(y=x.coords).latitude,y.longitude])ne salva altri 2
Johan Karlsson

1 carattere più corto, genera un errore:for(f in r=navigator.geolocation)r=r[f](x=>alert((y=x.coords).latitude+","+y.longitude))
user2428118

3
È davvero un'occasione rara in cui JS può essere competitivo facendo affidamento sui nomi di proprietà troppo lunghi.
Shaggy,

@JohanKarlsson Grazie! Lo ha implementato!
Arjun,

@Shaggy Vero, davvero.
Arjun,

8

Python con richieste, 101 100 75 byte

4 byte salvati grazie a @ КириллМалышев

21 byte salvati grazie a @Rod

from requests import*;print(get('http://su0.ru/auls').text.split(',')[5:7])

Se questo è Python 2, puoi salvare 1 byte rimuovendo la parentesi
Wondercricket

Forse è meglio usare un breve URL? Ad esempio, su0.ru/auls . Quindi risparmierai 4 byte.
Кирилл Малышев,

Non hai bisogno di tutta questa formattazione, from requests import*;print(get('http://ip-api.com/json').text.split(',')[5:7])dovrebbe essere sufficiente
Rod

Il collegamento è interrotto! Se hai intenzione di utilizzare un accorciatore di URL, è meglio utilizzarne uno affermato.
Jakob,

5

PowerShell, 130 byte

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.

Ritorna come:

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

Si scopre che c'è un modo per farlo, ma non è così carino.

bonus: apre google maps sulla posizione corrente.

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"

potrebbe salvare 3 byte usando TryStartma genera un output truenella pipeline e costa di più per sopprimerlo.

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

PowerShell (non competitivo), 44 byte

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

Utilizza un servizio esterno poiché PowerShell non ha built-in interni per la "posizione corrente": si tratta di una geolocalizzazione basata su IP, quindi quasi sicuramente non restituirà la posizione effettiva, restituirà una posizione "predefinita" per il tuo ISP e se esegui questo su una VPN sarà presente ovunque si trovi il punto di uscita.

Ho provato (non come un esercizio di golf) a far funzionare l'API di google maps con il metodo di geolocalizzazione dell'indirizzo wireless mac, ma è tutt'altro che preciso o giocabile.

contrassegnato come non competitivo a causa della inesattezza dei risultati.

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

questo viene visualizzato Central Dublin, Irelandquando cercato, tuttavia sono un po 'fuori dal centro città, a circa 8 miglia dal punto di ritorno.


In C # GeoCoordinateWatcherha un TryStartmetodo che potresti provare che sembra che ritorni quando lo stato è Readyinvece di eseguire il ciclo su di esso. Se questo metodo è disponibile ovviamente.
TheLethalCoder

1
@TheLethalCoder è stata la prima cosa che ho esaminato, aggiunta nell'esempio lì, salva solo 3 byte complessivi, ma scarica un truegasdotto prima che io possa emettere il lat / long e penso che probabilmente viola le specifiche quando viene emesso .
Colsw,

@TheLethalCoder potrebbe salvare in modo fattibile un byte nella [int]9e8parte quando si imposta il timeout TryStartma non riesco a farlo funzionare 9999999ed [int]9e8è lo stesso dell'aggiunta di un ulteriore 9.
colsw

2

(non concorrenziale) Angolf , 110 107 byte

❦™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

1
Benvenuti nel sito! Non riesco a trovare alcuna informazione su Angolf; ti dispiacerebbe collegare il suo sito Web?
ETHproductions


1
Benvenuti nel sito! hai un link più vecchio di questo? in caso contrario, la lingua è considerata più recente della sfida. è consuetudine contrassegnare le risposte in lingue più recenti rispetto alla sfida con (non competitiva) nel titolo
Destructible Lemon,

Ho Angolf da 3 mesi ma l'ho appena caricato su GitHub in quanto non aveva un link prima
thatoneuser

@thatoneuser purtroppo su questo punto di vista è necessario che le lingue siano state pubblicate per essere contrassegnate come "concorrenti", per favore contrassegnalo come non competitivo (questo significa che potresti partecipare e raccogliere voti, ma sarai considerato per un tic mark accettato
Rohan Jhunjhunwala

0

C #, 132 byte

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

0

Excel VBA (solo Windows, Office 2016+), 278 272 byte

Limitato a Windows, Office 2016+ per l'uso del Microsoft.Mashup.OleDb.1provider

subRoutine completa che non accetta input e visualizza la posizione corrente come una Excel.ListObjecttabella digitata, incluse informazioni aggiuntive.

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

Uscita di esempio esclusa per ovvi motivi.

-2 byte per l'uso di [Sheet1]overSheets(1)


0

Swift 4 , 125 117 96 byte

Questo può essere testato solo localmente, sfortunatamente.

import CoreLocation;var c=CLLocationManager().location!.coordinate;print(c.longitude,c.latitude)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.