`

Penrose Tiling in Obfuscated Python

阅读更多

Who says you can’t write obfuscated Python?

Here’s a Python script which renders some Penrose tiling. Yes, this is valid Python code:

_                                 =\
                                """if!
                              1:"e,V=100
                            0,(0j-1)**-.2;
                           v,S=.5/  V.real,
                         [(0,0,4      *e,4*e*
                       V)];w=1          -v"def!
                      E(T,A,              B,C):P
                  ,Q,R=B*w+                A*v,B*w+C
            *v,A*w+B*v;retur              n[(1,Q,C,A),(1,P
     ,Q,B),(0,Q,P,A)]*T+[(0,C            ,R,B),(1,R,C,A)]*(1-T)"f
or!i!in!_[:11]:S       =sum([E          (*x)for       !x!in!S],[])"imp
  ort!cair               o!as!O;      s=O.Ima               geSurfac
   e(1,e,e)               ;c=O.Con  text(s);               M,L,G=c.
     move_to                ,c.line_to,c.s                et_sour
       ce_rgb                a"def!z(f,a)                :f(-a.
        imag,a.       real-e-e)"for!T,A,B,C!in[i       !for!i!
          in!S!if!i[""";exec(reduce(lambda x,i:x.replace(chr
           (i),"\n "[34-i:]),   range(   35),_+"""0]]:z(M,A
             );z(L,B);z         (L,C);         c.close_pa
             th()"G             (.4,.3             ,1);c.
             paint(             );G(.7             ,.7,1)
             ;c.fil             l()"fo             r!i!in
             !range             (9):"!             g=1-i/
             8;d=i/          4*g;G(d,d,d,          1-g*.8
             )"!def     !y(f,a):z(f,a+(1+2j)*(     1j**(i
             /2.))*g)"!for!T,A,B,C!in!S:y(M,C);y(L,A);y(M
             ,A);y(L,B)"!c.st            roke()"s.write_t
             o_png('pen                        rose.png')
             """                                       ))

When this program runs, it outputs a 1000×1000 image file to penrose.png, consisting of about 2212 Penrose tiles rendered with a 3D relief effect. Here’s a slice of the image (click to enlarge):

The script requires Pycairo. It only runs on Python <= 2.7; Python 3 is not supported. It started life as a regular Python script, but in my effort to make the code more compact, I got a bit carried away.

Penrose tilings are cool because they cover the entire plane in an aperiodic way — a shifted copy of the image never matches the original. They were invented by Sir Roger Penrose after a series of attempts to tile the plane with pentagonal shapes. For an explanation of the algorithm behind this script, see my next post, Penrose Tiling Explained.

Python never got much credit as an obfuscated programming language, compared to C or Perl. It seems a contest never took place, and there aren’t too many examples of obfuscated Python on the web: You’ll find a few examples in the official Python FAQ and on various pages such as here andhere. There was also a talk at PyCon 2011.

I believe this is the first example of obfuscated Python which outputs a high-resolution image. If you know of any others, let me know in the comments!

  • 大小: 217.2 KB
0
0
分享到:
评论

相关推荐

    Python-penrosePenrose贴画的python生成包

    在这个特定的案例中,"Python-penrosePenrose贴画的python生成包"是一个利用Python编写的库,专门用于生成Penrose贴画。Penrose贴画是由数学家Roger Penrose提出的非周期性瓷砖图案,它展示了不规则的几何形状如何...

    penrose工具以及脚本

    Penrose工具和脚本是为了解决开源项目Penrose在使用和开发过程中遇到的复杂性和学习曲线问题而设计的。Penrose项目是一个高度模块化、功能丰富的软件,它可能涉及图形处理、数学建模或者计算可视化等多个领域。由于...

    Moore-Penrose广义逆矩阵与线性方程组的解

    ### Moore-Penrose广义逆矩阵与线性方程组的解 #### 一、引言 广义逆矩阵的概念源自于20世纪初期的数学探索,最初由瑞典数学家弗雷德霍姆在1903年提出,他探讨了一种关于积分算子的广义逆(即所谓的伪逆)。随后,...

    15投影矩阵与Moore-Penrose逆[借鉴].pdf

    投影矩阵与Moore-Penrose逆矩阵 投影矩阵是线性代数中一个重要的概念,它是将一个向量投影到一个子空间的变换矩阵。投影矩阵可以被用来解决许多线性代数问题,如最小二乘法、奇异值分解等。 一、投影矩阵的定义和...

    13penrose广义逆矩阵1

    Penrose 广义逆矩阵是线性代数中一个重要的概念,它扩展了逆矩阵的概念,使其不仅适用于非奇异方阵,还适用于奇异方阵和非方矩阵。这个概念是由英国数学家Roger Penrose提出的,因此被称为Penrose广义逆矩阵,也常被...

    python+RELM+OS-ELM+FOS-ELM+代码实现-实例验证+算法比较.rar

    极限学习机ELM是一类Single-hidden Layer Feedforward Neural Network(SLFNs)算法,由Huang等基于 Moore-Penrose 广义逆的理论提出,主要针对SLFNs中存在的学习速率慢,迭代时间长,学习参数如学习步长、学习率...

    Penrose:彭罗斯瓷砖渲染

    初始化为: from model import PenroseModelfrom starting_states import dart_starfrom view import load_textures , draw_model#Penrose model takes initial set of tiles as the argument. Look at starting_...

    Python实现矩阵论代码

    广义逆计算: 提供计算矩阵的广义逆的功能,包括Moore-Penrose广义逆、Drazin广义逆等,用于解决矩阵方程组的求解和矩阵的伪逆问题。 实现技术: 编程语言: Python 依赖库: NumPy、SciPy等科学计算库 适用范围: ...

    矩阵加权Moore-Penrose逆及加权最小二乘问题的条件数

    矩阵加权Moore-Penrose逆及加权最小二乘问题的条件数,王淑璠,郑兵,一个问题的解的条件数,是这个问题的解对于该问题数据扰动的敏感性的一个测度, 它是矩阵扰动分析和数值分析中的一个重要课题。�

    14penrose广义逆矩阵21

    本篇文章将详细讨论Penrose广义逆,也称为Moore-Penrose伪逆,以及与它相关的不同类型的逆。 首先,我们要理解什么是广义逆。在矩阵理论中,如果一个矩阵不是方阵或者不可逆,那么它通常没有传统的逆矩阵。但是,...

    新型递归神经网络求解时变矩阵Moore-Penrose逆.pdf

    1. **Moore-Penrose逆**:Moore-Penrose逆是线性代数中的一个概念,对于任何矩阵A,如果存在矩阵X满足特定的Penrose方程,那么X被称为A的Moore-Penrose逆,记作A+。它是唯一存在的,并且在矩阵A为满秩时,可以视为...

    彭罗斯(Penrose)

    首先,彭罗斯像素布局是基于非周期性菱形镶嵌(rhombus Penrose tiling)的独特像素设计,它在超分辨率表现上显著优于传统的正方形像素布局。其核心优势在于:1)独特的非周期性排列,避免了传统像素布局中的条纹和...

    15投影矩阵与Moore-Penrose逆(20210924234023)[借鉴].pdf

    如果有一个向量空间 \( \mathbb{C}^n \) 的两个子空间 \( L \) 和 \( M \),它们构成直和 \( L \oplus M \),即任何向量 \( x \in \mathbb{C}^n \) 都可以唯一地表示为 \( x = y + z \),其中 \( y \in L \) 且 \( z...

    AdS时空中Penrose不等式的全息论证

    我们提出全息论证来支持AdS Penrose不等式,该不等式推测出视在视线范围内的总质量较低。 这种不平等通常被视为对宇宙审查制度的考验。 我们进一步发现表面视界的面积定律与彭罗斯不等式之间存在联系。 最后,我们...

    Python-PyScatWave用CuPyPyTorch快速散射变换

    3. **非线性操作**:散射变换的核心是非线性的摩尔-彭罗斯逆(Moore-Penrose pseudo-inverse)或绝对值操作。这些操作保证了散射系数的稳定性和不变性。 4. **级联与构建散射树**:通过重复上述过程,形成多层散射...

    论文研究 - 平面空间宇宙学作为Penrose的Weyl曲率假说和引力熵的模型

    FSC被证明是Penrose的Weyl曲率假说及其引力熵概念的出色模型。 FSC的假设允许在宇宙膨胀开始时的最小熵,并严格定义宇宙的时间箭。 这与通货膨胀模型形成鲜明对比,通货膨胀模型似乎违反了早期宇宙中热力学的第二...

Global site tag (gtag.js) - Google Analytics