Pull to refresh

Comments 38

Вопрос 1
Пропущенное_число = (1 + 50) / 2 * 50 — Сумма_чисел_в_таблице

Вопрос 2
function meet() {
  moveLeft();
  while (!didWeMeet() && !onTopOfParachute()) {
    moveLeft();
    noOperation();
  }
  while (!didWeMeet()) {
    moveLeft();
  }
  say('Hurrah!')
}
И встретятся они через 4*s единиц времени, где s — расстояние между парашютистами сразу после приземления.
Оба будут двигаться влево бесконечно.
Хотя, если парашюты остаются на месте приземления (а они остаются по условию задачи), то — все ок.
а так не проще?
#1
Сумма_чисел_от_1_до_50 — Сумма_чисел_в_таблице
ну так выше же и дана формула суммы ряда.

1 вопрос — Гаусс, Карл! (С). Который решал ее в детстве безо всяких экселей.


1 задача
f = (=<<) (\s -> head s : show (length s)) . group

3 задача
h = map snd . sort . map (\s -> (sort s, s))

ЗЫ детство Карла какое-то. Прошлая серия и то была интереснее.

Это только если числа отсортированы, находятся в одной колонке и записаны начиная с первой строки. В задаче же, как минимум, явно указано, что числа неупорядочены.
Разьве в екселе нет сортировки?
Попробуйте отсортировать числа, находящиеся в разных колонках на разных страницах.
Но ведь при вычислении через разность сумм их ведь тоже не ручками предлагается переносить?
Для суммирования можно просто выделять диапазоны ячеек, в том числе и на разных страницах.
Почему в одном случае можно, а в другом нельзя?
Попробуйте сами. Выделите в Excel несколько колонок на разных страницах и попробуйте их отсортировать для сравнения с номерами строк.
Почему в моём случае это сложно, а в вашем — посто?
Вы не спрашивайте, вы откройте Excel и попробуйте. Запишите в колонку A все нечётные от 1 до 49, в колонку B — все чётные от 2 до 50. А теперь отсортируйте эти значения так, чтобы они были в строках с соответствующими номерами.
Ещё раз. Почему в поём случае это проблема, а в вашем — нет? Вы как будете вычислят пропущенное число? Макрос напишете или на калькуляторе? Эти числа ведь не сами найдутся и впрыгнут в калькулятр. В любом случае вам точно так же придётся эти числа найти, выделить, скопировать, куда-то вставить. Подозреваю, что у меня-то как раз ручных действий требуется меньше.
Ставите курсор в свободную ячейку. Набираете '=(1+50)/2*50-СУММ('. Зажав Ctrl, мышкой выбираете все нужные ячейки и/или диапазоны ячеек. Набираете ')'. Нажимаете Enter. Всё, пропущенное число найдено. Ничего копировать, вставлять и т.п. не надо.
То есть все те же действия ручками совершить надо.

Ну ладно, что-то трёп затянулся. Я же не опровергаю вычислительное решение.

Ну и на закуску. "… одно число — пропущено. Необходимо найти это число.". Найти, а не вычислить! Но как можно найти то, чего нет? Оно же пропущено!

Вот. Вы как хотите, а я на этом закончил.
На мой взгляд не совсем корректно поставлена задача. Непонятно зачем приплели Excel. В Excel можно решить эту задачу большим количеством способов, вплоть до того что можно написать макрос. Я бы переформулировал бы задачу так. Дан массив размерностью 49, в котором находятся в неупорядоченном виде числа от 1 до 50, за исключением одного. Как за один проход найти пропущенное число? Ограничение по памяти О(1). И тогда решение от Rsa97 станет очевидным и самым простым.
Или даже так: вообще не использовать дополнительно память))
Я думаю, что Rsa97 имеет в виду, что-то вроде
SUM(Sheet1!A1:C10,Sheet2!A1:C10)
А Sheet1!A1:C10 и Sheet2!A1:C10 точно в одной таблице находятся?
По условию задачи — в одной.
Я читал условия задачи.
В екселе разные листы — это точно одна и та же таблица?
Мой вариант #2
steps = 1;
do {
for (i=0;i < steps; i++) { moveLeft(); }
if (onTopOfParachute()) { noOperation(); }
else {
for (i=0;i < steps; i++) { moveRight();}
steps++;
}
} while(!didWeMeet())

Встретятся через s2 единиц времени, где s — расстояние между парашютистами сразу после приземления.
Поправка. Роботы не встретятся. После того, как один из роботов дойдёт до чужого парашюта, он пойдёт влево на s шагов, в то время, как второй робот будет двигаться мимо него вправо.
А если одним роботом стоять на месте, а вторым шагать влево-вправо, каждый раз добавляя по +1 шагу (расшатывать) до тех пор пока они не встретятся.
Роботы должны выполнять одну и ту же программу. Кто из них слева, а кто справа — самим роботам неизвестно.
Так нельзя, потому что у них должна выполняться идентичная программа. Невозможно определить, кто первый, а кто второй.
Моё решение для вопроса 2
bool checkParachute = false;
do {
    moveLeft();
    if (checkParachute)
	moveLeft();
    else
	noOperation();
    if (onTopOfParachute())
	checkParachute = true;		
} while (!didWeMeet());

Такой вариант задачи:
Задача 1
public static string ConvertIntoSeriesLengths(string str)
        {
            if (str == string.Empty)
                return "Empty string passed";

            int len = 1;
            char symb = str.ToCharArray()[0];
            string res = String.Empty;

            for (int i = 1; i < str.ToCharArray().Length; i++)
            {
                if (str.ToCharArray()[i] == symb)
                {
                    len++;
                }
                else
                {
                    res += symb.ToString() + len.ToString();
                    len = 1;
                    symb = str.ToCharArray()[i];
                }
            }
            
            return res += symb.ToString() + len.ToString();
        }


Задача 1
public static string ConvertIntoSeriesLengths(string str) {
  var chars = str.ToCharArray();
  if  (0 == chars.Length) {
    return String.Empty;
  }
  int len, pos = 0;
  char ch;
  string res = String.Empty;
  while (pos < chars.Length) {
    len = 1;
    ch = chars[pos++];
    while (pos < chars.Length && ch == chars[pos]) {
      pos++;
      len++;
    }
    res += ch.toString() + len.toString();
  }
  return res;
}

Задача 1
'wwwwaaadexxxxxx'
  .split('')
  .reduce((acc, char) => {
    const last = acc[acc.length - 1]
    if (last && last.char === char) {
      last.count += 1
    } else {
      acc.push({ char, count: 1 })
    }
    return acc
  }, [])
  .reduce((acc, { char, count }) => `${acc}${char}${count}`, '')

Sign up to leave a comment.