Hopp til innhold

Nøtt

Kunne du tenke deg å jobbe med backend hos Folio? Klarer du å få dette programmet til å skrive noe fornuftig bare ved å legge til ett eneste tegn?

package main

import (
	"encoding/base64"
	"fmt"
)

type folio struct {
	buf  []byte
	seed int
}

func (f folio) bar(b1, b2 *byte, i, j int) {
	*b1 = byte(j>>8) ^ f.buf[(i+f.seed)%len(f.buf)]
	*b2 = byte(j) ^ f.buf[(i+f.seed+1)%len(f.buf)]
}

func main() {
	secret, _ := base64.StdEncoding.
		DecodeString("eW91dHViZS5jb20vd2F0Y2g/dj1kUXc0dzlXZ1hjUQ==")

	baz := make([]byte, 20)
	defer func() {
		fmt.Println(string(baz))
	}()

	foo := folio{buf: secret, seed: 1337}
	defer foo.bar(&baz[8], &baz[9], 8, 21)
	defer foo.bar(&baz[0], &baz[1], 0, 4634)
	defer foo.bar(&baz[12], &baz[13], 12, 2139)
	defer foo.bar(&baz[10], &baz[11], 10, 21783)
	defer foo.bar(&baz[14], &baz[15], 14, 20754)
	defer foo.bar(&baz[16], &baz[17], 16, 3924)
	defer foo.bar(&baz[4], &baz[5], 4, 16717)
	defer foo.bar(&baz[2], &baz[3], 2, 3596)
	defer foo.bar(&baz[6], &baz[7], 6, 258)

	foo.seed = 65537
	foo.bar(&baz[18], &baz[19], 18, 25410)
}

Lurer du på hva vi ser etter? Her er mer om jobben