Scrivi una funzione (come placeAt) che accetta un array di numeri interi non negativi e un indice che è un numero intero non negativo. Dovrebbe posizionare un 1 sull'indice dato, eventualmente spostando altre voci di un punto per liberare quel punto, con gli 0 che stanno per i punti vuoti.
- Se la voce nell'indice desiderato è 0, riempila con un 1.
- Altrimenti, cerca lo 0 più vicino a sinistra dell'indice. Sposta le voci di un punto a sinistra in quello 0 per fare spazio, quindi riempi l'indice con un 1.
- Se non c'è 0 a sinistra, fai lo stesso andando a destra.
- Se nessuno dei due è possibile (ovvero se non è presente 0), restituisce l'array invariato.
Gli articoli sono indicizzati 0. Il nome della funzione può essere quello che vuoi.
Esempi:
(Le lettere indicano qualsiasi valore intero positivo.)
[a, b, 0, c, d, 0] placeAt 2 // output [a, b, 1, c, d, 0] place 2 is 0, just fill
[a, b, 0, c, d, 0] placeAt 3 // output [a, b, c, 1, d, 0] place 3 is filled, shift items left
[a, b, 0, c, d, 0] placeAt 0 // output [1, a, b, c, d, 0] place 0 is filled, can't shift left, shift items right
[a, b, 0, c, d, 0] placeAt 1 // output [a, 1, b, c, d, 0] place 1 is filled, can't shift left, shift items right
[0, a, b, 0, c, d, 0] placeAt 2 // output [a, b, 1, 0, c, d, 0] place 2 is filled, shift items left
[0, a, b, 0, c, d, 0] placeAt 4 // output [0, a, b, c, 1, d, 0] place 4 is filled, shift items left (notice you keep shifting up until a 0)
[0, 2, 0, 2] placeAt 3 // output [0, 2, 2, 1] place 3 is filled, shift items left
Questa è una sfida del codice golf. Vince l'ingresso più breve alla fine di 9 giorni.
[0, 2, 0, 2] placeAt 3è legale produrre [2, 0, 2, 1]? Il codice deve essere effettivamente una funzione chiamata placeAt? Nota che alcune lingue non hanno esattamente funzioni. "Lancia un'eccezione" potrebbe anche non essere applicabile ad alcune lingue; Suggerirei di consentire un output che indica un errore.
[2, 0, 2, 1]non è un output legale, poiché dovresti sempre spostare il minor numero possibile di elementi e puoi nominare la funzione come preferisci.

0?