Logo Thế vận hội Olympic - Phiên bản Phong cách Miễn phí [đã đóng]


30

Với tinh thần tương tự như câu hỏi này , nhiệm vụ của bạn là tạo ra logo đẹp nhất với tối đa 1K mã.

Quy tắc:

  1. Tối đa 1K mã (đã bao gồm), không có dữ liệu ngoài.

  2. Câu trả lời với hầu hết các chiến thắng.

Chúc vui vẻ!


6
Chà, anh ấy đã nói trực tiếp "với tinh thần tương tự như câu hỏi này ", vì vậy anh ấy thực tế đã nói "này, tôi biết đây là một bản sao": D
Mike Koch

5
Tiêu chí chiến thắng khác nhau. Vì vậy, nó là một câu hỏi tương tự, nhưng không phải là một bản sao.
Victor Stafusa

3
Tôi thực sự vui mừng khi có người khác tạo ra một phiên bản cuộc thi phổ biến cho câu hỏi của tôi với ít tiêu chí hơn, vì tôi đã bị rách việc phải đi khi tôi viết nó.
Adam Maras

@AdamMara Vui mừng khi biết điều đó :)
chubakueno

Tôi đã bắt đầu một cuộc thảo luận mở lại trên Meta , vì câu hỏi này không nên được bình chọn chặt chẽ.
Adam Maras

Câu trả lời:


44

SVG

1kB? Sang trọng. Tôi thậm chí có thể in đẹp đầu ra thay vì xóa tất cả các khoảng trắng không cần thiết. (Các thụt đầu dòng không, tất nhiên, các tab sử dụng, mà Markdown cải để không gian, vì vậy đó là lý do số lượng char có vẻ cao hơn so với thực tế 977. Loại bỏ khoảng trắng không cần thiết giảm nó đến 861).

Các lớp phủ được xử lý chính xác bằng cách vẽ các vòng theo một hướng, sau đó áp dụng một clip và vẽ chúng theo hướng khác. Màu sắc và tỷ lệ được trích xuất từ ​​một tài liệu chính thức , vì lý do nào đó sử dụng các đường cong Bézier thay vì các vòng tròn.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="504" height="228">
    <defs>
        <clipPath id="t">
            <rect width="504" height="114" />
        </clipPath>
    </defs>
    <g fill="none" stroke-width="12">
        <g id="u" transform="translate(82,82)" stroke="#0b8ed8">
            <g id="O">
                <circle r="72" stroke="#fff" stroke-width="20" />
                <circle r="72" />
            </g>
        </g>
        <g id="y" transform="translate(167,146)" stroke="#f9a91f">
            <use xlink:href="#O" />
        </g>
        <g id="k" transform="translate(252,82)" stroke="#231f20">
            <use xlink:href="#O" />
        </g>
        <g id="g" transform="translate(337,146)" stroke="#009e59">
            <use xlink:href="#O" />
        </g>
        <g transform="translate(422,82)" stroke="#ee2049">
            <use xlink:href="#O" />
        </g>
        <g clip-path="url(#t)">
            <use xlink:href="#g" />
            <use xlink:href="#k" />
            <use xlink:href="#y" />
            <use xlink:href="#u" />
        </g>
    </g>
</svg>

Kết xuất PNG của tệp SVG


16
PS Nếu bất cứ ai muốn lập luận rằng SVG không phải là ngôn ngữ lập trình (và tôi rất có khuynh hướng đồng ý), hãy xem đây là chương trình PHP theo kiểu nhiều bài nộp PHP cho trang web này chỉ lặp lại văn bản bằng chữ.
Peter Taylor

omg nó trông tuyệt vời mặc dù. SVG thật tuyệt

39

Javascript (lõi) - 1000 trên dấu chấm. - WebKit (Chrome)

Chơi với vải.

Không chắc nó là 1024 hay 1000 K, nhưng được quản lý để giảm xuống 1000 982 940: D

Chỉ thích hợp cho trình duyệt WebKit. Chrome OK. Firefox một mớ hỗn độn. Có thể nhìn vào làm cho nó qua trình duyệt.


Mã số:

var w=window;w.onload=function(){function e(e,t){return r()*(t-e+1)+e}function d(e,t){function r(e,t,r,i){c.beginPath();c[u]="xor";c.strokeStyle="#"+e;c.arc(t,r,66,n*i[0],n*i[1]);c.stroke();c[u]="destination-atop";c.arc(t,r,66,n*i[1],n*i[0]);c.stroke()}var i=79+e,s=66+t,o=158,a=[2,1.2],f=[1.8,.8];c.lineWidth=13;r("007a9c",e,t,f);r("ffa100",i,s,a);r("000",e+=o,t,f);r("009b3a",i+=o,s,a);r("e10e49",e+=o,t,f)}var t=Math,n=t.PI,r=t.random,i,s,o=0,u="globalCompositeOperation",a=document.getElementById("c"),f=w.innerWidth,l=w.innerHeight,c=a.getContext("2d"),h=9,p=[];a.width=f;a.height=l;for(i=0;i<l;++i){p.push({x:r()*f,y:r()*l,r:e(1,3),d:e(1,l)})}setInterval(function(){c.clearRect(0,0,f,l-h);d(f/2-200,l-200);c[u]="xor";c.fillStyle="#fff";c.beginPath();o+=e(0,7)?.01:-.01;for(i=0;i<l-h;++i){s=p[i];c.moveTo(s.x,s.y);c.arc(s.x,s.y,s.r,0,n*2);s.y+=t.cos(o+s.d)+1+s.r/9;s.x+=(i%2?1:-1)*t.sin(o)*.4;if(s.x>f+7||s.x<-7||s.y>l-(h-1.2)){p[i]={x:r()*f,y:-9,r:s.r,d:s.d}}}c.fill();if(h<l/1.7)h+=l/9e3},32)}

940: Bỏ gói nó vào onloadvà dựa vào tập lệnh được chèn vào cuối bodythẻ + lỗi căn chỉnh và sửa lỗi Firefox.

function e(e,t){return r()*(t-e+1)+e}function d(e,t){function r(e,t,r,i){c.beginPath();c[u]="xor";c.strokeStyle="#"+e;c.arc(t,r,66,n*i[0],n*i[1]);c.stroke();c[u]="destination-over";c.arc(t,r,66,n*i[1],n*i[0]);c.stroke()}var i=79+e,s=66+t,o=158,a=[2,1.2],f=[1.8,.8];c.lineWidth=13;r("007a9c",e,t,f);r("ffa100",i,s,a);r("000",e+=o,t,f);r("009b3a",i+=o,s,a);r("e10e49",e+=o,t,f)}var w=window,t=Math,n=t.PI,r=t.random,i,s,o=0,u="globalCompositeOperation",a=document.getElementById("c"),f=w.innerWidth,l=w.innerHeight,c=a.getContext("2d"),h=9,p=[];a.width=f;a.height=l;for(i=0;i<l;++i,p.push({x:r()*f,y:r()*l,r:e(1,3),d:e(1,l)}));setInterval(function(){c.clearRect(0,0,f,l-h);d(f/2-158,l-200);c[u]="xor";c.fillStyle="#fff";c.beginPath();o+=e(0,7)?.01:-.01;for(i=0;i<l-h;++i){s=p[i];c.moveTo(s.x,s.y);c.arc(s.x+=(i%2?.4:-.4)*t.sin(o),s.y+=t.cos(o+s.d)+1+s.r/9,s.r,0,n*2);if(s.y>l-(h-1.2)){p[i].x=r()*f;p[i].y=-9}}c.fill();if(h<l/1.7)h+=l/9e3},32)

Vĩ cầm:

http://jsfiddle.net/ Ifnak/XSBLg/embedded/result/

http://jsfiddle.net/ Ifnak/4fSWm/5/embedded/result/

Tải trong Firefox cũng như Chrome, nhưng khá nặng về tài nguyên trong FF. Sử dụng requestAnimationFrame()đã giúp một chút, nhưng không đủ.

Lưu ý rằng tuyết nằm ở phía dưới, do đó cuộn xuống để thấy sự tăng trưởng chậm. Ban đầu có một số lớp phủ trên mặt đất, nhưng không thể làm cho nó phù hợp với 1024 chr.

Kết quả (screencast GIF chất lượng thấp):

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


2
Tốt đẹp! Nó cũng hoạt động trong IE11.
Danko Durbić

Hoạt động hoàn toàn tốt trên Firefox 27.0.1.
Nathan Osman

32

Toán học

Từ câu trả lời của tôi trong Mathicala.SE Q & A :

ring[x_, y_, v_, t_] := 
  Table[
    {1.2 y, -v x, 0} + {Cos@i, Sin@i}.{{0, -1, 0}, {1, 0, 1/4 - v/2}},
    {i, 0, 2 π, π/200}
  ] ~Tube~ t

Graphics3D[
  Riffle[
    {Cyan, Yellow, Darker @ Gray, Green, Red},
    Array[ring[Sqrt@3/2, #, # ~Mod~ 2, 0.17] &, 5, 0] ],
  Boxed -> False,
  ViewPoint -> {0, 0, ∞}
]

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

Chỉnh sửa: Trong phiên bản 10, kiểu ánh sáng mặc định đã thay đổi; để làm cho đồ họa trên một sẽ cần phải thêm Option Lighting -> "Classic"để Graphics3D.

Chơi thêm với ánh sáng để tạo ra ảnh hưởng hai chiều phẳng:

Graphics3D[
  Riffle[
    Glow /@ {Hue[.59], Hue[.13], Black, Hue[.3, 1, .7], Hue[0, 1, .85]},
    Array[ring[Sqrt@3/2, #, # ~Mod~ 2, 0.13] &, 5, 0] ],
  Boxed -> False,
  ViewPoint -> {0, 0, ∞},
  Lighting -> None
]

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


Đối với Oliver, người đã nói kết quả đầu tiên của tôi là "quá 3D-ish", đây là kết xuất 2D thực tế thông qua mã của jVincent với phép tái cấu trúc của tôi, cũng từ chuỗi được liên kết:

ringSegment[mid_, deg_, color_] := {CapForm["Butt"],
  Thickness[0.042], White,                   Circle[mid, 1, deg],
  Thickness[0.03],  RGBColor @@ (color/255), Circle[mid, 1, deg + {-0.1, 0.1}]}

blue   = {  0, 129, 188};
yellow = {255, 177,  49};
black  = { 35,  34,  35};
green  = {  0, 157,  87};
red    = {238,  50,  78};

Graphics @ GraphicsComplex[
  {{2.5, 0}, {1.3, -1}, {0, 0}, {5, 0}, {3.8, -1}},
  ringSegment @@@
   {{1, {0, 5/4 π},      black},
    {2, {0, π},          yellow},
    {3, {0, 2 π},        blue},
    {2, {-π 9/8, 1/4 π}, yellow},
    {4, {0, 5/4 π},      red},
    {5, {0, 7/8 π},      green},
    {1, {5/4 π, 5/2 π},  black},
    {5, {7/8 π, 2 π},    green},
    {4, {-3/4 π, 1/4 π}, red}}
 ]

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


@Oliver Cập nhật chỉ dành cho bạn.
Mr.Wizard

Ồ Bạn có thể cho tôi biết nơi bạn có thể tải xuống Mathmatica?
Oliver Ni

@Oliver Đây là một sản phẩm thương mại và khá đắt tiền ngay cả đối với cá nhân, sử dụng không phổ biến, nhưng nếu bạn vẫn quan tâm, bạn có thể nhận phiên bản dùng thử 15 ngày từ: wolfram.com/mathIALa/trial
Mr.Wizard

1
@Oliver bây giờ bạn có thể nhận phiên bản Mathicala miễn phí nếu bạn có mâm xôi pi
trichoplax

@trichoplax Bây giờ mở đám mây cho phép một chương trình khiêm tốn tự do chạy trong một giao diện trình duyệt: develop.open.wolframcloud.com/app/view/newNotebook
Mr.Wizard

28

Ruby, 321

Đáng buồn thay, một nguyên thủ quốc gia nhất định dường như là chủ đề chính của hầu hết các tin tức Olympic cho đến nay. Vì vậy, đây là logo tự do của tôi (linh vật?) Cho Thế vận hội 2014.

w=?$;"UW[NASY_LAQVgKAPSlKAOKGLnHAOIHMnHAOHILpHANHJLqFAOFLKAVMAVMAWKAWLAWKAMIHFGK
NFMLAMGOFFGAGJPGFIAHGFFOWPPAIGFFKQFOKMJHAIJJQGNLGFMAJIJNFIGHFHSGASMMFHHASHGGPK
MFJHTKARJSKAMGFOPJAPPOJAPRKLAQRJLAQTHLAR^LFARaARaAR]HFASZAS[FFRGAT_QGAUZGFFG
U]AQGITAPHKPANKKSALMNSGGAJPOP".codepoints{|r|r-=69;$><<(r<0??\n:(w=w==?$?' ':?$)*r)}

Đầu ra: (Sao lưu và nheo mắt. Xin lỗi vì kết xuất nguyên thủy nhưng anh ấy xứng đáng không tốt hơn.)

Putin


6
$$$, buồn nhưng có thật: D
ybeltukov

25

Bash + ImageMagick

convert \
  -size 330x150 xc:white -strokewidth 10 -fill none \
  -stroke \#0885c2 -draw 'arc 100,100 10,10 0,360' \
  -stroke black -draw 'arc 210,100 120,10 0,360' \
  -stroke \#ed334e -draw 'arc 320,100 230,10 0,360' \
  -stroke \#fbb132 -draw 'arc 155,140 65,50 0,360' \
  -stroke \#1c8b3c -draw 'arc 265,140 175,50 0,360' \
  -stroke \#0885c2 -draw 'arc 100,100 10,10 -20,10' \
  -stroke black -draw 'arc 210,100 120,10 -20,10' -draw 'arc 210,100 120,10 90,120' \
  -stroke \#ed334e -draw 'arc 320,100 230,10 90,120' \
  x:

Đầu ra mẫu:

logo trò chơi olympic


23

FreePascal

Thế vận hội mùa đông? Làm thế nào về một số bông tuyết fractal thay vì vòng thông thường.

Đệ quy cho nhánh trung tâm khá rõ ràng: (dx, dy) = 0,5 (dx, dy). Các nhánh trái và phải dựa trên phép quay bằng phép nhân ma trận:

x = x cos (a) - y sin (a)

y = x sin (a) + y cos (a)

1/4 = 0,5 cos (60) và 7/16 là xấp xỉ tốt 0,5 sin (60).

uses graph;
var gd, gm : integer;
var n:integer;

Procedure tree(x,y,dx,dy: integer);
begin
  if dx*dx+dy*dy>0 then begin
    line(x, y, x+dx, y+dy);
    tree(x+dx, y+dy, dx div 2, dy div 2);
    tree(x+dx, y+dy, dx div 4 + dy*7 div 16, dy div 4 - dx*7 div 16);
    tree(x+dx, y+dy, dx div 4 - dy*7 div 16, dy div 4 + dx*7 div 16);
  end;
end;

begin
  gd := D4bit;
  gm := m640x480;
  initgraph(gd,gm,'');
  setbkcolor(white); clearviewport;
  setbkcolor(black); setlinestyle(0,0,3);

  For n:=-1 to 1  do  begin
    setColor(yellow);
    tree(215,240-120*n,0,120*n);
    setColor(lightgreen);
    tree(425,240-120*n,0,120*n);
    setColor(black);
    tree(320,120-120*n,0,120*n);
    setColor(lightred);
    tree(530,120-120*n,0,120*n);
    setColor(lightblue);
    tree(110,120-120*n,0,120*n);
  end;
  readln;
  closegraph;
end.

. .

hình ảnh


Tốt đẹp. Nếu bạn có thể thêm một lượng ngẫu nhiên tốt vào thuật toán, bạn có thể sử dụng lại nó trong Hãy mô phỏng một bông tuyết ngẫu nhiên .
thao tác

16

Java

Tương tự như câu trả lời SVG của tôi, nhưng

  • Sử dụng hai clip, để tránh sự khác biệt nhỏ do vẽ hai lần với bí danh.
  • Vì Java có các vòng lặp thực tế, nên cấu trúc đẹp hơn một chút.

Lưu ý rằng tôi đã không thử chơi golf, mặc dù có khả năng có một số mánh khóe thú vị (như -57*~dirthay vì 57*(1+dir). Nó ở mức 923 chars, nhưng chơi golf xuống tới 624 khá dễ dàng.

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;

public class Rings {
    public static void main(String[] args) throws Exception {
        int[] pal = new int[] {0x0b8ed8, 0xf9a91f, 0x231f20, 0x009e59, 0xee2049};
        BufferedImage img = new BufferedImage(505, 229, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g = img.createGraphics();
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        for (int dir = -1; dir < 2; dir += 2) {
            g.setClip(0, 57 * (1 + dir), 520, 114);
            for (int ring = 2 - 2 * dir; ring != 2 + 3 * dir; ring += dir) {
                for (int subring = 0; subring < 2; subring++) {
                    g.setColor(new Color(pal[ring] | (subring - 1)));
                    g.setStroke(new BasicStroke(20 - 8 * subring));
                    g.drawOval(10 + 85 * ring, 10 + 64 * (ring & 1), 144, 144);
                }
            }
        }
        ImageIO.write(img, "PNG", new File("rings.png"));
    }
}

PNG được hiển thị bởi chương trình Java


16

Hàng hóa 64 CƠ BẢN

Một lần nữa, một câu trả lời C64, nhưng lần này tôi được phép sử dụng các họa tiết ! Yay!

Tôi nhớ nếu bạn muốn sử dụng các họa tiết, bạn sẽ bắt đầu chương trình của mình với rất nhiều DATAcâu lệnh nhàm chán . Để xác định mẫu sprite đơn sắc "độ phân giải cao" (24x21 pixel), bạn cần 63 byte. Thực sự có một trình soạn thảo sprite trực tuyến tính toán DATA cho bạn, vì vậy:

10 DATA 0,254,0,3,255,128,7,255,192,15,131,224,30,0,240,60,0,120,56,0,56,120,0
20 DATA 60,112,0,28,112,0,28,112,0,28,112,0,28,112,0,28,120,0,60,56,0,56,60,0
30 DATA 120,30,0,240,15,131,224,7,255,192,3,255,128,0,254,0

Tôi cũng sẽ cần thêm một số DATA cho màu sắc và vị trí. Tôi vừa sao chép từ câu trả lời của mình cho câu hỏi Logo Olympic gốc :

40 DATA 6,0,0,0,2,0,2,4,0,7,1,1,5,3,1 

Sau đó, bạn thường đặt V=53248. Đây 53248phải là một con số quan trọng, vì tôi vẫn còn nhớ nó 25 năm sau :) Hóa ra đó là địa chỉ cơ sở của VIC-II (Bộ điều khiển giao diện video):

50 V=53248

Sau đó tôi đọc mẫu sprite vào bộ nhớ bắt đầu từ địa chỉ 832. Cảm thấy kỳ lạ khi chỉ ghi vào một vị trí bộ nhớ, không phân bổ, không new, không có gì như vậy :) Địa chỉ bắt đầu cần phải là bội số của 64.

60 FOR I=0 TO 62
70 READ D:POKE 832+I,D
80 NEXT I

Tôi sẽ sử dụng cùng một mô hình cho tất cả các họa tiết.

90 FOR I=0 TO 4
100 READ C,X,Y

Clà mã màu XYlà vị trí ngang và dọc của các vòng tròn.

Một vài POKEs nữa là cần thiết:

110 POKE V+I*2,150+X*11
120 POKE V+I*2+1,130+Y*10

V+0, V+2, V+4, Vv ... là những địa điểm ngang của mỗi sprite, trong khi V+1, V+3, V+5... là thẳng đứng. Các màu sprite bắt đầu tại thanh ghi V+39:

130 POKE V+39+I,C

Các con trỏ dữ liệu sprite bắt đầu tại 2040và vì dữ liệu bắt đầu tại 832, chúng tôi nhận được 832/64= 13, vì vậy:

140 POKE 2040+I,13
150 NEXT I

Để bật các sprite tôi đặt bit 0-4của thanh ghi V+21. Tôi cũng đã thay đổi nền thành màu trắng, vì vậy chúng ta có thể thấy vòng tròn màu xanh.

160 POKE 53281,1
170 POKE V+21,31

Đó là nó!

Thế vận hội Olympic


Tuyệt quá! Không biết tôi có nhớ chính xác không, nhưng có lẽ bạn có thể nhân đôi (về phần cứng) kích thước x / y của các họa tiết. Tôi chắc rằng bạn có thể làm điều này trên C128.
Gabriele D'Antona

Yup, bạn có thể đặt các bit V+23cho chiều cao gấp đôi và V+29cho chiều rộng gấp đôi. (bit #x cho sprite #x).
Danko Durbić

11

LaTeX / TikZ

Kích thước: 876 byte (12 dòng, dòng có 72 ký tự và cuối dòng)

\documentclass{standalone}\usepackage{tikz}\def\W{3.762bp}\def\R{71.682
bp}\def\D{12.9041bp}\usetikzlibrary{calc,hobby}\def\Y{-71.7013bp}\def\X
{169.5538bp}\begin{document}\tikz[use Hobby shortcut,every path/.style=
{line width=\W,double distance=\D, white}]{\def\Z{coordinate}\path(0,0)
\Z(A)++(\X,0)\Z(C)++(\X,0)\Z(E)($(A)!.5!(C)$)++(0,\Y)\Z(B)++(\X,0)\Z(D)
;\def~#1#2{\definecolor{#1}{cmyk}{#2}} ~A{1,.25,0,0}~B{0,.342,.91,0}~C{
0,0,0,1}~D{1,0,.91,.06}~E{0,.94,.65,0}\def~#1#2#3#4{\draw[save Hobby p%
ath={#1},double=#1,overlay](#1)+([closed] 225:\R)..+([#2]315:\R)..+([#3
]45:\R)..+([#4]135:\R); \path let\n!={\R+\D/2}in(#1)+(-\n!,0)+(\n!,0)+(
0,-\n!)+(0,\n!);}\def\0#1{\draw[double=#1,restore and use Hobby path={%
#1}{disjoint,invert soft blanks}];}~A{}{blank=soft}{}~B{}{}{blank=soft}
~C{}{blank=soft}{}\0B\0A~E{blank=soft}{}{}~D{}{}{}\0C\0E}\end{document}

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

Kích thước: 817 byte trong một dòng và với hai tối ưu hóa:

  • Tùy chọn tikzcủa lớp standalone, xem bình luận của Wheat Wizard.
  • Nhiều cách sử dụng soft=blankcó thể được rút ngắn bằng cách xác định một kiểu b.
\documentclass[tikz]{standalone}\def\W{3.762bp}\def\R{71.682bp}\def\D{12.9041bp}\usetikzlibrary{calc,hobby}\def\Y{-71.7013bp}\def\X{169.5538bp}\begin{document}\tikz[use Hobby shortcut,every path/.style={line width=\W,double distance=\D,white},b/.style={blank=soft}]{\def\Z{coordinate}\path(0,0)\Z(A)++(\X,0)\Z(C)++(\X,0)\Z(E)($(A)!.5!(C)$)++(0,\Y)\Z(B)++(\X,0)\Z(D);\def~#1#2{\definecolor{#1}{cmyk}{#2}} ~A{1,.25,0,0}~B{0,.342,.91,0}~C{0,0,0,1}~D{1,0,.91,.06}~E{0,.94,.65,0}\def~#1#2#3#4{\draw[save Hobby path={#1},double=#1,overlay](#1)+([closed]225:\R)..+([#2]315:\R)..+([#3]45:\R)..+([#4]135:\R); \path let\n!={\R+\D/2}in(#1)+(-\n!,0)+(\n!,0)+(0,-\n!)+(0,\n!);}\def\0#1{\draw[double=#1,restore and use Hobby path={#1}{disjoint,invert soft blanks}];}~A{}b{}~B{}{}b~C{}b{}\0B\0A~E b{}{}~D{}{}{}\0C\0E}\end{document}

LaTeX / TikZ (phiên bản có thể đọc được)

Các phiên bản dài hơn sau đây có lẽ dễ hiểu hơn.

  • Sự chồng chéo của các vòng được xử lý bằng cách vẽ các vòng có các đoạn trống trước. Sau đó, ở giai đoạn sau, các vòng được vẽ lại, nhưng lần này các đoạn trống được lấp đầy và các đoạn khác đã được vẽ của các vòng vẫn không bị ảnh hưởng. Do đó cắt không được sử dụng ở tất cả.

  • Vòng có lề trắng được vẽ bởi vòng tròn với một đường đôi. Khu vực giữa các đường được lấp đầy với màu của vòng và các đường đôi mỏng hơn tạo thành rìa trắng bên ngoài và bên trong.

  • Màu sắc và kích thước được lấy từ mô tả trang PDF của trang 5 của tài liệu chính thức (xem câu trả lời của Peter Tayler).

\nofiles % .aux file is not needed
\documentclass[tikz]{standalone}
\usetikzlibrary{calc}
\usetikzlibrary{hobby}

\newcommand*{\xshift}{169.5538bp}
\newcommand*{\yshift}{-71.7013bp}
\newcommand*{\radius}{71.6821bp}
\newcommand*{\whitelinewidth}{3.762bp}
\newcommand*{\colorlinewidth}{12.9041bp}

\definecolor{color@A}{cmyk}{1, .25, 0, 0}
\definecolor{color@B}{cmyk}{0, .342, .91, 0}
\definecolor{color@C}{cmyk}{0, 0, 0, 1}
\definecolor{color@D}{cmyk}{1, 0, .91, .06}
\definecolor{color@E}{cmyk}{0, .94, .65, 0}

\begin{document}
  \begin{tikzpicture}[
    use Hobby shortcut,
    every path/.style = {
      line width      = \whitelinewidth,
      double distance = \colorlinewidth,
      white,
    },
  ]
    % define center coordinates for the five rings
    \path
      (0,0) coordinate (center@A)
      ++(\xshift, 0) coordinate (center@C)
      ++(\xshift, 0) coordinate (center@E)
      ($(center@A)!.5!(center@C)$) ++(0, \yshift) coordinate (center@B)
      ++(\xshift, 0) coordinate (center@D)
    ;
    % \drawring draws the first part of the ring with blank parts
    \newcommand*{\drawring}[4]{%
      \draw[
        save Hobby path = {path@#1},
        double          = {color@#1},
        overlay,
      ]
        (center@#1)
        +([closed] 225:\radius) .. +([#2] 315:\radius) ..
        +([#3] 45:\radius) .. +([#4] 135:\radius)
      ;
    }
    % \finishring draws the blank parts of the rings
    \newcommand*{\finishring}[1]{%
      \draw[
        double                     = {color@#1},
        restore and use Hobby path = {path@#1}{
          disjoint, 
          invert soft blanks
        },
      ];
    }
    \drawring{A}{}{blank=soft}{}
    \drawring{B}{}{}{blank=soft}
    \drawring{C}{}{blank=soft}{}
    \finishring{B}
    \finishring{A}
    \drawring{E}{blank=soft}{}{}
    \drawring{D}{}{}{}
    \finishring{C}
    \finishring{E}
    % set calculated bounding box
    \useasboundingbox
      let \n{r} = {\radius + \colorlinewidth/2}
      in
        (center@A) +(-\n{r}, \n{r}) % upper left corner
        (center@B -| center@E) +(\n{r}, -\n{r}) % lower right corner
    ;
  \end{tikzpicture}
\end{document}

Để tiết kiệm một vài byte, bạn có thể sử dụng \documentclass[tikz]{standalone}nhờ mẹo này .
Phù thủy lúa mì

@WheatWizard Cảm ơn, câu trả lời được cập nhật và rút ngắn hơn nữa bằng cách xác định kiểu bđể tránh độ dài blank=softđược sử dụng bốn lần.
Heiko Oberdiek

10

C ++ 1024 byte

Cập nhật: Bây giờ với khử răng cưa. Mã đã được loại bỏ phần nào trong khi vẫn phù hợp với (chính xác) 1K.

Không sử dụng bất kỳ chức năng thư viện nào ngoại trừ chức năng Ostream để ghi tệp đầu ra.

#include <fstream>

namespace {
typedef double d;

int w=512;
d a=1./6,g=1./w,h=1./72,j=h+g,k=h-g,r=5./36;

struct p{d x,y;}ps[]={{5*a,a},{4*a,2*a},{3*a,a},{2*a,2*a},{a,a}};
struct c{unsigned char r,g,b;}cs[]={{237,51,78},{28,139,60},{0,0,0},{251,177,50},{8,133,194}};

d abs(d x) {return x<0?-x:x;}

d sqrt(d x) {
    d e=1e-6,y=1;
    for(;abs(y*y-x)>e;y=.5*(y+x/y));
    return y;
}

d dist(p c,p z) {
    d u=z.x-c.x,v=z.y-c.y; 
    return abs(r-sqrt(u*u+v*v));
}

c lerp(c a,c b,d t) {
    auto l=[=](d a,d b){return a+(b-a)*t;}; 
    return {l(a.r,b.r),l(a.g,b.g),l(a.b,b.b)};
}

d smoothstep(d z) {
    z=(z-j)/(k-j);
    z=z<0?0:z>1?1:z;
    return z*z*(3-2*z);
}

c color(p z) {
    c o{255,255,255};
    for(int i=0,j;i<5;++i){
        j=z.y<.25?i:4-i;
        o=lerp(o,cs[j],smoothstep(dist(ps[j],z)));
    }
    return o;
}
}

int main() {
    std::ofstream o("r.ppm",std::ofstream::binary);
    o<<"P6 "<<w<<" "<<w/2<<" 255\n";
    for(int y=0;y<w/2;++y)
        for(int x=0;x<w;++x)
            o.write((char*)&color(p{x*g,y*g}),3);;
}

Xuất ra tệp .ppm:

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


1
Đây không phải là môn đánh gôn : bạn có thể thoải mái làm cho mã của mình dễ đọc, miễn là nó phù hợp với 1kB.
Peter Taylor

1 cho thậm chí không bao gồm <cmath>
epidemian

10

R, 70 ký tự

Sử dụng số liệu thống kê CRAN-R.

l=c(1,9);plot(3:7,c(6,4,6,4,6),col=c(4,7,1,3,2),cex=10,ylim=l,xlim=l)

Âm mưu R


9

GLSL

Tôi cảm thấy như mình đến bữa tiệc muộn một chút, nhưng có lẽ tôi có thể bù đắp điều đó bằng lần gửi GLSL đầu tiên trên trang web này. Nó có nghĩa là được sử dụng như một shader mảnh cho một nguyên thủy lấp đầy màn hình và mong đợi độ phân giải khung nhìn trong iResolutionđồng phục.

Màu sắc và vị trí được "mượn" từ đệ trình của Peter Taylor . Tôi đã phải rút ngắn một số tên biến để có dưới 1024 ký tự, nhưng tôi hy vọng nó vẫn có thể đọc được.

Xem nó tại Shadertoy (nếu trình duyệt của bạn hỗ trợ WebGL).

uniform vec3 iResolution;

float circle(vec2 pos, float r) {
    return clamp(r - distance(gl_FragCoord.xy, pos), 0., 1.);
}

float ring(vec2 pos, float r, float d) {
    return circle(pos, r + d) * (1. - circle(pos, r - d));
}

void paint(vec3 color, float a) {
    gl_FragColor.rgb = mix(gl_FragColor.rgb, color, a);
}

void main() {
    struct r_t {
        vec2 pos;
        vec3 col;
    } rs[5];
    rs[0] = r_t(vec2( 82, 146), vec3(.04, .56, .85));
    rs[1] = r_t(vec2(167,  82), vec3(.98, .66, .12));
    rs[2] = r_t(vec2(252, 146), vec3(.14, .12, .13));
    rs[3] = r_t(vec2(337,  82), vec3(.00, .62, .35));
    rs[4] = r_t(vec2(422, 146), vec3(.93, .13, .29));

    float s = min(iResolution.x / 504., iResolution.y / 228.);
    vec2 b = (iResolution.xy - vec2(504, 228) * s) * .5;
    bool rev = gl_FragCoord.y > iResolution.y * .5;

    gl_FragColor.rgb = vec3(1);

    for (int i = 0; i < 5; ++i) {
        r_t r = rev ? rs[4 - i] : rs[i];
        paint(vec3(1), ring(r.pos * s + b, 72. * s, 11. * s));
        paint(r.col,   ring(r.pos * s + b, 72. * s,  6. * s));
    }
}

Kết quả kết xuất


5

Toán học

Tôi đã thay thế câu trả lời ban đầu của mình bằng câu trả lời dựa trên các vùng và giao điểm của chúng. Kích thước mã là 973 byte, không được mã hóa.

Vùng 1-5 là các vòng. Các vòng có bán kính trong là 2,5 đơn vị; bán kính ngoài là 3 đơn vị. Tỷ lệ giữa tỷ lệ bên trong và bên ngoài, và logic chung của phương pháp này sẽ được tìm thấy ở đây .

i = Implicit Region;
R1 = i[6.25 <= (x + 6.4)^2 + y^2 <= 9 , {x, y}];
R2 = i[6.25 <= x^2 + y^2 <= 9 , {x, y}];
R3 = i[6.25 <= (x - 6.4)^2 + y^2 <= 9 , {x, y}];
R4 = i[6.25 <= (x + 3.2)^2 + (y + 3)^2 <= 9 , {x, y}];
R5 = i[6.25 <= (x - 3.2)^2 + (y + 3)^2 <= 9 , {x, y}];

Tại sao chúng ta không thể đơn giản in ra 5 chiếc nhẫn mà không tính đến các lớp.

Nếu chúng ta vẽ những chiếc nhẫn này ngay lập tức, chúng không lồng vào nhau. Lưu ý rằng vòng màu vàng nằm trên đỉnh các vòng màu xanh và đen; vòng màu xanh lá cây nằm trên đỉnh của hai vòng màu đen và đỏ.

Show[{RegionPlot[R1, PlotStyle -> Blue, BoundaryStyle -> Blue],
  RegionPlot[R2, PlotStyle -> Black, BoundaryStyle -> Black],
  RegionPlot[R3, PlotStyle -> Red, BoundaryStyle -> Red],
  RegionPlot[R4, PlotStyle -> Yellow, BoundaryStyle -> Yellow],
  RegionPlot[R5, PlotStyle -> Green, BoundaryStyle -> Green]
  }, PlotRange -> All, PerformanceGoal -> "Quality", 
 ImageSize -> Large, AspectRatio -> 1/2,
 Frame -> False]

trên


Lật màu tại 4 giao điểm của vòng.

Vùng 6, 8, 10 và 12 là các hình chữ nhật phục vụ để xác định giao điểm nào của hai vòng sẽ tập trung vào.

Vùng 7, 9, 11 và 13 là "vòng chồng chéo" trong đó vòng ở phía dưới phải ở trên cùng.

R6 = Rectangle[{-5, -1}, {-2, 1}];
R7 = RegionIntersection[R1, R4, R6];    
R8 = Rectangle[{2, -1}, {4, 1}];
R9 = RegionIntersection[R2, R5, R8]; 
R10 = Rectangle[{-2, -3}, {2, -2}];
R11 = RegionIntersection[R2, R4, R10];  
R12 = Rectangle[{5, -3}, {7, -2}];
R13 = RegionIntersection[R3, R5, R12];

Show[{RegionPlot[R1, PlotStyle -> Blue, BoundaryStyle -> Blue],
  RegionPlot[R2, PlotStyle -> Black, BoundaryStyle -> Black],
  RegionPlot[R3, PlotStyle -> Red, BoundaryStyle -> Red],
  RegionPlot[R4, PlotStyle -> Yellow, BoundaryStyle -> Yellow],
  RegionPlot[R5, PlotStyle -> Green, BoundaryStyle -> Green],
  RegionPlot[R7, PlotStyle -> Blue, BoundaryStyle -> Blue],
  RegionPlot[R9, PlotStyle -> Black, BoundaryStyle -> Black],
  RegionPlot[R11, PlotStyle -> Black, BoundaryStyle -> Black],
  RegionPlot[R13, PlotStyle -> Red, BoundaryStyle -> Red]}, 
PlotRange -> All, PerformanceGoal -> "Quality", 
 ImageSize -> Large, AspectRatio -> 1/2,
 Frame -> False]

Nhẫn


Những ngã tư nào có màu sắc của chúng bị lật?

Phần sau đây nhấn mạnh các vùng giao nhau nơi màu sắc được "lật". Điều này đã được thực hiện bằng cách thay đổi các BoundaryStylevùng 7, 9, 11 và 13 thành White.

nổi bật


4
Bạn không thể làm một cái gì đó thẩm mỹ tốt hơn trong 1k? những ngã tư đó thật xấu xí!
Gabriele D'Antona

1
@friol, tôi đã cải thiện các giao lộ bằng cách sử dụng các vùng.
DavidC

1
Mất một năm rưỡi, nhưng cuối cùng bạn đã tìm ra cách tạo ra các giao lộ đẹp: D
Beta Decay

Hôm qua tôi đã thấy một số vòng tròn Olympic và nhận ra rằng tôi có thể sử dụng các khu vực để giải quyết vấn đề giao lộ. Những người trước đó quá xấu để rời đi như họ.
DavidC

3

Javascript (ba.js) - 910 byte

Với một phần tử html, hàm này sẽ tạo các vòng như các đối tượng 3D và sau đó hiển thị hình ảnh tĩnh cho phần tử. Hoạt động trong các trình duyệt hỗ trợ WebGL. VĨ CẦM

function Logo(l){
    var s, c, r;
    s = new THREE.Scene();
    c = new THREE.PerspectiveCamera(45, 4/3, 1, 500);
    c.position.set(75,0,300);
    c.lookAt(new THREE.Vector3(0,0,0));
    var rings = [
        new THREE.Mesh(ring(), mat(0x0885c2)),
        new THREE.Mesh(ring(), mat(0xfbb132)),
        new THREE.Mesh(ring(), mat(0x000000)),
        new THREE.Mesh(ring(), mat(0x1c8b3c)),
        new THREE.Mesh(ring(), mat(0xed334e))
    ];
    for(var i = 0; i < rings.length; i++){
        s.add(rings[i]);
        rings[i].position.set(i*55-125,-(i%2)*50,0);
        rings[i].rotation.set(0,(i%2*2-1)*.18,0,'xyz');
    }
    r = new THREE.WebGLRenderer();
    r.setSize(400, 300);
    l.appendChild(r.domElement);
    r.render(s, c);
}
function ring(){ return new THREE.TorusGeometry(50, 8, 16, 32); }
function mat(color){ return new THREE.MeshBasicMaterial({color: color}); }


2

C ++ w / SFML (1003 bao gồm khoảng trắng)

Không nhỏ bằng bất kỳ sự tưởng tượng nào, nhưng giữ được mức độ khó đọc nhất có thể và vẫn dưới 1k.

#include <SFML/Graphics.hpp>

using namespace sf;

int main() {
    CircleShape circles[5];
    Color backcolor(255,255,255);
    Color colors[5] = {
        Color(0x0b,0x8e,0xd8),
        Color(0xf9,0xa9,0x1f),
        Color(0x23,0x1f,0x20),
        Color(0x00,0x9e,0x59),
        Color(0xee,0x20,0x49),
    };

    for (int i = 0; i < 5; i++) {
        circles[i] = CircleShape(144, 60);
        circles[i].setPosition(15+160*i, 46+160*(i&1));
        circles[i].setFillColor(Color::Transparent);
        circles[i].setOutlineColor(colors[i]);
        circles[i].setOutlineThickness(-16);
    }

    RenderWindow window(VideoMode(960, 540), L"Olympic Logo", Style::Close);

    while (window.isOpen()) {
        Event event;

        while (window.pollEvent(event))
            if (event.type == Event::Closed)
                window.close();

        window.clear(backcolor);

        for (int i = 0; i < 5; i++)
            window.draw(circles[i]);

        window.display();
    }

    return 0;
}

Chỉnh sửa: Màu sắc được cập nhật dựa trên đệ trình SVG của @Peter Taylor.


1

Delphi

  Canvas.Pen.Width := 10;
  Canvas.Brush.Style:=bsClear;//To prevent solid background
  Canvas.Pen.Color:=clBlue; Canvas.Ellipse(20,30,220,230);
  Canvas.Pen.Color:=clBlack; Canvas.Ellipse(240,30,440,230);
  Canvas.Pen.Color:=clRed; Canvas.Ellipse(460,30,660,230);
  Canvas.Pen.Color:=clYellow; Canvas.Ellipse(130,130,330,330);
  Canvas.Pen.Color:=clGreen; Canvas.Ellipse(350,130,550,330);

Kết quả

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


0

đã thực hiện một giải pháp dựa trên phiên bản Java Swing GUI UltraGolfed (696 charas)

import java.awt.Color;import java.awt.Graphics;import javax.swing.JFrame;import javax.swing.JPanel;class A extends JFrame{public A(){JPanel j=new JPanel(){protected void paintComponent(Graphics g){;((java.awt.Graphics2D)g).setStroke(new java.awt.BasicStroke(3));g.setColor(new Color(0xb,0x8e,0xd8));g.drawOval(10, 10, 80, 80);g.setColor(new Color(0xf9,0xa9,0x1f));g.drawOval(50,40,80,80);g.setColor(new Color(0x23,0x1f,0x20));g.drawOval(90, 10, 80, 80);g.setColor(new Color(0,0x9e,0x59));g.drawOval(130,40,80,80);g.setColor(new Color(0xee,0x20,0x49));g.drawOval(170, 10, 80, 80);}};j.setBounds(0,0,600,400);setSize(600,400);add(j);}public static void main(String[]a){new A().setVisible(true);}}

Bán nén một: (971)

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
class A extends JFrame
{
    public A()
    {
        JPanel j = new JPanel(){
        protected void paintComponent(Graphics g)
        {;
            ((java.awt.Graphics2D)g).setStroke(new  java.awt.BasicStroke(3));
            g.setColor(new Color(0xb,0x8e,0xd8));
            g.drawOval(10, 10, 80, 80);
            g.setColor(new Color(0xf9,0xa9,0x1f));
            g.drawOval(50,40,80,80);
            g.setColor(new Color(0x23,0x1f,0x20));
            g.drawOval(90, 10, 80, 80);
            g.setColor(new Color(0,0x9e,0x59));
            g.drawOval(130,40,80,80);
            g.setColor(new Color(0xee,0x20,0x49));
            g.drawOval(170, 10, 80, 80);}};
        j.setBounds(0,0,600,400);
        setSize(600,400);
        add(j);
    }
    public static void main(String[]a)
    {
        new A().setVisible(true);
    }
}

Bạn có thể thêm một ảnh chụp màn hình?
Paŭlo Ebermann


0

Thông số kỹ thuật

Mỗi vòng được tạo thành từ một vòng tròn bên trong / bên ngoài, sau đó tràn ngập.

Phải tìm các giao điểm bằng tay và điền vào các giao điểm đó một cách riêng lẻ (vì vậy bạn vẫn có thể thấy một số dòng giữa chúng).

1 INK 0: PAPER 15: CLS: LET r=50
2 FOR x=1 TO 3
3 CIRCLE x*100,100,r: CIRCLE x*100,100,r-10
4 IF x<3 THEN CIRCLE (x*100)+50,150,r: CIRCLE (x*100)+50,150,r-10
5 NEXT x
6 INK 0: FILL 165,130: FILL 195,145: FILL 200,55: FILL 215,145: FILL 245,105
7 INK 9: FILL 100,55: FILL 130,130: FILL 145,105
8 INK 10: FILL 270,135: FILL 295,145: FILL 300,55
9 INK 12: FILL 205,145: FILL 215,120: FILL 250,195: FILL 255,105: FILL 280,120
10 INK 14: FILL 105,145: FILL 110,125: FILL 150,195: FILL 155,105: FILL 190,130

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.