Prob A

by ipark

HTML

<h2>
Prob A. 
</h2>
<ul> 입력
  <li> ABABAC </li>
  <li> DONTFORGETTHATYOUARESPECIAL </li>
</ul>
<ul> 생성 결과
  <li> Expected: <span id="extected1">CBBAAA</span>, Actual: <span id="actual1"></span> </li>
  <li> Expected: <span id="extected1">CDFGHILNPSUYRRAAAEEEOOOTTTT</span>, Actual: <span id="actual2"></span> </li>
</ul>
<ul> 결과
  <li> Case1: <span id="result1"></span> </li>
  <li> Case2: <span id="result2"></span> </li>
</ul>

JavaScript

//-------------------------------------------------
// Utility Fn
//
function hit(dict, key) {
  return !!dict[key];
}

function splat(dict, key) {
  dict[key] = (hit(dict, key)) ? dict[key] + 1 : 1;
}

function times(char, n) {
  return Array(n + 1).join(char);
}
//-------------------------------------------------
// Business Logic
//
function process(dict, data) {
  var result = [];

  for (var i = 0, len = data.length; i < len; i++) {
    splat(dict, data[i]);
  }

  for (var key in dict) {
    if (dict.hasOwnProperty(key)) {
      var str = times(key, dict[key]);
      result.push(str);
    }
  }

  return result.sort(comparer).join('');
}

// less than    0 -> a, b
// equals       0 -> unchanged
// greater than 0 -> b, a
function comparer(l, r) {
  if (l.length !== r.length) {
    return l.length > r.length;
  }

  return (l > r) ? 1 : -1;
}
//-------------------------------------------------
// Main Fn
//
var inputs = ['ABABAC', 'DONTFORGETTHATYOUARESPECIAL'];
var expected = ['CBBAAA', 'CDFGHILNPSUYRRAAAEEEOOOTTTT'];

(function init(inputs) {
  var result = [];

  for (var i = 0, len = inputs.length; i < len; i++) {
    result.push(process({}, inputs[i]));

    $('#actual' + (i + 1)).text(result[i]);
    $('#result' + (i + 1)).text(expected[i] === result[i]);
  }
})(inputs);