Skip to content

Instantly share code, notes, and snippets.

@octomike
Created June 6, 2017 19:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save octomike/1838f8ccaf689771ad0f344608148fc8 to your computer and use it in GitHub Desktop.
Save octomike/1838f8ccaf689771ad0f344608148fc8 to your computer and use it in GitHub Desktop.
tupper's formula
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Populating the interactive namespace from numpy and matplotlib\n"
]
}
],
"source": [
"from mpmath import mp\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"%pylab inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[Tupper's formula](https://en.wikipedia.org/wiki/Tupper%27s_self-referential_formula)\n",
"\n",
"$$ \\frac{1}{2} < \\left \\lfloor{ \\text{mod}\\left ( \\left \\lfloor{\\frac{y}{17}} \\right \\rfloor 2^{-17 \\lfloor{x}\\rfloor - \\text{mod} \\left ( \\lfloor{y}\\rfloor, 17 \\right )} \\right ) } \\right \\rfloor $$"
]
},
{
"cell_type": "code",
"execution_count": 167,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"mp.prec = 2000"
]
},
{
"cell_type": "code",
"execution_count": 180,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def tupper_field(k):\n",
" field = np.ndarray((17,106), np.bool)\n",
" for xix, x in enumerate(mp.arange(0,106)):\n",
" for yix, y in enumerate(mp.arange(k,k+17)):\n",
" t1 = mp.floor(y) % 17\n",
" t2 = -17*mp.floor(x)\n",
" t3 = 2**(t2 - t1)\n",
" t4 = mp.floor(y/17)\n",
" t5 = (t4 * t3) % 2\n",
" field[16-yix, xix] = 0.5 < mp.floor(t5)\n",
" return field"
]
},
{
"cell_type": "code",
"execution_count": 181,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"k1 = mp.mpf('820959624942020445814005879832445494830930')\n",
"k2 = mp.mpf('4858450636189713423582095962494202044581400587983244549483093085061934704708809928450644769865524364849997247024915119110411605739177407856919754326571855442057210445735883681829823754139634338225199452191651284348332905131193199953502413758765239264874613394906870130562295813219481113685339535565290850023875092856892694555974281546386510730049106723058933586052544096664351265349363643957125565695936815184334857605266940161251266951421550539554519153785457525756590740540157929001765967965480064427829131488548259914721248506352686630476300')"
]
},
{
"cell_type": "code",
"execution_count": 182,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAfwAAAB2CAYAAAAtDiEZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAAthJREFUeJzt3cFupSAAQFGd9P9/+c3emkKMptR7zrbB2NUNwoP98/ls\nAMC7/fvtFwAAnif4ABAg+AAQIPgAECD4ABAg+AAQIPgAECD4ABAg+AAQIPgAECD4ABAg+AAQIPgA\nEPD12y+wbdu27/vwyr6ZW/32ff9xzPHvs88FgMV9D9yBGT4ABAg+AAQs8Un/6Opn9tEnfJ/vAagy\nwweAAMEHgADBB4AAwQeAgH2RjWzDlzj7Df23hwz+F7/DB+Cl/A4fABB8AEgQfAAIWOLgnTvW58+e\ncxxz9gyH8wBQYIYPAAGCDwABgg8AAYIPAAFLbNq7siFv5jkzYwCgwAwfAAIEHwACBB8AApZYw585\n/ObK+vzMGAftAFBghg8AAYIPAAGCDwAB+yJr2MOXeOqSG5fnAPACw41tZvgAECD4ABAg+AAQIPgA\nEPBnDt4ZjZkZ5zIdAKrM8AEgQPABIEDwASBgiTX8py65mdkbYF0fgAIzfAAIEHwACBB8AAgQfAAI\nWGLT3l1GG/Bs0AOgygwfAAIEHwACBB8AApZYw7/r8pyjK4f1AMAbmeEDQIDgA0CA4ANAgOADQMAS\nm/aubNK7a0PeU88FgJWY4QNAgOADQIDgA0DAEmv4M45r62cH74zW36+MAYA3MMMHgADBB4AAwQeA\ngCXX8GfW2s/W3kcX6syMsaYPwBuZ4QNAgOADQIDgA0CA4ANAwBKb9p7aOHfHYT0A8AZm+AAQIPgA\nECD4ABCwxBr+0egAnascvANAlRk+AAQIPgAECD4ABAg+AAQIPgAECD4ABAg+AAQIPgAE7A6aAYD3\nM8MHgADBB4AAwQeAAMEHgADBB4AAwQeAAMEHgADBB4AAwQeAAMEHgADBB4AAwQeAAMEHgADBB4AA\nwQeAAMEHgADBB4AAwQeAAMEHgADBB4AAwQeAAMEHgADBB4AAwQeAAMEHgADBB4AAwQeAAMEHgADB\nB4CA/zwwjeqPIhgNAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f2e96daf518>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAfwAAAB2CAYAAAAtDiEZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAABAZJREFUeJzt3ctu2zAQBdC66P//crpo0QKuCzPMkBzpnrMMYFnR64Ke\nEfn4+Pj4BgDc2/fTOwAArCfwASCAwAeAAAIfAAIIfAAIIPABIIDAB4AAAh8AAgh8AAgg8AEggMAH\ngAACHwACCHwACPDj9A781mbJvsfj8c/frChY5/n4Orb/N3KsXl2vn/3MqnPgXho3c05Gju/Vz/XM\n//jKyGd2XZtV5+TFdt4eCCN8AAgg8AEgQJef9OGPkz/7X63kMPPzJtyJe2CcET4ABBD4ABBA4ANA\nAIEPAAFaNO3NvEfJNVytCW6VmfflT3p33qreY656h3rG7Lvun91u1f6uupd2netOTs5PcfL4GuED\nQACBDwABBD4ABGhRwzdxAl81M+/8zjrkrjnMq75n15zsJ/d35n+qelZ55tXRJzTOCB8AAgh8AAgg\n8AEggMAHgAAtmvaAXhInYxmxahKdk3Y1aHKeET4ABBD4ABBA4ANAADV8hnWu657cl1WLP81MBFPl\n3XZP1nWrjsuu49u9Bn6qZj9yj568B2bMPAt2ThJmhA8AAQQ+AAQQ+AAQoEUNf6TuUVHTSH13OMGu\nOuTsNeTdZr5qVZ9K4rVYdexm7uuTzwIjfAAIIPABIIDAB4AAAh8AArRo2tvVYFX1PTOTK6xqEhn5\n7qrtdnZqgp9XrtYcWnU909/Jc33HxtXuTXrPjPABIIDAB4AAAh8AArSo4c/UiHYuOLBqX1YtRrNr\nuydV7Muqno7utcmEBWESXG3xn07XTLeJuXYxwgeAAAIfAAIIfAAIIPABIECLpr1VTSFXa6Zi3Klz\n2b0pB9jnahljhA8AAQQ+AAQQ+AAQoEUNf9WCMKsWsNllZLKe0c9VbLeTmcmFnu1cTGnVdwN9dH8W\nGOEDQACBDwABBD4ABBD4ABCgRdNexQpwVd9TtZ1VK1mtavC4WxPZqsbEux0n4LWRzLna88AIHwAC\nCHwACCDwASBAixr+s6tNkMMvI3Vz5xHgr515Z4QPAAEEPgAEEPgAEKBFDV+dl2r6QIDPSMghI3wA\nCCDwASCAwAeAAAIfAAK0aNp7NrLIyR0bKgA4IyFTjPABIIDAB4AAAh8AArSo4SfUTlI9n9uqyS3e\nfc41BXR0coIfI3wACCDwASCAwAeAAAIfAAK0aNrr7t1EQBrE1qqaiGlkOwCnrXpWGeEDQACBDwAB\nBD4ABHioPwPA/RnhA0AAgQ8AAQQ+AAQQ+AAQQOADQACBDwABBD4ABBD4ABBA4ANAAIEPAAEEPgAE\nEPgAEEDgA0AAgQ8AAQQ+AAQQ+AAQQOADQACBDwABBD4ABBD4ABBA4ANAAIEPAAEEPgAEEPgAEEDg\nA0AAgQ8AAQQ+AAQQ+AAQQOADQICftyXnkmJ6LIgAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f2e9c112a58>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"for k in [k1,k2]:\n",
" f = tupper_field(k)\n",
" ax = plt.imshow(f, cmap='Greys', interpolation='nearest')\n",
" ax.axes.axis('off')\n",
" plt.show()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment