Hacker News new | past | comments | ask | show | jobs | submit login

Not to discount your point, but I want to offer my opinion which is different.

I had fun _because_ it was more constrained. But I also like Go.

As an example, I solved level 6 in what I understand to be an unconventional way:

(spoiler alert)

I realized I could “get out” of readCodesFromKeypad function scope by ending it early and then writing the start of another top level function. Once I had access to global scope, I could add an init() function to modify the “crypto/rand.Reader” variable and assign to it an io.Reader that I could control. I was on mobile so I decided to take a shortcut and just overwrite the global passcode variable instead.

(end spoiler)

I may have “cheated”, but it felt creative and in spirit of the game, and it got me to the next level.

I just added two lines to the starting brute-force code:

    if v, _ := validateCode(passcode); v == 1 {
        return []string{passcode}

Yep. Based on the hint for that question, I expect this is the "normal" solution.

Oh heh, I declared another method then used that to set the passcode var (without the var being shadowed), return it to the hardcoded method name, and returned that.

  // readCodesFromKeypad - get codes from keypad input
  func readCodesFromKeypad() []string {
   var passcode string
   var codes = make([]string, 0)
  // Agent Getter - bypass keypad input
   // codes := streamKeypad()
  // Agent Getter - try brute force login
   // TODO: not finished, someone's coming...

      // use shadowed "passcode" to avoid unused var error
      return append([]string{passcode}, unshadowedMethod()...}[1:]
  func unshadowedMethod() []string {
      codes := []string{passcode}
   return codes

That's level 5.

Applications are open for YC Summer 2020

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