# varicode encoder | 2017-07-14 use strict; use warnings; use feature qw(say); my @varicodes = ( '1010101011', # 000 NUL '1011011011', # 001 SOH '1011101101', # 002 STX '1101110111', # 003 ETX '1011101011', # 004 EOT '1101011111', # 005 ENQ '1011101111', # 006 ACK '1011111101', # 007 BEL '1011111111', # 010 BS '11101111', # 011 HT '11101', # 012 LF '1101101111', # 013 VT '1011011101', # 014 FF '11111', # 015 CR '1101110101', # 016 SO '1110101011', # 017 SI '1011110111', # 020 DLE '1011110101', # 021 DC1 '1110101101', # 022 DC2 '1110101111', # 023 DC3 '1101011011', # 024 DC4 '1101101011', # 025 NAK '1101101101', # 026 SYN '1101010111', # 027 ETB '1101111011', # 030 CAN '1101111101', # 031 EM '1110110111', # 032 SUB '1101010101', # 033 ESC '1101011101', # 034 FS '1110111011', # 035 GS '1011111011', # 036 RS '1101111111', # 037 US '1', # 040 SPC '111111111', # 041 ! '101011111', # 042 " '111110101', # 043 # '111011011', # 044 $ '1011010101', # 045 % '1010111011', # 046 & '101111111', # 047 ' '11111011', # 050 ( '11110111', # 051 ) '101101111', # 052 * '111011111', # 053 + '1110101', # 054 , '110101', # 055 - '1010111', # 056 . '110101111', # 057 / '10110111', # 060 0 '10111101', # 061 1 '11101101', # 062 2 '11111111', # 063 3 '101110111', # 064 4 '101011011', # 065 5 '101101011', # 066 6 '110101101', # 067 7 '110101011', # 070 8 '110110111', # 071 9 '11110101', # 072 : '110111101', # 073 ; '111101101', # 074 < '1010101', # 075 = '111010111', # 076 > '1010101111', # 077 ? '1010111101', # 100 @ '1111101', # 101 A '11101011', # 102 B '10101101', # 103 C '10110101', # 104 D '1110111', # 105 E '11011011', # 106 F '11111101', # 107 G '101010101', # 110 H '1111111', # 111 I '111111101', # 112 J '101111101', # 113 K '11010111', # 114 L '10111011', # 115 M '11011101', # 116 N '10101011', # 117 O '11010101', # 120 P '111011101', # 121 Q '10101111', # 122 R '1101111', # 123 S '1101101', # 124 T '101010111', # 125 U '110110101', # 126 V '101011101', # 127 W '101110101', # 130 X '101111011', # 131 Y '1010101101', # 132 Z '111110111', # 133 [ '111101111', # 134 \ '111111011', # 135 ] '1010111111', # 136 ^ '101101101', # 137 _ '1011011111', # 140 ` '1011', # 141 a '1011111', # 142 b '101111', # 143 c '101101', # 144 d '11', # 145 e '111101', # 146 f '1011011', # 147 g '101011', # 150 h '1101', # 151 i '111101011', # 152 j '10111111', # 153 k '11011', # 154 l '111011', # 155 m '1111', # 156 n '111', # 157 o '111111', # 160 p '110111111', # 161 q '10101', # 162 r '10111', # 163 s '101', # 164 t '110111', # 165 u '1111011', # 166 v '1101011', # 167 w '11011111', # 170 x '1011101', # 171 y '111010101', # 172 z '1010110111', # 173 { '110111011', # 174 | '1010110101', # 175 } '1011010111', # 176 ~ '1110110101', # 177 DEL ); my $needs_separator = 0; while (<>) { my @chars = split //, $_; foreach my $char (@chars) { print '00' if $needs_separator; my $ord = ord($char); my $code; if ($ord >= 0 && $ord <= 127) { $code = $varicodes[$ord]; } else { $code = $varicodes[ord '?']; } print $code; $needs_separator = 1; } }
Originally posted 2017-07-14 | Last changed 2017-07-14