Introdução
Considere uma sequência de números inteiros e uma de suas subsequências, digamos A = [4 2 2 4 4 6 5] e B = [2 4 5] . Queremos remover os elementos de B de A em ordem e existem várias maneiras de fazer isso:
A = 4 2 2 4 4 6 5
B = 2 4 5
-> 4 2 4 6
A = 4 2 2 4 4 6 5
B = 2 4 5
-> 4 2 4 6
A = 4 2 2 4 4 6 5
B = 2 4 5
-> 4 2 4 6
A = 4 2 2 4 4 6 5
B = 2 4 5
-> 4 2 4 6
Em todos os casos, a sequência restante é a mesma, [4 2 4 6] . Se isso acontecer, dizemos que B é exclusivamente removível A .
A tarefa
Suas entradas são duas seqüências de números inteiros não negativos, A e B , onde B é garantido para ser uma subsequência de Uma . As entradas podem ser iguais e podem estar vazias. Você pode levá-los na ordem que desejar, em qualquer formato razoável.
Sua saída deve ser um valor verdadeiro se B for removível exclusivamente de A e um valor falso se não.
Regras e pontuação
Você pode escrever um programa completo ou uma função. A menor contagem de bytes vence.
Casos de teste
[] [] -> True
[0,3] [] -> True
[1,0,1] [1] -> False
[0,2] [0,2] -> True
[2,2,1,1,2,2,2] [2,1] -> True
[4,2,2,4,4,6,5] [4,5] -> False
[10,5,10,10,5,10] [10,5,10] -> False
[4,2,2,4,4,6,5] [2,4,5] -> True
[1,1,1,0,0,0,1,1,1,0] [1,0,1,1] -> True
[0,1,0,0,0,0,1,1,0,1] [1,0,1,1] -> False
[0,4,0,0,4,1,4,2,2] [0,0,0,1,4] -> True
[0,2,2,25,0,2,2,26,0,0,2] [2,0,0,0,2] -> True
[1,1,1,3,2,1,3,2,2,3,3,2] [1,1,2,3,2] -> False
[0,3,2,0,1,3,2,0,0,0,3,2] [0,1,2,0,3] -> False
[5,7,2,7,7,1,7,7,5,2,7,7,5,2,2,7,5] [2,7,5,7,7,2] -> False
[5,4,0,5,4,5,4,1,0,4,2,1,1,2,4,4,0,2,2,1] [4,0,1,1,2,1] -> False
[0,1,4,0,1,4,0,1,5,1,4,4,2,0,0,1,1,1,2,4] [0,1,0,0,2,0,1,4] -> True
x%_=x
para o segundo caso de%
. Além disso, acho que a função principal seria mais curta em termos pontuais.x%_=x
não funciona porque os tipos não correspondem, mas_%_=[]
salva um byte.JavaScript (ES6), 141
152 156 159Função recursiva - bastante longa
Menos golfe
Teste
fonte
Pitão - 27 bytes
No celular, na escola, no momento, portanto, não totalmente jogado.
Suíte de teste
fonte
JavaScript (ES6),
116114113 bytesRetorna
false
outrue
.Formatado e comentado
Casos de teste
Mostrar snippet de código
fonte
MATL , 27 bytes
Os casos de teste mais longos ficam sem tempo no compilador online.
Experimente online!
fonte
JavaScript (Firefox 30+),
159147 bytesAqui estão algumas abordagens alternativas, ambas funções anônimas:
Snippet de teste
Mostrar snippet de código
fonte
Mathematica, 128 bytes
Função sem nome, recebendo dois argumentos de lista, onde o primeiro é a subsequência e o segundo é a sequência completa; saídas
True
ouFalse
.A parte principal é a seguinte sequência, sem necessidade de legibilidade:
Aqui
#
representa a subsequência - por exemplo{2,4,5}
,. O primeiroArray
comando cria uma lista de strings como{"a1___","a2___","a3___","a4___"}
, que é entãoRiffle
d junto com#
para produzir uma lista estranha como{"a1___",2,"a2___",4,"a3___",5,"a4___"}
; então essa lista é convertida em uma expressão real do Mathematica. Por exemplo{2,4,5}
, uma avaliação parcial desse código principal éque exatamente dá uma lista de todas as formas possíveis para remover a subsequência
{2,4,5}
de#2
e deixar o resto da lista sozinho.Depois que essa lista é gerada, simplesmente removemos duplicatas usando
Union
e testamos se o comprimento da saída resultante é 1 ou não.fonte