Molto più bravi di me con il foglio di calcolo

programmer_joke12Io su Facebook sono alquanto atipico. Lo uso solo per spammare, nel senso che segnalo quando faccio un post sui blog. E poco più. Rispondo a chi mi tagga (si dice così, vero?) e ogni tanto ci do una scorsa ma senza né impegno né metodo. Ho anche smesso di fare gli auguri di compleanno, mi sembra una cosa non da orso quale vorrei essere, o almeno sembrare.
Poi capitano cose che mi fanno dire “Ohhh!” proprio come quel testa-di-povia di Povia.

Sto parlando di questo post trovato sul gruppo Figli di Archimede, legittimi e…in adozione che non so bene se si riesca a vedere da chi non ne fa parte.

In particolare mi riferisco al post del 19 maggio 2015 di Cristiano Armellini che riproduco (se del caso cancello quanto mi verrà chiesto):

questo file Excel non l’ho fatto io ma lo propongo perché ha una formula molto interessante per ottenere i numeri primi (nulla di particolare ma minimizza lo spazio di memoria).

Problema adesso: non so se posso mettere il link al foglio di calcolo, cioè l’ho messo ma non so se funziona e allora metto un paio di immagini per ricostruirlo (tipo Ikea, anzi ricetta per libro di cucina (tipo ricettario)).

x1

Come si vede nella colonna B si trovano i numeri naturali (per qualche motivo la serie parte dalla riga 2, forse per poter mettere un titolo alle colonne). La colonna C invece ha una formula, a partire dalla riga 3; quella che in B3 ha il testo 2.

Le formule con questo tipo di strumento sono un po’ –come dire– facciamo che metto quella per la cella C6, quella in cui mi trovo nell’immagine precedente:

x2

Chiaro no? L’unica cosa particolare è RESTO che è quello che di solito si chiama modulo e viene scritto % o mod(), questo dice l’help:

resto

Quindi tornando alla formula io la trovo che mi meraviglia, assay.

Per scriverla basta posizionarsi in C3 e scrivere:

=SE(SOMMA(SE(RESTO(B3;B$2:B2)=0; 1; 0))=1; 1; "")

Poi copiarla e incollarla su tutte le celle sottostanti e gli indici vengono aggiornati automaticamente (tranne quelli bloccati con il $); per esempio in C6 abbiamo quella della figura là sopra, questa:

=SE(SOMMA(SE(RESTO(B6;B$2:B5)=0; 1; 0))=1; 1; "")

Per capire cosa fa, proprio come nel Lisp (anche qui le parentesi abbondano) si riduce partendo dalla coppia di parentesi più interne e si procede verso l’esterno e il tutto diventa chiaro. Se la somma del valore della lambda per il calcolo del modulo per il numero nella colonna a sinistra rispetto a tutti i numeri precedenti (partendo dal 2) è zero il numero è primo e viene scritto 1 nella cella.

OK? 😀

Ecco io ho usato lambda, parola che non credo si trovi nei manuali di queste cose ma è quella. Anche perché RESTO da solo farebbe un’altra cosa.
Quello che mi fa poviare è com’è scritta la formula, la sua sinteticità; con i linguaggi normali (tranne APL e successori) sarebbe parecchio più lunga. Ma resta comprensibile, l’ho capita anch’io.

Poi che io ci riesca a scriverla è un altro discorso, completamente differente. Anche perché, se del caso, ho altre possibilità. Esempio:

factor

Oppure, installando bsdgames:

primes

Ma se fossi invidioso l’invidia per gli excelsers rimarrebbe tutta :mrgreen:

Posta un commento o usa questo indirizzo per il trackback.

Trackback

  • Comandi composti | Ok, panico su 23 maggio 2015 alle 09:51

    […] Come mi hanno chiesto due baldi giovani (ehi! il figlio di P. che lavorava con me quando è nato 😀 come passa il tempo!) riguardo al caso dell’altro giorno, questo. […]

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.

%d blogger hanno fatto clic su Mi Piace per questo: