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ęć

Wielka choinka w centrum Gliwic

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ądowych
ul. Zwycięstwa 1/1
44-100 Gliwice

Trzeba wejść na II piętro, skręcić w prawo i iść wzdłuż korytarza.

Mapa dojazdu do GCOP (Gliwice, ul. Zwycięstwa 1)


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