Rainbow: Difference between revisions

From Rosetta Code
Content added Content deleted
(Added Go)
(Added a Dart example.)
 
(14 intermediate revisions by 10 users not shown)
Line 2: Line 2:


;Task: Print out the word 'RAINBOW' to the screen with every character being a different color of the rainbow.
;Task: Print out the word 'RAINBOW' to the screen with every character being a different color of the rainbow.

=={{header|Arturo}}==

<syntaxhighlight lang="arturo">loop [
#red "R"
#orange "A"
#yellow "I"
#green "N"
#blue "B"
#indigo "O"
#violet "W"
] [c l] -> prints color c l</syntaxhighlight>


=={{header|BASIC}}==
=={{header|BASIC}}==
Line 30: Line 42:


==={{header|FreeBASIC}}===
==={{header|FreeBASIC}}===
[[File:RAINBOWFB.png|right]]
<syntaxhighlight lang="vb">Dim As Integer colors(6, 2) => { _
<syntaxhighlight lang="vb">Dim As Integer colors(6, 2) => { _
{255, 0, 0}, _ ' red
{255, 0, 0}, _ ' red
Line 42: Line 55:
Dim As String s = "RAINBOW"
Dim As String s = "RAINBOW"
For i As Byte = 1 To Len(s)
For i As Byte = 1 To Len(s)
Color Rgb(i,i,i)
Color Rgb(colors(i,2),colors(i,2),colors(i,2))
Print Mid(s, i, 1);
Print Mid(s, i, 1);
Next i
Next i
Line 95: Line 108:
<div style="background-color:#F6F6F6;padding:1em;">
<div style="background-color:#F6F6F6;padding:1em;">
<font color="#FF0000">R</font><font color="#FF8000">A</font><font color="#FFFF00">I</font><font color="#00FF00">N</font><font color="#0000FF">B</font><font color="#4B0082">O</font><font color="#8000FF">W</font><br></div>
<font color="#FF0000">R</font><font color="#FF8000">A</font><font color="#FFFF00">I</font><font color="#00FF00">N</font><font color="#0000FF">B</font><font color="#4B0082">O</font><font color="#8000FF">W</font><br></div>

=={{header|Dart}}==
<syntaxhighlight lang="Dart">
import 'dart:io';

void main() {
const rainbow = 'RAINBOW';
const spectrum = [
[255, 0, 0], // red
[255, 165, 0], // orange
[255, 255, 0], // yellow
[0, 128, 0], // green
[0, 0, 255], // blue
[75, 0, 130], // indigo
[238, 130, 238], // violet
];

for (int i = 0; i < rainbow.length; i++) {
final red = spectrum[i][0];
final green = spectrum[i][1];
final blue = spectrum[i][2];
stdout.write('\x1B[38;2;${red};${green};${blue}m${rainbow[i]}\x1B[0m');
}
}
</syntaxhighlight>

=={{header|Factor}}==
<syntaxhighlight lang="factor">USING: colors grouping hashtables io.styles qw sequences ui
ui.gadgets.panes ;

"RAINBOW" 1 group
qw{ red orange yellow green blue indigo violet } [
[ named-color foreground associate format ] 2each
] make-pane "Rainbow" open-window</syntaxhighlight>
{{out}}
[[File:Factor rainbow.png|center|thumb]]


=={{header|Go}}==
=={{header|Go}}==
Line 123: Line 172:
As C example.
As C example.
</pre>
</pre>
=={{header|HTML}}==
<syntaxhighlight lang="HTML>
<!DOCTYPE html>
<html>
<head>
<title>Text in Multiple Colors (No Spaces)</title>
</head>
<body>
<p>
<span style="color: red">R</span><span style="color: orange">A</span><span style="color: yellow">I</span><span style="color: green">N</span><span style="color: blue">B</span><span style="color: indigo">O</span><span style="color: violet">W</span>
</p>
</body>
</html>
</syntaxhighlight>
=={{header|jq}}==
The following assumes the terminal supports the ANSI RGB codes,
and has been tested using iTerm2.
<syntaxhighlight lang="jq">
def colors: [
[255, 0, 0], # red
[255, 128, 0], # orange
[255, 255, 0], # yellow
[ 0, 255, 0], # green
[ 0, 0, 255], # blue
[ 75, 0, 130], # indigo
[128, 0, 255] # violet
];

def rainbow($s):
# ;38 is the extended foreground color code
# ;2 indicates RGB digits follow
def e: "\u001B"; # ESCAPE
reduce range(0; $s|length) as $j ("";
($j % 7) as $i
| . + "\(e)[38;2;\(colors[$i][0]);\(colors[$i][1]);\(colors[$i][2])m\($s[$i:$i+1])" )
+ "\(e)[0m";

rainbow("RAINBOW")
</syntaxhighlight>
Invocation: jq -nr -f rainbow.jq


=={{header|Julia}}==
=={{header|Julia}}==
Line 134: Line 223:
</syntaxhighlight>
</syntaxhighlight>
[[File:Rainbow.png|center|thumb]]
[[File:Rainbow.png|center|thumb]]

=={{header|Perl}}==
<syntaxhighlight lang="perl">#!/usr/bin/perl

use strict; # https://rosettacode.org/wiki/Rainbow
use warnings;
use List::AllUtils qw( zip_by );

print zip_by { "\e[38;2;$_[1]m$_[0]\e[m" } [ split //, 'RAINBOW' ],
[qw( 255;0;0 255;128;0 255;255;0 0;255;0 0;0;255 75;0;130 128;0;255 )];
print "\n";</syntaxhighlight>

=={{header|Phix}}==
{{libheader|Phix/xpGUI}}
<!--<syntaxhighlight lang="phix">(phixonline)-->
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
<span style="color: #7060A8;">requires</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"1.0.3"</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">include</span> <span style="color: #000000;">xpGUI</span><span style="color: #0000FF;">.</span><span style="color: #000000;">e</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">rainbow</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{{{</span><span style="color: #008000;">"R"</span><span style="color: #0000FF;">,</span><span style="color: #004600;">XPG_RED</span><span style="color: #0000FF;">},</span>
<span style="color: #0000FF;">{</span><span style="color: #008000;">"A"</span><span style="color: #0000FF;">,</span><span style="color: #004600;">XPG_ORANGE</span><span style="color: #0000FF;">},</span>
<span style="color: #0000FF;">{</span><span style="color: #008000;">"I"</span><span style="color: #0000FF;">,</span><span style="color: #004600;">XPG_YELLOW</span><span style="color: #0000FF;">},</span>
<span style="color: #0000FF;">{</span><span style="color: #008000;">"N"</span><span style="color: #0000FF;">,</span><span style="color: #004600;">XPG_GREEN</span><span style="color: #0000FF;">},</span>
<span style="color: #0000FF;">{</span><span style="color: #008000;">"B"</span><span style="color: #0000FF;">,</span><span style="color: #004600;">XPG_BLUE</span><span style="color: #0000FF;">},</span>
<span style="color: #0000FF;">{</span><span style="color: #008000;">"O"</span><span style="color: #0000FF;">,</span><span style="color: #004600;">XPG_INDIGO</span><span style="color: #0000FF;">},</span>
<span style="color: #0000FF;">{</span><span style="color: #008000;">"W"</span><span style="color: #0000FF;">,</span><span style="color: #004600;">XPG_PURPLE</span><span style="color: #0000FF;">}}}</span>
<span style="color: #004080;">gdx</span> <span style="color: #000000;">list</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">gList</span><span style="color: #0000FF;">(</span><span style="color: #000000;">rainbow</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"SIZE=240x24"</span><span style="color: #0000FF;">),</span>
<span style="color: #000000;">dialog</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">gDialog</span><span style="color: #0000FF;">(</span><span style="color: #000000;">list</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Rainbow"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">`SIZE=240x62`</span><span style="color: #0000FF;">)</span>
<span style="color: #7060A8;">gCanvasSetBackground</span><span style="color: #0000FF;">(</span><span style="color: #000000;">list</span><span style="color: #0000FF;">,</span><span style="color: #004600;">XPG_LIGHT_GREY</span><span style="color: #0000FF;">)</span>
<span style="color: #7060A8;">gShow</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dialog</span><span style="color: #0000FF;">)</span>
<span style="color: #7060A8;">gMainLoop</span><span style="color: #0000FF;">()</span>
<!--</syntaxhighlight>-->
{{out}}
[[File:Phix_Rainbow.png|center|thumb]]


=={{header|Python}}==
=={{header|Python}}==
Line 155: Line 279:
use Color::Names::X11 :colors;
use Color::Names::X11 :colors;


for 'Rainbow',
for 'RAINBOW',
'Another phrase that happens to contain the word "Rainbow".'
'Another phrase that happens to contain the word "Rainbow".'
-> $rainbow-text {
-> $rainbow-text {
Line 166: Line 290:
{{out}}
{{out}}
Displayed here as HTML as ANSI colors don't show up on web interfaces.
Displayed here as HTML as ANSI colors don't show up on web interfaces.
<div style="background-color:#f6f6f6;padding:1em;"><font color="#FF0000">R</font><font color="#FFA500">a</font><font color="#FFFF00">i</font><font color="#00FF00">n</font><font color="#0000FF">b</font><font color="#4B0082">o</font><font color="#EE82EE">w</font><br>
<div style="background-color:black;padding:1em;font-size:150%;"><font color="#FF0000">R</font><font color="#FFA500">A</font><font color="#FFFF00">I</font><font color="#00FF00">N</font><font color="#0000FF">B</font><font color="#4B0082">O</font><font color="#EE82EE">W</font><br>
<font color="#FF0000">A</font><font color="#FFA500">n</font><font color="#FFFF00">o</font><font color="#00FF00">t</font><font color="#0000FF">h</font><font color="#4B0082">e</font><font color="#EE82EE">r</font><font color="#FF0000"> </font><font color="#FFA500">p</font><font color="#FFFF00">h</font><font color="#00FF00">r</font><font color="#0000FF">a</font><font color="#4B0082">s</font><font color="#EE82EE">e</font><font color="#FF0000"> </font><font color="#FFA500">t</font><font color="#FFFF00">h</font><font color="#00FF00">a</font><font color="#0000FF">t</font><font color="#4B0082"> </font><font color="#EE82EE">h</font><font color="#FF0000">a</font><font color="#FFA500">p</font><font color="#FFFF00">p</font><font color="#00FF00">e</font><font color="#0000FF">n</font><font color="#4B0082">s</font><font color="#EE82EE"> </font><font color="#FF0000">t</font><font color="#FFA500">o</font><font color="#FFFF00"> </font><font color="#00FF00">c</font><font color="#0000FF">o</font><font color="#4B0082">n</font><font color="#EE82EE">t</font><font color="#FF0000">a</font><font color="#FFA500">i</font><font color="#FFFF00">n</font><font color="#00FF00"> </font><font color="#0000FF">t</font><font color="#4B0082">h</font><font color="#EE82EE">e</font><font color="#FF0000"> </font><font color="#FFA500">w</font><font color="#FFFF00">o</font><font color="#00FF00">r</font><font color="#0000FF">d</font><font color="#4B0082"> </font><font color="#EE82EE">&quot;</font><font color="#FF0000">R</font><font color="#FFA500">a</font><font color="#FFFF00">i</font><font color="#00FF00">n</font><font color="#0000FF">b</font><font color="#4B0082">o</font><font color="#EE82EE">w</font><font color="#FF0000">&quot;</font><font color="#FFA500">.</font></div>
<font color="#FF0000">A</font><font color="#FFA500">n</font><font color="#FFFF00">o</font><font color="#00FF00">t</font><font color="#0000FF">h</font><font color="#4B0082">e</font><font color="#EE82EE">r</font><font color="#FF0000"> </font><font color="#FFA500">p</font><font color="#FFFF00">h</font><font color="#00FF00">r</font><font color="#0000FF">a</font><font color="#4B0082">s</font><font color="#EE82EE">e</font><font color="#FF0000"> </font><font color="#FFA500">t</font><font color="#FFFF00">h</font><font color="#00FF00">a</font><font color="#0000FF">t</font><font color="#4B0082"> </font><font color="#EE82EE">h</font><font color="#FF0000">a</font><font color="#FFA500">p</font><font color="#FFFF00">p</font><font color="#00FF00">e</font><font color="#0000FF">n</font><font color="#4B0082">s</font><font color="#EE82EE"> </font><font color="#FF0000">t</font><font color="#FFA500">o</font><font color="#FFFF00"> </font><font color="#00FF00">c</font><font color="#0000FF">o</font><font color="#4B0082">n</font><font color="#EE82EE">t</font><font color="#FF0000">a</font><font color="#FFA500">i</font><font color="#FFFF00">n</font><font color="#00FF00"> </font><font color="#0000FF">t</font><font color="#4B0082">h</font><font color="#EE82EE">e</font><font color="#FF0000"> </font><font color="#FFA500">w</font><font color="#FFFF00">o</font><font color="#00FF00">r</font><font color="#0000FF">d</font><font color="#4B0082"> </font><font color="#EE82EE">&quot;</font><font color="#FF0000">R</font><font color="#FFA500">a</font><font color="#FFFF00">i</font><font color="#00FF00">n</font><font color="#0000FF">b</font><font color="#4B0082">o</font><font color="#EE82EE">w</font><font color="#FF0000">&quot;</font><font color="#FFA500">.</font></div>


=={{header|Wren}}==
=={{header|Wren}}==
<syntaxhighlight lang="ecmascript">var colors = [
<syntaxhighlight lang="wren">var colors = [
[255, 0, 0], // red
[255, 0, 0], // red
[255, 128, 0], // orange
[255, 128, 0], // orange
Line 190: Line 314:
<div style="background-color:#F6F6F6;padding:1em;">
<div style="background-color:#F6F6F6;padding:1em;">
<font color="#FF0000">R</font><font color="#FF8000">A</font><font color="#FFFF00">I</font><font color="#00FF00">N</font><font color="#0000FF">B</font><font color="#4B0082">O</font><font color="#8000FF">W</font><br></div>
<font color="#FF0000">R</font><font color="#FF8000">A</font><font color="#FFFF00">I</font><font color="#00FF00">N</font><font color="#0000FF">B</font><font color="#4B0082">O</font><font color="#8000FF">W</font><br></div>

=={{header|X86 Assembly}}==
{{trans|XPL0}}
Twenty-six byte executable program. Output is same as XPL0.
Assemble with: tasm; tlink /t
<syntaxhighlight>
0000 .model tiny
0000 .code
org 100h
;MS-DOS loads .com files with registers set this way:
; ax=0, bx=0, cx=00FFh, dx=cs, si=0100h, di=-2, bp=09xx, sp=-2, es=ds=cs=ss
;The direction flag (d) is clear (incrementing).
0100 52 41 49 4E 42 4F 57 start: db "RAINBOW" ;executed as code shown below
;push dx inc cx dec cx DEC SI inc dx dec di push di
0107 B0 13 mov al, 13h ;call BIOS to set graphic mode 13h (ah=0)
0109 CD 10 int 10h ; 320x200 with 256 colors
010B B3 1E mov bl, 32-2 ;base of rainbow colors
010D B1 08 mov cl, 1+7 ;number of characters to display + null in PSP
010F B4 0E mov ah, 0Eh ;write character in teletype mode
0111 AC rb10: lodsb ;fetch char to write: al:= ds:[si++]
0112 CD 10 int 10h
0114 43 inc bx ;next color
0115 43 inc bx
0116 E2 F9 loop rb10 ;loop for all 1+7 characters (cx--)
0118 EB FE jmp $ ;lock up
end start
</syntaxhighlight>


=={{header|XPL0}}==
=={{header|XPL0}}==

Latest revision as of 16:23, 20 March 2024

Rainbow is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.
Task
Print out the word 'RAINBOW' to the screen with every character being a different color of the rainbow.

Arturo

loop [
    #red "R"
    #orange "A"
    #yellow "I"
    #green "N"
    #blue "B"
    #indigo "O"
    #violet "W"
] [c l] -> prints color c l

BASIC

BASIC256

dim colors$(6)
colors$ = {red, orange, yellow, green, blue, darkblue, cyan}

clg
s$ = "RAINBOW"
for i = 1 to length(s$)
	color colors$[i-1]
	text i*8,150, mid(s$,i,1)
next i

Chipmunk Basic

Works with: Chipmunk Basic version 3.6.4
100 graphics 0
110 dim colors(6,6,6)
120 data 255,0,0,255,128,0,255,255,0,0,255,0,0,0,255,75,0,130,128,0,255
130 s$ = "RAINBOW"
140 for i = 1 to 7
150   read a,b,c
160   graphics color a,b,c
170   graphics moveto i*10,10
180   graphics text mid$(s$,i,1);
190 next i
200 end

FreeBASIC

Dim As Integer colors(6, 2) => { _
{255,   0,   0}, _ ' red
{255, 128,   0}, _ ' orange
{255, 255,   0}, _ ' yellow
{  0, 255,   0}, _ ' green
{  0,   0, 255}, _ ' blue
{75,    0, 130}, _ ' indigo
{128,   0, 255}} _ ' violet

Cls
Dim As String s = "RAINBOW"
For i As Byte = 1 To Len(s)
    Color Rgb(colors(i,2),colors(i,2),colors(i,2))
    Print Mid(s, i, 1);
Next i

Sleep

GW-BASIC

Works with: PC-BASIC version any
Works with: QBasic
10 CLS
20 DATA 4,6,14,2,1,11,13
30 S$ = "RAINBOW"
40 FOR I = 1 TO 7
50 READ C
60   COLOR C
70   PRINT MID$(S$, I, 1);
80 NEXT I
90 END

True BASIC

CLEAR
DATA 4, 6, 14, 2, 1, 11, 13
LET s$ = "RAINBOW"
FOR i = 1 to 7
    READ c
    SET COLOR c
    PRINT (s$)[i:i+1-1];
NEXT i
END

C

#include <stdio.h>

int main() {
    int i, clrs[7][3] = {
        {255,   0,   0}, // red
        {255, 128,   0}, // orange
        {255, 255,   0}, // yellow
        {  0, 255,   0}, // green
        {  0,   0, 255}, // blue
        { 75,   0, 130}, // indigo
        {128,   0, 255}, // violet
    };
    const char *s = "RAINBOW";
    for (i = 0; i < 7; ++i) {
        printf("\x1B[38;2;%d;%d;%dm%c", clrs[i][0], clrs[i][1], clrs[i][2], s[i]);
    }
    printf("\n");
    return 0;
}
Output:
RAINBOW

Dart

import 'dart:io';

void main() {
  const rainbow = 'RAINBOW';
  const spectrum = [
    [255, 0, 0], // red
    [255, 165, 0], // orange
    [255, 255, 0], // yellow
    [0, 128, 0], // green
    [0, 0, 255], // blue
    [75, 0, 130], // indigo
    [238, 130, 238], // violet
  ];

  for (int i = 0; i < rainbow.length; i++) {
    final red = spectrum[i][0];
    final green = spectrum[i][1];
    final blue = spectrum[i][2];
    stdout.write('\x1B[38;2;${red};${green};${blue}m${rainbow[i]}\x1B[0m');
  }
}

Factor

USING: colors grouping hashtables io.styles qw sequences ui
ui.gadgets.panes ;

"RAINBOW" 1 group
qw{ red orange yellow green blue indigo violet } [
    [ named-color foreground associate format ] 2each
] make-pane "Rainbow" open-window
Output:

Go

Translation of: C
package main

import "fmt"

func main() {
    clrs := [7][3]int{
        {255, 0, 0},   // red
        {255, 128, 0}, // orange
        {255, 255, 0}, // yellow
        {0, 255, 0},   // green
        {0, 0, 255},   // blue
        {75, 0, 130},  // indigo
        {128, 0, 255}, // violet
    }
    s := "RAINBOW"
    for i := 0; i < 7; i++ {
        fmt.Printf("\x1B[38;2;%d;%d;%dm%c", clrs[i][0], clrs[i][1], clrs[i][2], s[i])
    }
    fmt.Println()
}
Output:
As C example.

HTML

<!DOCTYPE html>
<html>
<head>
    <title>Text in Multiple Colors (No Spaces)</title>
</head>
<body>
    <p>
        <span style="color: red">R</span><span style="color: orange">A</span><span style="color: yellow">I</span><span style="color: green">N</span><span style="color: blue">B</span><span style="color: indigo">O</span><span style="color: violet">W</span>
    </p>
</body>
</html>

jq

The following assumes the terminal supports the ANSI RGB codes, and has been tested using iTerm2.

def colors: [
    [255,   0,   0],  # red
    [255, 128,   0],  # orange
    [255, 255,   0],  # yellow
    [  0, 255,   0],  # green
    [  0,   0, 255],  # blue
    [ 75,   0, 130],  # indigo
    [128,   0, 255]   # violet
  ];

def rainbow($s):
    # ;38 is the extended foreground color code 
    # ;2 indicates RGB digits follow
    def e: "\u001B";  # ESCAPE
    reduce range(0; $s|length) as $j ("";
      ($j % 7) as $i
      | . + "\(e)[38;2;\(colors[$i][0]);\(colors[$i][1]);\(colors[$i][2])m\($s[$i:$i+1])" )
    + "\(e)[0m";

rainbow("RAINBOW")

Invocation: jq -nr -f rainbow.jq

Julia

using Crayons

for (letter, color) in [("R", crayon"red"), ("A", crayon"ff7f00"),
                        ("I", crayon"yellow"), ("N", crayon"green"),
                        ("B", crayon"blue"), ("O", crayon"4b0082"), ("W", crayon"7f00ff")]
    print(color, letter, " ");
end

Perl

#!/usr/bin/perl

use strict; # https://rosettacode.org/wiki/Rainbow
use warnings;
use List::AllUtils qw( zip_by );

print zip_by { "\e[38;2;$_[1]m$_[0]\e[m" } [ split //, 'RAINBOW' ],
  [qw( 255;0;0 255;128;0 255;255;0 0;255;0 0;0;255 75;0;130 128;0;255 )];
print "\n";

Phix

Library: Phix/xpGUI
with javascript_semantics
requires("1.0.3")
include xpGUI.e

constant rainbow = {{{"R",XPG_RED},
                     {"A",XPG_ORANGE},
                     {"I",XPG_YELLOW},
                     {"N",XPG_GREEN},
                     {"B",XPG_BLUE},
                     {"O",XPG_INDIGO},
                     {"W",XPG_PURPLE}}}

gdx list = gList(rainbow,"SIZE=240x24"),
    dialog = gDialog(list,"Rainbow",`SIZE=240x62`)
gCanvasSetBackground(list,XPG_LIGHT_GREY)
gShow(dialog)
gMainLoop()
Output:

Python

Colored

from colored import Fore, Style
red: str = f'{Fore.rgb(255, 0, 0)}'
orange: str = f'{Fore.rgb(255, 128, 0)}'
yellow: str = f'{Fore.rgb(255, 255, 0)}'
green: str = f'{Fore.rgb(0, 255, 0)}'
blue: str = f'{Fore.rgb(0, 0, 255)}'
indigo: str = f'{Fore.rgb(75, 0, 130)}'
violet: str = f'{Fore.rgb(128, 0, 255)}'
print(f'{red}R{Style.reset}' + f'{orange}A{Style.reset}' + f'{yellow}I{Style.reset}' + f'{green}N{Style.reset}' + f'{blue}B{Style.reset}' + f'{indigo}O{Style.reset}' + f'{violet}W{Style.reset}')
Output:

RAINBOW

Raku

use Color::Names:api<2>;
use Color::Names::X11 :colors;

for 'RAINBOW',
    'Another phrase that happens to contain the word "Rainbow".'
  -> $rainbow-text {
    for $rainbow-text.comb Z, flat(<red orange yellow green blue indigo violet> xx *) -> ($l, $c) {
        print "\e[38;2;{COLORS{"{$c}-X11"}<rgb>.join(';')}m$l\e[0"
    }
    say '';
}
Output:

Displayed here as HTML as ANSI colors don't show up on web interfaces.

RAINBOW
Another phrase that happens to contain the word "Rainbow".

Wren

var colors = [
    [255,   0,   0], // red
    [255, 128,   0], // orange
    [255, 255,   0], // yellow
    [  0, 255,   0], // green
    [  0,   0, 255], // blue
    [ 75,   0, 130], // indigo
    [128,   0, 255]  // violet
]

var s = "RAINBOW"
for (i in 0..6) {
    var fore = "\e[38;2;%(colors[i][0]);%(colors[i][1]);%(colors[i][2])m"
    System.write("%(fore)%(s[i])")
}
System.print()
Output:
RAINBOW

X86 Assembly

Translation of: XPL0

Twenty-six byte executable program. Output is same as XPL0. Assemble with: tasm; tlink /t

0000                                 .model  tiny
0000                                 .code
                                     org     100h
                             ;MS-DOS loads .com files with registers set this way:
                             ; ax=0, bx=0, cx=00FFh, dx=cs, si=0100h, di=-2, bp=09xx, sp=-2, es=ds=cs=ss
                             ;The direction flag (d) is clear (incrementing).
0100  52 41 49 4E 42 4F 57   start:  db      "RAINBOW"       ;executed as code shown below
                             ;push dx    inc cx    dec cx    DEC SI    inc dx    dec di    push di
0107  B0 13                          mov     al, 13h         ;call BIOS to set graphic mode 13h (ah=0)
0109  CD 10                          int     10h             ; 320x200 with 256 colors
010B  B3 1E                          mov     bl, 32-2        ;base of rainbow colors
010D  B1 08                          mov     cl, 1+7         ;number of characters to display + null in PSP
010F  B4 0E                          mov     ah, 0Eh         ;write character in teletype mode
0111  AC                     rb10:   lodsb                   ;fetch char to write: al:= ds:[si++]
0112  CD 10                          int     10h
0114  43                             inc     bx              ;next color
0115  43                             inc     bx
0116  E2 F9                          loop    rb10            ;loop for all 1+7 characters (cx--)
0118  EB FE                          jmp     $               ;lock up
                                     end     start

XPL0

The Raspberry Pi versions of the language require a graphic mode for colored text (unlike the MS-DOS versions), but they compensate by supporting this unusual string indexing (which only works with the interpreted MS-DOS version).

char I;
[SetVid($13);                   \set 320x200x8 VGA graphics
for I:= 0 to 6 do
        [Attrib(32+I+I);        \set color attribute
        ChOut(6, I("RAINBOW "));
        ];
]