[HN Gopher] Truchet Tiles
___________________________________________________________________
Truchet Tiles
Author : downboots
Score : 109 points
Date : 2025-07-25 22:53 UTC (4 days ago)
(HTM) web link (en.wikipedia.org)
(TXT) w3m dump (en.wikipedia.org)
| onion2k wrote:
| Truchet tiling is a staple of the shader community -
| https://www.shadertoy.com/results?query=Truchet
|
| A particularly nice example -
| https://www.shadertoy.com/view/4td3zj
|
| And a nice '3D' one - https://www.shadertoy.com/view/4lSBzm
| drewnoakes wrote:
| They also come up a lot in pen plotter art.
| JKCalhoun wrote:
| Like the hexagonal one.
| joshu wrote:
| some truchet tiles i did for a plotter a million years ago:
|
| hex:
|
| https://www.instagram.com/p/B2TRmM7p1BB
|
| https://www.instagram.com/p/B2Q130pJwum
|
| rectangular:
|
| https://www.instagram.com/p/BxUMO05p3Cx
|
| https://www.instagram.com/p/BxO1H3cJ57V
| gilleain wrote:
| Nice.
|
| It's a shame that regular octagons do not tile the plane.
| Octagons + squares might work I suppose.
| johanvts wrote:
| You can use the monotile! See my links below.
| gilleain wrote:
| Ah perfect! I went away at lunch and tried to work it out,
| including for the spectre tile (monotile), although I took
| a different approach.
| pavel_lishin wrote:
| Man, I've tried writing my own version of things like this, but
| it ended up looking like pubes on paper.
| joshu wrote:
| 10 PRINT CHR$(205.5+RND(1)); : GOTO 10
| WantonQuantum wrote:
| I used to do this on my VIC-20 a million years ago. Just
| looking at this line brought back the visual image like it was
| yesterday.
| teddyh wrote:
| python3 -c 'import random, time, itertools;
| any(time.sleep(0.01) or print(random.choice("\u2571\u2572"),
| end="", flush=True) for x in itertools.repeat(None))'
| binaryturtle wrote:
| https://github.com/the-real-
| tokai/macuahuitl/blob/master/tem...
|
| (how about this fancy version with SVG output? :D No longer a
| single line though.)
| o11c wrote:
| Quite a few bytes can be golfed out of that still:
| python3 -c 'while I := __import__: I("time").sleep(0.01);
| print(I("random").choice("\u2571\u2572"), end="", flush=1)'
|
| My reasoning including most failures:
|
| Whitespace is _mostly_ trivial and not worth mentioning,
| except that the space between "or" and "print" can be
| eliminated by moving the `time.sleep` to before a string
| literal. Alternatively, using `!=` works almost anywhere
| (though not with some alternative ideas), or `;` with the
| `while` version.
|
| There are several shorter ways to get an infinite loop:
| itertools.repeat(None) # for reference
| itertools.repeat(0) itertools.count()
| iter(lambda: 0, 1) # also removes the import, so 10 chars
| shorter iter(''.upper, 1) # same length when spaces
| removed, shorter if not removed iter(int.mro, 1) #
| spooky, but one char shorter still range(9**99) # much
| longer than the age of the universe range(9**9) # 44
| days # but it turns out we can skip it entirely
|
| The loop itself: any(expr for x in it) #
| theoretically prevents the memory leak [expr for x in
| it] # wastes 800 bytes per sec, 69 MB/day, 1 GB per 14 days
| while 1: expr # breaks one-liner unless longer
| `__import__("")` is used, but worth it since it eliminates
| the entire iterable, even before doing I=__import__
| while I := __import__: # 2 chars shorter than doing the
| assignment inside the loop
|
| I looked into alternatives to calling sleep at all, but
| computers are too fast (and variable in speed) nowadays.
| `os.sync` looked promising but is only slow the first time.
| Trying to pass its return value as an argument also failed.
|
| `flush=1` is shorter than `flush=True`. Otherwise ... I tried
| `sys.stdout` but hardly anything was even close:
| any(time.sleep(0.01) or print(random.choice("\u2571\u2572"),
| end="", flush=True) for it) any(time.sleep(0.01) or
| print(random.choice("\u2571\u2572"), end="", flush=1) for it)
| sys.stdout.writelines(time.sleep(0.1) or
| random.choice("\u2571\u2572")+"\0"*8191 for it) # can avoid
| the flush by filling the buffer manually, but requires
| several more chars to import sys as well
|
| Random: random.choice("\u2571\u2572") #
| UTF-8 b"\xe2\x95\xb1" doesn't seem useful
| chr(9585+random.randrange(2)) # sigh
| chr(9585+(random.random()<.5)) # nope
| chr(9585+(os.getrandom(1)[0]&1)) # + has tigher precedence
| than & # that last would save 1 byte with normal
| `import` (since the identifier is repeated), but loses with
| `__import__` # is there a way to eliminate parens? Is
| >> or | or - useful? What about *splat?
| pan69 wrote:
| 8-Bit Show and Tell recently did a video about Truchet Tiles on
| PETSCII. Fun watch:
|
| https://www.youtube.com/watch?v=MVQJykMJSH0
| Jgoauh wrote:
| not sure why this is on top of the feed but i appreciate it ! Is
| there a website where you can draw on the truchet tiles live ?
| would be cool
| johanvts wrote:
| Not exactly what you are requesting, but I added truchet
| patterns to a monotile renderer a while back. See here
| https://www.johansivertsen.com/post/monotile/ The drawing tool
| is here: https://www.johansivertsen.com/customhatviz/app.html
| Press 'build supertiles' a few times and enable the truchet
| overlay.
| calvinmorrison wrote:
| did anyone have wooden truchet tiles of various colors as a kid
| that you would place on a board and flip them around to make
| various designs
| ItCouldBeWorse wrote:
| These are also good to avoid tiling textures having a
| https://en.wikipedia.org/wiki/Moir%C3%A9_pattern. Just do a
| randomized labyrinth per square and voila.
| qiine wrote:
| oh! moire and the double slit experiment are related things,
| TIL
| nedbat wrote:
| Using multi-level Carlson Truchet tiles for half-toning images:
| https://nedbatchelder.com/blog/202208/truchet_images.html
| onychomys wrote:
| We have this card-tiling game based on this idea.
|
| https://www.ravensburger.us/en-US/products/games/thinkfun/iz...
|
| It's not a great game, but it's fun enough. The box is small, so
| we keep it around even if we don't play it much.
| coldcode wrote:
| I use a lot of truchet tiles in my art (https://andrewwulf.com),
| but I color them afterwards, which seems fairly uncommon (article
| from last year, https://thecodist.com/my-art-and-color-after-
| tiling/) outside of shaders. I focus on 2d art for print. I also
| use various combinations of 1x1, 1x2, 2x2, 3x3 and 4x4 tiles,
| sometimes all in one work.
| nojs wrote:
| Reminds me of this, created by one of the tailwind guys:
| https://heropatterns.com/
|
| These are really useful for subtle background patterns on footers
| etc.
| WillieMacBride wrote:
| "Scramble Squares" is a card-tiling puzzle which looks like a
| specialized form of Truchet Tiling.
|
| https://scramblesquares.com
|
| There are 9 square (non-identical) tiles in a set. Each edge of
| each tile displays half of a two-sided symbol (eg cats, dogs,
| flags, etc.). Goal is to arrange the tiles in a 3x3 grid so that
| all touching edges match with corresponding symbol halves.
|
| Looks simple at first, but a real challenge.
|
| Size of the entire solution space is 9! * 4^9 (billions), and
| brute-force solvers have been written in Python:
|
| https://github.com/roadfoodr/scramble-squares-solver
|
| What are the combinatorial rule(s) used to construct these tiles
| ?? Some clues:
| https://www.reddit.com/r/puzzles/comments/1e09up6/help_how_t...
|
| Kathie Gavin (designer of Scramble Squares) says the design was
| inspired by "ancient Egyptian tile patterns" she saw in a museum.
| Does anyone know more about this?
| frankus wrote:
| I need some of these mathematical tiles to be available as
| physical ceramic tiles for nerdy backsplashes and bathrooms.
| o11c wrote:
| Wow, Wikipedia is pretty minimal in giving examples. Clicking
| through various links in comments for more examples should be
| considered mandatory (though many of the 3D ones are actually
| "some effect on top of Truchet").
|
| I suppose I don't normally think about how you're actually using
| minimal Truchet tiles when you play one of SGT's puzzle games,
| since it's the most boring tileset:
|
| https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/slan...
| calvinmorrison wrote:
| https://thewoodenwagon.com/woodentoy/CAF3064.html
___________________________________________________________________
(page generated 2025-07-29 23:01 UTC)