Помилка, де я?


26

О ні! Я потрапив у пастку у великому лісі (Гаразд, не дуже, але просто припустимо це) і не знаю, де я!

На щастя, я приніс свій ноутбук. Але коли я шукав "Карти", він сказав "Немає результатів", і я прошу це в крайньому випадку.

Будь ласка, складіть програму, яка виводить довготу та широту мого місцезнаходження у будь-якому форматі двох чисел. any two number formatвключає:

  • Кортеж.
  • Рядок, що включає довготу та широту.
  • Об'єкт JSON.
  • тощо.

Можна використовувати будь-який API або бібліотеки. Тобто, Ви можете запитувати Карти Google тощо (я думаю, вони не втратили свої API: \)


19
PowerShell має glдля Get-Location, до жаль , я не думаю , що C:\Users\Connorдопоможе вам уникнути лісу дуже багато.
colsw

C: \ Користувачі \ @Connor> sudo так
Меттью Ро

Відповіді:


72

Математика, 4 байти

Помилка, де я?

Here

Оцінює до GeoPosition[{latitude, longitude}].


5
o_O Mathematica мав для цього вбудований?
Меттью Ро

4
@SIGSEGV Звичайно ... (фрагмент №4)
Мартін Ендер

33
Математика має вбудований для всього
Скідсдев

10
Ще краще: команда Sunset[Here] - Nowправильно повертає кількість часу до заходу сонця.
Грег Мартін

4
Мені цікаво бачити відповідь, що має більше голосів, ніж питання. Подяки 👏👏👏
Метью Ро

11

JavaScript (ES6), 89 82 байт

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

Спробуйте в Інтернеті! (Чомусь це не працювало у фрагменті).

Пояснення

navigatorОб'єкт є частиною BOM . geolocationє її властивістю, а також є об'єктом, який містить геолокаційні дані користувача. watchPosition()є методом geolocationоб’єкта. Він виконує функцію зворотного виклику, яка виконується після отримання геолокаційних даних. Функція зворотного виклику x=>alert((y=x.coords).latitude+","+y.longitude)- це анонімна (лямбда) функція, яка приймає об'єкт xі alert()s latitudeі longitudeвластивості, x.coordsрозділені комою. Зауважте, що об'єкт xпередається функції зворотного виклику watchPosition()тоді, коли викликається функція зворотного виклику (тобто після отримання геолокаційних даних).


Примітка . Геолокаційні дані базуються на GPS, якщо GPS доступний, інакше він базується на IP.


2
watchPositionзамість getCurrentPositionекономить 5 байт. alert([(y=x.coords).latitude,y.longitude])економить ще 2
Йохан Карлссон

1 символ коротший, видає помилку:for(f in r=navigator.geolocation)r=r[f](x=>alert((y=x.coords).latitude+","+y.longitude))
user2428118

3
Це дійсно рідкісний випадок, коли JS може бути конкурентоспроможною, покладаючись на свої занадто довгі назви властивостей.
Кудлатий

@JohanKarlsson Дякую! Реалізував це!
Арджун

@Shaggy Правда, справді.
Арджун

8

Пітон із запитами, 101 100 75 байт

4 байти збережено завдяки @ КириллМалышев

21 байт збережено завдяки @Rod

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

Якщо це Python 2, ви можете зберегти 1 байт, видаливши дужки
Wondercricket

Можливо, краще скористатися короткою URL-адресою? Наприклад, su0.ru/auls . Так ви заощадите 4 байти.
Кирилл Малышев

Вам не потрібно все це форматування, from requests import*;print(get('http://ip-api.com/json').text.split(',')[5:7])має бути достатньо
Rod

Посилання розірвано! Якщо ви збираєтесь скористатися скорочувачем URL-адрес, краще використовувати встановлений.
Якоб

5

PowerShell, 130 байт

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

Безголівки:

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.

Повертається як:

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

Виявляється, є спосіб це зробити, але це не так красиво.

бонус: відкриває карти Google у вашому поточному місцезнаходження.

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"

можна зберегти 3 байти за допомогою, TryStartале це виводить a trueна трубопровід і коштує більше, щоб придушити це.

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

PowerShell (не конкуруючий), 44 байти

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

Використовується зовнішня послуга, оскільки PowerShell не має внутрішніх вбудованих даних для "поточного місцезнаходження" - це геолокація на основі IP, тому майже точно не поверне фактичне місцеположення, воно поверне "за замовчуванням" місце для вашого провайдера, і якщо ви запустите це через VPN відображатиметься де б не було точки виходу.

Я намагався (не як вправа для гольфу) налагодити API Google Maps для роботи з методом геолокації бездротової адреси mac-адреси, але це далеко не точне чи грізне.

позначені як неконкурентоздатні через неточність результатів.

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

Це відображається Central Dublin, Irelandпри пошуку, проте я зараз трохи поза центром міста, приблизно в 8 милях від поверненої точки.


У C # the GeoCoordinateWatcherє TryStartметод, який ви можете спробувати, схожий на те, що він повертається, коли стан Readyзамість циклічного. Якщо цей метод доступний, очевидно.
TheLethalCoder

1
@TheLethalCoder було першим, на що я звернувся, і додав у прикладі, він зберігає лише 3 байти в цілому, але він скидає trueна конвеєр, перш ніж я можу вивести лат / long, і я думаю, що це, ймовірно, порушує специфікацію, коли це вихід .
colsw

@TheLethalCoder, можливо, збереже байт (и) на [int]9e8частині, коли ви встановите тайм-аут, TryStartале я не можу змусити його працювати 9999999і [int]9e8це те саме, що додавати додатковий 9.
colsw

2

(неконкурентоспроможний) Ангольф , 110 107 байт

❦™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
Ласкаво просимо на сайт! Я, здається, не можу знайти жодної інформації про Ангольфа; Ви б проти зав'язати його веб-сайт?
ETHproductions

github.com/XtremePlayzCODE/angled/blob/master/angolf.js , Вибачте за пізню відповідь
thatoneuser

1
Ласкаво просимо на сайт! у вас є старша посилання, ніж ця? якщо ні, мова вважається новітньою, ніж виклик. це звичай позначати відповіді мовами, новішими, ніж виклик, із заголовком (не конкуруючим) у заголовку
Руйнуючий лимон

У мене Angolf вже 3 місяці, але я просто завантажив його в GitHub, оскільки раніше у нього не було посилання
thatoneuser

@thatoneuser, на жаль, на цих прицільних мовах повинні бути опубліковані, щоб позначати їх як "змагаються", будь ласка, позначте це як неконкурентоздатне (це означає, що ви можете брати участь і збирати нагороди, але вас вважатимуть за визнаний тик-знак.
Rohan Jhunjhunwala

0

C #, 132 байти

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

0

Excel VBA (тільки для Windows, Office 2016+), 278 272 байт

Обмежено для Windows, Office 2016+ для використання Microsoft.Mashup.OleDb.1провайдера

Повна subрутина, яка не потребує введення та виводить ваше поточне місцезнаходження у вигляді Excel.ListObjectвведеної таблиці, включаючи додаткову інформацію.

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

Приклад виведення виключений з очевидних причин.

-2 байти для використання [Sheet1]понадSheets(1)


0

Швидкий 4 , 125 117 96 байт

Це, на жаль, можна перевірити лише локально.

import CoreLocation;var c=CLLocationManager().location!.coordinate;print(c.longitude,c.latitude)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.