Solving the challenge 0102

This commit is contained in:
2026-07-20 07:03:18 +02:00
parent e3e67ade8b
commit 6888f8fd5b
+47 -2
View File
@@ -1,6 +1,8 @@
package db0102 package db0102
import ( import (
"encoding/binary"
"errors"
"io" "io"
) )
@@ -9,8 +11,51 @@ type Entry struct {
val []byte val []byte
} }
func (ent *Entry) Encode() []byte func (ent *Entry) Encode() []byte {
data := make([]byte, 4+4+len(ent.key)+len(ent.val))
binary.LittleEndian.PutUint32(data[0:4], uint32(len(ent.key)))
binary.LittleEndian.PutUint32(data[4:8], uint32(len(ent.val)))
copy(data[8:], ent.key)
copy(data[8+len(ent.key):], ent.val)
return data
}
func (ent *Entry) Decode(r io.Reader) error func (ent *Entry) Decode(r io.Reader) error {
key_len := make([]byte, 4)
s, err := r.Read(key_len)
if err != nil {
return err
}
if s != 4 {
return errors.New("invalid size when reading key length")
}
val_len := make([]byte, 4)
s, err = r.Read(val_len)
if err != nil {
return err
}
if s != 4 {
return errors.New("invalid size when reading val length")
}
key_data := make([]byte, binary.LittleEndian.Uint32(key_len))
s, err = r.Read(key_data)
if err != nil {
return err
}
if s != int(binary.LittleEndian.Uint32(key_len)) {
return errors.New("invalid size when reading key data")
}
val_data := make([]byte, binary.LittleEndian.Uint32(val_len))
s, err = r.Read(val_data)
if err != nil {
return err
}
if s != int(binary.LittleEndian.Uint32(val_len)) {
return errors.New("invalid size when reading val data")
}
ent.key = key_data
ent.val = val_data
return nil
}
// QzBQWVJJOUhU https://trialofcode.org/ // QzBQWVJJOUhU https://trialofcode.org/