Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

My solution, looks pretty similar to your second.

I think this should work:

  0 Z2
  1 Z3
  2 I4
  3 J0,3 -> 5 // If r0 != 0, jump to add it to r2
  4 J3,4 -> 9 // r0 == 0, force jump to check r1
  5 I2 // add r0
  6 I3
  7 J0,3 -> 5
  8 Z3
  9 J1,3 -> 11 // If r1 != 0, jump to add it to r2
  10 J3,4 -> exit // r1 == 0, force jump to exit
  11 I2 // add r1
  12 I3
  13 J1,3 -> 11
  14 exit
Phew that took a while. The simple case was easy enough. I guess exceptional candidates would be able to crack that out in an interview, otherwise they'd move you onto the balls.

Edited!



Couple corrections I think: - Register 4 should be set to zero before incrementing in instruction 2.

- inst. 4 should compare 0,4 , register 1 is unknown at this pt.

- inst. 3 should jump to 5


Yep 3->5 is a typo.

r4 could be zeroed, but I was lazy and assumed that as long as it's greater than zero it doesn't matter (since it's always compared to zero).

Instruction 4 should be cmp(3,4) to force a jump to 9.

EDIT: Although thinking about it, it doesn't make much difference. It has the same effect as doing cmp(0,4) since you know r4 > 0 and r0 == 0.

Thanks!




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: