3.times do
puts "Coraz bliżej Święta!"
end
W programistycznym stylu zapraszamy na kolejne zajęcia CoderDojo w Gliwicach.
Zajęcia planujemy przeprowadzić w stylu projektowym. Każdy indywidualnie będzie programował swoją choinkę. Oczywiście wszystko odbywać się będzie pod czujnym okiem programistów oraz mentorów z Fractal Soft.
Przygotowanie do zajęć
W wielkim skrócie oto jak możecie się przygotować na zajęcia CoderDojo:
- rozejrzyjcie się za choinkami
- zastanówcie się jak powinna wyglądać Wasza choinka
- pomyślcie nad najprostszym algorytmem, który buduje taką choinkę
- zapiszcie sobie jakie elementy choinki są dla Was istotne
Pamiętajcie, że zawsze możecie zaprosić kolegów i koleżanki na zajęcia.
Proszę pamiętać, że zajęcia odbywają się w centrum Gliwic.
Prosimy Was o kliknięcie w ikonkę kciuka pod artykułem. 👍
⬇️ Kliknij w kciuka ⬇️
Podobają Wam się nasze programistyczne plany? Mamy nadzieję, że tak. Nie bójcie się wyrażać swoich opinii zarówno poniżej w komentarzach jak i w social mediach. Jeżeli macie własne propozycje tematów to również piszcie. Chcemy aby CoderDojo w Gliwicach było najlepszym dojo w Polsce.
Informacje organizacyjne
Jeśli macie jakieś pytania organizacyjne to przeczytajcie proszę dział FAQ - często zadawane pytania.
Czas zajęć ⏰
14.12.2019 (sobota) od 09:00 do 12:00
Miejsce zajęć 🏢
Gliwickie Centrum Organizacji Pozarządowych44-100 Gliwice
Trzeba wejść na II piętro, skręcić w prawo i iść wzdłuż korytarza.
Nasze programistyczne choinki
Już po zajęciach, ale chcemy się pochwalić jak wyszło nasze świąteczne programowanie. Wszyscy mieli bardzo kreatywne pomysły. Oczywiście zaczynaliśmy od najprostszych, aż po bardzo efektowne.
Najprostsza choinka
To jest najkrótszy kod programistycznej choinki. Wszak choinka to choinka i może mieć różna formę, nie koniecznie wizualną.
2.6.4 :001 > "choinka"
=> "choinka"
Kod generujący choinkę (59 znaków)
Najprostszą choinkę można zaprogramować w dosłownie jednej linijce. Taki program ma tylko 59 znaków w języku Ruby.
2.6.4 :002 > ((1..20).to_a+[7]*4).each{|i|puts ('*'*(i*2-1)).center(60)}
*
***
*****
*******
*********
***********
*************
***************
*****************
*******************
*********************
***********************
*************************
***************************
*****************************
*******************************
*********************************
***********************************
*************************************
***************************************
*************
*************
*************
*************
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 7, 7, 7, 7]
Choinka ASCII z bombkami i łańcuchem
W kolejnych iteracjach rozwijaliśmy ten najprostszy program do generowania choinki. Dodawaliśmy ozdobne łańcuchy, różnego rodzaju bombki i inne zdobienia. Świąteczne programowanie pełną parą.
Kod w Ruby wymagał pewnych modyfikacji. Jest może trochę bardziej rozbudowany, ale wciąż prosty do zrozumienia.
class String
def random_replace(character)
random_position = rand(self.size)
self[random_position] = character
self
end
end
((1..20).to_a+[5]*3).each do |i|
width = i * 2 - 1
line = ('x'*5 + '*').split('').sample*width
bombs_counter = width / 2
if bombs_counter > 0
rand(bombs_counter).times {
line = line.random_replace(['O', '$'].sample)
}
end
puts line.center(60)
end
A oto efekt uruchomienia. Jest jeszcze bardziej świątecznie oraz tym bardziej programistycznie. Takie nasze świąteczne programowanie.
$ ruby xmass_tree_ascii.rb
x
***
$xxxx
$xxxxx$
x$$xxxOxx
****$***O*$
Oxxxxxxx$x$xx
***************
xxxxxxxxxxxxxxxxx
xx$$x$xxxOO$xxOxxxx
xxxxxxxxxxxxx$xxxxxxx
xx$xxxxxxx$$xxxOxxOOO$x
*************************
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxOxxxxx$xxxxxxxxOxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxOxxxxxx
$xxxxOOxxxxOxx$$xx$xx$xxOxxxOxxxx
xOxxxxxxxxxxxxxxxxxxxOxx$xxxxxxxxxx
***O*O*$O***********O***********$****
****O**$*$*$*****O$OO****$***$***O***$*
**O*O****
xxxxxOxx$
xxxxxxxxx
Choinka Emoji
Kolejne kroki doprowadziły nas do programu generującego choinkę za pomocą emoji. Tu było programowania i zabawy co nie miara.
Co to są Emoji?
Emoji to takie emotikony, ale przedstawiające różne przedmioty, rośliny, zwierzęta, miejsca. Emoji mogą mieć inny wygląd na różnych systemach operacyjnych.
Efekt generowania choinki Emoji
Nasza Emoji choinka wymaga małego wyjaśnienia. Poprzednia choinka składała się ze znaków ASCII. Każdy znak ASCII wyświetlony w konsoli będzie miał tą samą szerokość. Nie ważne czy to będzie spacja “ “, litera “i” czy litera “w”. Wszystkie te znaki zajmują tyle samo miejsca.
Emoji jako, że przyjmują formę graficzą będą zajmowały różna szerokość. Dlatego programując choinkę musieliśmy dobrać odpowiednie emoji. Nasza choinka przede wszystkim składała się z choinek. 🎄 To taka mała rekurencja. Na jej szczycie umieściliśmy gwiazdę. ⭐ Ozdobami były różne przedmioty tj.:
- 💡 (lampki)
- 💣 (bombki) - bombek choinkowych nie znaleźliśmy
- 🎁 (prezenty)
- 🍬 (cukierki)
- 🎀 (kokardki)
- ✨ (iskierki)
- 🐈 (kotki) - tak umieściliśmy kotki na choince
Jak powszechnie wiadomo porządna choinka potrzebuje mieć solidną podstawę. My naszą oparliśmy o “Świat Dysku” Terrego Pratchetta. Pień zbudowany został ze słoni stojących na żółwiach. 🐘 🐢
⭐
🎄🎄
🎄✨🎄
🎀🎄🎄🎄
🎄🎄🎄
🎄🎄🎄🎄
🎄🎄🎄🎄🎁
✨🎄🎄🎀🎄💡
🎄🎄🎄💡💡🎄🍬
🎄🎄💡🍬✨🎀🎄🎄
🎄🎄🎄💣💡🎁
🎄🎄🎄🎄🎄🎄🎄
🎄🐈🎄🎄🎄🐈🎄🎄
🎄🐈🎀🎄🎄✨🎁🎄🎄
🎄🎄🎄🎄🎄🎄🎄🎄💡🎄
🎄🎄🎄🎄🎄🎄🎄🎄💡🎄🎄
🎄🎁🎄🎄🎄🎄🎄💣✨🎄🎄🎄
🐘🐘🐘
🐘🐘🐘
🐢🐢🐢🐢🐢🐢🐢🐢🐢🐢🐢🐢🐢🐢🐢🐢🐢🐢🐢🐢🐢🐢🐢🐢🐢🐢🐢🐢🐢
Co więcej powyższą choinkę zaprogramowaliśmy jako prostą animację. Oto kod źródłowy (nie jest piękny, ale tu chodzi o dobrą zabawę):
LEAF = '🎄'
BOMB = '💣'
CANDY = '🍬'
STAR = '⭐'
HEART = '❤️'
ROOT = '🐘'
GIFT = '🎁'
BOW = '🎀'
GROUND = '🐢'
CAT = '🐈'
BULB = '💡'
POPPER = '🎉'
FLASHES = '✨'
class String
def center_emoji(width)
space = ' '*((width - self.size * 2) / 2)
space + self
end
def random_replace(characters)
random_position = rand(self.size)
self[random_position] = characters.sample
self
end
end
height = 20
index = 1
direction = +1
100.times do
print "\e[2J\e[f" # clear screen
puts STAR.center_emoji(80 + index)
[2..4, 3..8, 6..12].each do |range|
range.each do |level|
width = level
line = (LEAF*width)
rand(level / 2 + 1).times do
line.random_replace(
[BOMB, CANDY, GIFT, BOW, CAT, BULB, FLASHES]
)
end
puts line.center_emoji(80 + index)
end
end
([3]*2).each do |level|
puts (ROOT*level).center_emoji(80 + index)
end
puts GROUND*40
sleep(1)
index = index + direction
direction = -1 if index > 10
direction = +1 if index < 1
end
Choinka Sierpińskiego
Na koniec zajęć padło jeszcze ważne pytanie. Czy można zaprogramować choinkę przy pomocy fraktali? Jasne, że można. Wręcz trzeba! Oto nasze świąteczne programowanie w oparciu o trójkąt Sierpińskiego. Najpierw zaimplementowaliśmy sam fraktal. Następnie zamiast zwykłych znaków ASCII np. * (gwiazdek) użyliśmy emoji 🎄 (choinki). Dodatkowo dorobiliśmy bombki w postaci 🎀 (czerwonych wstążek). Czyż nie jest świątecznie i programistycznie? Poniżej kolejny efekt świątecznego programowania.
$ ruby xmass_tree_sierpinski.rb
🎄
🎄🎄
🎄 🎄
🎄🎄🎀🎄
🎄 🎄
🎄🎄 🎄🎄
🎄 🎄 🎄 🎄
🎄🎄🎀🎄🎄🎄🎄🎀
🎄 🎄
🎄🎄 🎄🎄
🎄 🎀 🎀 🎀
🎄🎄🎄🎄 🎄🎄🎄🎄
🎀 🎀 🎀 🎄
🎄🎄 🎄🎄 🎄🎄 🎄🎄
🎄 🎄 🎄 🎄 🎀 🎄 🎄 🎀
🎄🎀🎄🎄🎄🎄🎄🎄🎄🎄🎄🎄🎄🎄🎄🎄
Oto kod źródłowy:
TREE = '🎄'
BOMB = '💣'
BOW = '🎀'
class String
def random_replace!(source, destination)
counter = count(source)
random_index = rand(counter).to_i
position = 0
random_index.times do
find_position = index(source, position + 1)
position = find_position
end
self[position] = destination.sample
self
end
end
def sierpinski_triangle(n)
triangle = [TREE]
n.times do |index|
space = ' ' * (2**index)
triangle = triangle.map { |x| space + x + space } +
triangle.map { |x| x + x }
end
triangle
end
n = 4
triangle = sierpinski_triangle(n).join("\n")
(3*n).times do
triangle.random_replace!(TREE, [BOW])
end
puts triangle
Spodobało Ci się? Napisz nam o tym i czytaj nas regularnie. Możesz również podzielić się tym artykułem z innymi (Facebook, Twitter). Będzie nam niezmiernie miło.
Zostaw komentarz