3 ms·
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,
by shurcooL 7y ago
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.
- shhsshs 7y agoI just added two lines to the starting brute-force code: if v, _ := validateCode(passcode); v == 1 { return []string{passcode} }
- shurcooL 7y agoYep. Based on the hint for that question, I expect this is the "normal" solution.
- roskilli 7y agoOh 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 }
- Thorrez 7y agoThat's level 5.