Start learning free

LESSON 382 OF 404 · PROJECTS: COMMAND-LINE TOOLS

CLI Tool: uniq v4 — Loners Only in Go

Practice

Build a version of the Unix uniq -u command. Given a list of lines, output only the values whose adjacent run length is exactly one — i.e. lines that did NOT repeat back-to-back. Surviving values are joined by \n.

Function signature:

func uniqOnce(lines []string) string

Example:

Input: lines = ["a", "a", "b", "c", "c", "c"]

Output: "b"

When printed:
b

The two "a"s and the three "c"s are dropped because their runs are longer than 1. Only the lone "b" survives.


Track a string named prev and an int named count. When the line changes (or after the loop), flush prev only if count == 1.

if count == 1 {
    result = append(result, prev)
}


The full solution:
func uniqOnce(lines []string) string {
    result := []string{}
    count := 0
    prev := ""
    for i := 0; i < len(lines); i++ {
        if count > 0 && lines[i] == prev {
            count++
        } else {
            if count == 1 {
                result = append(result, prev)
            }
            prev = lines[i]
            count = 1
        }
    }
    if count == 1 {
        result = append(result, prev)
    }
    return strings.Join(result, "\n")
}

STEP 1 OF 13
    Ctrl + Enter to check

    Uniq V4 in Go

    Keep going with GoAbout 340 step-by-step lessons, from your first line of code to coding interviews. Free to start.
    Start learning free