Ceci est le premier d'une série, le second est Deux routes divergeaient dans un bois jaune (partie 2)
Ce défi est inspiré du célèbre poème de Robert Frost, "The Road Not Taken":
Deux routes divergeaient dans un bois jaune,
Et désolé je ne pouvais pas voyager les deux
Et être un voyageur, longtemps je me tenais
Et baissais les yeux autant que je pouvais
Vers où il se penchait dans le sous-bois;Puis a pris l'autre, tout aussi juste,
Et ayant peut-être la meilleure prétention,
Parce qu'il était herbeux et voulait être porté;
Bien que le passage là-bas les ait
portés à peu près de la même façon,Et ce matin-là, les
feuilles étaient également étendues.
Oh, j'ai gardé le premier pour un autre jour!
Pourtant, sachant comment le chemin mène au chemin,
je doutais que je revienne un jour.Je vais le dire avec un soupir
Quelque part, des âges et des siècles à venir:
Deux routes ont divergé dans un bois, et je -
j'ai pris celle moins fréquentée,
Et cela a fait toute la différence.
Remarquez l'avant-dernière ligne, I took the one less traveled by,
,.
Votre véritable défi
Vous prendrez la saisie sous la forme comme:
# ##
# ##
# ##
#
#
#
et vous devez trouver la route la plus mince.
La route commence en bas avec un #
. Les 2 autres routes, qui se terminent toujours sur la rangée supérieure, sont les routes que vous devez examiner. La route la plus épaisse est la plus fréquentée et ce n'est donc pas ce que vous voulez. L'autre est le moins fréquenté et c'est celui que vous voulez.
Production
Votre programme / fonction doit sortir l'une des 2 valeurs distinctes (par exemple 0 ou 1, vrai ou faux), une pour chaque position possible de la route non empruntée. Par exemple, vous pouvez sortir 0 si la route non empruntée est à gauche de la route empruntée, et 1 sinon, ou vous pouvez sortir la chaîne "gauche" ou "droite", vrai, faux, etc.
Cas de test:
## #
## #
###
#
#
#
Peut sortir "à droite".
## #
## #
###
##
#
#
#
Peut sortir "à droite".
## #
## #
###
##
#
#
#
Peut sortir "à droite".
## #
## #
###
#
#
#
#
Peut sortir "à droite".
# ##
# ##
###
#
#
#
#
Peut sortir "à gauche"
# ##
# ##
###
#
#
#
#
Peut sortir "à gauche"
Remarques
- Il s'agit de code-golf , donc la réponse la plus courte en octets l'emporte
- Failles standard interdites
- Vous devez spécifier vos sorties pour "gauche" et "droite" et elles doivent être distinctes
- L'entrée sera une grande chaîne et peut avoir n'importe quelle quantité de lignes
- Vous n'avez pas à vous soucier d'une entrée valide.
- La route est toujours en forme de Y, il suffit donc de regarder en haut.
- Avez-vous des questions? Commentaires ci-dessous:
Le nombre d'octets le plus bas gagne!
la source
Réponses:
CJam , 1 octet
r
place la première chaîne de caractères non blancs adjacents de STDIN sur la pile, donc cela s'imprime##
pour la gauche et#
pour la droite .Essayez-le en ligne!
la source
JavaScript (ES6),
1912 octetsÉditer:
Une version plus golfée est
Retour
#
pour la droite et un espace pour la gauche.Original:
Explication
Non golfé :
La première chose que cette fonction fait est de supprimer les espaces blancs au début et à la fin de l'entrée. Cela signifie que le premier caractère est toujours
#
. Ensuite, je vérifie le deuxième caractère (JavaScript commence à 0) et je vois si c'est un#
caractère. Cela renvoie un booléen. Si le chemin est,right
il le seratrue
, s'il est laissé, il reviendrafalse
.Comment je l'ai joué au golf
Dans ES6, il existe un raccourci de fonction anonyme appelé fonction de flèche . Cela signifie que je peux prendre ma fonction wrapper et la transformer en:
En raison des règles des fonctions fléchées, il retournera le reste du code. De là, je me suis converti
charAt(1)
en[1]
car c'est un chemin plus court, mais pas recommandé . Ensuite, je l'ai pris===
et transformé en==
. Bien qu'ils soient différents dans ce cas, cela n'a pas d'importance. Enfin, j'ai renomméinput
àa
et enlevé tous les espaces.Sortie droite et gauche
Bien que le puzzle n'ait pas réellement besoin du programme pour sortir à droite et à gauche, voici un exemple d'autres sorties:
La seule partie ajoutée est
?'right':'left'
. Cela crée un opérateur ternaire , une instruction if condensée, cela signifie que le code (non golfé) est égal à *:Exemple
la source
Pyth, 2 octets
Sorties
#
pour gauche et##
pour droite.Essayez-le en ligne
Explication
la source
Acc !!, 30 octets
À cause de la façon dont Acc !! prend l'entrée, il donnera la sortie après qu'une seule ligne d'entrée soit entrée. Mais si vous dirigez l'entrée ou la redirigez à partir d'un fichier, vous ne devriez pas remarquer la différence.
Prend l'entrée de stdin. Sorties
si la route de gauche est moins fréquentée ou
#
si la route de droite est moins fréquentée. Essayez-le en ligne!Explication
N
lit la valeur ASCII d'un caractère à partir de stdin chaque fois qu'il est référencé. Nous35-N
bouclons tandis que est véridique; c'est-à-dire, tandis que35-N != 0
ouN != 35
. Par conséquent, lorsque la boucle se termine, nous venons de lire le premier#
caractère de la ligne. Le caractère suivant est ensuite lu avecN
et réécrit sur stdout avecWrite
.la source
Rétine, 5 octets
Sorties
1
si droite,0
si gauche.Essayez-le en ligne
Si les valeurs d'un résultat positif ne devaient pas être distinctes (5 octets):
Produit un entier positif si droit, zéro si gauche.
Essayez-le en ligne
la source
Langage de formule IBM / Lotus Notes,
373526 octetsÉditer j'oublie toujours
@Like
qu'avec les caractères génériques, c'est 2 octets de moins que@Contains
.Edit 2 En fait, n'a pas besoin du
@if
comme il imprime1
ou0
selon que la formule résulte en@True
ou@False
.Formule de champ calculée. Il suffit de tout prendre à gauche du premier
##
qu'il trouve dans le champa
et s'il y#
a des sorties dedans1
pour la gauche sinon des sorties0
pour la droite.Merci à @DavidArchibald, voici une solution pour 22 octets. Par respect pour la solution de Davids, je ne la posterai pas comme ma réponse principale.
Celui-ci sort
1
pour droite et0
pour gauche.la source
Pip ,
86 octetsPrend l'entrée comme argument de ligne de commande (qui nécessitera des guillemets et un échappement des sauts de ligne lors de l'exécution à partir d'une ligne de commande réelle). Sorties
#
si la route de gauche est moins fréquentée et##
si la route de droite est moins fréquentée. Essayez-le en ligne!Explication
Cela utilise l'opérateur de première correspondance regex récemment ajouté de Pip.
La solution regex simple (un port de la réponse Retina de mbomb007 ) est de 9 octets:
la source
a
en aq
et obtenir à la place l'entrée de stdin.Puce , 7 octets
Essayez-le en ligne!
Sorties
0x0
pour gauche et0x1
pour droite. (Le TIO comprend un indicateur-v
pour que vous puissiez voir les valeurs binaires dans stderr. Pour voir la sortie en ASCII,e*f
peut être ajouté à la fin de la première ligne.)Chip fonctionne sur des bits individuels dans un flux d'octets, ce qui le rend assez bon pour ce problème spécifique.
A
est le bit le moins significatif de l'octet d'entrée et "#" est le seul caractère d'entrée pour lequel ce bit est défini. Lorsque ce bit est rencontré pour la première fois, nous avons atteint le premier «#» de la première ligne.Z
retarde ce signal pendant un cycle, de sorte que nous regardons maintenant le caractère suivant.t
est maintenant activé, ce qui signifie mettre fin à l'exécution une fois ce cycle terminé. Nous n'avons pas besoin de regarder plus loin que la largeur de la première route.~S
supprime la sortie pour tous les cycles sauf le dernier. Si ce n'était pas le cas, nous obtiendrions une sortie à chaque cycle.a
met la valeur actuelle de ses voisins (seulementA
dans ce cas) au bit le moins significatif de l'octet de sortie.Tout cela signifie que nous obtenons un
0x1
si le premier «#» est immédiatement suivi d'un autre «#», et0x0
sinon.la source
C, 35 octets
Même idée que la réponse de PragmaticProgrammer : trouver la première
#
et sortir ce qui vient après -#
pour "droite" et<space>
pour "gauche".C (échappatoire), 16 octets
Selon les cas de test, il semble que la route de gauche soit toujours exactement à un espace de la marge de gauche. Donc...
la source
Lot, 46 octets
Lit une ligne de STDIN, la divise en espaces et imprime le premier mot, donc sort
#
pour gauche et##
pour droite. Si un tableau de paramètres de ligne de commande entre guillemets est acceptable, alors pour 36 octets:Annule le premier argument pour qu'il soit divisé en espaces et imprime son premier mot.
la source
Python 2, 21 octets
Essayez-le en ligne
Sortie
#
pour gauche et##
pour droitela source
Rétine , 5 octets
Essayez-le en ligne!
Une solution alternative à 5 octets. Imprime
#
pour gauche et##
pour droite. L'idée est de faire correspondre toutes les séries de#
s (#+
) et print (!
) seulement la première d'entre elles (1
).la source
Haskell, 21 octets
ou dans un style sans point:
"#" signifie droite et "" signifie gauche
La fonction prend juste une chaîne, supprime les espaces de début, puis, elle prend le deuxième caractère (espace si la gauche est maigre et # si la gauche est épaisse)
EDIT: économisé trois octets grâce à Laikoni et nimi!
la source
(!!2).dropWhile(' '==)
suffit comme réponse.!!1
pour le 2ème élément. Vous pouvez raccourcir le test à<'!'
. Dans la version sans point, vous pouvez remplacerdropWhile
parsnd.span
.Brainfuck, 32 octets
Non golfé:
Imprime
#
pour droite etpour gauche.
Essayez-le en ligne!
la source
Perl 5 , 8 + 1 = 9 octets
Essayez-le en ligne!
Courir avec
-a
(1 octet de pénalité).La sortie est (où filename est le nom de fichier du script) si la route de gauche est moins fréquentée, ou
# at filename line 1, <> line 1
## at filename line 1, <> line 1
si la route de droite est moins fréquentée.Explication
L'
-a
option lit automatiquement l'entrée et la divise en colonnes autour de l'espace blanc, en ignorant le premier espace blanc. En tant que tel, la première donnée d'entrée est ce dont nous avons besoin; c'est$F[0]
. Il place également le programme dans une boucle implicite, ce que nous ne voulons pas. Cependant, l'utilisation dedie
nous permet de sortir une chaîne et de quitter la boucle implicite en même temps (et sans plus de caractères quesay
la façon la plus habituelle d'imprimer une chaîne).la source
C 54 octets
C ++ 58 octets
Depuis OP spécifié, il peut s'agir d'un "programme / fonction", j'ai choisi d'écrire une fonction pour enregistrer les caractères. Cependant, j'ai toujours inclus l'instruction "#include" et le saut de ligne qui l'accompagne dans le nombre de caractères car ils sont nécessaires pour compiler la fonction.
Production
Renvoie un
" "
caractère espace pour indiquer la gauche ou un"#"
caractère de hachage pour indiquer la droite.Explication
La fonction strchr () parcourt une chaîne donnée et renvoie un pointeur sur la première occurrence d'un caractère spécifié. Il a une surcharge qui accepte un entier comme deuxième argument par opposition à un caractère qui me sauve 1 caractère. Par exemple, '#' peut être remplacé par 35. J'en ajoute ensuite un au pointeur renvoyé par la fonction pour obtenir le caractère suivant immédiatement, et le déréférencer, puis retourner le caractère résultant.
Remarque
Je voudrais également saisir cette occasion pour exprimer formellement mon désagrément à Visual Studio en formatant automatiquement mon code lorsque j'essaie de jouer au golf (╯ ° □ °) ╯︵ ┻━┻.
Edit: Merci à Ray pour avoir souligné certaines différences en C et C ++ et où j'ai pu enregistrer des caractères <3.
la source
#include <string.h>\n
avecchar*strchr();
et enregistrer 6 octets tout en étant parfaitement légal. (Et si vous préférez le C ++ pour une raison quelconque, vous pouvez le remplacer#include <string.h>
par#include <cstring>
et enregistrer 1 octet.)JavaScript (ES6), 37 octets
Explication:
p
est une fonction qui renvoietrue
si la route la moins fréquentée est à gauche et fausse sinon. Ceci est ma première réponse sur ce site, donc il pourrait probablement être joué plus (peut-être le regex.)Cela fonctionne en prenant la ligne supérieure de l'entrée et en voyant si elle correspond à l'expression régulière
/^ *#( |$)/
(début de chaîne, n'importe quelle quantité d'espaces, un # et un espace ou fin de chaîne.)C'est juste pour donner aux gens des éclaircissements sur le format et générer des idées. Je suis sûr qu'il peut être battu et joué plus loin. Bon golf!
la source
[^#]
Japt , 3 octets
(2 octets pour l'
-g1
indicateur) Sorties#
pour la droite et un espace pour la gauche. Basé sur la réponse JavaScript de David Archibald.Essayez-le en ligne!
la source
Excel, 17 octets
Suppose l'entrée dans la cellule
A1
.Renvoie
##
pour droite et#
(#
et espace) pour gauche.la source
Dyvil , 12 octets
Explication:
Usage:
Renvoie
(espace) pour gauche et
#
pour droite.la source
Java 7,
16666635243 octetsSorties
35
pour droite et32
pour gauche.Sur la base de @Clashsoft réponse Dyvil de .
Explication:
Code de test:
Essayez-le ici.
Production:
la source
Befunge 98, 11 octets
Essayez-le en ligne!
Impressions
32
pour gauche, et35
pour la droite, les deux avec un seul espace de fin.Explication
Une astuce que j'ai utilisée était de mettre la
-!jv
première, même si cela ne faisait rien. Cela m'a permis de me débarrasser de l'espace après le'
et d'économiser du rembourrage. Avec ce dernier, le code seraitpour 15 octets.
la source
Rubis, 20 octets
Renvoie vrai pour gauche, faux pour droite.
la source