Collatz Conjecture

The Collatz conjecture states that every positive integer k>0 will — if you iteratively set k to f(k) — result in 1 (function shown beneath).
The graph beneath shows the path length of numbers from 1 to 10\,000. In this range 6170 is the number with the most steps, 261.
f(k)={\begin{cases}\frac{k}{2}&{\text{if }}k \mod 2 = 0\\3 \cdot k+1&{\text{if }}k \mod 2 = 1\end{cases}}

Path length in Collatz sequence [1 to 10**4]


# Python 2.7.7 Code
# Pygame 1.9.1 (for Python 2.7.7)
# Jonathan Frech 2nd of September, 2016

Continue reading

Advertisements

Curses Cam

Normally a shell lets you input via a text command and outputs via a text message. When using curses you can extend its capabilities and program for example games with limited graphics.
I wanted to go even further and built a python script that — using pygame’s camera module and curses — captures an image from an attached webcam (USB or built-in), transforms it and displays it on the shell.
Although both the resolution and the color depth are shrunk immensely, the resulting colored text on the shell often resembles the scene caught and has a nice visual effect.
There are two modes, camera and file viewer, which can be toggled by pressing F1. In camera mode you can see what the camera is seeing and snap a photo, which then will be saved to disk. In file viewer mode you can view the photos you took. The files will be saved in an out/ directory located in the current python file’s directory. Saved photos have the file extension .si (shell image).
Unfortunately pygame’s camera module does neither work on Mac OS X nor on Windows. Thus this program is only properly usable under Linux systems. You obviously also need a webcam or else you will not be able to take a picture.

Controls

  • F1 switches between camera and file viewer mode
  • Space saves the current photo as a .si file (only in camera mode)
  • Left or down arrow key decreases current file’s id (only in file viewer mode)
  • Right or up arrow key increases current file’s id (only in file viewer mode)

Blinky Graffiti Hand


# Python 2.7.7 Code
# Jonathan Frech 19th of August, 2016
#         edited 21st of August, 2016
#         edited 23rd of August, 2016
#         edited 26th of August, 2016

Continue reading

JClock VIII

Interpreting the hour hand on a clock as a two-dimensional object on a plane, the hand’s tip can be seen as a complex number.
This clock converts the hour hand’s position into a complex number, sets the number’s length to the current minutes and displays it in the form a + b \cdot i.
The angle \phi is determined by the hours passed (\frac{2 \cdot \pi \cdot \text{hour}}{12} = \frac{\pi \cdot \text{hour}}{6}) but has to be slightly modified because a complex number starts at the horizontal axis and turns anti-clockwise whilst an hour hand starts at the vertical axis and turns — as the name implies — clockwise.
Thus \phi = (2 \cdot \pi - \frac{\pi \cdot \text{hour}}{6}) + \frac{\pi}{2} = (\frac{15 - \text{hour}}{6}) \cdot \pi.
The complex number’s length is simply determined by the minutes passed. Because the length must not be equal to 0, I simply add 1. |z| = k = \text{minute} + 1.
Lastly, to convert a complex number in the form k \cdot e^{\phi \cdot i} into the form a + b \cdot i, I use the formula k \cdot (\cos{\phi} + \sin{\phi} \cdot i) = a + b \cdot i.

17:04


# Python 2.7.7 Code
# Pygame 1.9.1 (for Python 2.7.7)
# Jonathan Frech 29th of July, 2016

Continue reading