Esercizietti fanta-matematici con python

Cerca nel sito

Altri risultati..

Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors


Esercizietto 1

Il telefono di DOC
Sull’elenco telefonico Matryx HOMFLY trova il numero di DOC: esso è pari a (1) + (1 + 2) + · · · + (1 + 2 + · · · + 1918). Quante cifre ha?


SOLUZIONE

Vediamo il codice:

S = 0
for n in range(1, 1918+1):
  S = S + sum(range(1, n+1))
print(S)
Output
1177805440
Attenzione:
range(a, b) va da a a b-1; b è il primo escluso.
Sembra fastidioso, ma nel ‘grande schema delle cose’ è un’idea migliore.
Riduce di molto la quantità di ±1 arbitrari.

Es.
len(range(a, b)) == b-a.
Esercizietto 2
Ad ogni edizione delle Olimpiadi di Matematica, a partire dalla numero zero, Biff Tauber scommette sul vincitore grazie al Grande Almanacco. La vincita che ottiene all’edizione n è di an dollari, dove a0 = 0, e per ogni intero n valgono le relazioni a3n = an,  a3n+1 = an − 1,  e  a3n+2 = an + 2.
Finita l’edizione numero 2018, Biff realizza che, dall’inizio delle scommesse, ha guadagnato una montagna di dollari. Quanti, di preciso?
SOLUZIONE
a = [None] * 2019
a[0] = 0
for n in range(2019//3):
  a[3*n] = a[n]
  a[3*n+1] = a[n] - 1
  a[3*n+2] = a[n] + 2
print(sum(a[0:2019]))
Output
4105
  • Abbiamo preallocato una lista di 2019 elementi. Più comodo in questo caso che non a.append().
  • Le liste possono contenere oggetti arbitrari (anche diversi).
  • Una lista lunga n contiene elementi a[0], a[1], … , a[n-1].
  • Funziona anche a[-1] = ultimo elemento, a[-2] = penultimo. . .
  • a[inizio:fine] restituisce la sottolista nel ‘range’ inizio:fine (con le solite regole sui range!).
  • Ma, soprattutto: la logica del programma corrisponde abbastanza bene alla matematica.

Esercizietto 3

Circuiti difettosi
I circuiti del tempo sono stati danneggiati da un fulmine: ora la DeuLerean può raggiungere solo gli anni di quattro cifre tali che la cifra delle migliaia sia maggiore o uguale alla somma delle altre tre. “Poco male” dice DOC, e calcola rapidamente in quanti anni diversi può viaggiare. Che numero trova? Si intende che un numero di quattro cifre ha la cifra delle migliaia non nulla.

Ti potrebbe interessare anche:  Python: Un altro esercizio svolto sulla fattorizzazione

SOLUZIONE

def is_acceptable(n):
  d = [int(a) for a in str(n)]
  return d[3] >= d[0] + d[1] + d[2]
for n in range (1000,10000):
  if is_acceptable(n):
    print(n)
print ('Gli anni totali sono: ',len([n for n in range(1000,10000) if is_acceptable(n)]))
Output
1001
1002
1003
1004
1005
1006
1007
1008
1009
1012
1013
1014
1015
1016
1017
1018
1019
1023
1024
1025
1026
………
7019
7029
7108
7109
7119
7209
8008
8009
8019
8109
9009
Gli anni totali sono: 495
Esercizietto 4
Direttamente nella tua casella
Il prof. Fredholm mostra a Frege una mappa dell’universo, a forma di scacchiera infinita bidimensionale; ogni casella rappresenta un settore del piano galattico. Indica col dito il centro del settore corrispondente alla Terra, e spiega: “La nostra astronave per le consegne ha un motore di mia invenzione che utilizza materia oscura come carburante. Con due palline di materia oscura, prodotte dal nostro Mordaglia, può spostarsi di un settore in orizzontale o in verticale; con tre può spostarsi di un settore in diagonale.
Partendo dalla nostra base sulla Terra, possiamo fare consegne in qualunque settore raggiungibile con 60 palline di carburante o meno. Incluso quello di partenza, ovviamente”, aggiunge ridacchiando. In quanti settori diversi può fare consegne la Planar Express?
SOLUZIONE
def distance_from_origin(a,b):
  a = abs(a); b = abs(b)
  return 3*min(a, b) + 2*abs(a-b)
  
len([(a,b) for a in range(-40,40) for b in range(-40,40) if
distance_from_origin(a, b) <= 60])
Output
2441
Esercizietto 5
“V’`e un sol modo di uscire dall’inferno—disse la mia guida Cartesio—attraverso questa rete di cunicoli, che sbuca dall’altro lato della Terra”, e mi mostrò una mappa su un foglio di pergamena. Su di essa era tracciato un triangolo ABC. Sul lato BC stavansi nell’ordine 21 punti A1, A2, . . . , A21 tali che BA1 = A1A2 = · · · = A20A21 = A21C. Analogamente, sul lato CA v’erano in quest’ordine 21 punti B1, . . . , B21, di nuovo con CB1 = B1B2 = · · · = B20B21 = B21A, e poscia sul lato AB in quest’ordine 10 punti C1, . . . , C10, con AC1 = C1C2 = · · · = C9C10 = C10B. Eran poi tracciate tutte le rette del tipo AAi, BBj e CCk per i = 1, 2, . . . , 21, j = 1, 2, . . . , 21 e k = 1, 2, . . . , 10.
Finalmente, con l’aiuto di Cartesio, riuscimmo a scoprire in quante regioni era diviso il triangolo, risolvendo un problema con la stella.
SOLUZIONE
na = 11; nb = 22; nc = 22;
intersections = [(a,b,c) for a in range(1,na)
for b in range(1, nb)
for c in range(1, nc)
if a/(na-a)*b/(nb-b)*c/(nc-c) == 1]
print(intersections)
Output
[(1, 11, 20), (1, 20, 11), (2, 11, 18), (2, 18, 11), (3, 11, 16), (3, 16, 11), (4, 11, 14), (4, 14, 11), (5, 12, 11), (6, 10, 11), (6, 11, 10), (7, 8, 11), (7, 11, 8), (8, 6, 11), (8, 11, 6), (9, 4, 11), (9, 11, 4), (10, 2, 11), (10, 11, 2)]

[elementor-template id=”12586″]

Ti potrebbe interessare anche:  Python: il paradosso del compleanno

(72)