Find maximum possible time HH:MM by permuting four given digits

前端 未结 23 2066
执念已碎
执念已碎 2020-11-30 02:44

I recently took a coding test for a promotion at work. This was one of the tasks I really struggled with and was wondering what is the best way to do this. I used a load of

23条回答
  •  抹茶落季
    2020-11-30 02:48

    Added executable snippet and some test cases

    function generate(A, B, C, D) {
      var combinations = []
      arguments = Array.from(arguments)
      for (var i = 0; i < 4; i++) {
        for (var j = 0; j < 4; j++) {
          if (i !== j) {
            var num = +(arguments[i] + '' + arguments[j])
            if (num <= 59 && combinations.indexOf(num) === -1)
              combinations.push(num)
          }
        }
      }
      combinations.sort((a, b) => a - b);
      var hours = combinations.filter(hour => hour <= 23);
    
      for (var i = hours.length - 1; i >= 0; i--) {
        for (var j = combinations.length - 1; j >= 0; j--) {
          if (computeMax(hours[i], combinations[j], arguments))
            return hours[i] + ':' + combinations[j]
        }
      }
      return 'not possible'
    }
    
    function computeMax(maxHour, maxMinute, args) {
      var minute = String(maxMinute)
      var hour = String(maxHour)
      for (var k = 0; k < minute.length; k++)
        if (hour.indexOf(minute[k]) > -1 && args.indexOf(+minute[k]) === args.lastIndexOf(+minute[k]))
          return false
      return true
    }
    console.log('generate(1,7,2,7)', generate(1,7,2,7))
    console.log('generate(6,5,2,0)', generate(6,5,2,0))
    console.log('generate(3,9,5,0)', generate(3,9,5,0))
    console.log('generate(7,6,3,8)', generate(7,6,3,8))
    console.log('generate(0,1,2,3)', generate(0,1,2,3))
    console.log('generate(1,1,1,2)', generate(1,1,1,2))
    console.log('generate(1,1,1,1)', generate(1,1,1,1))
    console.log('generate(5,6,7,8)', generate(5,6,7,8))
    console.log('generate(2,9,3,1)', generate(2,9,3,1))

提交回复
热议问题