Byte Heist Home Leaderboard
Join the Heist (with Github)
Solve View

Zigzag Bytes

A string zigzags if its bytes go up, then down, then up, then down again, and so on…

Note that a zigzag can start with a zig or a zag (an increase or a decrease).

Here are some strings that zigzag:

1212
2121
xyxyx
13254
SwApCaSeFuNnY
z!g zag >:^)

Here are some strings that don’t zigzag:

1232
1221
zigzag
!!!!!!

Write a program which outputs all lines from the input which zigzag. Your program must also zigzag.

NOTE: Each line will consist of 4-50 bytes of printable ASCII.

Judge

(async function*(context: Context): Challenge {

    const enc = new TextEncoder(),
        getPattern = function(str: string): string {
            // Represents a string as a zigzag pattern, using `/`, `\\`, and `=`
            const bytes = enc.encode(str);

            let pattern = "";
            for (let idx = 1; idx < bytes.length; idx++)
                pattern += bytes[idx] > bytes[idx - 1] ? "/" : bytes[idx] < bytes[idx - 1] ? "\\" : "="
            return pattern;
        },
        isZigZag = function(str: string): boolean {
            return /^\/?(\\\/)*\\?$/.test(getPattern(str))
        },
		prettyPrint = function(str: string): string {
			var out = "";
			for(let byte of enc.encode(str))
				out += byte >= 32 && byte <= 126 ? String.fromCharCode(byte) : // printable ASCII
					"."; // not printable ASCII
			return out;
		}

    yield context.registerTestCase(new TestCase("Source Code Zigzag Test", isZigZag(context.code) ? "Pass" : "Fail", {
        Text: prettyPrint(context.code)+"\n"+getPattern(context.code)
    }));

    yield* context.runFilterCases(`1212
2121
xyxyx
13254
SwApCaSeFuNnY
z!g zag >:^)
1232
1221
zigzag
!!!!!!
nu0z(g;Z08,<1g;haq>S6I)SIK2C.4 q$I;["gFp3F
nn0z(g;Z08,<1g;haq>S6I)SIK2C.4 q$I;["gFp3F
'%D+oay#r;YA[5=0?:Z)PO\`%H8F?\`,Y%4/0'/&7 )%q%<4zr
'%D+oay#r;YA[5=0?:Z)OP\`%H8F?\`,Y%4/0'/&7 )%q%<4zr
\\uovCs4f@S-@4K3ew$Dn4U*J/F&0/>"\\3
\`[c,A(shi/uC
^c #"~ao!92F8ymw!+ 8'lDwej2U>LAtCa!t451T.b>geUu
3%71r<E.o?m%@)}<\`PdW[7;"Y=d2z\`
C!@;[=D'K.8'^?f.3*udecs1=:C4i9C?g[rp{L\\GW
m|3aSi0K>]=LBK1Z*1)\`=_8K4c%rM]8_,.%7+d:
J{(3'+$\\>^:H,c*LEg\`tDE(A:@==
_MTMcNQ6nFv%WM]6
PGmUhDicmOP(z\`z\\k%3)omo\`dMTMqck+m5>
?N2uty[}Uv!h1L@\`9
Q{l|FV1XKp<N0zV}M{B]#if~2~=_>\\=mWmfw/vgq-k
 bPT-j0<![)\\0nau>D5@:eFi2^Xe'W=q8]\\l\`r '"'!.!a]|{~
^_3;,o
XKkj
E9aAZ'lek46*qPvG
 xgl^x1d_z1{!8!=({=@>zWbUnV\`P\\N_"l=z!o5O:I$D0c
fcvlsQW4;5\\>L<LEt3F6
NIYA_.A,UDL8snyCN>W<gJfM~C
9&pXe%f)^N^]p04#fDz$F;k(C9J6{ch02 
{}?V#XW}&e=\\
zJySdV^,[&phq'A@mDr(9+b\`tL_Rv.A/M
_Z{;I;\`[b <8|7IEtn
U;UBJ(mgr'g$_Hn3]9L=QG~Jh23(u9K?uCK*2-~KMBW&7,T
csY~>\\ZiEnbfPTPw^uej%=(YNjVoTp>qEsIpUvJ[F|&t:
'#($=1J4Y4lPtcoanRX2RM
q9Y=gNoak&l'G)p1>+j.N5>3<'V*2+64j&
Z'XMZ([ sHX0=/mMh7k4w(~fw8A-o0;*H.<
>/s6a)d8JIVMV4F4gEJ2Q@WEqdt;U%
#"ZS^OWMd>wN|A]Jq9\\FK8uT\\OV7JCQ4SHz,
A.z\\pi{ez6;1xaoasa~x{1x[ljo/XAl\`m[{A
Bd8z.3#K0aJN!B.2!9)lgx-U'F"d=O/O$=4~r{[rVzJL=
(N%.%nCd]lg~3[9SJODj"[5\\ 8*\`Qn2C*,(o!GAH;kh|SwVX1<
\`=?!L5Z%iaf\\mAE'pFM=NFZA}'J.T@^DLEU.
t9dEec~VkFR4J,F0=*oh{<C?S0_AK9h4x(|#]#n6}1
AGCe%Q;Z+] m.H'?1D(H![0G4u>A#3/k
l.Ia,(6H"%c&Eo4NaO
F(.I<\\M2.RT&&#2Gw3WoQU.qf
T)|( t]*e \\LGk**8,5]>7k/U
'_HVC=U[QOk1>4\\E^'m&+%oagEy;l?@$X;~k|!WK
CZ&j'g$7Ji5|m6\\#{qVx2tW7VA"82Io730kh5i
$f:&1hJ[}Ya;W+M.
CC#iE7ks"H"N9btj.BBBbx.dq7Na@875M
[a%k7dH3(V2~-.4Gjbkf3"eN<"p"c8F?aB
o/emkqnF^LxJ.B:XNL[*%u?g"$m
40+1~vZ)CKXD;hH
JnjB M^=]Yf2;o[nKaz.
9e>sS^E[)3T6oa<JO4lwBL,Wah4u*:1":_bG%
lp0\`4siu"# w6sqOT7BY.rt~0&1(2|conZdcAsY`.split("\n").map(s => [s, isZigZag(s)]));

    return context.noFailures();
})

Example Code

eval(` ` +'c'+'o'+'n'+'s'+'t'+ ` ` +'e'+'n'+'c'+ ` `+`=`+` ` +'n'+'e'+'w'+ ` `+`T` +'e'+'x'+'t'+ `E` +'n'+'c'+'o'+'d'+'e'+'r'+ `(`+`)`+`,` +'g'+'e'+'t'+ `P` +'a'+'t'+'t'+'e'+'r'+'n'+ ` `+`=`+` ` +'f'+'u'+'n'+'c'+'t'+'i'+'o'+'n'+ `(` +'s'+'t'+'r'+ `)`+` ` +'{'+'c'+'o'+'n'+'s'+'t'+ ` ` +'b'+'y'+'t'+'e'+'s'+ ` `+`=`+` ` +'e'+'n'+'c'+ `.` +'e'+'n'+'c'+'o'+'d'+'e'+ `(` +'s'+'t'+'r'+ `)`+`;` +'l'+'e'+'t'+ ` ` +'p'+'a'+'t'+'t'+'e'+'r'+'n'+ ` `+`=`+` `+`"`+`"`+`;` +'f'+'o'+'r'+ ` `+`(` +'l'+'e'+'t'+ ` ` +'i'+'d'+'x'+ ` `+`=`+` `+`1`+`;`+` ` +'i'+'d'+'x'+ ` `+`<`+` ` +'b'+'y'+'t'+'e'+'s'+ `.` +'l'+'e'+'n'+'g'+'t'+'h'+ `;`+` ` +'i'+'d'+'x'+ `+`+`+`+`)` +'p'+'a'+'t'+'t'+'e'+'r'+'n'+ ` `+`+`+`=`+` ` +'b'+'y'+'t'+'e'+'s'+ `[` +'i'+'d'+'x'+ `]`+` `+`>`+` ` +'b'+'y'+'t'+'e'+'s'+ `[` +'i'+'d'+'x'+ ` `+`-`+` `+`1`+`]`+` `+`?`+` `+`"`+`0`+`"`+` `+`:`+` ` +'b'+'y'+'t'+'e'+'s'+ `[` +'i'+'d'+'x'+ `]`+` `+`<`+` ` +'b'+'y'+'t'+'e'+'s'+ `[` +'i'+'d'+'x'+ ` `+`-`+` `+`1`+`]`+` `+`?`+` `+`"`+`1`+`"`+` `+`:`+` `+`"`+`=`+`"`+`;` +'r'+'e'+'t'+'u'+'r'+'n'+ ` ` +'p'+'a'+'t'+'t'+'e'+'r'+'n'+ `;` +'}'+ `,` +'i'+'s'+ `Z` +'i'+'g'+ `Z` +'a'+'g'+ ` `+`=`+` ` +'f'+'u'+'n'+'c'+'t'+'i'+'o'+'n'+ `(` +'s'+'t'+'r'+ `)`+` ` +'{'+'r'+'e'+'t'+'u'+'r'+'n'+ ` `+`/`+`^`+`0`+`?`+`(`+`1`+`0`+`)`+`*`+`1`+`?`+`$`+`/`+`.` +'t'+'e'+'s'+'t'+ `(` +'g'+'e'+'t'+ `P` +'a'+'t'+'t'+'e'+'r'+'n'+ `(` +'s'+'t'+'r'+ `)`+`)` +'}'+ `;` +'v'+'a'+'r'+ ` ` +'f'+'s'+ ` `+`=`+` ` +'r'+'e'+'q'+'u'+'i'+'r'+'e'+ `(`+`"` +'f'+'s'+ `"`+`)`+`;` +'v'+'a'+'r'+ ` ` +'s'+'t'+'d'+'i'+'n'+ `B` +'u'+'f'+'f'+'e'+'r'+ ` `+`=`+` ` +'f'+'s'+ `.` +'r'+'e'+'a'+'d'+ `F` +'i'+'l'+'e'+ `S` +'y'+'n'+'c'+ `(`+`0`+`)`+`;`+` ` +'c'+'o'+'n'+'s'+'o'+'l'+'e'+ `.` +'l'+'o'+'g'+ `(` +'s'+'t'+'d'+'i'+'n'+ `B` +'u'+'f'+'f'+'e'+'r'+ `.` +'t'+'o'+ `S` +'t'+'r'+'i'+'n'+'g'+ `(`+`)`+`.` +'s'+'p'+'l'+'i'+'t'+ `(`+`S` +'t'+'r'+'i'+'n'+'g'+ `.` +'f'+'r'+'o'+'m'+ `C` +'h'+'a'+'r'+ `C` +'o'+'d'+'e'+ `(`+`1`+`0`+`)`+`)`+`.` +'f'+'i'+'l'+'t'+'e'+'r'+ `(` +'i'+'s'+ `Z` +'i'+'g'+ `Z` +'a'+'g'+ `)`+`.` +'j'+'o'+'i'+'n'+ `(`+`S` +'t'+'r'+'i'+'n'+'g'+ `.` +'f'+'r'+'o'+'m'+ `C` +'h'+'a'+'r'+ `C` +'o'+'d'+'e'+ `(`+`1`+`0`+`)`+`)`+`)`+`;`)