Комментарии 38
Вопрос 1
Пропущенное_число = (1 + 50) / 2 * 50 — Сумма_чисел_в_таблице
Вопрос 2
function meet() {
moveLeft();
while (!didWeMeet() && !onTopOfParachute()) {
moveLeft();
noOperation();
}
while (!didWeMeet()) {
moveLeft();
}
say('Hurrah!')
}
а так не проще?
#1
Сумма_чисел_от_1_до_50 — Сумма_чисел_в_таблице
1 вопрос — Гаусс, Карл! (С). Который решал ее в детстве безо всяких экселей.
1 задача
f = (=<<) (\s -> head s : show (length s)) . group
3 задача
h = map snd . sort . map (\s -> (sort s, s))
ЗЫ детство Карла какое-то. Прошлая серия и то была интереснее.
1 вопр. В екселе это номер строки, начиная с которой номер строки не равен числу.
Это только если числа отсортированы, находятся в одной колонке и записаны начиная с первой строки. В задаче же, как минимум, явно указано, что числа неупорядочены.
Разьве в екселе нет сортировки?
Попробуйте отсортировать числа, находящиеся в разных колонках на разных страницах.
Но ведь при вычислении через разность сумм их ведь тоже не ручками предлагается переносить?
Для суммирования можно просто выделять диапазоны ячеек, в том числе и на разных страницах.
Почему в одном случае можно, а в другом нельзя?
Попробуйте сами. Выделите в Excel несколько колонок на разных страницах и попробуйте их отсортировать для сравнения с номерами строк.
Почему в моём случае это сложно, а в вашем — посто?
Вы не спрашивайте, вы откройте Excel и попробуйте. Запишите в колонку A все нечётные от 1 до 49, в колонку B — все чётные от 2 до 50. А теперь отсортируйте эти значения так, чтобы они были в строках с соответствующими номерами.
Ещё раз. Почему в поём случае это проблема, а в вашем — нет? Вы как будете вычислят пропущенное число? Макрос напишете или на калькуляторе? Эти числа ведь не сами найдутся и впрыгнут в калькулятр. В любом случае вам точно так же придётся эти числа найти, выделить, скопировать, куда-то вставить. Подозреваю, что у меня-то как раз ручных действий требуется меньше.
Ставите курсор в свободную ячейку. Набираете '=(1+50)/2*50-СУММ('. Зажав Ctrl, мышкой выбираете все нужные ячейки и/или диапазоны ячеек. Набираете ')'. Нажимаете Enter. Всё, пропущенное число найдено. Ничего копировать, вставлять и т.п. не надо.
То есть все те же действия ручками совершить надо.
Ну ладно, что-то трёп затянулся. Я же не опровергаю вычислительное решение.
Ну и на закуску. "… одно число — пропущено. Необходимо найти это число.". Найти, а не вычислить! Но как можно найти то, чего нет? Оно же пропущено!
Вот. Вы как хотите, а я на этом закончил.
Ну ладно, что-то трёп затянулся. Я же не опровергаю вычислительное решение.
Ну и на закуску. "… одно число — пропущено. Необходимо найти это число.". Найти, а не вычислить! Но как можно найти то, чего нет? Оно же пропущено!
Вот. Вы как хотите, а я на этом закончил.
На мой взгляд не совсем корректно поставлена задача. Непонятно зачем приплели Excel. В Excel можно решить эту задачу большим количеством способов, вплоть до того что можно написать макрос. Я бы переформулировал бы задачу так. Дан массив размерностью 49, в котором находятся в неупорядоченном виде числа от 1 до 50, за исключением одного. Как за один проход найти пропущенное число? Ограничение по памяти О(1). И тогда решение от Rsa97 станет очевидным и самым простым.
Мой вариант #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 шагов, в то время, как второй робот будет двигаться мимо него вправо.
Моё решение для вопроса 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}`, '')
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Выпуск#19: ITренировка — актуальные вопросы и задачи от ведущих компаний