Unire mazzi di flashcard
Unisca due mazzi di flashcard senza domande ripetute: un mazzo con fotosintesi e mitosi più uno con mitosi e meiosi diventano 3 carte, e la prima carta sulla mitosi conserva la sua risposta. Gratis nel suo browser.
- Gratis
- Funziona nel suo browser
- Senza registrazione
- I suoi dati restano sul dispositivo
Esegui gratis nel browser
Le app di studio, le esportazioni LMS e i dump CSV in stile Anki spesso Le lasciano con due mazzi sovrapposti che condividono lo stesso enunciato su molte carte. Incollarli a mano invita duplicati silenziosi che sprecano tempo di ripasso e alterano la pianificazione della ripetizione dilazionata. Questo strumento di unione di mazzi di flashcard accetta due mazzi come array di coppie fronte e retro, percorre il mazzo A e poi il B e restituisce un'unica lista ordinata in cui ogni fronte esatto compare una sola volta: vince la prima occorrenza e conserva il retro originale.
Come funzionano l'unione e la deduplica solo sul fronte
Qui una flashcard è una coppia semplice: una stringa front (l'enunciato o la domanda) e una stringa back (la risposta o la definizione). Per ogni carta chiede se la stringa esatta del fronte è già stata conservata; in caso contrario la carta viene aggiunta con il retro invariato e il fronte viene registrato come visto. Esatto significa uguaglianza carattere per carattere: spazi iniziali o finali, capitalizzazione diversa o punteggiatura diversa creano fronti distinti, di proposito, così le quasi coincidenze restano visibili per la revisione umana invece di collassare in silenzio.
Quando lo stesso fronte riappare più tardi —nello stesso mazzo o nel secondo— la carta successiva viene saltata del tutto, compreso un retro diverso. I conteggi della risposta indicano quante carte aveva ciascun input, quante sono sopravvissute e quante sono state rimosse come fronti duplicati, così può registrare il delta senza riscannare gli array.
Casi d'uso
Pulizia di esportazioni Anki e LMS
Unisca due esportazioni di vocabolario o quiz ed elimini i fronti duplicati esatti prima di reimportare nel software di ripetizione dilazionata.
Riconciliazione notturna di pacchetti curricolari
Automatizzi unioni di pacchetti di studio dei partner in ETL con conteggi deterministici e senza addebito sugli errori di validazione di mazzo vuoto.
Domande frequenti
Cosa succede se uno dei mazzi è vuoto?
Entrambi i mazzi devono contenere almeno una carta così le unioni vuote non vengono mai trattate come successo e non vengono addebitate.
Il rilevamento dei duplicati distingue maiuscole e minuscole?
Sì. I fronti si confrontano con uguaglianza esatta di stringa, quindi capitalizzazione o spaziatura diverse contano come carta distinta e vengono conservate.
Quale retro viene conservato quando lo stesso fronte compare due volte?
Le carte successive con quel fronte vengono scartate del tutto.
Vengono rimossi anche i duplicati dentro lo stesso mazzo?
Sì. Ogni carta successiva il cui fronte è già stato tenuto viene saltata, che la copia precedente sia nel primo mazzo o più in alto nel secondo. I conteggi mostrano quante ne sono state rimosse.
Quale mazzo conviene mettere per primo?
Quello con la formulazione di cui si fida, come il suo mazzo già rivisto, lasciando per secondo l'importazione in blocco. Vince la prima comparsa di ogni fronte, quindi è il primo mazzo a decidere quale risposta resta.
Strumenti correlati
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo 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)Esempio di richiesta
{
"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."
}
]
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "edu.flashcard_deck_merge",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |
Note tecniche
Qualsiasi mazzo vuoto viene rifiutato con invalid_input affinché l'automazione non finga mai che un'unione vuota sia riuscita.
Come funzionano l'unione e la deduplica solo sul fronte
L'unione concatena deck_a in ordine e poi deck_b, e costruisce il risultato con un unico passaggio su quella sequenza combinata. Questa regola del primo che vince corrisponde a come la maggior parte delle esportazioni di studio ordina già la formulazione preferita: metta il mazzo autorevole per primo come deck_a e l'importazione di massa dopo come deck_b. L'algoritmo è puro e deterministico: input identici producono sempre lo stesso JSON, senza semi casuali, orologi né servizi esterni.
Contratto di input, forma della risposta ed errori
Ogni array deve contenere almeno un oggetto con i campi stringa front e back (lati numerici o booleani vengono convertiti in testo decimale o true/false; gli oggetti annidati sono rifiutati). Invii con POST un corpo JSON con due array obbligatori, deck_a e deck_b. Array vuoti, mazzi assenti, valori non array e carte senza entrambi i lati falliscono con invalid_input indicando il problema, e tali fallimenti non vengono addebitati. In caso di successo il corpo include merged, l'elenco ordinato delle carte {front, back} sopravvissute; count, la lunghezza di merged; deck_a_count e deck_b_count degli input validati; total_input come loro somma; duplicates_removed come total_input meno count; e operation impostato a flashcard_deck_merge per un routing semplice in pipeline multi-strumento. Esempio: deck_a con fronti photosynthesis e mitosis, e deck_b con un secondo mitosis più meiosis, produce tre carte —photosynthesis, mitosis da deck_a e meiosis— perché il fronte mitosis duplicato di deck_b viene scartato e il retro più recente viene ignorato. Abbini il risultato al proprio scrittore CSV o Anki se le serve un file su disco; questo endpoint restituisce solo carte strutturate e non emette pacchetti binari né allegati multimediali.
Dove unire mazzi di studio conviene
Chi studia lingue ed esporta due mazzi Anki per lo stesso elenco di vocaboli può eliminare lemmi duplicati esatti senza aprire un'interfaccia desktop. Poiché i fallimenti di validazione non consumano saldo, può sondare importazioni vuote in sicurezza durante l'ETL. I docenti che mantengono un mazzo master di biologia e un'estensione condivisa con la classe spesso necessitano di un'unione pulita prima di pubblicare su un LMS: metta il master come deck_a così i retri preferiti restano quando gli studenti hanno riformulato la stessa domanda. I job di backend che ogni notte riconciliano pacchetti curricolari dei partner possono chiamare l'API al prezzo base pubblicato di $0.002 per elemento riuscito, con costo di parse puro tier A e senza token di modello.
Casi di integrazione
Mazzo master del docente più estensione di classe
Metta il mazzo curricolare autorevole in deck_a e un mazzo contribuito dalla classe in deck_b così i retri preferiti vincono quando i fronti collidono.
Domande tecniche
Come unisco due mazzi di flashcard senza fronti duplicati?
Invii array non vuoti deck_a e deck_b di carte {front, back}. L'API percorre deck_a e poi deck_b e conserva solo il primo fronte esatto, restituendo merged e duplicates_removed.
Quanto costa lo strumento di unione di mazzi di flashcard?
Lo strumento nel browser è gratuito. Le richieste API usano saldo KIT prepagato a $0.002 per chiamata riuscita; l'input non valido non viene addebitato.