Le défi
Le nombre de codes par caractères le plus court permet à Robot de trouver le chaton le plus rapidement possible.
Golfeurs, c'est une période de crise - Un chaton a disparu et c'est le travail de Robot de le trouver! Le robot doit atteindre Kitten le plus rapidement possible. Cependant, Robot rencontre de nombreux obstacles et il a besoin de votre part pour lui programmer une solution.
Robot avait l'habitude d'avoir un programme le faire pour lui, mais ce programme avait été perdu et Robot n'avait pas de sauvegarde :(.
L'exécution de Robot n'est pas la meilleure, et le moins de caractères que Robot puisse lire à partir du code source, le moins de temps possible à traiter, et cela signifie que Kitten sera retrouvé plus rapidement!
La mémoire de Robot contient une carte de l'emplacement dans lequel il se trouve, le haut représentant le nord, le bas représentant le sud, la droite représentant l'est et la gauche représentant l'ouest. Robot est toujours dans une pièce rectangulaire de taille inconnue entourée de murs, représentée par #
dans sa carte radar. Les zones où le robot peut entrer sont représentées par un espace .
Le radar de Robot recherche également de nombreux obstacles dans la pièce et les marque en diverses lettres ASCII. Le robot ne peut pas traverser ces obstacles. Le radar indiquera Kitten comme le caractère spécial ASCII K
, tandis que l'emplacement du robot est marqué par R
.
Le système de navigation de Robot fonctionne de la manière suivante: il peut comprendre un duo de directions et le nombre d'unités de mouvement vers lesquelles il doit voyager - par exemple, cela N 3
signifie «aller au nord de 3 unités de mouvement». La carte radar du robot est telle qu'une unité de mouvement est composée d'un caractère ASCII. Le robot ne peut aller que dans 4 directions et ne peut pas se déplacer en diagonale.
Votre tâche, courageux économiseur de Kitten, consiste à lire une fois la carte radar de Robot et à émettre le moins de directions possible, avec le moins de distance de déplacement par unité de mouvement. Robot est garanti d'avoir au moins un chemin d'accès à Kitten.
Pour vous assurer que Robot ne perd pas de temps à exécuter un programme qui ne fonctionne pas et qui ne l'aidera pas à trouver Kitten, je vous encourage, brave économiseur de Kitten, à utiliser cette sortie du programme précédent de Robot pour ne pas perdre de temps à trouver Kitten!
Cas de test
Input:
######################
# d 3 Kj #
# #
# R #
# q #
######################
Output:
E 13
N 2
Input:
######################
# d r 3 Kj #
# p p #
# T X #
# q s t #
# #
# R o d W #
# #
# g t U #
# #
######################
Output:
N 1
E 10
N 4
E 2
Input:
######################
# spdfmsdlwe9mw WEK3#
# we hi #
# rdf fsszr#
# sdfg gjkti #
# fc d g i #
# dfg sdd #
# g zfg #
# df df #
# xcf R#
######################
Output:
N 1
W 9
N 5
E 4
N 1
E 4
N 1
Le nombre de codes comprend les entrées / sorties (programme complet).
la source
Réponses:
C ++
1002899799charsRemarque nécessite l'utilisation de C ++ 0x pour éliminer l'espace entre>> dans les modèles.
Il trouve l'itinéraire avec le nombre minimal de virages.
C'est
Dijkstra's Algorithm
pour résoudre le problème du plus court chemin.Pour distinguer plusieurs itinéraires de taille égale, une ligne droite longue a un poids inférieur à celui de plusieurs lignes courtes (cela favorise les itinéraires comportant moins de virages).
Sous une forme plus lisible:
la source
Scala 2.8 (451 caractères)
... mais cela ne résout pas les liens en faveur du moins de directions possibles (bien qu'il trouve le moins de pas possible).
Scala 2.8, 642 caractères, résout les liens correctement;
Il a découvert un chemin plus court pour le deuxième exemple que celui donné dans le problème:
la source
Python 2.6 (504 caractères)
la source
Python 2.6 (535 caractères)
Décompresse dans une implémentation A * gravement maltraitée. Lit stdin. Recherche des solutions avec une distance totale minimale. Casse les liens en préférant un nombre minimal de directions. Les listes se déplacent vers la sortie standard. Trouve des chatons.
Déballé :
La source a été anti-golfée manuellement à quelques endroits afin d’obtenir une représentation comprimée plus petite. Par exemple, une boucle for sur les directions de la boussole a été déroulée.
la source
c ++ - 681 caractères nécessaires
Il remplace d'abord tous les obstacles sur la carte par
#
s (et modifie les valeurs deK
etR
, pour laisser de la marge dans l'espace des caractères pour les très longs chemins. Il gribouille ensuite sur la carte. Un processus itératif marque toutes les cases accessibles successivement jusqu'à ce qu'il est capable d’atteindre le chaton en un seul geste, après quoi, elle utilise la même procédure de vérification de l’accessibilité pour trouver une chaîne de positions qui ramène au début en instructions minimales. Ces instructions sont chargées dans une chaîne par imprimer dans le bon ordre.Je n'ai pas l'intention de continuer à jouer au golf, car cela ne résout pas correctement les cravates et ne peut pas être facilement adapté pour le faire.
Il échoue sur
produisant
Version plus ou moins lisible:
la source
Ruby - 539 personnages
Pourrait faire avec beaucoup d'amélioration, mais cela fonctionne pour les étapes les plus courtes ainsi que les directions.
la source
Ruby - 648 caractères
Un autre qui échoue le moins de tests possible car je ne trouve pas de moyen facile de l’intégrer dans A *.
la source