JḟÐ € `ị⁸Ṃ €
ṙJṖ € Ṃ €
ṙJṖ «/ argomento: 1D array (z)
J [1,2,3, ..., len (z)]
ṙ ruota z di ciascuna delle quantità di cui sopra (l'array corrente è 2D)
Ṗ rimuovere l'ultimo array
«/ Riduzione del minimo [impliclitly vettorializzato]
Provalo online!
Verifica tutti in una volta! (leggermente modificato)
Sono abbastanza sicuro che Dennis possa giocare a golf.
Come funziona
L'algoritmo è piuttosto contorto. Osserviamo cosa fa questo [4,2,2,5].
In primo luogo, usiamo Jper ottenere [1,2,3,4]. Nota che Jelly utilizza l'indicizzazione 1.
Quindi vediamo ṙ. Sono necessari due argomenti: un array e un numero intero. Ruota l'array a sinistra di un importo specificato dall'intero. Qui, ṙvedrebbe [4,2,2,5]alla sua sinistra e [1,2,3,4]alla sua destra (di più su come funziona può essere trovato nel tutorial ). In Jelly, i comandi implicitamente vettorializzano. Pertanto, questo comando verrà eseguito su ogni singolo elemento a destra, motivo per cui dovremmo creare un array 2D:
Pertanto, [4,2,2,5]ṙ[1,2,3,4]diventa [[4,2,2,5]ṙ1,[4,2,2,5]ṙ2,[4,2,2,5]ṙ3,[4,2,2,5]ṙ4], che diventa:
[[2,2,5,4],
[2,5,4,2],
[5,4,2,2],
[4,2,2,5]]
Si noti che gli elementi originali si trovano nell'ultima riga, poiché in quella riga abbiamo ruotato a sinistra di un importo pari alla lunghezza dell'array, motivo per cui utilizziamo Ṗaccanto per rimuovere quella riga, in modo che le colonne siano le raccolte di gli elementi dell'array che non si trovano nell'indice corrente:
[[2,2,5,4],
[2,5,4,2],
[5,4,2,2]]
Anche l'operazione seguente «/è piuttosto contorta. In primo luogo, «restituisce il minimo dei due numeri che vede alla sua sinistra e alla sua destra. Ad esempio, 5«3restituisce3 . Ora, se i due argomenti sono array, allora vettorializzerebbe come ho detto sopra. Cosa significa che [1,5,2,3]«[4,1,5,2]diventerebbe quello [1«4,5«1,2«5,3«2]che è [1,1,2,2]. Ora, /è reduce, il che significa che eseguiamo l'operazione su ogni riga fino alla fine. Ad esempio, [1,2,3,4]+/diventerebbe ((1+2)+3)+4, che è la somma dell'array [1,2,3,4].
Quindi, se applichiamo «/all'array 2D che abbiamo appena ottenuto, otterremmo:
([2,2,5,4]«[2,5,4,2])«[5,4,2,2]
che, a causa della vettorializzazione, sarebbe equivalente a:
[2«2«5,2«5«4,5«4«2,4«2«2]
che calcola il minimo di ogni array senza l'elemento nell'indice.
[4 3 2 2 5]produrre?