Wpis z mikrobloga

@Sudo_exit: jak opisaz @zibizz1 i w najbardziej naiwnej implementacji (nie znaczy to że jest to rozwiązanie najlepsze) zaczał bym od wypełnienia macierzy 0 i oprogramowaniu ruchu wskazówek zegaza zwiększajacą wartość o 1. jeśli natafimy na coś innego niż 0 (była jakaś wartość) to wykonujemy poprzedni krok z dodatkowym indexem +1 (wchodzimy w dalszą obręcz.

W ten sposób wypiszemy 1,2,3,4 na 4 będzie ruch "w górę" - zabroniony(bo to wartość
  • Odpowiedz
@dnkn: jak by nie było, przedstawione na screenie rozwiązanie jest najlepszym z możliwych dla tak sformułowanego problemu. Po co poświęcać wielokrotnie więcej czasu na bardziej uniwersalne rozwiązanie, dopóki nie jest ono potrzebne? ( ͡° ͜ʖ ͡°)
  • Odpowiedz
@Rabusek: @Noniusz: macie racje. W AdventOfCode, często było tak ze w pierwszym kroku trzeba było dla 25 policzyć a w drugim dla 25000, dlatego weszło mi w krew odrazu zrobić uniwersalniej/optymalniej
  • Odpowiedz
Ale kombinujecie. Wystarczyło utworzyć tablicę[5][5] następnie z pomocą memset ustawić wszystkie komórki na 0x00 potem wywołać funkcję rekurencyjnie która przekazywała by samej sobie wskaźnik(pierwszy wskaźnik na tab[2][2] na adres kolejnej komórki która była by była zwiększana o jeden więcej niż poprzednio (może to być jakaś zmienna statyczna żeby nie zapamiętywać poprzedniego adresu wskaźnika bo ta wartość nie będzie oczywista) i teraz najlepsze. Kolejność zmiany wartości wskaźnika można ogarnąć prostym switchem gdzie switchowana
  • Odpowiedz
A druga bardziej hardcore wersja jest fajniejsza i w sumie nawet łatwiejsza w wykonaniu. Nadal jest potrzebna macierz [5][5] - to mocno ułatwia późniejsze wyświetlenie liczb. Robimy ją jako macierz float. Punkt 2,2 jest naszym środkiem 0,0 x,y. Z wartości x,y obliczamy kąt oraz dystans r między 2,2 a x,y. Zapisujemy odczytany kąt( -współczynnik korekcji wynoszący pewnie 30* bo chcemy aby 10 było koło 9 ale żeby 2 ni było w miejscu
  • Odpowiedz