#!/usr/bin/perl -w # Generate characters in a sparsely filled area. use strict; use constant WIDTH => 1024; use constant HEIGHT => 1024; # Convert code point to character sub EncodeChar($) { my ($code) = @_; if( $code <= (1 << 7) - 1 ) { return chr($code); } if( $code <= (1 << (5 + 6)) - 1 ) { return chr(0xc0 | (($code >> 6) & 0x1f)) . chr(0x80 | ($code & 0x3f)); } if( $code <= (1 << (4 + 6 + 6)) - 1 ) { return chr(0xe0 | (($code >> 12) & 0x0f)) . chr(0x80 | (($code >> 6) & 0x3f)) . chr(0x80 | ($code & 0x3f)); } return chr(0xf0 | (($code >> 18) & 0x07)) . chr(0x80 | (($code >> 12) & 0x3f)) . chr(0x80 | (($code >> 6) & 0x3f)) . chr(0x80 | ($code & 0x3f)); } for(my $y = 0; $y < HEIGHT; $y++) { for(my $x = 0; $x < WIDTH - 2;) { if( rand() < 0.01 ) { # Generate a full-width character. # # Select among the fish CJK characters or emojis. if( rand() > 0.5 ) { use constant FISH_START => 0x9b58; use constant FISH_END => 0x9c7b; print EncodeChar(int(rand(FISH_END - FISH_START + 1)) + FISH_START); } else { use constant EMOJI_START => 0x1f600; use constant EMOJI_END => 0x1f635; print EncodeChar(int(rand(EMOJI_END - EMOJI_START + 1)) + EMOJI_START); } $x += 2; } else { # Generate a single space print " "; $x++; } } print "\n"; }