コエンザイムのブログ

ジェネレーティブアートが好きです

Auto Generated Charactersをつくりました

Auto Generated Charactersをつくりました。ジェネレーティブアートです。文字色と文字の背景色を変化させながら、さまざまな国の文字を多数並べました。

opensea.io

以下はソースコードです。開発環境はMacBook Air(M1 2020), macOS Monterey 12.4 、Processing 4.0b8です。

Characters.pde

// Characters
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.List;

final int[] cExclusionCodeList =
{
   0x007F
  ,0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F
  ,0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F
  ,0x00A0,0x00AD
  ,0x034F,0x0378,0x0379,0x0380,0x0381,0x0382,0x0383,0x038B,0x038D,0x03A2,0x0530
  ,0x0557,0x0558,0x0588,0x058B,0x058C,0x0590
  ,0x05C8,0x05C9,0x05CA,0x05CB,0x05CC,0x05CD,0x05CE,0x05CF
  ,0x05EB,0x05EC,0x05ED,0x05EE,0x05EF
  ,0x05F5,0x05F6,0x05F7,0x05F8,0x05F9,0x05FA,0x05FB,0x05FC,0x05FD,0x05FE,0x05FF
  ,0x061C,0x061D,0x070E,0x074B,0x074C
  ,0x07B2,0x07B3,0x07B4,0x07B5,0x07B6,0x07B7,0x07B8,0x07B9,0x07BA,0x07BB
  ,0x07BC,0x07BD,0x07BE,0x07BF
  ,0x07FB,0x07FC,0x082E,0x082F,0x083F,0x085C,0x085D,0x085F
  ,0x0860,0x0861,0x0862,0x0863,0x0864,0x0865,0x0866,0x0867,0x0868,0x0869,0x086A,0x086B,0x086C,0x086D,0x086E,0x086F
  ,0x0870,0x0871,0x0872,0x0873,0x0874,0x0875,0x0876,0x0877,0x0878,0x0879,0x087A,0x087B,0x087C,0x087D,0x087E,0x087F
  ,0x0880,0x0881,0x0882,0x0883,0x0884,0x0885,0x0886,0x0887,0x0888,0x0889,0x088A,0x088B,0x088C,0x088D,0x088E,0x088F
  ,0x0890,0x0891,0x0892,0x0893,0x0894,0x0895,0x0896,0x0897,0x0898,0x0899,0x089A,0x089B,0x089C,0x089D,0x089E,0x089F
  ,0x08B5,0x08BF
  ,0x08C0,0x08C1,0x08C2,0x08C3,0x08C4,0x08C5,0x08C6,0x08C7,0x08C8,0x08C9,0x08CA,0x08CB,0x08CC,0x08CD,0x08CE,0x08CF
  ,0x08D0,0x08D1,0x08D2,0x08D3,0x08D4,0x08DA,0x08DB,0x08DC,0x08DD,0x08DE,0x08DF
  ,0x08E2,0x08FA,0x0984,0x098D,0x098E,0x0991,0x0992,0x09A9
  ,0x09B1,0x09B3,0x09B4,0x09B5,0x09BA,0x09BB
  ,0x09C5,0x09C6,0x09C9,0x09CA,0x09CF
  ,0x09D0,0x09D1,0x09D2,0x09D3,0x09D4,0x09D5,0x09D6,0x09D8,0x09D9,0x09DA,0x09DB,0x09DE
  ,0x09E4,0x09E5
  ,0x09FC,0x09FD,0x09FE,0x09FF
  ,0x0A00,0x0A04,0x0A0B,0x0A0C,0x0A0D,0x0A0E
  ,0x0A11,0x0A12,0x0A29,0x0A31,0x0A34,0x0A37,0x0A3A,0x0A3B,0x0A3D
  ,0x0A43,0x0A44,0x0A45,0x0A46,0x0A49,0x0A4A,0x0A4E,0x0A4F
  ,0x0A50,0x0A52,0x0A53,0x0A54,0x0A55,0x0A56,0x0A57,0x0A58,0x0A5D,0x0A5F
  ,0x0A76,0x0A77,0x0A78,0x0A79,0x0A7A,0x0A7B,0x0A7C,0x0A7D,0x0A7E,0x0A7F
  ,0x0A80,0x0A84,0x0A8E,0x0A92,0x0AA9,0x0AB1,0x0AB4,0x0ABA,0x0ABB
  ,0x0AC6,0x0ACA,0x0ACE,0x0ACF
  ,0x0AD1,0x0AD2,0x0AD3,0x0AD4,0x0AD5,0x0AD6,0x0AD7,0x0AD8,0x0AD9,0x0ADA,0x0ADB,0x0ADC,0x0ADD,0x0ADE,0x0ADF
  ,0x0AE4,0x0AE5
  ,0x0AF2,0x0AF3,0x0AF4,0x0AF5,0x0AF6,0x0AF7,0x0AF8
  ,0x0B00,0x0B04,0x0B0D,0x0B0E,0x0B11,0x0B12,0x0B29
  ,0x0B31,0x0B34,0x0B3A,0x0B3B
  ,0x0B45,0x0B46,0x0B49,0x0B4A,0x0B4E,0x0B4F
  ,0x0B50,0x0B51,0x0B52,0x0B53,0x0B54,0x0B58,0x0B59,0x0B5A,0x0B5B,0x0B5E
  ,0x0B64,0x0B65
  ,0x0B78,0x0B79,0x0B7A,0x0B7B,0x0B7C,0x0B7D,0x0B7E,0x0B7F
  ,0x0B80,0x0B81,0x0B84,0x0B8B,0x0B8C,0x0B8D
  ,0x0B91,0x0B96,0x0B97,0x0B98,0x0B9B,0x0B9D
  ,0x0BA0,0x0BA1,0x0BA2,0x0BA5,0x0BA6,0x0BA7,0x0BAB,0x0BAC,0x0BAD
  ,0x0BBA,0x0BBB,0x0BBC,0x0BBD
  ,0x0BC3,0x0BC4,0x0BC5,0x0BC9,0x0BCE,0x0BCF
  ,0x0BD1,0x0BD2,0x0BD3,0x0BD4,0x0BD5,0x0BD6,0x0BD8,0x0BD9,0x0BDA,0x0BDB,0x0BDC,0x0BDD,0x0BDE,0x0BDF
  ,0x0BE0,0x0BE1,0x0BE2,0x0BE3,0x0BE4,0x0BE5
  ,0x0BFB,0x0BFC,0x0BFD,0x0BFE,0x0BFF
  ,0x0C04,0x0C0D,0x0C11,0x0C29,0x0C3A,0x0C3B,0x0C3C
  ,0x0C45,0x0C49,0x0C4E,0x0C4F
  ,0x0C50,0x0C51,0x0C52,0x0C53,0x0C54,0x0C57,0x0C5B,0x0C5C,0x0C5D,0x0C5E,0x0C5F
  ,0x0C64,0x0C65
  ,0x0C70,0x0C71,0x0C72,0x0C73,0x0C74,0x0C75,0x0C76,0x0C77
  ,0x0C84,0x0C8D,0x0C91,0x0CA9,0x0CB4,0x0CBA,0x0CBB
  ,0x0CC5,0x0CC9,0x0CCE,0x0CCF
  ,0x0CD0,0x0CD1,0x0CD2,0x0CD3,0x0CD4,0x0CD7,0x0CD8,0x0CD9,0x0CDA,0x0CDB,0x0CDC,0x0CDD,0x0CDF
  ,0x0CE4,0x0CE5
  ,0x0CF0,0x0CF3,0x0CF4,0x0CF5,0x0CF6,0x0CF7,0x0CF8,0x0CF9,0x0CFA,0x0CFB,0x0CFC,0x0CFD,0x0CFE,0x0CFF
  ,0x0D00,0x0D04,0x0D0D,0x0D11,0x0D3B,0x0D3C
  ,0x0D45,0x0D49,0x0D4F
  ,0x0D50,0x0D51,0x0D52,0x0D53,0x0D54,0x0D55,0x0D56,0x0D58,0x0D59,0x0D5A,0x0D5B,0x0D5C,0x0D5D,0x0D5E
  ,0x0D64,0x0D65,0x0D76,0x0D77,0x0D78,0x0D80,0x0D81,0x0D84
  ,0x0D97,0x0D98,0x0D99
  ,0x0DB2,0x0DBC,0x0DBE,0x0DBF
  ,0x0DC7,0x0DC8,0x0DC9,0x0DCB,0x0DCC,0x0DCD,0x0DCE
  ,0x0DD5,0x0DD7
  ,0x0DE0,0x0DE1,0x0DE2,0x0DE3,0x0DE4,0x0DE5,0x0DE6,0x0DE7,0x0DE8,0x0DE9,0x0DEA,0x0DEB,0x0DEC,0x0DED,0x0DEE,0x0DEF
  ,0x0DF0,0x0DF1,0x0DF5,0x0DF6,0x0DF7,0x0DF8,0x0DF9,0x0DFA,0x0DFB,0x0DFC,0x0DFD,0x0DFE,0x0DFF
  ,0x0E00,0x0E3B,0x0E3C,0x0E3D,0x0E3E
  ,0x0E5C,0x0E5D,0x0E5E,0x0E5F
  ,0x0E60,0x0E61,0x0E62,0x0E63,0x0E64,0x0E65,0x0E66,0x0E67,0x0E68,0x0E69,0x0E6A,0x0E6B,0x0E6C,0x0E6D,0x0E6E,0x0E6F
  ,0x0E70,0x0E71,0x0E72,0x0E73,0x0E74,0x0E75,0x0E76,0x0E77,0x0E78,0x0E79,0x0E7A,0x0E7B,0x0E7C,0x0E7D,0x0E7E,0x0E7F
  ,0x0E80,0x0E83,0x0E85,0x0E86,0x0E89,0x0E8B,0x0E8C,0x0E8E,0x0E8F
  ,0x0E90,0x0E91,0x0E92,0x0E93,0x0E98
  ,0x0EA0,0x0EA4,0x0EA6,0x0EA8,0x0EA9,0x0EAC
  ,0x0EBA,0x0EBE,0x0EBF,0x0EC5,0x0EC7,0x0ECE,0x0ECF
  ,0x0EDA,0x0EDB,0x0EDE,0x0EDF
  ,0x0EE0,0x0EE1,0x0EE2,0x0EE3,0x0EE4,0x0EE5,0x0EE6,0x0EE7,0x0EE8,0x0EE9,0x0EEA,0x0EEB,0x0EEC,0x0EED,0x0EEE,0x0EEF
  ,0x0EF0,0x0EF1,0x0EF2,0x0EF3,0x0EF4,0x0EF5,0x0EF6,0x0EF7,0x0EF8,0x0EF9,0x0EFA,0x0EFB,0x0EFC,0x0EFD,0x0EFE,0x0EFF
  ,0x0F48,0x0F6D,0x0F6E,0x0F6F,0x0F70
  ,0x0F8C,0x0F8D,0x0F8E,0x0F8F,0x0F98,0x0FBD,0x0FCD
  ,0x0FD9,0x0FDA,0x0FDB,0x0FDC,0x0FDD,0x0FDE,0x0FDF
  ,0x0FE0,0x0FE1,0x0FE2,0x0FE3,0x0FE4,0x0FE5,0x0FE6,0x0FE7,0x0FE8,0x0FE9,0x0FEA,0x0FEB,0x0FEC,0x0FED,0x0FEE,0x0FEF
  ,0x0FF0,0x0FF1,0x0FF2,0x0FF3,0x0FF4,0x0FF5,0x0FF6,0x0FF7,0x0FF8,0x0FF9,0x0FFA,0x0FFB,0x0FFC,0x0FFD,0x0FFE,0x0FFF
  ,0x10C6,0x10C7,0x10C8,0x10C9,0x10CA,0x10CB,0x10CC,0x10CD,0x10CE,0x10CF
  ,0x115A,0x115B,0x115C,0x115D,0x115E
  ,0x11A3,0x11A4,0x11A5,0x11A6,0x11A7
  ,0x11FA,0x11FB,0x11FC,0x11FD,0x11FE,0x11FF
  ,0x1249,0x124E,0x124F,0x1257,0x1259,0x125E,0x125F
  ,0x1289,0x128E,0x128F,0x12B1,0x12B6,0x12B7,0x12BF
  ,0x12C1,0x12C6,0x12C7,0x12D7
  ,0x1311,0x1316,0x1317,0x135B,0x135C,0x137D,0x137E,0x137F
  ,0x139A,0x139B,0x139C,0x139D,0x139E,0x139F
  ,0x13F6,0x13F7,0x13FE,0x13FF,0x1400
  ,0x1677,0x1678,0x1679,0x167A,0x167B,0x167C,0x167D,0x167E,0x167F
  ,0x169D,0x169E,0x169F
  ,0x16F1,0x16F2,0x16F3,0x16F4,0x16F5,0x16F6,0x16F7,0x16F8,0x16F9,0x16FA,0x16FB,0x16FC,0x16FD,0x16FE,0x16FF
  ,0x170D
  ,0x1715,0x1716,0x1717,0x1718,0x1719,0x171A,0x171B,0x171C,0x171D,0x171E,0x171F
  ,0x1737,0x1738,0x1739,0x173A,0x173B,0x173C,0x173D,0x173E,0x173F
  ,0x1754,0x1755,0x1756,0x1757,0x1758,0x1759,0x175A,0x175B,0x175C,0x175D,0x175E,0x175F
  ,0x176D
  ,0x1771,0x1774,0x1775,0x1776,0x1777,0x1778,0x1779,0x177A,0x177B,0x177C,0x177D,0x177E,0x177F
  ,0x17DE,0x17DF
  ,0x17EA,0x17EB,0x17EC,0x17ED,0x17EE,0x17EF
  ,0x17FA,0x17FB,0x17FC,0x17FD,0x17FE,0x17FF
  ,0x180F
  ,0x181A,0x181B,0x181C,0x181D,0x181E,0x181F
  ,0x1878,0x1879,0x187A,0x187B,0x187C,0x187D,0x187E,0x187F
  ,0x18AB,0x18AC,0x18AD,0x18AE,0x18AF
  ,0x18B0,0x18B1,0x18B2,0x18B3,0x18B4,0x18B5,0x18B6,0x18B7,0x18B8,0x18B9,0x18BA,0x18BB,0x18BC,0x18BD,0x18BE,0x18BF
  ,0x18C0,0x18C1,0x18C2,0x18C3,0x18C4,0x18C5,0x18C6,0x18C7,0x18C8,0x18C9,0x18CA,0x18CB,0x18CC,0x18CD,0x18CE,0x18CF
  ,0x18D0,0x18D1,0x18D2,0x18D3,0x18D4,0x18D5,0x18D6,0x18D7,0x18D8,0x18D9,0x18DA,0x18DB,0x18DC,0x18DD,0x18DE,0x18DF
  ,0x18E0,0x18E1,0x18E2,0x18E3,0x18E4,0x18E5,0x18E6,0x18E7,0x18E8,0x18E9,0x18EA,0x18EB,0x18EC,0x18ED,0x18EE,0x18EF
  ,0x18F0,0x18F1,0x18F2,0x18F3,0x18F4,0x18F5,0x18F6,0x18F7,0x18F8,0x18F9,0x18FA,0x18FB,0x18FC,0x18FD,0x18FE,0x18FF
  ,0x191F,0x192C,0x192D,0x192E,0x192F,0x193C,0x193D,0x193E,0x193F
  ,0x1941,0x1942,0x1943,0x196E,0x196F
  ,0x1975,0x1976,0x1977,0x1978,0x1979,0x197A,0x197B,0x197C,0x197D,0x197E,0x197F
  ,0x19AC,0x19AD,0x19AE,0x19AF
  ,0x19CA,0x19CB,0x19CC,0x19CD,0x19CE,0x19CF
  ,0x19DB,0x19DC,0x19DD
  ,0x1A1C,0x1A1D,0x1A5F,0x1A7D,0x1A7E
  ,0x1A8A,0x1A8B,0x1A8C,0x1A8D,0x1A8E,0x1A8F
  ,0x1A9A,0x1A9B,0x1A9C,0x1A9D,0x1A9E,0x1A9F
  ,0x1AAE,0x1AAF
  ,0x1AB0,0x1AB1,0x1AB2,0x1AB3,0x1AB4,0x1AB5,0x1AB6,0x1AB7,0x1AB8,0x1AB9,0x1ABA,0x1ABB,0x1ABC,0x1ABD,0x1ABE,0x1ABF
  ,0x1AC0,0x1AC1,0x1AC2,0x1AC3,0x1AC4,0x1AC5,0x1AC6,0x1AC7,0x1AC8,0x1AC9,0x1ACA,0x1ACB,0x1ACC,0x1ACD,0x1ACE,0x1ACF
  ,0x1AD0,0x1AD1,0x1AD2,0x1AD3,0x1AD4,0x1AD5,0x1AD6,0x1AD7,0x1AD8,0x1AD9,0x1ADA,0x1ADB,0x1ADC,0x1ADD,0x1ADE,0x1ADF
  ,0x1AE0,0x1AE1,0x1AE2,0x1AE3,0x1AE4,0x1AE5,0x1AE6,0x1AE7,0x1AE8,0x1AE9,0x1AEA,0x1AEB,0x1AEC,0x1AED,0x1AEE,0x1AEF
  ,0x1AF0,0x1AF1,0x1AF2,0x1AF3,0x1AF4,0x1AF5,0x1AF6,0x1AF7,0x1AF8,0x1AF9,0x1AFA,0x1AFB,0x1AFC,0x1AFD,0x1AFE,0x1AFF
  ,0x1B4B,0x1B4D,0x1B4E,0x1B4F,0x1B7D,0x1B7E,0x1B7F
  ,0x1BF4,0x1BF5,0x1BF6,0x1BF7,0x1BF8,0x1BF9,0x1BFA,0x1BFB
  ,0x1C38,0x1C39,0x1C3A,0x1C4A,0x1C4B,0x1C4C
  ,0x1C80,0x1C81,0x1C82,0x1C83,0x1C84,0x1C85,0x1C86,0x1C87,0x1C88,0x1C89,0x1C8A,0x1C8B,0x1C8C,0x1C8D,0x1C8E,0x1C8F
  ,0x1CBB,0x1CBC
  ,0x1CC8,0x1CC9,0x1CCA,0x1CCB,0x1CCC,0x1CCD,0x1CCE,0x1CCF
  ,0x1CD1,0x1CD4,0x1CD5,0x1CD6,0x1CD8,0x1CDB,0x1CDE,0x1CDF
  ,0x1CE1,0x1CE2,0x1CE3,0x1CE4,0x1CE5,0x1CE6,0x1CE7,0x1CE8,0x1CE9,0x1CEA,0x1CEB,0x1CEC,0x1CED,0x1CEE,0x1CEF
  ,0x1CF0,0x1CF1,0x1CF6,0x1CF7,0x1CFA,0x1CFB,0x1CFC,0x1CFD,0x1CFE,0x1CFF
  ,0x1DD0,0x1DD1,0x1DD2,0x1DDA
  ,0x1DE7,0x1DE8,0x1DE9,0x1DEA,0x1DEB,0x1DEC,0x1DED,0x1DEE,0x1DEF
  ,0x1DF0,0x1DF1,0x1DF2,0x1DF3,0x1DF4,0x1DF5,0x1DF6,0x1DF7,0x1DF8,0x1DF9,0x1DFA,0x1DFC,0x1DFD
  ,0x1F16,0x1F17,0x1F1E,0x1F1F
  ,0x1F46,0x1F47,0x1F4E,0x1F4F
  ,0x1F58,0x1F5A,0x1F5C,0x1F5E
  ,0x1F7E,0x1F7F,0x1FB5,0x1FC5,0x1FD4,0x1FD5,0x1FDC
  ,0x1FF0,0x1FF1,0x1FF5,0x1FFF
  ,0x2000,0x2001,0x2002,0x2003,0x2004,0x2005,0x2006,0x2007,0x2008,0x2009,0x200A,0x200B,0x200C,0x200D,0x200E,0x200F
  ,0x2028,0x2029,0x202A,0x202B,0x202C,0x202D,0x202E,0x202F
  ,0x205F
  ,0x2060,0x2061,0x2062,0x2063,0x2064,0x2065,0x2066,0x2067,0x2068,0x2069,0x206A,0x206B,0x206C,0x206D,0x206E,0x206F
  ,0x2072,0x2073,0x208F,0x209D,0x209E,0x209F
  ,0x20F1,0x20F2,0x20F3,0x20F4,0x20F5,0x20F6,0x20F7,0x20F8,0x20F9,0x20FA,0x20FB,0x20FC,0x20FD,0x20FE,0x20FF
  ,0x214F
  ,0x2187,0x2188,0x218A,0x218B,0x218C,0x218D,0x218E,0x218F
  ,0x23E8,0x23F4,0x23F5,0x23F6,0x23F7,0x23FF
  ,0x2427,0x2428,0x2429,0x242A,0x242B,0x242C,0x242D,0x242E,0x242F
  ,0x2430,0x2431,0x2432,0x2433,0x2434,0x2435,0x2436,0x2437,0x2438,0x2439,0x243A,0x243B,0x243C,0x243D,0x243E,0x243F
  ,0x244B,0x244C,0x244D,0x244E,0x244F
  ,0x2450,0x2451,0x2452,0x2453,0x2454,0x2455,0x2456,0x2457,0x2458,0x2459,0x245A,0x245B,0x245C,0x245D,0x245E,0x245F
  ,0x269D,0x269E,0x269F
  ,0x26B3,0x26B4,0x26B5,0x26B6,0x26B7,0x26B8,0x26B9,0x26BA,0x26BB,0x26BC,0x26BF
  ,0x26C0,0x26C1,0x26C2,0x26C3,0x26C6,0x26C7,0x26C9,0x26CA,0x26CC,0x26CD
  ,0x26D0,0x26D2,0x26D5,0x26D6,0x26D7,0x26D8,0x26D9,0x26DA,0x26DB,0x26DC,0x26DD,0x26DE,0x26DF
  ,0x26E0,0x26E1,0x26E3,0x26E4,0x26E5,0x26E6,0x26E7,0x26E8,0x26EB,0x26EC,0x26ED,0x26EE,0x26EF
  ,0x26F6,0x26FB,0x26FC,0x26FE,0x26FF
  ,0x2700,0x275F,0x2760,0x27CE,0x27CF
  ,0x2B4D,0x2B4E,0x2B4F
  ,0x2B56,0x2B57,0x2B59,0x2B5A,0x2B5B,0x2B5C,0x2B5D,0x2B5E,0x2B5F
  ,0x2B66,0x2B67,0x2B68,0x2B69,0x2B6A,0x2B6B,0x2B6C,0x2B6D,0x2B6E,0x2B6F
  ,0x2B70,0x2B71,0x2B72,0x2B73,0x2B74,0x2B75,0x2B76,0x2B77,0x2B78,0x2B79,0x2B7A,0x2B7B,0x2B7C,0x2B7D,0x2B7E,0x2B7F
  ,0x2B80,0x2B81,0x2B84,0x2B85,0x2B86,0x2B87,0x2B88,0x2B89,0x2B8A,0x2B8B,0x2B8C,0x2B8D,0x2B8E,0x2B8F
  ,0x2B92,0x2B93,0x2B94,0x2B96,0x2B97,0x2B98,0x2B99,0x2B9A,0x2B9B,0x2B9C,0x2B9D,0x2B9E,0x2B9F
  ,0x2BA0,0x2BA1,0x2BA2,0x2BA3,0x2BA4,0x2BA5,0x2BA6,0x2BA7,0x2BA8,0x2BA9,0x2BAA,0x2BAB,0x2BAC,0x2BAD,0x2BAE,0x2BAF
  ,0x2BB0,0x2BB1,0x2BB2,0x2BB3,0x2BB4,0x2BB5,0x2BB6,0x2BB7,0x2BB8,0x2BB9,0x2BBA,0x2BBB,0x2BBC,0x2BBD,0x2BBE,0x2BBF
  ,0x2BC0,0x2BC1,0x2BC2,0x2BC3,0x2BC4,0x2BC5,0x2BC6,0x2BC7,0x2BC8,0x2BC9,0x2BCA,0x2BCB,0x2BCC,0x2BCD,0x2BCE,0x2BCF
  ,0x2BD0,0x2BD1,0x2BD2,0x2BD3,0x2BD4,0x2BD5,0x2BD6,0x2BD7,0x2BD8,0x2BD9,0x2BDA,0x2BDB,0x2BDC,0x2BDD,0x2BDE,0x2BDF
  ,0x2BE0,0x2BE1,0x2BE2,0x2BE3,0x2BE4,0x2BE5,0x2BE6,0x2BE7,0x2BE8,0x2BE9,0x2BEA,0x2BEB,0x2BEC,0x2BED,0x2BEE,0x2BEF
  ,0x2BF0,0x2BF1,0x2BF2,0x2BF3,0x2BF4,0x2BF5,0x2BF6,0x2BF7,0x2BF8,0x2BF9,0x2BFA,0x2BFB,0x2BFC,0x2BFD,0x2BFE,0x2BFF
  ,0x2C2F,0x2C5F
  ,0x2CF4,0x2CF5,0x2CF6,0x2CF7,0x2CF8
  ,0x2D00,0x2D01,0x2D02,0x2D03,0x2D04,0x2D05,0x2D06,0x2D07,0x2D08,0x2D09,0x2D0A,0x2D0B,0x2D0C,0x2D0D,0x2D0E,0x2D0F
  ,0x2D10,0x2D11,0x2D12,0x2D13,0x2D14,0x2D15,0x2D16,0x2D17,0x2D18,0x2D19,0x2D1A,0x2D1B,0x2D1C,0x2D1D,0x2D1E,0x2D1F
  ,0x2D20,0x2D21,0x2D22,0x2D23,0x2D24,0x2D25,0x2D26,0x2D27,0x2D28,0x2D29,0x2D2A,0x2D2B,0x2D2C,0x2D2D,0x2D2E,0x2D2F
  ,0x2D68,0x2D69,0x2D6A,0x2D6B,0x2D6C,0x2D6D,0x2D6E
  ,0x2D71,0x2D72,0x2D73,0x2D74,0x2D75,0x2D76,0x2D77,0x2D78,0x2D79,0x2D7A,0x2D7B,0x2D7C,0x2D7D,0x2D7E
  ,0x2D97,0x2D98,0x2D99,0x2D9A,0x2D9B,0x2D9C,0x2D9D,0x2D9E,0x2D9F
  ,0x2DA7,0x2DAF,0x2DB7,0x2DBF,0x2DC7,0x2DCF,0x2DD7,0x2DDF
  ,0x2E19
  ,0x2E32,0x2E33,0x2E34,0x2E35,0x2E36,0x2E37,0x2E38,0x2E39,0x2E3C,0x2E3D,0x2E3E,0x2E3F
  ,0x2E42,0x2E43,0x2E44,0x2E45,0x2E46,0x2E47,0x2E48,0x2E49,0x2E4A,0x2E4B,0x2E4C,0x2E4D,0x2E4E,0x2E4F
  ,0x2E50,0x2E51,0x2E52,0x2E53,0x2E54,0x2E55,0x2E56,0x2E57,0x2E58,0x2E59,0x2E5A,0x2E5B,0x2E5C,0x2E5D,0x2E5E,0x2E5F
  ,0x2E60,0x2E61,0x2E62,0x2E63,0x2E64,0x2E65,0x2E66,0x2E67,0x2E68,0x2E69,0x2E6A,0x2E6B,0x2E6C,0x2E6D,0x2E6E,0x2E6F
  ,0x2E70,0x2E71,0x2E72,0x2E73,0x2E74,0x2E75,0x2E76,0x2E77,0x2E78,0x2E79,0x2E7A,0x2E7B,0x2E7C,0x2E7D,0x2E7E,0x2E7F
  ,0x2E9A
  ,0x2EF4,0x2EF5,0x2EF6,0x2EF7,0x2EF8,0x2EF9,0x2EFA,0x2EFB,0x2EFC,0x2EFD,0x2EFE,0x2EFF
  ,0x2FD6,0x2FD7,0x2FD8,0x2FD9,0x2FDA,0x2FDB,0x2FDC,0x2FDD,0x2FDE,0x2FDF
  ,0x2FE0,0x2FE1,0x2FE2,0x2FE3,0x2FE4,0x2FE5,0x2FE6,0x2FE7,0x2FE8,0x2FE9,0x2FEA,0x2FEB,0x2FEC,0x2FED,0x2FEE,0x2FEF
  ,0x2FFC,0x2FFD,0x2FFE,0x2FFF
  ,0x3040,0x3097,0x3098,0x3100,0x3101,0x3102,0x3103,0x3104
  ,0x312D,0x312E,0x312F,0x3130,0x318F
  ,0x31B8,0x31B9,0x31BA,0x31BB,0x31BC,0x31BD,0x31BE,0x31BF
  ,0x31D0,0x31D1,0x31D2,0x31D3,0x31D4,0x31D5,0x31D6,0x31D7,0x31D8,0x31D9,0x31DA,0x31DB,0x31DC,0x31DD,0x31DE,0x31DF
  ,0x31E0,0x31E1,0x31E2,0x31E3,0x31E4,0x31E5,0x31E6,0x31E7,0x31E8,0x31E9,0x31EA,0x31EB,0x31EC,0x31ED,0x31EE,0x31EF
  ,0x321D,0x321E,0x321F,0x3250
  ,0x327C,0x327D,0x327E
  ,0x32CC,0x32CD,0x32CE,0x32CF
  ,0x3377,0x3378,0x3379,0x337A
  ,0x33DE,0x33DF,0x33FF
  ,1376
  ,1442,1466,1477,1478,1479,1541
  ,2656,2657,2658,2659,2660,2661
  ,2810,2811,2812,2813,2814,2815,2901
  ,3329,3423
  ,4371,4372,4373,4374,4375,4376,4377,4378,4379
  ,4380,4381,4382,4383,4384,4385,4386,4387,4388,4389
  ,4390,4391,4392,4393,4394,4395,4396,4397,4398,4399
  ,4400,4401,4402,4403,4404,4405,4406,4407,4408,4409
  ,4410,4411,4412,4413,4414,4415,4416,4417,4418,4419
  ,4420,4421,4422,4423,4424,4425,4426,4427,4428,4429
  ,4430,4431,4432,4433,4434,4435,4436,4437,4438,4439
  ,4440,4441
  ,4470,4471,4472,4473,4474,4475,4476,4477,4478,4479
  ,4480,4481,4482,4483,4484,4485,4486,4487,4488,4489
  ,4490,4491,4492,4493,4494,4495,4496,4497,4498,4499
  ,4500,4501,4502,4503,4504,4505,4506,4507,4508,4509
  ,4511,4512,4513
  ,4547,4548,4549
  ,4550,4551,4552,4553,4554,4555,4556,4557,4558,4559
  ,4560,4561,4562,4563,4564,4565,4566,4567,4568,4569
  ,4570,4571,4572,4573,4574,4575,4576,4577,4578,4579
  ,4580,4581,4582,4583,4584,4585,4586,4587,4588,4589
  ,4590,4591,4592,4593,4594,4595,4596,4597,4598,4599
  ,4600,4601
  ,6988
  ,8384,8385,8386,8387,8388,8389,8390,8391,8392,8393,8394,8395,8396,8397,8398,8399
  ,8418
  ,12288,12644
};

final boolean cSAVE_FLG = false;
final int cSAVE_NUM = 10;
final int cSTART_NUM = 0;
final int cDIGIT_NUM = 2;

//// For Profile image size
//final int cMyWidth = 350;
//final int cMyHeight = 350;
//final String cFILE_NAME = "Characters_Profile_";

//// For Profile Banner image size
//final int cMyWidth = 1400;
//final int cMyHeight = 400;
//final String cFILE_NAME = "Characters_Profile_Banner_";

//// For Logo image size
//final int cMyWidth = 350;
//final int cMyHeight = 350;
//final String cFILE_NAME = "Characters_Logo_";

//// For Featured image size
//final int cMyWidth = 600;
//final int cMyHeight = 400;
//final String cFILE_NAME = "Characters_Featured_";

//// For Banner image size
//final int cMyWidth = 1400;
//final int cMyHeight = 400;
//final String cFILE_NAME = "Characters_Banner_";

// For HD
final int cMyWidth = 1280;
final int cMyHeight = 720;
final String cFILE_NAME = "Characters_";

//// For Full HD
//final int cMyWidth = 1920;
//final int cMyHeight = 1080;
//final String cFILE_NAME = "Characters_";

final boolean cLOOP_FLG = true;
final float cFRAME_RATE = 0.3;

void settings() {
  size(cMyWidth, cMyHeight);
}

void setup()
{
  noStroke();
  if (cSAVE_FLG)
  {
    noLoop();
  }
  else if (cLOOP_FLG)
  {
    frameRate(cFRAME_RATE);
  }
  else
  {
    noLoop();
  }
}

void draw()
{
  int loopMax = 1;
  
  if (cSAVE_FLG)
  {
    loopMax = cSAVE_NUM;
  }

  for (int i = 0; i < loopMax; i++)
  {
    myDraw();
    if (cSAVE_FLG)
    {
      LocalDateTime utcDateTime = LocalDateTime.now(ZoneId.of("UTC"));
      DateTimeFormatter dateFrmt = DateTimeFormatter.ofPattern("uuuuMMdd");
      DateTimeFormatter timeFrmt = DateTimeFormatter.ofPattern("HHmmss,SSSSSS");
      String dateStr = dateFrmt.format(utcDateTime);
      String timeStr = timeFrmt.format(utcDateTime);
      save(cFILE_NAME + "#" + nf(cSTART_NUM + i, cDIGIT_NUM)
        + "_" + dateStr + "T" + timeStr + "Z" + ".png");
    }
  }
}

void myDraw()
{
  PFont font = createFont("HiraginoSans-W4", 48);
  int[] codePoints = new int[1];
  float cellSize = 80;
  int startX = int(cellSize / 2 - (int(width) % int(cellSize)) / 2);
  int startY = int(cellSize / 2 - (int(height) % int(cellSize)) / 2);
  float h;

  colorMode(HSB, 360, 100, 100);
  h = random(360);
  rectMode(CENTER);
  textFont(font);
  textAlign(CENTER, CENTER);
  
  for (int y = startY; y <= height; y += cellSize)
  {
    for (int x = startX; x <= width; x += cellSize)
    {
      fill(h, 9, 100 * (1.0 - random(1.0) * random(1.0) * random(1.0)));
      rect(x, y, cellSize, cellSize);
    }
  }

  float d;
  int rnd;
  for (int y = startY; y <= height; y += cellSize)
  {
    for (int x = startX; x <= width; x += cellSize)
    {
      codePoints[0] = getCode();
      String str = new String(codePoints, 0, codePoints.length);
      rnd = int(random(10));
      if (rnd <= 1)
      {
        d = 240;
      }
      else if (rnd <= 3)
      {
        d = 120;
      }
      else
      {
        d = 180;
      }
      fill((h + d) % 360, random(96, 100), random(67, 77));
      text(str, x, y);
    }
  }
}

int getCode()
{
  int c = int(random(0x0021, 0x33FF));

  if (Arrays.stream(cExclusionCodeList).anyMatch(i -> i == c))
  {
    return getCode();
  }

  return c;
}