Los países poseen una serie de territorios en un mundo 1D. Cada país se identifica de manera única por un número. La propiedad de los territorios puede representarse mediante una lista de la siguiente manera:
1 1 2 2 1 3 3 2 4
Definimos los territorios más extremos de un país como los dos territorios más cercanos a cualquier borde. Si la lista anterior no estaba indexada, 1
los territorios más extremos del país se encuentran en la posición 0
y 4
.
Un país rodea a otro si la sublista entre sus dos territorios más extremos contiene todos los territorios de otro país. En el ejemplo anterior, la sublista entre 2
los territorios más extremos del país es:
2 2 1 3 3 2
Y vemos que todos los territorios del país 3
están entre los territorios más extremos del país 2
, por lo que el país 2
rodea al país 3
.
Un país con un solo elemento nunca rodeará a otro.
Desafío
Tome una lista de enteros como entrada (en cualquier formato) y genere un valor verdadero si algún país está rodeado por otro, y un valor falso de lo contrario.
Puede suponer que la lista de entrada no está vacía, solo contiene enteros positivos y no 'saltea' ningún número: por ejemplo, 1 2 1 5
sería una entrada no válida.
Casos de prueba
+----------------------+--------+
| 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 |
+----------------------+--------+
Respuestas:
Pyth, 7 bytes
Ejecute el código en casos de prueba.
La única forma de evitar los alrededores es ordenar los territorios más a la izquierda de los países en el mismo orden que sus territorios más a la derecha. Si se intercambian dos países en este orden, uno tiene un territorio más a la izquierda y más a la derecha que el otro, y así lo rodea.
Para obtener los países únicos en orden de territorio más a la izquierda, simplemente deduplicamos, lo que preserva este orden. Lo mismo se hace para el territorio más a la derecha invirtiendo, deduplicando y luego invirtiendo nuevamente. Si estos dan resultados diferentes, entonces un país está rodeado.
fuente
Retina ,
6160 bytesMucho más de lo que me gustaría ...
Imprime el número de países que rodean al menos a otro país.
Pruébalo en línea.
Es una implementación muy sencilla de la especificación: buscamos el patrón
A...B...A
tal queB
no aparezca ni antes ni después del partido.fuente
Python, 64 bytes
La única forma de evitar los alrededores es ordenar los territorios más a la izquierda de los países en el mismo orden que sus territorios más a la derecha. Si se intercambian dos países en este orden, uno tiene un territorio más a la izquierda y más a la derecha que el otro, y así lo rodea.
La función verifica que al ordenar los territorios por la apariencia más a la izquierda y la más a la derecha se obtienen los mismos resultados. Desafortunadamente, las listas de Python no tienen un
rindex
análogorfind
, por lo que revertimos la lista y luego revertimos la salida ordenada.Misma longitud (64) con una función auxiliar:
fuente
C #, 113 bytes
Sin golf:
Usando un
LINQ
enfoque conciso .fuente
int
capricho de "variables que se supone que son a menos que usted diga lo contrario". +1 para el algoritmo y la implementación..ToArray()
.using System.Linq;
+n=>!n.Distinct().SequenceEqual(n.Reverse().Distinct().Reverse())
(desafortunadamente, la importación de Linq es obligatoria). Pruébalo en línea. Buena respuesta, +1 de mi parte!CJam (
1413 bytes)Demostración en línea
Gracias a Martin Büttner por un ahorro de un personaje.
fuente
Japt, 12 bytes
Pruébalo en línea!
Gracias a @xnor por descifrar el algoritmo. La matriz de entrada se almacena automáticamente
U
,â
es unificable,w
es inversa y¦
es!=
.¬
se une con la cadena vacía ([1,2,3] => "123"
); Esto es necesario porque la comparación de JavaScript cuenta dos matrices como no iguales a menos que sean el mismo objeto. Por ejemplo (código JS, no Japt):Si este no fuera el caso, podríamos eliminar dos bytes simplemente no uniendo cada matriz:
fuente
ES6,
76756564 bytesPuerto directo de las respuestas de @ xnor.
Editar: guardado 1 byte reemplazando
a.lastIndexOf(x)==i
cona.indexOf(x,i+1)<0
.Editar: Guardado 10 bytes gracias a @ user81655.
Editar: guardado 1 byte reemplazando
r||i
conr|i
.fuente
a=>(f=r=>a.filter((x,i)=>a.indexOf(x,r&&i+1)==(r||i))+a)()!=f(-1)
~
es el mismo que>=0
.05AB1E , 4 bytes
Pruébelo en línea o verifique todos los casos de prueba .
Puerto de @xnor respuesta Pyth 's .
Explicación:
fuente
Java, 281 caracteres
fuente
Python 3, 90 bytes
Esta función que toma la entrada como una lista de Python. Lamentablemente, las listas de Python no admiten directamente la búsqueda desde el final como lo hacen las cadenas
rindex()
, pero bueno.fuente