Je pensais que ce serait un bon défi: http://adventofcode.com/2016/day/1
Description de la tâche
Étant donné une séquence de rotations et de distances suivant le motif (L | R) [1-9] [0-9] *, donnez la distance manhattan entre le point de départ et le point d'arrivée, c'est-à-dire le nombre minimal de mouvements verticaux et horizontaux sur une grille.
Exemples
Par exemple, si nous supposons que vous avez commencé à faire face au Nord:
Après R2, L3 vous laisse 2 blocs à l'est et 3 blocs au nord, ou 5 blocs plus loin. R2, R2, R2 vous laisse 2 pâtés de maisons au sud de votre position de départ, qui est à 2 pâtés de maisons. R5, L5, R5, R3 vous laisse à 12 pâtés de maisons.
Détails techniques
Vous pouvez choisir le séparateur entre les mouvements (par exemple: "\ n", "," ou ","). Vous devez donner la réponse sous forme d'entier en base 10.
Pas un doublon!
Ce n'est pas un doublon pour plusieurs raisons:
- Les mouvements ne sont pas les mêmes. Ici, ce sont des rotations , pas des directions.
- Je veux la distance de Manhattan, pas l'euclidienne.
Réponses:
Python 3,
10999104101 octetsIl s'agit d'une réponse simple qui utilise des nombres complexes, avec une entrée sous forme de chaîne séparée par des espaces ou une chaîne séparée par des sauts de ligne. Suggestions de golf bienvenues!
Edit: -13 octets grâce à Labo. +5 octets pour la conversion en int.
Ungolfing
la source
PHP, 93 octets
panne
la source
Python 2, 86 octets
Suit le courant
x
et lesy
coordonnées. Lorsque vous tournez, au lieu de mettre à jour la direction, tourne la valeur actuelle afin que le mouvement soit toujours dans la direction x-positive. Les nombres complexes étaient trop coûteux pour en extraire les coordonnées.la source
Python 2,
103102 octetsrepl.it
L'entrée est une chaîne de directions séparées par des espaces, par exemple
"R5 L5 R5 R3"
.Imprime la distance de Manhattan entre l'emplacement de départ et la destination.
Comment?
Commence à l'origine du plan complexe,
l=0
;Avec un compteur de virage quart de droite cumulé
c=0
;Pour chaque instruction,
i
la rotation est analysée en comparant le premier caractère de la direction au caractère'N'
etc
est ajustée en conséquence.La distance à parcourir est analysée
int(i[1:])
et l'instruction est exécutée en prenant autant de pas de la taille d'un bloc dans la direction donnée en prenant lac
puissance e0+1j
avec1j**c
.La distance finale de Manhattan est la somme des distances absolues de l'origine dans les deux directions - imaginaire et réelle; réalisé avec
abs(l.imag)+abs(l.real)
la source
cmp
comme ma réponse, faites le moi savoir et je supprimerai.JavaScript (ES2016), 98
1002 octets enregistrés thx @Neil
100 octets pour ES6
Moins golfé
Test (ES6)
la source
s=>s.replace(/.(\d+)/g,(c,n)=>(d+=c<'R'||3,n*=~-(d&2),d&1?x+=n:y+=n),x=y=d=0)&&(x<0?-x:x)+(y<0?-y:y)
:, qui est maintenant deux octets plus court que votre réponse ES6, grâce aux astucesc<'R'||3
etn*=~-(d&2)
.