Роздрукуйте британський прапор!


10

Натхненний Друком американського прапора! це пряма копія, але з британським прапором, оскільки він має деякі симетрії, але все ще досить складний!

Ваше завдання полягає в тому, щоб створити наступний ASCII-Art в якомога менше байтах! Поверніть голову / екран (не обидва!) На 90 градусів, щоб правильно їх переглянути.

 __________________________________________ 
|\  \XXXXXXXXXXXX  000000  XXXXXXXXXXXX//0/|
|0\  \XXXXXXXXXXX  000000  XXXXXXXXXXX//0/ |
|\0\  \XXXXXXXXXX  000000  XXXXXXXXXX//0/  |
|\\0\  \XXXXXXXXX  000000  XXXXXXXXX//0/  /|
|X\\0\  \XXXXXXXX  000000  XXXXXXXX//0/  /X|
|XX\\0\  \XXXXXXX  000000  XXXXXXX//0/  /XX|
|XXX\\0\  \XXXXXX  000000  XXXXXX//0/  /XXX|
|XXXX\\0\  \XXXXX  000000  XXXXX//0/  /XXXX|
|XXXXX\\0\  \XXXX  000000  XXXX//0/  /XXXXX|
|XXXXXX\\0\  \XXX  000000  XXX//0/  /XXXXXX|
|XXXXXXX\\0\  \XX  000000  XX//0/  /XXXXXXX|
|XXXXXXXX\\0\  \X  000000  X//0/  /XXXXXXXX|
|XXXXXXXXX\\0\  \  000000  //0/  /XXXXXXXXX|
|XXXXXXXXXX\\0\    000000  /0/  /XXXXXXXXXX|
|XXXXXXXXXXX\\0\   000000  0/  /XXXXXXXXXXX|
|XXXXXXXXXXXX\\0\  000000  /  /XXXXXXXXXXXX|
|XXXXXXXXXXXXX\\0  000000    /XXXXXXXXXXXXX|
|XXXXXXXXXXXXXX\\  000000   /XXXXXXXXXXXXXX|
|                  000000                  |
|000000000000000000000000000000000000000000|
|000000000000000000000000000000000000000000|
|000000000000000000000000000000000000000000|
|                  000000                  |
|XXXXXXXXXXXXXX/   000000  \\XXXXXXXXXXXXXX|
|XXXXXXXXXXXXX/    000000  0\\XXXXXXXXXXXXX|
|XXXXXXXXXXXX/  /  000000  \0\\XXXXXXXXXXXX|
|XXXXXXXXXXX/  /0  000000   \0\\XXXXXXXXXXX|
|XXXXXXXXXX/  /0/  000000    \0\\XXXXXXXXXX|
|XXXXXXXXX/  /0//  000000  \  \0\\XXXXXXXXX|
|XXXXXXXX/  /0//X  000000  X\  \0\\XXXXXXXX|
|XXXXXXX/  /0//XX  000000  XX\  \0\\XXXXXXX|
|XXXXXX/  /0//XXX  000000  XXX\  \0\\XXXXXX|
|XXXXX/  /0//XXXX  000000  XXXX\  \0\\XXXXX|
|XXXX/  /0//XXXXX  000000  XXXXX\  \0\\XXXX|
|XXX/  /0//XXXXXX  000000  XXXXXX\  \0\\XXX|
|XX/  /0//XXXXXXX  000000  XXXXXXX\  \0\\XX|
|X/  /0//XXXXXXXX  000000  XXXXXXXX\  \0\\X|
|/  /0//XXXXXXXXX  000000  XXXXXXXXX\  \0\\|
|  /0//XXXXXXXXXX  000000  XXXXXXXXXX\  \0\|
| /0//XXXXXXXXXXX  000000  XXXXXXXXXXX\  \0|
|/0//XXXXXXXXXXXX__000000__XXXXXXXXXXXX\__\|

Блок розміром 44 х 42 символів. Зауважте, що перший рядок закінчується одним пробілом! Не допускаються інші пробіли, але в останньому рядку дозволена нова лінія.

Я не знаю жодної важливості дати для Великобританії на даний момент!


21
Як француз, моя честь заважає мені робити цей виклик
Fatalize

3
@Fatalize Я опублікую виклик французького прапора на День Бастилії, але вам доведеться правильно підібрати кольори!
CJ Dennis

3
"Principia Mathematica" Ньютона була опублікована 5 липня 1687 р., Але я не впевнений, чи враховується це. З одного боку, це було за Юліанським календарем; з іншого боку, вся наша система дат все-таки більш-менш довільна, тому, якщо вона називається в той же день, чому б не відсвяткувати її?
lirtosiast

1
@ThomasKwa Ну, принцесу Шарлотту сьогодні охрестили, але я вважаю, що досягнення Ньютона є більш значущим. Сьогодні День незалежності для Алжиру, Кабо-Верде та Венесуели, всі вони мають зірки у своїх прапорах.
Рівень річки Св.

9
@Fatalize Ось французький прапор для вас відповідно до колірної гами цього завдання: X 0. Я сподіваюся, що маленький жетон допоможе вам подолати свої заперечення.
Рівень річки Св.

Відповіді:


10

SpecBAS - 1137 байт

Зовсім немає надії на перемогу над персонажами, але вихід у кольорі ...

1 PAPER 15: CLS 
2 PRINT AT 1,2;("_"*42): FOR y=2 TO 42: PRINT AT y,1;"|";AT y,44;"|": NEXT y
3 FOR y=4 TO 18: PRINT AT y,y-2;"\";AT y+1,y-2;"\": NEXT y: PRINT AT 19,17;"\"
4 FOR y=2 TO 14: PRINT AT y,y;"\  \";AT y+28,y+26;"\  \": NEXT y: FOR y=15 TO 17: PRINT AT y,y;"\";AT y+12,y+13;"\": NEXT y
5 FOR y=25 TO 39: PRINT AT y,y+3;"\\": NEXT y: PRINT AT 40,43;"\"
6 FOR y=2 TO 14: PRINT AT y,42-y;"/";AT y+1,42-y;"/": NEXT y: PRINT AT 2,41;"/"
7 FOR y=2 TO 17: PRINT AT y,45-y;"/";AT y+3,45-y;"/": NEXT y
8 FOR y=2 TO 16: PRINT AT y+23,18-y;"/";AT y+26,18-y;"/": NEXT y: PRINT AT 27,17;"/"
9 FOR y=1 TO 13: PRINT AT y+29,17-y;"//": NEXT y: PRINT AT 29,17;"/"
10 PRINT AT 42,18;"__";AT 42,26;"__";AT 42,41;"__"
11 INK 2
12 FOR y=2 TO 42: PRINT AT y,20;"0"*6: NEXT y
13 FOR y=21 TO 23: PRINT AT y,2;"0"*42: NEXT y
14 FOR y=3 TO 18: PRINT AT y,y-1;"0";AT y+23,y+25;"0": NEXT y
15 FOR y=2 TO 16: PRINT AT y,44-y;"0";AT y+26,19-y;"0": NEXT y
16 INK 1
17 FOR y=2 TO 13: LET l$="x"*(14-y): PRINT AT y,4+y;l$;AT y,28;l$;AT 44-y,4+y;l$;AT 44-y,28;l$: NEXT y
18 FOR y=6 TO 19: LET l$="x"*(y-5): PRINT AT y,2;l$;AT y,49-y;l$;AT 44-y,2;l$;AT 44-y,44-LEN l$;l$: NEXT y

введіть тут опис зображення


Наскільки короткий він без кольору?
бета-розпад

На 12 символів менше (твердження INK). Враховуючи, що це вже на 1000+ символів більше, ніж більшість записів, я не збираюся посперечатися з ними. :-)
Брайан

1
Ха-ха, ви знаєте, що, напевно, ви можете зробити це набагато коротше в BBC BASIC
бета-розпад

Я рахую 1554 байти
TuxCrafting

4

Пітон 2, 223 байти

o=""
x="X"*15
s=x+r"\  \0\\%s//0/  /"%x
exec'o+="|%s  000000  %s|\\n"%(s[18:2:-1],s[25:41]);s=s[1:]+s[0];'*18
print" "+"_"*42+" \n"+o+"\n".join("|%s000000%s|"%(c*18,c*18)for c in" 000 ")+o[:43:-1]+o[43::-1].replace(" ","_")

Ще багато для гольфу.

Незважаючи на зовнішній вигляд, задня половина така ж, як передня половина, обернена назад (що забороняє підкреслення), що незвично приємно для візерунка з косою.


2

Пітон 3 361 331

p=print
p("","_"*42,"")
r='|'
w="X"*16
s="\\  \\0\\\\"
z="//0/  /"
O=" 000000 "
m=r+" "*18+"0"*3
o=w+s+w
e=w+z+w
T=e[::-1]
f=o[::-1]
R=range(18)
for i in R:p(r+o[i+19:i+3:-1],O,e[i+4:i+20]+r)
B="p(m+m[::-1]);"
exec(B+"p(r+'0'*42+r);"*3+B)
for i in R[1:]:p(r+T[i+1:i+17],O,f[i+16:i:-1]+r)
p(r+T[19:35]+"__000000__"+o[4:17]+"__\\|")

Ця програма використовує дивовижні можливості розрізання рядків python для створення рядка, що представляє смуги:

o = "XXXXXXXXXXXXXXX\  \0\\XXXXXXXXXXXXXXX" 

Потім кілька разів друкуйте її назад, зміщуючи її вправо, збільшуючи початок і кінець фрагмента рядка, щоб отримати це:

\  \XXXXXXXXXXX
0\  \XXXXXXXXXX
\0\  \XXXXXXXXX
\\0\  \XXXXXXXX
X\\0\  \XXXXXXX
XX\\0\  \XXXXXX
XXX\\0\  \XXXXX
XXXX\\0\  \XXXX
XXXXX\\0\  \XXX
XXXXXX\\0\  \XX
XXXXXXX\\0\  \X
XXXXXXXX\\0\  \
XXXXXXXXX\\0\  
XXXXXXXXXX\\0\ 
XXXXXXXXXXX\\0\  
XXXXXXXXXXXX\\0  
XXXXXXXXXXXXX\\ 

Це верхній лівий кут.

Я повторюю це чотири рази з варіантами на початковій рядку (наприклад, перевернення біта посередині), щоб отримати інші чотири кути.


@ Sp3000 Це краще?
Джеймс

Тепер я думаю, що це занадто худне
Sp3000,

btw Я думаю, що ви перенапружені - для 2 символів (наприклад, -1, 17) вам потрібно використовувати його шість разів, перш ніж щось економити
Sp3000

@ Sp3000 ти маєш рацію, я думав, що врятуєш 2.
Джеймс

До речі, на першому рядку є пробіл, який я не думаю, що ви друкуєте
Sp3000

2

CJam, 131 126 102 99 байт

S'_42*SK,'XE*"//0/  /"+2*f>Gf<_2>
\W%2>.{"\/"_W%er" 000 ":_@}" 0 0"
[I6I63].*+s_W%+42/{N"||"@*}/S'_er

Два канали лінійки включені для запобігання горизонтальної прокрутки. Спробуйте його в Інтернеті в інтерпретаторі CJam .

Ідея

Почнемо з модифікації рядка

XXXXXXXXXXXXXX//0/  /XXXXXXXXXXXXXX

натисканням 19 копій, відкидання перших n символів для n- ї копії та обрізання кожного результату після 16- го символу.

XXXXXXXXXXXXXX//
XXXXXXXXXXXXX//0
XXXXXXXXXXXX//0/
XXXXXXXXXXX//0/ 
XXXXXXXXXX//0/  
XXXXXXXXX//0/  /
XXXXXXXX//0/  /X
XXXXXXX//0/  /XX
XXXXXX//0/  /XXX
XXXXX//0/  /XXXX
XXXX//0/  /XXXXX
XXX//0/  /XXXXXX
XX//0/  /XXXXXXX
X//0/  /XXXXXXXX
//0/  /XXXXXXXXX
/0/  /XXXXXXXXXX
0/  /XXXXXXXXXXX
/  /XXXXXXXXXXXX
  /XXXXXXXXXXXXX
 /XXXXXXXXXXXXXX

Відкинувши перші два рядки, ми отримаємо правий верхній квадрант прапора.

Тепер, якщо ми перевернемо порядок рядків, ще раз відкидаємо перші два і поміняємо нахили косої риски, отримуємо верхній лівий квадрант.

Об’єднавши відповідні рядки, " 000000 "посередині та додавши кілька пробілів та нулів, ми отримуємо

\  \XXXXXXXXXXXX  000000  XXXXXXXXXXXX//0/
0\  \XXXXXXXXXXX  000000  XXXXXXXXXXX//0/ 
\0\  \XXXXXXXXXX  000000  XXXXXXXXXX//0/  
\\0\  \XXXXXXXXX  000000  XXXXXXXXX//0/  /
X\\0\  \XXXXXXXX  000000  XXXXXXXX//0/  /X
XX\\0\  \XXXXXXX  000000  XXXXXXX//0/  /XX
XXX\\0\  \XXXXXX  000000  XXXXXX//0/  /XXX
XXXX\\0\  \XXXXX  000000  XXXXX//0/  /XXXX
XXXXX\\0\  \XXXX  000000  XXXX//0/  /XXXXX
XXXXXX\\0\  \XXX  000000  XXX//0/  /XXXXXX
XXXXXXX\\0\  \XX  000000  XX//0/  /XXXXXXX
XXXXXXXX\\0\  \X  000000  X//0/  /XXXXXXXX
XXXXXXXXX\\0\  \  000000  //0/  /XXXXXXXXX
XXXXXXXXXX\\0\    000000  /0/  /XXXXXXXXXX
XXXXXXXXXXX\\0\   000000  0/  /XXXXXXXXXXX
XXXXXXXXXXXX\\0\  000000  /  /XXXXXXXXXXXX
XXXXXXXXXXXXX\\0  000000    /XXXXXXXXXXXXX
XXXXXXXXXXXXXX\\  000000   /XXXXXXXXXXXXXX
                  000000                  
000000000000000000000000000000000000000000
000000000000000000000

Друга половина прапора містить майже такий самий символ, у перевернутому порядку читання (справа вліво, знизу вгору).

Все, що залишилося зробити, щоб заповнити весь прапор, - це натиснути перший рядок, замінити пробіли підкресленнями в останньому та ввести вертикальні смуги та фактичні рядки ліній.

Код

S'_42*S   e# Push a space, a string of 42 underscores and another space.
K,        e# Push [0 ... 19].
'XE*      e# Push a string of 14 X's.
"//0/  /" e# Push that string.
+2*       e# Concatenate and repeat the result twice.
f>        e# Push copies with 0, ..., 19 character removed from the left.
Gf<       e# Truncate each result after 16 characters.
_2>       e# Copy the array and discard its first two elements.
\W%2>     e# Reverse the original array and discard its first two elements.

.{        e# For each pair of corresponding strings in the arrays:
  "\/"    e#   Push "\/".
  _W%     e#   Reverse a copy to push "/\\".
  er      e#   Perform transliteration on the string from the right array..
  " 000 " e#   Push that string.
  :_      e#   Duplicate each charcter to push "  000000  ".
  @       e#   Rotate the string from the left array on top.
}         e#

" 0 0"    e# Push that string.
[I6I63]   e# Push [18 6 18 63].
.*        e# Vectorized repetition.
+s        e# Concatenate ad flatten.
_W%+      e# Push a reversed copy and concatenate.
42/       e# Split into chunks of length 42.
{         e# For each chunk:
  N       e#   Push a linefeed.
  "||"@*  e#   Join the string "||", using the chunk as separator.
}/        e#
S'_er     e# Replace spaces with underscores in the last string.

1

Javascript ES6, 726 725 655 647 643 байт

a="__";l=" ";b=l+l;c=`|
|`;d="X";e="0";f=b+e[r="repeat"](6)+b;g="\\  \\";h="//0/";i="/  /";Z="\\";A=Z+Z;j=A+0;k=d[r].bind(d);y=c+l[r](16)+f+l[r](16);z=c+e[r](42);B="/";C="\\0";D="0//";E=B+D;q=n=>k(n)+f+k(n);F=n=>g+q(n)+h;G=n=>c+k(n)+j+F(9-n)+k(3+n);H=n=>A+k(n+1)+c+k(n);I=n=>q(n)+g+e+H(8-n)+i+D;console.log(l+a[r](21)+` 
|`+F(12)+c+e+F(11)+d+c+C+F(10)+d+d+c+j+F(9)+k(3)+c+d+j+F(8)+k(4)+G(2)+G(3)+G(4)+G(5)+G(6)+G(7)+G(8)+y+z+z+z+y+c+k(14)+B+l+f+H(13)+B+b+f+e+H(12)+i+f+C+H(11)+i+e+f+l+C+H(10)+i+"0/"+f+b+C+H(9)+i+D+I(0)+I(1)+I(2)+I(3)+I(4)+I(5)+I(6)+I(7)+I(8)+q(9)+g+e+A+c+b+E+q(10)+g+e+Z+c+l+E+q(11)+g+e+c+E+k(12)+a+e[r](6)+a+k(12)+Z+a+Z+"|")

2
Ви використовуєте ES6, чому б не жирові стрілки?
Вниз

1
Також рядки шаблонів можуть вирізати приблизно два байти для\n
Downgoat

1

PHP, 240 байт

 <?=str_pad(_,42,_)." ";for($o=18;$o--;)$r.="
".($s="|".substr("XXXXXXXXXXXXXX\\\\0\  \\XXXXXXXXXXXX//0/",$o,16)."  000").($v=strrev)(strtr($s,"\\","/"));echo$r;for(;$i<5;)echo"
",$s=str_pad("|",19,$i++%4?0:" ")."000",$v($s);echo"
",$v($r);

Зверніть увагу на пробіл перед початковим тегом! Спробуйте в Інтернеті .


0

SpecBAS знову - 507 байт

Ось подібна версія до Брайана вище (у мене ще недостатньо репутації для коментарів), але без кольору. Для створення дисплея використовується зовсім інший метод.

10 DEF FN rr$(r$)=r$(2 TO)+r$(1): DEF FN rl$(r$)=r$(LEN r$)+r$( TO LEN r$-1)
20 a$="\  \"+"x"*14+"\\0",b$="x"*12+"//0/  /xx",c$="x"*14+"/  /0//",d$="\\"+"x"*14+"\  \0",e$="  000000  ": ?" ";"_"*42: DO 18: ?"|";a$( TO 16);e$;b$( TO 16);"|": a$=FN rl$(a$),b$=FN rr$(b$): LOOP: ?"|";TAB 17;e$;TAB 43;"|"'("|"+("0"*42)+"|"+#13)*3;"|";TAB 17;e$;TAB 43;"|": DO 18: ?"|";c$( TO 16);e$;d$( TO 16);"|": c$=FN rr$(c$),d$=FN rl$(d$): LOOP: ?#11;TAB 17;"__";TAB 25;"__";TAB 40;"__"

0

Bubblegum , 213 байт

00000000: b5d3 0106 4421 1080 6100 de29 e606 759c  ....D!..a..)..u.
00000010: 105d a4c3 6fdb 461f 030f f607 f019 994c  .]..o.F........L
00000020: 8cd7 c533 7b44 6f14 5177 118d 4aa9 653e  ...3{Do.Qw..J.e>
00000030: b3a2 13d6 c6c2 1d9d b076 6375 c2d8 b270  .........vcu...p
00000040: 5327 8c6d 5fac 4e18 bbb1 3a61 ecc1 6ab1  S'.m_.N...:a..j.
00000050: f662 b518 0b46 83b1 6034 180b 5683 b162  .b...F..`4..V..b
00000060: f5c5 58b1 1a8c 05a3 c158 b1fa 62ac 587d  ..X......X..b.X}
00000070: 3156 ac06 630f 8ed4 c1a9 85eb ebfe 8adf  1V..c...........
00000080: bf39 6da3 803b 67cc eab0 e08a 0663 0b93  .9m..;g......c..
00000090: d160 2c3f 8806 6b99 8c06 6bc1 1d0d c67a  .`,?..k...k....z
000000a0: 2968 3056 8c06 63c5 6830 568c 0663 c5e8  )h0V..c.h0V..c..
000000b0: 8bb5 62f5 c1d8 8cd1 1b6b 3346 2fac cd58  ..b......k3F/..X
000000c0: bdb0 3663 f4c6 da8c d10b 6f4b 63fc f018  ..6c......oKc...
000000d0: 4d3d 469f 1f                             M=F..

Спробуйте в Інтернеті!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.