91
\$\begingroup\$

As you probably know, there is a war going on in Ukraine. I noticed that it seems nobody has posted a Ukrainian flag challenge yet, so I thought I'd do it myself in support of Ukraine.

The Challenge

Here is the flag: Flag of Ukraine

  • The flag is divided horizontally across the middle into two equally sized stripes.
  • Stripe colors: (0, 87, 183) or #0057B7 (blue, top) and (255, 215, 0) or #FFD700 (yellow, bottom).
  • Colors must be exact if possible, otherwise use the closest available blue and yellow.
  • The image can be saved to a file or piped raw to STDOUT in any common image file format, or it can be displayed in a window.
  • The image must be sized at a 3:2 ratio, and at least 78 by 52 pixels.
  • Alternatively, output a block of text at least 78 characters wide made of non-whitespace characters that depicts the flag, using ANSI color codes to color it. (Use standard blue and yellow.)
  • Built-in flag images, flag-drawing libraries, or horrendously upscaling the Ukrainian flag emoji are prohibited.

This is , so shortest code wins!

\$\endgroup\$
16
  • 1
    \$\begingroup\$ If the ANSI color code option is chosen, what aspect ratio should we assume each character has? \$\endgroup\$
    – Nitrodon
    Commented Mar 19, 2022 at 16:38
  • 2
    \$\begingroup\$ @des54321 It must be exact. \$\endgroup\$
    – Ginger
    Commented Mar 19, 2022 at 18:53
  • 8
    \$\begingroup\$ Unless I'm misunderstanding the QBasic answer already posted, I think that answer has inexact colors due to limitations of the language, but it is certainly likely other ancient languages could also have too-limited color-spaces to display the correct colors \$\endgroup\$
    – des54321
    Commented Mar 19, 2022 at 19:42
  • 3
    \$\begingroup\$ Related: codegolf.stackexchange.com/questions/230438/create-a-pride-flag \$\endgroup\$
    – tsh
    Commented Mar 20, 2022 at 5:10
  • 2
    \$\begingroup\$ Just pointing out that the yellow in the image above is #fbd02a and the blue is #1a54b2, as opposed to the #ffd700 and #0057b7 specified in the text. \$\endgroup\$ Commented Mar 21, 2022 at 22:48

84 Answers 84

8
\$\begingroup\$

JavaScript (browser console), 94 bytes

j='height:4em;width:12em;display:block;background:',console.log('%c %c ',j+`#0057B7`,j+`gold`)

96 bytes

console.log('%c %c ',`${j='height:4em;width:12em;display:block;background:'}#0057B7`,`${j}gold`)

This is shorter (85 bytes), but in a bit of a grey area? If you size the console perfectly, the output will be the correct dimensions:

console.log('%c %c ',`${j='display:block;height:6em;background:'}#0057B7`,`${j}gold`)

97 characters

console.log('%c %c ',`${j='height:26px;width:78px;display:block;background:'}#0057B7`,`${j}gold`)

I think this works in most browsers these days?

enter image description here

(Incidentally, I note that the image in the question is not actually the colours described.)

\$\endgroup\$
8
\$\begingroup\$

C (GCC), 78 bytes

main(i){puts("P6\n78 52\n255");for(;i<4057;)printf(i++<2029?"%cW\xb7":"\xff\xd7%c",0);}

Attempt This Online! (code in Base64)

Outputs a PPM image to STDOUT.

\$\endgroup\$
3
  • 1
    \$\begingroup\$ Good answer! For those wondering how to save the image, they can run the compiled binary and redirect the output to a file. For example: /home/user/compiledflag > /home/user.flag.ppm. \$\endgroup\$ Commented Mar 22, 2022 at 15:45
  • 1
    \$\begingroup\$ And for those wondering how to view the image, PPM is a format supported by most *NIX image tools, such as GIMP or the default GNOME Image Viewer (and many other, these are the ones installed on my system). :) \$\endgroup\$
    – matteo_c
    Commented Mar 22, 2022 at 16:13
  • \$\begingroup\$ -7 bytes \$\endgroup\$
    – ceilingcat
    Commented Mar 27, 2022 at 17:46
8
\$\begingroup\$

C (gcc), 126 115 109 bytes

  • -6 thanks to ceilingcat
  • -6 thanks to AZTECCO
  • -3 by using gold which seems to work instead of #FFD700

Produces an XPM image. If there's another indexed colour format that is smaller to produce from C, I'd be very interested!

i;a(c){for(i=2730;i--;putchar(i%91?c:10));}f(){puts("! XPM2\n90 60 2 1\na c #0057B7\nb c gold");a(97);a(98);}

Try it online!

\$\endgroup\$
2
  • \$\begingroup\$ Nice one! Some savings by using only putchar, please check if I didn't broken the dimensions \$\endgroup\$
    – AZTECCO
    Commented Mar 21, 2022 at 21:10
  • \$\begingroup\$ 108 bytes \$\endgroup\$
    – gastropner
    Commented May 4, 2022 at 20:57
8
\$\begingroup\$

Batch, 93 bytes

@for %%i in (44 103)do @for /l %%j in (1,1,12)do @set/p=␛[%%im%PATH:~,80%<nul
@set/p=␛[m<nul

Assumes a default 80×25 screen with a PATH variable of at least 80 characters (this is true on a default Windows 10 installation). The last line is to stop the prompt appearing in yellow which wouldn't be a line of at least 78 non-whitespace characters and would therefore be illegal.

Note that is used to represent the nonprintable `` (good luck copying and pasting that).

\$\endgroup\$
8
\$\begingroup\$

HTML, 73 bytes

<p style=aspect-ratio:3/2;background:linear-gradient(#0057B7+50%,gold+50%

Thanks to @pxeger for pointing out that you can remove the quotes and not close the tag.

\$\endgroup\$
1
  • \$\begingroup\$ -3 bytes with the usual HTML abuse: <p style=aspect-ratio:3/2;background:linear-gradient(#0057B7+50%,gold+50% \$\endgroup\$
    – pxeger
    Commented Mar 22, 2022 at 16:57
8
\$\begingroup\$

Nim + pixie, 139 bytes

import pixie
let
 i=78.newImage 52
 c=i.newContext
i.fill rgb(0,87,183)
c.fillStyle=rgb(255,215,0)
c.fillRect 0,26,78,26
i.writeFile"c.png"

Outputs to the file c.png.

enter image description here

\$\endgroup\$
1
  • \$\begingroup\$ You can replace newImage(78,52) with 78.newImage 52. \$\endgroup\$
    – xigoi
    Commented Mar 17, 2023 at 16:47
7
\$\begingroup\$

Coding, 84 bytes

>p
(width:78px;border-top:26px solid #FFD700;border-bottom:26px solid #0057B7)@style

borrowing from the CSS answer.

\$\endgroup\$
1
7
\$\begingroup\$

PostScript, 191 bytes

Prints the flag starting at 1"x1"; 3"x2" in size. This is my first try at a PostScript submission, so it's probably not the smallest possible.

%!
/i{72 mul}def/c{255 div}def/b{newpath moveto 3 i 0 i rlineto 0 i 1 i rlineto -3 i 0 i rlineto closepath fill}def 0 87 c 183 c setrgbcolor 0 i 1 i b 1 215 c 0 setrgbcolor 0 i 0 i b showpage
\$\endgroup\$
7
\$\begingroup\$

Bash (+ Image Magick) 69 67 64 characters

The following command will output the required file on standard output (as a PNM picture) if Image Magick is installed. Since I had some issues with binary value 0 in both RGB color codes, I replaced it with 1 instead:

convert - -scale 78x52\! -<<<$'P6 1 2 255 \x01W\xb7\xff\xd7\x01'
\$\endgroup\$
2
  • \$\begingroup\$ See Digital Trauma's tip on using here-string to reduce the length. \$\endgroup\$
    – manatwork
    Commented Mar 23, 2022 at 12:17
  • \$\begingroup\$ @manatwork Thank you, done! \$\endgroup\$ Commented Mar 23, 2022 at 13:06
7
\$\begingroup\$

PaperScript, 80 bytes

R=Path.Rectangle
R(1,1,99,33).fillColor="#0057b7"
R(1,34,99,33).fillColor="gold"

Try it here!

\$\endgroup\$
7
\$\begingroup\$

Commodore 64 machine code, 36 33 31 bytes

Code

.C:c000  78          SEI
.C:c001  A9 80       LDA #$80
.C:c003  A0 97       LDY #$97
.C:c005  8D 11 D0    STA $D011
.C:c008  2C 11 D0    BIT $D011
.C:c00b  F0 FB       BEQ $C008
.C:c00d  2C 11 D0    BIT $D011
.C:c010  D0 FB       BNE $C00D
.C:c012  8C 20 D0    STY $D020
.C:c015  CC 12 D0    CPY $D012
.C:c018  D0 FB       BNE $C015
.C:c01a  CE 20 D0    DEC $D020
.C:c01d  D0 E9       BNE $C008
.c01f  
(C:$c01f) g c000

Output

Output

Edit 1: Found a way to reuse the stx$d020 without introducing flickering. Geometry change: +1 raster scan line of blue, -1 of yellow. Tweaked saturation and brightness settings on the virtual CRT to obtain nicer colors.

Edit 2: Got rid of one register and saved two bytes.

Edit 3: Edit 2 reintroduced the overscan flicker, argh! This is fixed now. Geometry change: another extra line of blue at the expense of a line of yellow. Ditched the virtual CRT tweak, this is the output with the external palette called "VICE".

\$\endgroup\$
6
  • \$\begingroup\$ colors look a bit bleached compared to the specification, but I assume that this is the closest a commodore 64 can do? \$\endgroup\$
    – des54321
    Commented Apr 10, 2022 at 20:32
  • \$\begingroup\$ I really hope you have a working commodore 64 to run this on. \$\endgroup\$
    – user108721
    Commented Apr 10, 2022 at 20:33
  • \$\begingroup\$ Yep. The emulator can use custom palettes tho. \$\endgroup\$ Commented Apr 10, 2022 at 20:34
  • \$\begingroup\$ I don't have a working c64, sorry :/ \$\endgroup\$ Commented Apr 10, 2022 at 20:34
  • \$\begingroup\$ fair enough, given how old it is theres a good chance a c64 doesnt even have a well-specified color pallete \$\endgroup\$
    – des54321
    Commented Apr 10, 2022 at 20:38
7
\$\begingroup\$

Processing, 92 Bytes

void setup(){size(78,52);background(#0057B7);}void draw(){fill(#FFD700);rect(0,26,78,26);}

Output

Ukranian Flag

\$\endgroup\$
1
  • 1
    \$\begingroup\$ Welcome to Code Golf, and nice answer! \$\endgroup\$ Commented Jun 26, 2022 at 0:13
7
\$\begingroup\$

C# (.NET), 178 chars

Effective code

var f=new Bitmap(78,52);for(int y=0;y<52;y++)for(int x=0;x<78;x++)if(y>25)f.SetPixel(x,y,Color.FromArgb(255,215,0));else f.SetPixel(x,y,Color.FromArgb(0,87,183));f.Save("f.bmp");

Readable version

using System.Drawing;
namespace UkrainianFlag
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //The effective code could replace the code in this method.

            var blue = Color.FromArgb(0, 87, 183);
            var yellow = Color.FromArgb(255, 215, 0);

            //Create the image holding the flag.
            var flag = new Bitmap(78, 52);

            //Iterate the pixels, row by row.
            for (int y = 0; y < flag.Height; y++)
            {
                for (int x = 0; x < flag.Width; x++)
                {
                    if (y >= flag.Height / 2)
                    {
                        flag.SetPixel(x, y, blue);
                    }
                    else
                    {
                        flag.SetPixel(x, y, yellow);
                    }
                }
            }

            //Store the flag image next to the exe-file.
            flag.Save("flag.bmp");
        }
    }
}

Output

Example file of program output.

\$\endgroup\$
2
  • 3
    \$\begingroup\$ Welcome to Code Golf, and nice answer! \$\endgroup\$ Commented Apr 12, 2022 at 18:18
  • \$\begingroup\$ var f=new Bitmap(78,52);for(int i=0;i<4056;i++)f.SetPixel(i%78,i/78,i>1950?Color.FromArgb(255,215,0):Color.FromArgb(0,87,183));f.Save("f.bmp"); \$\endgroup\$
    – jdt
    Commented Dec 29, 2022 at 15:05
7
\$\begingroup\$

Octave, 55 47 bytes

imagesc([5 5 5;4 4 4],[3,5])
colormap(prism(5))

image

My first time posting in Octave! There might be a way to display without having to use climits, or maybe even without changing the default colormap, but I have not found it yet.

Credits to cnln for the save!

\$\endgroup\$
2
  • 1
    \$\begingroup\$ I don't think you need climits=, as that is inferred from the third input. This saves 8 bytes. See here. \$\endgroup\$
    – cnln
    Commented Apr 17 at 13:34
  • 1
    \$\begingroup\$ Was not expecting anyone to actually care about this post, so appreciate that! \$\endgroup\$
    – south
    Commented Apr 18 at 4:46
6
\$\begingroup\$

Windows PowerShell / PowerShell Core, 50 bytes

Only works in a PowerShell host.

,'blue'*9+,'yellow'*9|%{Write-Host('█'*78)-f $_}

Output (bit outdated because code was edited):

output

I also reposted this code in my GitHub Gist.

Try it online not available, because it cannot render colors (so none of the flag is shown for tio.run).

\$\endgroup\$
2
  • 2
    \$\begingroup\$ Welcome to Code Golf, and nice answer. \$\endgroup\$ Commented Mar 27, 2022 at 19:06
  • 1
    \$\begingroup\$ 50 bytes with non-whitespace characters. ,'blue'*9+,'yellow'*9|%{Write-Host('█'*78)-f $_}. Only works in a PowerShell host. \$\endgroup\$
    – mazzy
    Commented Mar 28, 2022 at 6:36
6
\$\begingroup\$

PostScript, 55 43 bytes

00000000: 3188 0238 5b2e 3030 3288 0030 202d 2e30  1..8[.002..0 -.0
00000010: 3036 8800 325d 2800 57b7 ffd7 2992 a333  06..2](.W...)..3
00000020: 2063 6f6c 6f72 696d 6167 65               colorimage

Tokenized version of:

1 2 8[.002 0 0 -.006 0 2]<0057b7ffd7>stopped 3 colorimage

The original solution without binary tokens was a bit shorter at 55 bytes:

1 2 8[.002 0 0 -.006 0 2]<0057b7ffd7>false 3 colorimage

These all use a stretched a 1x2 bitmap. To view, run through Ghostscript. output

\$\endgroup\$
1
6
\$\begingroup\$

Go, 280 272 269 bytes

import(."image";c"image/color";d"image/draw";p"image/png";."os")
func f(){N,O,a,b:=NewUniform,d.Src,Rect,d.Draw
F:=NewRGBA(a(0,0,78,52))
b(F,a(0,0,78,26),N(c.RGBA{0,87,183,255}),Point{0,0},O)
b(F,a(0,26,78,52),N(c.RGBA{255,215,0,255}),Point{0,26},O)
p.Encode(Stdout,F)}

Attempt This Online!

Apparently Go has a (basic) image processing package in the standard library.

Prints the bytes of a 78-by-52px PNG to STDOUT.

Changelog

  • -12 bytes by @The Thonnu

Explanation

import(."image";c"image/color";d"image/draw";p"image/png";."os")
func f(){                                     // boilerplate
B,Y,N,O:=c.RGBA{0,87,183,255},c.RGBA{255,215,0,255},NewUniform,d.Src
// define some useful variables
// - B and Y are RGBA colors
// - d.Src is how the image will be drawn on: Src replaces the pixels of the image with the source image.
F:=NewRGBA(Rect(0,0,78,52))                   // make a new empty RGBA image
d.Draw(F,Rect(0,0,78,26),N(B),Point{0,0},O)   // draw blue on the top half the image
d.Draw(F,Rect(0,26,78,52),N(Y),Point{0,26},O) // draw yellow on the bottom half of the image
p.Encode(Stdout,F)}                           // encode it as a PNG, and send it to STDOUT
\$\endgroup\$
3
6
\$\begingroup\$

Nibbles, 26.5 bytes (53 nibbles)

"P3 78 52 255 ".\`\~`D256^2028$ FFD7000057B7

Outputs a plain PPM file of 78x52 pixels, depicting the Ukrainian flag using exact colours.

"P3 78 52 255 "         # prepend the string "P3 78 52 255 " onto:
     `D256              # extract data in base 256,
  `\~                   # and divide into 2 chunks,
 \                      # reverse them,
.                       # and map over each
          ^2028$        # repeating it 2028 times. 
FFD7000057B7            # The data.

enter image description here enter image description here

\$\endgroup\$
6
\$\begingroup\$

Pikchr, 52 51 48 bytes

up
box ht.25color-1fill gold
box same fill 22455

Output

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 112.32 76.32">
<path d="M2,74L110,74L110,38L2,38Z" style="fill:rgb(255,215,0);"></path>
<path d="M2,38L110,38L110,2L2,2Z" style="fill:rgb(0,87,183);"></path>
</svg>

Explanation

  • up: The objects will be laid out from bottom to top.
  • box: Draws a box (rectangle).
  • ht .25: The box will be 0.25 inches tall. The default box width is 0.75 inches, which gives us the desired ratio of 3:1.
  • color -1: The box will have no outline.
  • fill gold: The box will be colored using the standard HTML color gold, which happens to be the color of the yellow stripe.
  • box: Draws another box.
  • same: The box will inherit all properties from the previous object.
  • fill 22455: The number is 57B7 in hexadecimal, so the color of the box will be #0057B7.
\$\endgroup\$
6
\$\begingroup\$

Minecraft Function, 58 Bytes

fill 1 1 1 78 26 1 yellow_bed
fill 1 27 1 78 52 1 blue_bed

Creates the Ukrainian flag using blue and yellow beds. Go to the coordinates 0, 0, 0 and it should be visible. I recommend running it in a flat/superflat world with version 1.18 or later.

Image

\$\endgroup\$
6
\$\begingroup\$

Prism v0.2a, 5 bytes

Prism is a small esolang I developed in the last couple of days.

It's not (yet) available as a pre-compiled executable, so you'll have to compile it yourselves to test this program.

Anyway, since 80% of the bytes in this program aren't printable characters, here is a hexdump of the program, made with xxd -g 1:

00000000: c0 aa 58 02 9e                                   ..X..

The program does two things:

  1. It resizes the canvas and the window from the default 256x256 to 256x170;
  2. It draws two horizontal stripes with 4-bit colors 9 and e.

As of version 0.2a, Prism only supports 4-bit colors, and thus I picked the two aforementioned colors as they were the closest available.

You can run this program (or any other Prism program) by using prism draw <filename>.

result

\$\endgroup\$
6
\$\begingroup\$

J + viewmat, 33 bytes

viewrgb 52 78$2028#22455 16766720

image

viewrgb 52 78$2028#22455 16766720
              2028#22455 16766720  NB. repeat color values 26*78 times
        52 78$                     NB. shape that into a matrix
viewrgb                            NB. draw the colors

J, 52 bytes

viewrgb 52 78$22455,&:(2028&$)16766720[load'viewmat'

image

viewrgb 52 78$22455,&:(2028&$)16766720[load'viewmat'
                                       load'viewmat'  : loads the lib into the session
                                      [               : acts as a statement seperator
              22455,&:(2028&$)16766720                : array of color values
                   ,&:(2028&$)                        : append,appose,shape bonded with
                                                      : 2028 as the left arg which
                                                      : invokes shape on the two args
                                                      : individually and invokes append
                                                      : on the results
        52 78$                                        : creates the color matrix
viewrgb                                               : draw the colors
\$\endgroup\$
6
\$\begingroup\$

Actionscript 3, 94 89 bytes

Here comes our national flag in Actionscript and this is my first submission in this language, since my usual languages have been already taken. The code throws an error, but it will compile a SWF anyway. I took the inspiration from an answer to another challenge.

  • spared 5 bytes by replacing hexadecimal 0xe0057B7 for 22455 and 0xeffd700 for 16766720.

var g=graphics,f=g.beginFill,r=g.drawRect;f(22455);r(0,0,99,33); f(16766720);r(0,33,99,33)

Flag 66 x 99 px

Glory to Ukraine!

\$\endgroup\$
2
  • 5
    \$\begingroup\$ Glory to Ukraine indeed! 🇺🇦 \$\endgroup\$ Commented Apr 17 at 11:47
  • 5
    \$\begingroup\$ @The Empty String Photographer the usual response is "Heroiam Slava!" / "Glory to the heroes!" \$\endgroup\$ Commented Apr 17 at 12:06
5
\$\begingroup\$

MSWLogo, I'm assuming 173 167 bytes.

to f :a :b :c :y
setpos(list 0 :y)
setpc(list :a :b :c)
repeat 2[fd 26 rt 90 fd 72 rt 90]
setpos(list 1 :y+1)
setfc(list :a :b :c)
fill
end
f 225 215 0 0 f 0 87 153 26

enter image description here

\$\endgroup\$
2
  • \$\begingroup\$ MSWLego? Didn't know they were doing code golf \$\endgroup\$
    – Ginger
    Commented Mar 21, 2022 at 15:00
  • \$\begingroup\$ @Ginger lol. saw a Scratch answer and I just thought to myself: "Let's do this in Logo" \$\endgroup\$
    – badatgolf
    Commented Mar 22, 2022 at 1:12
5
\$\begingroup\$

SimpleTemplate 0.84, 102 bytes

This answer outputs a flag with 78x52 characters.

{@fori to51}{@forto77}<b{@ifi is lowerthan26} x{@/}>@{@/}<br>{@/}<style>b{color:#0057B7}[x]{color:gold

This code generates 20474 bytes of pure HTML nightmare, but works!


Ungolfed

The golfed code is pretty hard to read, so, here's an ungolfed version.

{@for i from 0 to 51}
    {@for j from 0 to 77}
        {@echo "<b"}
        {@if i is lower than 26}
            {@echo " x"}
        {@/}
        {@echo ">@"}
    {@/}
    {@echo "<br>"}
{@/}
{@echo "<style>b{color:#0057B7}[x]{color:gold"}

This code behaves exactly the same as the golfed version.


Output

This is a nightmare, but, it outputs the following (lightly edited to work as a StackSnippet):

b{color:#0057B7}[x]{color:gold
<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<br><b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<br><b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<br><b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<br><b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<br><b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<br><b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<br><b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<br><b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<br><b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<br><b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<br><b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<br><b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<br><b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<br><b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<br><b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<br><b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<br><b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<br><b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<br><b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<br><b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<br><b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<br><b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<br><b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<br><b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<br><b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<b x>@<br><b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<br><b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<br><b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<br><b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<br><b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<br><b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<br><b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<br><b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<br><b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<br><b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<br><b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<br><b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<br><b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<br><b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<br><b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<br><b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<br><b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<br><b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<br><b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<br><b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<br><b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<br><b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<br><b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<br><b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<br><b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<br><b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<b>@<br>



You can try the code here: https://www.ideone.com/xIjh40

\$\endgroup\$
5
\$\begingroup\$

Node JavaScript 84, 83, 77, 66

83 bytes

f=n=>`\x1b[48;5;${n}m${' '.repeat(78)}\x1b[m
`.repeat(13);console.log(f(33)+f(220))

draws the flag on terminal output, 1 byte saved thanks to @Samathingajig's suggestion to use an inline LF instead of '\n'.

You can try copying and pasting the code after the REPL prompt (brought up by running node in a terminal). Alternatively save the code to file and run it with node filename.

77 bytes

Another 6 bytes saved by replacing each occurence of \x1b (4bytes) with a single ASCII ESC character (1 byte). Due to character set limitations in HTML, you can run the code snippet to see the actual code and length. Save it to file and run with Node to see the flag:

js.value="f=n=>`\x1b[48;5;${n}m${' '.repeat(78)}\x1b[m\n`.repeat(13);console.log(f(33)+f(220))"
console.log("Length=%s", js.value.length);
<textarea id="js" style="width:90%"></textarea>

<!-- Click on Run Code Snippet to see the code-->

  • Run the 77 byte version as a file:

    Raw ANSI color escapes in pasted source appear to be filtered out (sanitized?) before node's REPL prompt echoes or evaluates code, resulting in no flag being drawn.

  • Ansi 8-bit color codes were used because 24 bit codes were not effective in terminals tested.

  • Tested in linux terminal and Windows CMD.exe terminal. GitHub's bash terminal for windows used Cyan and Yellow instead of the colors specified.

  • The 3:2 aspect ratio is approximate and may vary according to the font metrics of the terminal font.

enter image description here


flag.js (66 bytes)

f=h=>`${h[0].repeat(78)}
`.repeat(26)
console.log(f`💙`+f`💛`)
  • Run from file in node and redirect stdout to a text file

      node flag > flag.txt
    
  • Load the text file in a browser with dark mode selected (preferably).

To preview run the following code snippet (it has an additional line to provide a "console.log" functions to mimic writing to stdout), full screen the snippet window and reduce page zoom as required to make the flag fit within the window.

console.log = s=> document.querySelector('code').textContent+=s;

f=h=>`${h[0].repeat(78)}
`.repeat(26)
console.log(f`💙`+f`💛`)
pre, code{height: 100%; width: 100%; background:black}
<pre><code></code></pre>

\$\endgroup\$
4
  • \$\begingroup\$ You can replace \n with the literal newline character to save 1 byte, since template literals allow for multiline strings \$\endgroup\$ Commented Mar 24, 2022 at 0:56
  • \$\begingroup\$ @Samathingamajig Hi - and thanks again. I actually came across that when testing changing \x1b to ESC characters but "fixed" it to go back to \n without realizing it would be valid(LOL). Now at 77 bytes, best... \$\endgroup\$
    – traktor
    Commented Mar 24, 2022 at 1:43
  • \$\begingroup\$ "This now needs to be saved to a file in order to run with Node - the linefeed was not parsed correctly when pasted after the REPL prompt." It works for me when I just paste it. I guess it depends on the terminal/OS (the 83 byte version) \$\endgroup\$ Commented Mar 24, 2022 at 2:05
  • \$\begingroup\$ @Samathingamajig Interesting: I've had it error using CMD.exe terminal but it worked when retested. Ming64 terminal (GitHub"s bash terminal for windows) failed once but worked after a retry. I'd say "results may vary" without being sure if it was me or the computer. Both of these terminals (or REPL code) filter out the ANSI color escape sequences from input when pasting the 77 byte code into the terminal, without echoing the sequences on the command line or using them during evaluation. \$\endgroup\$
    – traktor
    Commented Mar 24, 2022 at 3:26
5
\$\begingroup\$

Dyalog APL,55 byte

(⊂'P3 78 52 255 ',⍕,⍉2028/(3⍴256)⊤22455 16766720)∘⎕NPUT

Write a plain text PPM image to provided filename.

Sample

$ cat out.ppm
P3 78 52 255 0 87 183 0 87 183 0 87 183 0 87 183 0 87 183 0 87 183 0 87
183 0 87 183 0 87 183 0 87 183 0 87 183 0 87 183 0 87 183 0 87 183 0 87
...
183 0 87 183 0 87 183 0 87 183 0 87 183 0 87 183 0 87 183 0 87 183 0 87
183 0 87 183 255 215 0 255 215 0 255 215 0 255 215 0 255 215 0 255 215 0
255 215 0 255 215 0 255 215 0 255 215 0 255 215 0 255 215 0 255 215 0
255 215 0 255 215 0 255 215 0 255 215 0 255 215 0 255 215 0 255 215 0
...

\$\endgroup\$
5
\$\begingroup\$

Haskell, 83 81 69 bytes

My first haskell submission.

This code defines a function that prints the flag to stdout using ansi escape codes.

n?s=[1..n]>>s
putStr$"43">>= \c->13?(78?("\27[4"++c:"m \27[m")++"\n")

enter image description here

\$\endgroup\$
5
\$\begingroup\$

PHP Imagick (209 chars)

Draw and output the image to the browser (Imagick is a native PHP extension).
No line break are needed for execution :

header('Content-Type:image/png');
$d=new\ImagickDraw();
$d->setFillColor('#0057B7');
$d->rectangle(0,0,990,330);
$i=new\Imagick();
$i->newImage(990,660,'#FFD700');
$i->setImageFormat('png');
$i->drawImage($d);
echo$i;

Programming Golf Ukrainian Flag with PHP Imagick

\$\endgroup\$
5
\$\begingroup\$

Python 3, 330 273 bytes

The following piece of code shows the Ukrainian flag in coloured text when executed in the Windows Command Prompt

import sys
from termcolor import *
import os
os.system("")
t=colored("#","blue",attrs=["reverse","blink"])
for x in range(26):
    for x in range(78):
        print(end=t)
    print()
t=colored("#","yellow",attrs=["reverse","blink"])
for x in range(26):
    for x in range(78):
        print(end=t)
    print()

Try It Online is not available, for the reason it wouldn't display the colours.

\$\endgroup\$
2
  • \$\begingroup\$ Can golf this down to 273 bytes by trimming indent whitespace, using an import*, print(end=t) instead of print(t,end=""), and some smarter iterators because you arent using the value x in the for loops \$\endgroup\$
    – des54321
    Commented Mar 25, 2022 at 17:47
  • \$\begingroup\$ When running on linux you can safely remove the os.system("") line \$\endgroup\$
    – mousetail
    Commented Jun 21, 2022 at 10:39

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.