JSFiddle - React, Tailwind, and code Playground

by squarefoo

JavaScript

(function() {
    
    String.prototype.replaceAt=function(index, character) {
      return this.substr(0, index) + character + this.substr(index+character.length);
   }
    
    var pw = "abdd";
    
    function first() {
        return "a";
    }
    
    function last() {
        return "z"
    }
    
    function next(current) {
        var next = "";
        var N = current.length;
        var a = current;
        
        for (var j = N - 1; j >= 0; j--) {
            a = a.replaceAt(j, nextChar(a[j]));
            if (!(a[j] == first())) {
                next = a;
                break;
            } else {
                if (j == 0) {
                    next = a + first();
                }
            }
        }
        return next;
    }
    
    function nextChar(chr) {
        if (chr == last()) {
            return first();
        }

        return String.fromCharCode(chr.charCodeAt(0) + 1);
    }
    
    function valid(solution) {
        return solution == pw;
    } 
    
    function go() {
        var solution = first(),
            i = 0;
        
        while(solution = next(solution)) {
            //console.log(solution);
            if (valid(solution)) {
                alert(solution);
                return;
            }
            
            i++;
            
            if (i > 50000) {return;}
        }
    }
    
    go();
})()