3 svar
241 visningar
Micimacko är nöjd med hjälpen
Micimacko 4070
Postad: 17 aug 2020 13:19

Hus

Jag har typ löst den här, men det blir med massa specialfall för alla kanter och alla hörn osv. Finns det något smidigt sätt att tänka?

Mega7853 211
Postad: 17 aug 2020 14:54 Redigerad: 17 aug 2020 14:55

Om man vill lösa denna uppgiften utan specialfall för hörn och kanter så kan man utöka matrisen, i det här fallet med ett extra element på varje sida. Sedan itererar man över de inre original-elementen, som då alla har grannar.
Men i gengäld får du lägga till andra specialfall, i det här fallet när du ska kolla om alla grannarna är av samma typ, så kan du t.ex. lägga till 2:or som extra element och betrakta dem som ok grannar till både 0:or och 1:or.
Om det blir smidigare eller inte beror på. Om man t.ex. exekverar koden parallellt på en SIMD processor så går det fortare om alla trådarna är i fas, dvs på samma instruktion. Då tjänar man på att skriva om koden så att den inte använder t.ex. if-satser.

Micimacko 4070
Postad: 17 aug 2020 15:00

Tack, får testa ikväll. Jag förstod fram till 2or iaf,  resten tror jag är långt utanför den här kursen :)

Laguna Online 28443
Postad: 17 aug 2020 16:11 Redigerad: 17 aug 2020 17:32

Att lägga till randelement utanför huset är en teknik som gör att man inte behöver se upp med att indexering hamnar utanför matrisen. 

Jag tycker det blir bra här även om man testar så man inte hamnar utanför. Funktionen happy returnerar huruvida de i lägenhet (i, j) är glada. h är husmatrisen. Jag har inte provkört. 

def happy(i, j):
    s = h[i][j]
    n = len(h)
    if i > 0 and h[i-1][j] != s:
        return False
    if j > 0 and h[i][j-1] != s:
        return False
    if i < n-1 and h[i+1][j] != s:
        return False
    if j < n-1 and h[i][j+1] != s:
        return False
    return True

Svara Avbryt
Close