L'obiettivo di questa sfida è quello di raccogliere gli elementi selezionati in un elenco e spostarli in una determinata posizione nell'elenco.
Come esempio visivo, prendi i valori di input (rappresentati da numeri interi con riquadro nero) e un elenco corrispondente di valori di verità in cui true indica che l'elemento è selezionato (rappresentato da caselle blu, dove T
è verità ed F
è falsa):
Il primo passo logico è quello di separare gli elementi contrassegnati come verità e non verità nelle loro liste corrispondenti. Si noti che l'ordine relativo in ciascun elenco deve essere mantenuto (cioè l'ordine degli articoli selezionati deve essere 1,4,5
e l'ordine degli articoli non selezionati deve essere 2,3,6,7
)!
Al secondo passaggio logico viene assegnato un indice nell'elenco rimanente di elementi non selezionati, inserire tutti gli elementi selezionati prima dell'elemento nell'indice indicato. Supponendo che l'indicizzazione inizi da 0, si supponga di voler inserire la selezione in corrispondenza dell'indice 3. Ciò corrisponde al punto prima della 7
casella, quindi gli elementi selezionati devono essere inseriti prima di 7
.
La soluzione finale è quindi 2,3,6,1,4,5,7
.
Si noti che questo diagramma logico descrive un modo in cui ciò potrebbe essere fatto; non è necessario che il programma esegua gli stessi passaggi logici purché l'output produca sempre lo stesso risultato osservabile.
Ingresso
Il tuo programma ha 3 ingressi:
- Un elenco di numeri interi che rappresentano gli articoli. Questo potrebbe essere un elenco vuoto. Questo elenco sarà sempre composto da numeri interi positivi unici, non necessariamente in ordine (ovvero 5 non saranno inclusi nell'elenco due volte).
- Un elenco di valori di verità / falsità della stessa lunghezza dell'elenco di articoli, in cui un valore di verità rappresenta che l'elemento nello stesso indice è stato selezionato.
- Un numero intero che rappresenta dove inserire la selezione. È possibile scegliere quale sia l'indice del primo elemento dell'elenco purché sia costante in ogni esecuzione del programma (ad esempio, il primo elemento potrebbe essere l'indice 0 o l'indice 1). Specifica a quale convenzione aderisce il tuo programma. Questo indice dovrebbe essere compreso nell'intervallo
[starting_idx, ending_idx+1]
, ovvero sarà sempre un indice valido. Per l'indice del caso èending_idx+1
, la selezione deve essere inserita alla fine dell'elenco. Puoi presumere che questo numero intero si adatterà al tipo intero nativo della tua lingua.
L'ingresso può provenire da qualsiasi sorgente desiderata (stdio, parametro funzione, ecc.)
Produzione
L'output è un elenco che rappresenta la sequenza finale di elementi. Questo può essere per qualsiasi sorgente desiderata (stdio, valore di ritorno, parametro di uscita della funzione, ecc.). È consentito modificare qualsiasi input sul posto (ad esempio, dato un elenco modificabile come parametro di funzione e fare in modo che la propria funzione operi sul posto in tale elenco).
Casi test
Tutti i seguenti casi di test presuppongono l'indicizzazione basata su 0. Ho usato 0 e 1 per indicare rispettivamente i valori di falsità / verità per la maschera di selezione.
I casi di test hanno liste formattate come [a,b,c]
, ma fintanto che le liste di input rappresentano una sequenza ordinata finita che va bene.
Ingresso:
[]
[]
0
Produzione:
[]
Ingresso:
[1,2,3,4,5,6,7]
[1,0,0,1,1,0,0]
3
Produzione:
[2,3,6,1,4,5,7]
Ingresso:
[1,2,3,4,5,6,7]
[1,0,0,1,1,0,0]
0
Produzione:
[1,4,5,2,3,6,7]
Ingresso:
[1,2,3,4,5,6,7]
[1,0,0,1,1,0,0]
4
Produzione:
[2,3,6,7,1,4,5]
Ingresso:
[1,2,3,4,5,6,7]
[1,1,1,1,1,1,1]
0
Produzione:
[1,2,3,4,5,6,7]
Ingresso:
[1,2,3,4,5,6,7]
[0,0,0,0,0,0,0]
5
Produzione:
[1,2,3,4,5,6,7]
Ingresso:
[1,3,2,5,4,6]
[1,0,0,1,1,0]
3
Produzione:
[3,2,6,1,5,4]
punteggio
Questo è il codice golf; vince la risposta più breve in byte. Sono vietate le scappatoie standard. È consentito utilizzare qualsiasi componente incorporato desiderato.