Est-ce un vol?
Passé
Vous possédez une petite bijouterie dans la banlieue de la ville. Les banlieues sont trop surpeuplées, donc votre boutique n'a qu'une épaisseur d' un seul caractère pour s'intégrer dans les rues animées.
Récemment, il y a eu de nombreux cas de vols qualifiés dans le quartier, et vous craignez que des voleurs viennent également chercher votre prime.
Par conséquent, vous avez installé des caméras de surveillance pour prendre soin de la boutique. Mais il y a un gros problème: les caméras n'émettent pas de bip ou d'alarme .
Vous décidez de programmer vous-même l'alarme de sécurité. Cela complétera les engins et (espérons-le) rendra votre petite boutique sûre et sécurisée.
Tâche
Vos caméras de surveillance cartographieront votre boutique comme ceci:
WI J E WIl s'agit de votre entrée, que vous pouvez extraire de STDIN ou des arguments de ligne de commande. Chacune des lettres a des significations différentes.
- W représente un mur . Les voleurs et les intrus ne peuvent pas les traverser.
- E signifie les employés . Ce sont les êtres que les caméras reconnaissent. S'ils voient un intrus, ils déclenchent immédiatement l'alarme avant que les voleurs ne puissent faire quoi que ce soit. (Ils peuvent voir un intrus s'il n'y a pas de mur , de bijou , d' intrus ou d'autre employé entre les deux) Ils ont également tendance à rester immobiles.
- J signifie bijoux . Voilà ce que recherchent les voleurs et les intrus.
- Je veux dire intrus . Ce sont probablement des voleurs. Leur but est de voler (au moins un) les bijoux de la boutique.
- Bien sûr, vous pouvez créer votre propre légende de la carte dans le but d'enregistrer des octets de code.
En fonction de l'entrée, vous devez écrire un programme (ou une fonction) qui effectue les opérations suivantes:
- Si un intrus peut librement mettre la main sur un bijou OU un employé peut voir un intrus :
- Imprimez une valeur de vérité. ("1", "Vrai", "Alerte")
- Pour être complètement alerte, imprimez le caractère de cloche ASCII. (Il a un code ASCII de 7. Lorsqu'il est imprimé, il joue un son ting sur de nombreux ordinateurs et implémentations)
- Dans la plupart des implémentations, il ne peut pas y avoir de son ting , alors soyez prudent!
- Dans certains cas où la cloche ne peut absolument pas être imprimée, imprimez une exclamation ('!') À la place. (L'impression de points d'exclamation peut être plus difficile à implémenter dans certaines langues)
- Autre:
- Imprimez une valeur fausse. ("0", "Faux", "Silencieux")
- Si un intrus peut librement mettre la main sur un bijou OU un employé peut voir un intrus :
La boutique ne s'enroule pas .
Welp, votre ordinateur tourne lentement lorsque vous exécutez trop d'octets. Essayez de programmer votre code aussi court que possible. (
code-golf)
Exemples de tests
STDIN: EXAMPLE STDOUT:
WI J E W 1(BEL)
WIWWJWE W 0
E I J I E 1(BEL)
I W J E 0
I E W E E 1(BEL)
IIIIEIIII 1(BEL)
JJJJEJJWI 0
Remarque: "(BEL)" fait référence au caractère de la cloche, pas à la chaîne.
Bonne chance!
Réponses
Gelée , 10 8 octets
ḟ⁶OIA7fỌ
Un programme complet qui affiche une chaîne vide (falsey) si tout va bien ou un caractère de cloche sinon (un caractère de cloche est également vrai).
Contribution:
Wall W
Employee X
Jewel J
Intruder Q
Essayez-le en ligne!
Ou voir la suite de tests (le pied de page traduit d'abord les caractères des exemples et appelle le lien pour chaque ligne).
Comment?
ḟ⁶OIA7fỌ - Main Link: list of characters in "W QJX"
⁶ - a space character
ḟ - filter-discard (remove any spaces)
O - to ordinals (e.g. "WXQJ" -> [87,88,81,74])
I - incremental differences (e.g. [87,88,81,74] -> [1,-7,-7])
...possible values are: -14 -13 -7 -6 -1 0 1 6 7 13 14
-7 and 7 indicate an intruder (Q) is next to a jewel (J) or employee (X)
A - absolute values
7 - seven
f - filter keep ([7] if any of the values are 7 else [])
Ọ - cast to characters (bell character in a list or an empty list)
- implicit print
...single-element lists print their element
while empty lists print an empty string
Brachylog , 17 12 10 octets
-5 octets en ne faisant pas la distinction entre les employés et les bijoux
-2 octets en utilisant l'addition, pas la multiplication, donc j'obtiens 7 pour \ a gratuitement
Les carreaux vides le sont -, les intrus sont aussi des humans, les bijoux sont toujours des Janguilles, les employés du magasin le sont eet les murs >se referment. Dans Brachylog, un prédicat qui réussit est la valeur de vérité. Donc, c'est soit une valeur comme sortie ( BEL), soit l'unification a échoué, représentée par false..
ạ%₉ᵐs+7g~ạ
Essayez-le en ligne!
Tout cela est fait pour que les octets modulo 9 ạ%₉ᵐmappent (empty) => 0, I => 5, J => 2, E => 2, W => 8. Avec cela, nous pouvons additionner chaque sous-ensemble d'éléments consécutifs s+et vérifier si l'un d'entre eux est 7( I J, ie 5+0+0+2ou E I, ie 2+0+0+5). Étant donné que les tuiles vides correspondent à 0, elles ne changent pas la valeur, ni l'ordre. De plus, 7 ne peut pas être fait par d'autres éléments. Si un sous-ensemble correspond, renvoie le converti 7 en octet ~gạ, ce qui est \a.
05AB1E , 7 octets
áÇ¥Ä7Ãç
Port de la réponse Jelly de @JonathanAllan , alors assurez-vous de le voter également!
Tout comme sa réponse, j'utilise W= wall; J= bijou; X= employé; Q= intrus.
Produit un ou plusieurs caractères BEL dans une liste comme valeur de vérité ou une liste vide comme valeur de faux.
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
á # Only keep the letters of the (implicit) input-string (removes spaces)
Ç # Convert each character to its codepoint integer
¥ # Get the forward difference between each codepoint pair
# (one of: [-14,-13,-7,-6,-1,0,1,6,7,13,14])
Ä # Take the absolute value of each difference
7Ã # Only keep all 7s in the list
ç # And convert those 7s (if any) to an ASCII character with this codepoint
# (after which the resulting list is output implicitly as result)
Python 3 , 52 octets
Utilise #au lieu de pour les espaces vides et au lieu de Wpour les murs. La sortie est une chaîne vide en tant que valeur fausse et le caractère de cloche pour les entrées de vérité.
lambda s:any({*'I#'}<{*g,'#'}for g in s.split())*''
Essayez-le en ligne!
JavaScript (ES6), 33 28 octets
Sauvé 5 octets grâce à @DomHastings!
Attend eun bijou, et les personnages définis dans le défi pour les autres objets.
Le non imprimable BELest échappé ci-dessous.
s=>/E *I|I *E/i.test(s)&&'\7'
Essayez-le en ligne!
AWK , 47 \$\cdots\$ 27 26 octets
Sauvé 2 3 7 8 octets grâce à Dominic van Essen !!!
A un caractère de cloche non imprimable entre guillemets.
$0=/[EJ] *I|I *[EJ]/?"":0
Essayez-le en ligne! (Avec cloche imprimable)
S'il y a un danger à portée de main, sort le caractère de cloche (vérité) ou renvoie 0 (faux) sinon.
perl -pl, 26 octets
$_=/I *[EJ]|[EJ] *I/?"^G":0
Essayez-le en ligne!
Comme il est difficile de saisir des caractères non imprimables, le caractère de cloche est ici (et dans TIO), représenté par la combinaison de deux caractères ^G. Dans le programme réel, c'est le caractère avec le code ASCII 7 (donc, je le compte comme 1 caractère).
Comment ça marche?
Tous les cas décrits se résument à un intrus à côté de quelques bijoux ou d'un employé. Nous utilisons donc une expression régulière pour détecter ce cas.
perl -pl, 15 octets
s/E *I|I *E/^G/i
Essayez-le en ligne!
Ici, «vérité» est considéré comme «contient un caractère BEL» et «faux» comme «ne contient pas de caractère BEL». Et il utilise la suggestion de @Dom Hastings d'utiliser ecomme symbole pour les bijoux.
perl -F / [EJ] \ s * I | I \ s * [EJ] / -pl, 13 octets
$_=@F>1?"^G":0
Essayez-le en ligne!
Nous pouvons décharger une partie du travail sur un commutateur de ligne de commande et le réduire à 13 octets.
Pip , 26 21 octets
3NST(_-BMPaRMs)?o.'!i
Essayez-le en ligne!
-5 octets après les changements d'entrée de Dominic Van Essen.
Prend les entrées comme:
8 → Wall
4 → intruder
7 → Jewel
1 → Employee
Prend les différences, convertit en chaîne, vérifie s'il y en a 3 dans la représentation sous forme de chaîne.
Pyth , 13 octets
*\lf&/TN@GTc
Essayez-le en ligne!
Légende
j- bijoue- employés"- intrus- mur#- vide
Explication
*\!lf&/TN@GTc
f # filter
c # input split on whitespace chars
# with lambda T:
@GT # some lowercase alphabet in T
&/TN # and '"' in T
*\!l # output '!' repeated length of results of filter times
R , 74 octets
function(x)`if`(grepl('IE|EI|IJ|JI',gsub(' ', '',x)),intToUtf8(c(49,7)),0)
Essayez-le en ligne!
C (gcc) , 97 octets
i;j;r;t;f(char*s){for(i=j=r=0;t=*s++;t==87?i=j=0:0)i|=t==73,j|=t==74|t==69,r|=i&j;r&&putchar(7);}
Essayez-le en ligne (avec un point d'exclamation au lieu de la cloche car TIO ne peut pas le gérer)
Charbon , 18 octets
×!⊙⪪EIIEIJJI²№⁻θ ι
Essayez-le en ligne! Le lien est vers la version verbeuse du code. Sorties !puisque BEL n'est pas dans la page de codes de Charcoal. Explication:
EIIEIJJI Literal string `EIIEIJJI`
⪪ ² Split into 2-character substrings
⊙ Any substring satisfies
№ (non-zero) Count of
ι Current substring in
θ Input string
⁻ With spaces deleted
×! `!` if the above is true
Implicitly print