Πέρυσι είχαμε κάνει ένα “διαγωνισμό” στο Telegram, και ζητάγαμε να φτιαχτεί ένα πρόγραμμα που να φτιάχνει χριστουγεννιάτικα δέντρα. Μπορεί να είναι ένα πρόγραμμα που τυπώνει απλά το παρακάτω με print, ή να φτιάχνει κάτι σαν το παρακάτω
Ακόμα με με απλές εντολές echo σε Bash, η λύση είναι δεκτή (και η ικανοποίηση που θα το καταφέρεις μεγάλη), οπότε περιμένουμε τις λύσεις σας
Το δεντράκι “αναβοσβήνει” 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, έβλεπα ιερογλυφικά).
Πραγματικά εντυπωσιακό, αλλά είπαμε να το κάνεις μόνος σου
Αλλά επί την ευκαιρία, έδωσες ένα πολύ καλό παράδειγμα του τι δεν πρέπει να κάνεις αν δεν θέλεις να χάσεις τον έλεγχο του υπολογιστή σου.
Κάποιος
που δεν ξέρεις σου ζητάει
Να γράψεις εντολές που ίσως δεν καταλαβαίνεις
Που κατεβάζουν και τρέχουν ένα προγραμμα
Που κάνει κάτι καθόλου σηματικο
Αλήθεια τι μπορεί να πάει στραβά ;
Αν κάποιος θέλει να δει τον κώδικα, που την συγκεκριμένη στιγμή που το βλέπω είναι ασφαλής και κάνει αυτό που υπόσχετε. Δεν μπορείς να ξέρεις όμως αν κάποιος τον αλλάξει αύριο
Για να μην παρεξηγηθώ, τα λέω αυτά επι τη ευκαιρία, να μαθαίνουμε όλοι. Όχι σαν μομφή απέναντι στον @SomniusX, που τον ευχαριστώ για την συμμετοχή του.
Εκτός κλίματος και εποχής, αλλά λόγω άφθονου χρόνου :
#!/usr/bin/python
def tree(height):
width=2*int(height)+1
line=width*" "
array=list(line)
for i in range (0,int(height)):
for j in range (0,width):
if j==int(width/2):
if i==0:
array[j]="|"
else:
array[j-i]="*"
if j==int(width/2)+1:
if i==0:
array[j]="|"
else:
array[j+i]="*"
line="".join(array)
print(line)
tree(input("Give height of tree: "))
Αν μιλάς για τον κώδικα της λύσης μου δεν είναι γραμμένος σε Rust. Είναι γραμμένος σε C++. Τα μοντέρνα χαρακτηριστικά της C++ κάνουν την χρήση της STL παιγνιδάκι, και την φέρνουν αρκετά κοντά στην εκφραστικότητα της Python. Με μια μικρή διαφορά όμως, στην απόδοση. Κοίταξα τον παραγόμενο κώδικα σε assembly με την ελπίδα να βρω μόνο μια σειρά απο κλήσεις στην puts, δεν το βρήκα αυτό, έχει μια πολυπλοκότητα και δεν είναι τα πάντα που χρήσιμοποιώ constexpr ακόμα, αλλά ποιος μπορεί να ξέρει στο μέλλον.
Η C++ είναι σήμερα μια καινούργια γλώσσα, σταμάτα να την θεωρείς απλά σαν μια αντικειμενοστραφή γλώσσα, δεν είναι μόνο αυτό και το μεγαλύτερο μέρος της βιβλιοθήκης της δεν είναι ατελείωτες ιεραρχίες αντικειμένων. H C++ είναι κυρίως γενικός προγραμματισμός (τα templates και ο meta προγραμματισμός με αυτά) αν θέλεις μια ταμπέλα, αλλά στην πραγματικότητα θέλεις πολλές. Μια από αυτές είναι και η συναρτησιακή ταμπέλα που χρησιμοποιώ στο παράδειγμα.
Αλλά δεν ρώτησες για την C++, ρώτησες για την Rust. Η επαφή μου με την Rust είναι λίγο παλιά, και δεν την παρακολουθώ στενά τα τελευταία 2 χρόνια αλλά μου άρεσε σχεδόν οσο και η ruby. Το ερώτημα για μένα στο αν αξίζει να μάθεις μια γλώσσα είναι το εξής
Σε τι θα αλλάξει ο τρόπος σκέψης μου όταν μάθω αυτή την γλώσσα; Τι θα πάρω από αυτήν μαζί μου όταν προγραμματίζω σε άλλες γλώσσες;
Αυτό το κριτήριο δεν είναι γενικό και μπορείς να έχεις άλλους λόγους να μάθεις PHP αλλά στην Rust έχει μια πολύ ωραία απάντηση. Το μοντέλο ιδιοκτησίας της μνήμης. Και αν μάθεις αυτό δεν θέλεις μετά ένα garbage collector. Αν αρχίσεις να σκέφτεσαι με το σε ποιον ανήκει αυτή η μνήμη, τα προβλήματα με την διαχείριση της θα λυθούν χωρίς τα προβλήματα που έχει ένας garbage collector.
Το δεύτερο που παίρνεις μαζί είναι ο έλεγχος ορθότητας του προγράμματος και η χρήση μεταβλητών που μπορούν να έχουν τιμή ή να μην έχουν, χωρίς να μπορείς να αγνοήσεις την δεύτερη περίπτωση.
Και έχει και πολλές άλλες χάρες. Οπότε ναι αξίζει τον κόπο.
edit no1: από ότι φαίνεται δε μου βγαίνει σωστό δέντρο με αυτή τη συνάρτηση edit no2 : πάρτε και μια python
height=int(input("Δώσε ύψος του δέντρου : "))
def sides(i):
return (i*"*")
for i in range(0,int(height)):
if i == 0:
print((height)*" ","<||>")
elif i<height-1:
print((height-i)*" ",sides(i),"||",sides(i))
else:
print((height-2)*" ","|==||==|")```