โลโก้กีฬาโอลิมปิก - รุ่นฟรีสไตล์ [ปิด]


30

ด้วยจิตวิญญาณที่คล้ายกันกับคำถามนี้ภารกิจของคุณคือสร้างโลโก้ที่ดูดีที่สุดด้วยรหัสสูงสุด 1K

กฎ:

  1. อย่างน้อยที่สุด 1K ของรหัส (รวม) ไม่มีข้อมูลภายนอก

  2. คำตอบที่มีผู้โหวตมากที่สุดเป็นผู้ชนะ

มีความสุข!


6
ดีเขาทำรัฐโดยตรง "ในจิตวิญญาณที่คล้ายกันเป็นคำถามนี้ " ดังนั้นเขาจึงพูดว่า "เฮ้ฉันรู้ว่านี่คือซ้ำกัน": D
Mike Koch

5
เกณฑ์การชนะที่แตกต่างกัน ดังนั้นจึงเป็นคำถามที่คล้ายกัน แต่ไม่ซ้ำกัน
Victor Stafusa

3
จริง ๆ แล้วฉันดีใจที่มีคนอื่นสร้างคำถามรุ่นความนิยมของฉันที่มีเกณฑ์น้อยกว่าเพราะฉันขาดวิธีที่จะไปเมื่อฉันเขียนมัน
Adam Maras

@AdamMaras ดีใจที่ได้ยินว่า :)
chubakueno

ฉันเริ่มการสนทนาอีกครั้งบน Metaเนื่องจากคำถามนี้ไม่ควรได้รับการโหวตอย่างใกล้ชิด
Adam Maras

คำตอบ:


44

SVG

1KB? หรูหรา ฉันยังสามารถพิมพ์ผลลัพธ์ได้มากกว่าการลบช่องว่างที่ไม่จำเป็นออกทั้งหมด (การเยื้องแน่นอนใช้แท็บซึ่ง Markdown แปลงเป็นช่องว่างดังนั้นนั่นเป็นสาเหตุที่จำนวนถ่านอาจดูสูงกว่า 977 จริงการลบช่องว่างที่ไม่จำเป็นลดลงเหลือ 861)

การทับซ้อนนั้นได้รับการจัดการอย่างถูกต้องโดยการวาดวงแหวนในทิศทางเดียวจากนั้นใช้คลิปและวาดในทิศทางอื่น สีและอัตราส่วนถูกดึงออกมาจากเอกสารอย่างเป็นทางการซึ่งด้วยเหตุผลบางอย่างใช้Bézier curves แทนที่จะเป็นวงกลม

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

PNG render ของไฟล์ SVG


16
PS หากใครต้องการที่จะโต้แย้งว่า SVG ไม่ใช่ภาษาการเขียนโปรแกรม (และฉันอยากจะเห็นด้วยอย่างมาก) ให้พิจารณาโปรแกรม PHP นี้ในรูปแบบของการส่ง PHP จำนวนมากไปยังเว็บไซต์นี้
ปีเตอร์เทย์เลอร์

มันดูน่าอัศจรรย์ทีเดียว SVG เป็นคนดี

39

Javascript (หลัก) - 1,000 จุด - WebKit (Chrome)

เล่นกับผืนผ้าใบ

ไม่แน่ใจว่าเป็น 1024 หรือ 1,000 ใช้Kสำหรับหรือไม่ แต่จัดการเพื่อลดให้เหลือ1000 982 940: D

เหมาะสำหรับเบราว์เซอร์ WebKit เท่านั้น Chrome ตกลง Firefox เป็นระเบียบ อาจทำให้เบราว์เซอร์ข้าม


รหัส:

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:วางไว้ในonloadทับและพึ่งพาสคริปต์ที่ถูกแทรกที่ท้ายbodyแท็ก + การจัดตำแหน่งบั๊กและแก้ไข 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)

ซอ:

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

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

โหลดใน Firefox และ Chrome แต่ค่อนข้างหนักในทรัพยากรใน FF การใช้requestAnimationFrame()ช่วยสักหน่อย แต่ไม่เพียงพอ

โปรดทราบว่าหิมะวางอยู่ด้านล่างเลื่อนลงเพื่อดูการเจริญเติบโตช้า ในขั้นต้นมีการทาสีทับลงบนพื้น แต่ไม่สามารถทำให้พอดีกับ 1024 chr

ผลลัพธ์ (screencast GIF'ed คุณภาพต่ำ):

enter image description here


2
ดี! มันยังทำงานได้ใน IE11
Danko Durbić

ทำงานได้ดีบน Firefox 27.0.1
นาธานออสมัน

32

มาติกา

จากคำตอบของฉันในMathematica.SE คำถาม & คำตอบ :

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, ∞}
]

enter image description here

แก้ไข:ในเวอร์ชัน 10 สไตล์แสงเริ่มต้นเปลี่ยนไป; ในการแสดงกราฟิกด้านบนจะต้องเพิ่มตัวเลือกLighting -> "Classic"ให้Graphics3Dในการ

การเล่นเพิ่มเติมด้วยแสงไฟเพื่อสร้างผลกระทบสองมิติแบบแบน:

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
]

enter image description here


สำหรับ Oliver ผู้กล่าวว่าผลลัพธ์แรกของฉันคือ "เกินไป 3D-ish" นี่คือการเรนเดอร์ 2D จริงผ่านโค้ดของ jVincent พร้อมการรีแฟคเตอร์ของฉันอีกทั้งจากเธรดที่เชื่อมโยง:

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}}
 ]

enter image description here


@Oliver อัพเดทเพื่อคุณโดยเฉพาะ
Mr.Wizard

ว้าว! คุณสามารถบอกฉันว่าคุณสามารถดาวน์โหลด Mathmatica ได้ที่ไหน?
Oliver Ni

@Oliver เป็นผลิตภัณฑ์เชิงพาณิชย์และค่อนข้างแพงแม้สำหรับการใช้ที่ไม่ใช่เชิงพาณิชย์ แต่ถ้าคุณยังสนใจคุณสามารถรับรุ่นทดลอง 15 วันได้จาก: wolfram.com/mathematica/trial
Mr.Wizard

1
@Oliver ตอนนี้คุณจะได้รับ Mathematica รุ่นฟรีหากคุณมี raspberry pi
trichoplax

@trichoplax Now Open Cloud ให้หนึ่งรันโปรแกรมขนาดเล็กได้อย่างอิสระในส่วนต่อประสานเบราว์เซอร์: develop.open.wolframcloud.com/app/view/newNotebook
Mr.Wizard

28

ทับทิม, 321

น่าเศร้าที่ประมุขแห่งรัฐหนึ่งดูเหมือนจะเป็นหัวข้อข่าวของข่าวกีฬาโอลิมปิกมากที่สุด ดังนั้นนี่คือโลโก้ฟรีสไตล์ของฉัน (มาสค็อต?) สำหรับเกม 2014

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

เอาท์พุท: (สำรองและเหล่ขออภัยสำหรับการเรนเดอร์ดั้งเดิม แต่เขาไม่สมควรเลย)

Putin


6
$$$, เศร้า แต่จริง: 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:

ตัวอย่างผลลัพธ์:

olympic games logo


23

FreePascal

โอลิมปิกฤดูหนาว? เกล็ดหิมะเกล็ดหิมะแทนที่จะเป็นวงแหวนปกติ

การเรียกซ้ำสำหรับสาขากลางนั้นค่อนข้างชัดเจน: (dx, dy) = 0.5 (dx, dy) กิ่งซ้ายและขวาขึ้นอยู่กับการหมุนโดยการคูณเมทริกซ์:

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

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

1/4 = 0.5 cos (60) และ 7/16 เป็นการประมาณที่ดีของ 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.

. .

image


ดี หากคุณสามารถเพิ่มจำนวนเงินที่ดีของแบบแผนขั้นตอนวิธีการที่คุณอาจนำมาใช้ในการจำลอง Let 's เกล็ดหิมะแบบสุ่ม
จัดการ

16

ชวา

คล้ายกับคำตอบ SVG ของฉัน แต่

  • ใช้สองคลิปเพื่อหลีกเลี่ยงความคลาดเคลื่อนเล็กน้อยเนื่องจากการวาดภาพซ้อนด้วย anti-alias
  • เนื่องจาก Java มีลูปจริงโครงสร้างจึงค่อนข้างดี

โปรดทราบว่าฉันไม่ได้พยายามตีกอล์ฟแม้ว่าจะมีกลอุบายที่น่าสนใจ (เช่น-57*~dirแทนที่จะเป็น57*(1+dir)) มันอยู่ที่ 923 ตัวอักษร แต่กอล์ฟลงไปที่ 624 ค่อนข้างง่าย

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 rendered by Java program


16

พลเรือจัตวา 64 พื้นฐาน

อีกครั้งคำตอบ C64 แต่ครั้งนี้ฉันได้รับอนุญาตให้ใช้สไปรต์ ! เย้!

ฉันจำได้ว่าถ้าคุณต้องการใช้สไปรต์คุณจะเริ่มโปรแกรมของคุณด้วยDATAข้อความที่น่าเบื่อ ในการกำหนดรูปแบบสไปรต์แบบโมโนโครม "ความละเอียดสูง" (24x21 พิกเซล) คุณต้องมี 63 ไบต์ จริงๆแล้วมีสไปรท์ออนไลน์ที่คำนวณข้อมูลสำหรับคุณดังนั้น:

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

ฉันจะต้องการข้อมูลเพิ่มเติมสำหรับสีและตำแหน่ง ฉันเพิ่งคัดลอกสิ่งนั้นจากคำตอบของฉันไปยังคำถามโลโก้โอลิมปิกเกมส์ต้นฉบับ:

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

V=53248จากนั้นคุณต้องการมักจะตั้ง นี่53248ต้องเป็นตัวเลขที่สำคัญเพราะฉันยังจำได้ 25 ปีต่อมา :) มันกลับกลายเป็นว่ามันเป็นที่อยู่พื้นฐานของ VIC-II (Video Interface Controller):

50 V=53248

832จากนั้นผมอ่านรูปแบบเทพดาในหน่วยความจำเริ่มต้นที่อยู่ รู้สึกแปลก ๆ ที่เพิ่งเขียนไปยังตำแหน่งหน่วยความจำไม่จัดสรรไม่ไม่มีnewอะไรแบบนั้น :) ที่อยู่เริ่มต้นจะต้องเป็น 64 เท่า

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

ฉันจะใช้รูปแบบเดียวกันสำหรับสไปรต์ทั้งหมด

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

CคือรหัสสีXและYเป็นตำแหน่งในแนวนอนและแนวตั้งของวงกลม

ต้องการอีกสองสามPOKEs:

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

V+0, V+2, V+4ฯลฯ ... เป็นสถานที่ในแนวนอนของแต่ละเทพดาในขณะที่V+1, V+3, V+5... เป็นแนวตั้ง สีสไปรต์เริ่มต้นที่การลงทะเบียนV+39:

130 POKE V+39+I,C

ตัวชี้ข้อมูลเทพดาเริ่มต้นที่2040และเมื่อข้อมูลเริ่มต้น832เราจะได้รับ832/64= 13ดังนั้น:

140 POKE 2040+I,13
150 NEXT I

เมื่อต้องการเปิดสไปรท์ที่ผมตั้งบิตของการลงทะเบียน0-4 V+21ฉันเปลี่ยนพื้นหลังเป็นสีขาวเพื่อให้เราเห็นวงกลมสีน้ำเงิน

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

แค่นั้นแหละ!

Olympic sprites


ที่ดี! ไม่ทราบว่าฉันจำได้ถูกต้องหรือเปล่า แต่บางทีคุณอาจเพิ่มขนาดของสไปรต์เป็นสองเท่า (ในฮาร์ดแวร์) ฉันแน่ใจว่าคุณสามารถทำได้ใน C128
Gabriele D'Antona

ใช่คุณสามารถตั้งค่าบิตV+23สำหรับความสูงสองเท่าและV+29สำหรับความกว้างสองเท่า (bit #x สำหรับ sprite #x)
Danko Durbić

11

น้ำยาง / TikZ

ขนาด: 876 ไบต์ (12 บรรทัดบรรทัดที่มี 72 ตัวอักษรและท้ายบรรทัด)

\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}

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

ขนาด: 817 ไบต์ในหนึ่งบรรทัดและเพิ่มประสิทธิภาพสองรายการ:

  • ตัวเลือกtikzของชั้นเรียนstandaloneดูความคิดเห็นของตัวช่วยสร้างข้าวสาลี
  • การใช้งานหลาย ๆ soft=blankbจะสั้นลงด้วยการกำหนดรูปแบบ
\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 (เวอร์ชั่นที่อ่านได้)

รุ่นที่ยาวกว่าต่อไปนี้อาจเข้าใจง่ายกว่า

  • การทับซ้อนของวงแหวนจะถูกจัดการโดยการวาดวงแหวนด้วยเซกเมนต์ว่างก่อน จากนั้นในภายหลังแหวนจะถูกดึงอีกครั้ง แต่คราวนี้จะเติมเซกเมนต์ว่างและเซ็กเมนต์อื่น ๆ ที่ดึงแล้วของวงแหวนจะยังคงไม่ถูกแตะต้อง ดังนั้นการตัดจะไม่ถูกใช้เลย

  • แหวนที่มีระยะขอบสีขาวจะถูกวาดเป็นวงกลมด้วยเส้นคู่ พื้นที่ระหว่างเส้นจะเต็มไปด้วยสีของแหวนและเส้นคู่ที่บางขึ้นทำให้ขอบด้านนอกและด้านในสีขาว

  • สีและขนาดนำมาจากคำอธิบายหน้า PDF ของหน้า 5 ของเอกสารอย่างเป็นทางการ (ดูคำตอบของ 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}

เพื่อประหยัดสองไบต์คุณสามารถใช้\documentclass[tikz]{standalone}ขอบคุณเคล็ดลับนี้
ข้าวสาลี Wizard

@WheatWizard ขอบคุณคำตอบจะได้รับการอัปเดตและย่อให้สั้นลงโดยการกำหนดรูปแบบbเพื่อหลีกเลี่ยงความยาวblank=softที่ใช้สี่ครั้ง
Heiko Oberdiek

10

C ++ 1024 ไบต์

อัปเดต:ตอนนี้มีการลดรอยหยัก รหัสถูกยกเลิกการตีกอล์ฟ แต่ยังคงใส่ใน (1K)

ไม่ใช้ฟังก์ชันไลบรารีใด ๆ ยกเว้นฟังก์ชั่น ostream เพื่อเขียนไฟล์เอาต์พุต

#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);;
}

ส่งออกไฟล์. ppm:

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


1
นี่ไม่ใช่code-golf : คุณสามารถทำให้ code ของคุณอ่านง่ายและให้มันพอดีในขนาด 1kB
Peter Taylor

+1 สำหรับแม้จะไม่รวม <cmath>
epidemian


9

GLSL

ฉันรู้สึกเหมือนว่าฉันจะไปงานเลี้ยงเล็ก ๆ น้อย ๆ แต่บางทีฉันสามารถทำสิ่งนั้นได้ด้วยการส่ง GLSL ครั้งแรกในเว็บไซต์นี้ มันมีวัตถุประสงค์เพื่อใช้เป็นส่วนย่อยสำหรับการกรอกข้อมูลหน้าจอดั้งเดิมและคาดว่าความละเอียดวิวพอร์ตในiResolutionเครื่องแบบ

สีและตำแหน่งเป็น "ยืม" จากการส่งของ Peter Taylorการส่งปีเตอร์เทย์เลอร์ฉันต้องย่อชื่อตัวแปรให้สั้นกว่า 1024 อักขระ แต่ฉันหวังว่ามันจะยังอ่านได้

ดูได้ที่Shadertoy (หากเบราว์เซอร์ของคุณรองรับ 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));
    }
}

ส่งผลให้การแสดงผล


5

มาติกา

ฉันได้แทนที่คำตอบดั้งเดิมของฉันด้วยคำตอบที่วาดในภูมิภาคและทางแยกของพวกเขา ขนาดรหัสคือ 973 ไบต์ไม่ได้รับการปรับแต่ง

ภูมิภาค 1-5 เป็นวงแหวน วงแหวนมีรัศมีภายใน 2.5 หน่วย รัศมีด้านนอกคือ 3 หน่วย อัตราส่วนของด้านในอัตราส่วนด้านนอกและตรรกะทั่วไปของวิธีการที่จะพบที่นี่

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}];

ทำไมเราไม่สามารถพิมพ์ 5 วงแหวนโดยไม่คำนึงถึงเลเยอร์

หากเราพล็อตวงแหวนเหล่านี้ทันทีพวกเขาจะไม่เชื่อมต่อกัน ขอให้สังเกตว่าวงแหวนสีเหลืองอยู่บนวงแหวนสีน้ำเงินและสีดำ วงแหวนสีเขียวอยู่บนวงแหวนทั้งสีดำและสีแดง

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]

บนยอด


พลิกสีที่ 4 แยกวงแหวน

ภูมิภาค 6, 8, 10 และ 12 เป็นสี่เหลี่ยมที่ทำหน้าที่ระบุจุดตัดของวงแหวนสองวงที่จะมุ่งเน้น

ภูมิภาค 7, 9, 11 และ 13 คือ "วงแหวนซ้อนทับ" โดยที่วงแหวนด้านล่างควรอยู่ด้านบน

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]

แหวน


จุดตัดใดที่สีของพวกเขาพลิก

ต่อไปนี้จะเน้นบริเวณแยกที่มีสี "พลิก" นี้ก็ประสบความสำเร็จโดยการเปลี่ยนBoundaryStyleภูมิภาค 7, 9, 11, และ White13

ไฮไลท์


4
คุณไม่สามารถทำสิ่งที่สวยงามขึ้นใน 1k ได้หรือไม่? ทางแยกเหล่านั้นน่าเกลียด!
Gabriele D'Antona

1
@friol ฉันปรับปรุงทางแยกโดยใช้ภูมิภาค
DavidC

1
ใช้เวลาหนึ่งปีครึ่ง แต่ในที่สุดคุณก็พบกับวิธีการแยกที่ค่อนข้างสวย: D
Beta Decay

เมื่อวานนี้ฉันเห็นวงแหวนโอลิมปิกและรู้ว่าฉันสามารถใช้ภูมิภาคเพื่อแก้ไขปัญหาการตัดกัน คนก่อนหน้านี้น่าเกลียดเกินกว่าที่จะออกไปเหมือนที่เคยเป็น
DavidC

3

Javascript (three.js) - 910 ไบต์

กำหนดองค์ประกอบ html ฟังก์ชั่นนี้จะสร้างแหวนเป็นวัตถุ 3 มิติแล้วแสดงภาพนิ่งไปยังองค์ประกอบ ใช้งานได้ในเบราว์เซอร์ที่รองรับ WebGL ซอ

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

แมว (10 ไบต์)

มันสั้นมากที่เว็บไซต์ปฏิเสธที่จะอัปโหลดจนกว่าฉันจะเพิ่มคำอธิบายนี้ โลโก้แสดงถึงกีฬาโอลิมปิก

$ $ $
 $ $


2

C ++ w / SFML (1003 รวมช่องว่าง)

ไม่เล็กโดยจินตนาการใด ๆ แต่เก็บไว้เป็นสั้น ๆ แต่อ่านได้มากที่สุดและยังอยู่ภายใต้ 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;
}

แก้ไข:อัปเดตสีตามการส่ง SVG ของ @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);

ผล

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


0

สร้างโซลูชันโดยใช้ Java Swing GUI UltraGolfed edition (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);}}

แบบบีบอัดครึ่งหนึ่ง: (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);
    }
}

คุณสามารถเพิ่มภาพหน้าจอได้ไหม
Paŭlo Ebermann


0

SpecBAS

วงแหวนแต่ละวงประกอบด้วยวงด้านใน / ด้านนอกแล้วเต็มไปด้วยน้ำท่วม

ต้องค้นหาทางแยกด้วยตนเองและเติมทีละรายการ (เพื่อให้คุณยังสามารถเห็นบางบรรทัดระหว่างพวกเขา)

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

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

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