Простая с виду задачка с подвохом
От: Lazytech Ниоткуда  
Дата: 21.09.20 12:34
Оценка:
Insane Coloured Triangles | Codewars

К сожалению, ни одно из моих решений не укладывается по времени, потому что все они брутфорсные.

  Мои решения на JavaScript
function triangle(row) {
  const pair2one = {
    RR: 'R',
    BB: 'B',
    GG: 'G',
    RB: 'G',
    BR: 'G',
    RG: 'B',
    GR: 'B',
    BG: 'R',
    GB: 'R'
  }

  let rowArr = row.split('');
  let limit;
  let a;
  let ab;  
  
  for (let i = rowArr.length; i > 1; i--) {
    a = rowArr[0];
    
    for (let j = 1; j < i; j++) {
      ab = pair2one[ a + rowArr[j] ];
      a = rowArr[j];
      rowArr[j - 1] = ab;
    }
  }
  
  return rowArr[0];
}


function triangle(row) {
  const pair2one = {
    RR: 'R',
    BB: 'B',
    GG: 'G',
    RB: 'G',
    BR: 'G',
    RG: 'B',
    GR: 'B',
    BG: 'R',
    GB: 'R'
  }

  let a, ab;  
  
  for (let i = row.length; i > 1; i--) {
    a = row[0];
    
    for (let j = 1; j < i; j++) {
      ab = pair2one[ a + row[j] ];
      a = row[j];
      row = row.slice(0, j - 1) + ab + row.slice(j);
    }
  }
  
  return row[0];
}


function triangle(row) {
  const pair2one = {
    RR: 'R',
    BB: 'B',
    GG: 'G',
    RB: 'G',
    BR: 'G',
    RG: 'B',
    GR: 'B',
    BG: 'R',
    GB: 'R'
  }
  
  const repeater = match => match + match;
  const replacer = match => pair2one[match];

  for (let i = row.length; i > 1; i--) {
    row = ( row[0] + row.slice(1, -1).replace( /./g, repeater ) + row[row.length - 1] )
      .replace( /../g, replacer );    
  }

  return row[0];
}

Смутно подозреваю, что вместо работы со всей строкой можно как-то анализировать по несколько символов из начала и конца строки, но вот как...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.