Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Translating things between languages reveals how each language approaches different design trade-offs, and I believe it’s a useful exercise. Having something to translate is the first step. I found a plot I wanted to generate, and some code that reproduced it, so off we go!
I don’t recall how I originally found this page (I didn’t keep a note on it, it seems) and this has been sitting on my to-be-posted-about pile for way too long, so here’s the post I’ve been meaning to write.
That post details some ALGOL code that generates Georg Nees’ “Schotter” computer-generated art from 1968 which shows a grid of squares which get increasingly displaced in position and rotation
1 'BEGIN''COMMENT'SCHOTTER., 2 'REAL'R,PIHALB,PI4T., 3 'INTEGER'I., 4 'PROCEDURE'QUAD., 5 'BEGIN' 6 'REAL'P1,Q1,PSI.,'INTEGER'S., 7 JE1.=5*1/264.,JA1.=-JE1., 8 JE2.=PI4T*(1+I/264).,JA2.=PI4T*(1-I/264)., 9 P1.=P+5+J1.,Q1.=Q+5+J1.,PS1.=J2., 10 LEER(P1+R*COS(PSI),Q1+R*SIN(PSI))., 11 'FOR'S.=1'STEP'1'UNTIL'4'DO' 12 'BEGIN'PSI.=PSI+PIHALB., 13 LINE(P1+R*COS(PSI),Q1+R*SIN(PSI))., 14 'END".,I.=I+1 15 'END'QUAD., 16 R.=5*1.4142., 17 PIHALB.=3.14159*.5.,P14T.=PIHALB*.5., 18 I.=0., 19 SERIE(10.0,10.0,22,12,QUAD) 20 'END' SCHOTTER., 1 'REAL'P,Q,P1,Q1,XM,YM,HOR,VER,JLI,JRE,JUN,JOB., 5 'INTEGER'I,M,M,T., 7 'PROCEDURE'SERIE(QUER,HOCH,XMAL,YMAL,FIGUR)., 8 'VALUE'QUER,HOCH,XMAL,YMAL., 9 'REAL'QUER,HOCH., 10 'INTEGER'XMAL,YMAL., 11 'PROCEDURE'FIGUR., 12 'BEGIN' 13 'REAL'YANF., 14 'INTEGER'COUNTX,COUNTY., 15 P.=-QUER*XMAL*.5., 16 Q.=YANF.=-HOCH*YMAL*.5., 17 'FOR'COUNTX.=1'STEP'1'UNTIL'XMAL'DO' 18 'BEGIN'Q.=YANF., 19 'FOR'COUNTY.=1'STEP'1'UNTIL'YMAL'DO' 20 'BEGIN'FIGUR.,Q.=Q+HOCH 21 'END'.,P.=P+QUER 22 'END'., 23 LEER(-148.0,-105.0).,CLOSE., 24 SONK(11)., 25 OPBEN(X,Y) 26 'END'SERIE.,
What’s missing from this ALGOL code is the seeds needed to reproduce the plot. The author went down a rabbit hole investigating and calculating different values, but managed to determine them to be “(1922110153) for the x- and y-shift seed, and (1769133315) for the rotation seed”. They also provided a translation into Python
import math
import drawsvg as draw
class Random:
def __init__(self, seed):
self.JI = seed
def next(self, JA, JE):
self.JI = (self.JI * 5) % 2147483648
return self.JI / 2147483648 * (JE-JA) + JA
def draw_square(g, x, y, i, r1, r2):
r = 5 * 1.4142
pi = 3.14159
move_limit = 5 * i / 264
twist_limit = pi/4 * i / 264
y_center = y + 5 + r1.next(-move_limit, move_limit)
x_center = x + 5 + r1.next(-move_limit, move_limit)
angle = r2.next(pi/4 - twist_limit, pi/4 + twist_limit)
p = draw.Path()
p.M(x_center + r * math.sin(angle), y_center + r * math.cos(angle))
for step in range(4):
angle += pi / 2
p.L(x_center + r * math.sin(angle), y_center + r * math.cos(angle))
g.append(p)
def draw_plot(x_size, y_size, x_count, y_count, s1, s2):
r1 = Random(s1)
r2 = Random(s2)
d = draw.Drawing(180, 280, origin='center', style="background-color:#eae6e2")
g = draw.Group(stroke='#41403a', stroke_width='0.4', fill='none',
stroke_linecap="round", stroke_linejoin="round")
y = -y_size * y_count * 0.5
x0 = -x_size * x_count * 0.5
i = 0
for _ in range(y_count):
x = x0
for _ in range(x_count):
draw_square(g, x, y, i, r1, r2)
x += x_size
i += 1
y += y_size
d.append(g)
return d
d = draw_plot(10.0, 10.0, 12, 22, 1922110153, 1769133315).set_render_size(w=500)
print(d.as_svg())
< ?xml version="1.0" encoding="UTF-8"?>
< svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="450" viewBox="-90.0 -140.0 180 280" style="background-color:#eae6e2">
< defs>
< g stroke="#41403a" stroke-width="0.4" fill="none" stroke-linecap="round" stroke-linejoin="round">
< path d="M-50.00005126718646,-100.00004463327559 L-50.00003799937353,-109.99994209889388 L-59.99993546496541,-109.99996863451973 L-59.999975268404185,-100.00007116897186 L-50.00007780291792,-100.00001809772016" />
< path d="M-40.00071025565693,-99.98843209578396 L-40.00637454536543,-109.98832795718559 L-50.0062704142736,-109.98267693528788 L-50.00063266018671,-99.98278105889077 L-40.00073677631825,-99.98840554516684" />
< path d="M-29.995077284756096,-100.0634825084743 L-30.051839290370896,-110.06321887488785 L-40.05157573208719,-110.00647013687228 L-39.994840261670944,-100.00673361987086 L-29.995103669401985,-100.06345582268767" />
< path d="M-19.93165959997083,-99.98229914682717 L-20.000467422836092,-109.98195988140051 L-30.000128248694487,-109.91316532603413 L-29.931346960827128,-99.91350440890828 L-19.93168595245141,-99.98227242927649" />
< path d="M-10.084121639092759,-100.06716104811655 L-10.066925666552578,-110.06704372850753 L-20.06680832411923,-110.084252968841 L-20.084030832245965,-100.08437033411629 L-10.084148220380783,-100.06713455819633" />
< path d="M-0.13979567953820027,-100.0395478025014 L-0.03239251926518261,-110.03886847363795 L-10.031713047890957,-110.1462849009585 L-10.139142742258867,-100.1469645148611 L-0.13982249870743235,-100.03952155344602" />
< path d="M9.961814533928456,-100.095005878406 L9.892189703031272,-110.09466095775636 L-0.10746546868816687,-110.02504939435057 L-0.03786717277388352,-100.02539413027966 L9.96178818363088,-100.09497915870232" />
< path d="M19.991755502754366,-99.88946345415374 L20.00203764844921,-109.88935563359922 L10.002145482654822,-109.89965104709998 L9.991836801348196,-99.89975889497428 L19.991728939787574,-99.8894369458618" />
< path d="M29.883204608721726,-99.98825493069629 L29.941896852088306,-109.98798015410236 L19.942171706563602,-110.04668566505327 L19.88345292802844,-100.04696059742754 L29.883177917737594,-99.98822855130825" />
< path d="M40.03212795532069,-100.2540607286853 L39.82673399590962,-110.25184861623787 L29.828945835850206,-110.04646792184093 L30.034313265232655,-100.04867948929225 L40.03210197025298,-100.25403365365985" />
< path d="M49.93974139009356,-99.98288224729943 L49.98850696549987,-109.98266080693315 L39.988728470576866,-110.03143964999458 L39.9399363598604,-100.0316612197999 L49.93971472530916,-99.98285584142849" />
< path d="M59.71370846977368,-100.06453324132968 L59.98182835691243,-110.06083561016467 L49.98552634382635,-110.32896876034616 L49.717379930602604,-100.33266710302657 L59.7136812321381,-100.06450742676104" />
< path d="M-50.02799835268205,-89.89399240349655 L-49.993390940227165,-99.89382998468048 L-59.993228475485346,-99.9284506648688 L-60.02786242340704,-89.92861317555396 L-50.028024980053154,-89.89396595989895" />
< path d="M-39.88981906362492,-89.96476065432375 L-39.70243144001625,-99.96290224171756 L-49.700572778776305,-100.1503031308093 L-49.88798693335079,-90.15216204070059 L-39.88984609191102,-89.9647346206437" />
< path d="M-29.878082110762897,-89.87067035095136 L-29.702068839857706,-99.86901864712111 L-39.70041690248514,-100.04504518378363 L-39.8764567049047,-90.04669735471612 L-29.878109109414694,-89.87064428653983" />
< path d="M-20.062220141751116,-89.98227866122532 L-20.011789240844593,-99.98204896095166 L-30.01155947365066,-100.03249312950234 L-30.06201690984541,-90.03272296363413 L-20.062246810932677,-89.98225225979542" />
< path d="M-9.9080751481311,-90.06420197078735 L-9.639199105259333,-100.06048402946419 L-19.635480807184027,-100.32937333535175 L-19.904383376086887,-90.3330919901968 L-9.908102387719303,-90.06417615827912" />
< path d="M0.05366425530912,-89.87142795637658 L0.47057590225859425,-99.86263078695174 L-9.52062637515152,-100.27955569017777 L-9.93756453465338,-90.28835396595028 L0.05363663637389404,-89.87140255017333" />
< path d="M10.203500405486142,-89.91995445158382 L10.26929096206511,-99.91963549278309 L0.2696100081652135,-99.98543931688778 L0.20379291653493237,-89.98575845030486 L10.203473695783266,-89.91992809114909" />
< path d="M19.588370553722395,-90.02045539819989 L19.93547450108363,-100.01432692893218 L9.941603430895881,-100.36144413611085 L9.594472963900381,-90.36757352648524 L19.588343112946262,-90.02042979967352" />
< path d="M30.14444694864817,-90.00574105106723 L29.591933792565776,-99.99036315385165 L19.607310956718518,-99.43786324531538 L20.15979761770766,-89.45323967642287 L30.144421919627888,-90.00571308986393" />
< path d="M40.1209431203973,-90.06190665068318 L39.717790485837014,-100.05367412577498 L29.726022475853156,-99.65053474824114 L30.129148596359833,-89.65876620338281 L40.12091767607505,-90.06187906686162" />
< path d="M49.40335995567363,-90.1545933056903 L49.90872880846756,-100.14171259233552 L39.92161019235194,-100.6470946959879 L39.41621483784199,-90.65997675041947 L49.40333211284565,-90.15456814505285" />
< path d="M59.93735565840686,-90.06926350037787 L59.84316435289939,-100.06871735151503 L49.843710376798484,-99.97453931323199 L49.93787514785694,-89.97508521218495 L59.937329373832526,-90.06923671601865" />
< path d="M-49.888992673681855,-79.91381423622045 L-50.38029093122906,-89.90163558750552 L-60.36811293435737,-89.41035058174916 L-59.876841180392695,-79.4225279267952 L-49.88901787363067,-79.91378642896731" />
< path d="M-39.77181953909958,-79.51951089433379 L-39.35691011709312,-89.51079707252853 L-49.34819574477937,-89.92571975092214 L-49.7631316795594,-79.93443467376198 L-39.77184715294291,-79.51948548259628" />
< path d="M-30.69330496202617,-79.38579052075666 L-30.082571697024765,-89.36702061539309 L-40.06380098133462,-89.97776712343911 L-40.67456073242418,-79.99653864947338 L-30.693333068820166,-79.38576565534136" />
< path d="M-19.58085040573569,-79.94019788964178 L-19.62077301364069,-89.94001566340312 L-29.62059084036234,-89.90010632320534 L-29.58069476787186,-79.90028844354099 L-19.580876835282403,-79.94017124832409" />
< path d="M-10.152137135557833,-80.15555581610177 L-10.359184532552586,-90.15330959874979 L-20.356938589901237,-89.94627546672392 L-20.149917722844606,-79.94852113469223 L-10.152163116147491,-80.15552873677926" />
< path d="M-0.33701257548168506,-79.90406770528523 L0.31565816808809455,-89.88264326613275 L-9.662916526790422,-90.53532724922508 L-10.31561374940416,-80.55675342033312 L-0.3370407865163374,-79.90404295819913" />
< path d="M10.095626362391236,-80.09667897707732 L9.90391528859146,-90.09473859818569 L-0.09414458686938598,-89.90304078976057 L0.09753995618075084,-79.90498065996485 L10.09560034029374,-80.09665193763965" />
< path d="M19.57430375048677,-79.58806465581777 L20.427118621243082,-89.5515307253777 L10.463653683202342,-90.4043588156092 L9.610812373497161,-80.44089500910518 L19.574275048446914,-79.58804047992783" />
< path d="M30.181268807686408,-79.61179185211665 L30.77988490372078,-89.59375599213558 L20.797921557951426,-90.19238533218851 L20.199278973881,-80.21042278068629 L30.181240731098505,-79.61176695259942" />
< path d="M40.52336115424119,-80.41196119113626 L39.68580185100374,-90.37672128541928 L29.721040645460068,-89.53917520337541 L30.558573506308896,-79.57441288658865 L40.523336934321215,-80.41193252624095" />
< path d="M50.70668344133314,-79.50935556530763 L50.43284805136809,-89.5055029983069 L40.43670025505422,-89.23168087117948 L40.710509119343506,-79.23553271156862 L50.70665764223378,-79.5093283130193" />
< path d="M59.7816585196118,-79.38423650752962 L60.453944980605385,-89.36150969399795 L50.47667268613208,-90.03380939278608 L49.80435974955058,-80.05653799032538 L59.781630259981135,-79.38421181595169" />
< path d="M-49.01156803874121,-69.76426059473769 L-49.834550526348394,-79.73023516565382 L-59.80052618918472,-78.90726590085157 L-58.97757014718883,-68.9412891461126 L-49.01159230056475,-69.76423196530067" />
< path d="M-40.24072750484152,-69.66713098273362 L-40.07185395773892,-79.66560241831537 L-50.0703251692513,-79.83448923133871 L-50.239225248195055,-69.83601824391329 L-40.240754484874195,-69.66710489904939" />
< path d="M-30.12711222270257,-68.94508417540493 L-29.261023839355065,-78.90740520191704 L-39.22334371673678,-79.77350680322049 L-40.08945853599462,-69.81118807498673 L-30.127140956926354,-68.945060037776" />
< path d="M-20.43630857642466,-69.90718216504658 L-20.627313240648487,-79.90525530647237 L-30.625386635489495,-79.71426390764113 L-30.43440850205118,-69.71619025940251 L-20.436334600432545,-69.90715512744757" />
< path d="M-9.510267987465628,-70.20508003237234 L-10.488327292290066,-80.15703206799337 L-20.440280625586425,-79.17898596736896 L-19.46224772916378,-69.2270313364148 L-9.510291800569307,-70.20505102863396" />
< path d="M0.7037446989713549,-69.94471263019955 L0.5620487713033944,-79.94360614834132 L-9.436844934831004,-79.80192348715437 L-9.295175540125328,-69.80302959304494 L0.7037185419415293,-69.9446857212691" />
< path d="M10.662629268798504,-70.31317013608346 L9.937427843212802,-80.2867368108184 L-0.036139793706921,-79.5615486181107 L0.6890351661214957,-69.58798001902377 L10.662604727358094,-70.31314174597163" />
< path d="M20.417297459520913,-70.63610212028384 L19.26268700311582,-80.569118984108 L9.329668607369138,-79.41452170678 L10.484252705618008,-69.48150177912828 L20.417274165157266,-70.636072698296" />
< path d="M30.426997598921773,-71.00114368409805 L29.74289310934961,-80.97761351918513 L19.76642236660497,-80.29352226634283 L20.450500382716196,-70.3170506159582 L30.426972940723278,-71.00111539533715" />
< path d="M41.162330656043956,-69.93381953730288 L40.339674810797284,-79.89982107670355 L30.373672179909807,-79.07717845429758 L31.196301579473616,-69.11117473194085 L41.16230639328207,-69.93379090866105" />
< path d="M49.789388506957,-68.96897474006617 L51.05045113608405,-78.88903877052859 L41.130388778801816,-80.15011456154485 L39.86929982589855,-70.23005387746028 L49.78935883676801,-68.96895176267223" />
< path d="M58.83327640684147,-69.01696378959564 L59.69879692905628,-78.97933416760709 L49.736427699421796,-79.84486790784331 L48.87088074116569,-69.88249982660335 L58.83324767399359,-69.01693965032888" />
< path d="M-49.47723692115735,-60.69848840497862 L-50.760450362570396,-70.61571143296544 L-60.67767509310953,-69.33251114967442 L-59.39448796794281,-59.41528471660043 L-49.477259832351415,-60.6984586836406" />
< path d="M-39.76628895379624,-60.77715729794572 L-40.502600008840965,-70.74990994469647 L-50.475353632516686,-70.01361212144971 L-49.739069041069186,-60.040857520866574 L-39.76631346359619,-60.777128880513516" />
< path d="M-28.917713319430735,-61.02411328466083 L-29.702093089424643,-70.99320038927975 L-39.67118123474587,-70.20883384622043 L-38.88682791862251,-60.23974466021445 L-28.917737691949323,-61.024084749400465" />
< path d="M-18.934213321033265,-60.77316939426913 L-19.90273817400964,-70.72605384714119 L-29.855623911906765,-69.75754219960196 L-28.887125469806392,-59.80465517669729 L-18.93423716191169,-60.7731404133571" />
< path d="M-10.992346017384452,-60.27362525911041 L-9.753008370567382,-70.19642685544585 L-19.67580832254722,-71.43577766778434 L-20.91517230040496,-61.51297936017757 L-10.992375637188724,-60.273602216802765" />
< path d="M-0.49507286999073674,-59.68245424325132 L-0.46990591878788646,-69.6823200397319 L-10.469771681868288,-69.70750025870564 L-10.494965168612861,-59.70763452904303 L-0.49509947238564056,-59.68242777452766" />
< path d="M9.91991242100088,-60.34858837160502 L10.048063722112587,-70.34766465729653 L0.04898760646036404,-70.47582922513152 L-0.07919022809767018,-60.47675327953619 L9.919885547423158,-60.348562178255335" />
< path d="M19.26713110298649,-59.76385642056739 L19.91925393103816,-69.74246780393077 L9.940643412916813,-70.39460387155252 L9.288494105726123,-60.415994218690756 L19.267102893310724,-59.76383167193228" />
< path d="M30.52784120713736,-59.9003283199372 L30.518087354486553,-69.9002210286323 L20.518194632858886,-69.89048044378812 L20.52792194989643,-59.8905877092455 L30.52781469733641,-59.90030175847639" />
< path d="M40.37896477241583,-59.52229714956463 L40.32927057025239,-69.52207113747687 L30.32949651641493,-69.47239020296259 L30.379164183280004,-59.47261608321751 L40.37893836891508,-59.52227048243327" />
< path d="M50.34786961768798,-60.52285657360413 L50.09501114409041,-70.5195566248903 L40.0983107573217,-70.26671141486358 L40.35114270377715,-60.27001069262993 L50.34784376145814,-60.52282937551365" />
< path d="M59.56872213036472,-61.782925932929295 L58.28598441845441,-71.7002105051042 L48.36869814435839,-70.41748595139758 L49.65140953985906,-60.500197975397896 L59.56869921774495,-61.78289621269036" />
< path d="M-49.25521468366633,-50.40791517674687 L-48.65613976626336,-60.38985179077091 L-58.63807558542907,-60.98893995215592 L-59.23717699079505,-51.007004927866106 L-49.25524276139871,-50.407890278520206" />
< path d="M-40.67217612814775,-49.56624961539246 L-41.25423034343075,-59.54919317996931 L-51.237174680265376,-58.967152210005395 L-50.655146955621575,-48.98420710093057 L-40.67220107432412,-49.56622158025323" />
< path d="M-31.15108770889861,-49.80373258865845 L-30.422490856691105,-59.77705179291579 L-40.395809094241095,-60.50566187767168 L-41.12443241154408,-50.532344606846614 L-31.151116107461494,-49.80370805699781" />
< path d="M-20.535708294622626,-49.1787634895236 L-20.57918680728025,-59.17856643468168 L-30.578989810116596,-59.135101189711605 L-30.535537832834155,-49.13529812921459 L-20.53573471469408,-49.178736838809336" />
< path d="M-9.500434218456487,-50.518481761139775 L-9.721314312606335,-60.51593950333921 L-19.718772347859556,-60.29507267376547 L-19.497918782862307,-50.29761434547607 L-9.50046016155432,-50.51845464589643" />
< path d="M0.5920194124193161,-51.07087648272763 L-0.5274312154964891,-61.00791727034212 L-10.464473488383613,-59.8884798268423 L-9.34504922930176,-49.95143606870003 L0.5919960140781555,-51.07084714336196" />
< path d="M9.92028315362204,-50.63389413145994 L8.161076464870709,-60.477833441985354 L-1.682865179752504,-58.71863981412402 L0.07631538721575559,-48.87469583542034 L9.920261699982566,-50.633863341492415" />
< path d="M20.950241234424745,-49.92342854082978 L19.94874320195331,-59.87304918756858 L9.999121226440792,-58.871564356203926 L11.000592856696908,-48.9219410519352 L20.950217489704325,-49.92339948108101" />
< path d="M29.65938383957851,-50.71576468216506 L28.61641230737596,-60.66112338389473 L18.671052221845727,-59.618165047144274 L19.713997363142273,-49.672803577831 L29.659360216221085,-50.71573552367178" />
< path d="M40.29321051895712,-49.64028073066216 L39.10026148111802,-59.56876610941828 L29.17177451957195,-58.37583024464396 L30.364697211279385,-48.44734170032541 L40.29318733835293,-49.64025121896386" />
< path d="M52.024354329945204,-49.740199880729136 L50.13503259260701,-59.55999685907225 L40.315233107530105,-57.67068815059224 L42.20452878714861,-47.850886158798815 L52.02433328564125,-49.7401688095525" />
< path d="M60.63764231396416,-50.07567008983329 L59.44978625764376,-60.00476608657529 L49.52068868486914,-58.81692320412983 L50.708518393437565,-48.887824055340076 L60.637619118224976,-50.07564059002939" />
< path d="M-49.924942659880294,-40.54749947908552 L-51.669271999955754,-50.39408591685202 L-61.51586075208085,-48.649769641178736 L-59.7715575408128,-38.80317857471237 L-49.92496416002251,-40.54746872157211" />
< path d="M-38.804613102323614,-40.98868132596743 L-39.006020167055844,-50.98655032477567 L-49.00388943308116,-50.78515652516518 L-48.80250889859276,-40.7872869919404 L-38.804639098186115,-40.988654261306344" />
< path d="M-29.77798366617838,-40.58797711817659 L-30.79716424851113,-50.535802019312065 L-40.744990501881446,-49.51663463570352 L-39.7258363169989,-39.56880703011588 L-29.778007359211443,-40.58794801627063" />
< path d="M-20.60115757951953,-41.69321304925731 L-21.311921710108564,-51.667818990031265 L-31.286528593911964,-50.957068093699114 L-30.575790931837947,-40.982460266883834 L-20.601182162028337,-41.693184694698466" />
< path d="M-11.359802889021495,-38.58750447414553 L-10.443448978619703,-48.54532777213323 L-20.401271060784936,-49.46169489452335 L-21.317651395161768,-39.5038740281981 L-11.359831744694034,-38.58748048183617" />
< path d="M0.9963765233581228,-38.59393963099782 L1.0634610270413258,-48.59361207525422 L-8.936211328198892,-48.66070984645173 L-9.003322366910592,-38.66103758024529 L0.9963498102444603,-38.59391327401953" />
< path d="M9.322668408674204,-40.52492846316482 L9.662330332801476,-50.51905569371144 L-0.3317964470746322,-50.85873087799541 L-0.6714848915147176,-40.8646045488074 L9.322640986967603,-40.52490284421181" />
< path d="M18.263906483189043,-38.78069087780473 L19.975792610081854,-48.63296955898337 L10.123516200233666,-50.34486875782775 L8.411603929440734,-40.49259461932735 L18.263875796575995,-38.78066927658888" />
< path d="M31.18732832229803,-41.472805126272966 L30.37896795216725,-51.439976381702316 L20.411795624218257,-50.63162923596421 L21.22012954556228,-40.66445583551312 L31.18730401849792,-41.47277653246163" />
< path d="M38.38741442182283,-38.672549523793904 L39.10937262545023,-48.64635149071054 L29.135571616432827,-49.36832292752685 L28.41358694642887,-39.394522876426244 L38.38738603959512,-38.67252497323592" />
< path d="M50.28740695081568,-40.7034127017291 L49.06899206631963,-50.62880511171943 L39.14359803975139,-49.41040339618445 L40.361986586323155,-39.48500775305577 L50.2873838459948,-40.703383130662175" />
< path d="M59.66998839907298,-42.098588402296876 L58.42984112862913,-52.02128884475032 L48.50713904076335,-50.78115473969588 L49.747259980426215,-40.858451006435224 L59.669965359064264,-42.09855878070434" />
< path d="M-50.184608262793475,-32.11721655170345 L-51.47476541589325,-42.033538644261796 L-61.39108922021679,-40.743394648088696 L-60.10095838097264,-30.827069132017414 L-50.184631153171075,-32.117186814330346" />
< path d="M-39.92651105152822,-31.563288375129822 L-41.40946966030007,-41.45261510083388 L-51.29879835357734,-39.969669613171575 L-49.81586598702718,-30.080338952338508 L-39.92653335865572,-31.56325819777391" />
< path d="M-28.15893101929954,-31.18145638517782 L-30.548506274247007,-40.891650998263486 L-40.25870405780038,-38.502088626754784 L-37.86915456973464,-28.791887672750796 L-28.158950445297137,-31.181424277369363" />
< path d="M-18.928091362379945,-30.29989092552472 L-20.769609019607,-40.12876482039061 L-30.59848535778046,-38.2872602040649 L-28.75699378235934,-28.458381422601157 L-18.928112557622626,-30.299859957114453" />
< path d="M-11.262862182829146,-28.282067821481448 L-10.160186552984745,-38.220984049038776 L-20.09910131750893,-39.32367286578553 L-21.2018033211561,-29.38475956431199 L-11.262891482750698,-28.282044373766347" />
< path d="M-0.5102380292098898,-29.928672881056187 L-0.21836970593129124,-39.924310039582984 L-10.214006477199888,-40.21619162502169 L-10.5059013247982,-30.220555241028894 L-0.5102653280987903,-29.928647131271497" />
< path d="M10.282649991974344,-27.741036453570914 L11.753192071592725,-37.632217137145894 L1.8620133391341778,-39.10277234033103 L0.39144501238487095,-29.21159555900633 L10.282619842558312,-27.741014108695442" />
< path d="M18.4094191552526,-30.56082468664115 L20.442139093311937,-40.351943058741 L10.65102341822315,-42.38467598760444 L8.618277498559191,-32.59356300954394 L18.409387779574157,-30.560804099083043" />
< path d="M28.871835081289575,-29.19903405299598 L28.27168900050575,-39.180906322504086 L18.28981593473567,-38.58077348561798 L18.88993552772301,-28.5988996236035 L28.871810185964318,-29.199005972691015" />
< path d="M37.97069812303263,-29.04669710338643 L40.44299400318284,-38.73616057687388 L30.75353380993348,-41.208469312952595 L28.2812122179306,-31.519012399958374 L37.970665850652615,-29.046677952035687" />
< path d="M50.91527402372233,-28.99768517891735 L52.349721547969814,-38.894164837019794 L42.45324379309374,-40.32862549186471 L41.0187700076539,-30.432149640232424 L50.91524395602498,-28.997662724200197" />
< path d="M58.4997708268342,-27.944705303376352 L60.11383087765164,-37.81348230336021 L50.245056019203105,-39.427555448019184 L48.63096978070543,-29.55878273112335 L58.49974035603119,-27.94468339878982" />
< path d="M-52.68936161911645,-18.460658970995695 L-50.235572245766264,-28.154825620805713 L-59.929735639892534,-30.608627856324574 L-62.38355073757576,-20.91446771789912 L-52.689393854868186,-18.460639758055862" />
< path d="M-40.525975184875186,-18.801544212734946 L-39.545799370130624,-28.753288014463614 L-49.497541871358266,-29.733477033130203 L-50.477744093945155,-19.78173583242111 L-40.526004193772124,-18.801520405915646" />
< path d="M-29.880949519788196,-20.513720734566704 L-30.751455089098364,-30.475656760101856 L-40.7133922696071,-29.60516440823833 L-39.84291313519175,-19.643226072773558 L-29.88097364478847,-20.513691989739197" />
< path d="M-20.801704477027297,-20.815153295696227 L-19.319334589476167,-30.70456828544849 L-29.208747612418925,-32.186951294223654 L-30.691143742415512,-22.29754023810781 L-20.801734653143992,-20.815130986892413" />
< path d="M-10.972300268788263,-19.30851333243507 L-9.414236878710927,-29.1862857430323 L-19.29200722206891,-30.74436223888629 L-20.85009682369681,-20.866593962784943 L-10.972330614869488,-19.30849125538588" />
< path d="M-0.5403295822210583,-19.816747462913995 L1.3393564763032781,-29.63839343721201 L-8.482287004028219,-31.51809252704445 L-10.36199912516545,-21.696451540696753 L-0.5403606328188535,-19.81672638825804" />
< path d="M11.860766787495768,-22.843174578857848 L9.300008787906636,-32.50963555434393 L-0.3664555851715843,-29.948890380168148 L2.194276763586349,-20.282422609514803 L11.860747931797796,-22.843142132850378" />
< path d="M19.746186813555525,-20.554550339532742 L18.928914127239295,-30.520994774699005 L8.962468607728574,-29.70373531181111 L9.7797148471867,-19.737288707973477 L19.7461625353337,-20.55452172400039" />
< path d="M28.332052386451974,-18.40445422739958 L30.37479111295707,-28.193487265360552 L20.58576078530003,-30.236238979902932 L18.54299608272397,-20.447211362567057 L28.332020989721443,-18.404433671960906" />
< path d="M39.21042307261726,-19.912313015505408 L37.116157113922156,-29.69045186793055 L27.33801548284424,-27.59619888282202 L29.43225549436251,-17.818054473108532 L39.21040268269435,-19.912281511032862" />
< path d="M49.53932361514691,-19.801328844193307 L51.490602500773605,-29.609002372281534 L41.68293156164087,-31.560294270677687 L39.73162665047869,-21.752625920517726 L49.539292411648624,-19.801307996592943" />
< path d="M60.40413933875045,-22.55807025079512 L57.62054842926875,-32.16273427259755 L48.015880714220565,-29.379156106537504 L50.799446136854044,-19.774484698260466 L60.40412123834303,-22.55803737746249" />
< path d="M-48.837825910737514,-10.633808748158675 L-50.21771739387009,-20.53804263159627 L-60.12195310813194,-19.15816428935188 L-58.74208790677817,-9.253926744283202 L-48.8378485309201,-10.633778804743933" />
< path d="M-39.0196165153297,-11.760523744341082 L-39.519680123690286,-21.74791007464034 L-49.5070671174626,-21.247859717493412 L-49.007030011530205,-11.26047206026563 L-39.01964169086453,-11.760495914982606" />
< path d="M-26.99110629953718,-11.856955195485721 L-29.488743835960193,-21.539917348654857 L-39.17170930297354,-19.042292659538813 L-36.67409746116886,-9.35932387869829 L-26.99112536651822,-11.856922873187216" />
< path d="M-22.29545191337334,-8.498553067395122 L-21.823418580730408,-18.48730343247729 L-31.812168319512367,-18.959350018142818 L-32.28422815819965,-8.970600905678651 L-22.29547967207087,-8.498527813970428" />
< path d="M-12.220058394295894,-10.838115912792105 L-9.860266856881568,-20.55559157383715 L-19.57773938695869,-22.91539600434652 L-21.937556710558937,-13.19792660525442 L-12.220090442468974,-10.838096388567447" />
< path d="M-0.6106531094494274,-11.017571691381933 L-2.0350092020275943,-20.915508801941414 L-11.932948202406756,-19.49116584189695 L-10.508618374898496,-9.593224951715525 L-0.6106755949322382,-11.017541646685075" />
< path d="M8.359321695200709,-12.314891846908907 L7.932981970959886,-22.30569680760098 L-2.057823555388765,-21.879370339109567 L-1.6315103426475144,-11.888564247121927 L8.35929631496153,-12.314864204112268" />
< path d="M22.23169014636191,-11.79783850806203 L20.097138239759982,-21.567262108309755 L10.327711807408281,-19.432723163731083 L12.462237789959943,-9.6632938992926 L22.231669886468005,-11.797806919813494" />
< path d="M29.840338428373386,-6.7005924191130415 L32.752249681129456,-16.267134227892623 L23.185711735867283,-19.179058173484982 L20.273775097443764,-9.612524091757061 L29.84030531562059,-6.700574760507505" />
< path d="M37.752934802168916,-10.769022980056768 L38.72945674655354,-20.721125984708117 L28.777355037555278,-21.697661133491355 L27.800806684375143,-11.74556072016371 L37.75290580201465,-10.76899916258839" />
< path d="M51.88279271918266,-10.954588550307198 L49.80919080596119,-20.7371303686967 L40.026646236335864,-18.663541434903607 L42.10022219069692,-8.880994114059677 L51.882772262742236,-10.954557088985053" />
< path d="M62.92914790262257,-11.680454852829667 L59.545353871268176,-21.09044354976366 L50.13536068474181,-17.70666200353722 L53.519129745834334,-8.296664327435057 L62.929131911495745,-11.680420903387711" />
< path d="M-46.440492854604926,-3.144686172558498 L-49.51487811676356,-12.660257862314026 L-59.030453885589395,-9.585885225370053 L-55.95609387386549,-0.0703053774906719 L-46.44050994694931,-3.1446527639890927" />
< path d="M-37.284987223694074,1.5281656393096115 L-38.63729269457436,-8.379872473075825 L-48.54533260118308,-7.0275801481311255 L-47.19305342217635,2.8804615526834225 L-37.28500992717341,1.5281955196170451" />
< path d="M-28.496369049883135,1.473609948295076 L-28.076003830199735,-8.517448174102954 L-38.06706139485054,-8.937826649870914 L-38.48745312670232,1.0532303570150816 L-28.49639667759872,1.4736353449499413" />
< path d="M-19.786605916572608,0.2835717087285268 L-17.682817254024457,-9.492522735700135 L-27.45890890714845,-11.596324369118655 L-29.562723511433635,-1.820235507316534 L-19.786637440970598,0.2835920678316066" />
< path d="M-10.06206857293809,3.597532292923229 L-6.815647024267648,-5.860728459000633 L-16.273903468847642,-9.107162556840313 L-19.520350115850846,0.3510895803791585 L-10.062102286008539,3.597548776540177" />
< path d="M-2.149234553733667,0.5745471534435858 L-0.3686395955251687,-9.265545880560595 L-10.208730267036383,-11.046153894552747 L-11.989351336809051,-1.2060655855518156 L-2.1492653903357297,0.5745685399982312" />
< path d="M8.10798739875164,-0.46776428623223865 L9.627436816593727,-10.351550139318821 L-0.2563470204864222,-11.871012670916201 L-1.7758226658364178,-1.9872308498598832 L8.107957139178666,-0.467742090759943" />
< path d="M21.72991516729038,-0.5380050331673543 L21.860778368666693,-10.537046194477806 L11.861737380993672,-10.66792266253079 L11.73084764626425,-0.6688818485127968 L21.72988828660961,-0.5379788471071709" />
< path d="M31.272243121565367,-0.3286109305491678 L31.931198620982837,-10.306773435381537 L21.953036990458045,-10.965742173773515 L21.294055013092713,-0.9875814175738657 L31.27221489494966,-0.3285862012363463" />
< path d="M39.63529978638704,-0.28909779063421404 L42.897358391631734,-9.741976874754783 L33.4444836356022,-13.00404802202834 L30.182399946305527,-3.5511775941064747 L39.635266046103084,-0.28908136279243024" />
< path d="M48.72611090510717,-1.494976703583757 L49.995981600485074,-11.413917057274546 L40.077042931660976,-12.683800913050774 L38.80714591548866,-2.764863929110823 L48.726081214527,-1.4949537525446521" />
< path d="M60.45029502103119,1.2121553952830717 L59.075728985858,-8.69281898822764 L49.170752778588806,-7.318266094925123 L50.54529253001823,2.586711936085116 L60.45027238475208,1.212185326531198" />
< path d="M-50.24643576859957,9.477430940389725 L-49.341126751380884,-0.4814025709406895 L-59.29995906154315,-1.3867248014880493 L-60.205294505417605,8.572106307488532 L-50.246464597644234,9.47745496468848" />
< path d="M-37.96031353286069,9.223036644081255 L-41.24456320959244,-0.22215543358145684 L-50.68975964477255,3.0620817113147645 L-47.40553503171765,12.507282503995643 L-37.960329881552624,9.223070422787833" />
< path d="M-27.79193890553258,7.848292610032935 L-28.70253120790566,-2.1100592105202036 L-38.66088423661925,-1.1994801208382952 L-37.75031835963012,8.758874116018223 L-27.79196291464821,7.848321451723468" />
< path d="M-23.330917107557987,10.09981725547049 L-19.959270953150416,0.6854690819364482 L-29.373614653193258,-2.686189563377268 L-32.745285789407184,6.728149663157803 L-23.330951036396453,10.099833290266005" />
< path d="M-8.597231310764265,8.875756296763575 L-7.460971151194861,-1.059376423680097 L-17.396102364045603,-2.1956497651318903 L-18.53238888737779,7.739479940108438 L-8.597260689765363,8.875779645319012" />
< path d="M-0.39152443968304596,8.369949651925884 L-2.784070739808032,-1.3395133365618603 L-12.49353690270545,1.0530200810950752 L-10.101016367520774,10.76248941838508 L-0.3915438558552804,8.36998176567687" />
< path d="M11.805206545863314,5.648093841095626 L7.950439250888133,-3.5789706121660303 L-1.2766303168509783,0.2757844403837306 L2.5781124932665795,9.502859122584052 L11.805192289911865,5.648128554905483" />
< path d="M22.767610762596796,9.384370124358046 L19.44322019056654,-0.04676854749125692 L10.012077107941089,3.277609511349414 L13.33644265358632,12.708757004734402 L22.76759455771425,9.38440397229046" />
< path d="M28.073829696013,11.488727973907942 L27.667327696751933,1.4970962028881623 L17.67569538639617,1.9035849453028257 L18.082170871963715,11.895217794976983 L28.07380426093868,11.48875556625727" />
< path d="M40.81066933659364,8.858505162070474 L38.77730312284473,-0.9324790154185045 L28.98631624750445,1.1008742077007798 L31.01965647999053,10.891863780875118 L40.81064875098169,8.858536539025824" />
< path d="M48.28335318466582,8.476725592077305 L46.43208733706194,-1.3503168971231263 L36.605042391620074,0.5009359120093029 L38.456282162277795,10.327983313675295 L48.28333202015062,8.476756581495543" />
< path d="M61.069099183971005,7.51236887582233 L60.20291977883354,-2.449944237163571 L50.240605516613996,-1.5837780499730663 L51.10675848585602,8.378537361462591 L61.06907504649024,7.512397610170575" />
< path d="M-52.3521775724961,19.447072845852468 L-48.27350149603288,10.316774341074995 L-57.40379458923571,6.238086150581903 L-61.48249489375149,15.36837383219402 L-52.352212623746155,19.447086250725313" />
< path d="M-44.695557939887685,22.138860588019945 L-40.89651175103503,12.888714784951798 L-50.14665251353994,9.089656323056243 L-53.94572324847171,18.33979204498163 L-44.69559256714212,22.13887505294292" />
< path d="M-31.350695884610836,19.85920639964653 L-29.12428575022971,10.110306603434644 L-38.87318259244341,7.883883534264982 L-41.09961859639769,17.632777422463334 L-31.350727662231844,19.859226361198314" />
< path d="M-18.676643658697678,20.53827808645673 L-16.147814243750865,10.863415239203812 L-25.82267373575731,8.334572987700573 L-28.351528823812522,18.009429124443503 L-18.67667604235013,20.538297049046243" />
< path d="M-10.430458821757108,24.20230715733701 L-6.477436300676238,15.016907750077543 L-15.662830463077514,11.063873041859095 L-19.615877358426577,20.24926195938601 L-10.430493685790193,24.20232104185873" />
< path d="M-3.1628965797867146,19.706463577250766 L-0.47020898380954446,10.075919312593351 L-10.10074967581432,7.383218938861569 L-12.793462827295977,17.01375605819675 L-3.1629292806473344,19.70648198742354" />
< path d="M10.28863065458726,15.042868752569326 L6.278122762077047,5.882422487939616 L-2.8823288236660054,9.892918226412947 L1.1281547607633846,19.053375133253216 L10.28861698868474,15.042903702874826" />
< path d="M22.868435173835838,17.614385346216938 L20.102914717649462,8.004502624275434 L10.493028326437992,10.770010330116019 L13.258523281927923,20.379900390580545 L22.868417011628583,17.614418185446134" />
< path d="M29.661604284451613,24.249981405821188 L33.541687467862445,15.033533944197618 L24.325245154321557,11.15343853245474 L20.445137514253467,20.369875697896727 L29.66156953158033,24.249995566283197" />
< path d="M37.00038449961981,19.27521166291432 L38.83764735339691,9.445541549976348 L29.00797967813857,7.608265654244726 L27.17069074045566,17.437930891806133 L37.00035354030283,19.275232871437098" />
< path d="M52.20961095857639,21.68992378530623 L52.345858400734656,11.690954540551026 L42.34688933676066,11.55469383181152 L42.21061536144015,21.553662714986697 L52.209584063798914,21.689949956887975" />
< path d="M58.25947102872713,20.053509069128935 L58.94456251227291,10.077106963047397 L48.96816131517604,9.392002242862816 L48.283043358353865,19.368402530957464 L58.25944273742873,20.053533724416017" />
< path d="M-51.409591594756094,30.329790715240765 L-48.02743209940961,20.91921440605052 L-57.43800392115961,17.537042424802387 L-60.820188388303436,26.94760975909558 L-51.40962554148362,30.329806712129148" />
< path d="M-36.78170325890691,32.19713534008611 L-38.0990505022437,22.284388719520848 L-48.011798870649834,23.601722810674847 L-46.69447793168094,33.51447292690441 L-36.7817260676454,32.19716514012294" />
< path d="M-31.88510993997008,32.300203083994724 L-29.166940696010037,22.676819828390446 L-38.790320345152765,19.95863781617701 L-41.50851512561482,29.582013858841243 L-31.885142689446017,32.30022140754713" />
< path d="M-25.073606321767592,29.951872032015405 L-20.82261389779206,20.900517838616622 L-29.873962450987822,16.649513405354277 L-34.124978893529494,25.700856318331084 L-25.073641620787573,29.9518847701446" />
< path d="M-13.361179681737555,30.945712419351203 L-10.356467941706597,21.407910959770735 L-19.894265414642465,18.403186565036123 L-22.899002464075448,27.940980051310603 L-13.36121296447915,30.945729755436663" />
< path d="M3.240805035060984,25.694970927680977 L-0.4721950945533111,16.40995184528059 L-9.757219103335151,20.122939655575685 L-6.044243612365792,29.407968590722632 L3.2407902491299114,25.69500541908554" />
< path d="M10.790573581442104,32.695689151541394 L10.929670599996347,22.69675914166111 L0.9307407746780845,22.557648856577682 L0.7916172230657113,32.55657849731633 L10.79054667920714,32.6957153154574" />
< path d="M16.59023891673982,28.492874221247956 L17.289415294850155,18.5174493322847 L7.3139913335593265,17.818259718832145 L6.614788484765784,27.79368275243298 L16.59021059065907,28.49289883656628" />
< path d="M25.850091275002733,28.508584598427493 L29.297987059001375,19.12189380849841 L19.911300843731084,15.673985570289366 L16.463380151317708,25.06066721088434 L25.85005721722084,28.508600357495983" />
< path d="M43.80897191806094,30.788835255331612 L41.89414119688982,20.973980562962783 L32.079283963942,22.888798261833106 L33.994088640508146,32.703658035342634 L43.808950954562114,30.788866381084027" />
< path d="M48.50131881283751,32.325551285843616 L48.686087277593174,22.327360952713974 L38.6878971896222,22.14257922241056 L38.50310219377136,32.14076906520528 L48.50129179137223,32.32557732660322" />
< path d="M62.12226109401942,29.698837036835076 L63.0503306715663,19.742098806757568 L53.09359367285553,18.81401601866203 L52.16549767421298,28.77075178598853 L62.122232210137675,29.698860995176474" />
< path d="M-50.83766377619863,42.107080231858276 L-46.33127872717803,33.180129850399965 L-55.258223129579804,28.67373295715112 L-59.764631867048955,37.600671380480634 L-50.83769942280741,42.10709196216216" />
< path d="M-44.07568154160499,38.3971885795293 L-40.73855895726908,28.97054749268557 L-50.1651956164273,25.633412401133306 L-53.50234321519003,35.06004463258942 L-44.07571541145263,38.39720473855675" />
< path d="M-30.517239613775367,40.43933767100262 L-33.584171752158255,30.92136117483447 L-43.10215231750793,33.98828068481202 L-40.03524543594113,43.506265319326474 L-30.517256732278646,40.4393710661758" />
< path d="M-22.954979071331536,39.09140512092678 L-18.45186639591141,30.16280357558242 L-27.380461966540995,25.659679053743293 L-31.883598334791195,34.58826864964239 L-22.955014713638313,39.09141686429573" />
< path d="M-9.41891675312968,40.41875041431992 L-6.440299781068754,30.87276747609896 L-15.986278767267518,27.89413783847921 L-18.964921070440848,37.44011287263897 L-9.418949988336896,40.41876784136063" />
< path d="M-4.161590469393531,40.21594305907277 L0.559751102979213,31.40079229008192 L-8.255393401751975,26.67943902181628 L-12.976758365902205,35.49457726227228 L-4.161626389736895,40.21595392229879" />
< path d="M10.21121265428821,42.071617443008535 L14.12552791284303,32.86965649005399 L4.923572153390099,28.955329022387787 L1.0092324766193963,38.15727958832291 L10.21117784902051,42.07163147419122" />
< path d="M18.55630026033303,39.34432628896722 L17.956805903887236,29.36241485679929 L7.97489367632204,29.96189596929541 L8.574361544867426,39.94380899224029 L18.55627536317444,39.344354367646694" />
< path d="M34.31832089457123,36.233791729241055 L31.347396714784626,26.68541182262787 L21.799012866372802,29.656323333670123 L24.769911708665486,39.204711123863774 L34.31830344062415,36.23382495032589" />
< path d="M44.859234147899336,39.20697447731243 L40.38689991275729,30.262916348463335 L31.442835850045835,34.735238716670764 L35.915146351310774,43.67930871322885 L44.85922228169973,39.207010078914266" />
< path d="M49.256777818218744,41.187630820655166 L47.140085750128215,31.414322066096258 L37.36677418716168,33.531001167008746 L39.4834403208924,43.304315538365714 L49.256757500622584,41.18766237182049" />
< path d="M58.275667842937054,38.25468027236332 L58.20193191225475,28.25505466259265 L48.20230620466042,28.328777325822664 L48.27601560043801,38.32840313122304 L58.27564150362684,38.25470700289801" />
< path d="M-53.18047651529454,47.77504954692451 L-53.55118766941076,37.78202585220283 L-63.54421185598131,38.152723747625885 L-63.17352721925207,48.145748426027716 L-53.180502049036555,47.77507704799295" />
< path d="M-41.41294157747009,45.79349795170366 L-43.26649412805409,35.96688651818911 L-53.09310802084404,37.82042603087358 L-51.239581546062375,47.647042382921654 L-41.41296273477348,45.79352894604604" />
< path d="M-32.26360003953363,53.132808757683456 L-30.813104647572803,43.238668449351685 L-40.707243031385985,41.78815992989727 L-42.15776467833144,51.68229638917444 L-32.26363014360769,53.13283116360838" />
< path d="M-21.24857733812722,47.401060501019 L-24.74347342984925,38.03176753777353 L-34.11277103009678,41.526651198362394 L-30.617899800647226,50.89595343559548 L-21.248592926445077,47.40109463729139" />
< path d="M-9.993196249563299,52.00086449020914 L-6.148088084862568,42.769770702103266 L-15.379176771290428,38.92465028963779 L-19.22430943151388,48.15573387437138 L-9.9932309484908,52.00087878234604" />
< path d="M3.059459034039297,46.420779415606276 L0.9029295988738477,36.656183667787516 L-8.86166901020856,38.81270014733526 L-6.705165486282317,48.57730161766413 L3.059438845275835,46.42081104936319" />
< path d="M13.367154995693951,53.575191935825806 L13.507177521382856,43.57627484369254 L3.5082606150395605,43.43623905149159 L3.3682115563268082,53.43515577202731 L13.367128091037348,53.575218097251614" />
< path d="M21.04052630376069,53.453451864887796 L21.743791544055107,43.47831440594274 L11.768655018207566,42.77503593068747 L11.065363307992675,52.75017152341994 L21.040497967592515,53.45347646859321" />
< path d="M27.65425164867093,51.361847141062604 L31.118896962253306,41.98132571770203 L21.7383801357747,38.51666795809475 L18.27370993014862,47.89718018767486 L27.654217562813727,51.361862839313645" />
< path d="M41.25007228661116,45.66232823752794 L36.71526775632355,36.749781059804945 L27.80271456185289,41.28457376496645 L32.33749544188031,50.19713297616908 L41.250060669799225,45.66236392128373" />
< path d="M52.986716960170874,47.068776868890325 L51.940416549972056,37.12376783044933 L41.99540612331378,38.17005504565999 L43.041680143534435,48.115066860518056 L52.986693346574775,47.068806035289235" />
< path d="M59.32655366185392,44.858828362811266 L54.29822718892211,36.21510912832266 L45.65450128288321,41.243424132807476 L50.68280481891218,49.887156710381454 L59.32654406800602,44.858864642817174" />
< path d="M-46.16011694295546,59.8285600848027 L-49.714611212581055,50.48171463779471 L-59.06146137566567,54.03619650607034 L-55.50699190874627,63.38305138521513 L-46.16013231355775,59.82859431965821" />
< path d="M-41.25173220385054,59.10975324694059 L-36.720864518602895,50.19520405240283 L-45.635407701600684,45.6643245393808 L-50.16629904238913,54.57886171082293 L-41.25176788251835,59.10976487936981" />
< path d="M-27.91135296474256,60.73993741978442 L-27.364285997393022,50.755015434296 L-37.349207257027,50.20793521900341 L-37.89630072026168,60.192855752765354 L-27.91138091238933,60.73996246394116" />
< path d="M-21.08883175171522,58.30698184449452 L-18.372637047669286,48.68304108964945 L-27.99657419867262,45.96683361661043 L-30.712794440699945,55.59076716375508 L-21.088864497430922,58.307000174765925" />
< path d="M-14.546925447215283,63.25447020964938 L-12.401331395821884,53.48746578200216 L-22.16833297669727,51.34185877179902 L-24.313952945706376,61.108857505885375 L-14.546957058426237,63.25449043369667" />
< path d="M-1.877561104397845,57.60554219961185 L-2.730718042755588,47.64210541496835 L-12.694155959354585,48.495249133888265 L-11.841025459874007,58.45868818242523 L-1.8775852794166186,57.60557090238548" />
< path d="M14.190637578722981,60.97790963004257 L10.028559441122358,51.8853272191121 L0.9359715079758644,56.04739329271712 L5.098025517577955,65.13998674806363 L14.190624495108487,60.977944802471804" />
< path d="M15.407933145760872,58.74121743570667 L17.501015788572865,48.96282521748315 L7.722626347449319,46.86972960075211 L5.629517756802912,56.648116264758464 L15.407901643674867,58.74123782931655" />
< path d="M27.641089741222928,57.19917903684005 L26.34124327348286,47.284122381260175 L16.426184893282056,48.58395569375253 L17.726005050524403,58.49901579855681 L27.641066879914717,57.19920879656675" />
< path d="M38.31798181072264,62.181984586224196 L43.46707296518299,53.60965645402386 L34.89475166477807,48.460553925846824 L29.745637762893413,57.032868394441245 L38.31794539966224,62.18199367002446" />
< path d="M50.31109627344028,61.720657196429066 L53.40159012965021,52.21030509738543 L43.89124213106641,49.11979862289159 L40.8007230382941,58.63014252099879 L50.31106283590798,61.720674232044125" />
< path d="M56.81096302511841,64.34066014324657 L60.435552869667035,55.0207729238726 L51.11567045938858,51.39617071374837 L47.491055883695125,60.71604831491491 L56.81092867573334,64.34067525617121" />
< path d="M-50.96487017254155,69.07159352253571 L-56.309825899668596,60.62000209854301 L-64.76142441531384,65.96494661213697 L-59.41649111526236,74.41655221941988 L-50.96487841635666,69.07163013292029" />
< path d="M-40.50719076075693,68.8423465413935 L-44.34527219507368,59.608328985280224 L-53.57929484352569,63.446398167946235 L-49.74123791251718,72.68042590872072 L-40.507205079436474,68.84238122937647" />
< path d="M-29.53034881956114,69.26392235022459 L-24.982161687225258,60.35819704948073 L-33.88788095344981,55.80999810107797 L-38.43609171791144,64.71571133276754 L-29.530384520772543,69.26393391328001" />
< path d="M-23.145228928108583,70.37750713481482 L-24.05364116779316,60.418956209813416 L-34.01219329806253,61.32735523654265 L-33.103807484290236,71.28590857206244 L-23.14525294353755,70.3775359712487" />
< path d="M-11.540252593133513,65.05786246945344 L-15.953149849342987,56.084329880266836 L-24.92668829353125,60.49721523043518 L-20.513814849411798,69.47075952960931 L-11.540264695267606,65.05789799154653" />
< path d="M-3.0983746699899637,70.44605383990259 L-1.20098785963473,60.62781201078955 L-11.019227171295999,58.73041217364283 L-12.91664003523086,68.54864896783504 L-3.0984057585249976,70.4460748585547" />
< path d="M15.187748785060673,65.96990400598649 L12.323995947820915,56.3888357455963 L2.7429238878265068,59.25257587072107 L5.606651300831237,68.83365173030283 L15.187730959983481,65.96993702942318" />
< path d="M24.60430110292888,72.82134939121602 L22.581403064677115,63.02819704634299 L12.788248035841901,65.05108209108842 L14.811120087077441,74.84423980386856 L24.60428048378528,72.82138074614647" />
< path d="M25.16081772721214,73.54640272615903 L27.519122888108434,63.82856623385556 L17.80128952480077,61.47024817938548 L15.44295857676105,71.18807841368023 L25.160785682025786,73.54642225528544" />
< path d="M40.704885634152745,68.08933578957655 L39.99191470875088,58.11488734454529 L30.01746531776221,58.82784503589923 L30.730409775066974,68.80229537282776 L40.70486105791779,68.08936414957341" />
< path d="M52.40189331753321,69.7422419809502 L48.89348916606416,60.37799883838871 L39.529241368578184,63.88639056542466 L43.037620671174864,73.25064301781863 L52.40187777846034,69.7422761396674" />
< path d="M61.64626747246583,63.550899306851015 L56.664538317455765,54.88024051128203 L47.99387291216159,59.86195816210187 L52.97557905878244,68.53263017710597 L61.646257683481195,63.55093553469288" />
< path d="M-46.09750088855164,78.84403670629118 L-46.5895211421967,68.85625089595973 L-56.57730760532932,69.34825789786112 L-56.08531385517247,79.33604501377732 L-46.09752608649026,78.84406451536589" />
< path d="M-37.35641263770574,80.5825086361341 L-39.80383831057335,70.88673342737209 L-49.499616766558695,73.33414623593248 L-47.05221682230984,83.02992793912412 L-37.356431871928976,80.5825408591911" />
< path d="M-32.090303585316896,79.9063113518321 L-31.539492639177283,69.92159520040006 L-41.524208059787384,69.3707710065905 L-42.075045501265926,79.35548569636109 L-32.09033154235243,79.90633638550763" />
< path d="M-25.468340930812875,80.39371858843754 L-22.735518825056985,70.77448615225288 L-32.354747635338754,68.04165128375088 L-35.087595266582035,77.66087646811283 L-25.468373708156847,80.3937368620926" />
< path d="M-8.658216602183892,77.40931345378435 L-7.845616092432351,67.44248699123335 L-17.812441476820357,66.62987325754806 L-18.625068434438006,76.59669756375553 L-8.658245206428605,77.40933774530409" />
< path d="M0.06283236963947081,82.06715364510926 L4.036008783839073,72.89045388404575 L-5.140685705626174,68.91726529425124 L-9.113886471008609,78.09395451210206 L0.06279747521164003,82.06716745306542" />
< path d="M14.877232276411112,80.32777267913141 L9.317249374164948,72.01606169704202 L1.0055310151259294,77.57603357134758 L6.565491861481094,85.88775930732159 L14.877224974375464,80.3278094889266" />
< path d="M19.121616102554082,76.13160301894138 L16.095409049014027,66.60059991369796 L6.564401928622932,69.62679432154908 L9.590583690779768,79.15780545707108 L19.121598841415903,76.13163634061384" />
< path d="M27.679884461205685,76.49146117765704 L25.582352992784738,66.7140222971506 L15.804911329292857,68.81154079291369 L17.902416852394406,78.58898523937381 L27.679864081805533,76.4914926889375" />
< path d="M41.86306583002606,81.86277572254966 L44.6015966904496,72.24516697351214 L34.983991574889316,69.5066233524968 L32.24543519328701,79.12422483456292 L41.86303304184203,81.86279397674738" />
< path d="M50.11421056625046,80.30876480186146 L50.598645663931265,70.32060821722632 L40.61048972205094,69.83615986731077 L40.12602811990148,79.8243151664187 L50.11418277621944,80.30879002080121" />
< path d="M59.14785889671382,82.87724510181306 L61.5576947956895,73.17205884584335 L51.85251173708632,70.7622100700782 L49.44265008453593,80.46738993129779 L59.14782674835483,82.87726446062916" />
< path d="M-45.45230217670333,91.79717449822195 L-46.791567596391275,81.88736534472746 L-56.70137852680757,83.22661761613001 L-55.36213940369276,93.13643032345067 L-45.45232491948519,91.79720434862595" />
< path d="M-34.87999792286725,88.13510319941291 L-41.125853730835566,80.32567079051637 L-48.93529442669484,86.57151623696413 L-42.68945934177864,94.38096521977239 L-34.88000207203514,88.13514049639875" />
< path d="M-28.755643389847787,84.05398977026489 L-34.81371917960347,76.09800667270673 L-42.769710314978674,82.1560719064993 L-36.711655637159865,90.11207107967755 L-28.7556484261926,84.05402695784316" />
< path d="M-19.82790001274616,83.03013812134895 L-24.789734892844244,74.34807938244968 L-33.47180021507307,79.30990274323217 L-28.509988373614906,87.99197464877527 L-19.827909884772822,83.03017432665017" />
< path d="M-8.308970452808417,91.20867745034722 L-6.779697874247343,81.32640672426831 L-16.661966571286506,79.79712103396221 L-18.19126537333493,89.67938770194422 L-8.309000734427457,91.20869961573229" />
< path d="M3.322812229068682,89.99742542136163 L-2.4498631323372138,81.83200023372612 L-10.615295979121747,87.60466476128246 L-4.8426422854251125,95.77010526720164 L3.3228058796143447,89.99746240737488" />
< path d="M9.807053510997232,86.19849303629475 L6.798925297964959,76.6617685474037 L-2.7378031820868665,79.66988410715594 L0.270299724380056,89.20661657835174 L9.80703618670305,86.19852632517544" />
< path d="M19.446833380275976,90.81902554752563 L18.090749059561027,80.91150392816157 L8.183225640959938,82.26757510362619 L9.53928367117186,92.17510032144688 L19.446810688194702,90.81905543649005" />
< path d="M29.10171025776338,88.71177738475956 L22.79020231326766,80.95530803397743 L15.03372458841583,87.26680568722364 L21.345211950401424,95.02329178613152 L29.1017064233517,88.71181471541765" />
< path d="M40.162248762300976,89.46901762429502 L34.43849391006048,81.26922618094059 L26.238694872464542,86.9929701537346 L31.962427965802004,95.19277678555761 L40.162242191837656,89.46905457168678" />
< path d="M50.89728500547778,88.72171322996812 L48.63987168940843,78.97994570844062 L38.898101172765045,81.23734609918056 L41.155488638171576,90.97911961092268 L50.8972651449953,88.72174507085352" />
< path d="M55.862813180095614,90.66891438205482 L58.614083778345915,81.05494228836439 L49.00011533503572,78.3036589343474 L46.248819225256895,87.9176237272604 L55.86278036775581,90.66893259279624" />
< path d="M-50.70528484397037,96.04965775715351 L-50.99070070304685,86.05383427379594 L-60.98652456508393,86.33923687046459 L-60.701135230823624,96.33506111116358 L-50.705310611480314,96.04968503931211" />
< path d="M-42.31544725500711,94.98731383973777 L-43.74381841266602,85.08995534572416 L-53.64117880182648,86.51831337161707 L-52.21283390770208,96.41567565590697 L-42.31546972830019,94.98734389355357" />
< path d="M-29.377877103036354,98.84470524051173 L-35.968821705783206,91.32423992468337 L-43.489295766436605,97.91517454930941 L-36.898371119942965,105.43565735477462 L-29.377879569679195,98.844742686425" />
< path d="M-17.11311382617765,97.45992828142782 L-23.716645288841505,89.95051275525911 L-31.22606957653545,96.55403425446295 L-24.622558040803238,104.06346730366892 L-17.113116230098484,97.45996573141996" />
< path d="M-5.584398084020825,99.64712533502647 L-12.161213523437333,92.11430063250566 L-19.69404695203668,98.691106077403 L-13.117251501670074,106.22394823206763 L-5.5844006209534465,99.64716277624333" />
< path d="M5.616940374216903,98.25990786998281 L-0.732554690268041,90.53450420744605 L-8.457966777275654,96.88398902189924 L-2.1084922128653734,104.6094095333641 L5.616936723043137,98.25994521900792" />
< path d="M8.505767561787277,96.14499692966167 L3.4814720963295036,87.49893398755701 L-5.164597511977135,92.52321798145817 L-0.14032498964142115,101.16929425595157 L8.505757951023497,96.14503320519015" />
< path d="M18.951530389701052,103.24007864916992 L21.873475402442487,93.67659671707162 L12.309997347174338,90.75463901555374 L9.388026956885147,100.3181131939749 L18.951497258442494,103.24009627303025" />
< path d="M26.979281921655755,103.23117333340332 L27.10948613184541,93.23212356921552 L17.110436540420697,93.10190609233777 L16.980205796855103,103.1009555109818 L26.979255042700846,103.23119952123503" />
< path d="M40.94066616850447,104.3441649888936 L41.593812146553795,94.36562052317049 L31.615268547430226,93.71246130563988 L30.962096090419458,103.69100403814635 L40.94063795629126,104.3441897346361" />
< path d="M51.79015463576991,98.2902602793217 L55.01272399457626,88.82384617202968 L45.54631416298114,85.60126425323624 L42.32371968420628,95.06766980911777 L51.79012096435758,98.29027684786838" />
< path d="M56.17230069515767,100.1057885162437 L57.70316570486002,90.22376434884136 L47.821143568610246,88.69288622772112 L46.29025233607482,98.57490633280092 L56.17227040996725,100.10581067674883" />
< path d="M-46.95832606781953,109.42115994986116 L-53.61111781198892,101.9553504604778 L-61.076936128255845,108.60813229904342 L-54.42416419530573,116.07395944218077 L-46.95832822531111,109.42119741485786" />
< path d="M-42.09376074869195,101.35050613169413 L-48.090818252875096,93.34842823813575 L-56.09290410329172,99.34547512519751 L-50.09586783336191,107.3475689324583 L-42.09376606927105,101.35054327967099" />
< path d="M-25.9881857840509,107.5673759259595 L-28.03196595203444,97.77856026991549 L-37.82078431974693,99.82232745014657 L-35.77703012727189,109.6111485295103 L-25.98820633627414,107.56740732479493" />
< path d="M-22.48147829932353,107.97263271975996 L-17.827972819038294,99.12148386393281 L-26.679115500610337,94.46796663999253 L-31.33264446819745,103.31910314729389 L-22.481514135182373,107.97264385851965" />
< path d="M-7.192818204270218,108.29373788021996 L-12.976422559149865,100.1360500957266 L-21.134118017292792,105.91964362702264 L-15.350535309590551,114.07734675880077 L-7.19282450419158,108.29377487470249" />
< path d="M1.7085899981778931,114.00857025122454 L1.3348403745573467,104.01565973717015 L-8.658070635377332,104.3893961022477 L-8.284347528843446,114.38230760804508 L1.7085644727990568,114.00859776005551" />
< path d="M10.033732568892207,106.86262772843693 L8.168216421448557,97.0382804815873 L-1.6561333005497412,98.9037835941355 L0.20935677709975709,108.72813579126517 L10.033711449343487,106.86265874851767" />
< path d="M15.57191030090365,107.8769481671428 L21.211164953018113,99.61881543076343 L12.953039698780312,93.97954982180556 L7.313763132988962,102.23766759388727 L15.571873422900028,107.87695511650216" />
< path d="M31.601717590577508,105.84610816598538 L30.735448204081937,95.88380287689311 L20.773141765636638,96.7500590454521 L21.63938471625753,106.7123666332329 L31.601693453356283,105.84613690055164" />
< path d="M41.78287949539453,103.49849533530632 L37.565590031938314,94.43138891128788 L28.498478012449723,98.64866634454985 L32.715743415510026,107.71578395949264 L41.782866625891046,103.49853058664142" />
< path d="M55.51198344089117,106.82679477965826 L49.65109450859663,98.72445374472505 L41.54874569747303,104.5853319268697 L47.40961312945747,112.68768851416942 L55.51197749291906,106.82683183235551" />
< path d="M59.00345474975128,107.72734799580972 L58.8692612423792,97.72835097482636 L48.87026404335737,97.86253121558009 L49.004431017492536,107.86152859262278 L59.00342857253848,107.72737488510641" />
I wanted to see if I could also translate that to R – base plot can draw line
segments just fine, and I was curious about colouring the squares my own way.
Most of that code translates straightforwardly, with the exception that the
‘randomness’ is actually a sequence of values, starting with a specific seed. I
tooted recently about
an older post of mine which (ab)uses
the set.seed() function to generate specific ‘random’ words
printStr <- function(str) paste(str, collapse="") set.seed(2505587); x <- sample(LETTERS, 5, replace=TRUE) set.seed(11135560);y <- sample(LETTERS, 5, replace=TRUE) paste(printStr(x), printStr(y)) ## [1] "HELLO WORLD"
which I was inspired to revisit based on a post by Andrew Heiss.
The Random class in that Python translation produces an iterator which
returns a ‘next’ value each time it’s called with a specific ‘seed’ and
two values
class Random:
def __init__(self, seed):
self.JI = seed
def next(self, JA, JE):
self.JI = (self.JI * 5) % 2147483648
return self.JI / 2147483648 * (JE-JA) + JA
r = Random(1)
r.next(2, 3)
## 2.0000000023283064
r.next(2, 3)
## 2.000000011641532
r.next(2, 3)
## 2.000000058207661
with the added complexity that the subsequent calls update the seed itself.
When I first saw this, my mind went back to reading the
“original” R paper
‘R: A Language for Data Analysis and Graphics’ by Ross Ihaka and Robert Gentleman,
in which
I recalled seeing the cool example of an OO system
maintaining a (non-global) state via <<-
With this same trick we can write an equivalent of the Random class which also
updates the seed internally
random <- function(seed) {
list(
nextval = function(a, b) {
seed <<- (seed * 5) %% 2147483648
seed / 2147483648 * (b-a) + a
}
)
}
r <- random(1)
print(r$nextval(2, 3), digits = 16)
## [1] 2.000000002328306
print(r$nextval(2, 3), digits = 16)
## [1] 2.000000011641532
print(r$nextval(2, 3), digits = 16)
## [1] 2.000000058207661
Cool!
The rest of the translation is mostly aligning to base plot syntax.
This is what I ended up with
draw_square <- function(x, y, i, r1, r2, col) {
r = 5 * 1.4142
move_limit = 5 * i / 264
twist_limit = pi/4 * i / 264
y_center = y + 5 + r1$nextval(-move_limit, move_limit)
x_center = x + 5 + r1$nextval(-move_limit, move_limit)
angle = r2$nextval(pi/4 - twist_limit, pi/4 + twist_limit)
x0 <- x_center + r * sin(angle)
y0 <- y_center + r * cos(angle)
for (step in 1:4) {
angle <- angle + pi / 2
x1 <- x_center + r * sin(angle)
y1 <- y_center + r * cos(angle)
segments(x0, y0, x1, y1, lwd = 1.75, col = col)
x0 <- x1
y0 <- y1
}
}
draw_plot <- function(x_size, y_size, x_count, y_count, s1, s2) {
r1 = random(s1)
r2 = random(s2)
plot(NULL, NULL, xlim = c(-60, 60), ylim = c(120, -120), axes = FALSE, ann = FALSE)
y = -y_size * y_count * 0.5
x0 = -x_size * x_count * 0.5
i = 0
for (z in 1:y_count) {
x = x0
for (zz in 1:x_count) {
draw_square(x, y, i, r1, r2, "black")
x <- x + x_size
i <- i + 1
}
y <- y + y_size
}
}
draw_plot(10.0, 10.0, 12, 22, 1922110153, 1769133315)
Figure 1: ‘Schotter’ in R
Which uses the special seeds discovered in that original post. Checking the rotations, this does indeed appear to match the original art.
Why stop there, though? Now that I can plot it, I can change things… what if I used a different set of seeds, e.g. swapped them?
draw_plot(10.0, 10.0, 12, 22, 1769133315, 1922110153)
Figure 2: ‘Schotter’ in R with swapped seeds
or completely different values?
draw_plot(10.0, 10.0, 12, 22, 12345, 67890)
Figure 3: ‘Schotter’ in R with new seeds
What about changing the colours? I could plot the colour as a function of the progression down the grid, which I think looks pretty cool.
draw_plot <- function(x_size, y_size, x_count, y_count, s1, s2) {
r1 = random(s1)
r2 = random(s2)
plot(NULL, NULL, xlim = c(-60, 60), ylim = c(120, -120), axes = FALSE, ann = FALSE)
y = -y_size * y_count * 0.5
x0 = -x_size * x_count * 0.5
i = 0
for (z in 1:y_count) {
x = x0
rcol <- scales::viridis_pal(option = "viridis")(y_count)[z]
for (zz in 1:x_count) {
draw_square(x, y, i, r1, r2, rcol)
x <- x + x_size
i <- i + 1
}
y <- y + y_size
}
}
draw_plot(10.0, 10.0, 12, 22, 1922110153, 1769133315)
Figure 4: ‘Schotter’ in R with viridis colours
Ever since I first drafted this post, I’ve seen other examples of similar work. This toot demonstrated a simplified version
suppressPackageStartupMessages(library(tidyverse))
crossing(x=0:10, y=x) |>
mutate(dx = rnorm(n(), 0, (y/20)^1.5),
dy = rnorm(n(), 0, (y/20)^1.5)) |>
ggplot() +
geom_tile(aes(x=x+dx, y=y+dy, fill=y), colour='black',
lwd=2, width=1, height=1, alpha=0.8, show.legend=FALSE) +
scale_fill_gradient(high='#9f025e', low='#f9c929') +
scale_y_reverse() + theme_void()
while this one showed a book ‘Crisis Engineering’ with a similar idea
I’m sure I’ve seen others around, too.
This was a fun exploration of some artistically inspired code translation, and I got to stretch my ‘maintaining internal state’ muscles a little. I have no doubt that someone more artistic than I could do a lot more with it.
As always, I can be found on Mastodon and the comment section below.
< details> < summary> devtools::session_info()
## ─ Session info ─────────────────────────────────────────────────────────────── ## setting value ## version R version 4.5.3 (2026-03-11) ## os macOS Tahoe 26.3.1 ## system aarch64, darwin20 ## ui X11 ## language (EN) ## collate en_US.UTF-8 ## ctype en_US.UTF-8 ## tz Australia/Adelaide ## date 2026-04-17 ## pandoc 3.6.3 @ /Applications/RStudio.app/Contents/Resources/app/quarto/bin/tools/aarch64/ (via rmarkdown) ## quarto 1.7.31 @ /usr/local/bin/quarto ## ## ─ Packages ─────────────────────────────────────────────────────────────────── ## package * version date (UTC) lib source ## blogdown 1.23 2026-01-18 [1] CRAN (R 4.5.2) ## bookdown 0.46 2025-12-05 [1] CRAN (R 4.5.2) ## bslib 0.10.0 2026-01-26 [1] CRAN (R 4.5.2) ## cachem 1.1.0 2024-05-16 [1] CRAN (R 4.5.0) ## cli 3.6.5 2025-04-23 [1] CRAN (R 4.5.0) ## devtools 2.4.6 2025-10-03 [1] CRAN (R 4.5.0) ## digest 0.6.39 2025-11-19 [1] CRAN (R 4.5.2) ## dplyr * 1.2.0 2026-02-03 [1] CRAN (R 4.5.2) ## ellipsis 0.3.2 2021-04-29 [1] CRAN (R 4.5.0) ## evaluate 1.0.5 2025-08-27 [1] CRAN (R 4.5.0) ## farver 2.1.2 2024-05-13 [1] CRAN (R 4.5.0) ## fastmap 1.2.0 2024-05-15 [1] CRAN (R 4.5.0) ## forcats * 1.0.1 2025-09-25 [1] CRAN (R 4.5.0) ## fs 1.6.7 2026-03-06 [1] CRAN (R 4.5.2) ## generics 0.1.4 2025-05-09 [1] CRAN (R 4.5.0) ## ggplot2 * 4.0.2 2026-02-03 [1] CRAN (R 4.5.2) ## glue 1.8.0 2024-09-30 [1] CRAN (R 4.5.0) ## gtable 0.3.6 2024-10-25 [1] CRAN (R 4.5.0) ## hms 1.1.4 2025-10-17 [1] CRAN (R 4.5.0) ## htmltools 0.5.9 2025-12-04 [1] CRAN (R 4.5.2) ## jquerylib 0.1.4 2021-04-26 [1] CRAN (R 4.5.0) ## jsonlite 2.0.0 2025-03-27 [1] CRAN (R 4.5.0) ## knitr 1.51 2025-12-20 [1] CRAN (R 4.5.2) ## labeling 0.4.3 2023-08-29 [1] CRAN (R 4.5.0) ## lattice 0.22-9 2026-02-09 [1] CRAN (R 4.5.3) ## lifecycle 1.0.5 2026-01-08 [1] CRAN (R 4.5.2) ## lubridate * 1.9.5 2026-02-04 [1] CRAN (R 4.5.2) ## magrittr 2.0.4 2025-09-12 [1] CRAN (R 4.5.0) ## Matrix 1.7-4 2025-08-28 [1] CRAN (R 4.5.3) ## memoise 2.0.1 2021-11-26 [1] CRAN (R 4.5.0) ## otel 0.2.0 2025-08-29 [1] CRAN (R 4.5.0) ## pillar 1.11.1 2025-09-17 [1] CRAN (R 4.5.0) ## pkgbuild 1.4.8 2025-05-26 [1] CRAN (R 4.5.0) ## pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 4.5.0) ## pkgload 1.5.0 2026-02-03 [1] CRAN (R 4.5.2) ## png 0.1-9 2026-03-15 [1] CRAN (R 4.5.2) ## purrr * 1.2.1 2026-01-09 [1] CRAN (R 4.5.2) ## R6 2.6.1 2025-02-15 [1] CRAN (R 4.5.0) ## RColorBrewer 1.1-3 2022-04-03 [1] CRAN (R 4.5.0) ## Rcpp 1.1.1 2026-01-10 [1] CRAN (R 4.5.2) ## readr * 2.2.0 2026-02-19 [1] CRAN (R 4.5.2) ## remotes 2.5.0 2024-03-17 [1] CRAN (R 4.5.0) ## reticulate 1.45.0 2026-02-13 [1] CRAN (R 4.5.2) ## rlang 1.1.7 2026-01-09 [1] CRAN (R 4.5.2) ## rmarkdown 2.30 2025-09-28 [1] CRAN (R 4.5.0) ## rstudioapi 0.18.0 2026-01-16 [1] CRAN (R 4.5.2) ## S7 0.2.1 2025-11-14 [1] CRAN (R 4.5.2) ## sass 0.4.10 2025-04-11 [1] CRAN (R 4.5.0) ## scales 1.4.0 2025-04-24 [1] CRAN (R 4.5.0) ## sessioninfo 1.2.3 2025-02-05 [1] CRAN (R 4.5.0) ## stringi 1.8.7 2025-03-27 [1] CRAN (R 4.5.0) ## stringr * 1.6.0 2025-11-04 [1] CRAN (R 4.5.0) ## tibble * 3.3.1 2026-01-11 [1] CRAN (R 4.5.2) ## tidyr * 1.3.2 2025-12-19 [1] CRAN (R 4.5.2) ## tidyselect 1.2.1 2024-03-11 [1] CRAN (R 4.5.0) ## tidyverse * 2.0.0 2023-02-22 [1] CRAN (R 4.5.0) ## timechange 0.4.0 2026-01-29 [1] CRAN (R 4.5.2) ## tzdb 0.5.0 2025-03-15 [1] CRAN (R 4.5.0) ## usethis 3.2.1 2025-09-06 [1] CRAN (R 4.5.0) ## vctrs 0.7.1 2026-01-23 [1] CRAN (R 4.5.2) ## viridisLite 0.4.3 2026-02-04 [1] CRAN (R 4.5.2) ## withr 3.0.2 2024-10-28 [1] CRAN (R 4.5.0) ## xfun 0.56 2026-01-18 [1] CRAN (R 4.5.2) ## yaml 2.3.12 2025-12-10 [1] CRAN (R 4.5.2) ## ## [1] /Library/Frameworks/R.framework/Versions/4.5-arm64/Resources/library ## * ── Packages attached to the search path. ## ## ─ Python configuration ─────────────────────────────────────────────────────── ## python: /Users/jono/.cache/uv/archive-v0/3n3euDImmjsw3EYTJjfeY/bin/python ## libpython: /Users/jono/.local/share/uv/python/cpython-3.12.12-macos-aarch64-none/lib/libpython3.12.dylib ## pythonhome: /Users/jono/.cache/uv/archive-v0/3n3euDImmjsw3EYTJjfeY:/Users/jono/.cache/uv/archive-v0/3n3euDImmjsw3EYTJjfeY ## virtualenv: /Users/jono/.cache/uv/archive-v0/3n3euDImmjsw3EYTJjfeY/bin/activate_this.py ## version: 3.12.12 (main, Oct 28 2025, 11:52:25) [Clang 20.1.4 ] ## numpy: /Users/jono/.cache/uv/archive-v0/3n3euDImmjsw3EYTJjfeY/lib/python3.12/site-packages/numpy ## numpy_version: 2.4.4 ## ## NOTE: Python version was forced by VIRTUAL_ENV ## ## ──────────────────────────────────────────────────────────────────────────────
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
