Latar Belakang
Tak terhitung generasi anak yang bertanya-tanya di mana mereka akan berakhir jika mereka menggali lubang langsung ke bawah. Ternyata ini, secara mengejutkan, akan agak berbahaya , tapi bagaimanapun ...
Antipoda adalah titik yang saling berhadapan secara langsung di permukaan bumi. Ini berarti bahwa jika sebuah garis ditarik di antara kedua titik, itu akan melewati pusat Bumi.
Tantangan
Tulis program atau fungsi yang, diberi titik, menemukan antipode-nya.
Dalam tantangan ini, titik direpresentasikan menggunakan sistem garis lintang-bujur dan derajat, menit busur dan detik busur. Untuk menemukan antipode, tukar arah setiap ordinat ( N <-> S
dan W <-> E
) dan kurangi garis bujur dari 180
derajat.
Contoh:
Ambil intinya N 50 26 23 W 4 18 29
. Tukar arah untuk memberi S 50 26 23 E 4 18 29
. Kurangi garis bujur dari 180 0 0
memberi 175 41 31
, biarkan koordinat antipode sebagai S 50 26 23 E 175 41 31
.
Aturan
Memasukkan
Seperangkat koordinat garis lintang-bujur, dalam format apa pun yang masuk akal , di mana setiap ordinat berisi arah, sejumlah derajat, sejumlah menit busur, dan sejumlah detik busur.
Keluaran
Koordinat garis lintang-bujur dari antipode, dalam format apa pun yang masuk akal , di mana setiap ordinat berisi arah, sejumlah derajat, sejumlah menit busur, dan sejumlah detik busur.
Berarti masuk akal berarti bahwa setiap bagian dari koordinat dapat dibedakan secara jelas.
Spesifikasi
- Arah untuk garis lintang ordinasi adalah
N
atauS
, dan garis bujur adalahW
atauE
. - Semua nilai koordinat adalah bilangan bulat. Nilai derajat akan berada di antara
0
dan90
untuk lintang, dan antara0
dan180
untuk bujur. Nilai arc menit dan arc kedua untuk kedua ordinat akan berada di antara0
dan59
. - Jika semua nilai untuk suatu ordinat adalah
0
, kedua arah dapat diterima. - Tidak perlu mem-pad nilai apa pun.
- Tidak ada garis lintang yang akan lebih besar dari
90
derajat, dan tidak ada garis bujur yang lebih besar dari180
derajat. - Celah standar berlaku.
Uji kasus
N 50 26 23 W 4 18 29 -> S 50 26 23 E 175 41 31
S 43 9 9 E 0 0 5 -> N 43 9 9 W 179 59 55
N 0 0 0 E 0 0 0 -> S/N 0 0 0 W/E 180 0 0 (either direction fine in each case)
S 1 2 3 W 4 5 6 -> N 1 2 3 E 175 54 54
S 9 21 43 W 150 7 59 -> N 9 21 43 E 29 52 1
S 27 40 2 W 23 0 0 -> N 27 40 2 E 157 0 0
N 0 58 37 W 37 0 0 -> S 0 58 37 E 143 0 0
Tautan yang bermanfaat
Ini kode-golf , jadi jawaban tersingkat dalam byte menang!
N
,S
,E
, atauW
sebagai arah, sedangkan berlebihan0
memperkenalkan ambiguitas untuk yang nilai merupakan yang komponen ordinat.Jawaban:
05AB1E,
3734 byteDijelaskan
Cobalah online
Sunting: Disimpan 3 byte berkat Adnan .
sumber
"NEWS"
ke‘€Ã‘
atau bahkan'€Ã
jika huruf kecil diperbolehkan.JavaScript (ES6), 88 byte
Mengambil 8 parameter dan mengembalikan array sebagai hasilnya. Diharapkan
a
menjadi salah satu dariN
danS
dan jugae
menjadi salah satu dariW
atauE
. Perhitungan:f
perlu dikurangi dari 179 jika salah satug
atauh
tidak nol tetapi 180 jika keduanyag
danh
nol (karena tidak ada pinjaman), dengan demikian!(g|h)
ditambahkan ke 179.g
harus nol jika keduanyag
danh
nol, dengan demikiang|h&&
, jika tidak maka harus dikurangi dari 59 jikah
bukan nol tetapi 60 jikah
nol (karena tidak ada pinjaman), dengan demikian!h
ditambahkan ke 59.h
harus nol jika sudah nol, jika tidak hanya dikurangi dari 60.Cara lain untuk melihat ini adalah untuk melihat bahwa mengurangkan dalam biner dicapai dengan menambahkan pelengkap 1s plus tambahan 1. Diterjemahkan untuk masalah ini, kita mengambil
179-f
,59-g
dan59-h
dan menambahkan 1.59-h
+ 1 adalah60-h
, tetapi jika ini adalah 60 maka membawa , jadi hasil yang diinginkan adalah nol jikah
awalnya nol. Kami menambahkan 159-g
jika ada carry darih
, yaitu jikah
awalnya nol. Sekali lagi kita harus memungkinkan untuk membawa, yang kali ini terjadi jika keduanyag
danh
nol, dan kami menambahkan 1179-f
dalam hal ini.sumber
MATL , 51 byte
Masukkan format:
Format output:
Cobalah online!
Penjelasan
sumber
bnase
.Racket, 199 byte
Itu sangat panjang. Mungkin ada beberapa hal yang bisa saya lakukan untuk mempersingkat lebih jauh, tetapi saya merasa gemetar .
Mengambil
cons
sepasang dualists
: satu untuk garis lintang dan satu untuk garis bujur. Setiap daftar memiliki arah (sebagai simbol Racket huruf kecil) sebagai item pertama dan mengikutinya derajat, menit busur, dan detik busur. Output dalam format yang samaRacket akan mengartikan pasangan dari dua daftar ini sebagai satu daftar dengan daftar lainnya sebagai elemen pertama. Ini sangat baik, karena Anda masih dapat mengakses lintang dan bujur seolah-olah mereka adalah dua daftar berpasangan.
Pemakaian:
Yang dapat ditafsirkan dengan kode masa depan sebagai
'((n 43 9 9) (w 179 59 55))
, dua daftar.sumber
Pyth,
41454335 byteMenggunakan konversi basis-60 untuk mengubah derajat dan menit menjadi detik.
Format I / O:
Ini mencetak garis setiap kali Anda memasukkan garis, sehingga untuk memiliki format yang terlihat bagus, Anda dapat menggunakan CLI dan menyalurkan input, atau lebih mudah, menggunakan implementasi Pyth online .
Dalam pseudocode:
sumber
Python 2,
140122 byteDiperbarui:
Ini menggunakan pendekatan yang sedikit berbeda: mengatur nilai untuk mengurangi dari garis bujur berdasarkan menit dan detik. Jika ada 0 menit dan detik, itu mengurangi 180 dari derajat, dan jika ada> 0 menit dan detik, itu mengurangi 179, 59, dan 60 dari masing-masing d, m, s.
Asli:
Mengambil input sebagai daftar:
f(['N', 0, 0, 0, 'E', 0, 0, 0])
:, mengonversi garis bujur menjadi derajat desimal, mengurangi dari 180, lalu mengonversi kembali ke derajat, menit, detik dan membangun kembali daftar, membalik arah dalam proses.Tidak golf:
Cobalah
sumber
JavaScript,
138137129124112110Peningkatan 2 byte terinspirasi oleh kode @ Neil
ungolfed
tes
sumber
Python 3,
131130 byteFormat: sudut adalah tupel bentuk
(deg,min,sec)
, arah adalah bentukN
. Menghasilkan empat kali lipat dari 2 sudut, masing-masing diikuti oleh arahnya.Versi tidak disatukan:
sumber
def f(w,x,y,z):S=60;d=divmod;a,b,c=y;l,m=d(648e3-c-S*b-S*S*a,S);return w,["S","N"][x=="S"],d(l,S)+(m,),["W","E"][z=="W"]
ini bekerja dengan menggunakan fakta bahwaTrue
danFalse
dapat diartikan sebagai1
dan0
, dan karenanyaa if b else c
setara dengan[c, a][b]
. Di samping catatan, saya pikir kode asli Anda memiliki kesalahan ketik; harusx=="W"
menjadiz=="W"
?C #,
310269 byteInputnya adalah satu string. Anda dapat mencobanya di .NetFiddle .
Kode
Jika saya tidak mengambil
string
input sebagai tetapichar, float[], char, float[]
, saya dapat melakukan:C #,
167166165163152148147139 byteKode
Saya juga dapat menghapus
3600
dan menggunakanฐ
sebagai gantinya untuk pindah ke 164 karakter dan 166 byte. Haruskah saya menggunakannya?C #, 150 byte
Kode
Cara yang lebih .NET! Saya mendelegasikan semua logika ke .NET
struct
TimeSpan
dan sayaabmenggunakan string yang memformat logika. Masukan adalahchar, int, int, int, char, int, int, int
. Saya membagikan yang ini untuk memberikan beberapa ide. Mungkin seseorang akan meningkat dengan cara yang lebih baik daripada saya.sumber
string.Join()
...return
, aku harus menambahkan sendiri ... Menggunakan tesa('N', new float[] { 50, 26, 23 }, 'W', new float[] { 4, 18, 29 })
saya mendapatkanS 50 26 23 E 175.6919 41.51642 30.98511
- akan Anda menganggap ini lulus?Java,
199177 atau 151 atau 134 Bytes177 Bytes solusi yang mencetak hasil
151 Bytes solusi yang mengembalikan hasil sebagai array
134 Bytes jika kita menggunakan notasi lambda
sumber
C, 188
Membutuhkan 8 argumen program, akan gagal jika tidak. Lewati argumen seperti
N 50 26 23 W 4 18 29
. Indikator arahN
,S
,E
,W
, harus dikapitalisasi.sumber
PostGIS, 123 byte
Tool-For-The-Job sangat mengecewakan, sebagian karena SQL wordiness dan sebagian lagi karena kebutuhan untuk menggunakan geometri dan kembali:
Di sisi lain, fungsi tunggal ini akan mengubah titik, kumpulan titik, atau bentuk yang lebih kompleks (seperti seluruh garis pantai Australia dan Selandia Baru).
sumber
PHP, 148 byte
pendekatan yang sama seperti jawaban JavaScript saya , lihat di sana untuk rincian
$
tanda - tandaforeach
karena PHParray_map
memiliki overhead yang besar(60-$v)%60
karena$v&&60-$v
dilemparkan ke boolean di PHPchr
,ord
dan beberapa aritmatika pada swap arahtes
ide-ide terlantar
sumber
Befunge,
122114111 Bytes (110 karakter)Masukkan format:
Perhatikan bahwa arah bujur dan busur detik harus saling berhimpit
Anda dapat menguji kode di sini
sumber