5 Let the code wrap again - I did that intentionally!

# Perl, 183 177

This might not be the shortest Perl answer, but I think it's interesting enough to post (input in $_, output as return value): sub f{if(/}/){s/[{}]/00/g;oct'0b'.s/00(;+)/sprintf'%02b',length$1/ger}else{$_=sprintf'%064b',$_;s/../oct"0b$&"/ge;s/^0+(?!$)//;$_='{'x length.$_;s/\d/'}'.';'x$&/ge;s/\Q{{}/{/r}}  sub f{if(/}/){s/[{}]/00/g;oct'0b'.s/00(;+)/sprintf'%02b',length$1/ger}else{$_=sprintf'%064b',$_;s/../oct"0b$&"/ge;s/^0+(?!$)//;$_='{'x length.$_;s/\d/'}'.';'x$&/ge;s/\Q{{}/{/r}} We observe that Curly is simply quaternary (base-4) notation. We're slightly hampered by Perl's lack of native support for quaternary, but luckily, each quaternit is two bits in binary, and we can read and write binary. So we have the following: 1. Curly to decimal: convert each Curly digit to 2 binary digits, concatenate and convert to decimal 2. Decimal to Curly: print the number in binary (forcing an even number of digits), then convert each bit-pair to Curly. ### Expanded version sub f { if (/}/) { s/[{}]/00/g; # digits are now 00 00; 00;; 00;;; # and opening braces become harmless leading zeros s/00(;+)/sprintf'%02b',length$1/ge;
# convert semicolons to binary, leaving zeros alone
oct "0b$_" # now to decimal } else {$_=sprintf'%064b',$_; # decimal to binary s/../oct"0b$&"/ge;      # bit-pair to quaternit
s/^0+(?!$)//; #/remove leading zeros$_='{'x length.$_; # prefix enough opening braces s/\d/'}'.';'x$&/ge;     #/digit to semicolons
s/{{}/{/r               # first empty brace, unless $_ <= {};;; } }  # Perl, 183 177 This might not be the shortest Perl answer, but I think it's interesting enough to post (input in $_, output as return value):

sub f{if(/}/){s/[{}]/00/g;oct'0b'.s/00(;+)/sprintf'%02b',length$1/ger}else{$_=sprintf'%064b',$_;s/../oct"0b$&"/ge;s/^0+(?!$)//;$_='{'x length.$_;s/\d/'}'.';'x$&/ge;s/\Q{{}/{/r}}


We observe that Curly is simply quaternary (base-4) notation. We're slightly hampered by Perl's lack of native support for quaternary, but luckily, each quaternit is two bits in binary, and we can read and write binary. So we have the following:

1. Curly to decimal: convert each Curly digit to 2 binary digits, concatenate and convert to decimal
2. Decimal to Curly: print the number in binary (forcing an even number of digits), then convert each bit-pair to Curly.

### Expanded version

sub f
{
if (/}/) {
s/[{}]/00/g;     # digits are now 00 00; 00;; 00;;;
# and opening braces become harmless leading zeros
s/00(;+)/sprintf'%02b',length $1/ge; # convert semicolons to binary, leaving zeros alone oct "0b$_"       # now to decimal
} else {
$_=sprintf'%064b',$_;   # decimal to binary
s/../oct"0b$&"/ge; # bit-pair to quaternit s/^0+(?!$)//;           #/remove leading zeros
$_='{'x length.$_;      # prefix enough opening braces
s/\d/'}'.';'x$&/ge; #/digit to semicolons s/{{}/{/r # first empty brace, unless$_ <= {};;;
}
}


# Perl, 183 177

This might not be the shortest Perl answer, but I think it's interesting enough to post (input in $_, output as return value): sub f{if(/}/){s/[{}]/00/g;oct'0b'.s/00(;+)/sprintf'%02b',length$1/ger}else{$_=sprintf'%064b',$_;s/../oct"0b$&"/ge;s/^0+(?!$)//;$_='{'x length.$_;s/\d/'}'.';'x$&/ge;s/\Q{{}/{/r}} We observe that Curly is simply quaternary (base-4) notation. We're slightly hampered by Perl's lack of native support for quaternary, but luckily, each quaternit is two bits in binary, and we can read and write binary. So we have the following: 1. Curly to decimal: convert each Curly digit to 2 binary digits, concatenate and convert to decimal 2. Decimal to Curly: print the number in binary (forcing an even number of digits), then convert each bit-pair to Curly. ### Expanded version sub f { if (/}/) { s/[{}]/00/g; # digits are now 00 00; 00;; 00;;; # and opening braces become harmless leading zeros s/00(;+)/sprintf'%02b',length$1/ge;
# convert semicolons to binary, leaving zeros alone
oct "0b$_" # now to decimal } else {$_=sprintf'%064b',$_; # decimal to binary s/../oct"0b$&"/ge;      # bit-pair to quaternit
s/^0+(?!$)//; #/remove leading zeros$_='{'x length.$_; # prefix enough opening braces s/\d/'}'.';'x$&/ge;     #/digit to semicolons
s/{{}/{/r               # first empty brace, unless $_ <= {};;; } }  4 Fixed code formatting # Perl, 183 177 This might not be the shortest Perl answer, but I think it's interesting enough to post (input in $_, output as return value):

sub f{if(/}/){s/[{}]/00/g;oct'0b'.s/00(;+)/sprintf'%02b',length$1/ger}else{$_=sprintf'%064b',$_;s/../oct"0b$&"/ge;s/^0+(?!$)//;$_='{'x length.$_;s/\d/'}'.';'x$&/ge;s/\Q{{}/{/r}}

sub f{if(/}/){s/[{}]/00/g;oct'0b'.s/00(;+)/sprintf'%02b',length$1/ger}else{$_=sprintf'%064b',$_;s/../oct"0b$&"/ge;s/^0+(?!$)//;$_='{'x length.$_;s/\d/'}'.';'x$&/ge;s/\Q{{}/{/r}}


We observe that Curly is simply quaternary (base-4) notation. We're slightly hampered by Perl's lack of native support for quaternary, but luckily, each quaternit is two bits in binary, and we can read and write binary. So we have the following:

1. Curly to decimal: convert each Curly digit to 2 binary digits, concatenate and convert to decimal
2. Decimal to Curly: print the number in binary (forcing an even number of digits), then convert each bit-pair to Curly.

### Expanded version

sub f
{
if (/}/) {
s/[{}]/00/g;     # digits are now 00 00; 00;; 00;;;
# and opening braces become harmless leading zeros
s/00(;+)/sprintf'%02b',length $1/ge; # convert semicolons to binary, leaving zeros alone oct "0b$_"       # now to decimal
} else {
$_=sprintf'%064b',$_;   # decimal to binary
s/../oct"0b$&"/ge; # bit-pair to quaternit s/^0+(?!$)//;           #/remove leading zeros
$_='{'x length.$_;      # prefix enough opening braces
s/\d/'}'.';'x$&/ge; #/digit to semicolons s/{{}/{/r # first empty brace, unless$_ <= {};;;
}
}


# Perl, 183 177

This might not be the shortest Perl answer, but I think it's interesting enough to post (input in $_, output as return value): sub f{if(/}/){s/[{}]/00/g;oct'0b'.s/00(;+)/sprintf'%02b',length$1/ger}else{$_=sprintf'%064b',$_;s/../oct"0b$&"/ge;s/^0+(?!$)//;$_='{'x length.$_;s/\d/'}'.';'x$&/ge;s/\Q{{}/{/r}} We observe that Curly is simply quaternary (base-4) notation. We're slightly hampered by Perl's lack of native support for quaternary, but luckily, each quaternit is two bits in binary, and we can read and write binary. So we have the following: 1. Curly to decimal: convert each Curly digit to 2 binary digits, concatenate and convert to decimal 2. Decimal to Curly: print the number in binary (forcing an even number of digits), then convert each bit-pair to Curly. ### Expanded version sub f { if (/}/) { s/[{}]/00/g; # digits are now 00 00; 00;; 00;;; # and opening braces become harmless leading zeros s/00(;+)/sprintf'%02b',length$1/ge;
# convert semicolons to binary, leaving zeros alone
oct "0b$_" # now to decimal } else {$_=sprintf'%064b',$_; # decimal to binary s/../oct"0b$&"/ge;      # bit-pair to quaternit
s/^0+(?!$)//; #/remove leading zeros$_='{'x length.$_; # prefix enough opening braces s/\d/'}'.';'x$&/ge;     #/digit to semicolons
s/{{}/{/r               # first empty brace, unless $_ <= {};;; } }  # Perl, 183 177 This might not be the shortest Perl answer, but I think it's interesting enough to post (input in $_, output as return value):

sub f{if(/}/){s/[{}]/00/g;oct'0b'.s/00(;+)/sprintf'%02b',length$1/ger}else{$_=sprintf'%064b',$_;s/../oct"0b$&"/ge;s/^0+(?!$)//;$_='{'x length.$_;s/\d/'}'.';'x$&/ge;s/\Q{{}/{/r}}


We observe that Curly is simply quaternary (base-4) notation. We're slightly hampered by Perl's lack of native support for quaternary, but luckily, each quaternit is two bits in binary, and we can read and write binary. So we have the following:

1. Curly to decimal: convert each Curly digit to 2 binary digits, concatenate and convert to decimal
2. Decimal to Curly: print the number in binary (forcing an even number of digits), then convert each bit-pair to Curly.

### Expanded version

sub f
{
if (/}/) {
s/[{}]/00/g;     # digits are now 00 00; 00;; 00;;;
# and opening braces become harmless leading zeros
s/00(;+)/sprintf'%02b',length $1/ge; # convert semicolons to binary, leaving zeros alone oct "0b$_"       # now to decimal
} else {
$_=sprintf'%064b',$_;   # decimal to binary
s/../oct"0b$&"/ge; # bit-pair to quaternit s/^0+(?!$)//;           #/remove leading zeros
$_='{'x length.$_;      # prefix enough opening braces
s/\d/'}'.';'x$&/ge; #/digit to semicolons s/{{}/{/r # first empty brace, unless$_ <= {};;;
}
}

3 edited body

# Perl, 183175177

This might not be the shortest Perl answer, but I think it's interesting enough to post (input in $_, output as return value): sub f{if(/}/){s/[{}]/00/g;oct'0b'.s/00(;+)/sprintf'%02b',length$1/ger}else{$_=sprintf'%064b',$_;s/../oct"0b$&"/ge;s/^0+(?!$)//;$_='{'x length.$_;s/\d/'}'.';'x$&/ge;s/\Q{{}/{/r}} We observe that Curly is simply quaternary (base-4) notation. We're slightly hampered by Perl's lack of native support for quaternary, but luckily, each quaternit is two bits in binary, and we can read and write binary. So we have the following: 1. Curly to decimal: convert each Curly digit to 2 binary digits, concatenate and convert to decimal 2. Decimal to Curly: print the number in binary (forcing an even number of digits), then convert each bit-pair to Curly. ### Expanded version sub f { if (/}/) { s/[{}]/00/g; # digits are now 00 00; 00;; 00;;; # and opening braces become harmless leading zeros s/00(;+)/sprintf'%02b',length$1/ge;
# convert semicolons to binary, leaving zeros alone
oct "0b$_" # now to decimal } else {$_=sprintf'%064b',$_; # decimal to binary s/../oct"0b$&"/ge;      # bit-pair to quaternit
s/^0+(?!$)//; #/remove leading zeros$_='{'x length.$_; # prefix enough opening braces s/\d/'}'.';'x$&/ge;     #/digit to semicolons
s/{{}/{/r               # first empty brace, unless $_ <= {};;; } }  # Perl, 183175 This might not be the shortest Perl answer, but I think it's interesting enough to post (input in $_, output as return value):

sub f{if(/}/){s/[{}]/00/g;oct'0b'.s/00(;+)/sprintf'%02b',length$1/ger}else{$_=sprintf'%064b',$_;s/../oct"0b$&"/ge;s/^0+(?!$)//;$_='{'x length.$_;s/\d/'}'.';'x$&/ge;s/\Q{{}/{/r}}

We observe that Curly is simply quaternary (base-4) notation. We're slightly hampered by Perl's lack of native support for quaternary, but luckily, each quaternit is two bits in binary, and we can read and write binary. So we have the following:

1. Curly to decimal: convert each Curly digit to 2 binary digits, concatenate and convert to decimal
2. Decimal to Curly: print the number in binary (forcing an even number of digits), then convert each bit-pair to Curly.

### Expanded version

sub f
{
if (/}/) {
s/[{}]/00/g;     # digits are now 00 00; 00;; 00;;;
# and opening braces become harmless leading zeros
s/00(;+)/sprintf'%02b',length $1/ge; # convert semicolons to binary, leaving zeros alone oct "0b$_"       # now to decimal
} else {
$_=sprintf'%064b',$_;   # decimal to binary
s/../oct"0b$&"/ge; # bit-pair to quaternit s/^0+(?!$)//;           #/remove leading zeros
$_='{'x length.$_;      # prefix enough opening braces
s/\d/'}'.';'x$&/ge; #/digit to semicolons s/{{}/{/r # first empty brace, unless$_ <= {};;;
}
}


# Perl, 183177

This might not be the shortest Perl answer, but I think it's interesting enough to post (input in $_, output as return value): sub f{if(/}/){s/[{}]/00/g;oct'0b'.s/00(;+)/sprintf'%02b',length$1/ger}else{$_=sprintf'%064b',$_;s/../oct"0b$&"/ge;s/^0+(?!$)//;$_='{'x length.$_;s/\d/'}'.';'x$&/ge;s/\Q{{}/{/r}} We observe that Curly is simply quaternary (base-4) notation. We're slightly hampered by Perl's lack of native support for quaternary, but luckily, each quaternit is two bits in binary, and we can read and write binary. So we have the following: 1. Curly to decimal: convert each Curly digit to 2 binary digits, concatenate and convert to decimal 2. Decimal to Curly: print the number in binary (forcing an even number of digits), then convert each bit-pair to Curly. ### Expanded version sub f { if (/}/) { s/[{}]/00/g; # digits are now 00 00; 00;; 00;;; # and opening braces become harmless leading zeros s/00(;+)/sprintf'%02b',length$1/ge;
# convert semicolons to binary, leaving zeros alone
oct "0b$_" # now to decimal } else {$_=sprintf'%064b',$_; # decimal to binary s/../oct"0b$&"/ge;      # bit-pair to quaternit
s/^0+(?!$)//; #/remove leading zeros$_='{'x length.$_; # prefix enough opening braces s/\d/'}'.';'x$&/ge;     #/digit to semicolons
s/{{}/{/r               # first empty brace, unless \$_ <= {};;;
}
}

2 Remove unnecessary parens; I can get away without quoting { in regex; improve code comments
1