พิมพ์ธงอังกฤษ!


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 x 42 ตัวอักษร โปรดทราบว่าบรรทัดแรกลงท้ายด้วยช่องว่างเดียว! ไม่อนุญาตให้เว้นวรรคต่อท้ายอื่น ๆ แต่อนุญาตให้มีการขึ้นบรรทัดใหม่ในบรรทัดสุดท้าย

ฉันไม่ได้ตระหนักถึงความสำคัญของวันที่สำหรับสหราชอาณาจักรในขณะนี้!


21
ในฐานะชาวฝรั่งเศสเกียรติยศของฉันทำให้ฉันไม่สามารถทำสิ่งนี้ได้
Fatalize

3
@ ทำให้สำเร็จฉันจะโพสต์การท้าทายธงชาติฝรั่งเศสสำหรับ Bastille Day แต่คุณจะต้องทำให้สีถูกต้อง!
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

ป้อนคำอธิบายรูปภาพที่นี่


สั้นแค่ไหนที่ไม่มีสี?
Beta Decay

น้อยกว่า 12 ตัวอักษร (คำสั่ง INK) เมื่อพิจารณาว่านี่มีตัวละครมากกว่า 1,000 ตัวแล้วฉันก็จะไม่พูดเรื่องนี้ :-)
Brian

1
ฮ่าฮ่าคุณรู้ว่าคุณอาจทำให้เรื่องนี้สั้นลงมากใน BBC BASIC
Beta Decay

ฉันนับ 1554 ไบต์
TuxCrafting

4

Python 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

Python 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]+"__\\|")

โปรแกรมนี้ใช้ประโยชน์จากความสามารถในการแบ่งสตริงของไพ ธ อนเพื่อสร้างสตริงที่แทนแถบ:

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 มันดีกว่าเหรอ?
James

ตอนนี้ฉันคิดว่ามันค่อนข้างผอมเกินไป
Sp3000

btw ฉันคิดว่าคุณใช้มากเกินไป - สำหรับ 2 ตัวอักษร (เช่น -1, 17) คุณจำเป็นต้องใช้มันหกครั้งก่อนที่คุณจะบันทึกอะไรเลย
Sp3000

@ Sp3000 คุณถูกฉันคิดว่าจะประหยัด 2 คน
James

btw ยังมีพื้นที่ต่อท้ายในบรรทัดแรกซึ่งฉันไม่คิดว่าคุณจะพิมพ์
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 THคัดลอกและตัดแต่ละผลหลังจาก 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

โดยการละทิ้งสองสายแรกเราจะได้ Quadrant ด้านบนขวาของธง

ทีนี้ถ้าเรากลับคำสั่งของสตริงย้อนกลับไปสองครั้งแรกและสลับความเอียงของสแลชเราจะได้ควอดเรเตอร์ด้านบนซ้าย

โดยการต่อสตริงที่เกี่ยวข้องเข้าด้วยกัน" 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 ทำไมไม่ฟังก์ชั่นลูกศรไขมัน?
Downgoat

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 ไบต์

นี่เป็นรุ่นที่คล้ายกับข้างบนของ Brian (ฉันยังไม่มีชื่อเสียงพอที่จะแสดงความคิดเห็น) แต่ไม่มีสี มันใช้วิธีการที่แตกต่างกันมากในการสร้างการแสดงผล

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..

ลองออนไลน์!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.