Os países possuem uma série de territórios em um mundo 1D. Cada país é identificado exclusivamente por um número. A propriedade dos territórios pode ser representada por uma lista da seguinte maneira:
1 1 2 2 1 3 3 2 4
Definimos os territórios de edgemost de um país como os dois territórios mais próximos de uma das extremidades. Se a lista acima não tiver sido indexada em zero, 1
os territórios de edgemost do país ocorrerão na posição 0
e 4
.
Um país circunda outro se a sub-lista entre seus dois territórios edgemost contiver todos os territórios de outro país. No exemplo acima, a 2
sub- lista entre os territórios de edgemost do país é:
2 2 1 3 3 2
E vemos que todos os territórios do país 3
estão entre os territórios edgemost do país 2
, então país 2
circunda o país 3
.
Um país com apenas um elemento nunca cercará outro.
Desafio
Dê uma lista de inteiros como entrada (em qualquer formato) e saída de um truthy valor se qualquer país é cercado por uma outra, e uma Falsas valor de outra forma.
Você pode assumir que a lista de entrada não é vazia, contém apenas números inteiros positivos e não ignora nenhum número: por exemplo, 1 2 1 5
seria uma entrada inválida.
Casos de teste
+----------------------+--------+
| 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 |
+----------------------+--------+
Respostas:
Pitão, 7 bytes
Execute o código nos casos de teste.
A única maneira de evitar o entorno é que os territórios mais à esquerda dos países sejam classificados na mesma ordem que seus territórios mais à direita. Se dois países são trocados nessa ordem, um tem um território mais à esquerda e mais à direita do que o outro, e o rodeia.
Para obter os países únicos em ordem do território mais à esquerda, simplesmente desduplicamos, o que preserva essa ordem. O mesmo é feito para o território mais à direita revertendo, desduplicando e revertendo novamente. Se estes dão resultados diferentes, então um país está cercado.
fonte
Retina ,
6160 bytesMuito mais tempo do que eu gostaria ...
Imprime o número de países que cercam pelo menos um outro país.
Experimente online.
É uma implementação muito direta das especificações: procuramos o padrão
A...B...A
tal queB
apareça nem antes nem depois da partida.fonte
Python, 64 bytes
A única maneira de evitar o entorno é que os territórios mais à esquerda dos países sejam classificados na mesma ordem que seus territórios mais à direita. Se dois países são trocados nessa ordem, um tem um território mais à esquerda e mais à direita do que o outro, e o rodeia.
A função verifica se a classificação dos territórios por aparência mais à esquerda e aparência mais à direita fornece os mesmos resultados. Infelizmente, as listas Python não são
rindex
análogasrfind
; portanto, revertemos a lista e, em seguida, revertemos a saída classificada.Mesmo comprimento (64) com função auxiliar:
fonte
C #, 113 bytes
Ungolfed:
Usando uma
LINQ
abordagem concisa .fonte
int
menos que você diga o contrário". +1 para o algoritmo e implementação..ToArray()
.using System.Linq;
+n=>!n.Distinct().SequenceEqual(n.Reverse().Distinct().Reverse())
(infelizmente a importação do Linq é obrigatória). Experimente online. Boa resposta, +1 de mim!CJam (
1413 bytes)Demonstração online
Agradecemos a Martin Büttner pela economia de um char.
fonte
Japonês, 12 bytes
Experimente online!
Agradecemos ao @xnor por descobrir o algoritmo. A matriz de entrada é automaticamente armazenada
U
,â
é uniqify,w
é reversa e¦
é!=
.¬
junta-se à string vazia ([1,2,3] => "123"
); isso é necessário porque a comparsa do JavaScript conta duas matrizes como não iguais, a menos que sejam o mesmo objeto. Por exemplo (código JS, não Japt):Se não fosse esse o caso, poderíamos remover dois bytes simplesmente não unindo cada matriz:
fonte
ES6,
76756564 bytesPorta direta das respostas do @ xnor.
Editar: salvou 1 byte substituindo
a.lastIndexOf(x)==i
pora.indexOf(x,i+1)<0
.Editar: salvou 10 bytes graças a @ user81655.
Editar: salvou 1 byte substituindo
r||i
porr|i
.fonte
a=>(f=r=>a.filter((x,i)=>a.indexOf(x,r&&i+1)==(r||i))+a)()!=f(-1)
~
é o mesmo que>=0
.05AB1E , 4 bytes
Experimente online ou verifique todos os casos de teste .
Porto de @xnor resposta Pyth 's .
Explicação:
fonte
Java, 281 caracteres
fonte
Python 3, 90 bytes
Esta função que recebe a entrada como uma lista Python. Infelizmente, as listas Python não suportam diretamente a pesquisa a partir do final, como fazem as strings
rindex()
, mas tudo bem.fonte