Unir mazos de flashcards
Una dos mazos de tarjetas sin preguntas repetidas: un mazo con fotosíntesis y mitosis más otro con mitosis y meiosis quedan en 3 tarjetas, y la primera de mitosis conserva su respuesta. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Las aplicaciones de estudio, las exportaciones de LMS y los volcados CSV al estilo Anki a menudo le dejan con dos mazos solapados que comparten el mismo enunciado en muchas tarjetas. Pegarlos a mano invita a duplicados silenciosos que desperdician tiempo de repaso y distorsionan la programación de repetición espaciada. Esta herramienta de fusión de mazos de flashcards acepta dos mazos como arrays de pares anverso y reverso, recorre el mazo A y después el B, y devuelve una sola lista ordenada donde cada anverso exacto aparece una sola vez: gana la primera aparición y conserva su reverso original.
Cómo funciona la fusión y la deduplicación solo por anverso
Aquí una flashcard es un par sencillo: una cadena front (el enunciado o la pregunta) y una cadena back (la respuesta o la definición). Por cada tarjeta pregunta si la cadena exacta del anverso ya se ha conservado; si no, se añade la tarjeta con su reverso sin cambios y se registra el anverso como visto.
Exacto significa igualdad carácter a carácter: espacios al inicio o al final, distinta capitalización o distinta puntuación crean anversos distintos, a propósito, para que las casi coincidencias sigan visibles para revisión humana en lugar de colapsarse en silencio. Cuando el mismo anverso reaparece más tarde —dentro del mismo mazo o en el segundo— la tarjeta posterior se omite por completo, incluido un reverso distinto.
Los recuentos de la respuesta indican cuántas tarjetas tenía cada entrada, cuántas sobrevivieron y cuántas se eliminaron como duplicados de anverso, para que pueda registrar el delta sin volver a escanear los arrays.
Qué puede hacer con ella
Limpieza de exportaciones Anki y LMS
Una dos exportaciones de vocabulario o de cuestionario y elimine anversos duplicados exactos antes de reimportar al software de repetición espaciada.
Reconciliación nocturna de paquetes curriculares
Automatice fusiones de paquetes de estudio de socios en ETL con recuentos deterministas y sin facturación en errores de validación de mazo vacío.
Preguntas frecuentes
¿Qué ocurre si alguno de los mazos está vacío?
Ambos mazos deben contener al menos una tarjeta para que las fusiones vacías nunca se traten como éxito y no se facturen.
¿La detección de duplicados distingue mayúsculas?
Sí. Los anversos se comparan con igualdad exacta de cadena, de modo que distinta capitalización o espaciado cuenta como tarjeta distinta y se conserva.
¿Qué reverso se conserva cuando el mismo anverso aparece dos veces?
Las tarjetas posteriores con ese anverso se eliminan por completo.
¿También se eliminan los duplicados dentro del mismo mazo?
Sí. Cualquier tarjeta posterior cuyo anverso ya se haya conservado se omite, tanto si la copia anterior está en el primer mazo como si aparece antes en el segundo. Los recuentos indican cuántas se eliminaron.
¿Qué mazo conviene poner primero?
El que tenga la redacción de su confianza, como su propio mazo revisado, y en segundo lugar la importación masiva. Gana la primera aparición de cada anverso, así que el primer mazo decide qué respuesta queda.
Herramientas relacionadas
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/edu/flashcard-deck-merge \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"deck_a":[{"front":"What is photosynthesis?","back":"Plants turning light into chemical energy."},{"front":"What is mitosis?","back":"Division into two identical cells."}],"deck_b":[{"front":"What is mitosis?","back":"Duplicate front: dropped, deck_a wins."},{"front":"What is meiosis?","back":"Division into four distinct gametes."}]}'const res = await fetch("https://api.kit.forhosting.com/edu/flashcard-deck-merge", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"deck_a": [
{
"front": "What is photosynthesis?",
"back": "Plants turning light into chemical energy."
},
{
"front": "What is mitosis?",
"back": "Division into two identical cells."
}
],
"deck_b": [
{
"front": "What is mitosis?",
"back": "Duplicate front: dropped, deck_a wins."
},
{
"front": "What is meiosis?",
"back": "Division into four distinct gametes."
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/edu/flashcard-deck-merge",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"deck_a": [
{
"front": "What is photosynthesis?",
"back": "Plants turning light into chemical energy."
},
{
"front": "What is mitosis?",
"back": "Division into two identical cells."
}
],
"deck_b": [
{
"front": "What is mitosis?",
"back": "Duplicate front: dropped, deck_a wins."
},
{
"front": "What is meiosis?",
"back": "Division into four distinct gametes."
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/edu/flashcard-deck-merge", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"deck_a":[{"front":"What is photosynthesis?","back":"Plants turning light into chemical energy."},{"front":"What is mitosis?","back":"Division into two identical cells."}],"deck_b":[{"front":"What is mitosis?","back":"Duplicate front: dropped, deck_a wins."},{"front":"What is meiosis?","back":"Division into four distinct gametes."}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"deck_a":[{"front":"What is photosynthesis?","back":"Plants turning light into chemical energy."},{"front":"What is mitosis?","back":"Division into two identical cells."}],"deck_b":[{"front":"What is mitosis?","back":"Duplicate front: dropped, deck_a wins."},{"front":"What is meiosis?","back":"Division into four distinct gametes."}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/edu/flashcard-deck-merge", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"deck_a": [
{
"front": "What is photosynthesis?",
"back": "Plants turning light into chemical energy."
},
{
"front": "What is mitosis?",
"back": "Division into two identical cells."
}
],
"deck_b": [
{
"front": "What is mitosis?",
"back": "Duplicate front: dropped, deck_a wins."
},
{
"front": "What is meiosis?",
"back": "Division into four distinct gametes."
}
]
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "edu.flashcard_deck_merge",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
Notas técnicas
Cualquier mazo vacío se rechaza con invalid_input para que la automatización nunca finja que una fusión vacía tuvo éxito.
Cómo funciona la fusión y la deduplicación solo por anverso
El fusionador concatena deck_a en orden y después deck_b, y construye el resultado con un único recorrido sobre esa secuencia combinada. Esa regla de la primera gana encaja con cómo la mayoría de las exportaciones de estudio ya ordenan la redacción preferida: ponga el mazo autoritativo primero como deck_a y la importación masiva después como deck_b. El algoritmo es puro y determinista: entradas idénticas siempre producen el mismo JSON, sin semillas aleatorias, relojes ni servicios externos.
Contrato de entrada, forma de la respuesta y errores
Cada array debe contener al menos un objeto con campos de cadena front y back (lados numéricos o booleanos se convierten a texto decimal o true/false; se rechazan objetos anidados). Envíe por POST un cuerpo JSON con dos arrays obligatorios, deck_a y deck_b. Arrays vacíos, mazos ausentes, valores que no son arrays y tarjetas sin ambos lados fallan con invalid_input nombrando el problema, y esos fallos no se facturan. En caso de éxito el cuerpo incluye merged, la lista ordenada de tarjetas {front, back} supervivientes; count, la longitud de merged; deck_a_count y deck_b_count de las entradas validadas; total_input como su suma; duplicates_removed como total_input menos count; y operation con valor flashcard_deck_merge para enrutar con facilidad en pipelines multi-herramienta. Ejemplo: deck_a con anversos photosynthesis y mitosis, y deck_b con un segundo mitosis más meiosis, produce tres tarjetas —photosynthesis, mitosis de deck_a y meiosis— porque el anverso mitosis duplicado de deck_b se descarta y se ignora su reverso más reciente. Combine el resultado con su propio escritor CSV o Anki si necesita un archivo en disco; este endpoint devuelve solo tarjetas estructuradas y no emite paquetes binarios ni adjuntos multimedia.
Dónde merece la pena fusionar mazos de estudio
Quienes aprenden idiomas y exportan dos mazos Anki de la misma lista de vocabulario pueden eliminar lemas duplicados exactos sin abrir una interfaz de escritorio. Como los fallos de validación no consumen saldo, puede sondear importaciones vacías con seguridad durante el ETL. Los docentes que mantienen un mazo maestro de biología y una extensión compartida con la clase a menudo necesitan una unión limpia antes de publicar en un LMS: ponga el maestro como deck_a para que los reversos preferidos se mantengan cuando los alumnos reformularon la misma pregunta. Los trabajos de backend que reconcilian cada noche paquetes curriculares de socios pueden llamar a la API al precio base publicado de $0.002 por elemento correcto, con coste de parse puro tier A y sin tokens de modelo.
Casos de integración
Mazo maestro del docente más extensión de clase
Coloque el mazo curricular autoritativo en deck_a y un mazo aportado por la clase en deck_b para que los reversos preferidos ganen cuando choquen los anversos.
Preguntas técnicas
¿Cómo uno dos mazos de flashcards sin anversos duplicados?
Envíe arrays no vacíos deck_a y deck_b de tarjetas {front, back}. La API recorre deck_a y luego deck_b y conserva solo el primer anverso exacto, devolviendo merged y duplicates_removed.
¿Cuánto cuesta la herramienta de fusión de mazos de flashcards?
La herramienta del navegador es gratuita. Las peticiones API usan saldo KIT prepago a $0.002 por llamada correcta; la entrada inválida no se factura.