My 9 year old asked this question and we created this notebook as part of our fun exploration. The Pluto notebooks along with PlutoUI are really well suited for this kind of exploration. One could use Jupyter notebooks and ipywidgets to do the same.
Note: This is the HTML rendered output of the notebook so it looses all the interactivity. You may want to directly load the pluto notebook in Julia.
GitHub Repository🧬 Length of the Unrolled Human DNA
There are approx. 30 trillion cells in the human body. Every cell contains the DNA in its nucleus (except some). The unrolled DNA is around 2 meters long 🤯. Now, that is one hell of compaction.
Nature is the ultimate computer scientist.
x
md"# 🧬 Length of the Unrolled Human DNA
There are approx. 30 trillion cells in the human body. Every cell contains the DNA in its nucleus ([except some](https://wtamu.edu/~cbaird/sq/2013/08/22/why-does-every-cell-in-our-body-contain-dna/)). The unrolled DNA is around 2 meters long 🤯. Now, that is one hell of compaction.
Nature is the ultimate computer scientist.
"
7.8e12
xxxxxxxxxx
# We setup some data in this block
begin
num_cells = 70e12
dna_length_metres = 2
dna_length_km = 2/1000
human_total_dna_km = dna_length_km * num_cells
world_population = 7.8e12
end
The average number of cells in the human body is 70,000,000,000,000
xxxxxxxxxx
md"The average number of cells in the human body is $(format(num_cells, commas=true))"
Total Human DNA ~ DNA Length x Cells in human body: 140,000,000,000 KM
xxxxxxxxxx
md"Total Human DNA ~ DNA Length x Cells in human body: $(format(human_total_dna_km, commas=true)) KM"
"Amazing isn't it", I said and expected it to end.
But, share this fact with the kids and see if it ends there.
Almost immediately, the questions will start to roll in....
x
md"\"Amazing isn't it\", I said and expected it to end.
But, share this fact with the kids and see if it ends there.
Almost immediately, the questions will start to roll in....
"
Q: If we unrolled the DNA from every cell of the living human and joined together, would it reach the Andromeda galaxy?
xxxxxxxxxx
md"#### Q: If we unrolled the DNA from every cell of the living human and joined together, would it reach the Andromeda galaxy?
Andromeda is about 2.537 million light years from our home planet (and is on the collision path with our galaxy, in some 4.5 billion years).
xxxxxxxxxx
md"[Andromeda](https://en.wikipedia.org/wiki/Andromeda_Galaxy) is about 2.537 million light years from our home planet (and is on the [collision path](https://en.wikipedia.org/wiki/Andromeda%E2%80%93Milky_Way_collision) with our galaxy, in some 4.5 billion years)."
Image: NASA
xxxxxxxxxx
md"
Let's find out.
xxxxxxxxxx
md"Let's find out."
xxxxxxxxxx
begin
Is the distance between Earth and Andromeda greater than the length of DNA from a single human?
xxxxxxxxxx
md"Is the distance between Earth and Andromeda greater than the length of DNA from a single human?"
true
xxxxxxxxxx
andromeda_distance_km > human_total_dna_km
xxxxxxxxxx
mankind_dna_km = world_population * human_total_dna_km;
Is the total Human DNA from all living Humans long enough to reach the Andromeda galaxy ?
Answer: true
xxxxxxxxxx
md"Is the total Human DNA from all living Humans long enough to reach the Andromeda galaxy ?
Answer: $(mankind_dna_km >= andromeda_distance_km)"
In fact, it is 45,495 times the distance of Andromeda.
xxxxxxxxxx
md"In fact, it is **$(format(round(mankind_dna_km/andromeda_distance_km), commas=true))** times the distance of Andromeda."
xxxxxxxxxx
md"---"
Alright, so we know that the sum total length of every living human DNA is quite large. Some might say its Bigly.
xxxxxxxxxx
md"Alright, so we know that the sum total length of every living human DNA is quite large. Some might say its Bigly."
Milky Way
Q: Is it longer than the length of our Galaxy?
xxxxxxxxxx
md"## Milky Way
Image: NASA
xxxxxxxxxx
md"
The width of Milky Way is 1,000,027,700,000,000,000 KM.
We could go from one end of the Milky way to another 1,091,969.752438 times, for that amount of DNA.
xxxxxxxxxx
md"
Observable Universe
Q: It surely is going to be a lot less than the Universe?
xxxxxxxxxx
md"## Observable Universe
Image: Wikipedia
xxxxxxxxxx
md"
The observable Universe is 8.79873e23 KM. And it is approximately the same length as the total length of entire world population DNA.
xxxxxxxxxx
md"The observable Universe is $(observable_universe_km) KM. And it is approximately the same length as the total length of entire world population DNA."
Approximately ~ 1.241088 times
xxxxxxxxxx
md"Approximately ~ $(format( mankind_dna_km/observable_universe_km, commas=true )) times"
Extras
At this point, the tiny inbestigators started asking all sorts of question such as what if you only take the population of Maldives or India. How far will it take us?
xxxxxxxxxx
md"## Extras
So, I gave them this. Go Play.
xxxxxxxxxx
md"So, I gave them this. Go Play."
Total length of DNA from the population of
xxxxxxxxxx
md"Total length of DNA from the population of"
xxxxxxxxxx
country Select(vcat(world_pop[:,"Country Name"], "1 Human"))
is 99,438,535.542491 times the distance from Earth to
xxxxxxxxxx
md" is $(format(distance_times, commas=true)) times the distance from Earth to "
xxxxxxxxxx
planet Select(planet_distances_km[:, "Name"])
Population of ARUBA is 106314
xxxxxxxxxx
md"Population of $(uppercase(country)) is $(current_pop)"
Note: The interactive version will only work in the Pluto notebook
x
md"*Note: The interactive version will only work in the Pluto notebook*"
xxxxxxxxxx
md"---"
Setup Section
xxxxxxxxxx
md"**Setup Section**"
xxxxxxxxxx
begin
using Pkg
Pkg.add("PlutoUI")
Pkg.add("Formatting")
using PlutoUI
using CSV
using DataFrames
using Formatting
end
xxxxxxxxxx
# Datasource: https://data.worldbank.org/indicator/SP.POP.TOTL
world_pop = DataFrame(CSV.File("world_population_2019.csv"));
xxxxxxxxxx
begin
if country == "1 Human"
current_pop = 1
else
idx = findfirst(x -> x == country, world_pop[:, "Country Name"])
current_pop = world_pop[idx,"2019"]
end
planet_idx = findfirst(x -> x == planet, planet_distances_km[:, "Name"])
planet_distance = planet_distances_km[planet_idx, "Distance_KM"]
distance_times = pop_to_dna(current_pop)/planet_distance
end;
pop_to_dna (generic function with 1 method)
xxxxxxxxxx
function pop_to_dna(population)
return population * human_total_dna_km
end
xxxxxxxxxx
planet_distances_km = DataFrame(CSV.File("earth_distance.csv"));
1.0000277e18
xxxxxxxxxx
# Width of Milky Way
milkyway_width_km = 105700 * light_year_km
8.79873e23
xxxxxxxxxx
observable_universe_km = 93e9 * light_year_km