Χριστουγενιάτικα δέντρα

Πέρυσι είχαμε κάνει ένα “διαγωνισμό” στο Telegram, και ζητάγαμε να φτιαχτεί ένα πρόγραμμα που να φτιάχνει χριστουγεννιάτικα δέντρα. Μπορεί να είναι ένα πρόγραμμα που τυπώνει απλά το παρακάτω με print, ή να φτιάχνει κάτι σαν το παρακάτω

Ακόμα με με απλές εντολές echo σε Bash, η λύση είναι δεκτή (και η ικανοποίηση που θα το καταφέρεις μεγάλη), οπότε περιμένουμε τις λύσεις σας

            ||            
           *||*           
          **||**          
         ***||***         
        ****||****        
       *****||*****       
      ******||******      
     *******||*******     
    ********||********    
   *********||*********   
  **********||**********  
 ***********||*********** 
            ||            

Και ξεκινάω με την λύση που είχα δώσει πέρυσι, μόνο μην μου τρομάξετε :stuck_out_tongue:

#include <algorithm>
#include <cassert>
#include <string>
#include <vector>
#include <iostream>
#include <iterator>

using namespace std;

int main() {
    constexpr size_t n = 12;
    constexpr auto fill_char = ' ';
    constexpr auto star_char = '*';

    auto level = n;
    assert(level >= 1);

    auto base_str = string(level, star_char) + "||" + string(level, star_char);
    auto items = vector<string>(level, base_str);

    transform(items.begin(), items.end(), items.begin(), [&level](string &it) -> string {
        it.replace(it.begin(), it.begin() + level, level, fill_char);
        it.replace(it.end() - level, it.end(), level, fill_char);
        level--;
        return it;
    });

    // Print Tree
    copy(items.begin(), items.end(), ostream_iterator<string>(cout, "\n"));
    // Print the log "||" base
    cout << items.front() << "\n";

    return EXIT_SUCCESS;
}

Σε Python:

print('''            ||            
           *||*           
          **||**          
         ***||***         
        ****||****        
       *****||*****       
      ******||******      
     *******||*******     
    ********||********    
   *********||*********   
  **********||**********  
 ***********||*********** 
            ||            ''')
3 Likes

GW basic emulator σε Linux mint. (Μη γελάτε, ό,τι μπορεί ο καθένας).


Το δεντράκι “αναβοσβήνει” 100 φορές (σύμφωνα με το εύρος του LI στη γραμμή 10), επιλέγοντας τυχαία ανάμεσα σε “#” και “*”. Η DE στην 130 είναι απλό delay.

10 FOR LI=1 TO 100
20 CLS
30 PRINT STRING$(35,32)+"/"
40 PRINT STRING$(34,32)+"< >"
50 PRINT STRING$(35,32)+"/"
60 PRINT STRING$(35,32)+"||"
80 FOR X=1 TO 10
90 RANDOMIZE(X100): A=INT(10RND(1)):IF A/2=INT(A/2)THEN CH=42 ELSE CH=35
100 PRINT STRING$(35-X,32)+STRING$(X,CH)+"||"+STRING$(X,CH)
110 NEXT X
120 PRINT STRING$(25,32)+STRING$(10,"")+"||"+STRING$(10,"")
130 FOR DE=1 TO 20000:NEXT
140 NEXT LI

Thanks to @lucinos (* το extension .bas μπαίνει αυτόματα. Χωρίς το “,a” που μου συνέστησες όμως, ανοίγοντας το αρχείο με office writer, έβλεπα ιερογλυφικά).


PS: Κάτι κάνω λάθος και ο κώδικας δεν εμφανίζεται σωστά.

6 Likes

Εγώ cLopy :stuck_out_tongue:

Ρίξτε αυτό στο Terminal :smiley:

wget -d -c -O "christmas.sh" "https://raw.githubusercontent.com/sergiolepore/ChristBASHTree/master/tree-EN.sh" && chmod +x christmas.sh && ./christmas.sh
1 Like

Πραγματικά εντυπωσιακό, αλλά είπαμε να το κάνεις μόνος σου :stuck_out_tongue:

Αλλά επί την ευκαιρία, έδωσες ένα πολύ καλό παράδειγμα του τι δεν πρέπει να κάνεις αν δεν θέλεις να χάσεις τον έλεγχο του υπολογιστή σου.

Κάποιος

  • που δεν ξέρεις σου ζητάει
  • Να γράψεις εντολές που ίσως δεν καταλαβαίνεις
  • Που κατεβάζουν και τρέχουν ένα προγραμμα
  • Που κάνει κάτι καθόλου σηματικο

Αλήθεια τι μπορεί να πάει στραβά ;

Αν κάποιος θέλει να δει τον κώδικα, που την συγκεκριμένη στιγμή που το βλέπω είναι ασφαλής και κάνει αυτό που υπόσχετε. Δεν μπορείς να ξέρεις όμως αν κάποιος τον αλλάξει αύριο

Για να μην παρεξηγηθώ, τα λέω αυτά επι τη ευκαιρία, να μαθαίνουμε όλοι. Όχι σαν μομφή απέναντι στον @SomniusX, που τον ευχαριστώ για την συμμετοχή του.

1 Like

μπορείς να σώσεις τον κώδικα σαν κείμενο (αντί για την προεπιλεγμένη συμπίεση) με την επιλογή a αν θυμάμαι καλά. δλδ

SAVE "XMASTREE.BAS", a

μετά το διαβάζεις και το αντιγράφεις από το κανονικό σύστημα.
(και ξαφνικά σκέφτομαι ότι δεν θυμάμαι αν βάζουμε κατάληξη .bas για save/load)
:stuck_out_tongue:

Το LOAD επίσης απλά διαβάζει και κείμενο, απλά πρόσεχε την διαφορά σύμβασης DOS/UNIX.

3 Likes

Αφού δεν κάνει κάτι ως root ούτε ζητάει elevated privs…

Αλλά έχεις όμως ένα δίκιο, έτσι σπάνε διανομές και φωνάζουν μετά όταν κάποιος buildάρει source που δεν έχει testαριστεί και άλλα.