問題文

SZ = 33
s = [ [ 0 for _ in xrange(SZ) ] for _ in xrange(SZ) ]
s[0][1] = 1
for r in xrange(SZ-1):
  for c in xrange(1, SZ):
    s[r+1][c] = s[r][c] ^ s[r][c-1]
print '\n'.join(''.join('*' if s[r][c] else ' ' for c in xrange(1, SZ)) for r in xrange(SZ-1))

ギャス「ケ」ットだった。死にたい。

#coding :utf-8

import turtle
import math

A = (0,270)
B = (- 270 / 2 * math.sqrt(3),-270 / 2)
C = (270 / 2 * math.sqrt(3),-270 / 2)	#最初の三角形の各座標を決めます。

sta = [A,B,C]	#最初の三角形の各座標をリストに格納します。

turtle.penup()
turtle.goto(sta[0])
turtle.pendown()
turtle.fill(True)
turtle.goto(sta[1])
turtle.goto(sta[2])
turtle.goto(sta[0])
turtle.fill(False)	#最初の黒塗りの三角形を描画します。

turtle.fillcolor('white')	#切り取りを白く塗りつぶして表現するため、fillcolorを白色にします。

def hollow(a):	#三角形を切り取る関数を定義します。
	ma = ((a[1][0] + a[2][0]) / 2,(a[1][1] + a[2][1]) / 2)
	mb = ((a[0][0] + a[2][0]) / 2,(a[0][1] + a[2][1]) / 2)
	mc = ((a[0][0] + a[1][0]) / 2,(a[0][1] + a[1][1]) / 2)	#三角形の各辺の中点の座標を定めます。
	turtle.penup()
	turtle.goto(ma)
	turtle.pendown()
	turtle.fill(True)
	turtle.goto(mb)
	turtle.goto(mc)
	turtle.goto(ma)
	turtle.fill(False)	#各中点を結んで、白色で塗りつぶします。

ta_list = [sta]	#三角形のリストを作成します。

def nta(a):	#引数に三角形の座標をとり、そこから新たな三角形の座標を三角形のリストに追加する関数を定義します。
	ma = ((a[1][0] + a[2][0]) / 2,(a[1][1] + a[2][1]) / 2)
	mb = ((a[0][0] + a[2][0]) / 2,(a[0][1] + a[2][1]) / 2)
	mc = ((a[0][0] + a[1][0]) / 2,(a[0][1] + a[1][1]) / 2)
	ta_list.append([a[0],mc,mb])
	ta_list.append([mc,a[1],ma])
	ta_list.append([mb,ma,a[2]])

def sg(n):	#シェルピンスキーのギャスケットを描く関数です。
	for i in range(n):
		for j in range(3 ** i):
			nta(ta_list[(3 ** i - 1)/2 + j])	#三角形の個数が等比級数的に増えることを利用して、ta_listに三角形の座標を追加します。
	for k in range(len(ta_list)):	#ta_listの要素の個数分、三角形を描きます。
		hollow(ta_list[k])

turtleモジュールを使って絵を書く方式のものです。