एक स्केलेबल क्रिसमस ट्री बनाएं [बंद]


95

आपकी चुनौती: क्रिसमस ट्री बनाओ। आकार कुछ इनपुट विधि द्वारा चयन योग्य होना चाहिए, लेकिन पेड़ के किसी भी हिस्से से सीधे संबंधित नहीं होना चाहिए; हालाँकि, बड़े इनपुट से एक बड़ा पेड़ तैयार होना चाहिए।

आप इसे कैसे बना सकते हैं? आप पेड़ को किसी भी तरह से पसंद कर सकते हैं, इसके अलावा पेड़ के लिए यूनिकोड चरित्र को भी प्रिंट कर सकते हैं , जैसे कि एक छवि को अलग करना, एएससीआई कला, अन्य पहलुओं के साथ, आदि जो भी आप करते हैं, याद रखें कि यह एक , इसलिए रचनात्मक बनो।

दिसंबर के अंत तक सबसे अधिक उत्थान के साथ जवाब जीतता है, लेकिन अगर यह अधिक हो जाता है तो मैं एक और स्वीकार करूंगा


1
अच्छा सवाल;)
टाइमटेक

1
एक दया सजावट अनिवार्य नहीं थे!
ओ ० '।

@ लोरिस मुझे लगता है कि यह अच्छा है कि वे अनिवार्य नहीं हैं। इस तरह, लोग वही कर सकते हैं जो वे चाहते हैं, और उन शानदार भग्न पेड़ वैध जवाब हैं।
जस्टिन

@Quincunx आप भग्न पेड़ों से भी सजावट जोड़ सकते हैं ...
o0 '।

@ लोरिस हाँ, लेकिन वे बहुत सारे हैं। यदि वे चाहें तो उन पेड़ों के लेखक सजावट जोड़ सकते हैं, लेकिन मुझे इसकी आवश्यकता नहीं होगी।
जस्टिन

जवाबों:


92

अजगर

कछुए के पैकेज का उपयोग कर एक फ्रैक्टल क्रिसमस ट्री:

यहाँ छवि विवरण दर्ज करें

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)

n आकार का पैरामीटर है, दिखाया गया पेड़ n = 50 के लिए है। खींचने में एक या दो मिनट लगते हैं।


2
यह सुंदर लग रहा है:)
सोनर ग्नुएल

80

जावास्क्रिप्ट

यहाँ छवि विवरण दर्ज करें

ऑनलाइन एनिमेटेड पेड़ दिखाओ ।

var size = 400;

var canvas = document.createElement('canvas');
canvas.width = size;
canvas.height = size;
document.body.appendChild(canvas);

var ctx = canvas.getContext('2d');

var p3d = [];

var p = [Math.random(), Math.random(), Math.random(), 0];

for (var i = 0; i < 100000; i++) {
    p3d.push([p[0],p[1],p[2],p[3]]);
    var t = Math.random();
    if (t<0.4) {
        _y = 0.4 * p[1];
        _x = 0.1 * p[0];
        _z = 0.6 * p[2];
        var r = Math.floor(3*t/0.4)/3.0;
        var rc = Math.cos(Math.PI*2.0*r);
        var rs = Math.sin(Math.PI*2.0*r);
        p[1] = _x+0.1*r+0.5*_y*_y;
        p[0] = _y*rc+_z*rs;
        p[2] = _z*rc-_y*rs;
        p[3] = 0.2*t + 0.8*p[3];
    } else {
        p[1] = 0.2 + 0.8*p[1];
        p[0] = 0.8 * p[0];
        p[2] = 0.8 * p[2];
        p[3] = 0.2 + 0.8*p[3];
    }
}

var rot = 0.0;

function render() {
    rot = rot + 0.1;
    var rc = Math.cos(rot);
    var rs = Math.sin(rot);

    ctx.strokeStyle='#FF7F00';
    ctx.lineWidth=2;
    ctx.beginPath();
    ctx.moveTo(size/2,size/8);
    ctx.lineTo(size/2,size*15/16);
    ctx.stroke();

    var img = ctx.getImageData(0, 0, size, size);
    for (var j = 0; j < size*size; j++) {
        img.data[4*j+0] = 0.5*img.data[4*j+0];
        img.data[4*j+1] = 0.5*img.data[4*j+1];
        img.data[4*j+2] = 0.5*img.data[4*j+2];
        img.data[4*j+3] = 255;
    }

    for (var i = 0; i < p3d.length; i++) {
        var px = p3d[i][0];
        var py = 0.5 - p3d[i][1];
        var pz = p3d[i][2];
        var col = Math.floor(128.0*p3d[i][3]);

        var _x = rc*px + rs*pz;
        var _z = rc*pz - rs*px;

        var z = 3.0 * size / (_z + 4.0);
        var x = size / 2 + Math.round(_x * z);        
        var y = size / 2 + Math.round(py * z);

        if(x>=0&&y>=0&&x<size&&y<size) {
            img.data[4 * (y * size + x) + 0] = col;
            img.data[4 * (y * size + x) + 1] = 128+col;
            img.data[4 * (y * size + x) + 2] = col;
            img.data[4 * (y * size + x) + 3] = 255;
        }
    }

    ctx.putImageData(img, 0, 0);
}

setInterval(render, 1000 / 30);

मुझे यह पसंद है, लेकिन आपको एक ट्रंक जोड़ना चाहिए।
फेल्स

1
@ फेल्स ने ट्रंक को जोड़ा
हावर्ड

2
यह बहुत प्रभावशाली है, लेकिन उन हरे पिक्सल के साथ क्या हो रहा है जो पेड़ की परिक्रमा करते हैं? मुझे पता ही नहीं चला कि सांता के पास थोड़ी हरी हरी पत्तियां हैं जो उड़ सकते हैं। (वे आपके उत्तर की सुंदरता से अलग नहीं होते हैं, लेकिन मुझे आश्चर्य है कि वे कहाँ से आए हैं)
जस्टिन

@Quincunx: वे पुनरावृत्ति परिवर्तित होने से पहले प्रारंभिक नमूना बिंदु प्रतीत होते हैं। पहले 100 अंकों को छोड़ देने से उन्हें छुटकारा मिल जाता है।
इल्मरी करोनें

2
बहुत अच्छा है, लेकिन यह नहीं है काफी एक क्रिसमस वृक्ष की तरह लग रहे हो। यह छड़ी से कुछ अधिक जुड़ा हुआ है, जिसके साथ कुछ फर्न की पत्तियां होती हैं। इसके अलावा, क्या आप दृश्य को धीरे से y अक्ष के साथ स्क्रॉल कर सकते हैं, इसलिए 3D-नेस अधिक स्पष्ट है?
द गाईट विथ द हैट

76

फिर भी विटाली के उत्तर पर आधारित एक और गणितज्ञ / वुल्फ्राम भाषा का पेड़ :

PD = .5;
s[t_, f_] := t^.6 - f
dt[cl_, ps_, sg_, hf_, dp_, f_, flag_] :=
    Module[{sv, basePt},
           {PointSize[ps],
            sv = s[t, f];
            Hue[cl (1 + Sin[.02 t])/2, 1, .3 + sg .3 Sin[hf sv]],
            basePt = {-sg s[t, f] Sin[sv], -sg s[t, f] Cos[sv], dp + sv};
            Point[basePt],
           If[flag,
              {Hue[cl (1 + Sin[.1 t])/2, 1, .6 + sg .4 Sin[hf sv]], PointSize[RandomReal[.01]],
               Point[basePt + 1/2 RotationTransform[20 sv, {-Cos[sv], Sin[sv], 0}][{Sin[sv], Cos[sv], 0}]]},
              {}]
          }]

frames = ParallelTable[
                       Graphics3D[Table[{
                                         dt[1, .01, -1, 1, 0, f, True], dt[.45, .01, 1, 1, 0, f, True],
                                         dt[1, .005, -1, 4, .2, f, False], dt[.45, .005, 1, 4, .2, f, False]},
                                        {t, 0, 200, PD}],
                                  ViewPoint -> Left, BoxRatios -> {1, 1, 1.3}, 
                                  ViewVertical -> {0, 0, -1},
                                  ViewCenter -> {{0.5, 0.5, 0.5}, {0.5, 0.55}}, Boxed -> False,
                                  PlotRange -> {{-20, 20}, {-20, 20}, {0, 20}}, Background -> Black],
                       {f, 0, 1, .01}];

Export["tree.gif", frames]

क्रिसमस वृक्ष


7
यह सबसे अच्छा है !!
Murta

63

जावास्क्रिप्ट

दिए गए कोड नमूने का आउटपुट

यह मेरा पहला कोड गोल्फ है!

var a=40,b=8,c=13,o="<div style='font-family:monospace;text-align:center;color:#094'>",w=1,x=0,y="|#|<br>";for(i=1;i<a;i++){for(j=0;j<w;j++){x%c==0?o+="<span style='color:#D00'>O</span>":o+="+";x++;}i%b==0?w-=4:w+=2;o+="<br>";}document.write(o+"<span style='color:#640'>"+y+y+y+"</span></div>");

यह 295 वर्णों में आता है।

पेड़ का आकार और सजावट ए, बी, सी चर द्वारा निर्धारित की जाती है:

  • पेड़ में पंक्तियों की मात्रा निर्धारित करता है
  • b चौड़ाई में घटने के बीच की पंक्तियों की मात्रा निर्धारित करता है (एक पतली पेड़ के लिए कम सेट, एक मोटा पेड़ के लिए उच्च)। 3 से अधिक या उसके बराबर होना चाहिए।
  • सी बाउबल्स की मात्रा निर्धारित करता है (शून्य के लिए शून्य सेट, केवल बॉबल्स के लिए 1, बाउबल्स के कम घने प्लेसमेंट के लिए उच्च संख्या)

यह सबसे अच्छा लगता है जब एक उदाहरण में कई बी है।

पेड़ बनाने के लिए कंसोल में पेस्ट करें। दूर से देखने पर अच्छा लगता है!


1
घटकर 264a=40,b=8,c=13,o="<p style='font:monospace;color:#094' align='center'>",w=1,x=0,y="|#|<br>";for(i=1;i<a;i++){for(j=0;j<w;j++){x%c==0?o+="<b style='color:red'>O</b>":o+="+";x++;}i%b==0?w-=4:w+=2;o+="<br>";}document.write(o+"<b style='color:#640'>"+y+y+y+"</b></p>");
user1886419

4
आप वास्तव में एक लोकप्रियता प्रतियोगिता पर गोल्फ कर रहे हैं? वाह, मैंने अच्छा पठनीय कोड (कोड में आसान) लिखा होगा। +1
जस्टिन

7
ungh। आप उपयोग कर रहे हैं doc.write? मुझसे कोई +1 नहीं।
जॉन ड्वोरक

2
@JDDvorak, क्यों नहीं? मैंने सोचा था कि यह गोल्फिंग है .....
Pacerier

62

सी ++

आइए इसे IOCCC की भावना से बनाते हैं और एक पेड़ के आकार में भी कोड रखते हैं! : डी

#include <iostream>
using namespace std;

               int
             main(){
              int a
                ; 
               cin
             >>a;int
           w=a*2+5;for
             (int x=
           0;x<a;++x){
         for(int y=2;y>=
       0;--y){for(int z=0;
           z<a+y-x;++z
        ){cout<<" ";}for(
     int z=0;z<x*2-y*2+5;++z
        ){cout<<".";}cout
      <<endl;}}for(int x=0;
    x<w/5+1;++x){for(int z=0;
  z<w/3+1;++z){cout<<" ";}for(
int z=0;z<w-(w/3+1)*2;z+=1){cout
           <<"#";}cout
           <<endl;;;}}

एक पूर्णांक को इनपुट के रूप में लेता है, और उस "ढेर के स्तर" के साथ एक क्रिसमस ट्री देता है। उदाहरण के लिए, इनपुट

5

यह दिखाता है:

       .
      ...
     .....
      ...
     .....
    .......
     .....
    .......
   .........
    .......
   .........
  ...........
   .........
  ...........
 .............
      ###
      ###
      ###
      ###

आउटपुट उदाहरण?
जॉन ड्वोरक

32
कोड आउटपुट की तुलना में
क्रिस्मस

2
रिकॉर्ड के लिए @dystroy, निर्देश यह नहीं कहता है कि यह आउटपुट में पेड़ होना चाहिए।
पियरे अरलॉड

4
@ArlaudPierre: लेकिन, आकार समायोज्य होना चाहिए, जो केवल स्रोत कोड के साथ असंभव है। मैं एक प्रोग्राम बना सकता हूं जो एक क्रिसमस ट्री के आकार में प्रोग्राम कोड को आउटपुट करता है जो एक वास्तविक क्रिसमस ट्री को आउटपुट करता है , लेकिन मुझे लगता है कि हर जगह सिर्फ आवारा अर्धविराम डालने का सहारा लिए बिना बहुत मुश्किल होगा।
जो जेड।

1
यदि आप *पेड़ (स्रोत कोड) के शीर्ष पर रखते हैं, तो आपके पास मेरा +1 होगा।
फैब्रिकियो

61

जावास्क्रिप्ट

Quasirealistic पूरी तरह से 3 डी प्रक्रियात्मक देवदार के पेड़ जनरेटर।

विशेषता: कोड में और भी अधिक कॉन्फ़िगरेशन विकल्पों के साथ व्यापक कॉन्फ़िगरेशन; एक जिग्गी ट्रंक; शाखाओं की शाखा; वृद्धि एनीमेशन; पूर्ण विकसित पेड़ का रोटेशन।

विशेषता नहीं: jQuery, Underscore.js या किसी अन्य पुस्तकालय; हार्डवेयर निर्भरता - केवल कैनवास समर्थन की आवश्यकता है; गन्दा कोड (कम से कम यही इरादा था)

लाइव पेज: http://fiddle.jshell.net/honnza/NMva7/show/

पृष्ठ संपादित करें: http://jsfiddle.net/honnza/NMva7/

स्क्रीनशॉट:

देवदार के पेड़

HTML:

<canvas id=c width=200 height=300 style="display:none"></canvas>
<div id=config></div>

जावास्क्रिप्ट:

var TAU = 2*Math.PI,
    deg = TAU/360,

    TRUNK_VIEW      = {lineWidth:3, strokeStyle: "brown", zIndex: 1},
    BRANCH_VIEW     = {lineWidth:1, strokeStyle: "green", zIndex: 2},
    TRUNK_SPACING   = 1.5,
    TRUNK_BIAS_STR  = -0.5,
    TRUNK_SLOPE     = 0.25,
    BRANCH_LEN      = 1,
    BRANCH_P        = 0.01,
    MIN_SLOPE       = -5*deg,
    MAX_SLOPE       = 20*deg,
    INIT_SLOPE      = 10*deg,
    MAX_D_SLOPE     =  5*deg,
    DIR_KEEP_BIAS   = 10,
    GROWTH_MSPF     = 10, //ms per frame
    GROWTH_TPF      = 10, //ticks per frame
    ROTATE_MSPF     = 10,
    ROTATE_RPF      = 1*deg; //radians per frame

var configurables = [
//    {key: "TRUNK_SPACING", name: "Branch spacing", widget: "number",
//     description: "Distance between main branches on the trunk, in pixels"},
    {key: "TRUNK_BIAS_STR", name: "Branch distribution", widget: "number",
     description: "Angular distribution between nearby branches. High values tend towards one-sided trees, highly negative values tend towards planar trees. Zero means that branches grow in independent directions."},
    {key: "TRUNK_SLOPE", name: "Trunk slope", widget: "number",
     description: "Amount of horizontal movement of the trunk while growing"},
    {key: "BRANCH_P", name: "Branch frequency", widget: "number",
     description: "Branch frequency - if =1/100, a single twig will branch off approximately once per 100 px"},
    {key: "MIN_SLOPE", name: "Minimum slope", widget: "number", scale: deg,
     description: "Minimum slope of a branch, in degrees"},
    {key: "MAX_SLOPE", name: "Maximum slope", widget: "number", scale: deg,
     description: "Maximum slope of a branch, in degrees"},
    {key: "INIT_SLOPE", name: "Initial slope", widget: "number", scale: deg,
     description: "Angle at which branches leave the trunk"},
    {key: "DIR_KEEP_BIAS", name: "Directional inertia", widget: "number",
     description: "Tendency of twigs to keep their horizontal direction"},
    {get: function(){return maxY}, set: setCanvasSize, name: "Tree height",
     widget:"number"}
    ];

var config = document.getElementById("config"),
    canvas = document.getElementById("c"),
    maxX   = canvas.width/2,
    maxY   = canvas.height,
    canvasRatio = canvas.width / canvas.height,
    c;

function setCanvasSize(height){
    if(height === 'undefined') return maxY;
    maxY = canvas.height = height;
    canvas.width = height * canvasRatio;
    maxX = canvas.width/2;
x}

var nodes = [{x:0, y:0, z:0, dir:'up', isEnd:true}], buds = [nodes[0]],
    branches = [],
    branch,
    trunkDirBias = {x:0, z:0};

////////////////////////////////////////////////////////////////////////////////

configurables.forEach(function(el){
    var widget;
    switch(el.widget){
        case 'number':
            widget = document.createElement("input");
            if(el.key){
                widget.value = window[el.key] / (el.scale||1);
                el.set = function(value){window[el.key]=value * (el.scale||1)};
            }else{
                widget.value = el.get();
            }
            widget.onblur = function(){
                el.set(+widget.value);
            };
            break;
        default: throw "unknown widget type";
    }
    var p = document.createElement("p");
    p.textContent = el.name + ": ";
    p.appendChild(widget);
    p.title = el.description;
    config.appendChild(p);
});
var button = document.createElement("input");
button.type = "button";
button.value = "grow";
button.onclick = function(){
    button.value = "stop";
    button.onclick = function(){clearInterval(interval)};
    config.style.display="none";
    canvas.style.display="";
    c=canvas.getContext("2d");
    c.translate(maxX, maxY);                
    c.scale(1, -1);
    interval = setInterval(grow, GROWTH_MSPF);
}
document.body.appendChild(button);
function grow(){
    for(var tick=0; tick<GROWTH_TPF; tick++){
        var budId = 0 | Math.random() * buds.length,
            nodeFrom = buds[budId], nodeTo, branch,
            dir, slope, bias

        if(nodeFrom.dir === 'up' && nodeFrom.isEnd){
            nodeFrom.isEnd = false; 
            rndArg = Math.random()*TAU;
            nodeTo = {
                x:nodeFrom.x + TRUNK_SPACING * TRUNK_SLOPE * Math.sin(rndArg),
                y:nodeFrom.y + TRUNK_SPACING,
                z:nodeFrom.z + TRUNK_SPACING * TRUNK_SLOPE * Math.cos(rndArg), 
                dir:'up', isEnd:true}
            if(nodeTo.y > maxY){
                console.log("end");
                clearInterval(interval);
                rotateInit();
                return;
            }
            nodes.push(nodeTo);
            buds.push(nodeTo);
            branch = {from: nodeFrom, to: nodeTo, view: TRUNK_VIEW};
            branches.push(branch);
            renderBranch(branch);
        }else{ //bud is not a trunk top
            if(!(nodeFrom.dir !== 'up' && Math.random() < BRANCH_P)){
                buds.splice(buds.indexOf(nodeFrom), 1)
            }
            nodeFrom.isEnd = false; 
            if(nodeFrom.dir === 'up'){
                bias = {x:trunkDirBias.x * TRUNK_BIAS_STR,
                        z:trunkDirBias.z * TRUNK_BIAS_STR};
                slope = INIT_SLOPE;
            }else{
                bias = {x:nodeFrom.dir.x * DIR_KEEP_BIAS,
                        z:nodeFrom.dir.z * DIR_KEEP_BIAS};
                slope = nodeFrom.slope;
            }
            var rndLen = Math.random(),
                rndArg = Math.random()*TAU;
            dir = {x: rndLen * Math.sin(rndArg) + bias.x,
                   z: rndLen * Math.cos(rndArg) + bias.z};
            var uvFix = 1/Math.sqrt(dir.x*dir.x + dir.z*dir.z);
            dir = {x:dir.x*uvFix, z:dir.z*uvFix};
            if(nodeFrom.dir === "up") trunkDirBias = dir;
            slope += MAX_D_SLOPE * (2*Math.random() - 1);
            if(slope > MAX_SLOPE) slope = MAX_SLOPE;
            if(slope < MIN_SLOPE) slope = MIN_SLOPE;
            var length = BRANCH_LEN * Math.random();
            nodeTo = {
                x: nodeFrom.x + length * Math.cos(slope) * dir.x,
                y: nodeFrom.y + length * Math.sin(slope),
                z: nodeFrom.z + length * Math.cos(slope) * dir.z,
                dir: dir, slope: slope, isEnd: true
            }
            //if(Math.abs(nodeTo.x)/maxX + nodeTo.y/maxY > 1) return;
            nodes.push(nodeTo);
            buds.push(nodeTo);
            branch = {from: nodeFrom, to: nodeTo, view: BRANCH_VIEW};
            branches.push(branch);
            renderBranch(branch);
        }// end if-is-trunk
    }// end for-tick
}//end func-grow

function rotateInit(){
    branches.sort(function(a,b){
        return (a.view.zIndex-b.view.zIndex);
    });
    interval = setInterval(rotate, ROTATE_MSPF);
}

var time = 0;
var view = {x:1, z:0}
function rotate(){
    time++;
    view = {x: Math.cos(time * ROTATE_RPF),
            z: Math.sin(time * ROTATE_RPF)};
    c.fillStyle = "white"
    c.fillRect(-maxX, 0, 2*maxX, maxY);
    branches.forEach(renderBranch);
    c.stroke();
    c.beginPath();
}

var prevView = null;
function renderBranch(branch){
    if(branch.view !== prevView){
        c.stroke();
        for(k in branch.view) c[k] = branch.view[k];
        c.beginPath();
        prevView = branch.view;
    }
    c.moveTo(view.x * branch.from.x + view.z * branch.from.z,
             branch.from.y);
    c.lineTo(view.x * branch.to.x + view.z * branch.to.z,
             branch.to.y);
}

2
मुझे पता है क्योंकि इस उत्तर में केवल एक टिप्पणी है: क्योंकि यह लोगों को अवाक छोड़ देता है।
कारिडोरक

49

दे घुमा के

नमूना उत्पादन:

ASCII क्रिसमस पेड़

पेड़ का आकार (यानी लाइनों की संख्या) कमांड लाइन पर पारित किया गया है, और 5 या उससे अधिक के मूल्यों तक सीमित है। ऊपर की छवि कमांड से निर्मित की गई थी ./xmastree.sh 12। यहाँ स्रोत कोड है:

#!/bin/bash
declare -a a=('.' '~' "'" 'O' "'" '~' '.' '*')
[[ $# = 0 ]] && s=9 || s=$1
[[ $s -gt 5 ]] || s=5
for (( w=1, r=7, n=1; n<=$s; n++ )) ; do
  for (( i=$s-n; i>0; i-- )) ;  do
    echo -n " "
  done
  for (( i=1; i<=w; i++ )) ; do
    echo -n "${a[r]}"
    [[ $r -gt 5 ]] && r=0 || r=$r+1
  done
  w=$w+2
  echo " "
done;
echo " "

यह बहुत सुंदर है।
pandubear

42

डिस्क्लेमर: यह मेरे लेटेक्स क्रिसमस ट्री पर आधारित है, यहां पहली बार पोस्ट किया गया है: https://tex.stackexchange.com/a/87921/8463

निम्नलिखित कोड यादृच्छिक सजावट के साथ एक करिश्मा पेड़ पैदा करेगा। आप पेड़ के आकार और यादृच्छिक बीज दोनों को बदलकर एक अलग पेड़ बना सकते हैं।

बीज को बदलने के \pgfmathsetseed{\year * 6}लिए किसी अन्य संख्यात्मक मूल्य के अंदर मूल्य को संशोधित करें (डिफ़ॉल्ट एक हर साल एक नया पेड़ उत्पन्न करेगा)

पेड़ के आकार को बदलने के order=10लिए या तो बड़ा होना चाहिए, या पेड़ के आकार के आधार पर छोटा होना चाहिए।

उदाहरण। order=11:

यहाँ छवि विवरण दर्ज करें

order=8

यहाँ छवि विवरण दर्ज करें

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc, lindenmayersystems,shapes,decorations,decorations.shapes}
\begin{document}

\def\pointlistleft{}
\def\pointlistright{}
\pgfmathsetseed{\year * 6}

\makeatletter
\pgfdeclarelindenmayersystem{Christmas tree}{
    \symbol{C}{\pgfgettransform{\t} \expandafter\g@addto@macro\expandafter\pointlistleft\expandafter{\expandafter{\t}}}
    \symbol{c}{\pgfgettransform{\t} \expandafter\g@addto@macro\expandafter\pointlistright\expandafter{\expandafter{\t}}}
    \rule{S -> [+++G][---g]TS}
    \rule{G -> +H[-G]CL}
    \rule{H -> -G[+H]CL}
    \rule{g -> +h[-g]cL}
    \rule{h -> -g[+h]cL}
    \rule{T -> TL}
    \rule{L -> [-FFF][+FFF]F}
}
\makeatother

\begin{tikzpicture}[rotate=90]
\draw [color=green!50!black,l-system={Christmas tree,step=4pt,angle=16,axiom=LLLLLLSLFFF,order=10,randomize angle percent=20}] lindenmayer system -- cycle;

\pgfmathdeclarerandomlist{pointsleft}{\pointlistleft}
\pgfmathdeclarerandomlist{pointsright}{\pointlistright}
\pgfmathdeclarerandomlist{colors}{{red}{blue}{yellow}}

\foreach \i in {0,1,...,5}
{
    \pgfmathrandomitem{\c}{pointsleft}
    \pgfsettransform{\c}
    \pgfgettransformentries{\a}{\b}{\c}{\d}{\xx}{\yy}
    \pgfmathrandomitem{\c}{pointsright}
    \pgfsettransform{\c}
    \pgfgettransformentries{\a}{\b}{\c}{\d}{\XX}{\YY}
    \pgftransformreset

    \pgfmathsetmacro\calcy{min(\yy,\YY)-max((abs(\yy-\YY))/3,25pt)}

    \draw[draw=orange!50!black, fill=orange!50, decorate, decoration={shape backgrounds, shape=star, shape sep=3pt, shape size=4pt}, star points=5] (\xx,\yy) .. controls (\xx,\calcy pt) and (\XX,\calcy pt) .. (\XX,\YY);
}

\foreach \i in {0,1,...,15}
{
    \pgfmathrandomitem{\c}{pointsleft}
    \pgfsettransform{\c}
    \pgftransformresetnontranslations
    \draw[color=black] (0,0) -- (0,-4pt);
    \pgfmathrandomitem{\c}{colors}
    \shadedraw[ball color=\c] (0,-8pt) circle [radius=4pt];
}

\foreach \i in {0,1,...,15}
{
    \pgfmathrandomitem{\c}{pointsright}
    \pgfsettransform{\c}
    \pgftransformresetnontranslations
    \draw[color=black] (0,0) -- (0,-4pt);
    \pgfmathrandomitem{\c}{colors}
    \shadedraw[ball color=\c] (0,-8pt) circle [radius=4pt];
}

\end{tikzpicture}
\end{document}

मैं कहूंगा कि यह स्टीफन कोट्टविट्ज़ के पेड़ पर आधारित है, जो पहले यहां पोस्ट किया गया था । यह कहना कि यह आपके पेड़ पर आधारित है, ऐसा लगता है जैसे आपने इसके लिए सभी कोड लिखे हैं, जो सच नहीं है। किसी और ने वास्तविक पेड़ के लिए सबसे अधिक कोड लिखा।
द गाईट विथ द हैट

@RyanCarlson ने सजावट पर डालने के लिए आधार के रूप में लिंडेनमायर प्रणाली का उपयोग करने का विचार मेरा विचार था, और यदि आप दोनों कोड को ध्यान से देखें, तो आप देख सकते हैं कि कोड के लिंडेनमेयर भाग को अतिरिक्त भागों के लिए फिर से डिज़ाइन किया गया था (जैसे एक पेड़ के लिए मूल, जिसमें मूल कमी है)। इसके अलावा मैं मूल संदर्भ देना नहीं भूलता, जहाँ कोई भी संदर्भ के लिए जांच कर सकता है (पीटगेन और सौपे में से एक, जो पेड़ के समीकरण का मसौदा तैयार करने वाला पहला व्यक्ति हो सकता है)
SztupY

34

बेफुज 93

यह एक अघोषित पेड़ है:

&::00p20pv
vp010    <
v              p00<
>:0`!#v_" ",1-
v,"/"$<
>10g:2+v
vp01   <
>:0`!#v_" ",1-
v,"\"$<
>91+,00g1-::0`!#v_^
v        *2+1g02<
>:0`!#v_"-",1-
v g02$<
>91+,v
v    <
>:0`!#v_" ",1-
"||"$ <@,,

नमूना उत्पादन, इनपुट 10 है:

          /\
         /  \
        /    \
       /      \
      /        \
     /          \
    /            \
   /              \
  /                \
 /                  \
----------------------
          ||

आइए कुछ सजावट जोड़ें:

&::00p20pv
vp010    <
v              p00<
>:0`!#v_" ",1-
v,"/"$<
>10g:2+v             >"O" v
vp01   <            >?v
>:0`!#v_           >?>>" ">,1-
v,"\"$<             >?<
>91+,00g1-::0`!#v_^  >"*" ^
v        *2+1g02<
>:0`!#v_"-",1-
v g02$<
>91+,v
v    <
>:0`!#v_" ",1-
"||"$ <@,,

नमूना उत्पादन:

          /\
         /O \
        /    \
       /   ** \
      /     *  \
     /    **   O\
    /* O* *  *   \
   / O      O     \
  / *  **   O*     \
 /   *OO   *  OOO * \
----------------------
          ||

32

HTML और CSS

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Scalable christmas tree</title>
<style>
body {
  background-color: skyblue;
  background-size: 11px 11px, 21px 21px, 31px 31px;
  background-image: radial-gradient(circle at 5px 5px,white,rgba(255,255,255,0) 1px), radial-gradient(circle at 5px 5px,white,rgba(255,255,255,0) 2px), radial-gradient(circle at 5px 5px,white 1px,skyblue 1px);
}
div {
  float: left;
  border-style: solid;
  border-color: transparent;
  border-bottom-color: green;
  border-width: 20px;
  border-top-width: 0;
  border-bottom-width: 30px;
  border-bottom-left-radius: 35%;
  border-bottom-right-radius: 35%;
  box-shadow: red 0 15px 5px -13px;
  animation-name: light;
  animation-duration: 1s;
  animation-direction: alternate;
  animation-iteration-count: infinite;
  -webkit-animation-name: light;
  -webkit-animation-duration: 1s;
  -webkit-animation-direction: alternate;
  -webkit-animation-iteration-count: infinite;
}
section {
  float: left;
}
header {
  color: yellow;
  font-size: 30px;
  text-align: center;
  text-shadow: red 0 0 10px;
  line-height: .5;
  margin-top: 10px;
  animation-name: star;
  animation-duration: 1.5s;
  animation-direction: alternate;
  animation-iteration-count: infinite;
  -webkit-animation-name: star;
  -webkit-animation-duration: 1.5s;
  -webkit-animation-direction: alternate;
  -webkit-animation-iteration-count: infinite;
}
footer {
  float: left;
  width: 100%;
  height: 20px;
  background-image: linear-gradient(to right, transparent 45%, brown 45%, #600 48%, #600 52%, brown 55%, transparent 55%);
}
:target {
  display: none;
}
@keyframes star {
  from { text-shadow: red 0 0 3px; }
  to { text-shadow: red 0 0 30px; }
}
@-webkit-keyframes star {
  from { text-shadow: red 0 0 3px; }
  to { text-shadow: red 0 0 30px; }
}
@keyframes light {
  from { box-shadow: red 0 15px 5px -13px; }
  to { box-shadow: blue 0 15px 5px -13px; }
}
@-webkit-keyframes light {
  from { box-shadow: red 0 15px 5px -13px; }
  to { box-shadow: blue 0 15px 5px -13px; }
}
</style>
</head>
<body>
<section>
<header>&#x2605;</header>
<div id="0"><div id="1"><div id="2"><div id="3"><div id="4"><div id="5"><div id="6"><div id="7"><div id="8"><div id="9"><div id="10"><div id="11"><div id="12"><div id="13"><div id="14"><div id="15"><div id="16"><div id="17"><div id="18"><div id="19"><div id="20"><div id="21"><div id="22"><div id="23"><div id="24">
</div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>
<footer></footer>
</section>
</body>
</html>

1 और 25 के बीच आकार समर्थित हैं - बस टुकड़ा को पहचानकर्ता के रूप में URL में जोड़ें।

क्रोम, एक्सप्लोरर और फ़ायरफ़ॉक्स में काम करता है। ओपेरा में बदसूरत है, लेकिन स्केलिंग हिस्सा काम करता है।

नमूना अभिगम:

http://localhost/xmas.html#5

आकार का क्रिसमस ट्री ५

नमूना अभिगम:

http://localhost/xmas.html#15

१५ आकार का क्रिसमस ट्री

सीधा प्रसारण:

http://dabblet.com/gist/8026898

(लाइव दृश्य में कोई भी विक्रेता नहीं है, जो सीएसएस के पहले से बना हुआ है और इसमें आकार बदलने के लिए लिंक शामिल हैं।)


1
+1 मैं :targetआउटपुट को स्केल करने के लिए उपयोग करने के विचार को पसंद करता हूं :-)
स्क्विश ओस्फीफ्रेज

32

जावा

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

/**
 *
 * @author Quincunx
 */
public class ChristmasTree {
    public static double scale = 1.2;

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new ChristmasTree();
            }
        });
    }

    public ChristmasTree() {
        try {
            URL url = new URL("http://imgs.xkcd.com/comics/tree.png");
            BufferedImage img = ImageIO.read(url);

            JFrame frame = new JFrame();
            frame.setUndecorated(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            Dimension d = Toolkit.getDefaultToolkit().getScreenSize();

            BufferedImage result = 
                    new BufferedImage((int)(img.getWidth() * scale), 
                            (int) (img.getHeight() * scale), 
                            BufferedImage.TYPE_INT_RGB);
            Graphics2D g = (Graphics2D) result.getGraphics();
            g.drawRenderedImage(img, AffineTransform.getScaleInstance(scale, scale));

            JImage image = new JImage(result);
            image.setToolTipText("Not only is that terrible in general, but you "
                    + "just KNOW Billy's going to open the root present first, "
                    + "and then everyone will have to wait while the heap is "
                    + "rebuilt.");
            frame.add(image);
            frame.pack();
            frame.setVisible(true);

        } catch (IOException ex) {

        }
    }

    class JImage extends JPanel implements MouseListener {

        BufferedImage img;

        public JImage(){
            this(null);
        }
        public JImage(BufferedImage image){
            img = image;
            setPreferredSize(new Dimension(image.getWidth(), image.getHeight()));
            addMouseListener(this);
        }

        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(img, WIDTH, WIDTH, this);
        }

        public void setImage(BufferedImage image) {
            img = image;
            repaint();
        }

        @Override
        public void mouseClicked(MouseEvent me) {
            System.exit(0);
        }

        @Override
        public void mousePressed(MouseEvent me) {

        }

        @Override
        public void mouseReleased(MouseEvent me) {

        }

        @Override
        public void mouseEntered(MouseEvent me) {

        }

        @Override
        public void mouseExited(MouseEvent me) {

        }
    }
}

आकार बदलने के scaleलिए, कुछ अन्य दोहरे मान में परिवर्तन करें (यदि आप कुछ भी देखना चाहते हैं तो इसे 1 के आसपास रखें)।

नमूना उत्पादन (1.0 पैमाने के रूप में, स्क्रीनशॉट लेने के लिए बहुत आलसी है, इसलिए सिर्फ वही पोस्ट करता है जो यह करता है):

यहाँ छवि विवरण दर्ज करें

कार्यक्रम इस छवि को इंटरनेट से लेता है, इसके अनुसार आकार देता है scale, फिर इसे एक अज्ञात विंडो में रखता है जहां इसे प्रदर्शित किया जाता है। विंडो पर क्लिक करने से प्रोग्राम बंद हो जाता है। इसके अलावा, टूल टिप टेक्स्ट है, लेकिन लिंक नहीं है।


3
यह कुछ भी "ड्राइंग" नहीं है।
मृचक्र १ief

@ माचिस चुनौती कुछ आकर्षित करने के लिए नहीं है; यह एक पेड़ बनाना है। यह एक पेड़ बना रहा है, छवि लेकर
जस्टिन

2
क्या आपने स्वयं छवि बनाई है? नहीं, आप इसे कहीं से डाउनलोड कर रहे हैं। सवाल एक छवि को डाउनलोड करने और उसका आकार बदलने का नहीं है। अन्य उत्तरों की जाँच करें और आप समझेंगे कि वास्तव में ओपी ने क्या मांगा था।
मृचक्र १ief

10
@ माचिस क्या आपने नोटिस किया है कि ओपी को किसने लिखा है? यह उन कई संभावित समाधानों में से एक है, जिनकी मुझे तलाश थी जब मैंने यह सवाल पूछा।
जस्टिन

3
हा! सिर पर स्मैक! अपने स्वयं के पोस्ट के बाद से, मुझे तर्क करने के लिए बहुत अधिक कारण नहीं दिखाई देते हैं, मेरी राय व्यक्त करने के अलावा अन्य यह है कि यह आपके कोड को "कुछ" बनाने के समान नहीं है (जैसे कि शेष उत्तर)। जैसे मूवी डाउनलोड करना मूवी बनाने जैसा नहीं है।
मृचक्र १ief

28

TI-89 बेसिक

सिर्फ इसलिए कि मैं अपने कैलकुलेटर पर एक क्रिसमस ट्री देखना चाहता था। मैं इसे यहाँ पर टाइप करूँगा क्योंकि यह मेरे कैलकुलेटर पर दिखाई देता है।

:tree()
:Prgm
:
:Local size
:Prompt size
:
:Local d,x,y,str,orn
:size→x
:0→y
:{" "," "," "," "," "," "," "," ","°","∫","θ","O","©"}→orn
:size→d
:
:While d≥0
: d-1→d
: ""→str
: 
: While x≥0
:  str&" "→str
:  x-1→x
: EndWhile
: 
: str&"/"→str
: 2*y→x
:
: While x>0
:  str&elementAt(orn,rand(colDim(list▶mat(orn))))→str
:  x-1→x
: EndWhile
: 
: str&"\"→str
: Disp str
: y+1→y
: d→x
:EndWhile
:
:""→str
:
:For x,1,2*(size+2)
: str&"-"→str
:EndFor
:Disp str
:
:""→str
:For x,1,size+1
: str&" "→str
:EndFor
:str&"||"→str
:Disp str
:
:EndPrgm


:elementAt(l,i)
:Func
:Local m
:list▶mat(l)→m
:
:Local cd
:colDim(m)→cd
:
:If i>cd or i≤0 Then
: 1/0
:Else
: If i=cd Then
:  Return sum(mat▶list(subMat(m,1,i))) - sum(mat▶list(subMat(m,1,i+1)))
: Else
:  Return sum(mat▶list(subMat(m,1,i))) - sum(mat▶list(subMat(m,1,i+1)))
: EndIf
:EndIf
:EndFunc

यह मेरे Befunge उत्तर के समान ही काम करता है, लेकिन मैं विभिन्न आभूषणों का उपयोग करता हूं। हां, मेरे elementAtफ़ंक्शन का दोहराया उपयोग सूचियों और मैट्रिक्स के बीच कई रूपांतरणों के कारण कार्यक्रम को धीमा कर देता है, लेकिन जैसा कि मैंने इसे पहले लिखा था, मैंने इसे संपादित करने के खिलाफ फैसला किया। इसके अलावा, मैंने इस उत्तर को टाइप करते समय सीखा कि ©एक टिप्पणी करता है (मुझे लगा कि यह जैसा दिखता है @, लेकिन यह एक और चरित्र है)। अब से पहले कभी नहीं पता था कि यह क्या है।

नमूना उत्पादन:

size?
7
        /\
       / O\
      /∫   \
     / ©  ∫°\
    / θ ∫   ∫\
   /°  °  ©  ©\
  /O  ∫  O °   \
 / θ  °©  ∫ O  θ\
------------------
        ||

मैं उन प्यार करता हूँ ; वे कैंडी के डिब्बे की तरह दिखते हैं।


यह कौन सा संस्करण है?
SuperJedi224

@ SuperJedi224 मैंने इसे उत्तर में जोड़ दिया
जस्टिन

27

वोल्फ्राम भाषा ( गणितज्ञ )

जैसा कि प्रसिद्ध रेडिट धागे पर चर्चा की गई है: टी * पाप (टी)। क्रिसमस ट्री

PD = .5; s[t_, f_] := t^.6 - f;
 dt[cl_, ps_, sg_, hf_, dp_, f_] := 
    {PointSize[ps], Hue[cl, 1, .6 + sg .4 Sin[hf s[t, f]]], 
     Point[{-sg s[t, f] Sin[s[t, f]], -sg s[t, f] Cos[s[t, f]], dp + s[t, f]}]};

 frames = ParallelTable[

    Graphics3D[Table[{dt[1, .01, -1, 1, 0, f], dt[.45, .01, 1, 1, 0, f], 
                      dt[1, .005, -1, 4, .2, f], dt[.45, .005, 1, 4, .2, f]}, 
 {t, 0, 200, PD}],

     ViewPoint -> Left, BoxRatios -> {1, 1, 1.3}, ViewVertical -> {0, 0, -1}, 
    ViewCenter -> {{0.5, 0.5, 0.5}, {0.5, 0.55}}, Boxed -> False, Lighting -> "Neutral", 
    PlotRange -> {{-20, 20}, {-20, 20}, {0, 20}}, Background -> Black],

   {f, 0, 1, .01}];

Export["tree.gif", frames]

यहाँ छवि विवरण दर्ज करें


आप आकार कहां सेट करते हैं और यह उत्पन्न पेड़ को कैसे प्रभावित करता है?
manatwork

2
@ मैनटवर्क यह मूल t*sin(t)रूप से ग्राफ है जैसा कि मैंने पोस्ट में कहा है। तो बड़े टी की साजिश रचने से एक बड़ा पेड़ बन जाएगा:Table[..., {t, 0, 200, PD}]
विटालि कौरोव

24

Bc के साथ Bash और ImageMagick

#!/bin/bash

size="${1:-10}"

width=$(( size*25 ))
height=$(( size*size+size*10 ))

cos=( $( bc -l <<< "for (i=0;i<3.14*2;i+=.05) c(i)*100" ) )
sin=( $( bc -l <<< "for (i=0;i<3.14*2;i+=.05) s(i)*100" ) )
cos=( "${cos[@]%.*}" )
sin=( "${sin[@]%.*}" )

cos=( "${cos[@]/%-/0}" )
sin=( "${sin[@]/%-/0}" )

snow=()
needle=()
decor=()
for ((i=2;i<size+2;i++)); do
  for ((j=3;j<=31;j++)); do
    (( x=width/2+i*10+cos[62-j]*i*10/100 ))
    (( y=i*i+sin[j]*i*5/100 ))

    for ((e=0;e<i;e++)); do
      needle+=(
        -draw "line $x,$y $(( x+RANDOM%i-i/2 )),$(( y+RANDOM%i-i/2 ))"
        -draw "line $(( width-x )),$y $(( width-x+RANDOM%i-i/2 )),$(( y+RANDOM%i-i/2 ))"
      )
    done

    (( RANDOM%2 )) && (( x=width-x ))
    snow+=(
      -draw "circle $x,$(( y-i/2 )) $(( x+i/3 )),$(( y-i/2+i/3 ))"
    )

    (( RANDOM%10 )) || decor+=(
      -fill "rgb($(( RANDOM%5*20+50 )),$(( RANDOM%5*20+50 )),$(( RANDOM%5*20+50 )))"
      -draw "circle $x,$(( y+i )) $(( x+i/2 )),$(( y+i+i/2 ))"
    )
  done
done

flake=()
for ((i=0;i<width*height/100;i++)); do
  flake+=(
    -draw "point $(( RANDOM%width )),$(( RANDOM%height ))"
  )
done

convert \
  -size "${width}x$height" \
  xc:skyblue \
  -stroke white \
  -fill white \
  "${snow[@]}" \
  -blur 5x5 \
  "${flake[@]}" \
  -stroke brown \
  -fill brown \
  -draw "polygon $(( width/2 )),0 $(( width/2-size )),$height, $(( width/2+size )),$height" \
  -stroke green \
  -fill none \
  "${needle[@]}" \
  -stroke none \
  -fill red \
  "${decor[@]}" \
  x:

नमूना रन:

bash-4.1$ ./xmas.sh 5

नमूना उत्पादन:

आकार का क्रिसमस ट्री ५

नमूना रन:

bash-4.1$ ./xmas.sh 15

नमूना उत्पादन:

१५ आकार का क्रिसमस ट्री


23

सी

गहराई के लिए नमूना आउटपुट = 4, ज़ूम = 2.0

पेड़

यह उत्तर अन्य उत्तरों से काफी भिन्न दृष्टिकोण को नियोजित करता है। यह पुनरावर्ती शाखा द्वारा एक पेड़ की संरचना उत्पन्न करता है। प्रत्येक शाखा को मंडलियों के एक समूह द्वारा दर्शाया गया है। और अंत में मुख्य फ़ंक्शन हलकों का नमूना लेता है और जब सर्कल मिलते हैं तो पात्रों से भर जाते हैं। चूंकि यह एक दृश्य (जैसे कि रे-ट्रेसिंग) के नमूने द्वारा किया जाता है, यह आंतरिक रूप से स्केलेबल है। नकारात्मक पक्ष गति है, क्योंकि यह हर "पिक्सेल" के लिए पूरे पेड़ की संरचना को पार करता है!

पहला कमांड-लाइन तर्क शाखा की गहराई को नियंत्रित करता है। और दूसरा नियंत्रण पैमाने (2 का मतलब 200%) है।

#include <math.h>
#include <stdio.h>
#include <stdlib.h>

#define PI 3.14159265359

float sx, sy;

float sdCircle(float px, float py, float r) {
    float dx = px - sx, dy = py - sy;
    return sqrtf(dx * dx + dy * dy) - r;
}

float opUnion(float d1, float d2) {
    return d1 < d2 ? d1 : d2;
}

#define T px + scale * r * cosf(theta), py + scale * r * sin(theta)

float f(float px, float py, float theta, float scale, int n) {
    float d = 0.0f;
    for (float r = 0.0f; r < 0.8f; r += 0.02f)
        d = opUnion(d, sdCircle(T, 0.05f * scale * (0.95f - r)));

    if (n > 0)
        for (int t = -1; t <= 1; t += 2) {
            float tt = theta + t * 1.8f;
            float ss = scale * 0.9f;
            for (float r = 0.2f; r < 0.8f; r += 0.1f) {
                d = opUnion(d, f(T, tt, ss * 0.5f, n - 1));
                ss *= 0.8f;
            }
        }

    return d;
}

int ribbon() {
    float x = (fmodf(sy, 0.1f) / 0.1f - 0.5f) * 0.5f;
    return sx >= x - 0.05f && sx <= x + 0.05f;
}

int main(int argc, char* argv[]) {
    int n = argc > 1 ? atoi(argv[1]) : 3;
    float zoom = argc > 2 ? atof(argv[2]) : 1.0f;
    for (sy = 0.8f; sy > 0.0f; sy -= 0.02f / zoom, putchar('\n'))
        for (sx = -0.35f; sx < 0.35f; sx += 0.01f / zoom) {
            if (f(0, 0, PI * 0.5f, 1.0f, n) < 0.0f) {
                if (sy < 0.1f)
                    putchar('.');
                else {
                    if (ribbon())
                        putchar('=');
                    else
                        putchar("............................#j&o"[rand() % 32]);
                }
            }
            else
                putchar(' ');
        }
}

2
मुझे लगता है कि यह कहना सुरक्षित है कि यह इस सवाल का अब तक का सबसे तकनीकी रूप से प्रभावशाली जवाब है।
स्टनटडूड

20

गणितज्ञ ASCII

मुझे वास्तव में ASCII कला पसंद है, इसलिए मैं एक और बहुत अलग उत्तर जोड़ता हूं - विशेष रूप से इसलिए यह गणितज्ञ में बहुत कम है:

Column[Table[Row[RandomChoice[{"+", ".", "*", "~", "^", "o"}, k]], {k, 1, 35, 2}], 
Alignment -> Center]

यहाँ छवि विवरण दर्ज करें

और अब थोड़ा और परिष्कार के साथ एक स्केलेबल गतिशील ASCII पेड़। बारीकी से देखें - पेड़ भी बदल रहा है - बर्फ शाखाओं से चिपक जाता है फिर गिरता है ;-)

DynamicModule[{atoms, tree, pos, snow, p = .8, sz = 15},

 atoms = {
   Style["+", White],
   Style["*", White],
   Style["o", White],
   Style[".", Green],
   Style["~", Green],
   Style["^", Green],
   Style["^", Green]
   };

 pos = Flatten[Table[{m, n}, {m, 18}, {n, 2 m - 1}], 1];

 tree = Table[RandomChoice[atoms, k], {k, 1, 35, 2}];

 snow = Table[
   RotateLeft[ArrayPad[{RandomChoice[atoms[[1 ;; 2]]]}, {0, sz}, " "],
     RandomInteger[sz]], {sz + 1}];

 Dynamic[Refresh[

   Overlay[{

     tree[[Sequence @@ RandomChoice[pos]]] = RandomChoice[atoms];
     Column[Row /@ tree, Alignment -> Center, Background -> Black],

     Grid[
      snow = 
       RotateRight[
        RotateLeft[#, 
           RandomChoice[{(1 - p)/2, p, (1 - p)/2} -> {-1, 0, 1}]] & /@
          snow
        , {1, 0}]]

     }, Alignment -> Center]

   , UpdateInterval -> 0, TrackedSymbols -> {}]
  ]
 ]

यहाँ छवि विवरण दर्ज करें


अच्छा है। जहां आप आकार समायोजित करते हैं? क्या यह 35 के Tableमापदंडों में है?
मैनटवर्क

@ मैनटवर्क हाँ 35 टेबल में। धन्यवाद;)
विटालि कौरोव

19

मैंने इसे r / r / dailyprogrammer पर चुनौती के लिए बनाया , (यकीन नहीं कि कोड का पुन: उपयोग आत्मा / इस नियम के विरुद्ध है) लेकिन:

Brainfuck। एक नंबर इनपुट (पत्तियों की निचली पंक्ति की लंबाई) और दो वर्णों के रूप में लेता है। प्रत्येक के बीच एक स्थान।

उदाहरण इनपुट: 13 = +

उदाहरण आउटपुट:

      +
     +++
    +++++
   +++++++
  +++++++++
 +++++++++++
+++++++++++++
     ===

कोड:

                   >
                  ,--
                 -----
                -------
               ---------
              ---------[+
             +++++++++++++
            +++++++++++++++
           +++<[>>++++++++++
          <<-]>--------------
         ---------------------
        -------------[<+>-]>[<<
       +>>-]<,------------------
      --------------],>,,>>++++[<
     ++++++++>-]++++++++++>+<<<<<-
    [>>>>>>+>+<<<<<<<--]>>>>>>>[<<<
   <<<<++>>>>>>>-]<<<<<<<[>>>>>>[<<<
  .>>>>+<-]>[<+>-]<<[<<<.>>>>>+<<-]>>
 [<<+>>-]<<<.>>><-<++<<<<<--]>>...>>>-
--[>+<<<<..>>>--]<.>>[<<<.>>>>+<-]<<<<<
                ...>>>.

1
अंत में, एक बुद्धिशील उत्तर!
फराप

16

प्रसंस्करण

मूल भग्न क्रिसमस का पेड़। माउस वाई स्थिति पीढ़ियों की संख्या को बदलने के लिए आकार, ऊपर और नीचे तीर कुंजियों का उपयोग करती है।

int size = 500;

int depth = 10;

void setup() {
  frameRate(30);
  size(size, size, P2D);
}

void draw() {
  background(255);
  tree(size/2.0, size, 0.0, radians(0), radians(108), (size - mouseY)/3, depth);
  tree(size/2.0, size, 0.0, radians(108), radians(0), (size - mouseY)/3, depth);
}

void keyPressed() {
  if(keyCode == UP) depth++;
  if(keyCode == DOWN) depth--;
  depth = max(depth, 1);
}

void tree(float posX, float posY, float angle, float forkRight, float forkLeft, float length, int generation) {
  if (generation > 0) {
    float nextX = posX + length * sin(angle);
    float nextY = posY - length * cos(angle);

    line(posX, posY, nextX, nextY);

    tree(nextX, nextY, angle + forkRight, forkRight, forkLeft, length*0.6, generation - 1);
    tree(nextX, nextY, angle - forkLeft,  forkRight, forkLeft, length*0.6, generation - 1);
  }
}

क्या एक सुंदर क्रिसमस का पेड़, आपको नहीं लगता, मा?

Or, if you prefer a fuller tree:

int size = 500;

int depth = 10;

void setup() {
  frameRate(30);
  size(size, size, P2D);
}

void draw() {
  background(255);
  tree(size/2.0 - 5, size, 0.0, 0.0, (size - mouseY)/3, depth);
}

void keyPressed() {
  if(keyCode == UP) depth++;
  if(keyCode == DOWN) depth--;
  depth = max(depth, 1);
}

void tree(float posX, float posY, float angle, float fork, float length, int generation) {
  if (generation > 0) {
    float nextX = posX + length * sin(angle);
    float nextY = posY - length * cos(angle);

    line(posX, posY, nextX, nextY);

    tree(nextX, nextY, angle + fork + radians(108), fork, length*0.6, generation - 1);
    tree(nextX, nextY, angle - fork,                fork, length*0.6, generation - 1);
    tree(nextX, nextY, angle + fork - radians(108), fork, length*0.6, generation - 1);
  }
}

मैं सुपर परेशान हूँ कि किसी ने मुझे एक भग्न पेड़ पोस्ट करने के लिए हराया, भले ही मैं इस विचार में उनसे आगे था और वास्तव में उस पर काम शुरू कर रहा था: /


14

माणिक

((1..20).to_a+[6]*4).map{|i|puts ('*'*i*2).center(80)}

नववर्ष की शुभकामना

आप आउटपुट को बदलकर अनुकूलित कर सकते हैं *
हरे पेड़ के लिए:((1..20).to_a+[6]*4).map{|i|puts "\e[32m"+('*'*i*2).center(80)}

दृष्टिकोण 2 (क्रिसमस का पेड़ जो तीर की तरह नहीं दिखता है)

((1..6).to_a+(3..9).to_a+(6..12).to_a+[3]*4).map{|i|puts "\e[32m"+('*'*i*4).center(80)}

नववर्ष की शुभकामना

दृष्टिकोण ३

((1..20).to_a+[6]*4).map{|i|puts' '*(20-i)+'*'*(2*i-1)}

2
यह एक तीर है, तो एक क्रिसमस का पेड़ है!
klingt.net

4
@ klingt.net * से।
NARKOZ

क्रिसमस ट्री को हल्का करने का समय।
NARKOZ

और जहां आप आकार निर्दिष्ट करते हैं?
मैनटवर्क

@manatwork श्रेणियों में। 1..20, 1..6इत्यादि
NARKOZ

14

कछुआ ग्राफिक्स

यहाँ छवि विवरण दर्ज करें

यूलर सर्पिल के गुणों के आधार पर ।

कोड:

यहाँ छवि विवरण दर्ज करें

पैमाने को चरण आकार ( move forward by: 6) द्वारा निर्धारित किया जाता है । एक इंटरैक्टिव संस्करण यहां उपलब्ध है

इस सवाल से प्रेरित पी.एस.


यह "मापनीय" कहां है? इसके अलावा, यह बहुत अच्छा है!
जस्टिन

@Quincunx आप बदलकर पैमाने बदल सकते हैं move forward by 6। उदाहरण के लिए, 10एक बड़ा पेड़ पैदा करेगा। वास्तव में इस "भाषा" में कोई इनपुट नहीं है (या पूरे कोड को इनपुट के रूप में माना जा सकता है;))।
ybeltukov

14

प्रसंस्करण

मैंने एक एल-सिस्टम और एक कछुए का उपयोग करके इस पेड़ को जनरेटर बनाया।

एक पेड़

कोड:

//My code, made from scratch:
final int THE_ITERATIONS = 7;
final float SCALE = 1;
final int ANGLE = 130;
final int SIZE = 4;

final int ITERATIONS = THE_ITERATIONS - 1;

int lineLength;

String lSystem;
ArrayList<Turtle> turtles;

int turtleIndex;
int lSystemIndex;

void setup()
{
  size(320, 420);
  background(255);
  translate(width / 2, height - 70);

  lineLength = ITERATIONS * 2 + 2;

  lSystem = "[-F][+F]F";

  turtles = new ArrayList<Turtle>(ITERATIONS + 1);
  lSystemIndex = 0;

  calculateLSystem();
  println(lSystem);

  turtles.add(new Turtle(0, 0));

  doTurtles();
  save("Tree.png");
}

void doTurtles()
{
  while(lSystemIndex < lSystem.length())
  {
    print("\"" + lSystem.charAt(lSystemIndex) + "\": ");
    if(lSystem.charAt(lSystemIndex) == 'F')
    {
      turtleForward();
    }
    else if(lSystem.charAt(lSystemIndex) == '[')
    {
      lineLength -= 2;
      addTurtle();
      println(turtles.size());
    }
    else if(lSystem.charAt(lSystemIndex) == ']')
    {
      lineLength += 2;
      removeTurtle();
      println(turtles.size());
    }
    else if(lSystem.charAt(lSystemIndex) == '+')
    {
      turtleRight();
    }
    else if(lSystem.charAt(lSystemIndex) == '-')
    {
      turtleLeft();
    }
    lSystemIndex++;
  }
}

void addTurtle()
{
  turtles.add(new Turtle(turtles.get(turtles.size() - 1)));
}

void removeTurtle()
{
  turtles.remove(turtles.size() - 1);
}

void turtleLeft()
{
  turtles.get(turtles.size() - 1).left(ANGLE + random(-5, 5));
}

void turtleRight()
{
  turtles.get(turtles.size() - 1).right(ANGLE + random(-5, 5));
}

void turtleForward()
{
  print(turtles.get(turtles.size() - 1) + ": ");
  strokeWeight(min(lineLength / SIZE, 1));
  stroke(5 + random(16), 90 + random(16), 15 + random(16));
  if(turtles.size() == 1)
  {
    strokeWeight(lineLength / 2);
    stroke(100, 75, 25);
  }
  turtles.get(turtles.size() - 1).right(random(-3, 3));
  turtles.get(turtles.size() - 1).forward(lineLength);
}

void calculateLSystem()
{
  for(int i = 0; i < ITERATIONS; i++)
  {
    lSystem = lSystem.replaceAll("F", "F[-F][+F][F]");
  }
  lSystem = "FF" + lSystem;
}

void draw()
{

}

//——————————————————————————————————————————————————————
// Turtle code, heavily based on code by Jamie Matthews
// http://j4mie.org/blog/simple-turtle-for-processing/
//——————————————————————————————————————————————————————

class Turtle {
  float x, y; // Current position of the turtle
  float angle = -90; // Current heading of the turtle
  boolean penDown = true; // Is pen down?
  int lineLength;

  // Set up initial position
  Turtle (float xin, float yin) {
    x = xin;
    y = yin;
    //lineLength = lineLengthin;
  }

  Turtle (Turtle turtle) {
    x = turtle.x;
    y = turtle.y;
    angle = turtle.angle;
    //lineLength = turtle.lineLength - 1;
  }

  // Move forward by the specified distance
  void forward (float distance) {
    distance = distance * SIZE * random(0.9, 1.1);
    // Calculate the new position
    float xtarget = x+cos(radians(angle)) * distance;
    float ytarget = y+sin(radians(angle)) * distance;

    // If the pen is down, draw a line to the new position
    if (penDown) line(x, y, xtarget, ytarget);
    println(x + ", " + y + ", " + xtarget + ", " + ytarget);
    // Update position
    x = xtarget;
    y = ytarget;
  }

  // Turn left by given angle
  void left (float turnangle) {
    angle -= turnangle;
    println(angle);
  }

  // Turn right by given angle
  void right (float turnangle) {
    angle += turnangle;
    println(angle);
  }
}

2
हाँ! एक एल-सिस्टम!
लूसर डॉग

1
मैं इसके बारे में सबसे अधिक यथार्थवादी होने के बारे में सहमत हूं :)
टाइमटेक

@Timtech मैं असहमत हूं। मुझे लगता है कि जन द्वारिका के जावास्क्रिप्ट जवाब के बाद यह दूसरा सबसे यथार्थवादी है । मेरा मतलब है, उन सुइयों (इस एक पर) को देखो! वे सभी पैटर्न में एक साथ क्लस्टर किए गए हैं जो मैंने एक सदाबहार पेड़ पर नहीं देखा है। हालाँकि, जान का पेड़ मुझे एक देवदार की तरह लग रहा है।
जस्टिन

1
@Quincunx मैं उस एक को याद किया होगा। फिर भी, यह एक बहुत अच्छा लग रहा है।
टिमटेक 21:13

@Quincunx जनवरी का पेड़- और हॉवर्ड का भी, वास्तव में अच्छा है, लेकिन जरूरी नहीं कि पूरी तरह से यथार्थवादी हो । जान भी मानती है कि पेड़ केवल "क्वासिरेलिस्टिक" है। - रयानकार्लसन 10 सेकंड पहले
द गाइ विथ द हेट

12

जावास्क्रिप्ट (कंसोल में किसी भी पृष्ठ पर चलाएँ)

मैं इसे गोल्फ कर रहा था लेकिन फिर तय नहीं किया, ताकि आप देख सकें कि मैजिक नंबरों के टन हैं: पी

// size
s = 300

document.write('<canvas id=c width=' + s + ' height=' + s + '>')
c = document.getElementById('c').getContext('2d')
c.fillStyle = '#0D0'
for (var i = s / 3; i <= s / 3 * 2; i += s / 6) {
  c.moveTo(s / 2, s / 10)
  c.lineTo(s / 3, i)
  c.lineTo(s / 3 * 2, i)
  c.fill()
}
c.fillStyle = '#DA0'
c.fillRect(s / 2 - s / 20, s / 3 * 2, s / 10, s / 6)

परिणाम के लिए s = 300:

स्क्रीनशॉट

s = 600:

स्क्रीनशॉट


2
क्या आप पेड़ को सजाने जा रहे हैं? :-)
जस्टिन

1
@Quincunx शायद, मुझे लगता है कि बाद में :) पर काम कर सकते हैं
दरवाज़े

2
GAH! अर्धविराम कहाँ हैं ?!
एंड्रयू लार्सन


10

गेम मेकर लैंग्वेज

spr_tree

spr_tree

पेड़ की घटना बनाएँ

image_speed=0
size=get_integer("How big do you want me to be?#Integer between 1 and 10, please!",10)
image_index=size-1

कमरा, 599 द्वारा 402

पेड़ पर रखा गया है (0,0)

बोनस! आप 0-9 कुंजियों के साथ प्रारंभिक इनपुट के बाद क्रिसमस ट्री का आकार बदल सकते हैं।


8

AppleScript + SE उत्तर

वास्तव में इस सवाल का जवाब संपादित करते समय दुर्घटना से उठाया। जाओ पता लगाओ।

कोड चलाकर, अपनी संख्या जो आप चाहते हैं, एसई पोस्ट पर स्वाइप करके और टेक्स्ट फ़ील्ड में क्लिक करके इसका उपयोग करें। यह इस तथ्य का फायदा उठाता है कि स्टैक उद्धरण।

tell application "System Events"
    set layers to (display dialog "" default answer "")'s text returned as number
    delay 5
    repeat layers times
        keystroke ">"
    end repeat
end tell

आउटपुट (इनपुट 50):

>


6

सजाया हुआ फोरट्रान का पेड़

    character(len=36) :: f='/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\'
    character(len=18) :: g = '                  '
    character(len=14) :: p = ".x$.+oO+oO.#,~"
    character(len=10) :: q

    n = iargc()
    if (n /= 1) then 
        k = len(g)
    else
        call getarg(1,q) 
        read(q,*) k
    end if
    l = modulo(k,len(g))+1
    do i=1,l
        j = mod(i,len(p)-1)+1
        print *,g(1:l-i),p(j:j),f(1:2*i),p(j+1:J+1)
        end do
    print *,g(1:l-1),f(1:4)
    end

पेड़ का आकार सीमित है, लेकिन यह मानता है कि यह क्रिसमस के पेड़ों के जीवन को सही ढंग से दर्शाता है।

शिशु वृक्ष से:

$./tree
 x/\$
 /\/\

किशोर वृक्ष के लिए:

$./tree 6
       x/\$
      $/\/\.
     ./\/\/\+
    +/\/\/\/\o
   o/\/\/\/\/\O
  O/\/\/\/\/\/\+
 +/\/\/\/\/\/\/\o
       /\/\

वयस्क के लिए:

$./tree 17
                  x/\$
                 $/\/\.
                ./\/\/\+
               +/\/\/\/\o
              o/\/\/\/\/\O
             O/\/\/\/\/\/\+
            +/\/\/\/\/\/\/\o
           o/\/\/\/\/\/\/\/\O
          O/\/\/\/\/\/\/\/\/\.
         ./\/\/\/\/\/\/\/\/\/\#
        #/\/\/\/\/\/\/\/\/\/\/\,
       ,/\/\/\/\/\/\/\/\/\/\/\/\~
      ./\/\/\/\/\/\/\/\/\/\/\/\/\x
     x/\/\/\/\/\/\/\/\/\/\/\/\/\/\$
    $/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\.
   ./\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\+
  +/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\o
 o/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\O
                  /\/\    

5

जावा

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<b.getHeight();i++){
            if(r.nextDouble()<0.3){
                g.drawLine((int)(0.4*b.getWidth()),i,(int)(0.6*b.getWidth()),i);
            }
        }
        for(int i=0;i<siz;i++){
            g.setColor(new Color(r.nextInt(4),150+r.nextInt(15),20+r.nextInt(7)));
            g.drawLine(b.getWidth()/2-(int)(b.getWidth()*0.42*i/siz),(int)(b.getHeight()*0.9)+r.nextInt(5)-2,b.getWidth()/2+(int)(b.getWidth()*0.42*i/siz),(int)(b.getHeight()*0.9)+r.nextInt(5)-2);
            g.setColor(new Color(r.nextInt(4),150+r.nextInt(15),20+r.nextInt(7)));
            g.drawLine(b.getWidth()/2-(int)(b.getWidth()*0.42*i/siz),(int)(b.getHeight()*0.9),b.getWidth()/2,(int)(b.getHeight()*(0.1+(.06*i)/siz)));
            g.setColor(new Color(r.nextInt(4),150+r.nextInt(15),20+r.nextInt(7)));
            g.drawLine(b.getWidth()/2+(int)(b.getWidth()*0.42*i/siz),(int)(b.getHeight()*0.9),b.getWidth()/2,(int)(b.getHeight()*(0.1+(.06*i)/siz)));
        }
        g.setColor(new Color(150,120,40));
        g.fillOval((b.getWidth()-siz-2)/2,b.getHeight()/10,siz+2,siz+2);
        g.setColor(new Color(250,240,80));
        g.fillOval((b.getWidth()-siz)/2,b.getHeight()/10,siz,siz);
        List<Color>c=Arrays.asList(new Color(0,255,0),new Color(255,0,0),new Color(130,0,100),new Color(0,0,200),new Color(110,0,200),new Color(200,205,210),new Color(0,240,255),new Color(255,100,0));
        List<Point>pts=new ArrayList<>();
        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"));
    }
}

नमूना परिणाम:

आकार = 3:

यहाँ छवि विवरण दर्ज करें

आकार = 4:

यहाँ छवि विवरण दर्ज करें

आकार = 5:

यहाँ छवि विवरण दर्ज करें

आकार = 12:

यहाँ छवि विवरण दर्ज करें

आकार = 20:

यहाँ छवि विवरण दर्ज करें


1
मैंने पहले इस पर ध्यान नहीं दिया। सुपर कूल +1
एक

4

REBOL

प्रतीकों को प्रदर्शित करने के लिए एक बोली के साथ। पेड़ के आकार को बदलने के लिए, बस के पैरामीटर को बदलें make-tree

make-tree: func [int /local tr] [
  tr: copy []
  length: (int * 2) + 3
  repeat i int [
      repeat j 3 [
            ast: to-integer ((i * 2) - 1 + (j * 2) - 2)
            sp: to-integer (length - ast) / 2
            append/dup tr space sp 
            append/dup tr "*" ast 
            append tr lf
      ]
  ]
  append/dup tr space (length - 1) / 2
  append tr "|"
  append tr lf
  tr
]

print make-tree 3

3 परतों वाला एक पेड़ 5 परतों वाला एक पेड़


3
आप आकार कहां सेट करते हैं और यह उत्पन्न पेड़ को कैसे प्रभावित करता है?
15

@manatwork treeब्लॉक को बदलने के लिए । आप इसे आकार बदल सकते हैं या अपनी इच्छा से कुछ प्रतीकों को बदल सकते हैं।
वेन कुई

@WayneTsui यह ओपी की आवश्यकताओं के अनुरूप नहीं है, "आकार कुछ इनपुट विधि द्वारा चयन योग्य होना चाहिए" और "बड़े इनपुट को एक बड़े पेड़ का उत्पादन करना चाहिए।"
ulidtko

1
@kealist से एक नया मेक-ट्री फंक्शन
वेन कुई

4

अजगर

import sys
w = sys.stdout.write
def t(n,s):
    for i in range(n):
        for a in range(n-i):
            w(" ")
        w("[")
        for l in range(i<<1):
            if i==n-1:
                w("_")
            else:
                w("~")
        w("]")
        print("")
    for o in range(s):
        for i in range(n):
            w(" ")
        print("[]")

t(10, 2)

यहाँ छवि विवरण दर्ज करें


1

तिव-मूल Basic४

एक आकार के लिए पूछता है:

              :
            Input 
           S:Lbl 1
            S-1→S
              :
             "||
            "+""→
           Str1:" 
             "→Str2
         :Disp Str2+
        "   **":Disp 
       Str2+"  "+"*"+
      Str1+"*":Disp " 
     "+Str1+"*-"+"||-*
    ":Disp Str1+"*--||-
   -*":Disp "   *---||--
  -*":Disp "  *----||----
 *":Disp Str1+"   "+Str2+"
":If S>0:Goto 2:Goto 1:Lbl 
              2

आउटपुट (आकार 1):

       **
      *||*
     *-||-*
    *--||--*
   *---||---*
  *----||----*
       ||

1
आकार चयन योग्य कहाँ है? यह एक निश्चित आकार का पेड़ है
जस्टिन

1
@Quincunx फिक्स्ड।
तैमुक

4
-1; आप टीआई-बेसिक प्रोग्राम में सिर्फ मनमाना व्हाट्सएप नहीं डाल सकते।
lirtosiast
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.