cswork / libraryOpen practice workspace

Coding questions · Liftoff

Parse and expand an IPv6 address

This question evaluates proficiency in IPv6 address parsing, string validation, and canonicalization, testing understanding of hexadecimal hextets and the zero-compression (::) rule within the Coding & Algorithms domain.

Implement an IPv6 address parser/normalizer.

You are given a string s that may represent an IPv6 address using standard notation:

  • Up to 8 groups (“hextets”) separated by :
  • Each hextet is 1 to 4 hex digits (0-9, a-f, A-F)
  • A single :: may appear at most once, representing one or more consecutive 0000 hextets (zero-compression)

Task:

  1. If s is a valid IPv6 address under the rules above, return its fully expanded canonical form: exactly 8 hextets, each as 4 lowercase hex digits, joined by :.
  2. Otherwise return "Invalid".

Examples:

  • "2001:db8::1" → "2001:0db8:0000:0000:0000:0000:0000:0001"
  • "::" → "0000:0000:0000:0000:0000:0000:0000:0000"
  • "1:2:3:4:5:6:7:8" → "0001:0002:0003:0004:0005:0006:0007:0008"
  • "1::2::3" → "Invalid" (multiple ::)
  • "1:2:3:4:5:6:7:8:9" → "Invalid" (too many hextets)

Constraints: |s| ≤ 100.

IPv6 Address Expander

Validate an IPv6 address and return exactly 8 lowercase zero-padded hextets, or Invalid.

Hints

  1. Model object-style prompts as operation streams when needed.
  2. Handle empty and boundary cases before the main logic.