Les pays possèdent une série de territoires dans un monde 1D. Chaque pays est identifié de manière unique par un numéro. La propriété des territoires peut être représentée par une liste comme suit:
1 1 2 2 1 3 3 2 4
Nous définissons les territoires les plus en pointe d'un pays comme les deux territoires les plus proches de l'un ou l'autre bord. Si la liste ci-dessus était indexée à zéro, les territoires 1
les plus avancés du pays apparaissent à la position 0
et 4
.
Un pays en entoure un autre si la sous-liste entre ses deux territoires les plus avancés contient tous les territoires d'un autre pays. Dans l'exemple ci-dessus, la sous-liste entre les territoires 2
les plus en pointe du pays est la suivante:
2 2 1 3 3 2
Et nous voyons que tous les territoires de pays se 3
situent entre les territoires les plus avancés du pays 2
, de sorte que le pays 2
entoure le pays 3
.
Un pays avec un seul élément n'en entourera jamais un autre.
Défi
Prenez une liste d’entiers comme entrée (dans n’importe quel format) et générez une valeur de vérité si un pays est entouré par un autre, et une valeur de faux sinon.
Vous pouvez supposer que la liste d'entrée est non vide, qu'elle ne contient que des entiers positifs et qu'elle ne "saute" aucun nombre: par exemple, 1 2 1 5
une entrée invalide.
Cas de test
+----------------------+--------+
| Input | Output |
+----------------------+--------+
| 1 | False |
| 2 1 3 2 | True |
| 2 1 2 1 2 | True |
| 1 2 3 1 2 3 | False |
| 1 3 1 2 2 3 2 3 | True |
| 1 2 2 1 3 2 3 3 4 | False |
| 1 2 3 4 5 6 7 8 9 10 | False |
+----------------------+--------+
Réponses:
Pyth, 7 octets
Exécutez le code sur les cas de test.
La seule façon d'éviter les environs est de trier les territoires les plus à gauche des pays dans le même ordre que leurs territoires les plus à droite. Si deux pays sont échangés dans cet ordre, l’un a un territoire plus à gauche et plus à droite que l’autre, et l’entoure ainsi.
Pour obtenir les pays uniques dans l'ordre du territoire le plus à gauche, nous dédupliquons simplement, ce qui préserve cet ordre. La même chose est faite pour le territoire le plus à droite en inversant, en dédupliquant, puis en inversant à nouveau. Si ceux-ci donnent des résultats différents, alors un pays est entouré.
la source
Retina ,
6160 octetsBeaucoup plus long que je voudrais ...
Imprime le nombre de pays qui entourent au moins un autre pays.
Essayez-le en ligne.
C'est une implémentation très simple de la spécification: nous recherchons le motif
A...B...A
quiB
n'apparaît ni avant ni après le match.la source
Python, 64 octets
La seule façon d'éviter les environs est de trier les territoires les plus à gauche des pays dans le même ordre que leurs territoires les plus à droite. Si deux pays sont échangés dans cet ordre, l’un a un territoire plus à gauche et plus à droite que l’autre, et l’entoure ainsi.
La fonction vérifie que le tri des territoires en fonction de l'apparence la plus à gauche et de l'extrême droite donne les mêmes résultats. Malheureusement, les listes Python n'ont pas d'
rindex
analoguerfind
, aussi nous inversons la liste, puis la sortie triée.Même longueur (64) avec une fonction auxiliaire:
la source
C #, 113 octets
Ungolfed:
Utiliser une
LINQ
approche concise .la source
int
sauf indication contraire". +1 pour l'algorithme et la mise en œuvre..ToArray()
.using System.Linq;
+n=>!n.Distinct().SequenceEqual(n.Reverse().Distinct().Reverse())
(l’importation de Linq est malheureusement obligatoire). Essayez-le en ligne. Bonne réponse, +1 de moi!CJam (
14 à13 octets)Démo en ligne
Merci à Martin Büttner pour l’économie d’un caractère.
la source
Japt, 12 octets
Essayez-le en ligne!
Merci à @xnor d’avoir découvert l’algorithme. Le tableau d'entrée est automatiquement stocké dans
U
,â
est uniqify,w
est inversé et l'¦
est!=
.¬
se joint à la chaîne vide ([1,2,3] => "123"
); cela est nécessaire car la comparaison de JavaScript compte deux tableaux comme non égaux, à moins qu'il ne s'agisse du même objet. Par exemple (code JS, pas Japt):Si ce n'était pas le cas, nous pourrions supprimer deux octets en ne rejoignant tout simplement pas chaque tableau:
la source
ES6,
76756564 octetsPortage direct des réponses de @ xnor.
Edit: Sauvegardé 1 octet en remplaçant
a.lastIndexOf(x)==i
para.indexOf(x,i+1)<0
.Edit: 10 octets sauvegardés grâce à @ user81655.
Edit: Sauvegardé 1 octet en remplaçant
r||i
parr|i
.la source
a=>(f=r=>a.filter((x,i)=>a.indexOf(x,r&&i+1)==(r||i))+a)()!=f(-1)
~
est le même que>=0
.05AB1E , 4 octets
Essayez-le en ligne ou vérifiez tous les cas de test .
Port de @xnor réponse Pyth de .
Explication:
la source
Java, 281 caractères
la source
Python 3, 90 octets
Cette fonction prend l’entrée sous forme de liste Python. Malheureusement, les listes Python ne prennent pas directement en charge la recherche à partir de la fin
rindex()
, contrairement aux chaînes , mais bon.la source