Ad

and here's dropping the entire output for bigger context

Code
Diff
  • print("""\
    <div><h2 class="failed">Test Results:</h2><!----><div class="run-results__result-items"><div><div class="result-type--tree py-1 my-1 result-type--describe result-type--tree--expanded"><div class="cursor-pointer inline-flex items-start justify-center space-x-0.5"><div class="failed"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></div><span class="run-value result-type__value result-type__value--failed leading-relaxed" ignore-escape="true">Playground</span></div><!----><!----></div><div><div class="ml-5"><div><div class="result-type--tree py-1 my-1 result-type--describe result-type--tree--expanded"><div class="cursor-pointer inline-flex items-start justify-center space-x-0.5"><div class="failed"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></div><span class="run-value result-type__value result-type__value--failed leading-relaxed" ignore-escape="true">Example Tests</span></div><!----><!----></div><div><div class="ml-5"><div><div class="result-type--tree py-1 my-1 result-type--it result-type--tree--expanded"><div class="cursor-pointer inline-flex items-start justify-center space-x-0.5"><div class="failed"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></div><span class="run-value result-type__value result-type__value--failed leading-relaxed" ignore-escape="true">Test #1</span></div><!----><!----></div><div><div class="ml-5"><div><div class="result-type--log my-1.5 result-type--expanded p-1" collapsed="false"><div class="result-type__tabs py-0.5 flex items-center justify-start"><label class="inline-flex items-start justify-center space-x-0.5 active"><span class="result-type__chevron"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></span><span class="leading-relaxed">Log</span></label></div><div class="mt-1 p-1"><span class="run-value run-value--html result-type__value">  <style>.board0:after{ content: "\\a All solutions:\\a \\a 1 8 9 | . . . | . . .\\a . 2 7 | . . . | . . .\\a 6 5 4 | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . ."; animation: anim0 1s infinite; } @keyframes anim0 { 0% {
          content: "\\a All solutions:\\a \\a 1 8 9 | . . . | . . .\\a . 2 7 | . . . | . . .\\a 6 5 4 | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . .";
        }  100% {
          content: "\\a All solutions:\\a \\a 1 8 9 | . . . | . . .\\a 3 2 7 | . . . | . . .\\a 6 5 4 | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . .";
        }  } </style><span class="board0"></span></span></div></div><!----></div><div><div class="result-type--result flex flx-row py-1 failed" collapsed="false"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4"><path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z" clip-rule="evenodd"></path></svg><span class="result-type__value ml-1.5 failed">r2c1=4 is not a valid naked single: expected false to be true</span></div><!----></div><div><div class="result-type--time" collapsed="false"> Completed in 3ms</div><!----></div></div></div></div><div><div class="result-type--tree py-1 my-1 result-type--it result-type--tree--expanded"><div class="cursor-pointer inline-flex items-start justify-center space-x-0.5"><div class="failed"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></div><span class="run-value result-type__value result-type__value--failed leading-relaxed" ignore-escape="true">Test #2</span></div><!----><!----></div><div><div class="ml-5"><div><div class="result-type--log my-1.5 result-type--expanded p-1" collapsed="false"><div class="result-type__tabs py-0.5 flex items-center justify-start"><label class="inline-flex items-start justify-center space-x-0.5 active"><span class="result-type__chevron"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></span><span class="leading-relaxed">Log</span></label></div><div class="mt-1 p-1"><span class="run-value run-value--html result-type__value">  <style>.board1:after{ content: "\\a All solutions:\\a \\a . 1 7 | . . . | . . .\\a . . . | . . 5 | . 6 .\\a 8 3 . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . 4 . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . 9 . | . . . | . . ."; animation: anim1 1s infinite; } @keyframes anim1 { 0% {
          content: "\\a All solutions:\\a \\a . 1 7 | . . . | . . .\\a . . . | . . 5 | . 6 .\\a 8 3 . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . 4 . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . 9 . | . . . | . . .";
        }  100% {
          content: "\\a All solutions:\\a \\a . 1 7 | . . . | . . .\\a . 2 . | . . 5 | . 6 .\\a 8 3 . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . 4 . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . 9 . | . . . | . . .";
        }  } </style><span class="board1"></span></span></div></div><!----></div><div><div class="result-type--result flex flx-row py-1 failed" collapsed="false"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4"><path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z" clip-rule="evenodd"></path></svg><span class="result-type__value ml-1.5 failed">r2c1=4 is not a valid naked single: expected false to be true</span></div><!----></div><div><div class="result-type--time" collapsed="false"> Completed in 1ms</div><!----></div></div></div></div><div><div class="result-type--time" collapsed="false"> Completed in 4ms</div><!----></div></div></div></div><div><div class="result-type--tree py-1 my-1 result-type--describe result-type--tree--expanded"><div class="cursor-pointer inline-flex items-start justify-center space-x-0.5"><div class="failed"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></div><span class="run-value result-type__value result-type__value--failed leading-relaxed" ignore-escape="true">Basic Tests</span></div><!----><!----></div><div><div class="ml-5"><div><div class="result-type--tree py-1 my-1 result-type--it result-type--tree--expanded"><div class="cursor-pointer inline-flex items-start justify-center space-x-0.5"><div class="failed"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></div><span class="run-value result-type__value result-type__value--failed leading-relaxed" ignore-escape="true">Test #1</span></div><!----><!----></div><div><div class="ml-5"><div><div class="result-type--log my-1.5 result-type--expanded p-1" collapsed="false"><div class="result-type__tabs py-0.5 flex items-center justify-start"><label class="inline-flex items-start justify-center space-x-0.5 active"><span class="result-type__chevron"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></span><span class="leading-relaxed">Log</span></label></div><div class="mt-1 p-1"><span class="run-value run-value--html result-type__value">  <style>.board2:after{ content: "\\a All solutions:\\a \\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a 9 1 . | 2 7 3 | 4 5 8\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . ."; animation: anim2 1s infinite; } @keyframes anim2 { 0% {
          content: "\\a All solutions:\\a \\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a 9 1 . | 2 7 3 | 4 5 8\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . .";
        }  100% {
          content: "\\a All solutions:\\a \\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a 9 1 6 | 2 7 3 | 4 5 8\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . .";
        }  } </style><span class="board2"></span></span></div></div><!----></div><div><div class="result-type--result flex flx-row py-1 failed" collapsed="false"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4"><path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z" clip-rule="evenodd"></path></svg><span class="result-type__value ml-1.5 failed">r2c1=4 is not a valid naked single: expected false to be true</span></div><!----></div><div><div class="result-type--time" collapsed="false"> Completed in 1ms</div><!----></div></div></div></div><div><div class="result-type--tree py-1 my-1 result-type--it result-type--tree--expanded"><div class="cursor-pointer inline-flex items-start justify-center space-x-0.5"><div class="failed"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></div><span class="run-value result-type__value result-type__value--failed leading-relaxed" ignore-escape="true">Test #2</span></div><!----><!----></div><div><div class="ml-5"><div><div class="result-type--log my-1.5 result-type--expanded p-1" collapsed="false"><div class="result-type__tabs py-0.5 flex items-center justify-start"><label class="inline-flex items-start justify-center space-x-0.5 active"><span class="result-type__chevron"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></span><span class="leading-relaxed">Log</span></label></div><div class="mt-1 p-1"><span class="run-value run-value--html result-type__value">  <style>.board3:after{ content: "\\a All solutions:\\a \\a . . . | . . . | . 1 .\\a . . . | . . . | . 2 .\\a . . . | . . . | . 6 .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . 3 .\\a . . . | . . . | . 5 .\\a ------+-------+------\\a . . . | . . . | . 7 .\\a . . . | . . . | . 8 .\\a . . . | . . . | . 9 ."; animation: anim3 1s infinite; } @keyframes anim3 { 0% {
          content: "\\a All solutions:\\a \\a . . . | . . . | . 1 .\\a . . . | . . . | . 2 .\\a . . . | . . . | . 6 .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . 3 .\\a . . . | . . . | . 5 .\\a ------+-------+------\\a . . . | . . . | . 7 .\\a . . . | . . . | . 8 .\\a . . . | . . . | . 9 .";
        }  100% {
          content: "\\a All solutions:\\a \\a . . . | . . . | . 1 .\\a . . . | . . . | . 2 .\\a . . . | . . . | . 6 .\\a ------+-------+------\\a . . . | . . . | . 4 .\\a . . . | . . . | . 3 .\\a . . . | . . . | . 5 .\\a ------+-------+------\\a . . . | . . . | . 7 .\\a . . . | . . . | . 8 .\\a . . . | . . . | . 9 .";
        }  } </style><span class="board3"></span></span></div></div><!----></div><div><div class="result-type--result flex flx-row py-1 failed" collapsed="false"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4"><path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z" clip-rule="evenodd"></path></svg><span class="result-type__value ml-1.5 failed">r2c1=4 is not a valid naked single: expected false to be true</span></div><!----></div><div><!----><!----></div></div></div></div><div><div class="result-type--tree py-1 my-1 result-type--it result-type--tree--expanded"><div class="cursor-pointer inline-flex items-start justify-center space-x-0.5"><div class="failed"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></div><span class="run-value result-type__value result-type__value--failed leading-relaxed" ignore-escape="true">Test #3</span></div><!----><!----></div><div><div class="ml-5"><div><div class="result-type--log my-1.5 result-type--expanded p-1" collapsed="false"><div class="result-type__tabs py-0.5 flex items-center justify-start"><label class="inline-flex items-start justify-center space-x-0.5 active"><span class="result-type__chevron"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></span><span class="leading-relaxed">Log</span></label></div><div class="mt-1 p-1"><span class="run-value run-value--html result-type__value">  <style>.board4:after{ content: "\\a All solutions:\\a \\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | 2 3 8 | . . .\\a . . . | . 4 5 | . . .\\a . . . | 9 7 6 | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . ."; animation: anim4 1s infinite; } @keyframes anim4 { 0% {
          content: "\\a All solutions:\\a \\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | 2 3 8 | . . .\\a . . . | . 4 5 | . . .\\a . . . | 9 7 6 | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . .";
        }  100% {
          content: "\\a All solutions:\\a \\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | 2 3 8 | . . .\\a . . . | 1 4 5 | . . .\\a . . . | 9 7 6 | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . .";
        }  } </style><span class="board4"></span></span></div></div><!----></div><div><div class="result-type--result flex flx-row py-1 failed" collapsed="false"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4"><path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z" clip-rule="evenodd"></path></svg><span class="result-type__value ml-1.5 failed">r2c1=4 is not a valid naked single: expected false to be true</span></div><!----></div><div><div class="result-type--time" collapsed="false"> Completed in 1ms</div><!----></div></div></div></div><div><div class="result-type--tree py-1 my-1 result-type--it result-type--tree--expanded"><div class="cursor-pointer inline-flex items-start justify-center space-x-0.5"><div class="failed"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></div><span class="run-value result-type__value result-type__value--failed leading-relaxed" ignore-escape="true">Test #4</span></div><!----><!----></div><div><div class="ml-5"><div><div class="result-type--log my-1.5 result-type--expanded p-1" collapsed="false"><div class="result-type__tabs py-0.5 flex items-center justify-start"><label class="inline-flex items-start justify-center space-x-0.5 active"><span class="result-type__chevron"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></span><span class="leading-relaxed">Log</span></label></div><div class="mt-1 p-1"><span class="run-value run-value--html result-type__value">  <style>.board5:after{ content: "\\a All solutions:\\a \\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | 4 . .\\a ------+-------+------\\a . . . | 3 . . | . 2 1\\a . . . | . . . | . . .\\a . . . | . . . | . . 8\\a ------+-------+------\\a . . . | . . . | 5 . .\\a . . . | . . . | 7 . .\\a . . . | . . . | 9 . ."; animation: anim5 1s infinite; } @keyframes anim5 { 0% {
          content: "\\a All solutions:\\a \\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | 4 . .\\a ------+-------+------\\a . . . | 3 . . | . 2 1\\a . . . | . . . | . . .\\a . . . | . . . | . . 8\\a ------+-------+------\\a . . . | . . . | 5 . .\\a . . . | . . . | 7 . .\\a . . . | . . . | 9 . .";
        }  100% {
          content: "\\a All solutions:\\a \\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | 4 . .\\a ------+-------+------\\a . . . | 3 . . | 6 2 1\\a . . . | . . . | . . .\\a . . . | . . . | . . 8\\a ------+-------+------\\a . . . | . . . | 5 . .\\a . . . | . . . | 7 . .\\a . . . | . . . | 9 . .";
        }  } </style><span class="board5"></span></span></div></div><!----></div><div><div class="result-type--result flex flx-row py-1 failed" collapsed="false"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4"><path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z" clip-rule="evenodd"></path></svg><span class="result-type__value ml-1.5 failed">r2c1=4 is not a valid naked single: expected false to be true</span></div><!----></div><div><div class="result-type--time" collapsed="false"> Completed in 1ms</div><!----></div></div></div></div><div><div class="result-type--tree py-1 my-1 result-type--it result-type--tree--expanded"><div class="cursor-pointer inline-flex items-start justify-center space-x-0.5"><div class="failed"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></div><span class="run-value result-type__value result-type__value--failed leading-relaxed" ignore-escape="true">Test #5</span></div><!----><!----></div><div><div class="ml-5"><div><div class="result-type--log my-1.5 result-type--expanded p-1" collapsed="false"><div class="result-type__tabs py-0.5 flex items-center justify-start"><label class="inline-flex items-start justify-center space-x-0.5 active"><span class="result-type__chevron"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></span><span class="leading-relaxed">Log</span></label></div><div class="mt-1 p-1"><span class="run-value run-value--html result-type__value">  <style>.board6:after{ content: "\\a All solutions:\\a \\a . . . | . 3 . | . . .\\a . . . | . 2 . | . . .\\a . . . | . 1 . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . 8 | . . . | 7 . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | . 4 . | . . .\\a . . . | . 5 . | . . .\\a . . . | . 6 . | . . ."; animation: anim6 1s infinite; } @keyframes anim6 { 0% {
          content: "\\a All solutions:\\a \\a . . . | . 3 . | . . .\\a . . . | . 2 . | . . .\\a . . . | . 1 . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . 8 | . . . | 7 . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | . 4 . | . . .\\a . . . | . 5 . | . . .\\a . . . | . 6 . | . . .";
        }  100% {
          content: "\\a All solutions:\\a \\a . . . | . 3 . | . . .\\a . . . | . 2 . | . . .\\a . . . | . 1 . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . 8 | . 9 . | 7 . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | . 4 . | . . .\\a . . . | . 5 . | . . .\\a . . . | . 6 . | . . .";
        }  } </style><span class="board6"></span></span></div></div><!----></div><div><div class="result-type--result flex flx-row py-1 failed" collapsed="false"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4"><path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z" clip-rule="evenodd"></path></svg><span class="result-type__value ml-1.5 failed">r2c1=4 is not a valid naked single: expected false to be true</span></div><!----></div><div><!----><!----></div></div></div></div><div><div class="result-type--tree py-1 my-1 result-type--it result-type--tree--expanded"><div class="cursor-pointer inline-flex items-start justify-center space-x-0.5"><div class="failed"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></div><span class="run-value result-type__value result-type__value--failed leading-relaxed" ignore-escape="true">Test #6</span></div><!----><!----></div><div><div class="ml-5"><div><div class="result-type--log my-1.5 result-type--expanded p-1" collapsed="false"><div class="result-type__tabs py-0.5 flex items-center justify-start"><label class="inline-flex items-start justify-center space-x-0.5 active"><span class="result-type__chevron"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></span><span class="leading-relaxed">Log</span></label></div><div class="mt-1 p-1"><span class="run-value run-value--html result-type__value">  <style>.board7:after{ content: "\\a All solutions:\\a \\a . . . | . . . | . . .\\a 1 . . | 2 . . | 3 . .\\a 9 . 4 | . . . | . . .\\a ------+-------+------\\a . 5 . | . . . | . . .\\a . 6 . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . 8 . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . ."; animation: anim7 1s infinite; } @keyframes anim7 { 0% {
          content: "\\a All solutions:\\a \\a . . . | . . . | . . .\\a 1 . . | 2 . . | 3 . .\\a 9 . 4 | . . . | . . .\\a ------+-------+------\\a . 5 . | . . . | . . .\\a . 6 . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . 8 . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . .";
        }  100% {
          content: "\\a All solutions:\\a \\a . . . | . . . | . . .\\a 1 7 . | 2 . . | 3 . .\\a 9 . 4 | . . . | . . .\\a ------+-------+------\\a . 5 . | . . . | . . .\\a . 6 . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . 8 . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . .";
        }  } </style><span class="board7"></span></span></div></div><!----></div><div><div class="result-type--result flex flx-row py-1 failed" collapsed="false"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4"><path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z" clip-rule="evenodd"></path></svg><span class="result-type__value ml-1.5 failed">r2c1=4 is not a valid naked single: expected false to be true</span></div><!----></div><div><!----><!----></div></div></div></div><div><div class="result-type--tree py-1 my-1 result-type--it result-type--tree--expanded"><div class="cursor-pointer inline-flex items-start justify-center space-x-0.5"><div class="failed"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></div><span class="run-value result-type__value result-type__value--failed leading-relaxed" ignore-escape="true">Test #7</span></div><!----><!----></div><div><div class="ml-5"><div><div class="result-type--log my-1.5 result-type--expanded p-1" collapsed="false"><div class="result-type__tabs py-0.5 flex items-center justify-start"><label class="inline-flex items-start justify-center space-x-0.5 active"><span class="result-type__chevron"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></span><span class="leading-relaxed">Log</span></label></div><div class="mt-1 p-1"><span class="run-value run-value--html result-type__value">  <style>.board8:after{ content: "\\a All solutions:\\a \\a . . . | . . . | . . .\\a 6 . . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a 1 . 7 | . . . | . . .\\a . 2 8 | . . . | . . .\\a 3 . . | . . . | . . .\\a ------+-------+------\\a 4 . . | . . . | . . .\\a 5 . . | . . . | . . .\\a . . . | . . . | . . ."; animation: anim8 1s infinite; } @keyframes anim8 { 0% {
          content: "\\a All solutions:\\a \\a . . . | . . . | . . .\\a 6 . . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a 1 . 7 | . . . | . . .\\a . 2 8 | . . . | . . .\\a 3 . . | . . . | . . .\\a ------+-------+------\\a 4 . . | . . . | . . .\\a 5 . . | . . . | . . .\\a . . . | . . . | . . .";
        }  100% {
          content: "\\a All solutions:\\a \\a . . . | . . . | . . .\\a 6 . . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a 1 . 7 | . . . | . . .\\a 9 2 8 | . . . | . . .\\a 3 . . | . . . | . . .\\a ------+-------+------\\a 4 . . | . . . | . . .\\a 5 . . | . . . | . . .\\a . . . | . . . | . . .";
        }  } </style><span class="board8"></span></span></div></div><!----></div><div><div class="result-type--result flex flx-row py-1 failed" collapsed="false"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4"><path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z" clip-rule="evenodd"></path></svg><span class="result-type__value ml-1.5 failed">r2c1=4 is not a valid naked single: expected false to be true</span></div><!----></div><div><div class="result-type--time" collapsed="false"> Completed in 1ms</div><!----></div></div></div></div><div><div class="result-type--tree py-1 my-1 result-type--it result-type--tree--expanded"><div class="cursor-pointer inline-flex items-start justify-center space-x-0.5"><div class="failed"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></div><span class="run-value result-type__value result-type__value--failed leading-relaxed" ignore-escape="true">Test #8</span></div><!----><!----></div><div><div class="ml-5"><div><div class="result-type--log my-1.5 result-type--expanded p-1" collapsed="false"><div class="result-type__tabs py-0.5 flex items-center justify-start"><label class="inline-flex items-start justify-center space-x-0.5 active"><span class="result-type__chevron"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></span><span class="leading-relaxed">Log</span></label></div><div class="mt-1 p-1"><span class="run-value run-value--html result-type__value">  <style>.board9:after{ content: "\\a All solutions:\\a \\a . . 1 | . . . | . . .\\a . 5 . | . . . | . . .\\a 7 6 9 | . . . | . . .\\a ------+-------+------\\a . . 2 | . . . | . . .\\a . . 8 | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . 4 | . . . | . . ."; animation: anim9 1s infinite; } @keyframes anim9 { 0% {
          content: "\\a All solutions:\\a \\a . . 1 | . . . | . . .\\a . 5 . | . . . | . . .\\a 7 6 9 | . . . | . . .\\a ------+-------+------\\a . . 2 | . . . | . . .\\a . . 8 | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . 4 | . . . | . . .";
        }  100% {
          content: "\\a All solutions:\\a \\a . . 1 | . . . | . . .\\a . 5 3 | . . . | . . .\\a 7 6 9 | . . . | . . .\\a ------+-------+------\\a . . 2 | . . . | . . .\\a . . 8 | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . 4 | . . . | . . .";
        }  } </style><span class="board9"></span></span></div></div><!----></div><div><div class="result-type--result flex flx-row py-1 failed" collapsed="false"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4"><path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z" clip-rule="evenodd"></path></svg><span class="result-type__value ml-1.5 failed">r2c1=4 is not a valid naked single: expected false to be true</span></div><!----></div><div><div class="result-type--time" collapsed="false"> Completed in 1ms</div><!----></div></div></div></div><div><div class="result-type--tree py-1 my-1 result-type--it result-type--tree--expanded"><div class="cursor-pointer inline-flex items-start justify-center space-x-0.5"><div class="failed"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></div><span class="run-value result-type__value result-type__value--failed leading-relaxed" ignore-escape="true">Test #9</span></div><!----><!----></div><div><div class="ml-5"><div><div class="result-type--log my-1.5 result-type--expanded p-1" collapsed="false"><div class="result-type__tabs py-0.5 flex items-center justify-start"><label class="inline-flex items-start justify-center space-x-0.5 active"><span class="result-type__chevron"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></span><span class="leading-relaxed">Log</span></label></div><div class="mt-1 p-1"><span class="run-value run-value--html result-type__value">  <style>.board10:after{ content: "\\a All solutions:\\a \\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . 2 | . . .\\a ------+-------+------\\a . . . | . . 1 | . . .\\a . 6 7 | 8 4 . | . . .\\a . . . | 9 . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . 3 | . . ."; animation: anim10 1s infinite; } @keyframes anim10 { 0% {
          content: "\\a All solutions:\\a \\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . 2 | . . .\\a ------+-------+------\\a . . . | . . 1 | . . .\\a . 6 7 | 8 4 . | . . .\\a . . . | 9 . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . 3 | . . .";
        }  100% {
          content: "\\a All solutions:\\a \\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . 2 | . . .\\a ------+-------+------\\a . . . | . . 1 | . . .\\a . 6 7 | 8 4 5 | . . .\\a . . . | 9 . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . 3 | . . .";
        }  } </style><span class="board10"></span></span></div></div><!----></div><div><div class="result-type--result flex flx-row py-1 failed" collapsed="false"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4"><path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z" clip-rule="evenodd"></path></svg><span class="result-type__value ml-1.5 failed">r2c1=4 is not a valid naked single: expected false to be true</span></div><!----></div><div><div class="result-type--time" collapsed="false"> Completed in 1ms</div><!----></div></div></div></div><div><div class="result-type--time" collapsed="false"> Completed in 6ms</div><!----></div></div></div></div><div><div class="result-type--time" collapsed="false"> Completed in 10ms</div><!----></div></div></div></div></div><!----></div>""")
    • print("""\
    • <style>.board1:after{ content: "\\a All solutions:\\a \\a . 1 7 | . . . | . . .\\a . . . | . . 5 | . 6 .\\a 8 3 . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . 4 . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . 9 . | . . . | . . ."; animation: anim1 1s infinite; } @keyframes anim1 { 0% {
    • <div><h2 class="failed">Test Results:</h2><!----><div class="run-results__result-items"><div><div class="result-type--tree py-1 my-1 result-type--describe result-type--tree--expanded"><div class="cursor-pointer inline-flex items-start justify-center space-x-0.5"><div class="failed"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></div><span class="run-value result-type__value result-type__value--failed leading-relaxed" ignore-escape="true">Playground</span></div><!----><!----></div><div><div class="ml-5"><div><div class="result-type--tree py-1 my-1 result-type--describe result-type--tree--expanded"><div class="cursor-pointer inline-flex items-start justify-center space-x-0.5"><div class="failed"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></div><span class="run-value result-type__value result-type__value--failed leading-relaxed" ignore-escape="true">Example Tests</span></div><!----><!----></div><div><div class="ml-5"><div><div class="result-type--tree py-1 my-1 result-type--it result-type--tree--expanded"><div class="cursor-pointer inline-flex items-start justify-center space-x-0.5"><div class="failed"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></div><span class="run-value result-type__value result-type__value--failed leading-relaxed" ignore-escape="true">Test #1</span></div><!----><!----></div><div><div class="ml-5"><div><div class="result-type--log my-1.5 result-type--expanded p-1" collapsed="false"><div class="result-type__tabs py-0.5 flex items-center justify-start"><label class="inline-flex items-start justify-center space-x-0.5 active"><span class="result-type__chevron"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></span><span class="leading-relaxed">Log</span></label></div><div class="mt-1 p-1"><span class="run-value run-value--html result-type__value"> <style>.board0:after{ content: "\\a All solutions:\\a \\a 1 8 9 | . . . | . . .\\a . 2 7 | . . . | . . .\\a 6 5 4 | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . ."; animation: anim0 1s infinite; } @keyframes anim0 { 0% {
    • content: "\\a All solutions:\\a \\a 1 8 9 | . . . | . . .\\a . 2 7 | . . . | . . .\\a 6 5 4 | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . .";
    • } 100% {
    • content: "\\a All solutions:\\a \\a 1 8 9 | . . . | . . .\\a 3 2 7 | . . . | . . .\\a 6 5 4 | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . .";
    • } } </style><span class="board0"></span></span></div></div><!----></div><div><div class="result-type--result flex flx-row py-1 failed" collapsed="false"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4"><path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z" clip-rule="evenodd"></path></svg><span class="result-type__value ml-1.5 failed">r2c1=4 is not a valid naked single: expected false to be true</span></div><!----></div><div><div class="result-type--time" collapsed="false"> Completed in 3ms</div><!----></div></div></div></div><div><div class="result-type--tree py-1 my-1 result-type--it result-type--tree--expanded"><div class="cursor-pointer inline-flex items-start justify-center space-x-0.5"><div class="failed"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></div><span class="run-value result-type__value result-type__value--failed leading-relaxed" ignore-escape="true">Test #2</span></div><!----><!----></div><div><div class="ml-5"><div><div class="result-type--log my-1.5 result-type--expanded p-1" collapsed="false"><div class="result-type__tabs py-0.5 flex items-center justify-start"><label class="inline-flex items-start justify-center space-x-0.5 active"><span class="result-type__chevron"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></span><span class="leading-relaxed">Log</span></label></div><div class="mt-1 p-1"><span class="run-value run-value--html result-type__value"> <style>.board1:after{ content: "\\a All solutions:\\a \\a . 1 7 | . . . | . . .\\a . . . | . . 5 | . 6 .\\a 8 3 . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . 4 . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . 9 . | . . . | . . ."; animation: anim1 1s infinite; } @keyframes anim1 { 0% {
    • content: "\\a All solutions:\\a \\a . 1 7 | . . . | . . .\\a . . . | . . 5 | . 6 .\\a 8 3 . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . 4 . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . 9 . | . . . | . . .";
    • } 100% {
    • content: "\\a All solutions:\\a \\a . 1 7 | . . . | . . .\\a . 2 . | . . 5 | . 6 .\\a 8 3 . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . 4 . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . 9 . | . . . | . . .";
    • } } </style><span class="board1"></span>
    • """)
    • } } </style><span class="board1"></span></span></div></div><!----></div><div><div class="result-type--result flex flx-row py-1 failed" collapsed="false"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4"><path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z" clip-rule="evenodd"></path></svg><span class="result-type__value ml-1.5 failed">r2c1=4 is not a valid naked single: expected false to be true</span></div><!----></div><div><div class="result-type--time" collapsed="false"> Completed in 1ms</div><!----></div></div></div></div><div><div class="result-type--time" collapsed="false"> Completed in 4ms</div><!----></div></div></div></div><div><div class="result-type--tree py-1 my-1 result-type--describe result-type--tree--expanded"><div class="cursor-pointer inline-flex items-start justify-center space-x-0.5"><div class="failed"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></div><span class="run-value result-type__value result-type__value--failed leading-relaxed" ignore-escape="true">Basic Tests</span></div><!----><!----></div><div><div class="ml-5"><div><div class="result-type--tree py-1 my-1 result-type--it result-type--tree--expanded"><div class="cursor-pointer inline-flex items-start justify-center space-x-0.5"><div class="failed"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></div><span class="run-value result-type__value result-type__value--failed leading-relaxed" ignore-escape="true">Test #1</span></div><!----><!----></div><div><div class="ml-5"><div><div class="result-type--log my-1.5 result-type--expanded p-1" collapsed="false"><div class="result-type__tabs py-0.5 flex items-center justify-start"><label class="inline-flex items-start justify-center space-x-0.5 active"><span class="result-type__chevron"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></span><span class="leading-relaxed">Log</span></label></div><div class="mt-1 p-1"><span class="run-value run-value--html result-type__value"> <style>.board2:after{ content: "\\a All solutions:\\a \\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a 9 1 . | 2 7 3 | 4 5 8\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . ."; animation: anim2 1s infinite; } @keyframes anim2 { 0% {
    • content: "\\a All solutions:\\a \\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a 9 1 . | 2 7 3 | 4 5 8\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . .";
    • } 100% {
    • content: "\\a All solutions:\\a \\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a 9 1 6 | 2 7 3 | 4 5 8\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . .";
    • } } </style><span class="board2"></span></span></div></div><!----></div><div><div class="result-type--result flex flx-row py-1 failed" collapsed="false"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4"><path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z" clip-rule="evenodd"></path></svg><span class="result-type__value ml-1.5 failed">r2c1=4 is not a valid naked single: expected false to be true</span></div><!----></div><div><div class="result-type--time" collapsed="false"> Completed in 1ms</div><!----></div></div></div></div><div><div class="result-type--tree py-1 my-1 result-type--it result-type--tree--expanded"><div class="cursor-pointer inline-flex items-start justify-center space-x-0.5"><div class="failed"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></div><span class="run-value result-type__value result-type__value--failed leading-relaxed" ignore-escape="true">Test #2</span></div><!----><!----></div><div><div class="ml-5"><div><div class="result-type--log my-1.5 result-type--expanded p-1" collapsed="false"><div class="result-type__tabs py-0.5 flex items-center justify-start"><label class="inline-flex items-start justify-center space-x-0.5 active"><span class="result-type__chevron"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></span><span class="leading-relaxed">Log</span></label></div><div class="mt-1 p-1"><span class="run-value run-value--html result-type__value"> <style>.board3:after{ content: "\\a All solutions:\\a \\a . . . | . . . | . 1 .\\a . . . | . . . | . 2 .\\a . . . | . . . | . 6 .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . 3 .\\a . . . | . . . | . 5 .\\a ------+-------+------\\a . . . | . . . | . 7 .\\a . . . | . . . | . 8 .\\a . . . | . . . | . 9 ."; animation: anim3 1s infinite; } @keyframes anim3 { 0% {
    • content: "\\a All solutions:\\a \\a . . . | . . . | . 1 .\\a . . . | . . . | . 2 .\\a . . . | . . . | . 6 .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . 3 .\\a . . . | . . . | . 5 .\\a ------+-------+------\\a . . . | . . . | . 7 .\\a . . . | . . . | . 8 .\\a . . . | . . . | . 9 .";
    • } 100% {
    • content: "\\a All solutions:\\a \\a . . . | . . . | . 1 .\\a . . . | . . . | . 2 .\\a . . . | . . . | . 6 .\\a ------+-------+------\\a . . . | . . . | . 4 .\\a . . . | . . . | . 3 .\\a . . . | . . . | . 5 .\\a ------+-------+------\\a . . . | . . . | . 7 .\\a . . . | . . . | . 8 .\\a . . . | . . . | . 9 .";
    • } } </style><span class="board3"></span></span></div></div><!----></div><div><div class="result-type--result flex flx-row py-1 failed" collapsed="false"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4"><path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z" clip-rule="evenodd"></path></svg><span class="result-type__value ml-1.5 failed">r2c1=4 is not a valid naked single: expected false to be true</span></div><!----></div><div><!----><!----></div></div></div></div><div><div class="result-type--tree py-1 my-1 result-type--it result-type--tree--expanded"><div class="cursor-pointer inline-flex items-start justify-center space-x-0.5"><div class="failed"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></div><span class="run-value result-type__value result-type__value--failed leading-relaxed" ignore-escape="true">Test #3</span></div><!----><!----></div><div><div class="ml-5"><div><div class="result-type--log my-1.5 result-type--expanded p-1" collapsed="false"><div class="result-type__tabs py-0.5 flex items-center justify-start"><label class="inline-flex items-start justify-center space-x-0.5 active"><span class="result-type__chevron"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></span><span class="leading-relaxed">Log</span></label></div><div class="mt-1 p-1"><span class="run-value run-value--html result-type__value"> <style>.board4:after{ content: "\\a All solutions:\\a \\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | 2 3 8 | . . .\\a . . . | . 4 5 | . . .\\a . . . | 9 7 6 | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . ."; animation: anim4 1s infinite; } @keyframes anim4 { 0% {
    • content: "\\a All solutions:\\a \\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | 2 3 8 | . . .\\a . . . | . 4 5 | . . .\\a . . . | 9 7 6 | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . .";
    • } 100% {
    • content: "\\a All solutions:\\a \\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | 2 3 8 | . . .\\a . . . | 1 4 5 | . . .\\a . . . | 9 7 6 | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . .";
    • } } </style><span class="board4"></span></span></div></div><!----></div><div><div class="result-type--result flex flx-row py-1 failed" collapsed="false"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4"><path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z" clip-rule="evenodd"></path></svg><span class="result-type__value ml-1.5 failed">r2c1=4 is not a valid naked single: expected false to be true</span></div><!----></div><div><div class="result-type--time" collapsed="false"> Completed in 1ms</div><!----></div></div></div></div><div><div class="result-type--tree py-1 my-1 result-type--it result-type--tree--expanded"><div class="cursor-pointer inline-flex items-start justify-center space-x-0.5"><div class="failed"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></div><span class="run-value result-type__value result-type__value--failed leading-relaxed" ignore-escape="true">Test #4</span></div><!----><!----></div><div><div class="ml-5"><div><div class="result-type--log my-1.5 result-type--expanded p-1" collapsed="false"><div class="result-type__tabs py-0.5 flex items-center justify-start"><label class="inline-flex items-start justify-center space-x-0.5 active"><span class="result-type__chevron"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></span><span class="leading-relaxed">Log</span></label></div><div class="mt-1 p-1"><span class="run-value run-value--html result-type__value"> <style>.board5:after{ content: "\\a All solutions:\\a \\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | 4 . .\\a ------+-------+------\\a . . . | 3 . . | . 2 1\\a . . . | . . . | . . .\\a . . . | . . . | . . 8\\a ------+-------+------\\a . . . | . . . | 5 . .\\a . . . | . . . | 7 . .\\a . . . | . . . | 9 . ."; animation: anim5 1s infinite; } @keyframes anim5 { 0% {
    • content: "\\a All solutions:\\a \\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | 4 . .\\a ------+-------+------\\a . . . | 3 . . | . 2 1\\a . . . | . . . | . . .\\a . . . | . . . | . . 8\\a ------+-------+------\\a . . . | . . . | 5 . .\\a . . . | . . . | 7 . .\\a . . . | . . . | 9 . .";
    • } 100% {
    • content: "\\a All solutions:\\a \\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | 4 . .\\a ------+-------+------\\a . . . | 3 . . | 6 2 1\\a . . . | . . . | . . .\\a . . . | . . . | . . 8\\a ------+-------+------\\a . . . | . . . | 5 . .\\a . . . | . . . | 7 . .\\a . . . | . . . | 9 . .";
    • } } </style><span class="board5"></span></span></div></div><!----></div><div><div class="result-type--result flex flx-row py-1 failed" collapsed="false"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4"><path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z" clip-rule="evenodd"></path></svg><span class="result-type__value ml-1.5 failed">r2c1=4 is not a valid naked single: expected false to be true</span></div><!----></div><div><div class="result-type--time" collapsed="false"> Completed in 1ms</div><!----></div></div></div></div><div><div class="result-type--tree py-1 my-1 result-type--it result-type--tree--expanded"><div class="cursor-pointer inline-flex items-start justify-center space-x-0.5"><div class="failed"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></div><span class="run-value result-type__value result-type__value--failed leading-relaxed" ignore-escape="true">Test #5</span></div><!----><!----></div><div><div class="ml-5"><div><div class="result-type--log my-1.5 result-type--expanded p-1" collapsed="false"><div class="result-type__tabs py-0.5 flex items-center justify-start"><label class="inline-flex items-start justify-center space-x-0.5 active"><span class="result-type__chevron"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></span><span class="leading-relaxed">Log</span></label></div><div class="mt-1 p-1"><span class="run-value run-value--html result-type__value"> <style>.board6:after{ content: "\\a All solutions:\\a \\a . . . | . 3 . | . . .\\a . . . | . 2 . | . . .\\a . . . | . 1 . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . 8 | . . . | 7 . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | . 4 . | . . .\\a . . . | . 5 . | . . .\\a . . . | . 6 . | . . ."; animation: anim6 1s infinite; } @keyframes anim6 { 0% {
    • content: "\\a All solutions:\\a \\a . . . | . 3 . | . . .\\a . . . | . 2 . | . . .\\a . . . | . 1 . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . 8 | . . . | 7 . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | . 4 . | . . .\\a . . . | . 5 . | . . .\\a . . . | . 6 . | . . .";
    • } 100% {
    • content: "\\a All solutions:\\a \\a . . . | . 3 . | . . .\\a . . . | . 2 . | . . .\\a . . . | . 1 . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . 8 | . 9 . | 7 . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | . 4 . | . . .\\a . . . | . 5 . | . . .\\a . . . | . 6 . | . . .";
    • } } </style><span class="board6"></span></span></div></div><!----></div><div><div class="result-type--result flex flx-row py-1 failed" collapsed="false"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4"><path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z" clip-rule="evenodd"></path></svg><span class="result-type__value ml-1.5 failed">r2c1=4 is not a valid naked single: expected false to be true</span></div><!----></div><div><!----><!----></div></div></div></div><div><div class="result-type--tree py-1 my-1 result-type--it result-type--tree--expanded"><div class="cursor-pointer inline-flex items-start justify-center space-x-0.5"><div class="failed"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></div><span class="run-value result-type__value result-type__value--failed leading-relaxed" ignore-escape="true">Test #6</span></div><!----><!----></div><div><div class="ml-5"><div><div class="result-type--log my-1.5 result-type--expanded p-1" collapsed="false"><div class="result-type__tabs py-0.5 flex items-center justify-start"><label class="inline-flex items-start justify-center space-x-0.5 active"><span class="result-type__chevron"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></span><span class="leading-relaxed">Log</span></label></div><div class="mt-1 p-1"><span class="run-value run-value--html result-type__value"> <style>.board7:after{ content: "\\a All solutions:\\a \\a . . . | . . . | . . .\\a 1 . . | 2 . . | 3 . .\\a 9 . 4 | . . . | . . .\\a ------+-------+------\\a . 5 . | . . . | . . .\\a . 6 . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . 8 . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . ."; animation: anim7 1s infinite; } @keyframes anim7 { 0% {
    • content: "\\a All solutions:\\a \\a . . . | . . . | . . .\\a 1 . . | 2 . . | 3 . .\\a 9 . 4 | . . . | . . .\\a ------+-------+------\\a . 5 . | . . . | . . .\\a . 6 . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . 8 . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . .";
    • } 100% {
    • content: "\\a All solutions:\\a \\a . . . | . . . | . . .\\a 1 7 . | 2 . . | 3 . .\\a 9 . 4 | . . . | . . .\\a ------+-------+------\\a . 5 . | . . . | . . .\\a . 6 . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . 8 . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . . | . . .";
    • } } </style><span class="board7"></span></span></div></div><!----></div><div><div class="result-type--result flex flx-row py-1 failed" collapsed="false"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4"><path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z" clip-rule="evenodd"></path></svg><span class="result-type__value ml-1.5 failed">r2c1=4 is not a valid naked single: expected false to be true</span></div><!----></div><div><!----><!----></div></div></div></div><div><div class="result-type--tree py-1 my-1 result-type--it result-type--tree--expanded"><div class="cursor-pointer inline-flex items-start justify-center space-x-0.5"><div class="failed"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></div><span class="run-value result-type__value result-type__value--failed leading-relaxed" ignore-escape="true">Test #7</span></div><!----><!----></div><div><div class="ml-5"><div><div class="result-type--log my-1.5 result-type--expanded p-1" collapsed="false"><div class="result-type__tabs py-0.5 flex items-center justify-start"><label class="inline-flex items-start justify-center space-x-0.5 active"><span class="result-type__chevron"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></span><span class="leading-relaxed">Log</span></label></div><div class="mt-1 p-1"><span class="run-value run-value--html result-type__value"> <style>.board8:after{ content: "\\a All solutions:\\a \\a . . . | . . . | . . .\\a 6 . . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a 1 . 7 | . . . | . . .\\a . 2 8 | . . . | . . .\\a 3 . . | . . . | . . .\\a ------+-------+------\\a 4 . . | . . . | . . .\\a 5 . . | . . . | . . .\\a . . . | . . . | . . ."; animation: anim8 1s infinite; } @keyframes anim8 { 0% {
    • content: "\\a All solutions:\\a \\a . . . | . . . | . . .\\a 6 . . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a 1 . 7 | . . . | . . .\\a . 2 8 | . . . | . . .\\a 3 . . | . . . | . . .\\a ------+-------+------\\a 4 . . | . . . | . . .\\a 5 . . | . . . | . . .\\a . . . | . . . | . . .";
    • } 100% {
    • content: "\\a All solutions:\\a \\a . . . | . . . | . . .\\a 6 . . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a 1 . 7 | . . . | . . .\\a 9 2 8 | . . . | . . .\\a 3 . . | . . . | . . .\\a ------+-------+------\\a 4 . . | . . . | . . .\\a 5 . . | . . . | . . .\\a . . . | . . . | . . .";
    • } } </style><span class="board8"></span></span></div></div><!----></div><div><div class="result-type--result flex flx-row py-1 failed" collapsed="false"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4"><path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z" clip-rule="evenodd"></path></svg><span class="result-type__value ml-1.5 failed">r2c1=4 is not a valid naked single: expected false to be true</span></div><!----></div><div><div class="result-type--time" collapsed="false"> Completed in 1ms</div><!----></div></div></div></div><div><div class="result-type--tree py-1 my-1 result-type--it result-type--tree--expanded"><div class="cursor-pointer inline-flex items-start justify-center space-x-0.5"><div class="failed"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></div><span class="run-value result-type__value result-type__value--failed leading-relaxed" ignore-escape="true">Test #8</span></div><!----><!----></div><div><div class="ml-5"><div><div class="result-type--log my-1.5 result-type--expanded p-1" collapsed="false"><div class="result-type__tabs py-0.5 flex items-center justify-start"><label class="inline-flex items-start justify-center space-x-0.5 active"><span class="result-type__chevron"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></span><span class="leading-relaxed">Log</span></label></div><div class="mt-1 p-1"><span class="run-value run-value--html result-type__value"> <style>.board9:after{ content: "\\a All solutions:\\a \\a . . 1 | . . . | . . .\\a . 5 . | . . . | . . .\\a 7 6 9 | . . . | . . .\\a ------+-------+------\\a . . 2 | . . . | . . .\\a . . 8 | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . 4 | . . . | . . ."; animation: anim9 1s infinite; } @keyframes anim9 { 0% {
    • content: "\\a All solutions:\\a \\a . . 1 | . . . | . . .\\a . 5 . | . . . | . . .\\a 7 6 9 | . . . | . . .\\a ------+-------+------\\a . . 2 | . . . | . . .\\a . . 8 | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . 4 | . . . | . . .";
    • } 100% {
    • content: "\\a All solutions:\\a \\a . . 1 | . . . | . . .\\a . 5 3 | . . . | . . .\\a 7 6 9 | . . . | . . .\\a ------+-------+------\\a . . 2 | . . . | . . .\\a . . 8 | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . 4 | . . . | . . .";
    • } } </style><span class="board9"></span></span></div></div><!----></div><div><div class="result-type--result flex flx-row py-1 failed" collapsed="false"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4"><path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z" clip-rule="evenodd"></path></svg><span class="result-type__value ml-1.5 failed">r2c1=4 is not a valid naked single: expected false to be true</span></div><!----></div><div><div class="result-type--time" collapsed="false"> Completed in 1ms</div><!----></div></div></div></div><div><div class="result-type--tree py-1 my-1 result-type--it result-type--tree--expanded"><div class="cursor-pointer inline-flex items-start justify-center space-x-0.5"><div class="failed"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></div><span class="run-value result-type__value result-type__value--failed leading-relaxed" ignore-escape="true">Test #9</span></div><!----><!----></div><div><div class="ml-5"><div><div class="result-type--log my-1.5 result-type--expanded p-1" collapsed="false"><div class="result-type__tabs py-0.5 flex items-center justify-start"><label class="inline-flex items-start justify-center space-x-0.5 active"><span class="result-type__chevron"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4 mt-0.5"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></span><span class="leading-relaxed">Log</span></label></div><div class="mt-1 p-1"><span class="run-value run-value--html result-type__value"> <style>.board10:after{ content: "\\a All solutions:\\a \\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . 2 | . . .\\a ------+-------+------\\a . . . | . . 1 | . . .\\a . 6 7 | 8 4 . | . . .\\a . . . | 9 . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . 3 | . . ."; animation: anim10 1s infinite; } @keyframes anim10 { 0% {
    • content: "\\a All solutions:\\a \\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . 2 | . . .\\a ------+-------+------\\a . . . | . . 1 | . . .\\a . 6 7 | 8 4 . | . . .\\a . . . | 9 . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . 3 | . . .";
    • } 100% {
    • content: "\\a All solutions:\\a \\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . 2 | . . .\\a ------+-------+------\\a . . . | . . 1 | . . .\\a . 6 7 | 8 4 5 | . . .\\a . . . | 9 . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . . . | . . 3 | . . .";
    • } } </style><span class="board10"></span></span></div></div><!----></div><div><div class="result-type--result flex flx-row py-1 failed" collapsed="false"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="w-4 h-4 grow-0 shrink-0 basis-4"><path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z" clip-rule="evenodd"></path></svg><span class="result-type__value ml-1.5 failed">r2c1=4 is not a valid naked single: expected false to be true</span></div><!----></div><div><div class="result-type--time" collapsed="false"> Completed in 1ms</div><!----></div></div></div></div><div><div class="result-type--time" collapsed="false"> Completed in 6ms</div><!----></div></div></div></div><div><div class="result-type--time" collapsed="false"> Completed in 10ms</div><!----></div></div></div></div></div><!----></div>""")
print("""\
  <style>.board1:after{ content: "\\a All solutions:\\a \\a . 1 7 | . . . | . . .\\a . . . | . . 5 | . 6 .\\a 8 3 . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . 4 . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . 9 . | . . . | . . ."; animation: anim1 1s infinite; } @keyframes anim1 { 0% {
      content: "\\a All solutions:\\a \\a . 1 7 | . . . | . . .\\a . . . | . . 5 | . 6 .\\a 8 3 . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . 4 . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . 9 . | . . . | . . .";
    }  100% {
      content: "\\a All solutions:\\a \\a . 1 7 | . . . | . . .\\a . 2 . | . . 5 | . 6 .\\a 8 3 . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . 4 . | . . . | . . .\\a . . . | . . . | . . .\\a ------+-------+------\\a . . . | . . . | . . .\\a . . . | . . . | . . .\\a . 9 . | . . . | . . .";
    }  } </style><span class="board1"></span>
""")
Code
Diff
  • import random
    
    # kata description:
    # https://www.codewars.com/kata/64fdf3cf18692c9b4eebbb83
    
    # enforced rules:
    # - `cmp` may be used `length` times
    # - `swap` may be used at most one times after `cmp` (and also once before first cmp)
    
    # this is :carrot:'s solution used as demo
    # don't comment on the kumite since then this shows up on the front page with solution
    
    def one_quicksort_pass(length, cmp, swap):
        e, i, w = length - 1, 1, 1
        while i <= e:
            c = cmp(i-w, i)
            if c > 0:
                swap(i-w, i)
                i += 1
            elif c < 0:
                if random.randrange(5): # 20% chance to behave wrong, remove condition for correct solution
                    swap(i, e)
                e -= 1
            else:
                w += 1
                i += 1
    
    
    • import random
    • # kata description:
    • # https://www.codewars.com/kata/64fdf3cf18692c9b4eebbb83
    • # enforced rules:
    • # - `cmp` may be used `length` times
    • # - `swap` may be used at most one times after `cmp`
    • #
    • # ... thoughts?
    • # - `swap` may be used at most one times after `cmp` (and also once before first cmp)
    • # this is :carrot:'s solution used as demo
    • # don't comment on the kumite since then this shows up on the front page with solution
    • def one_quicksort_pass(length, cmp, swap):
    • e, i, w = length - 1, 1, 1
    • while i <= e:
    • c = cmp(i-w, i)
    • if c > 0:
    • swap(i-w, i)
    • i += 1
    • elif c < 0:
    • if random.randrange(5): # 20% chance to behave wrong, remove condition for correct solution
    • swap(i, e)
    • e -= 1
    • else:
    • w += 1
    • i += 1
    • i += 1
import random

# enforced rules:
# - `cmp` may be used `length` times
# - `swap` may be used at most one times after `cmp`
#
# ... thoughts?

# this is :carrot:'s solution used as demo
# don't comment on the kumite since then this shows up on the front page with solution

def one_quicksort_pass(length, cmp, swap):
    e, i, w = length - 1, 1, 1
    while i <= e:
        c = cmp(i-w, i)
        if c > 0:
            swap(i-w, i)
            i += 1
        elif c < 0:
            if random.randrange(5): # 20% chance to behave wrong, remove condition for correct solution
                swap(i, e)
            e -= 1
        else:
            w += 1
            i += 1
def add(a, b):
    return 5
...
{-# OPTIONS_GHC -O1 #-}
module LongestPath (longestPath) where
{-
import Data.Vector.Unboxed as Vector (fromList,(!),(!?))
import Data.List (maximumBy,elemIndex)
import Data.Maybe (fromMaybe)
import Data.Monoid ((<>))
import Data.Function (on)
import Data.Ord (Down(Down))

memo :: (Enum a) => (a -> b) -> (a -> b)
memo fn = (map fn [ toEnum 0 .. ] !!) . fromEnum

longestPath :: String -> String
longestPath s = maximumBy order $ ("" :) $ zipWith ( \ i c -> if c == '\n' then "" else getLongestPath i ) [0..] s where
  width = fromMaybe (length s) $ elemIndex '\n' s
  order = (compare `on` length) <> (compare `on` Down)
  v = fromList s
  getLongestPath = memo $ \ i ->
    v ! i : (maximumBy order $ ("" :)
                             $ map getLongestPath
                             $ filter ( \ j -> Just (v ! i) < v !? j )
                             $ [ i-width-2, i-width-1, i-width
                               , i-1                 , i+1
                               , i+width  , i+width+1, i+width+2
                               ]
            )

 -}

import           Control.Monad
import           Data.Function   ((&))
import           Data.Ix         (inRange)
import           Data.List.Split (chunksOf)
import           Data.Maybe
import           Data.Vector     (Vector)
import qualified Data.Vector     as V


minimumOn :: (Ord b) => (a -> b) -> [a] -> a
minimumOn f [] = error "Data.List.Extra.minimumOn: empty list"
minimumOn f (x:xs) = g x (f x) xs
    where
        g v mv [] = v
        g v mv (x:xs) | mx < mv = g x mx xs
                      | otherwise = g v mv xs
            where mx = f x

longestPath :: String -> String
longestPath = solve . lines

maximumCell :: [(Int, [Char])] -> (Int, [Char])
maximumCell = minimumOn (\(n, s) -> (-n, s))

solve :: [[Char]] -> [Char]
solve input = knot & V.toList & V.concat & V.toList & maximumCell & snd
 where
  grid   = V.fromList $ V.fromList <$> input
  height = length input
  width  = length (head input)
  knot   = V.fromList $ do
    row <- [0 .. height - 1]
    pure $ V.fromList $ seqLenAt grid knot row <$> [0 .. width - 1]

around :: [(Int, Int)]
around = (,) <$> [-1 .. 1] <*> [-1 .. 1] & filter (/= (0, 0))

seqLenAt
  :: Vector (Vector Char)
  -> Vector (Vector (Int, [Char]))
  -> Int
  -> Int
  -> (Int, [Char])
seqLenAt grid knot row col = maximumCell candidates
 where
  hereCh     = (grid V.! row) V.! col
  candidates = (1, [hereCh]) : do
    (dx, dy) <- around
    let (ty, tx) = (row + dy, col + dx)
    thereCh <- maybeToList $ (V.!? ty) >=> (V.!? tx) $ grid
    guard $ hereCh < thereCh
    let (n, s) = (knot V.! ty) V.! tx
    pure (n + 1, hereCh : s)