Constantine
ой ну нафиг
Ender
а из памяти у тебя есть только 1 байт для символа с stdin
Constantine
идите отсюда с вашими извращениями
Constantine
еще я информацию в младший бит ip не писал
Ender
ну просто я считаю правильно решивших самостоятельно эту задачу либо способным, либо стремящимися.
Ender
я сам без интернета в 9м классе в неё примерно 4 дня втыкал.
Matwey
Ты в ответе чо хочешь увидеть? Конечный автомат что-ли?
Constantine
а я считаю условия типа "у вас нет лишних О(1) памяти" наркоманскими
Constantine
пушо у вас всегда есть лишний регистр в этом коде
Constantine
намного лучше в качестве упражнения писать код, который должен строки по qword парсить
Constantine
и передавать спасибо господам, придумавших null-terminated string
Ender
Ты в ответе чо хочешь увидеть? Конечный автомат что-ли?
Когда машина Тьюринга застревала на бесконечной дороге, он выходил из неё с конечным автоматом и просил прохожих подтолкнуть её.
Constantine
Ты в ответе чо хочешь увидеть? Конечный автомат что-ли?
конечный автомат, состояние которого записано в ip он хочет увидеть)
Matwey
Ну можно такое изобразить, но зачем?
Constantine
Не знаю)
Alexander "SonnySlave"
Ну можно такое изобразить, но зачем?
Потому что можем, очевидно 😊
Ender
Ну для меня как-то дико выглядят реплики @webreh, но тем не менее, я считаю, что при изучении конкретно языка Си вот это упражнение очень полезно для мозгов, для дальнейшего мышления.
Ender
Хотя решение там простое. while() {if() {while()}}
Constantine
Не вижу никакой пользы от реализации чего-либо через универсальный интерфейс
Alexey
Ender
неплохо. но можно короче.
Alexander "SonnySlave"
неплохо. но можно короче.
но зачем? 😊 И вообще, что тут за олимпиада такая? 😊
Ender
я тоже сперва именно так написал. но в этом и фишка.
Ender
но зачем? 😊 И вообще, что тут за олимпиада такая? 😊
ну просто когда ты можешь писать лаконичные решения, ты как правило привыкаешь писать именно такие.
Alexander "SonnySlave"
ах, прошу прощения
Олександр
А потом //magic happens here
Alexey
На мой взгляд, микрооптимизации не стоят потраченных на них усилий, если это не критическое по производительности место\нет жестких ограничений по памяти
Matwey
char c; while (c = getchar()) { if (c != ' ') putchar(c); else { while (c == ' ') { c = getchar(); } putchar(' '); putchar(c); } }
putchar(c) очевидно можно вынести из под if, он дублируется в последней строчке обоих веток
Олександр
char c; while (c = getchar()) { if (c == ' ') { do { c = getchar(); } while (c == ' '); putchar(' '); } putchar(c); }
Ender
тоже прикольно
Matwey
char c; while (c = getchar()) { if (c == ' ') { do { c = getchar(); } while (c == ' '); putchar(' '); } putchar(c); }
do {} while () можно упаковать в однострочник, сделав уродское условие. Это же C! while( (c = getchar()) == ' ' );
Ender
еее
Ender
а ещё пробел сохраняется
Ender
в c
Ender
какое-то время
Matwey
for(char c; c = getchar(); putchar(c)) { if (c == ' ') while( (c = getchar()) == ' ' ); }
Matwey
Как-то так по-моему надо
Matwey
Но я тут мог наврать уже
Ender
чётко
Ender
но лучше вайл.
Anonymous
ну я в свободное время задачи из книги ритчи делаю
У тебя есть выбор - либо и дальше читать всякую хрень (K&R), либо пойти почитать что-нибудь путьнее. Вот тебе книга - Структура и интерпретация компьютерных программ. 2-е изд. [Добросвет, 2006].
Ender
#include <stdio.h> int main(void) { char c; while ((c=getchar())!='\n') // к примеру. можно int c, и EOF { if (c== ' ') { putchar(c); while ((c=getchar())==' '); } putchar(c); } return 0; }
Ender
правда в этом коде есть одна ошибка. но если поставить EOF, то ошибок, вроде, нет.
Ender
хотя, EOF наверное тоже сожрётся .-.
Alexander "SonnySlave"
да он рофлит)
Berkus
чот хуйный у вас тут уровень
Ioann_
ну просто я считаю правильно решивших самостоятельно эту задачу либо способным, либо стремящимися.
Омг. В общем, согласен с Костей. А Костя - очень способный человек, особенно в алгоритмах и задачах.
Ender
В чём ты с ним согласен?
Anonymous
Я не могу в алгаритмы и задачи, но гарантирую, эта задача никак не определяет уровень способностей или стараний. Можно сравнить ее с задачей "побег от зурга", а потом подумать над тем какими должны быть задачи.
Ender
Почему K&R видели смысл не описывая целиком стандарт дать ряд вот таких практических задач, а затем уже приступать к более сложным вещам? Или они тупые, и это — бессмыслено?
Ender
Я ЩИТАЮ! что если человек не осилил иф и вайл толком и не умеет ими толком пользоваться херовый программист. Это моё личное мнение. И почти все прикладные задачи программирования так или иначе связаны с тем, что нужно что-то сделать при каком-то условии, либо что-то повторять несколько раз. Конкретно эта задача иллюстрирует то, как человек умеет пользоваться этими инструментами в контексте языка Си.
Ender
во времена 4го издания книги (или третьего?) да.
Alexander "SonnySlave"
так, что за бред тут обсуждается?
Ender
ну это еще до уровня программиста, это когда ты в бейсике делаешь хуйню когда балуешься в детстве - изучаешь иф и вайл
ну так, да. тем не менее, если человек учится писать код и имеет какую-то базу, минимальную, например, достаточную, чтобы написать пузырьковую сортировку, то подобные задачи, я считаю, могут быть очень полезны. to become a pro, epta
Berkus
ЦИКЛ, туркиш, ИФ
Zaur
в cmake option(NANOGUI_BUILD_SHARED "Build NanoGUI example application?" ON) message(${NANOGUI_BUILD_SHARED}) не меняется значение on/off после сборки. Чтобы изменения вступили в силу приходится удалять файл кеша. Но тогда весь проект перекомпиливается. Как это исправить? Простите за нубский вопрос, я новичок в мире c++ :)
Vasiliy
а из памяти у тебя есть только 1 байт для символа с stdin
Нужен ещё 1 бит памяти на состояние, иначе некрасиво
Zaur
прочитал шапку, наверно мне сюда @supapro с этим вопросом :)
Berkus
для этого опции и придумали
Alexander "SonnySlave"
https://usingstdcpp.org/2018/03/18/jacksonville18-iso-cpp-report/
Denis
привет народ, играюсь тут с конструкторами перемешения и столкнулся с такой вещью, подскажите как красиво это обойти
Denis
void insert(T&& value) { _node* node = new _node(move(value)); if (!contains(node->data)) { _insert(node); } else { delete node; } }
Denis
сообтсвенно если у нас const T& value то проблем нету по созданию и удалению
Denis
а если T&& то не знаю как избежать создания и затем удаления
Denis
спасибо :)
Александр
void insert(T&& value) { if (!contains(value)) { _insert(new _node(move(value))); } }
Александр
сомневаюсь, что contains имеет разную реализацию для const T& и T&&
Aidar
std::forward еще
Александр
тут не универсальная ссылка
Denis
блин, чувак! ты сделал мой день!
Aidar
вижу T говорю шаблон
Denis
спасибо тебе!
Denis
я перемудрил