画法国国旗


106

已经有许多发布的其他标志的挑战,但没有一个是国旗法国这周似乎是合适的时间。

以尽可能少的字节产生此标志:

法国国旗

  • 图片的比例必须为3:2,且尺寸至少应为78像素宽和52像素高。
  • 每个条纹占据宽度的三分之一。
  • 条纹的颜色从左至右分别为RGB: ,(0, 85, 164),。(255, 255, 255)(239, 65, 53)
  • 可以将图像以任何常见的图像文件格式保存到文件中,或通过原始方式通过管道传输到STDOUT,或者可以显示它。
  • 或者,使用ANSI颜色代码为标志输出一个至少由78个字符宽的文本块,该文本块由非空白字符组成,用于描述该标志。(使用标准的蓝色,白色和红色。)
  • 不允许内置标志图像/库。

以字节为单位的最短代码获胜。

排行榜

这篇文章底部的堆栈摘录从答案a)生成排行榜,答案是每种语言的最短解决方案列表,b)则是总体排行榜。

为确保您的答案显示出来,请使用以下Markdown模板以标题开头。

## Language Name, N bytes

N您提交的文件大小在哪里。如果您提高了分数,则可以将旧分数保留在标题中,方法是将它们打掉。例如:

## Ruby, <s>104</s> <s>101</s> 96 bytes

如果您想在标头中包含多个数字(例如,因为您的分数是两个文件的总和,或者您想单独列出解释器标志罚分),请确保实际分数是标头中的最后一个数字:

## Perl, 43 + 2 (-p flag) = 45 bytes

您还可以将语言名称设置为链接,然后该链接将显示在代码段中:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes


4
这些RGB值与您的图像不匹配。从我所看到的,你有RGB: ,(0, 35, 149),。(255, 255, 255) (237, 41, 57)
烧杯

8
在大多数语言中,紧凑地存储指定的调色板可能是此问题中最棘手的部分。鉴于此,图形解决方案允许使用标准调色板输出ANSI似乎相当不公平。为什么不允许图形解决方案使用纯(0,0,255)/(255,255,255)/(255,0 0)来平衡比赛环境?
JohnE

15
每个条纹占据宽度的三分之一。 使用海军变体可能会更有趣: 根据1853年5月17日的一条规定,海军重新使用了30:33:37的比例,现在该比例继续使用,因为旗帜的挥舞使部分距离吊索似乎较小。
本杰克逊

34
echo 🇫🇷还不够大
Digital Trauma 2015年

5
@JohnE我同意。颜色规则为ASCII艺术解决方案提供了巨大的优势。对于使用任意颜色的语言,以及取消几种不能进行任意颜色的酷语言的资格,它们也不再给“挑战”带来更多挑战(仅增加了字节数)。
意大利面条

Answers:


38

CJam,23 22字节

00000000: 27 9b 22 5c 22 25 1f 22 66 7b 69 27 6d 32 37 2a  '."\"%."f{i'm27*
00000010: 7d 4e 5d 32 36 2a                                }N]26*

上面是一个十六进制转储,可以使用反转xxd -r

以额外的两个字节(总共24个字节)为代价,我们可以改用背景色,从而使输出更漂亮。

00000000: 27 9b 22 2c 2f 29 00 22 66 7b 69 27 6d 53 32 36  '.",/)."f{i'mS26
00000010: 2a 7d 57 4e 74 32 36 2a                          *}WNt26*

这个怎么运作

在这两个方案中,我们使用ANSI转义序列\x9bXYm-这里X3为前景色和4背景色,并Y指定使用的颜色-向国旗的三种颜色之间切换。

'<CSI>       Push the '\x9b' character (Control Sequence Introducer).
"\"%<US>"    Push the string of the ISO 8859-1 characters with code
             points 34, 37, and 31.
f{           For each character in the string, push the CSI and that
             character; then:
  i            Cast the character to integer.
  'm27*        Push 27 m's. The first completes the control sequence,
               the remaining 26 will be printed.
}
N]           Wrap the generated array and "\n" in an array.
26*          Repeat it 26 times.

其他程序与此类似。

输出量

输出


我目前不确定我应该把“图像”做成多高。
丹尼斯

我的回答是78x30。Lucida Console 9 pt(xterm的默认字体)中的这些尺寸最接近3:2。
Mego

您可以对“美感”使用完整的方块
Matthew Roh

75

纯重打击(在OSX上),84

默认的OSX终端支持全彩表情符号。不知道这算作文本还是图形输出。

printf -vs %26s
for i in {1..26}
do echo ${s// /🔵}${s// /⚪️}${s// /🔴}
done

输出如下:

在此处输入图片说明


或者:

使用OSX实用程序的Bash,56

yes `dc -e3do26^d1-dn2/*p|tr 201 🔵🔴⚪️`|sed 26q

dc表达式:

  • 计算3^26-1并打印出三元22222222222222222222222222
  • 将其除以2,然后乘以3^26。三元输出是1111111111111111111111111100000000000000000000000000

tr然后将210个字符转换为🔵⚪️🔴。 yes无限期输出此行。 sed 26q停止26行输出。


51
支持表情符号的终端。哇。
rr-

6
第一种解决方案既没有使用正确的RGB值,也没有使用标准的ANSI颜色,是吗?
门把手

@Doorknob您当然是正确的-两种解决方案都没有-因此此答案可能会超出限制。 我问过OP澄清
数字创伤

3
这只是Unicode。
地下

1
@steve我并不是真的希望这个答案如此流行,特别是考虑到它的有效性存在疑问。您是否可以认为是有效的,是或否?谢谢!
Digital Trauma 2015年

51

Desmos,30个12字节

3x>10
3x<-10

在线尝试。

我不确定这是否有效,请问是否有任何问题。


3
@CᴏɴᴏʀO'Bʀɪᴇɴ默认颜色为红色和蓝色(我相信),因此无需设置它们。
意大利面条

7
@CᴏɴᴏʀO'Bʀɪᴇɴ然后这是一个随机标志生成器;)
DanTheMan 2015年

3
@CᴏɴᴏʀO'Bʀɪᴇɴ对我​​来说,它们不是随机的-手动输入两个不等式始终使我发红,然后发蓝。
Mego

1
这很奇怪。我也变得红色和蓝色。
lirtosiast

2
我认为这不是...也不完全适合长宽比。
门把手

51

Python 2,47个字节

s="[3%smF";print(s%4*26+s%7*26+s%1*26+"\n")*30

包含不可打印的内容-这是一个十六进制转储(可通过反转xxd -r):

00000000: 733d 221b 5b33 2573 3b31 6d46 223b 7072  s=".[3%s;1mF";pr
00000010: 696e 7428 7325 342a 3236 2b73 2537 2a32  int(s%4*26+s%7*2
00000020: 362b 7325 312a 3236 2b22 5c6e 2229 2a33  6+s%1*26+"\n")*3
00000030: 30                                       0

使用ANSI转义码将彩色字符打印到STDOUT-我为法国选择了“ F”。没有在线链接,因为ideone在输出中不支持ANSI转义码。

感谢Dennis和xnor提供了一些很棒的技巧。

xterm的屏幕截图:

旗


1
您那里有多余的空间。in [0]->in[0]
mbomb007

2
1.您可以使用实际的ESC字节代替\x1b。2.粗体似乎没有必要。3.我不确定这是否也适用于ANSI美工,但问题似乎要求3:2的比例。
丹尼斯2015年

用格式设置:可以更短地细分参数print("\x1b[3%s;1mF"*78+"\n")%((4,)*26+(7,)*26+(1,)*26)*30
xnor

16
按F表示尊重
瑞金(Riking)

4
字符看起来稍微更好,例如 print("\x1b[3%s;1m█"*78+"\n")%((4,)*26+(7,)*26+(1,)*26)*30
ali_m

44

HTML / SVG,76个字节87 88121122149

感谢@insertusernamehere,节省了27个字节

@Joey节省9个字节

@sanchies节省了1个字节

@Neil节省1个字节

<svg><path fill=#0055a4 d=m0,0h26v52H0 /><path fill=#ef4135 d=M52,0h26v52H52

使用大量的HTML语法滥用,这可能会变得很短。


输出屏幕截图:

法国国旗输出


或尝试一下(确保您的浏览器支持SVG):

<svg><path fill=#0055a4 d=m0,0h26v52H0 /><path fill=#ef4135 d=M52,0h26v52H52


3
我试图用CSS击败您,现在我试穿了比我的CSS解决方案还要小的SVG。:D这是我在Safari,Chrome和Firefox中可以使用的最短的文件,它的长度为122个字节<svg><rect width=78 height=52 fill="#ef4135"/><rect width=52 height=52 fill="#fff"/><rect width=26 height=52 fill=#0055a4>
insertusernamehere 2015年

1
@insertusernamehere谢谢,那节省了27个字节!我已经设法将其进一步降低到惊人的88个字节
Downgoat

3
对我来说,也fill=#0055a4 />可以工作(否"),节省了整个字节。
桑契斯2015年

3
@sanchises整个字节?o_O :D
developerbmw

4
@developerbmw实际上,考虑一下,保存半个字节会更令人印象深刻。
桑奇斯

29

Brainfuck $,153字节

+++++++++++++[->>>++>+++++++>++++>>>>++++++++>+++<<<<<<<<<<]>>>+>>#->$#>$#+++++++>$--->+++++[<]<<+++++[->+++++>++++++<<]>+#>($#([-]>[.>]<[<])>>>>+++<<<<)

用ANSI颜色代码输出图像。我选择像Mego一样的30高度。

esolangs页面上链接的2009年参考实施丢失了。您可以使用我提供的解释器来运行它,该解释器支持esolangs页面中的所有内容。

Brainfuck,258字节

这基本上是同一回事,只是在简单的旧Brainfuck中。

>>+++++++++++++[-<<++>>>>++>+++++++>++++>++++>+++++>++++>++++++++>+++[<]<]>>+>>->>------>--->+++++[<]<<<++++[>+++++[->+++++<]>+[>>[.>]<[<]<-]>>>>>+++[<]+++++[-<+++++>]<+[>>[.>]<[<]<-]>>>>>------[<]+++++[-<+++++>]<+[>>[.>]<[<]<-]>>>>>+++[<]<++++++++++.[-]<<-]

或者,如果您希望使用oOo CODE(984字节)中的该字符,请执行以下操作:

one day ThERe WIlL Be PEaCE iN ThIS wORlD
OnE DaY ThERe WiLl Be peaCe iN ThIS wOrld
one day theRe WIlL be pEaCE iN ThIS wORlD
OnE DaY theRe WIlL Be PEaCe in ThIS wORlD
OnE day ThERe WIlL Be PEaCe in ThIS wORlD
OnE day ThERe WIlL Be PEaCE iN ThIS wOrld
OnE DaY ThErE wilL bE PeaCe IN this woRlD
one day There will Be pEacE in ThiS woRld
one Day TheRe will Be PEaCE iN ThIS wOrLd
onE dAY thEre WilL Be PEaCE iN ThIs World
OnE DaY ThERe WIlL bE pEace in ThIS wORlD
OnE DaY thErE Will Be PeAce in this WoRLd
one dAY thErE wilL bE PeaCE in tHIs world
one day theRe WIlL Be PeAce iN tHIS wORlD
OnE DaY ThErE wIll be PEaCE iN ThIS wORlD
one dAY thERe WiLl be peace In THis worLD
onE dAy thErE WilL Be peACe in this world
one Day TheRe wIll Be pEace In thIs WORlD
OnE DaY ThERe WiLl Be peaCE iN ThIS wORlD
OnE day tHEre WIlL bE peace in tHiS World
oNE daY tHere WiLL be PEace IN this world
one day ThERe WIlL bE peaCe IN thIS wORlD
OnE DaY ThERe WIlL Be PEaCE iN THis WoRld
oNE daY thERe wiLL

25

Bash + ImageMagick,60 77 73字节

convert -sample 78x52\! - a<<<"P3 3 1 255 0 85 164 255 255 255 239 65 53"

(嗯,由于颜色要求,我加了17个字符,我之前没有注意到...)

anetpbm格式输出到文件:

llama@llama:~$ convert -sample 78x52\! - a<<<"P3 3 1 255 0 85 164 255 255 255 239 65 53"
llama@llama:~$ file a
a: Netpbm image data, size = 78 x 52, rawbits, pixmap

如果将文件名更改为a.png(+4个字符),也可以PNG输出。

输出:

在此处输入图片说明


1
convert -sample 78x52\! - a<<<"P3 3 1 255 0 85 164 255 255 255 239 65 53"
Digital Trauma 2015年

@DigitalTrauma谢谢!这样可以节省4个字符,并且不会出现错误而退出。(而且,我从不知道ImageMagick可以从STDIN中读取/写入。)
Doorknob

您可以使用-scale代替-sample; 同样,反斜杠似乎不是必需的
–aditsu

25

LaTeX,139个字节

感谢@WChargin节省了21个字节。

\documentclass{proc}\input color\begin{document}\def\z#1!{{\color[rgb]{#1}\rule{4cm}{8cm}}}\z0,.33,.64!\z1,‌​1,1!\z.94,.25,.21!\end{document}

这将在A4页面上打印以下12cm * 8cm的图像:

在此处输入图片说明

注意,“ Page 1”也打印在页面底部


1
好吧,这比我的asymptote解决方案短100个字节...
Arcturus

1
s.\newcommand\z[1].\def\z#1保存一堆字节。此外,您还可以通过使用刮掉一些\def\z#1!{…}\z0,.33,.64!\z1,1,1!\z.94,.25,.21!,也就是说,用自己的分隔符,而不是括号进行分组
wchargin

1
您还可以\input color
wchargin

1
为了完整性,修订版(139字节):\documentclass{proc}\input color\begin{document}\def\z#1!{{\color[rgb]{#1}\rule{4cm}{8cm}}}\z0,.33,.64!\z1,1,1!\z.94,.25,.21!\end{document}
wchargin

24

Pyth,27个字节

 .w*52[smmdGc3CM"\0U¤ÿÿÿïA5

有一些无法打印的字符,所以这是一个十六进制转储:

00000000   2E 77 2A 35  32 5B 73 6D  6D 64 47 63  33 43 4D 22  .w*52[smmdGc3CM"
00000010   5C 30 55 A4  FF FF FF EF  41 35                     \0U.....A5

这将创建一个文件o.png,该文件的宽度恰好为78像素,高度为52像素:

在此处输入图片说明

说明:

.w*52[smmdGc3CM"........
               "........  a string containing the bytes 
                          0, 85, 164, 255, 255, 255, 239, 65, 53
             CM           convert them to integers
           c3             split into 3 lists
      smmdG               duplicate each list 26 times
     [                    put them into a list
  *52                     and duplicate it 52 times
.w                        save it as an image o.png

1
有一秒钟,我以为我严重误解了PNG规范。
primo

1
save it as an image o.png,但是任何地方都没有“ .png”?
修订

1
@AsidShout您如何调用该程序?如果使用python3 pyth.py code.pyth,则可以在同一目录中找到它。
雅库布2015年

20

HTML(怪异模式),68字节

这使用怪癖模式来呈现标志。

HTML 非常无效,但是可以在普通的Android 4.4.2浏览器和Firefox 42.0(在Windows 7 x64上)上使用。

<table width=78 height=52><td bgcolor=0055a4><td><td bgcolor=ef4135>

标记以正确的大小以及标准的红色和蓝色呈现。所有网页均以标准白色背景开头。



作为备选:

一个完全有效的 HTML5版本(141个字节):

<!DOCTYPE html><title>x</title><table style=width:78px;height:52px><tr><td style=background:#0055a4><td><td style=background:#ef4135></table>

在以下位置检查其有效性:https : //html5.validator.nu/

打印结果屏幕:

验证结果


1
你确定吗?当我只有HTML文件且只有这一行时,它在Firefox,Chrome和Safari中不起作用。如果文件在该行之后包含其他HTML元素,则对我有用。所以,也许您不能丢弃尾随>
insertusername此处,2015年

1
“完全有效”吗?应该style="..."就是第二个示例中要解决的问题。
mbomb007

3
@ mbomb007我要做的是创建最小的有效HTML代码。它使用官方验证器进行验证,因此,它是完全有效的 HTML。如果您不相信,可以自己尝试。
伊斯梅尔·米格尔

1
@ mbomb007另外,缺少引号是最小的问题:所有丢失的标签都<html>没有<head>,没有<body>,没有</tr>,没有</td>,没有关闭。
Ismael Miguel 2015年

1
@insertusernamehere您是正确的。它也在Android上出现错误。我在jsfiddle上测试过。但是访问时data:text/html,<table width=78 height=52><td bgcolor=0055a4><td><td bgcolor=ef4135>,它不起作用。立即修复,并使用链接进行测试。
Ismael Miguel

17

TI-Basic,52 44 42字节

GridOff
AxesOff
11
Shade(-Ans,Ans,Xmin,Xmin/3
Shade(-Ans,Ans,Xmax/3,Xmax,1,1,Ans

(假设[-10,10,1]图形区域为默认的[-10,10,1])

如果没有前两行,则将短4个字节,但是默认情况下将具有轴并且看起来不那么好。

看起来像这样:

在此处输入图片说明

如果阴影对挑战无效,请告诉我!

没有前两行,它看起来像这样:

在此处输入图片说明


作为比较,我还将包括没有前三行的版本。
GamrCorps

1
我认为您可以从Ymin转到Ymax。您还可以将默认屏幕设置为-10到10。我也不确定这样做的有效性,因为红色和蓝色区域仅阴影了一半。
lirtosiast

@ThomasKwa我编辑了帖子以显示为什么我不仅仅使用Ymin和Ymax。我没有意识到我可以假定使用默认屏幕,但是您不清楚该默认屏幕是什么。你能澄清一下吗?关于“半阴影”事物,这就是TI-Basic对事物进行着色的方式,如果无效,我将立即对其进行更改。
DanTheMan 2015年

1
默认屏幕为Ymin = Xmin = -10,Ymax = Xmax = 10。计算器以这些窗口设置和AxesOn等开头,因此可以假定它们。
lirtosiast

1
@Doorknob据我所知,不借助巫术是不可能做到这一点的。
DanTheMan

17

FFMPEG,110个 113 116 117 119 108 100字节

使用ffplay显示100个字节:

ffplay -f lavfi color=#0055a4:49x98[r];color=white:49x98[w];color=#ef4135:49x98[b];[r][w][b]hstack=3

使用ffmpeg保存到文件中,为108个字节:

ffmpeg -lavfi color=#0055a4:49x98[r];color=white:49x98[w];color=#ef4135:49x98[b];[r][w][b]hstack=3 -t 1 .png

该命令的当前版本将因错误而中止,但是将输出单个图像“ .png”,如下所示。

在此处输入图片说明


8
哇。滥用ffmpeg制作图像...
科尔·约翰逊

嘿,我看到了这个问题,并想到了做同样的事情。做得好,紧凑。如果允许,您可以使用white代替来使其更小#ffffff:值应相同。
llogan

我知道。还不够打扰。现在就做。
吉安2015年

#fff有效吗?
ev3commander 2015年

不,但是我可以跳过f.png中的f
Gyan

16

CSS,127个128 144字节

body:before,body:after{content:'';float:left;width:33%;height:100%;background:#0055a4}body:after{float:right;background:#ef4135}

不需要其他标记,仅与body-e一起使用。

编辑

  • 通过删除和一些保存了16个字节display:block;;
  • 保存了 1个字节,删除了结尾}

6
尽管从技术上讲CSS不是我们定义的编程语言。
Conor O'Brien

10
我知道@CᴏɴᴏʀO'Bʀɪᴇɴ–只是想击败SVG
insertusername此处,2015年

4
@CᴏɴᴏʀO'Bʀɪᴇɴ是正确的,这不是有效的答案。
Mego

2
@CᴏɴᴏʀO'Bʀɪᴇɴcss被保存为SASS文件,因为SASS是一种脚本语言,它将是一个有效的答案吗?
fcalderan

6
是的,常规CSS是有效的SASS文件。
ev3commander

16

JavaScript中,140个143 147 151 153字节

   with(document)with(body.appendChild(createElement`canvas`).getContext`2d`)for(i=2;i--;fillRect(i*52,0,26,52))fillStyle=i?"#ef4135":"#0055a4"


编辑

  • 替换为,节省了2个字节。感谢CᴏɴᴏʀO'Bʀɪᴇɴ2*i*26i*52
  • 通过重构-loop 节省了4个字节for。多亏ETHproductions
  • 使用-statement 保存2个字节with。感谢石end兰
  • 通过将增量变为减量来节省2个字节。感谢肖恩^ h
  • 替换为,节省了3个字节fillStyle=["#0055a4","#ef4135"][i]i?"#ef4135":"#0055a4"

3
2*i*26可以成为52*i,不是吗?
Conor O'Brien 2015年

7
@CᴏɴᴏʀO'Bʀɪᴇɴ当然可以。谢谢。远远超出了我的睡觉时间。
insertusername此处,2015年

2
您可以使用以下with语句减少2个字节:with(document)with(body.appendChild(createElement`canvas`).getContext`2d`)for(i=0;i<2;fillRect(i++*52,0,26,52))fillStyle=["#0055a4","#ef4135"][i]
Dendrobium

2
保存一个字节: x=(d=document).body.appendChild(d.createElement画布).getContext2d;for(i=3;--i;x.fillRect(i*52,0,26,52))x.fillStyle=[,"#ef4135","#0055a4"][i]
Shaun H

2
@Dendrobium很好。非常感谢。
insertusername此处,2015年

13

R,59个字节

frame();rect(0:2/3,0,1:3/3,1,,,c("#0055a4",0,"#ef4135"),NA)

显示输出:

在此处输入图片说明

一个人也可以用49个字节

barplot(rep(1,3),,0,col=c("#0055a4",0,"#ef4135"))

如果您不介意轴和边界:

在此处输入图片说明


2
该比例似乎是错误的。我认为您在单色矩形上的比例为2:3,而不是整个标记的比例为3:2。
致命

可以通过调整绘图窗口的大小来手动调整比例。
flodel

3
要获得资格,您的输入应该“开箱即用”。否则,任何人都可以发布6像素解决方案并说“您可以手动放大”。
Sanchises

4
你说“斧头”,我说“旗杆”。

2
@sanchises:我是法国人,我说吧。自由!
flodel

12

闪电战2D / 3D154108字节

这产生的结果与问题中给出的示例完全相同(除了在颜色相交的边缘处的抗锯齿)。

Graphics 800,533
ClsColor 255,255,255
Cls
Color 0,35,149
Rect 0,0,267,533
Color 237,41,57
Rect 533,0,267,533

显示输出,它看起来像这样:

在此处输入图片说明


12

Mathematica,63 94103字节

当我第一次看到这个挑战时,我以为Sweet!Mathematica将是完美的选择!直到我注意到内置的内置程序都被禁止了:'(

可是等等!我可以使用条形图!

r=RGBColor;BarChart[{1,1,1},ChartStyle->{r@"#0055a4",White,r@"#ef4135"},BarSpacing->0,AspectRatio->2/3]

(感谢MartinBüttner削减了5个字节,但增加了16个字节)

看起来像这样:

在此处输入图片说明

如果添加,,Axes->None则如下所示:

在此处输入图片说明

如果您不关心边框,则可以使用以下命令:(95个字节)

r=RGBColor;BarChart[{1,1},ChartStyle->{r@"#0055a4",r@"#ef4135"},BarSpacing->1,AspectRatio->2/3,Axes->None]

看起来像这样:

在此处输入图片说明

无轴:

在此处输入图片说明


3
Axes->None。您还应该保持谨慎AspectRatio->2/3。重命名RGBColor很简单:r=RGBColor;...r["..."]。您还可以使用前缀符号来保存另外两个字节r@"#0055a4"
马丁·恩德

如果不需要轮廓,请尝试BarChart[{1, 1}, ChartStyle -> {RGBColor["#0055a4"], Red}, BarSpacing -> 1]。红色看上去足够近。
DavidC

@DavidCarraher Meh,由于该问题指定了特定的RGB值,因此应准确使用该值。
马丁·恩德

我的主要建议是绘制两个矩形,而不是三个。但是,从技术上讲,您对Red是正确的。
DavidC

围栏周围的边框是否会使该解决方案无效?
LegionMammal978

11

Javascript(ES6)117字节

在控制台中绘制

for(i=c=s=[];i<156;c[i++]=`color:${[,'blue','#fff'][i%3]||(s+=`
`,'red')}`)s+='%c'+'+'.repeat(26);console.log(s,...c)


2
对于'white'我认为这是更短的事:#fff。另外,红色和蓝色必须与规范中指定的颜色匹配
Downgoat 2015年

1
您可以保存一些字节,i=c=s=[]而不是i=0,c=[],s=''在更新可能会有所帮助的颜色之后保存...
Dom Hastings

1
@Vɪʜᴀɴ在输出文本时,可以使用标准颜色(redblue)。这是第二点,从底部开始计数。这在规范内。
Ismael Miguel

@DomHastings不错的提示,巧妙地使用胁迫。谢谢!
乔治·瑞斯

1
@sysreq控制台中的文本...我无法控制控制台的lineheight。这是78个字符,宽52个高。
乔治·瑞斯

10

pb,68个字节

cw[Y!52]{cccw[X!26]{b[77]>}ccccw[X!52]{b[77]>}cw[X!78]{b[77]>}<[X]v}

哇,铅实际上是个不错的挑战!这些很少而且相差很远。

当我写pb规范时,我把彩色输出主要是作为一个玩笑。语言是经过“画笔”,为什么会命名不能做的颜色?除了示例程序,这是我第二次使用它。根据问题要求使用ANSI代码实现。

我使用'M'作为输出字符,因为它相当密集。

输出:

我将屏幕截图的垂直尺寸调整为其高度的三分之二,因为字母不是方形的。输出为78 x 52,但原始屏幕截图看起来确实不对。

带有注释,缩进和垃圾:

c               # Increase output colour by 1
                # 0 (White) -> 1 (Red)
                # Loop ends with output colour == 1, this is cheaper than
                # setting it back to white every time.

w[Y!52]{        # While the brush's Y coordinate is not 52:
    ccc           # Increase output colour by 3
                    # 1 (Red) -> 4 (Blue)

    w[X!26]{      # While the brush's X coordinate is not 26:
        b[77]       # Write 'M' at the brush's coordinates
        >           # Increase X coordinate by 1
    }             

    cccc          # Increase output colour by 4
                    # 4 (Blue) -> 8 mod 8 = 0 (White)

    w[X!52]{      # While the brush's X coordinate is not 52:
        b[77]       # (same as before)
        >         
    }             

    c             # Increase output colour by 1
                    # 0 (White) -> 1 (Red)

    w[X!78]{      # While the brush's X coordinate is not 78:
        b[77]       # (same as before)
        >
    }

    <[X]          # Set X back to 0
    v             # Increase Y by 1
}

78x30将为您提供所需的端子输出尺寸。
Mego

@Mego是的,但我不确定是否允许。
地下

在xterm上以默认字体显示的结果与指定尺寸匹配。
Mego

但是,除了“字符”之外,我对测量控制台输出的大小感到很奇怪。
Undergroundmonorail

1
当您的字符的高度是宽度的1.2倍时,它们的像素就不好。
Mego

10

C,115字节

在此处输入图片说明

#define c"[48;2;%d;%d;%dm%9c"
d=255;main(a){while(a++<9)printf(c c c c,0,85,164,0,d,d,d,0,239,65,53,0,0,0,0,10);}

包含不可打印的内容:

00000000: 2364 6566 696e 6520 6322 1b5b 3438 3b32  #define c".[48;2
00000010: 3b25 643b 2564 3b25 646d 2539 6322 0a64  ;%d;%d;%dm%9c".d
00000020: 3d32 3535 3b6d 6169 6e28 6129 7b77 6869  =255;main(a){whi
00000030: 6c65 2861 2b2b 3c39 2970 7269 6e74 6628  le(a++<9)printf(
00000040: 6320 6320 6320 632c 302c 3835 2c31 3634  c c c c,0,85,164
00000050: 2c30 2c64 2c64 2c64 2c30 2c32 3339 2c36  ,0,d,d,d,0,239,6
00000060: 352c 3533 2c30 2c30 2c30 2c30 2c31 3029  5,53,0,0,0,0,10)
00000070: 3b7d 0a                                  ;}.

为了使该程序正常工作,需要注意以下几点:

  • 终端支持ESC [48;2;<r>;<g>;<b>m“ truecolor”转义序列。
  • 终端不是xterm,因为xterm的上述实现会产生稍微错误的颜色。
  • 终端完全忽略NUL字符。

如果终端的背景是黑色,它也会看起来更好。

要更改标志的高度,请将命令行参数传递给程序。对于传递的每个参数,该标志将缩短一行。这不是一个错误,这是一个功能!

输出:

在此处输入图片说明


gcc(版本5.1.1)编译时遇到了麻烦。需要编译任何特定的标志吗?“ ac:1:10:警告:ISO C99在宏名称#define c之后需要空格” \ x1b [48; 2;%d;%d;%dm“”
Steve

1
@Steve是警告我们的错误吗?
Functino

1
@Steve再次进行了测试,gcc 5.2.1。没有标志。产生了12条警告,但制作了可运行的二进制文件。
Functino

道歉-正常工作-得到了由警告(而事实上,代码看起来很神秘的一个C新手像我)感到困惑
史蒂夫

9

MATLAB,82 79 78字节

x=[0 1 1 0];y(3:4)=2;fill(x,y,[0 85 164]/255,x+1,y,'w',x+2,y,[239 65 53]/255)

输出如下:


1
哪个版本的MATLAB?在r2013a上无效,因为颜色必须为[0,1]范围内的十进制数字。
汤姆·卡彭特

1
下一行可以工作,fill(x,y,[0 85 164]/255,x+1,y,'w',x+2,y,[239 65 53]/255)并节省2个字节。:)我也将使用分号代替换行符,以避免多余的内容被打印出来。
汤姆·卡彭特

1
@TomCarpenter我以0-1的色标间隔开了,已经有一段时间了,因为我必须指定颜色。至于分号/换行符,我选择的是可读性而不是控制台编写,但我改变了答案
costrom 2015年

9

Visual Basic + Excel,618137字节

只是好奇地看看如何打高尔夫球。

编辑:好奇心得到满足,这要归功于@Neil和@ JimmyJazzx,618字节下降到137字节

Sub a(): Columns("A:C").ColumnWidth = 26: Range("A1:A13").Interior.Color = RGB(0, 85, 164): Range("C1:C13").Interior.Color = RGB(239, 65, 53): End Sub

Excel标志


1
记录宏会导致效率极低的代码。试着Range("A1:C13").Interior.ColorIndex = 5Range("G1:I13").Interior.ColorIndex = 3这似乎足够了。
尼尔

2
抱歉,那是Excel 2003,我忘了包含ActiveWorkbook.Colors来指定确切的RGB值。Excel 2007还具有其他颜色选项,但我暂时不知道这些选项。
尼尔

1
我得到137个字节,并进行了一些快速更改。我认为您可以减少更多操作,但这是简单的更改。Sub a():Columns("A:C").ColumnWidth=26:Range("A1:A13").Interior.Color=RGB(0,85,164):Range("C1:C13").Interior.Color=RGB(239,65,53):End Sub
JimmyJazzx 2015年

我得到135-– Sub a:Columns("A:C").ColumnWidth=26:Range("A1:A13").Interior.Color=RGB(0,85,164):Range("C1:C13").Interior.Color=RGB(239,65,53):End Sub
Joey

9

CSS,102个110 111 114字节

*{background:linear-gradient(90deg,#0055a4 33%,#fff 33%,#fff 66%,#ef4135 66%) 0 0/78px 52px no-repeat


1
* *{background:linear-gradient(90deg,#0055a4,#0055a4 33%,#fff 33%,#fff 66%,#ef4135 66%) 0 0/78px 52px no-repeat}-缩短一个字节
user2428118 2015年

1
实际上一个*就足够了:)谢谢!
Thomas Eschemann

1
+1; 您可以通过删除尾部来节省另一个字节}
insertusername此处,2015年

1
您可以删除第一种颜色,节省8个字节。
Awashi

您可以将last替换66%0
Mr_Green '16


8

iKe,43个字节

,(0 0;"|"\"#0055A4|#FFF|#EF4135";52#,&3#26)

这是“原始元组” iKe程序的示例-仅仅是对原点(0 0),调色板(3 7#"#0055A4#FFFFFF#EF4135")和位图(+52#'&3#26)的描述。您需要将这样的描述包装在函数中,或者如果要为其设置动画,请使用对视图的引用。

调色板是创建一系列CSS颜色(规范的十六进制等效项)的非常简单的方法。

  3 7#"#0055A4#FFFFFF#EF4135"
("#0055A4"
 "#FFFFFF"
 "#EF4135")

如果对颜色的要求不太严格,我们可以使用iKe的内置调色板之一,并节省大量字符:

windows@7 0 4

旗

在浏览器中尝试一下。

编辑:

通过使用短#FFFCSS颜色为白色条纹节省一个字节:

,(0 0;3 7#"#0055A4#FFFFFF#EF4135";+52#'&3#26)
,(0 0;"|"\"#0055A4|#FFF|#EF4135";+52#'&3#26)

如果其他人有兴趣玩iKe,请在github repo上找到一本手册。这是我使用iKe解决的另一个问题

编辑2:

使用一种更简单的方式来构造位图,以节省一个字节:

+52#'&3#26
52#,&3#26

我在OP中的问题尚未得到解答,但为了记录下来,如果允许使用更灵活的颜色要求,则使用Windows 3.1调色板时,该程序将为30个字节:

,(0 0;windows@7 0 4;52#,&3#26)

标志2

自发布此问题以来,iKe获得了一项功能,该功能可以自动将绘制的纹理居中放置在没有位置的位置,这样可以节省另外3个字节,但这违反了规则:

,(;windows@7 0 4;52#,&3#26)

7

八度,77 76字节

s(98,49)=0;imshow(cat(3,[s w=s+255 w-18],[s+35 w s+41],[s+149 w s+57])/255);

显示图像:

在此处输入图片说明


7

处理,100字节

size(78,52);background(255);noStroke();fill(#0055A4);rect(0,0,26,52);fill(#EF4135);rect(52,0,26,52);

显示此: 法国

(天真的解决方案比我的第一个解决方案要短。)


我认为,Processing的绘制命令可以在此处推动像素之前发出:size(78,52);noStroke();int[]p={0xFF0055A4,255,0xFFEF4135};for(int c:p){translate(26,0);fill(c);rect(0,0,-26,52);}
JohnE

@JohnE Lol,是的,我刚刚注意到了。
geokavel 2015年

@JohnE甚至我的超级基本解决方案都比您的短!
geokavel 2015年

哈哈-看起来我们俩都把它复杂化了
JohnE

滥用秤的指示如何?这适用于sketchpad.cc,但可能会在处理3中中断:size(78,52);scale(26,52);fill(#EF4135);stroke(#0055A4);rect(0,-1,0,2);stroke(255);rect(1,-1,3,3);
JohnE 2015年


7

PHP,70个字节

0000000: 424d 0000 0000 0000 0000 2300 0000 0c00  BM........#.....
0000010: 0000 2001 c000 0100 0800 a455 00ff ffff  .. ........U....
0000020: 3541 ef3c 3f66 6f72 283b 3665 343e 2469  5A.<?for(;6e4>$i
0000030: 3b29 6563 686f 2063 6872 2824 692b 2b2f  ;)echo chr($i++/
0000040: 3936 2533 293b                           96%3);

上面是一个十六进制转储,可以用反转xxd -r。或者,也可以使用以下PHP脚本生成它:

<?=hex2bin('424d0000000000000000230000000c0000002001c00001000800a45500ffffff3541ef3c3f666f72283b3665343e24693b296563686f206368722824692b2b2f39362533293b');

我采用默认设置,因为它们没有.ini(您可以使用该-n选项禁用本地.ini )。生成一个.bmp图像(288 x 192),该图像应通过管道传输到文件。在不影响字节数的情况下,它可以做到的最大。


样品用量

$ xxd -r in.hex > france.php
$ php -n france.php > out.bmp
$ out.bmp

输出量

法国国旗


这些颜色看起来不正确。他们是否使用问题中指定的RGB值?
门把手

@Doorknob他们这样做。从字节26开始,定义了一个三值调色板(bgr):A45500,FFFFFF,3541EF。
2015年

6

ShaderToy(GLSL),147个字节

void mainImage(out vec4 o,vec2 i){float x=i.x/iResolution.x*3.0;vec3 w=vec3(255,255,255);o=vec4((x<1.0?vec3(0,85,164):x<2.0?w:vec3(239,65,53))/w,1);}

在这里看到

并不特别令人兴奋。我确信还有更多的方法可以打高尔夫球。到家时我会努力的。


3
链接重定向到shadertoy.com/error:/
昆廷-
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.