Contexte
D'innombrables générations d'enfants se sont demandé où ils finiraient s'ils creusaient un trou directement vers le bas. Il s'avère que cela serait, sans surprise, plutôt dangereux , mais de toute façon ...
Les antipodes sont des points directement opposés à la surface de la Terre. Cela signifie que si une ligne était tracée entre les deux points, elle passerait par le centre de la Terre.
Défi
Écrivez un programme ou une fonction qui, à partir d'un point, trouve son antipode.
Dans ce défi, les points sont représentés en utilisant le système longitude-latitude et les degrés, les minutes d'arc et les secondes d'arc. Pour trouver l'antipode, permutez les directions de chaque ordonnée ( N <-> S
et W <-> E
) et soustrayez l'ordonnée de longitude des 180
degrés.
Exemple:
prenez le point N 50 26 23 W 4 18 29
. Échangez les directions à donner S 50 26 23 E 4 18 29
. Soustrayez l'ordonnée de longitude de 180 0 0
pour donner 175 41 31
, en laissant les coordonnées antipode comme S 50 26 23 E 175 41 31
.
Règles
Contribution
Un ensemble de coordonnées latitude-longitude, dans n'importe quel format raisonnable , où chaque ordonnée contient une direction, un nombre de degrés, un nombre de minutes d'arc et un nombre de secondes d'arc.
Sortie
Les coordonnées latitude-longitude de l'antipode, dans tout format raisonnable , où chaque ordonnée contient une direction, un nombre de degrés, un nombre de minutes d'arc et un nombre de secondes d'arc.
Prendre raisonnable signifie que chaque partie de la coordonnée peut être distinguée sans ambiguïté.
Spécifications
- La direction de l'ordonnée de latitude est
N
ouS
, et celle de l'ordonnée de longitude estW
ouE
. - Toutes les valeurs de coordonnées sont des entiers. La valeur du degré sera entre
0
et90
pour la latitude, et entre0
et180
pour la longitude. Les valeurs des minutes d'arc et des secondes d'arc pour les deux ordonnées seront comprises entre0
et59
. - Si toutes les valeurs d'une ordonnée sont
0
, l'une ou l'autre direction est acceptable. - Il n'est pas nécessaire de mettre à zéro les valeurs.
- Aucune ordonnée de latitude ne sera jamais supérieure à des
90
degrés, et aucune ordonnée de longitude ne sera jamais supérieure à des180
degrés. - Des échappatoires standard s'appliquent.
Cas de test
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
Liens utiles
C'est le code-golf , donc la réponse la plus courte en octets l'emporte!
N
,S
,E
ouW
comme une direction, alors que la redondance0
introduit l' ambiguïté à laquelle la valeur représente que composante de l'ordonnée.Réponses:
05AB1E,
3734 octetsExpliqué
Essayez-le en ligne
Edit: sauvé 3 octets grâce à Adnan .
la source
"NEWS"
à‘€Ã‘
ou même'€Ã
si minuscules est autorisée.JavaScript (ES6), 88 octets
Prend 8 paramètres et renvoie un tableau comme résultat. S'attend
a
à être l'un deN
ouS
et de mêmee
à l'un deW
ouE
. Calculs:f
doit être soustrait de 179 si l'ung
ou l' autre ouh
est différent de zéro mais 180 si les deuxg
eth
sont nuls (car il n'y a pas d'emprunt),!(g|h)
est donc ajouté au 179.g
doit être nul si les deuxg
eth
sont nuls, ainsig|h&&
, sinon il doit être soustrait de 59 sih
est différent de zéro mais 60 sih
est nul (car il n'y a pas d'emprunt),!h
est donc ajouté au 59.h
doit être nul s'il était déjà nul, sinon il est simplement soustrait de 60.Une autre façon de voir est d'avis que la soustraction en binaire est obtenue en ajoutant le complément à 1 , plus un 1. supplémentaire traduit à ce problème, nous prenons
179-f
,59-g
et59-h
et ajouter 1.59-h
+ 1 est60-h
, mais si cela est 60 alors il porte , le résultat souhaité est donc zéro s'ilh
était à l'origine zéro. Nous ajoutons 1 à59-g
s'il y a un reporth
, c'est-à-dire sih
était à l'origine zéro. Encore une fois, nous devons autoriser un report, qui se produit cette fois si les deuxg
eth
sont nuls, et nous ajoutons 1 à179-f
dans ce cas.la source
MATL , 51 octets
Format d'entrée:
Format de sortie:
Essayez-le en ligne!
Explication
la source
bnase
.Raquette, 199 octets
C'est horriblement long. Il y a probablement des choses que je pourrais faire pour le raccourcir davantage, mais je frissonne complètement.
Prend une
cons
paire de deuxlists
: un pour la latitude et un pour la longitude. Chaque liste a la direction (sous forme de symbole de raquette en minuscules) comme premier élément et suit les degrés, les minutes d'arc et les secondes d'arc. Sorties au même formatRacket interprétera cette paire de deux listes comme une seule liste avec une autre liste comme premier élément. C'est parfaitement bien, car vous pouvez toujours accéder à la latitude et à la longitude comme s'il s'agissait de deux listes dans une paire.
Usage:
Ce qui peut être interprété par le futur code comme
'((n 43 9 9) (w 179 59 55))
deux listes.la source
Pyth,
41454335 octetsUtilise la conversion en base 60 pour transformer les degrés et les minutes en secondes.
Format d'E / S:
Il imprime une ligne chaque fois que vous entrez une ligne, donc pour avoir un format esthétique , vous pouvez utiliser l'interface CLI et diriger l'entrée, ou plus commodément, utiliser l'implémentation Pyth en ligne .
En pseudocode:
la source
Python 2,
140122 octetsMis à jour:
Cela utilise une approche légèrement différente: définir les valeurs à soustraire de la longitude en fonction des minutes et des secondes. S'il y a 0 minute et seconde, il soustrait 180 des degrés, et s'il y a> 0 minute et seconde, il soustrait 179, 59 et 60 respectivement du d, m, s.
Original:
Prend l'entrée comme une liste
f(['N', 0, 0, 0, 'E', 0, 0, 0])
:, convertit la longitude en degrés décimaux, soustrait de 180, puis reconvertit en degrés, minutes, secondes et reconstruit la liste, inversant les directions dans le processus.Non-golfé:
Essayez-le
la source
JavaScript,
138137129124112110Amélioration de 2 octets inspirée du code de @ Neil
non golfé
tests
la source
Python 3,
131130 octetsFormats: les angles sont des tuples de la forme
(deg,min,sec)
, les directions sont de la formeN
. Génère un quadruple de 2 angles, chacun suivi de sa direction.Version non golfée:
la source
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"]
Cela fonctionne en utilisant le fait queTrue
etFalse
peut être interprété comme1
et0
, eta if b else c
est donc équivalent à[c, a][b]
. En passant, je pense que votre code d'origine a une faute de frappe; devraitx=="W"
êtrez=="W"
?C #,
310269 octetsL'entrée est une chaîne. Vous pouvez l'essayer sur .NetFiddle .
Code
Si je ne prends pas
string
comme entrée mais achar, float[], char, float[]
, je peux faire:C #,
167166165163152 152148147139 octetsCode
Je peux également supprimer le
3600
et utiliser à laฐ
place pour passer à 164 caractères et 166 octets. Dois-je l'utiliser?C #, 150 octets
Code
Une manière plus .NET! Je délègue toute la logique du .NET
struct
TimeSpan
et jeabutiliser la chaîne mise en forme logique. L'entrée estchar, int, int, int, char, int, int, int
. Je partage celui-ci pour donner quelques idées. Peut-être que quelqu'un s'améliorera mieux que moi.la source
string.Join()
...return
, je devais ajouter moi - même ... En utilisant votre testa('N', new float[] { 50, 26, 23 }, 'W', new float[] { 4, 18, 29 })
je reçoisS 50 26 23 E 175.6919 41.51642 30.98511
- envisageriez - vous ce un laissez - passer?Java,
199177 ou 151 ou 134 octetsSolution de 177 octets qui imprime le résultat
Solution de 151 octets qui renvoie le résultat sous forme de tableau
134 octets si nous avons utilisé la notation lambda
la source
C, 188
Nécessite 8 arguments de programme, sinon il échouera. Passez des arguments comme
N 50 26 23 W 4 18 29
. Indicateurs de directionN
,S
,E
,W
, doivent être capitalisés.la source
PostGIS, 123 octets
L'outil pour le travail est décevant et verbeux, en partie à cause de la verbosité SQL et en partie à cause de la nécessité de passer à la géométrie et inversement:
D'un autre côté, cette fonction unique transformera des points, des collections de points ou des formes plus complexes (comme l'ensemble du littoral australien et néo-zélandais).
la source
PHP, 148 octets
même approche que ma réponse JavaScript , regardez là pour une ventilation
$
signesforeach
car PHParray_map
a un énorme surcoût(60-$v)%60
car$v&&60-$v
transforme en booléen en PHPchr
,ord
et quelques arithmétiques sur le changement de directiontests
idées abandonnées
la source
Befunge,
122114111 octets (110 caractères)Format d'entrée:
Notez que la direction de la longitude et les secondes d'arc doivent être regroupées
Vous pouvez tester le code ici
la source