Ecrivez un programme qui prend une seule ligne que vous pouvez supposer ne contiendra que les caractères /\_‾
. (Il s'agit de barres obliques, soulignées et surlignées en avant et en arrière . Vous pouvez utiliser le ~
surlignage si vous en avez besoin, car le surlignage n'est pas pratique en ASCII.)
Par exemple, une entrée possible est:
__/‾‾\/\_/‾
Votre programme doit générer une valeur de vérité ou de fausseté selon que le bord gauche de la chaîne est "connecté", pour ainsi dire, au bord droit de la chaîne via les lignes des caractères. Donc, si le crénage était un peu moins, il y aurait une ligne noire continue (du moins crépue) du bord gauche au droit, comme un morceau de ficelle ou de ficelle ininterrompu.
La sortie pour l'exemple ci-dessus serait vraie car les bords sont connectés:
Pour être clair sur les connexions:
/
se connecte en bas à gauche et en haut à droite\
se connecte en haut à gauche et en bas à droite_
se connecte en bas à gauche et en bas à droite‾
(ou~
) se connecte en haut à gauche et en haut à droite
Aussi:
Peu importe que les bords de la chaîne commencent en haut ou en bas, il importe simplement qu'ils se connectent horizontalement sur toute la longueur de la chaîne.
Vous pouvez supposer que la chaîne d'entrée est non vide et, bien entendu, sur une seule ligne.
Voici d'autres exemples suivis de 1 (vérité) s'ils sont connectés ou de 0 (falsie) sinon:
__/‾‾\/\_/‾
1
_
1
\
1
/
1
‾
1
___
1
\/
1
/\/
1
/\/\
1
‾‾‾
1
\\
0
‾‾
1
_‾
0
‾_
0
\_____/
1
\/\\/\\___
0
\/\__/‾‾\
1
______/\_____
1
‾‾‾‾‾‾\\_____
0
‾‾‾‾‾‾\______
1
_____/‾‾‾‾‾
1
\___/‾‾‾\___/‾‾‾
1
\_/_\_
0
\_/\_
1
/\/\/\/\/\/\/\/\/\/\/\/
1
____________________
1
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
1
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾/
0
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\
1
/\‾/\‾___/\_\/__\/\‾‾
0
Le code le plus court est le gagnant.
la source
Réponses:
Gelée , 9 octets
-1 octet grâce à @EriktheOutgolfer
Attendez-vous0 1
~
au lieu de‾
. Retourne ou .Essayez-le en ligne! , Suite de tests Truthy , suite de tests Falsy
En utilisant cette formule (mais similaire à la version 11 octets ci-dessous):
La transition est valide si est impair ou invalide si est pair.n n
Commenté
Jelly ,
14 1211 octetsPrend en charge (et attend) le0 1
‾
caractère dans la chaîne d'entrée. Retourne ou .Essayez-le en ligne! , Suite de tests Truthy , suite de tests Falsy
Comment?
Étant donné deux caractères consécutifs des codes ASCII et , nous voulons une fonction qui vérifie s’ils forment une transition valide.X y
Nous avons besoin d'une opération non commutative, car le résultat peut changer lorsque les caractères sont inversés. Par exemple,
_/
est valide mais/_
ne l’est pas.En utilisant exponentiation, une formule possible 1 est:
La transition est valide si , ou invalide si .n ≤ 1 n > 1
1. Trouvé avec une recherche par force brute dans Node.js (en utilisant BigInts)
Commenté
la source
⁽"O
est identique à9580
.Ruby -n , 30 octets
Essayez-le en ligne!
Réduit toutes les séquences de rupture de chaîne à deux cas en utilisant les classes de caractères Regex.
la source
~
place de‾
. Je ne sais pas si cela compte pour ce défi, car le nombre de personnages est le même./
s alors qu’ils sont entre crochets?JavaScript (ES6), 45 octets
La manière naïve.
Essayez-le en ligne!
la source
s=>!/[~\/][\/_]|[_\\][\\~]/.test(s)
. Il vérifie si\/
ou se~
termine par\/
ou_
. Et puis, il vérifie si\\
ou se_
termine dans\\
ou~
.R ,
89 87 8178 octets-2 octets grâce à @ Giuseppe
-6 octets grâce à @Nick Kennedy
-3 octets remplaçant
1:length(y)
parseq(a=y)
, oùa
est un raccourci pouralong.with
utilise
\ / _ ~
. Ce n’est probablement pas aussi bref qu’une solution basée sur l’expression régulière, mais j’ai envie de faire quelque chose de différent de tout le monde.Les personnages de moins de 93 commutent l’état de haut en bas (ou inversement) et se comportent comme tels
-1
tandis que les autres ne font rien et se comportent comme1
, cumprod suit l’état par rapport au début. Les nombres pairs sont dans un état de nord (représenté par-1
), les nombres impairs sont à l'état bas (1
). Si la chaîne n'est pas interrompue, l'état de suivi multiplié par la position haut / bas, ne doit pas changer, ce sera toujours la condition de départ (-1
, ou1
)Essayez-le en ligne
la source
()
environsy%%2
pour économiser 2 octets, car les opérateurs spéciaux%(any)%
ont une priorité assez élevée.!
Python , 46 octets
Essayez-le en ligne!
Confirme que chaque paire de caractères adjacents se connecte en vérifiant qu'ils apparaissent consécutivement dans23= 8
__/~~\/\_
. Cette chaîne peut être vue comme une séquence De_Bruijn_n sur les triplets de positions haute / basse.J'ai essayé d'autres méthodes moins banales pour vérifier les paires de caractères, mais elles étaient toutes plus longues que le codage en dur de toutes les paires légales comme celle-ci.
la source
C (gcc) , 93 octets
Essayez-le en ligne!
la source
w,o,r;k
.Puce
-z
, 17 octetsEssayez-le en ligne! (TIO inclut
-v
pour faciliter la compréhension de la sortie.)Attend l'
_/~\
ensemble. Retourne soit\x00
(fausseté) ou\x01
(vérité).La stratégie pour ma réponse utilise les informations suivantes:
A
: Cette position de bit se trouve1
quand le côté gauche du symbole est bas et0
quand il est hautF
: Cette position de bit se trouve0
quand le côté droit du symbole est bas et1
quand il est hautC
: Cette position de bit arrive à toujours être1
En utilisant ces informations, je dois simplement vérifier que le caractère
F
de chaque caractère correspond à celuinot A
du suivant. Unexor
porte est un moyen pratique pour y parvenir.Le code suivant fait cela, mais donne une sortie pour chaque paire (plus un extra
1
au début) (7 octets):Nous voulons nous arrêter au premier échec, et indiquer également si nous nous sommes arrêtés dans la chaîne ou au terminateur null (nous ajoutons également
-z
pour nous donner un terminateur nul). Nous pouvons utilisernot C
pour indiquer où nous nous sommes arrêtés, et cela nous donne ce programme (13 octets):Mais nous avons toujours des "zéros non significatifs" (par exemple,
\_/\
donne00 00 00 00 01
), ceci est donc transformé en réponse donnée en haut.la source
05AB1E ,
29149 octetsLa réponse du Port of @Arnauld 's Jelly , assurez-vous de l’avoir à son tour revigorée!
Entrée avec
‾
.Essayez-le en ligne ou vérifiez tous les cas de test .
Réponse originale de 29 octets :
Entrer avec
~
au lieu de‾
.Cela sonnait plus court dans ma tête ..
Je vais essayer de jouer au golf ici.Essayez-le en ligne ou vérifiez tous les cas de test .
Explication: "
Voir cette astuce 05AB1E (sections Comment compacter les grands nombres entiers? Et Comment compresser les listes d’entiers? ) Pour comprendre pourquoi
•6_üê{↕
est1781179816800959
,ƵΔ
est180
et•6_üê{↕ƵΔв
est[52,66,69,100,103,131,179]
.Explication supplémentaire:
["/_", 52]
["\~", 66]
["_~", 69]
["//", 100]
["\\", 100]
["_\", 103]
["~_", 131]
["~/", 179]
__
~~
//
\\
0
100
~
et_
dans la chaîne d'entrée, avant de calculer et de vérifier les différences de paires.la source
Python 3 ,
797063 octets16 octets sauvés grâce à Arnauld et Jo King, merci!
Essayez-le en ligne!
Python 3 ,
6760 octets avec ~ au lieu deEssayez-le en ligne!
la source
Python 3, 126 octets
la source
Haskell , 70 octets
Cette variante utilise à la
~
place des surlignages. Il prend les huit paires valides et vérifie si la chaîne ne contient que celles-ci:Essayez-le en ligne!
Ungolfed:
la source
Perl 6 , 32 octets
Essayez-le en ligne!
Une solution d'expression régulière qui vérifie simplement que la chaîne ne contient aucune séquence invalide.
Explication:
la source
R , 43 caractères, 47 octets
C'est la même chose que les autres réponses utilisent, mais adaptée pour R.
Essayez-le en ligne!
Et obligatoire xkcd .
la source
~
à la place de‾
43 octets, 43 caractères.Forth (gforth) ,
10098 octetsEssayez-le en ligne!
Explication
Parcourez la chaîne et déterminez si chaque caractère commence à la même position (haut ou bas) que celle qui précède. Soustrayez 1 du compteur s’ils ne correspondent pas. A la fin, si le compteur a changé, la chaîne n'est pas une chaîne.
La position finale est haute si le caractère est
/
(47) ou~
(126). Sinon c'est basLa position de départ est haute si le caractère est
\
(92) ou~
(126). Sinon c'est basExplication du code
la source
Python 3 ,
8078 octetsJe ne fais pas vraiment beaucoup de golfs avec code python mais je pensais pouvoir essayer
Essayez-le en ligne!
Python 3.8 (pré-version) , 71 octets
Je voulais essayer la nouvelle
:=
tâche d'expressionEssayez-le en ligne!
la source
Jelly ,
13 1211 octetsUn lien monadique acceptant une liste de caractères utilise l' option
~
in place of‾
.Essayez-le en ligne! Ou voir une suite de tests (... où j'ai réorganisé pour placer les 8 falsey à la fin)
Cette formule a été trouvée en jouant à la main: p (comme ceux ci-dessous)
Pour celui-ci, les 16 paires d'ordinaux de personnage sont également traitées comme une exponentiation et recherchent un grand modulo pouvant contenir trois octets, suivi d'un modulo d'un octet (1,2,3,4,5,6,7,8 , 9,10,16,256) qui a divisé le 16 de sorte que tous les résultats acceptables soient 1 ou 0 ("insignifiant"), car je sais qu’elle
Ị
est plus courte que<5
dans ma solution précédente, qui recherchait tous les résultats acceptables inférieurs à tous inacceptables.Les personnages voisins possibles et leurs évaluations internes:
Précédent @ 12:
Essayez-le en ligne!
Précédent @ 13:
Essayez-le en ligne!
la source
Ị
c'était testerabs(x)<1
plutôt queabs(x)≤1
. Cela offre encore quelques opportunités. :) (Je suis également bloqué à 11 octets pour le moment.)Ị
très utile très souvent.perl 5,
2625 octetsen utilisant
;
comme délimiteur, le délimiteur de fin peut être suppriméTIO
26 octets
la source
Excel, 150 octets
Supprime toutes les paires non valides, puis renvoie le
true
résultat s'il en résulte la chaîne d'origine.la source
Haskell, 42 octets
cette solution utilise
~
, et la fonction à appeler est h (c'est-à-dire,h string
donne la réponse)La solution utilise une fonction g qui donne une liste à tous les nuplets de valeurs adjacentes de la liste.
Ensuite, nous utilisons g pour générer la liste des voisins autorisés (en
g"__/~~\\/\\_"
) ainsi que la liste de toutes les paires voisines de la liste en entrée. Ensuite, nous vérifions que chaque paire voisine est une paire autorisée.la source
C (gcc) ,
4136 octetsEssayez-le en ligne!
-5 éliminé à
&1
partir d'une idée de Peter Cordes ; opérateurs modifiés (priorité) pour supprimer les parenthèsesUtilise
~
. Vérifie les premier et sixième bits des représentations binaires des deux premiers caractères:et traverse la chaîne récursivement.
(*_ / 32) & 1
n'est vrai que pour les caractères qui se terminent haut, alors que ce*_ & 1
n'est vrai que pour les caractères qui commencent bas.(x&1) ^ (y&1) == (x+y)&1
. XOR est add-without-carry, et carry ne perturbe pas le bit le plus bas. Le1
provient de laf(_)
valeur de retour, si le reste de la chaîne était stringy.la source
c&32
C’est vrai pour les personnages qui se terminent haut, alors que celac&1
n’est vrai que pour les personnages qui commencent très bas.)*_ ^ *++_
s’agit d’un comportement indéfini: ce^
n’est pas un point de séquence; il n’ya donc aucune relation séquentielle avant garantissant qu’ils obtiennent des caractères différents. Bien sûr, il manque également unreturn
, de sorte que cela ne fonctionne quegcc -O0
lorsque le corps de la fonction est une expression de déclaration.&1
deux fois est redondant.(x^y)&1 == (x&1) ^ (y&1)
. Mais étant donné la priorité de l'opérateur C où la priorité&
est supérieure à celle^
(contrairement aux opérateurs arithmétiques où + et - ont la même priorité), il faudrait ajouter()
2 octets pour supprimer&1
2 octets, car ce(x&1) ^ y
n'est pas équivalent. Mais peut-être que l’utilisation de parens ouvre des possibilités d’épargne. Heureusement, ce n'est pas un problème pour une version code-x86 de cette machine, où la manipulation des bits est très compacte ...Bash, 30 octets
L'entrée est STDIN. Le code de sortie est 1 si valide, 0 si invalide.
la source
SNOBOL4 (CSNOBOL4) , 58 octets
Essayez-le en ligne!
N'émet rien pour truey et un entier positif (indiquant la position de la première rupture dans la chaîne) pour fausseté.
la source
Charbon de bois ,
32 à18 octetsEssayez-le en ligne! Le lien est vers la version verbeuse du code. Explication:
la source
Code machine x86, 13 octets.
(Ou 11 octets sans gérer les chaînes à caractère unique qui sont trivialement stringentes.)
Utilise le contrôle de position de bit de la réponse C de @ attinat
Le même code machine fonctionne en modes 16, 32 et 64 bits. La source est NASM pour le mode 64 bits.
Appelable à partir de C comme
unsigned char string_connected(int dummy_rdi, const char *s, int dummy_rdx, size_t transitions);
avec la convention d'appel System V x86-64. Nonbool
parce que le cas de transitions = 0 renvoie un code ASCII, pas 1.RCX = len = strlen(s) - 1
. c'est-à-dire le nombre de limites de caractère = transitions à archiver dans la chaîne de longueur explicite.For
transitions > 0
, renvoie 0 (décalage) ou 1 (connecté) et laisse ZF défini en conséquence. Cartransitions == 0
, renvoie le seul octet de la chaîne (ce qui est différent de zéro et donc également vrai). Sans ce cas particulier, nous pourrions abandonner le JRCXZ à sortie anticipée. C'est à l'intérieur de la boucle uniquement parce qu'AL y est non nul.La logique de position de bit est basée sur l'observation que le bit 0 du code ASCII vous indique la hauteur de départ et le bit 5, la hauteur de fin.
Faisceau de test (modifié à partir du lien TIO d’attinat, méfiez-vous du UB de séquence C dans cette fonction de référence C). Essayez-le en ligne! . Cette fonction est correcte pour les 30 cas. (Y compris les observations à caractère unique où la valeur renvoyée ne correspond pas: les deux sont la vérité avec différentes valeurs non nulles dans ce cas.)
la source
Excel, 79 octets
Cellule
A1
en entréela source
Dart , 94 octets
Essayez-le en ligne!
la source
C ++,
132110 octets-22 octets grâce à ASCII uniquement
Utilise un bitmask pour savoir si le début et la fin sont hauts ou bas
la source
Retina , 26 octets
Essayez-le en ligne!
Les utilisations
~
plutôt que‾
parce que cela facilitait la frappe.la source
Regex, 34 octets
Je ne pouvais pas trouver de règles sur l'utilisation de Regex en tant que langue. S'il vous plaît laissez-moi savoir si j'ai besoin d'ajuster cela.
Essayez-le ici: https://regex101.com/r/s9kyPm/1/tests
la source
‾
à~
APL + WIN, 58 octets
m ← 2 2 '' _ / \ ~ '⍳s ←, ⎕⋄ (1 + ⍴s) = + / ((↑ m [0;]), m [1;]) = m [0;], ¯ 1 ↑ m [1;]
Invite à saisir une chaîne, une origine d'index 0 et utilise ~ pour le caractère supérieur
Essayez-le en ligne! Gracieuseté de Dyalog Classic
la source