Introducción
Considere una secuencia de enteros y una de sus subsecuencias, digamos A = [4 2 2 4 4 6 5] y B = [2 4 5] . Queremos eliminar los elementos de B de A en orden, y hay varias formas de hacerlo:
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
En todos los casos, la secuencia restante es la misma, [4 2 4 6] . Si esto sucede, se dice que B es únicamente puede retirar de una .
La tarea
Sus entradas son dos secuencias de números enteros no negativos, A y B , donde B se garantiza que sea una subsecuencia de una . Las entradas pueden ser iguales y pueden estar vacías. Puede tomarlos en el orden que desee, en cualquier formato razonable.
Su salida será un valor verdadero si B es removible de forma exclusiva de A , y un valor falso si no.
Reglas y puntaje
Puede escribir un programa completo o una función. El conteo de bytes más bajo gana.
Casos de prueba
[] [] -> 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 el segundo caso de%
. Además, creo que la función principal sería más corta en forma significativa.x%_=x
no funcionará porque los tipos no coincidirán pero_%_=[]
guardarán un byte.JavaScript (ES6),
141152156159Función recursiva: bastante larga
Menos golf
Prueba
fuente
Pyth - 27 bytes
En el móvil en la escuela en este momento, por lo que no está totalmente golfizado.
Banco de pruebas
fuente
JavaScript (ES6),
116114113 bytesDevoluciones
false
otrue
.Formateado y comentado
Casos de prueba
Mostrar fragmento de código
fuente
MATL , 27 bytes
Los casos de prueba más largos se quedan sin tiempo en el compilador en línea.
Pruébalo en línea!
fuente
JavaScript (Firefox 30+),
159147 bytesAquí hay un par de enfoques alternativos, ambas funciones anónimas:
Fragmento de prueba
Mostrar fragmento de código
fuente
Mathematica, 128 bytes
Función sin nombre que toma dos argumentos de lista, donde el primero es la subsecuencia y el segundo es la secuencia completa; salidas
True
oFalse
.La parte central es la siguiente secuencia, sin pretensiones de legibilidad:
Aquí
#
representa la subsecuencia, por ejemplo{2,4,5}
,. El primerArray
comando crea una lista de cadenas como{"a1___","a2___","a3___","a4___"}
, que luego seRiffle
junta#
para generar una lista extraña como{"a1___",2,"a2___",4,"a3___",5,"a4___"}
; entonces esta lista se convierte en una expresión real de Mathematica. Por ejemplo{2,4,5}
, una evaluación parcial de este código central esque proporciona exactamente una lista de todas las formas posibles de eliminar la subsecuencia
{2,4,5}
de#2
y dejar el resto de la lista solo.Después de generar esta lista, simplemente eliminamos los duplicados usando
Union
y probamos si la longitud de la salida resultante es 1 o no.fuente