Generative Unicode Art
The piece of art the program will produce can be specifed here:
machine03(4096)
and if it requires a random seed, then the below can be uncommneted, to use the current time as the seed, or a static value can be passed in to create the same piece over and over again.
srand()
Machine 01
Produces pieces like:
┼┴┼┼┼─┴┼┴┬┴┬┴┬┼┼┬┬─┬───┼─┴──┼─┬┼┬┴┬┬┴┼┴┼┬┼┴┼┴┴┼┼─┼┬──┬┼┴──┴──┼┼┼┴┬┴┼┬┬┬─┴┼┼┬┴┬┬┴┬─┴┼┼┴─┼┴┬┼┬┬┼┴┼┴┼┬┼┴─┼┼─┼┬┴┬┴┼┴┴──┴┬┴─┼──┴┼┼┼┬┴┬┴┴─┬──┬─┼─┬─┼─┬──┼┬┬┼┬┼──┬───┴┼┬┼──┼─┼─┼─┼──┼┬──┴┼┼┴┬┬┴┬─┬┼┴┼┬┼┬┬─┬┼┼┼┼┼┬┼┼┬┴─┼┼─┬─┬─┬┴┴──┬─┬┬┼┴┬┬─┴┬┼┴┴┼┴─┴┬┼─┬┴┴┴┬─┬─┴┬┬┬┴─┬┬┬┴┬─┼┬┬┴┬─┴┼┬──┴┬┬┬┴┼┴┴─┼─┼┴─┴┼┼┼┬─┬┴┼┼┼┼─┼┬┴┼┼┼┴┬─┴┼┴┴┼┴┴─┬┬─┬┴┼┬──┴──┴┴┼┼┬┼┼┴┴┴┬┬┴───┬┴┴┴─┴┼┬┴┬┼┴─┼┬┬─┬┴┼┴─┴┬┬┼┴┼─┴─┼┼┴─┼┬─┴┼┬─┴┼──┴┴┬┼───┴┼┬┴─┬┬┬┬┴┴┼┴─┬┬┬┬─┼──┼─┴─┼┴┴┼┴┼┬─┴┼┬┼┴──┬─┬┼┬─┴┴┴─┴┬─┬─┴┴┴┬┴┬┬┼┬┼┬┴┬─┬┼┬┬┬┴┴┬┼┬───┬─┬┬┬──┴┴┬┼─┴┬┼┬┴┼──┬┼┬┼─┴┬┼┬┬┼─┼┬┼┴┬┼┼┼┬┬┼┼┴┼┬┬┼┼┼┴┬┴─┼┼┼┬┴┬┬┬┬─┬─┬┬┼┬─┴┬─┼┴┬┴─┴─┴─┬┬┼┬┴┴┼──┬┬──┬┼┬┴┴┼┼┼┼┼┴┬─┴┼┴┼┼─┴┼┼┼┴┼┼┴┴┬┬┬─┴┴┬┼─┬┼─┴─┬┬┬┬─┬┬──┴─┼┬┼┼┼─┴┴┼┬┼─┴┼┴┼┬┴┴┼─┼┬┬┼─┴──┬───┼───┴┬┼─┬─┴┴┴┴─┼┬──┴┼┼┴┼─┬─┬┬┴┼┬┴─┼┼┬┬┼┴┼┴┼─┬─────┬─┼┼─┼┴┴┬─┬┴┼┼┬┬┬─┴┬┬─┼┴─┬┴┴┬┬┴┴┬┴─┼┴┬─┼┼┬┴┬┬┼┴┴─┬┼┬┬┼┼┬┴┴───┴┴┬┼┬┴──┴┼───┬┬─┼┼─┴┼┼─┬┬┬┼─┼┼─┴─┼─┬┴─┼┼─┼┼┴┬┴┴┬┴┬──┴─┬─┼┬─┬┬┴┼┼──┬┴─┴─┴┴─┬─┴─┼┼┬┼┼──┬─┼─┴┬┬┬┬┴┼┬┼─┼┴┴─┼┴┬┼┼┼┬┬┬┬┬┬┬─┼┬───┼┼┬─┬┴─┼─┴┴─┴
The machine takes the following unicode box characters[1] "─,┴,┬,┼" and just randomly prints them in a long string to the screen. If the "Seed" has not been set, or is specified statically, it will always produce the same piece of art.
function machine01(size, _i, _CHAR) {
_CHAR[0] = "─"
_CHAR[1] = "┴"
_CHAR[2] = "┬"
_CHAR[3] = "┼"
for (_i = 0; _i < size; _i++) {
printf _CHAR[randint(3)]
}
print ""
}
Machine 02
Produces pieces like:
╱╱╲╲╱╲╲╲╲╲╱╲╲╲╱╱╲╲╲╱╱╲╱╱╲╱╲╲╱╲╲╱╲╲╱╱╱╱╲╱╲╱╱╱╲╱╲╱╱╱╲╲╲╱╲╲╲╲╱╲╱╱╱╱╲╱╲╱╱╱╲╱╲╲╲╲╱╱╲╲╲╲╱╲╲╲╱╱╲╲╱╲╲╱╱╱╲╲╲╲╱╱╱╲╱╲╱╱╱╱╲╲╱╱╱╲╲╱╱╲╲╱╱╲╱╲╱╲╱╲╲╲╱╱╲╱╲╱╲╲╲╱╲╲╲╲╱╲╱╲╱╱╲╲╲╱╱╲╱╲╲╱╱╲╱╱╱╱╱╲╱╲╱╲╱╲╲╲╱╲╱╱╱╱╲╲╱╲╲╱╲╱╱╲╱╲╱╱╲╱╲╲╲╱╱╱╲╱╱╱╲╱╱╱╲╱╲╲╱╱╱╲╲╲╲╲╱╲╱╲╱╱╲╲╱╲╱╱╱╱╱╲╲╲╲╱╲╲╱╱╱╱╲╱╱╲╲╱╲╲╱╲╱╲╲╱╲╲╱╲╱╱╱╱╲╱╲╲╱╲╲╱╱╲╲╱╲╱╲╱╱╲╲╱╱╱╲╲╱╲╱╲╱╲╲╱╱╲╱╱╲╲╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╲╱╲╱╱╱╲╱╱╲╲╱╱╱╱╲╲╱╱╱╲╲╲╱╱╲╲╱╲╱╱╱╱╱╱╲╱╱╲╲╱╲╱╲╱╱╱╱╲╲╱╲╱╱╲╲╱╲╲╲╲╱╱╲╱╱╲╲╲╱╱╱╲╱╲╱╱╱╱╱╲╱╲╱╲╱╲╲╲╲╲╲╲╲╲╱╱╱╲╲╱╲╲╱╱╲╱╲╲╱╲╲╲╱╲╱╲╲╱╲╲╲╱╲╱╲╲╱╲╲╱╱╲╱╱╲╲╲╱╲╱╲╲╱╱╱╱╲╱╲╱╱╱╲╲╲╱╲╲╱╱╱╱╲╱╲╲╱╱╲╱╲╲╲╲╲╱╱╲╱╲╲╱╱╲╱╲╲╲╲╲╲╲╱╲╱╲╱╲╲╲╲╲╲╱╱╱╱╲╲╲╱╲╱╱╱╱╱╱╲╲╱╲╲╱╱╱╲╱╲╲╱╲╱╲╲╱╱╱╲╱╱╱╲╱╲╱╲╲╱╲╲╲╱╲╲╲╱╱╱╲╲╲╲╱╱╲╱╱╲╱╲╱╲╱╲╲╲╱╲╱╱╱╲╲╱╱╱╱╲╲╱╱╱╲╱╱╲╲╲╲╱╱╲╱╲╱╲╲╲╱╲╲╲╲╱╱╱╲╱╲╱╲╱╱╲╲╲╱╲╲╲╱╱╱╱╱╲╱╲╱╱╲╱╲╱╲╱╲╱╱╱╲╱╲╲╲╱╲╱╱╲╱╱╲╲╱╱╱╱╲╲╲╲╲╲╱╱╲╲╲╱╱╱╱╲╱╱╲╲╱╲╱╱╱╱╲╲╱╱╱╱╲╲╲╲╲╲╱╱╲╲╱╲╱╲╱╱╲╱╱╱╱╲╲╱╲╲╲╱╲╲╱╲╲╱╲╱╱╱╲╲╱╲╱╱╲╱╲╲╲╲╲╲╱╲╱╱╱╲╱╱╲╲╱╲╲╲╱╲╱╲╱╱╲╲╱╱╱╲╲╲╲╲╲╲╱╲╲╲╲╱╲╲╲╲╱╲╲╱╲╲╲╲╲╲╲╱╲╲╱╲╲╲╱╱╱╲╲╱╱╲╲╲╱╲╲╱╱╲╲╲╱╲╲╱╱╲╱╱╱╲╲╲╱╱╱╲╲╱╲╱╲╲╲╱╱╲╱╲╱╱╲╲╲╱╲╲╱╱╲╱╲
The machine takes the following unicode box characters[1] "╱,╲" and just randomly prints them in a long string to the screen. If the "Seed" has not been set, or is specified statically, it will always produce the same piece of art.
function machine02(size, _i, _CHAR) {
_CHAR[0] = "╱"
_CHAR[1] = "╲"
for (_i = 0; _i < size; _i++) {
printf _CHAR[randint(1)]
}
print ""
}
Machine 03
Produces pieces like:
╭╭╮╰╯╭╭╮╮╯╮╯╰╰╮╮╭╰╮╰╯╯╭╭╭╮╭╮╯╰╰╰╰╭╰╯╭╭╭╯╯╮╮╯╭╯╰╮╯╮╮╭╰╮╮╭╰╯╮╯╯╮╮╯╮╭╭╯╭╮╭╰╯╯╯╰╮╯╭╰╰╯╭╰╭╯╰╰╭╮╮╯╯╯╭╰╰╮╮╭╰╯╰╮╭╯╮╯╭╮╯╰╰╯╯╰╮╮╰╮╰╮╭╮╭╮╭╰╰╯╭╯╭╭╭╮╯╮╰╯╰╮╯╰╭╭╰╮╯╯╰╮╭╭╯╭╯╰╰╮╮╰╭╯╰╭╭╯╯╰╭╯╮╰╮╮╭╮╰╯╭╰╭╭╰╰╭╯╰╭╰╭╭╭╰╭╮╰╯╰╰╰╯╭╯╰╯╯╮╯╮╮╯╯╮╮╮╯╰╭╯╰╮╯╭╮╰╮╭╮╮╭╮╰╮╰╰╭╯╭╯╰╮╭╯╰╯╰╮╯╭╰╯╯╯╯╰╮╰╭╰╭╮╭╭╯╭╰╯╯╭╮╯╯╯╭╮╭╭╯╰╮╯╮╰╮╰╰╰╰╭╯╭╮╰╮╭╰╮╯╮╮╭╭╰╯╮╭╰╮╰╯╰╯╭╰╰╭╰╯╰╰╮╭╮╭╮╮╰╯╭╮╭╮╯╰╰╰╭╯╮╰╮╭╯╮╰╮╮╯╭╮╯╮╯╭╮╰╯╮╯╯╯╯╰╮╯╰╭╯╯╮╯╰╮╭╭╮╯╯╭╯╭╯╭╯╯╯╯╭╰╮╰╯╰╰╰╯╯╭╭╭╯╯╭╭╰╮╮╮╰╮╭╭╭╮╰╯╰╮╰╰╰╯╯╰╯╯╮╮╯╮╯╭╭╯╭╰╰╯╮╰╭╮╭╭╰╰╯╯╮╯╯╭╮╭╰╰╰╭╭╯╯╰╰╯╮╭╯╮╯╰╮╯╮╮╰╭╭╯╰╮╭╯╯╮╰╮╮╯╯╮╮╭╮╭╰╯╭╮╭╰╮╮╯╰╯╮╭╰╰╭╭╭╯╯╮╮╭╯╭╯╭╮╰╮╮╯╭╯╭╭╮╯╯╭╮╭╯╮╭╮╯╮╯╭╰╰╮╭╯╮╰╰╯╯╭╭╮╮╯╮╯╭╭╭╭╮╮╯╰╮╭╮╯╯╯╯╯╰╯╮╮╮╭╰╭╮╭╮╯╯╰╭╯╰╭╰╮╯╯╮╰╰╰╯╯╮╭╮╮╰╯╯╮╯╯╮╭╯╰╰╮╰╰╭╯╭╰╭╯╯╯╯╮╮╭╰╰╮╮╭╭╰╰╮╯╮╰╯╭╰╮╮╯╮╮╮╯╮╮╭╰╰╰╮╮╰╮╭╮╯╮╮╮╭╰╭╮╰╰╮╯╮╰╭╯╭╮╭╮╰╮╮╯╮╯╭╮╭╭╯╯╮╭╭╮╰╮╰╰╭╮╮╮╭╯╭╮╭╮╰╰╯╭╯╭╰╯╮╰╰╰╯╮╰╰╯╰╭╯╯╭╭╭╮╮╯╯╯╯╰╮╯╯╯╭╯╯╰╰╯╯╰╭╰╰╭╯╯╭╮╭╭╮╭╯╯╰╮╮╯╭╰╭╯╯╮╭╭╭╭╰╰╰╭╯╯╭╮╮╭╯╯╮╭╰╭╯╯╮╭╭╮╰╮╭╯╯╭╰╰╮╯╯╭╯╮╰╯╯╮╰╭╰╭╭╯╮╰╭╯╭╮╭╭╰╭╯╯╮╮╮╯╰╭╰╯╮╰╮╰╭╭╭╰╮╮╮╰╭╯╮╭╭╯╭╰╯╰╮╭╭╰╯╭╰╯╯╭╮╰╭╮╭╭╮╯╮╯╮╯╮╰╰╮╮
The machine takes the following unicode box characters[1] "╭,╮,╯,╰" and just randomly prints them in a long string to the screen. If the "Seed" has not been set, or is specified statically, it will always produce the same piece of art.
function machine03(size, _i, _CHAR) {
_CHAR[0] = "╭"
_CHAR[1] = "╮"
_CHAR[2] = "╯"
_CHAR[3] = "╰"
for (_i = 0; _i < size; _i++) {
printf _CHAR[randint(3)]
}
print ""
}
Machine 04
Programmer [aemkei] Tweeted the formula "(x ^ y) % 9" alongside code for more “alien art”. But how can a formula as simple as "(x ^ y) % 9" result in a complex design? The combination of Bitwise XOR (^) and Modulo (%) generate a repeating pattern that’s still complex enough to satisfy the eye[1].
The Program Structure
Header Begin Seed Art End Random Integer Machine 01 Machine 02 Machine 03
The Header
The header is just the bit of the file that tells the shell what to run it with. It goes at the very start of the file.
#!/usr/bin/awk -f
The program
It consists of a BEGIN wrapper around a function (the art function):
BEGIN {
{The art program goes here}
}
Helper functions
The "randint" helper function creates a random number between 0 and n. It will always produce the same set of number unless initialised with a seed using the "srand(x)" function, before running it the first time. If "x" is not supplied it will use the current time.
function randint(n) {
return int((n + 1) * rand())
}