8 простых и ярких «художественных» ёлочек из символов ASCII, которые точно подарят новогоднее настроение. Go, Java, JS, Python, визуальное программирование и даже Wolfram.
28К открытий29К показов
Новый год уже на пороге, а праздничное настроение куда-то затерялось? Предлагаем подборку из простых и нарядных решений для создания главных зимних красавиц из символов ASCII.
Черно-белая, но ослепительная
Казалось бы, что такого можно слепить из 56 коротеньких строчек кода на JS? Создаем пустой HTML, приправляем его самыми простыми стилями:
Очередной шедевр символьной мысли — призер польского конкурса художеств в ASCII. Ёлочка на C++ открывает широкий простор для воображения. Простая праздничная программка позволяет:
Украшать дерево звездами, цепочками, шарами, конфетами и огнями;
Класть под ёлку подарки с именами любимых;
Экспортировать созданную открытку в текстовый файл.
Запустить кроссплатформенную красавицу можно на Windows и Linux. Исходники приложения, а также уже собранная программа доступны на GitHub.
Go праздновать!
Программисты на Go предлагают свой вариант решения проблемы отсутствия новогоднего настроения. Это масштабируемая ёлка, которая украшается по желанию пользователя.
Можно ли украсить дом к новому году с помощью математических функций? Программисты на Wolfram Language в очередной раз показали, какие чудеса можно совершать с помощью точной науки.
Программисты на языке Java нашли свой оригинальный подход к рисованию новогодней ёлки из простых фигур.
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.*;
import javax.imageio.ImageIO;
public class ChristmasTree {
static class Point{
Point(int a,int b){x=a;y=b;}
int x,y;
double distance(Point o){
int dx=x-o.x;
int dy=y-o.y;
return Math.sqrt(dx*dx+dy*dy);
}
}
static int siz;
static BufferedImage b;
static Random r=new Random();
public static void main(String[]args) throws IOException{
if(args.length==0){
siz=(new Scanner(System.in)).nextInt();
}else{
siz=Integer.parseInt(args[0]);
}
b=new BufferedImage(20*siz,30*siz,BufferedImage.TYPE_INT_RGB);
Graphics2D g=(Graphics2D)b.getGraphics();
g.setColor(new Color(140,70,20));
int h=b.getHeight();h*=0.4;
for(int i=(int)(0.4*b.getWidth());i<(int)(0.6*b.getWidth());i++){
if(r.nextDouble()<0.3){
g.drawLine(i,b.getHeight(),i+r.nextInt(2)-1,h);
}
}
for(int i=h;i();
pts.add(new Point((b.getWidth()-siz)/2,b.getHeight()/10));
loop:for(int i=0;i<8+siz/4;i++){
int y=r.nextInt((8*b.getHeight())/11);
int x=1+(int)(b.getWidth()*0.35*y/((8*b.getHeight())/11));
x=r.nextInt(2*x)-x+b.getWidth()/2;
y+=b.getHeight()/8;
g.setColor(c.get(r.nextInt(c.size())));
x-=siz/2;
Point p=new Point(x,y);
for(Point q:pts){
if(q.distance(p)<1+2*siz)continue loop;
}
pts.add(p);
g.fillOval(x,y,siz,siz);
}
ImageIO.write(b,"png",new File("tree.png"));
}
Черепашьи радости
Тем, кто давно хотел попробовать себя в визуальном программировании, посвящается. Прекрасное новогоднее деревце, основанное на спирали Эйлера. Поиграть с дизайном в интерактивном режиме можно здесь.
Змеиные фракталы
В праздничное время есть что предложить и языку Python. Немного фантазии, и фрактальный карнавал уже украшает кодерскую комнату яркими красками.
n = input()*1.
from turtle import *
speed("fastest")
left(90)
forward(3*n)
color("orange", "yellow")
begin_fill()
left(126)
for i in range(5):
forward(n/5)
right(144)
forward(n/5)
left(72)
end_fill()
right(126)
color("dark green")
backward(n*4.8)
def tree(d, s):
if d <= 0: return
forward(s)
tree(d-1, s*.8)
right(120)
tree(d-3, s*.5)
right(120)
tree(d-3, s*.5)
right(120)
backward(s)
tree(15, n)
backward(n/2)
import time
time.sleep(60)
Ещё больше интересных идей можно найти на Code Golf.
Новогодние каникулы — отличный повод попробовать себя в чём-то новом: например, в «рисовании».