Hybrid Numeric-Symbolic System

Generate a random list of 30 integers (to represent numerics).

nums1 = Table[ToString[Random[Integer, {1, 9}]], {30}];

Define a function that randomly selects an element from a given list.

RandomChoice[list_] := 
      Part[list, Random[Integer, {1, Length[list]}]]

Generate a random list of 30 Greek letters (to represent symbolics).

nums2 = 
        Table[RandomChoice[
            CharacterRange["α", "ω"]], {30}];

Generate a list of 30 random triples for use as starting points for the numbers.

initpos1 = 
        Table[{Random[Real, {-3, 3}], Random[Real, {-3, 3}], 
            1.5 π + 
              Random[Real, {-1.5 π, 
                  1.5 π}]}, {30}];

Generate a list of 30 random triples for use as starting points for the symbols.

initpos2 = 
        Table[{Random[Real, {-3, 3}], Random[Real, {-3, 3}], 
            1.5 π + 
              Random[Real, {-1.5 π, 
                  1.5 π}]}, {30}];

Generate a list of 30 triples that specify the locations of the spheres on one of the "side rails" of the double helix.

finalpos1 = 
        Table[{Cos[t], Sin[t], t}, {t, 0, 3.  π - 3 π/30. , 
            3 π/30. }];

Generate a list of 30 triples that specify the locations of the spheres on the other "side rail" of the double helix.

finalpos2 = 
        Table[{Cos[t + π], Sin[t + π], t}, {t, 0, 
            3 π - 3 π/30. , 3 π/30. }];

Generate interpolating functions using linear interpolation that run from the starting point to the ending point for each number/symbol/sphere.

fpos1 = 
        Table[Interpolation[#, InterpolationOrder -> 1] & /@ 
            Transpose[{initpos1[[i]], finalpos1[[i]]}], {i, 1, 
            Length[initpos1]}];

fpos2 = 
        Table[Interpolation[#, InterpolationOrder -> 1] & /@ 
            Transpose[{initpos2[[i]], finalpos2[[i]]}], {i, 1, 
            Length[initpos2]}];

Load the graphics package to allow the use of a Sphere object.

<< Graphics`

Generate the animation that simulates a cloud of a random mix of symbols and numbers that fall into place on a double helix.

anim1 = 
        Table[Show[
            Graphics3D[{SurfaceColor[White, White, 10], EdgeForm[], 
                Map[Text[
                      StyleForm[#[[1]], FontWeight -> "Bold", 
                        FontFamily -> "Times", 
                        FontSize -> 
                          36 - 36 (t - 1)^2 + 1], #[[2]]] &, 
                  Transpose[{nums1, Map[Through[#[t]] &, fpos1]}]], 
                RGBColor[183/255. , 188/255. , 249/255. ], 
                Map[Text[
                      StyleForm[#[[1]], FontWeight -> "Bold", 
                        FontFamily -> "Times", 
                        FontSize -> 
                          36 - 36 (t - 1)^2 + 1], #[[2]]] &, 
                  Transpose[{nums2, Map[Through[#[t]] &, fpos2]}]], 
                SurfaceColor[Orange, White, 10], 
                Map[TranslateShape[
                      Sphere[ .2 (t - 1), 10, 10], #[[2]]] &, 
                  Transpose[{nums1, Map[Through[#[t]] &, fpos1]}]], 
                SurfaceColor[Blue, White, 10], 
                Map[TranslateShape[
                      Sphere[ .2 (t - 1), 10, 10], #[[2]]] &, 
                  Transpose[{nums2, Map[Through[#[t]] &, fpos2]}]]}], 
            PlotRange -> {{-4, 4}, {-4, 4}, {-2, 
                  3.  π + 2}}, SphericalRegion -> True, 
            Boxed -> False, ImageSize -> 600, 
            LightSources -> {{{1, 1, 1}, White}}, 
            Background -> RGBColor[102/255. , 113/255. , 242/255. ], 
            ViewPoint -> {2 Cos[2 π (t - 1)], 
                2 Sin[2 π (t - 1)], 1}, 
            PlotRegion -> {{- .4, 1 +  .4}, {- .4, 
                  1 +  .4}}], {t, 1, 2,  .01}];

Extend the animation by allowing the resulting double helix to rotate by one-half of a revolution.

anim2 = 
        Table[Show[Last[anim1], 
            ViewPoint -> {2 Cos[t], 2 Sin[t], 1}], {t, 
            0, π,  .05}];

Join the sets of frames together.

frames = Join[anim1, anim2];