Choinka programisty Ruby
Czy programiści Ruby 💎 programują swoje choinki 🎄 święteczne?
Na poprzednich zajęciach udało się zbudować generator plansz do sudoku. Podstawowym założeniem było przerabianie gotowych sudoku poprzez zamianę ze sobą dwóch wierszy lub dwóch kolumn w obrębie kwadratu. Poniżej kilka kawałków kodu w Ruby napisanych przez naszych ninja.
sudoku = [
[7, 3, 4, 8, 5, 9, 2, 1, 6],
[8, 1, 9, 6, 7, 2, 4, 3, 5],
[2, 5, 6, 1, 4, 3, 7, 9, 8],
[3, 9, 8, 2, 1, 5, 6, 7, 4],
[6, 4, 5, 7, 9, 8, 1, 2, 3],
[1, 2, 7, 3, 6, 4, 8, 5, 9],
[9, 7, 1, 5, 8, 6, 3, 4, 2],
[5, 8, 2, 4, 3, 7, 9, 6, 1],
[4, 6, 3, 9, 2, 1, 5, 8, 7]
]
def swap_rows(sudoku, from, to)
row = sudoku[from]
sudoku[from] = sudoku[to]
sudoku[to] = row
sudoku
end
def swap_columns(sudoku, from, to)
column = sudoku.map { |row| row[from] }
sudoku.each { |row| row[from] = row[to] }
sudoku.each_with_index do |row, index|
row[to] = column[index]
end
sudoku
end
Powstały również metody do losowego usuwania zawartości pól w naszym generatorze sudoku.
def random_position
[rand(0..8), rand(0..8)]
end
def remove_cell(sudoku, count)
count.times do
x, y = random_position
x, y = random_position while sudoku[x][y].nil?
sudoku[x][y] = nil
end
sudoku
end
Aby mieć pewność, że generowane sudoku wciąż spełnia założenia sudoku, czyli innymi słowy jest rozwiązywalne, postanowiliśmy zaimplementować metody walidujące.
SQUARE_POSITIONS = [
[0, 0], [0, 3], [0, 6],
[3, 0], [3, 3], [3, 6],
[6, 0], [6, 3], [6, 6]
].freeze
def valid_row?(sudoku, row_number)
row = sudoku[row_number].compact
row.uniq.size == row.size
end
def valid_column?(sudoku, column_number)
column = sudoku.map { |row| row[column_number] }.compact
column.uniq.size == column.size
end
def valid_square?(sudoku, row, column)
square = sudoku[row..row + 2].flat_map do |item|
item[column..column + 2]
end.compact
square.uniq.size == square.size
end
def valid_sudoku?(sudoku)
(0..8).all? { |index| valid_row?(sudoku, index) } &&
(0..8).all? { |index| valid_column?(sudoku, index) } &&
SQUARE_POSITIONS.all? do |item|
valid_square?(sudoku, item[0], item[1])
end
end
Powstała też metoda pomocnicza, służąca do zamiany macierzy liczb, jaką jest sudoku, na postać przyjazną człowiekowi.
def to_string(sudoku)
sudoku = sudoku.map { |row| row.map { |item| item.nil? ? ' ' : item } }
rows = sudoku.map { |row| row[0..2].join + '|' + row[3..5].join + '|' + row [6..8].join + "\n" }
rows[0..2].join + ( '-' * 11 + "\n") + rows[3..5].join + ( '-' * 11 + "\n") + rows[6..8].join
end
Wszystkie te metody powstały na zajęciach CoderDojo. Ninja nie mieli więc zbyt wiele czasu nad ich dopracowaniem. My, jako zawodowi programiści Ruby wiemy, że można ten kod jeszcze ulepszyć (refaktoring) i otestować. 💻
Postanowiliśmy, że sudoku na dłużej zagości podczas nauki programowania w Ruby. Ninja już doskonale wiedzą jak grać oraz jak generować planszę do sudoku. Napisaliśmy też kod, który generuje planszę sudoku. Jesteśmy więc w połowie drogi, aby maszyna nauczyła się tego co potrafi każdy nastolatek. Przyszła pora nauczyć komputer grać w sudoku. 🎲
Bez obawy, nie pozostaniecie z tym tematem sami. Zaopiekują się Wami programistka rubiego - Agnieszka oraz developer Ruby - Alek. Już nie możemy się doczekać, bo temat jest wciągający. Mamy też małą niespodziankę. Chcemy przygotować osobny artykuł o sudoku. Opiszemy dokładnie jak my byśmy zaimplementowali generator sudoku oraz rozwiązywacz sudoku. Będzie to mały wstęp do dodatkowych zajęć z programowania w Ruby.
Wymagania:
Kto powiedział, że to Grzegorz jako game developer musi prowadzić zajęcia w grupe z tworzenia gier? 🎮 Zaskoczymy Was! Przed Wami zajęcia CoderDojo, gdzie jeden z ninja zamieni się z Grzegorzem miejscami. Ninja Wojtek przeobrazi się w mentora Wojtka.
Pamiętacie blender z poprzednich zajęć tworzenia gier? Blender jest to oprogramowanie do modelowania, renderowania obrazów oraz tworzenia animacji trójwymiarowych. Blender jest w pełni kompleksowym narzędziem pozwalającym tworzyć zarówno całe krajobrazy jak i modele postaci.
Na ostatnich zajęciach powstały pierwsze modele grafiki 3D. 🎨 Najpierw budowany był model krzesła. Kolejnym modelem 3D była butelka z wodą. Dużą frajdę sprawiało nakładanie na zamodelowane przedmioty tekstur w postaci zdjęć twarzy. 😂
Najbliższe zajęcia CoderDojo w Gliwicach będą poszerzały Wasze umiejętności posługiwania się silnikiem Blender3D. Znacie już podstawy modelowania oraz teksturowania przy pomocy Blendera. Wojtek przeprowadzi Was przez proces tworzenia postaci wraz z riggingiem. Rigging to przygotowanie trójwymiarowego modelu do późniejszego tworzenia animacji.
Proces tworzenia postaci zaczniemy od budowania mesha prostej postaci typu stick figure do której podepniemy rig, czyli zestaw kości wraz z wagami. Poruszając tak połączonymi kośćmi pozwoli to Wam finalnie na poruszanie całą postacią. W efekcie możliwe będzie utworzenie animacji chodzenia zbudowanej postaci. 🚶
Wymagania:
Jak wiele programowanie i technologia czerpią z natury? Przyjrzyjmy się takiemu wężowi jak pyton. Samice pytonów składają jaja i opiekują się nimi aż do wyklucia. 🥚 To bardzo troskliwe i mądre zachowanie.
Ale co ma do tego technologia? Okazuje się, że z natury można zaczerpnąć pewne koncepcje. Programując w Pythonie można budować klasy. A klasy i obiekty to są elementy programowania obiektowego. Jednym z założeń paradygmatu programowania obiektowego jest enkapsulacja, czyli hermetyzacja. Chodzi o to, aby ukryć i ochronić wewnętrzną implementację klasy, czyli to jak klasa jest zbudowana. Nie do wszystkich pól programista powinien mieć dostęp z zewnątrz. Klasa jest więc jakby jajkiem. A dostęp do tego co w środku jest poprzez publiczny interfejs, czyli metody które można wywoływać. Przy pomocy Pythona programista musi dbać o to co jest w środku klasy. Chodzi o to, aby nic nie naruszyło delikatne zbudowanego ekosystemu. Widzicie analogię do jajek węża, którymi opiekuje się ten gad?
O tym jak prawidłowo budować złożone typy danych tj. klasy oraz jak je enkapsulować opowie nasz mentor Darek. 🧔
Wymagania:
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.
Jeśli macie jakieś pytania organizacyjne to przeczytajcie proszę dział FAQ - często zadawane pytania.
18.05.2019 (sobota) od 09:00 do 12:00
Trzeba wejść na II piętro, skręcić w prawo i iść wzdłuż korytarza.
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