day 8 work and jumbled together

This commit is contained in:
RussellChamp committed 2021-12-08 16:31:05 -05:00
1 parent e76cb1a355
commit c7ea0afedc
18 files changed
+457 -21

No files matched your search

+49
View File
@@ -0,0 +1,49 @@
package arrays
func FindFirst(list []string, filter func(string) bool) string {
for _, item := range list {
if filter(item) {
return item
}
}
panic("No item found that matches criteria")
}
func FindFirstInt(list []int, filter func(int) bool) int {
for _, item := range list {
if filter(item) {
return item
}
}
panic("No item found that matches criteria")
}
func FindAll(list []string, filter func(string) bool) []string {
var filteredList []string
for _, item := range list {
if filter(item) {
filteredList = append(filteredList, item)
}
}
return filteredList
}
func FindAllInt(list []int, filter func(int) bool) []int {
var filteredList []int
for _, item := range list {
if filter(item) {
filteredList = append(filteredList, item)
}
}
return filteredList
}
func MapStrToInt(input []string, fn func(string) int) []int {
var retVals []int
for _, s := range input {
retVals = append(retVals, fn(s))
}
return retVals
}
+47
View File
@@ -0,0 +1,47 @@
package arrays
import (
"AoC2021/utils/assert"
"testing"
)
func TestFindFirst(t *testing.T) {
list := []string{"foo", "bar", "baz"}
filter := func(s string) bool { return s == "baz" }
item := FindFirst(list, filter)
assert.EqualsStr(t, item, "baz", "should find item baz")
}
func TestFindFirstInt(t *testing.T) {
list := []int{1, 3, 4, 5}
filter := func(i int) bool { return i%2 == 0 }
item := FindFirstInt(list, filter)
assert.EqualsInt(t, item, 4, "should find even number")
}
func TestFindAll(t *testing.T) {
list := []string{"hello", "world", "foo"}
filter := func(s string) bool { return len(s) > 3 }
items := FindAll(list, filter)
assert.EqualsInt(t, len(items), 2, "should filter lists of strings")
}
func TestFindAllInt(t *testing.T) {
list := []int{1, 3, 99, 200, 9000}
filter := func(i int) bool { return i > 50 }
items := FindAllInt(list, filter)
assert.EqualsInt(t, len(items), 3, "should filter lists of ints")
}
func TestMapStrToInt(t *testing.T) {
list := []string{"alice", "bob", "carol"}
mapFn := func(s string) int { return int(s[0]) }
items := MapStrToInt(list, mapFn)
assert.EqualsInt(t, items[0], int('a'), "should run map function across all strings")
}