Mon robot a court-circuité d'une manière ou d'une autre et s'est enfui au hasard quelque part de mon laboratoire!
Heureusement, chaque fois qu'il le fait, sa séquence d'arrêt démarre, ce qui lui donne suffisamment de temps pour se tourner et courir dans le sens de son orientation pendant cinq tours avant de s'éteindre. Ses fonctions de gyroscope et d'accéléromètre relaient toujours les données au laboratoire pendant qu'il est toujours en marche.
Les données viendront toujours sous la forme de cinq ensembles de deux nombres, par exemple.
12:234,-135:47,-68:230,140:324,127,87
Votre mission, les golfeurs est de a) simuler la séquence de course et de virage frénétique du robot en affichant cinq séries de nombres sous la forme a1:d1,a2:d2,a3:d3,a4:d4,a5:d5
où a
(n) est l'angle dans le sens horaire (en degrés) de telle sorte -179<=a<=+180
que le robot se détourne de son cap actuel ( au départ, il est à zéro cap avant de s'emballer et de tourner pour la première fois), et d
(n) est la distance en pieds qu'il a parcourue avant le changement de cap suivant qui est telle que les 0<=d<=500
pieds; et b) Un cap calculé à partir du laboratoire (qui fait également face à un cap de zéro), la distance en pieds (la précision jusqu'à 3 décimales est fortement encouragée, -5 octets si vous le faites) et le cap d'orientation (en degrés) de l'endroit où mon robot est face lorsqu'il s'est éteint.
Exemple simple:
Data: 0:1,45:1,90:1,90:1,90:1
Heading: 0
Distance: 1
Orientation: -45
Les virages et les distances aléatoires ne sont que cela, aléatoires. Aucune valeur définie ne doit être codée en dur, nous devons voir le caractère aléatoire en action dans le code.
Restrictions au caractère aléatoire: pas de références basées sur l'horloge ou la date, nous devons voir une random
référence native dans le code. Chaque fois que vous exécutez ce code, le caractère aléatoire doit se présenter avec la possibilité d'afficher 1 des 360 angles de virage possibles à chaque tour de virage. Ainsi, le robot peut tourner de -36 degrés à un tour et peut tourner de +157 degrés le suivant, suivi d'un autre tour de +2 degrés par un autre tour de -116 degrés et un dernier tour de +42 degrés au dernier tour. Au moins 360 valeurs distinctes doivent être possibles (entre -179 et +180 degrés inclus) à chaque génération d'angle aléatoire.
Restrictions à la distance parcourue: De même, il y a 501 distances possibles que le robot peut parcourir (entre 0 et 500 pieds inclus), donc je m'attends à ce que l'aléatoire soit également disponible lors de la détermination de la distance de course du robot. Le robot pourrait théoriquement courir 45, 117, 364, 27 et 6 pieds avec chacun de ses tours respectifs ...
Les données qui vous sont fournies seront toujours en valeurs entières ... le robot tournera en plages de degrés entières et fonctionnera en plages de distances entières. Les valeurs de sortie seront cependant des flottants ...
C'est du code-golf. Le code le plus court gagne ... Maintenant, allez chercher mon robot!
PS: En référence à ma "Précision jusqu'à 3 décimales", si vous pouvez fournir le cap (en degrés, jusqu'à un MINIMUM de 3 décimales) et une distance en pieds (également précis aussi pour un MINIMUM de 3 décimales) vous recevra un bonus de -5 octets).
-180 < a <= +180
comme<
signe à lui seul moins que mais sans inclure AFAIK ...Réponses:
Perl 6:
188184 caractères - 5 = 180 pointsGolf avec espace blanc:
Non golfé:
Cela transforme les données en nombres complexes
unpolar
, met la somme d'entre eux dans$complex
et obtient alors les coordonnées polaires comme$dist
,$ang
.L'angle cumulé
$cum-angle
est collecté parce que les angles sont relatifs au robot lorsqu'il se déplace dans le laboratoire et parce que nous avons besoin de l'angle final du robot dans notre sortie.Exemple de sortie:
Le seul vrai truc que le golf utilise est qu'il utilise (mal) les 3 variables spéciales de Perl 6 à bon escient:
$!
est utilisé pour les radians ↔ degrés$_
contient les données, et tout ce qui ressemble à un solitaire.method()
signifie réellement$_.method()
(sauf à l'intérieur dumap {…}
bloc, où$_
prend en fait la valeur des paires de nombres qui composent les données)$/
contient ce qui est dans la version non golfée($dist, $ang)
.$0
et$1
signifie en fait$/[0]
, à savoir$dist
, et$/[1]
, à savoir,$ang
la source
$_=((-179..180).pick=>(^501).pick)xx 5;my$o;$/=([+] .map:{unpolar .value,$o+=.key/($!=180/pi)}).polar;say "Data: {.fmt("%d:%d",",")} Heading: {$1*$!} Distance: $0 Orientation: {$o*$!}"
.map:
est obligatoireRubis,
274252249245214211 211207204202 caractères (-5 = 197)Comment PHP a-t-il battu Ruby en nombre de caractères?! >: O Doit trouver un moyen de jouer au golf plus ...
Edit: j'ai battu la réponse PHP, mais l'utilisateur qui l'a écrit m'a aidé à le faire! Allez le voter; il le mérite :-P
Un autre montage: Gah! Il m'a repassé! Vous êtes un adversaire très digne, @MathieuRodic; félicitations, je dois vous laisser gagner ;-)
Code non golfé (et
version légèrementplus ancienne):Exemple de sortie:
la source
Orientation
section.% 360
dessus?M=Math
et enP=M::PI
remplaçant le code en conséquence - et un caractère de plus en supprimant l'espace après le secondputs
.PHP -
238232221212203199 caractères(testez-le ici: http://ideone.com/dNZnKX )
Version non golfée:
(testez-le ici: http://ideone.com/1HzWH7 )
la source
Python -
264259256258 - 5 = 253 caractères(testez-le sur http://ideone.com/FicW6e )
Version non golfée:
(testez-le sur http://ideone.com/O3PP7T )
NB: de nombreuses réponses incluent -5 dans leur titre, alors que leur programme ne représente pas la distance avec précision jusqu'à 3 décimales ...
la source
Python 301-5 = 296
Rien d'extraordinaire ici, plutôt bavard. C'est un problème pour lequel je ne suis pas heureux que les fonctions trig de python fonctionnent en radians.
la source
Python 2 =
376319 caractères (-5 pour la distance = 314)exemple de sortie
la source