Честный разбор с решением, которое не стыдно показать на собеседовании, я всё же сделаю :)
Идея 💡
Задача состоит в том, чтобы разделить массив на максимальное количество блоков, так чтобы сортировка каждого блока и их объединение давали отсортированный массив. Ключевая идея заключается в том, что элементы из одного цикла перестановки
arr
1 → arr
2 → arr
3 → ... → arr
n → arr
1
обязательно должны находиться в одном блоке, так как они взаимозависимы.
Описание подхода 🛠️
- Создаём массив
chunk_assignment
, чтобы отслеживать принадлежность каждого индекса к определённому блоку.
- Используем функцию
assign_chunk
для рекурсивного назначения всех индексов, связанных с текущим индексом, в один блок. Она:
- Обновляет максимальный индекс текущего блока.
- Помечает все посещённые индексы текущим номером блока.
- Внешний цикл:
- Перебирает индексы массива.
- Увеличивает счётчик блоков при обнаружении нового блока.
- Завершает обработку текущего блока, когда все его элементы покрыты.
- Возвращаем общее количество блоков
Асимптотика 📊
- Время:
O(n)
, так как каждый элемент обрабатывается один раз.
- Память:
O(n)
, для хранения массива chunk_assignment
.
Исходный код решения 📜
impl Solution {
pub fn max_chunks_to_sorted(arr: Vec<i32>) -> i32 {
let n = arr.len();
let mut chunk_assignment = vec![0; n]; // Tracks which chunk each index belongs to
let mut chunk_count = 0; // Counter for the number of chunks
// Helper function to assign indices to a chunk
let mut assign_chunk = |start_idx: usize, chunk: i32, max_idx: &mut usize| {
let mut current_idx = start_idx;
while chunk_assignment[current_idx] == 0 {
*max_idx = (*max_idx).max(current_idx);
chunk_assignment[current_idx] = chunk;
current_idx = arr[current_idx] as usize;
}
};
let mut start_idx = 0;
while start_idx < n {
chunk_count += 1; // Start a new chunk
let mut max_idx = start_idx;
// Process the current chunk until all related indices are covered
loop {
assign_chunk(start_idx, chunk_count, &mut max_idx);
if start_idx == max_idx {
break; // The current chunk is complete
}
start_idx += 1; // Move to the next index
}
start_idx += 1; // Move to the next unprocessed index
}
chunk_count // Return the total number of chunks
}
}
перейти
Небезынтересно выглядит реализация этого же подхода на Go
– у них весьма своеобразно реализуются итераторы в неожиданном для Go функциональном стиле. В реальной же практике такое редко гошники практикуют, как я понимаю, — гораздо проще байты строки in-place инвертировать.
// CharLockPair represents a character and its corresponding lock state.
type CharLockPair struct {
char, lock rune
}
// Seq defines a functional iterator for yielding elements of type T.
type Seq[T any] func(func(T) bool)
// canBeValid checks if the given string can be a valid parentheses string.
func canBeValid(s, locked string) bool {
if len(s)%2 != 0 {
return false
}
// Forward pass
if !checkBalance(forwardIter(s, locked)) {
return false
}
// Backward pass
if !checkBalance(backwardIter(s, locked)) {
return false
}
return true
}
// checkBalance processes the iterator and determines if the sequence is balanced.
func checkBalance(seq Seq[CharLockPair]) bool {
balance, free := 0, 0
for pair := range seq {
char, lock := pair.char, pair.lock
if lock == '0' {
free++
} else if char == '(' {
balance++
} else {
balance--
}
if balance < 0 {
if free == 0 {
return false // Stop iteration early
}
balance++
free--
}
}
return balance <= free
}
// forwardIter generates an iterator for the forward pass.
func forwardIter(s, locked string) Seq[CharLockPair] {
return func(yield func(CharLockPair) bool) {
for i := 0; i < len(s); i++ {
if !yield(CharLockPair{char: rune(s[i]), lock: rune(locked[i])}) {
return
}
}
}
}
// backwardIter generates an iterator for the backward pass with swapped characters.
func backwardIter(s, locked string) Seq[CharLockPair] {
return func(yield func(CharLockPair) bool) {
for i := len(s) - 1; i >= 0; i-- {
char := rune(s[i])
if char == '(' {
char = ')'
} else {
char = '('
}
if !yield(CharLockPair{char: char, lock: rune(locked[i])}) {
return
}
}
}
}
перейти
Тут про цифры и факты в соседнем треде перетерли, давай еще личный аргумент вкину.
У меня двое детей. Старшая дочь инвалид, с тяжелым неизлечимым наследственным заболеванием, очень сильно коррелирующим с математическими способностями родителей. Наследуемым как-то хитро и непонятно, как именно, например, у меня в роду до этого не было, насколько мне известно. Но доказано, что наследственным. Младший сын обычный мальчик. В обществе, где идеи евгеники общеприняты, были бы возможны такие варианты:
- мне и жене вообще было бы запрещено иметь детей, т.к. математикам не положено
- мне было бы запрещено заводить второго ребёнка, а то вон какой первый
Вариант "евгеника в данном случае никак бы не повлияла, т.к. механизм заболевания не очевиден, а у нас будет правильная евгеника, только с научными доказательствами через peer-reviewed studies" мне кажется неправдоподобным, в обществе так не бывает.
В первом варианте была бы совсем другая жизнь. Конечно, постфактум я никогда бы не согласился перенестись из этой части мультивселенной в ту, потеряв сына. Даже если не знать об альтернативе, там я был бы зверски зол и точно был бы в оппозиции к евгенике. Моя жизнь там, конечно, была бы проще.
Второй вариант строго хуже моей теперешней жизни, я даже затрудняюсь сформулировать, насколько, это просто разные вселенные.
Соответственно, я лично не могу нормально относиться к евгенике, а потому не могу желать ее и для других согласно золотому правилу.
перейти
Chat-GPT довольно шустро помог бизнес-план накатать :)
Бизнес-план: Начало разработки антибозона Хиггса
1. Введение:
Развитие научных исследований в области физики частиц привело к поиску новых направлений в медицинской и биохимической индустрии. Мы предлагаем инвестировать в исследования и разработку антибозона Хиггса для создания инновационного подхода к борьбе с ожирением и другими медицинскими проблемами.
2. Миссия:
Наша миссия - создать безопасный и эффективный препарат на основе антибозона Хиггса для уменьшения массы тела и борьбы с ожирением, предлагая новое решение для миллионов людей по всему миру.
3. Рыночный анализ:
- Рост проблем ожирения: По всему миру наблюдается увеличение случаев ожирения и связанных с ним заболеваний.
- Спрос на инновационные решения: Потребители активно ищут новые и эффективные методы похудения, несвязанные с традиционными диетами и упражнениями.
- Потенциальный рынок: Рынок продуктов для похудения оценивается в миллиарды долларов, и существует высокий спрос на новые продукты и методы.
4. Технический аспект:
- Научные исследования: Исследование антибозона Хиггса и его потенциального воздействия на элементарные частицы организма.
- Лабораторные испытания: Проведение серии лабораторных испытаний для изучения воздействия антибозона Хиггса на клеточный уровень.
- Разработка формулы: Разработка формулы препарата, оптимизированного для достижения максимальных результатов при минимальных побочных эффектах.
5. Маркетинг и продвижение:
- Привлечение внимания СМИ: Активная пресс-кампания для привлечения внимания к нашим научным исследованиям и разработкам.
- Партнерства с институтами: Установление партнерских отношений с академическими и исследовательскими институтами для дальнейшего развития исследований.
- Презентация на конференциях: Участие в научных конференциях и мероприятиях для демонстрации наших результатов и привлечения потенциальных инвесторов и партнеров.
6. Финансовый план:
- Исследования и разработка: Выделение средств на проведение научных исследований, лабораторные испытания и разработку формулы препарата.
- Маркетинг и продвижение: Финансирование маркетинговых кампаний, пресс-релизов и участия в научных мероприятиях.
- Персонал: Найм квалифицированных научных сотрудников и специалистов в области медицины и фармацевтики.
7. Прогноз доходов:
На начальных этапах мы прогнозируем ограниченные доходы от лицензирования наших научных разработок и исследовательских результатов. Однако, при успешном продвижении препарата на рынок, ожидается значительный рост доходов в будущем.
8. Риски и препятствия:
- Научные неопределенности: Необходимость дальнейших исследований и клинических испытаний для подтверждения безопасности и эффективности препарата.
- Регуляторные ограничения: Соблюдение всех необходимых стандартов и требований регулирующих органов в области медицины и фармацевтики.
9. Заключение:
Инвестиция в исследование и разработку антибозона Хиггса представляет собой уникальную возможность для создания инновационного продукта, который может революционизировать индустрию здравоохранения и помочь миллионам людей по всему миру бороться с ожирением и связанными с ним проблемами.
перейти
Полезно заметить, что если использовать для разбиения на компоненты связности подход с Disjoint Set Unions
, — можно получить решение, работающее на практике в 2 раза быстрее за счёт более эффективных аллокаций памяти (нет необходимости поддерживать списки смежности).
struct UnionFind {
parent: Vec<usize>,
size: Vec<usize>,
min_and: Vec<i32>,
}
impl Solution {
pub fn minimum_cost(n: i32, edges: Vec<Vec<i32>>, query: Vec<Vec<i32>>) -> Vec<i32> {
let n = n as usize;
let mut uf = UnionFind::new(n);
// Process edges to construct the Union-Find structure
for edge in &edges {
let (u, v, w) = (edge[0] as usize, edge[1] as usize, edge[2]);
uf.union(u, v, w);
}
// Process queries efficiently
query.into_iter().map(|q| {
let (s, t) = (uf.find(q[0] as usize), uf.find(q[1] as usize));
if s == t { uf.min_and[s] } else { -1 }
}).collect()
}
}
impl UnionFind {
fn new(n: usize) -> Self {
UnionFind {
parent: (0..n).collect(),
size: vec![1; n],
min_and: vec![-1; n],
}
}
fn find(&mut self, x: usize) -> usize {
if self.parent[x] != x {
self.parent[x] = self.find(self.parent[x]); // Path compression
}
self.parent[x]
}
fn union(&mut self, a: usize, b: usize, weight: i32) {
let mut root_a = self.find(a);
let mut root_b = self.find(b);
if root_a != root_b {
// Union by size: attach the smaller tree under the larger tree
if self.size[root_a] < self.size[root_b] {
std::mem::swap(&mut root_a, &mut root_b);
}
self.parent[root_b] = root_a;
self.size[root_a] += self.size[root_b];
self.min_and[root_a] &= self.min_and[root_b];
}
// Update min_and for the new root
self.min_and[root_a] &= weight;
}
}
перейти
1) где купить?
2) если купить пока негде, то где подписаться на криптотокен этой идеи?
перейти
Про Шекли ты уже сказал, надеюсь не имеешь в виду только один его рассказ.
Из менее известных очень рекомендую Грега Игана. Кроме рассказов, у него и романы суперские ("Карантин", "Город перестановок", остальные тоже неплохи, но мне уже меньше понравились).
Можно начать с рассказов "Во тьму" и "Тёмные целые", чтобы оценить оригинальность идей. А потом просто любой брать и наслаждаться.
перейти
Попробуй достать архив журнала "Полдень, XXI век", мне кажется, как раз то, что тебе может быть интересно. Он закрылся в 2013, сейчас под таким же названием выпускаются периодические альманахи, но про них я не могу сказать, ок или нет.
перейти
Интересным выглядит способ, как красиво декомпозировать решение.
Для этого мы выделим итератор по всем кортежам {(x,y) | x+y=z
} в отдельный метод.
use std::collections::HashMap;
use std::cmp::Ordering;
impl Solution {
pub fn len_longest_fib_subseq(arr: Vec<i32>) -> i32 {
let n = arr.len();
let mut dp: HashMap<(i32, i32), i32> = HashMap::new(); // DP table storing lengths of valid subsequences
// Iterate over each element z as a potential end of a Fibonacci-like sequence
for k in 2..n {
let z = arr[k];
// Use an iterator to find all valid pairs (x, y) where x + y = z
for (x, y) in Self::pair_sum_iterator(arr[..k].iter(), z) {
// Apply DP transition: dp[z, y] = dp[y, x] + 1, defaulting to 2 if not found
let cur_len = dp.get(&(y, x)).unwrap_or(&2) + 1;
// Store computed length for (z, y)
dp.insert((z, y), cur_len);
}
}
// Return the longest found subsequence length, or 0 if none exist
*dp.values().max().unwrap_or(&0)
}
/// A helper function that iterates over pairs (x, y) in a sorted array slice,
/// finding pairs where x + y == target_sum using a two-pointer approach.
fn pair_sum_iterator<'a>(mut iter: impl DoubleEndedIterator<Item = &'a i32>, target_sum: i32) -> impl Iterator<Item = (i32, i32)> {
std::iter::from_fn(move || {
let mut front = iter.next();
let mut back = iter.next_back();
while let (Some(&x), Some(&y)) = (front, back) {
match (x + y).cmp(&target_sum) {
Ordering::Equal => return Some((x, y)), // Found a valid pair (x, y)
Ordering::Less => front = iter.next(), // Increase x to increase the sum
Ordering::Greater => back = iter.next_back(), // Decrease y to reduce the sum
}
}
None
})
}
}
перейти
1) Тед Чан
2) Если читаешь по-английски, то рекомендую qntm, особенно вот эти:
- https://qntm.org/responsibilit
- https://qntm.org/mmacevedo (есть переводы на русский, в т.ч. мой)
- https://qntm.org/gorg
перейти
Алармисты любят пугать непредсказуемостью general|super AI. А готовы ли они к такому?

перейти
Ещё один простой вариант решения - собрать все слайсы, отвечающие словам в одну коллекцию и проджойнить стандартными средствами через пробел.
impl Solution {
pub fn add_spaces(s: String, spaces: Vec<i32>) -> String {
// Convert indices to usize
let mut spaces: Vec<usize> = spaces.into_iter().map(|s_pos| s_pos as usize).collect();
// Add the start (0) and end (s.len()) boundaries to spaces
spaces.insert(0, 0);
spaces.push(s.len());
// Create slices from spaces indices
let slices: Vec<&str> = spaces.windows(2)
.map(|window| &s[window[0]..window[1]])
.collect();
// Join the slices with spaces
slices.join(" ")
}
}
В этом коде есть один грустный момент - необходимость создания промежуточного вектора из слайсов исходной строки.
К сожалению, join
из стандартной библиотеки позволяет только такое использование.
Но, если мы не ограничеы стандартной библиотекой, то крейт itertools спешит нам на помощь ;)
перейти
На практических масштабах решение со сложностью O(N²logN)
(сложить все произведения в вектор, который потом отсортировать и посчитать частоты по нему) работает немного (на 20%) быстрее.
Хороший пример, когда константа от хэш-таблицы даёт больший вклад, чем логарифм от сортировки!
impl Solution {
pub fn tuple_same_product(nums: Vec<i32>) -> i32 {
// Build vector of products for all unique pairs.
let mut products: Vec<_> = (1..nums.len())
.flat_map(|j| (0..j).map(|i| nums[i] * nums[j]).collect::<Vec<_>>())
.collect();
// Sort to group identical products.
products.sort_unstable();
// Group products, calculate frequency-based contributions, and sum them.
4 * products.chunk_by(|a, b| a == b)
.filter_map(|group| if group.len() > 1 {Some(group.len() as i32)} else {None})
.map(|freq| freq * (freq - 1))
.sum::<i32>()
}
}
перейти
Можно предоставить также и решение за один проход.
Мне кажется, что оно менее изящно. Но всё-равно имеет право быть упомянутым:
use std::cmp::Ordering;
impl Solution {
pub fn longest_monotonic_subarray(nums: Vec<i32>) -> i32 {
nums.windows(2).fold((1, 1, 1), |(max_chain, inc_chain, dec_chain), w| {
match w[1].cmp(&w[0]) {
// extend decreasing chain; reset increasing chain; update max_chain
Ordering::Less => (max_chain.max(dec_chain + 1), 1, dec_chain + 1),
// reset both chains on equal elements
Ordering::Equal => (max_chain, 1, 1),
// extend increasing chain; reset decreasing chain; update max_chain
Ordering::Greater => (max_chain.max(inc_chain + 1), inc_chain + 1, 1),
}
}).0
}
}
перейти
Не защищая Лысенко, хочу заметить, что нам сейчас известен правильный ответ и история выглядит очевидной. Однако же в первой половине ХХ века теорвер и особенно матстатистика в ноосфере были почему-то очень тесно связаны с евгеникой (и социал-дарвинизмом вообще). Пирсон (тот самый) и Фишер (опять же тот самый) не просто занимались тем и другим, они буквально и то, и другое создали и популяризовали среди интеллектуалов. Причем, по-видимому, значительная часть чисто теоретических работ Пирсона целью имела именно получить инструмент для выяснения вопросов типа "насколько сильно должны отличаться средние IQ двух популяций, чтобы это уже нельзя было объявить случайностью". Ну про корреляции тоже понятно.
перейти
Кстати, используя кучу 3 максимумов, можно упростить код и выкинуть отдельный метод get_triple_length(...)
.
Достаточно просто с каждый найденным сегментом длины k
одновременно в кучу добавлять k-1
и k-2
.
Тогда наименьший элемент в куче после всех операций и будет ответом.
// Function to find the maximum special substring length for a given character.
fn solve_char(data: &[u8], ch: u8) -> i32 {
let mut segments = BinaryHeap::new();
let mut i = 0;
while i < data.len() {
if data[i] == ch {
let mut length = 1;
// Count consecutive characters matching `ch`
while i + length < data.len() && data[i + length] == ch {
length += 1;
}
// Push adjusted lengths into the heap
for k in 0..3 {
if length <= k {break}
if segments.len() >= 3 && Reverse(length - k) >= *segments.peek().unwrap() {break}
segments.push(Reverse(length - k));
}
// Maintain only the top 3 lengths
while segments.len() > 3 {
segments.pop();
}
i += length; // Skip the processed segment
}
i += 1;
}
// Return the third-largest value if we have 3 elements, otherwise -1
if segments.len() == 3 {
match segments.pop().unwrap() {
Reverse(l) => l as i32,
}
} else {
-1
}
}
перейти
Ну и добавлю без объяснений более короткое решение, с использованием продвинутых битовых хаков, которое стоит попробовать осмыслить самостоятельно.
impl Solution {
pub fn minimize_xor(num1: i32, num2: i32) -> i32 {
let n1 = num1.count_ones();
let n2 = num2.count_ones();
let mut result = num1;
for _ in n1..n2 {
result |= result + 1
}
for _ in n2..n1 {
result &= result -1
}
result
}
}
перейти
Кажется что мы разговариваем на сильно разных английских.
По моему опыту:
- slayer вышел из употребления, последние пару раз я видел это слово в названии группы
- triggerman, manslayer вообще ни разу в жизни не встречал
- cutthroat до сегодняшнего дня был уверен что это исключительно прилагательное
- insecurity имхо к ревности имеет крайне опосредованое отношение, оно скорее про низкую самооценку и недостаток признания
- intelligentsia видел только применительно к СССР, в дискуссиях о США это скорее cultural elite/educated class/chattering class
перейти
Т.е. мораль истории, кажется, не в том, что в административно-командной системе управления наукой наверху оказываются некомпетентные жулики, которые творят какую-то дичь. Мораль, скорее, в том, что дичь в науке сложно отличить от не-дичи (и присутствие в дискуссии некомпетентных жуликов с адмресурсом в этом точно не помогает). Поэтому нельзя судить какое-то направление исследований по тому, что его авторы пишут какую-то идеологическую дичь, главное, чтобы у них hard skills были и чтобы они иногда писали и не дичь.
перейти
Fun fact, ставящий под сомнение осмысленность модели: ее не попробовали ни на каких реальных данных. Как мне кажется, вариантов три:
- оно настолько бесполезное что даже на мнисте не завелось
- завелось, но результаты такие что стремно показать
- просто забили - неправдоподобная версия(ну странно же придумать новую архитектуру, описать ее теоретическое обоснование преимуществ и не попробовать ее ну хотя бы на паре первых попавшихся датасетов с kaggle)
перейти
Есть разные лидеры. Лидер-1 вдохновляет личным примером. Лидер-2 принимает решения и имеет авторитет, позволяющий принимать их "легитимно". Лидер второго типа вполне может быть социопатом, почему нет. Хороший руководитель начиная с какого-то размера коллектива это лидер второго типа, а не первого: если генерал лично подымает пехоту в атаку, значит, уже что-то пошло не так. Лидер второго типа может быть социопатом, почему нет.
перейти
Наша жизнь вообще ломает нам социальные привычки: много людей с которыми мы контактируем и немного действительно близких. Наша социальная обезьяна против - вот и приходится устраивать видимость близости ака тимбилдинги. И да, человек с придушенной обезьяной будет лучшим руководителем
перейти
Вот тут чувак попробовал как раз ряды Фурье https://news.ycombinator.com/item?id=40222212
В целом насчет хайпа вокруг KAN даже не знаю, статья выглядит прямым нарушением принципа the bitter lesson: давайте перейдем на что-то не GPU-friendly ради выигрыша в размере модели.
перейти
Как это бъётся с тем, что темп роста населения Земли 1) уже замедлился, и 2) будет только продолжать замедляться? Зачем заниматься отбором, когда и так скоро расти ничего не будет?
перейти
Я освободил свой разум и понял первое решение. По-моему, его не стыдно и на собесе написать (разве что не в таком стиле, а циклом), оно не эзотерическое.
перейти
не короткое, но советую - "Факап" Харитонова, весьма качественный фанфик-полемика со Стругацкими(конкретно миром полудня), Рубидий(аналогично с ПНВС)
перейти
Интересно, в каких компаниях такие ужасы спрашивают. У меня платного leetcode нет, не подскажешь, если у тебя есть, конечно?
перейти
А в Rust нет аналога std::nth_element? Можно было бы от klogk избавиться (не то чтобы это на практике очень важно, конечно)
перейти
"Тройной контакт", Юдковски
"Привключения пилота пиркса", Лем - если вдруг еще нет
перейти
Привычное итеративное решение, конечно, стоит также привести для сравнения
impl Solution {
pub fn longest_nice_subarray(nums: Vec<i32>) -> i32 {
let mut current_bitset = 0;
let mut max_len = 0;
let mut left = 0;
for (right, &val) in nums.iter().enumerate() {
// Shrink the window if nums[right] conflicts with current_bitset
while current_bitset & val != 0 {
current_bitset ^= nums[left];
left += 1;
}
// Expand the window by including nums[right]
current_bitset |= val;
max_len = max_len.max((right - left + 1) as i32);
}
max_len
}
}
перейти
- slayer книжное слово, и, мне кажется, ничем в этом смысле не отличается от "душегуба" и "головореза". В GoT кличку Kingslayer не снабжали сноской и не поясняли
- я не знаю, как перевести "он ревнует свою жену ко всем подряд" с сохранением смысла без использования слов insecurity/insecure. Со словом jealousy/jealous получается совсем другое утверждение, что-то вроде "он (думает, что) не получает от своей жены того, что достается всем подряд, и от этого страдает"
- intelligentsia в мемах пример 1, пример 2. Это я сейчас поиском нашел, но вообще на сабстеке периодически натыкался в живой природе
перейти
Понял, что не понимаю твоей позиции. Делать некоторые скрининги обязательными + настойчивое предложение делать аборт или даже поощрение за него это, кажется, не евгеника (ну или много в каких странах уже давно евгеника) и не супер спорно. Проблема в том, что скрининги довольно мало для чего бывают. Работающий скрининг для РАС это точно задача на миллиарды, первооткрыватель ДНК занимался ей целым институтом и не осилил, например.
Обычно под евгеникой понимается, что "людям с некоторыми особенностями, сильно коррелирующими с больным/плохим потомством, запрещаем иметь детей или настойчиво стимулируем их не иметь". Вот тут мое сильное мнение, что это невозможно делать "чуть-чуть", слишком slippery slope, и в итоге она получится как раз "в стиле нацистов".
перейти
- Я говорю про базовые вещи типа еды, одежды, стиральных машин и прочего с нижней ступени пирамиды (RTX 4090 туда не входит, конечно же). 50 лет назад базовых вещей производилось на порядки меньше, поэтому имело смысл продолжать масштабировать процессы производства (и поэтому люди больше ценили то, что имеют, не меняли гардероб раз в год). Сейчас уже вроде как всего хватает. Мой тезис не меняется - я считаю, что прогресс достиг той точки, когда все нужные технологии для поддержания хорошего уровня жизни на Земле уже изобретены, но распределены ужасно неравномерно (поэтому есть и Швейцария, и Сомали). Ты писал выше про то, что 25 лет назад мобильный телефон был излишеством - я не спорю, так и было, и прогресс это изменил, но я не утверждаю, что 25 лет назад его нужно было останавливать. Я утверждаю, что нужно остановить его сейчас.
- Сейчас, в 21 веке, есть страны, которые совсем не безопасны по уровню даже 20 века. Кажется, тут есть над чем поработать, а про 30 век подумаем через 1000 лет.
- Про гуманитарную катастрофу - если все сейчас резко начнут жить по 1000 лет, то вряд ли Земля это выдержит. Читал где-то про верхние оценки количества людей, которые может прокормить Земля при текущем уровне сельского хозяйства - там было что-то типа 12-13 миллиардов. В целом, оценка более-менее адекватная, если учесть, что сейчас на Земле 8 миллиардов людей, и треть всей производимой еды идёт в помойку. Новоявленные долгожители, вероятно, захотят иметь детей, и тем самым они удвоят количество людей на Земле всего через 30-40 лет (живут же долго, поколения больше не будут сменяться). Придётся запрещать иметь детей, пока не освободится место, выдавать квоты, а то и вовсе стерилизовать наш вид и выращивать детей в пробирках. O brave new world
перейти
Ну это отдельный hot take, да. Давай отступлю за ров и скажу, что с учетом истории матстатистики и евгеники позиция советского научного начальства становится гораздо понятней и выглядит гораздо менее рандомной (не переставая от этого быть неверной).
В рамках отдельного hot take - без цифр нещитово. Я встречал (кажется, у Скотта Александера) цифру 3-5 пунктов IQ за столетие из-за дисгеники. Не перепроверял, но если доверять, то не выглядит как самая большая проблема. Я сильно удивлюсь, если через 200 лет мы не будем в победившей сингулярности и при этом не вымрем.
перейти
Выглядит как хайп ради хайпа. Также как было с микро черными дырами от Большого Андронного Коллайдера.
То, что бактерию никто не сможет съесть вообще не означает, что она будет размножаться свободно. Как минимум конкурентная борьба за ресурсы с более приспособленными к борьбе обычными бактериями её сильно ограничит.
Ну и касательно ресурсов. Такая бактерия, как я понимаю, скорее всего будет хемотрофной, а вот для современных хемотрофов ниши весьма специфичны - ни разу не серая слизь по описанию.
перейти
- Перевод просто ужасен, нет смысла его обсуждать. Это переводил надмозг.
- "Переводчика" знаю лично, он преподавал на Физтехе какую-то чушь под названием "История инноваций". В целом нормальный предмет, но материал был совершенно не заметен из-за непомерного эго рассказчика. Не рекомендую читать то, что он пишет (ну или строго в гомеопатических дозах).
- Бич современного ютуба - растягивать одну простую мысль в видео на 13-15-20 минут. Ужасно бесит, но алгоритм по другому не накрутишь.
перейти
Например, сценарист - Джонатан Нолан (брат режиссера и сценарист фильмов "Мементо", "Престиж", "Темный рыцарь", "Интерстеллар").
Абстрагируясь от поисков глубокого смысла, просто смотреть интересно, а в киношке это главное. Стилистика свежая и необычная (кровь-кишки-постапокалипсис на фоне радостного солнечного дня), куча мелких деталей большого мира. Конечно, нужно сказать спасибо исходной вселенной, но всё это как минимум не потеряли.
перейти
To be fair, даже в такой науке денег на порядок меньше, чем в индустрии. Поэтому идти туда заниматься чем-то пойдёт либо тот, кто совсем в индустрии ничего не может, либо тот, кто действительно хочет что-то делать. Мне кажется, тут есть какой-то баланс - вкинешь больше денег, будет больше плохих статей, а хороших останется столько же. Дашь меньше денег - количество хороших статей уменьшится, но плохие всё равно будут писать.
перейти
Даже в этом решении, если заглянуть глубже split_whitespace
не массив слайсов возвращает, а итератор по ним
sruct.SplitWhitespace. В спецификации его характеристики по дополнительной памяти не уточняются, но вполне возможно реализовать такой итератор на константных костах. И можно обсудить как сделать итератор с такими гарантиями самостоятельно.
перейти
-
Вымирание через деградацию отдельной ветви человечества - вполне себе эволюционный механизм. Может оно так и надо?
-
Мне кажется, исходное предположение, что «выживают почти все» - спорно. Посмотрите на Африку и страны третьего мира.
-
Лишая человечество отклонений от «нормы», мы теряем не только нефункциональных членов общества, но и гениев от искусства, например. Хотим ли мы этого?
перейти
Согласен, аналогичная история.
Мое доказательство основано на тождестве 0-0=0. Допустим, наше решение не оптимально. Рассмотрим первый несовпадающий чанк в нашем решении и в оптимальном. Оба имеют нулевой баланс. В нашем решении он короче, потому что иначе мы сформировали бы его раньше. Тогда чанк в якобы оптимальном решении можно разбить на два -- наш и остаток. Пришли к противоречию.
перейти
Какая-то вторая константа равна 15, да. Это делается, чтобы тесты можно было спокойно апдейтить и потом калибровать, не боясь, что все разойдется.
Но в целом можно считать и дрейф, это не супер тривиально именно по этой причине, но делается; в конце концов, никакой проблемы потестить IQ современной популяции тестами 30летней давности нет, они не настолько плохие
перейти
Ну хз хз, ни перевод, ни личность переводчика, по-моему, не мешают воспринимать основную мысль. А текст затем и нужен, чтобы 20 минут ролик не смотреть.
Не знаю Аммосова лично, только по ЖЖ/телеге. Он, безусловно, производит впечатление несколько мудака, но, с другой стороны, производит и впечатление умного человека. У топ-менеджеров так бывает.
перейти
Ненавижу такие задачи. Алгоритмически она тривиальная, но, конечно же, в условиях таймпрессинга я с какой-то вероятностью забуду про спецслучай нуля. Это ничего не говорит не только о моем умении программировать, но даже о моем умении решать литкод. Да, в жизни тоже бывают спецслучаи, про которые нельзя забывать, и это часть работы. Но не такие!
перейти
Ты прав, так можно!
В Rust - этот метод называется немного по уродски, но есть: select_nth_unstable.
Есть и проще метод - нужно просто 3 итерации BubbleSort'a прогнать и они гарантируют 3 наибольших значения на своих местах.
перейти
Стоит также обратить внимание на чуть более медленное, зато короткое решение через стабильную сортировку
impl Solution {
pub fn pivot_array(mut nums: Vec<i32>, pivot: i32) -> Vec<i32> {
nums.sort_by_key(|&num| num.cmp(&pivot)); nums
}
}
перейти
Достаточно просто показать, что при увеличении числа студентов в классе margin gain
только падает. А это в свою очередь означает, что любая цепочка добавлений студентов в разные классы может быть отранжирована по убыванию margin gain
и корректно применена уже в новом порядке.
перейти
Для максимизации среднего соотношения нужно жадно добавлять студентов
Почему? Это совершенно не очевидное математически утверждение. У нас тут какая-то очень ядреная функция от n переменных, почему жадным методом мы придем в её глобальный минимум, а не в локальный?
перейти
Причем идеальный лидер является лидером-2(для несмещенности принимаемых решений) но всем кажется лидером-1(для лучшей сплоченности команды). То есть, у нас есть тимбилдинги и прочее "мы семья", но оценивать/сокращать/грейдапать мы будем стараться объективно
перейти
В реальном собеседовании поверх такой задачи будет доп.требование "...без выделения доп.памяти", тогда у нее появляется понятный смысл -- проверить умение человека не запутаться в двух индексах и краевых условиях.
перейти
@
finder
Посмотри, пожалуйста, почему обещаемая в документации "быстрая ссылка на википедию" не срабатывает у меня:
[[Алгоритм_Кнута_—Морриса—_Пратта]]
перейти
Нужно срочно писать white paper. И, естественно, все антибозоны должны обладать соответствующим NFT-токеном, чтобы предотвратить незаконное копирование антибозонов.
перейти

перейти
К сожалению вот это начинает сбываться
https://www.youtube.com/watch?v=Z5jToSOy9Og
перейти
А есть ли разница между руководителем и лидером? Должен ли и лидер быть социопатом?
перейти
Пора создать модель на базе думающего меньшинства, чтобы сделать мир чуточку лучше
перейти
Я, видимо, туплю, хеш-таблицы-то зачем? Двух массивов хватило бы?
перейти
disclaimer: автор не я, а какой-то киберсквоттер!
перейти
Хм, здесь появилась жизнь! Сертификат обновил =)
перейти
Roko
перейти
Нужно было начать с чата в Телеграме!
перейти
Тут да. У Роскосмоса долгое время все было очень плохо с топ-менеджментом. Не было технологической стратегии (делали одновременно кучу разносортных программ без всякой синергии друг с другом). Было полное безумие с HR (лет 10 назад лично скриншотил зарплаты на вакансии инженеров и программистов раз в шесть-восемь ниже рынка, просто невозможно выжить, хз вообще кто туда шел и что это за люди). Видимо, и с финансово-контролирующей составляющей тоже был швах, хотя тут снаружи, конечно, сложнее сказать.
Что улучшилось с тех пор и улучшилось ли, сказать сложно, но "Восточный" в итоге заработал и "Ангара" таки полетела. Сейчас сходил на hh.ru проверил, вакансии во всяких там Хруничеве и Энергии ну уже какие-то, не стыдные, хотя, конечно, ещё 2х для качества найма им бы не помешало. Рогозин не производит впечатление титана мысли, но, видимо, он там двигался совсем от нуля. Борисов (новый глава) вообще ВМКшник и завкаф в МИФИ.
Короче, я думаю, всё будет хуже, чем мы могли бы надеяться и лучше, чем мы могли бы бояться.
перейти
С БАК было более очевидно -- емнип был простой контраргумент, состоящий в том, что энергия столкновения все еще меньше энергии некоторых (редких, но время от времени вполне регистрируемых) космических частиц, входящих в атмосферу Земли. Т.е. аналогичные события в природе происходят "сами собой", нет ничего особенного конкретно в БАК.
В случае с бактерией неправильной хиральности есть небессмысленная модель угроз: в биосфере появляется незамкнутая цепочка переработки (бактерия вряд ли сможет замкнуть все циклы в одиночку). Подобное в реальной истории жизни на Земле уже несколько раз происходило, например, carboniferous period. В результате происходит накопление неиспользуемых веществ и вывод их из активного оборота до тех пор, пока не эволюция не произведет кого-то, кто умеет их перерабатывать, что может занять десятки миллионов лет. Для этого не обязательно, чтобы новая бактерия была "суперхищником", достаточно, чтобы она просто быстро не сдохла.
Ну и в целом соотношения risk-reward тут крайне сомнительные.
перейти
в первой половине ХХ века теорвер и особенно матстатистика в ноосфере были почему-то очень тесно связаны с евгеникой (и социал-дарвинизмом вообще).
Как будто что-то плохое. Евгеника - это благо и спасение нашего общества, чего мы(общество), к сожалению, пока не осознали. В тот момент когда мы сломали естественный отбор(выживают почти все, и чем дальше, тем меньший процент популяции попадает под это "почти") - нам волей-неволей придется делать искусственный, просто чтобы не выродиться.
Другой вопрос что евгеника должна проводиться гуманными методами, типа пропаганды скринингов при беременности и абортов в случае проблем, пропаганды скрининга партнеров перед браком/началом отношений/решением завести ребенка, бесплатных скринингов за гос. счет опять же, поддержки тех семей где генетическая совместимость высокая, штрафов для противоположного к первым пунктам.
Возможной без-евгенической альтернативой будет разве что геномное редактирование - там вопросы наследования всякой гадости отпадут сами собой
перейти
Кто здесь? :)
перейти
Опять я провалил АА, что ж такое-то.
Если серьезно, то это пример, когда литкод-стайл измеряет не просто не то же самое, что нужно потом на работе, а прямо противоположную вещь. Сама задача очень простая, но, оказывается, можно ошибиться вот так. При этом в работе думать о том, что фраза "Даны шарики с уникальными метками от 0 до limit (всего limit + 1 шариков)" может означать, что их может оказаться миллиард, натурально вредно. Речь не о том, что не нужно оптимизировать заранее (иначе пол-литкода можно было бы стереть), но ограничения на количества объектов и операций обычно читаются из физического смысла происходящего. Запросов или, там, транзакций может быть миллиард, пользователей уже вряд ли, если вы не Мета, а шариков будут десятки, может, сотни. Особенно если они перенумерованные (а не снабженные, скажем, guid-ами).
перейти
Перевод правда ужасен, но смысл из него вполне выхватывается: вместо науки ученые стали заниматься дрочем на метрики и гранты, при этом на науку(as in выработка и систематизация знаний) - всем пофиг. И Сабина одна из тех кто не вписался или не захотел вписываться в эту систему.
Проблема в целом не нова - даже чуть-чуть коснувшись академии в студенчестве я был свидетелем того же самого. "Ну и что что у вас пока что нет адекватных провалидированных результатов - нарисуйте что есть, и так сойдет. У нас студенческая конференция, давайте быстрее".
И путей решения не видно - кроме полной коммерциализации, но тогда загнется вся фундаментальная наука ибо мало кто сможет позволить себе сделать CERN
перейти
Сорри, зря быканул. Но тем не менее автор швейцарец и притом специалист по очень идеологически заряженным дисциплинам. Ну нельзя настолько biased источнику доверять при первичном знакомстве с вопросом, даже несмотря на всю его авторитетность. Он тебе при желании докажет, что коровы летают но низенько-низенько, как выяснится в сноске мелким шрифтом на 168 странице, нарратив страшная штука.
Были ли страны Африки когда-либо равноправными экономическими партнерами для Швейцарии? Нет, не были. Насколько сильно это помогло Швейцарии так классно жить, а странам Африки, соответственно, помешало? Я не знаю ответ в цифрах, но точно искал бы его не в статьях швейцарцев.
перейти
Считать IQ тут немного нечестно - IQ тесты же имеют шкалу оценивания подгоняемую под целевое распредленение, так что средний IQ по корректному тесту - 100, дисперсия - тоже какая-то константа.
С динамикой распространенности тоже сложно - я не могу(да и никто не может, кажется) принести таких данных которые нельзя было бы обосновать тем что начали лучше диагностировать.
Точно правда что люди с генами коррелирующими с образованием меньше размножаются(p-value ~10^-100 это сильно!): https://www.pnas.org/doi/full/10.1073/pnas.1612113114 . Можно ли это назвать ухудшением генома человечества? Ну, имхо, да, но объективно доказать это сложно
перейти
А, и правда. Я не пишу на Rust и не знал, что там split возвращает итератор.
Но я больше не про память, а про то, что в текущей постановке задача почти что fizzbuzz: проверяет, что кандидат знает синтаксис языка и то, как в нем обращаются со строками в стандартной библиотеке. "Дальше можно обсудить" это понятно, но если в процессе такого обсуждения код не писать, то проверка, что человек не путается в индексах и знает, что делать со строчками, заканчивающимися на пробел, не состоится. Имхо лучше, если задача сразу так поставлена, чтобы она возникала естественным образом.
перейти
Это же обычный парадокс человеческого восприятия.
Замечу, что как бы не увеличивались вливания в спорт - число олимпийскийх чемпионов не увеличивается. Вместо этого устанавливаются новые рекорды и увеличивается число людей способных достигать определенные физические рамки (быстрее, выше, сильнее).
Также и с наукой - число топ статей не вырастет, но уровень этих топ-статей станет выше и увеличится число человек, способных провести качественнй научный эксперимент, провести полезное исследование с минимальным числом ошибок.
перейти
А, я понял.
То есть речь о рисках небыстрого, но полного занятия какой-то биоподобной ниши.
С таким я согласен, возможно.
Но всё же, я также и почти уверен, что заниматься эта ниша будет даже не годами, а тысячелетиями или десятками тысяч лет. Это совсем копейки с точки зрения геологической летописи, но совсем иной уровень угроз, с точки зрения человеческой цивилизации (мы тупо парниковыми газами успеем раньше всё загадить).
перейти
Мне на самом деле практика именно задач через LeetCode не очень нравится тем, что тесты уже даются системой.
Интересная часть, в которой кандидат сам придумывает крайние случаи для своего кода исключаются.
Я понимаю, с другой стороны, что это идёт в угоду сокрашения времени. Меж тем это всё-равно самая важная часть отладки на мой взгляд, позволяющая отсечь тех кто программирует сам, от использующих ChatGPT.
перейти
Вопрос ведь не в количестве а в "качестве". Условно, начали выживать люди с дикой недоношенностью -> перестали отбраковываться неудачные гены, провоцирующие ее -> в популяции стало больше неудачных генов, провоцирующих недоношенность. Понятно что недоношенность - не чисто генетическое явление, но также понятно что генетический компонент есть и из-за отсутствия отбора он будет увеличивать свое влияние
перейти
2.Я про развитый мир, но в целом и в африке сейчас выживаемость выше чем скажем 100 лет назад
3. Так не надо же всех отклоняющихся скопом. Надо смотреть куда ведет это отклонение(если известно что этот ген кореллирует с низким IQ, инвалидностью или типа того - может и не нужен нам такой ген в популяции?)
Ну а с 1 сложно - потому что у эволюции нет цели, тут сложно сказать "правильно/неправильно"
перейти
Мне вот наоборот кажется, что перестает сбываться. Умели в космос массово летать две страны, сейчас несколько. Помимо телеком-спутников и спутников наблюдения наконец начали ещё вот к такому применению прицениваться https://en.wikipedia.org/wiki/Space-based_solar_power. Ну и reusable rockets это большое дело, как ни крути.
Хотя, конечно, смотря как понимать "мы".
перейти
По идее, можно потребовать не просто peer review, но peer reproduce. То есть если я написал статью, то ревьюер обязан ее воспроизвести не имея ничего кроме текста моей статьи. Не получилось - работа пошла в мусорку. Многие примеры p-хакинга тут сломаются, фальсификация данных(#pruitt_data помните? Как-нибудь напишу про него пост наверное) тем более.
перейти
если закрыть полностью всю гос. науку и оставить RnD отделы предприятий где смотрят не на статьи, а на результат - может и неплохо получиться для прикладной науки(химии там всякой типа фармы, физики в технических разделах - типа полупроводников, оптики, etc). Правда фундаментальная на этом закончится, потому что ее обосновать непонятно как
перейти
Меня в целом заинтересовало больше утверждение о более интерпретируемых для человека нейросетевых моделях. Понятно, что пока адекватного тулинга в этой области нет, но перспектива его появления прям обнадёживает.
Вполне могу поверить в адекватность мнения о том, что трейдофф между скоростью и интерпретируемостью полезен для сообщества.
перейти
Как будто бы, ты слишком строк к себе!
Не понять интервьюера не является грехом. Важно же, просто уметь быстро перестраивать своё решение, если что-то было изначально понято неправильно. И как раз обладание таким скилом, на мой взгляд, является гипер-полезным в рабочем процессе. И отлично, если ты его сумел показать на собеседовании!
перейти
Да, вы правы, я просмотрел статью, не нашел упоминаний, и решил что не тестировали. К этому комменту тоже много вопросов, конечно, например то что равное число нейронов взято, а не равное число параметров - тут kan может побеждать тупо за счет того что кан плотнее в количество точек раз, но это уже что-то
перейти
В первом решении - самое сложно на мой взгляд - доказать корректность.
Не то, чтобы это было почти невозможно, возможно и за разумное время.
Но на доказательство, почему он работает (и в том числе безуспешные попытки найти контрпример) у меня ушло больше времени, чем на написание/понимание кода.
перейти
Скорее было бы "делайте скрининг во время беременности", а потом варианты от "делайте аборт"(приказ) до "может лучше сделать аборт?"(совет + мб поощрение)
Запрещать иметь детей - это уже евгеника в стиле нацистов, такое никому не нужно
перейти
В ограничениях задачи - шариков может быть до миллиарда: никто не гарантирует, что все бесцветные шарики в памяти уложатся.
В подходе с хэш-таблицей мы только цветные шарики храним в памяти, а их не больше, чем число операций.
перейти
Не, я про роскосмос, там все грустненько. К SpaceX вопросов вообще нет - красавчики, ползут к цели и громко бахают по дороге. Остальные не так заметны, но тоже что-то есть
перейти
Я и не говорил, что распространять нужно ресурсы (хотя и их тоже). Я говорил, что распространять нужно в первую очередь прогрессивные практики (а ещё гуманизм, например)
перейти