Vẽ Jack Liên minh


8

Lời nói đầu

Có rất nhiều thử thách "vẽ cờ x", và khi tìm kiếm, hóa ra không có thử thách nào để thu hút Jack đoàn! Tôi cảm thấy như đây sẽ là một lá cờ khó vẽ hơn nhưng nó vẫn có thể.

Thử thách

Vẽ Jack Liên minh. Nó có thể được xuất ra một tệp ở bất kỳ định dạng tệp đồ họa có sẵn miễn phí hoặc được vẽ trên màn hình.

  • Code Golf áp dụng quy tắc, mã ngắn nhất tính bằng byte thắng.
  • Tiêu chuẩn áp dụng.
  • Không có nội dung cho phép vẽ cờ cho phép.

Kích thước sẽ như dưới đây. Kích thước tối thiểu 600x300 pixel (hoặc đơn vị nếu ngôn ngữ của bạn chỉ hỗ trợ đồ họa có thể mở rộng.) Lỗi tối đa 1 pixel.

Màu sắc sẽ là đỏ, trắng và xanh như được xác định bởi ngôn ngữ của bạn hoặc tài liệu của nó hoặc # CC0000, #FFFFFF và # 003399 trên mỗi trang Wikipedia.

nhập mô tả hình ảnh ở đây



11
" Có nhiều thử thách" vẽ cờ x "và khi tìm kiếm, hóa ra không có thách thức nào để vẽ " có thể được theo sau bởi bất kỳ hàng ngàn cờ quốc gia, tổ chức, tiểu bang, v.v. Lá cờ này có gì khiến cho việc vẽ nó trở thành một thách thức khác biệt cơ bản với tất cả các câu hỏi đầu ra đồ họa hiện có ?
Peter Taylor

1
Điều này rất giống với thử thách cờ Iceland, tuy nhiên tôi thấy điều này có một sự thay đổi đặc biệt trong việc xây dựng các đường chéo. Vì chúng có đối xứng quay nhưng không đối xứng phản xạ chính xác, nó thêm một lớp bổ sung cho sự phức tạp. Hầu hết các chiến lược cho cờ Iceland sẽ không phải là một chuyển đổi đơn giản để có được chiến lược này.
GuitarPicker

Không khó hơn cờ Bồ Đào Nha!
sergiol

Câu trả lời:


8

BBC CƠ BẢN

Rev B, 234 byte

Thay vì vẽ một chữ thập trắng và một chữ thập đỏ, chúng ta vẽ 100 chữ thập hẹp dần dần, chuyển từ nền trắng sang tiền cảnh đỏ ở tọa độ 60.

p=20761m=1049w=600h=300F.i=-1TO1V.29,w;h;18;4,m;134*i;0;m;w*i;-233;p;0;466;m;0;67*i;m;-466;h*i;p;932;0;18;1,m;511*i;h*i;25;89*i;0;29977;0;0;m;w*i;-h*i;28953;0;45*i;
N.F.c=-100TO0q=25881-c DIV60*512V.m;-c;-h;q;c;h;m;-w;-c;q;w;c;
N.

Tải xuống thông dịch viên miễn phí tại http://www.bbcbasic.co.uk/bbcwin/bbcwin.html

Được chơi đầy đủ, 249 byte

Các mã VDU byte đơn, ví dụ 25,0kết hợp thành endian nhỏ hai byte, ví dụ 25;và sử dụng tối đa các hằng số cho các giá trị chung. Từ khóa được nén thành dạng viết tắt, ví dụ FOR=> F.(trình thông dịch sẽ tự động mở rộng.)

p=20761q=26393r=25881m=1049c=100w=600h=300F.i=-1TO1V.29,w;h;18;4,m;134*i;0;m;w*i;-233;p;0;466;m;0;67*i;m;-466;h*i;p;932;0;18;1,m;511*i;h*i;25;89*i;0;29977;0;0;m;w*i;-h*i;28953;0;45*i;
N.V.m;-c;-h;q;c;h;2m;-w;-c;q;w;c;m;-60;-h;r;60;h;m;-w;-60;r;w;60;

Bán nguyệt

Mã VDU thô. Trong BBC BASIC, các ký tự có thể được gửi đến bộ điều khiển VDU như VDU65(in chữ A.) Có một số ký tự đặc biệt dành riêng cho BBC cho đồ họa. Chúng phải được theo sau bởi một số byte khác để chỉ định tọa độ, v.v ... Ở đây chúng tôi sử dụng PLOT=> VDU25, GCOL=> VDU18, ORIGIN=> VDU29.

  c=100w=600h=300                                      :REM constants 100,width,height
  FORi=-1TO1                                           :REM loop -1 and 1 (0 draws nothing)
    VDU29,w;h;                                         :REM set origin (bring inside loop for golfing reasons)
    VDU18;4                                            :REM change to blue and draw triangles
    VDU25,4,134*i;0;25,4,w*i;-233;25,81,0;466;25,4,0;67*i;25,4,-466;h*i;25,81,932;0;
    VDU18;1                                            :REM change to red and draw parallelograms
    VDU25,4,511*i;h*i;25,0,89*i;0;25,117,0;0;25,4,w*i;-h*i;25,113,0;45*i;
  NEXT
  VDU25,4,-c;-h;25,103,c;h;25,4,-w;-c;25,103,w;c;      :REM draw white background rectangles
  VDU25,4,-60;-h;25,101,60;h;25,4,-w;-60;25,101,w;60;  :REM draw red foreground rectangles

Đầu tiên chúng ta vẽ một nửa các đường chéo: 2 hình tam giác màu xanh và 2 hình bình hành màu đỏ. Sau đó, chúng tôi thay đổi tỷ lệ từ -1 thành +1 và vẽ nửa còn lại. Cuối cùng chúng ta vẽ các phần ngang và dọc trên cùng: 2 hình chữ nhật màu trắng để tạo thành hình chữ thập màu trắng, sau đó là 2 hình chữ nhật màu đỏ. Hình ảnh sau lần lặp đầu tiên của vòng lặp được hiển thị bên dưới, cùng với hình ảnh cuối cùng.

nhập mô tả hình ảnh ở đây

Mã bị đánh cắp

BBC cơ bản ghi nhớ 2 vị trí cuối cùng của con trỏ đồ họa. PLOT81 vẽ một hình tam giác giữa các tọa độ mới được chỉ định và hai vị trí cuối cùng này. PLOT113 và PLOT117 vẽ một hình bình hành theo cách tương tự: ba góc của hình bình hành phải được đưa ra theo thứ tự chúng được tìm thấy đi vòng quanh chu vi. Ba bit cuối cùng của mã PLOT xác định xem tọa độ đã cho là tuyệt đối hay tương đối và liệu màu nền trước hay màu nền được sử dụng. Các bit quan trọng hơn xác định loại hình dạng được vẽ (điểm, đường thẳng, tam giác, hình bình hành, hình chữ nhật, v.v.)

  ORIGIN600,300       :REM move the origin (which will be centre of flag) away from the corner of the screen.

  FORi=-1TO1          :REM at scales of -1 and 1, plot half each of the diagonal parts (i=0 plots nothing).
    GCOL0,4             :REM blue foreground colour
    PLOT4,134*i,0       :REM absolute move to peak of upper/lower triangle
    PLOT4,600*i,-233    :REM absolute move to left hand corner
    PLOT81,0,466        :REM relative move to right hand corner, plotting triangle

    PLOT4,0,67*i        :REM absolute move to peak of left/right triangle
    PLOT4,-466,300*i    :REM absolute move to lower corner
    PLOT81,932,0        :REM relative move to upper corner, plotting triangle

    GCOL0,1             :REM red foreground colour
    PLOT4,511*i,300*i   :REM absolute move to long edge of flag
    PLOT0,89*i,0        :REM relative move to corner of flag (top right / bottom left)
    PLOT117,0,0         :REM absolute move to centre of flag, plotting parallelogram (stripe)
    PLOT4,600*i,-300*i  :REM absolute move to corner of flag (bottom right / top left)
    PLOT113,0,45*i      :REM relative move to short edge of flag, plotting parallelogram (stripe)
  NEXT                :REM diagonal parts completed, now plot vertical/horizontal parts on top.

  PLOT4,-100,-300     :REM move to bottom left of vertical white stripe
  PLOT103,100,300     :REM move to top right corner, plot it in background colour (white)
  PLOT4,-600,-100     :REM move to bottom left corner of horizontal white stripe
  PLOT103,600,100     :REM move to top right corner, plot it in background colour (white)

  PLOT4,-60,-300      :REM move to bottom left of vertical red stripe
  PLOT101,60,300      :REM move to top right corner, plot it in foreground colour (red)
  PLOT4,-600,-60      :REM move to bottom left corner of horizontal red stripe
  PLOT101,600,60      :REM move to top right corner, plot it in foreground colour (red)

6
Ngôn ngữ (tên) phù hợp cho nhiệm vụ :-D
Luis Mendo

3

SVG, 298 byte

điểm loại trừ 3 dòng mới không cần thiết được thêm vào cho rõ ràng.

<svg xmlns="http://www.w3.org/2000/svg">
<path d="M67,0h466L0,267v-234L533,300h-466L600,33v232z" fill="blue"/>
<path d="M0,0v22L300,172L45,300h-45L600,0h-45L300,128L600,278v22z" fill="red"/>
<path d="M-10,110h270v-120h80v120h270v80h-270v120h-80v-120h-270z" fill="red" stroke="#fff" stroke-width="20"/>

Lấy cảm hứng từ câu trả lời đã bị xóa của Siren (và đặc biệt là việc tiết kiệm byte từ bỏ sót </svg>ở cuối tài liệu), tôi đã đưa ra một SVG vừa chính xác về chiều và ngắn hơn một chút.

Nó bao gồm một đường dẫn màu xanh và một đường dẫn màu đỏ (được lấp đầy, không có nét) cho các phần chéo và một đường dẫn màu đỏ (được lấp đầy, với 20 đơn vị viền trắng) cho chữ thập cuối cùng. Do độ dày của viền trắng, các kích thước được chỉ định của chữ thập phải vượt quá 10 kích thước yêu cầu xung quanh.

Điều này hoạt động tốt với tôi trong Microsoft IE và Edge. Đôi khi hiển thị cảnh báo "nội dung bổ sung ở cuối tài liệu" trong Chrome.

Đây là cách nó xuất hiện mà không có và với thập tự giá cuối cùng. Cần 8 điểm để mô tả đường dẫn màu xanh, 10 điểm để mô tả đường dẫn màu đỏ và 12 điểm cho đường chéo cuối cùng. Các giao điểm của các đường thẳng trong hai đường dẫn đầu tiên không phải được đưa ra.

nhập mô tả hình ảnh ở đây


SVG là định dạng hình ảnh, không phải ngôn ngữ lập trình
Mego

2
@Mego có khá nhiều bài nộp SVG trên trang này. Thực sự khó khăn hơn để làm điều đó mà không có lợi ích của các vòng lặp. Có lẽ tôi nên áp dụng lập luận sau đây được sử dụng bởi Peter Taylor vĩ đại ở đây: codegolf.stackexchange.com/questions/19050/ trộm mặc dù tôi không muốn làm như vậy vì tôi không biết PHP:PS If anyone wants to argue that SVG isn't a programming language (and I'd be very inclined to agree), consider this a PHP program in the style of many PHP submissions to this site which just echo literal text.
Level River St

1

Logo, 260 239 byte

(Phiên dịch XLogo)

Tôi đã sử dụng trình thông dịch XLogo dựa trên Java vì đây là một trong số ít các triển khai Logo mà tôi có thể tìm thấy hỗ trợ cài đặt kích thước cửa sổ đầu ra.

Trình chỉnh sửa XLogo thường lưu các tệp dưới dạng các thủ tục được gọi là. Thay vào đó, chương trình này được viết để dán vào cửa sổ ngay lập tức. Điều này tiết kiệm khoảng 9 byte.

window setscreensize[600 300]setsc 4 lt atan 2 repeat 2[repeat 2[setpc 7 setpw 60 fd 400 setpw 20 lt 90 fd 10 lt 90 setpc 1 fd 400 lt 90 fd 10 rt 90]lt asin .8]home wrap setpw 100 setpc 7 repeat 2[repeat 2[fd 600 lt 90]setpw 60 setpc 1] ht

Vì các màu chính xác không cần thiết, tôi đã lấy lại màu này để sử dụng các số màu tích hợp giúp tiết kiệm nhiều byte. Nếu bạn muốn xem phiên bản có màu RGB chính xác, hãy kiểm tra các phiên bản. Tôi cũng thay thế một phép tính lượng giác bằng một phép tính tương đương ngắn hơn.

Đầu ra cờ Union Jack

Ungolfed với bình luận

Thủ thuật thực sự duy nhất ở đây là thay đổi màu sắc cho đường chuyền thứ hai của vòng lặp và tận dụng wraptính năng cho phép chúng ta vẽ các sọc ngang với rất ít nỗ lực. Vì chiều cao và chiều rộng của cờ là cả hai yếu tố của 600, chúng ta có thể chuyển tiếp 600 cho các sọc dọc hoặc ngang và cuối cùng trở lại ở trung tâm một lần nữa. Điều này tránh việc có các trường hợp riêng cho từng trường hợp, ngay cả khi nó vẽ thanh dọc gấp đôi thường xuyên. Chúng tôi đang tiết kiệm không gian mã, không phải chu kỳ đồng hồ.

to UnionJack
  #Initialize the screen
  window  #Allow the turtle to overshoot the boundary without reappearing on the opposite side
  setscreensize[600 300]
  setsc 4  #blue background

  lt atan 2 #Turn left, preparing to draw first diagonal
  repeat 2 [ #Draw 2 sets of main diagonal bars
    repeat 2 [ #Each main bar is made of 2 spokes
      setpc 7 setpw 60 #Use a wide white pen
      fd 400 #Draw past the corner of the window
      setpw 20 #Make the pen narrow
      lt 90 fd 10 lt 90 #Do a 10px U-turn
      setpc 1 #Switch to a red pen
      fd 400 #Draw back to the center.
      lt 90 fd 10 rt 90 #Do a 10 px S curve back to center, ready to draw the opposite spoke
    ] #Finish spoke
    lt asin .8 #Turn for the next bar.
  ] #Finish bar
  home #Return to a sane heading
  wrap #Makes the turtle wrap to the opposite side if it overshoots the boundary
  setpw 100 setpc 7 #Wide white pen
  repeat 2 [ #Draw 2 crosses
    repeat 2 [ #Each cross has 2 stripes
      fd 600 #Overshoot the boundary so that we end up where we started at the center, leaving a stripe behind
      lt 90 #Rotate to draw the next stripe
    ] #Finish the stripe
    setpw 60 setpc 1 #Change to a narrow red pen
  ] #Finish cross
  ht #Hide the turtle
end

1

Đang xử lý, 312 byte

Đây là loại câu đố trong đó Xử lý khá hiệu quả.

int a=300,b=2*a,c=255,d=100;size(b,a);background(0,51,153);stroke(c);strokeWeight(60);line(0,a,b,0);line(0,0,b,a);stroke(c,0,0);strokeWeight(20);line(0,310,a,160);line(-22,0,a,160);line(a,139,b,-12);line(a,139,624,a);noStroke();fill(c);rect(250,0,d,b);rect(0,d,b,d);fill(c,0,0);rect(270,0,60,b);rect(0,120,b,60);

Kết quả trong:

nhập mô tả hình ảnh ở đây


0

Python 2, 265 byte

r="D\0\0"
b="\0\x173"
w="U"*3
N=20*(270*w+60*r+270*w)
L=190*[b]+60*[w]+40*[r]+20*[w]+190*[b]
j=''.join
F=lambda p:j([j(L[150-p*100+i:150+p*150+i:p])+20*w+60*r+20*w+j(L[345-p*145-i:345+p*105-i:p])for i in range(0,200,2)])
print"P6 600 300 85 "+F(-1)+N+36000*r+N+F(1)

Đầu ra dưới dạng PPM nhị phân, sử dụng:

python golf_unionjack.py > unionjack.ppm

Lđại diện cho một lát dọc của các phần chéo và Fsử dụng đối xứng (sắp xếp) để lưu mã và tính toán các chỉ số cho phần trên và phần dưới.


0

Bản ghi (166 byte)

00000000: 880a 880a 928b 3020 3092 6b30 881e 9263  ......0 0.k0...c
00000010: 883c 3330 9263 883c 3092 6392 1692 142f  .<30.c.<0.c..../
00000020: 727b 2e38 8800 3092 9d7d 9233 2f77 7b31  r{.8..0..}.3/w{1
00000030: 8801 3192 9d7d 9233 924e 3220 3192 8b30  ..1..}.3.N2 1..0
00000040: 202e 3220 2e36 929d 3020 3088 1e33 3092   .2 .6..0 0..30.
00000050: 8088 0f31 3592 ad34 3592 8834 7b77 2030  ...15..45..4{w 0
00000060: 88fd 881e 3692 8072 8800 3088 1e32 9280  ....6..r..0..2..
00000070: 3930 9288 7d92 8392 4d88 1e31 3592 ad32  90..}...M..15..2
00000080: 7b77 88fb 88e2 880a 3630 9280 3930 9288  {w......60..90..
00000090: 7d92 8332 7b72 88fd 88e2 3688 3c92 8039  }..2{r....6.<..9
000000a0: 3092 887d 9283                           0..}..

Phiên bản không mã thông báo:

10 10 scale
0 0 moveto
0 30 lineto
60 30 lineto
60 0 lineto
closepath
clip
/r {.8 0 0 setrgbcolor} def
/w {1 1 1 setrgbcolor} def
gsave
2 1 scale
0 .2 .6 setrgbcolor
0 0 30 30 rectfill
15 15 translate
45 rotate
4 {w 0 -3 30 6 rectfill r 0 0 30 2 rectfill 90 rotate} repeat
grestore
30 15 translate
2 {
w
-5 -30 10 60 rectfill
90 rotate
} repeat
2 {
r
-3 -30 6 60 rectfill
90 rotate
} repeat

Đầu ra:

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.