Je continue à entendre que sortir des sentiers battus est un objectif à atteindre, mais comment puis-je savoir si je le fais avec succès?
Pour résoudre ce dilemme, j’ai déjà écrit un traducteur Brainwave-to-ASCII qui, en théorie, devrait produire des résultats tels que
#
+------------+ #
| thinking | #
| | #
+------------+ #
#
ou
#
+------+ #
| | thinking #
| | #
| | #
+------+ #
#
ce qui le rend assez facile à dire si on pense en dehors de la boîte ou pas. (Ils #
ne font pas partie de la sortie et représentent de nouvelles lignes.)
Cependant, parfois à cause d’un bogue, seule une petite partie de la sortie est renvoyée:
| | #
+---------+ #
thinking #
#
+#
|#
inking |#
#
#
La tâche
S'il vous plaît, aidez-moi à classer automatiquement la sortie du traducteur Brainwave-to-ASCII en écrivant un programme ou une fonction qui lit une représentation ascii et retourne si elle se thinking
trouve dans la boîte, en dehors de celle-ci ou si elle ne pouvait pas la révéler à partir de l'entrée.
Contribution
Un ensemble de chaînes de même longueur, sous forme de liste ou délimité par des nouvelles lignes contenant
- la chaîne
thinking
ou ses pré- ou suffixes valides - les caractères
+-|
formant une boîte rectangulaire ou des parties valides de celle-ci - les espaces
- NON
#
, ceux-ci ne sont inclus que dans le défi de marquer les extrémités des lignes d'entrée.
Sortie
- une valeur de vérité si
thinking
est en dehors de la boîte - une valeur de fausseté si
thinking
est dans la boîte - une troisième valeur distincte peut-être si elle ne peut pas être déterminée à partir de l'entrée si elle
thinking
est dans la boîte ou non
Exemples
Vérité
#
+------+ #
| | thinking #
| | #
| | #
+------+ #
#
| | #
+---------+ #
thinking #
#
+#
|#
|#
inking |#
thinking #
-------+ #
++ # (thinking is not in the box, so it must be outside)
++ # (this is also the smallest possible box)
+ #
t#
+----+# (The box is not wide enough to contain "thinking")
---# (The box is not high enough to contain "thinking")
---#
En entrée de chaîne:
" \n +------+ \n | | thinking \n | | \n | | \n +------+ \n "
" | | \n +---------+ \n thinking "
" \n +\n |\n |\ninking |"
"thinking \n-------+ "
" ++ \n ++ "
"+ \n t"
"+----+"
"---\n---"
"g++"
"k\n+"
Fausseté:
#
+------------+ #
| thinking | #
| | #
+------------+ #
#
+---------------#
| #
| #
| thinking #
| #
king | #
------+ #
+---#
|thi#
+---#
-#
n#
-#
En entrée de chaîne:
" \n +------------+ \n | thinking | \n | | \n +------------+ \n "
" +---------------\n | \n | \n | thinking "
" | \nking | \n------+ "
"+---\n|thi\n+---"
"-\nn\n-"
Peut être:
thinking#
g|#
think#
-----#
| |# (box large enough to possibly contain the string)
| |#
+--#
| #
# (empty input)
En entrée de chaîne:
"thinking"
"g|"
"|t"
"-\ni"
"h\n-"
"think\n-----"
"| |\n| |"
" +--\n | "
""
Règles
- C'est du code-golf , alors essayez d'utiliser le moins d'octets possible.
- La peut - être la valeur peut être choisie librement tant qu'il est différent de la truthy / valeur falsy et est la même pour tous les intrants peut - être. Cela peut aussi être une erreur.
- Vous pouvez supposer que la saisie est toujours valide (par exemple, ne contient aucun autre caractère que
+-ghiknt|
, pas plus d'une case, ...).
la source
+\n+
boîte trop petite pour un motRéponses:
Javascript (ES6),
274263 octetsLa fonction des
f
rendementstrue
,false
ou-1
sa valeur « peut - être ». Il devrait être appelé avec un seul argument: l'entrée. Les deux autres paramètres n'existent que pour raccourcir le code.Voici une version moins golfée avec des commentaires:
J'ai eu beaucoup de plaisir avec celui-ci. Merci!
Edit: 6 octets enregistrés grâce @L. Serné en modifiant l’
b
utilisation d’un argument par défaut, en sauvegardant 3 octets, et en passant[a-z]
à\w
, en sauvegardant 3 octets supplémentaires. Également enregistré 5 octets supplémentaires en rendant le remplacement de mot non global, en enregistrant 1 octet, et en passant"a"
à5
et","
en4
, économisant 4 octets.la source
console.log(f("input"))
. Semble travailler. Excellent travail sur le golf cela.b=(b,c)
àb=(b,c="")
, puis vous pourrez supprimer le dernier argument des deux appelsb
avec une chaîne vide comme second argument, en enregistrant (2 * 3-3 =) 3 octets au total. En outre, vous pouvez raccourcir le mot regex de[a-z]+
à\w+
(faites ceci avant que l’autre remplace, car cela correspondra également aux chiffres) en économisant 3 octets supplémentaires.Python 2.7,
532494453 octetsCelui-ci avait certainement beaucoup de cas particuliers. Mes valeurs de vérité et de fausseté sont les chaînes "True" et "False" respectivement. Ma valeur est peut-être une erreur d'index, car ils sont faciles à déclencher et qu'un de mes tests le déclenche si l'entrée est une chaîne vide, ce qui est peut-être un cas de toute façon. Je me suis beaucoup servi des expressions régulières.
Je ne joue pas souvent au python, alors je suis sûr que cela pourrait être plus pratique, mais voici mon code:
Dans ma version jouée au golf, j'affiche la réponse vraie / fausse en appelant
exit(bool as string)
. Voici une version commentée, dans laquelle les instructions de sortie sont remplacées par des instructions de retour, et tout a été déplacé dans une fonction:Ma solution suppose que l'entrée est valide, c'est-à-dire que 'Thinking' (ou ses sous-chaînes) est orthographié correctement, il n'y a qu'une seule boîte, etc.
Edit: Sauvegardé 10 octets grâce à la suggestion de @ ais523 de passer
c
ài.count('+')
3 octets grâce à la suggestion de @ Pavel de remplacerTrue
par1<2
etFalse
avec2>1
, 23 octets en supprimant un bloc else inutile, et 2 octets en supprimant des espaces.Edit 2: Sauvegardé 36 octets grâce à @Wheat Wizard qui a gentiment fait remarquer que mes "onglets" étaient en réalité de 5 espaces (D'oh!) Et a suggéré d'autres améliorations.
la source
i
ne jamais changer, non? Donc , vous pourriez probablement économiser quelques octets en stockanti.count('+')
dansc
plutôt quei.count
, comme vous l' appelez jamais avec aucun argument , mais+
.Befunge, 535 octets
Ce n’est pas beau, et n’est pas proche de concurrencer les réponses existantes, mais c’est le meilleur que je puisse obtenir à Befunge.
Retours
1
si la pensée en dehors de la boîte,0
si la pensée dans la boîte, et-1
pour peut - être .Essayez-le en ligne!
la source