«Проведя достаточно собеседований, я понял, что при написании кода неопытные люди спотыкаются вовсе не на сложных и неочевидных задачах, и даже не на мелких задачах (например, реализовать связный список). Больше всего проблем у них вызывают совершенно тривиальные задачи.
Я решил разработать набор вопросов, которые позволили бы мне быстро идентифицировать таких «недопрограммистов». Вопросам такого рода я дал название «FizzBuzz questions», в честь игры, в которую играют британские школьники. Типичный FizzBuzz question выглядит следующим образом:
Напишите программу, которая выводит на экран числа от 1 до 100. При этом вместо чисел, кратных трем, программа должна выводить слово «Fizz», а вместо чисел, кратных пяти — слово «Buzz». Если число кратно и 3, и 5, то программа должна выводить слово «FizzBuzz»
Нормальный программист должен написать такую программу на бумажке за пару минут. Но вот что интересно: многие люди с профильным образованием вообще не могут справится с этой задачей. Были даже случаи, когда кандидаты, подававшие резюме на вакансию «Senior developer» тратили на эту программу больше 15 минут.»
>>781585 Я тоже долго думал, но у меня все равно получилось какое-то ifthenelse говно. (1..101) .map(|x| { if x % 15 == 0 { println!("fizzbuzz"); } else if x % 5 == 0 { println!("buzz"); } else if x % 3 == 0 { println!("fizz"); } else { println!("{}", x); } }) .count();
Сама задача мне не нравится тем, что тут надо знать свойство чисел. Не помню как оно называется. А это собсно матан, а не программирование
>>781613 Простые школьные задачки не имеют никакого отношения к математике. Типичный программист за всю свою карьеру пишет сбалансированное дерево, разворачивает связанный список или хуиту из шапки ровно 0 раз.
>>781629 Мне всегда казалось, что фишка физзбазза - показать девелоперу, что писать просто - это нормально и можно писать три сравнения, а не выделять абстрактные хуиты с фабриками на каждое маленькое требование.
Нанимая джанго-макаку, мне совершенно поебать, сможет ли он реализовать fizzbuzz.
Но мне не поебать, знает ли он что такое синглтон, декоратор, дескриптор, контекст-менеджер, mvc, миксин и как он валидирует входные данные. Про то и базарю.
>>781524 (OP) for (short x = 1; 100 >= x; ++x) { switch (char t = x % 15) { case 0: case 3: case 6: case 9: case 12: std::cout << "Fizz"; if (t) break; case 5: case 10: std::cout << "Buzz"; break; default: std::cout << x; } std::cout << '\n'; }
>>781693 >Физбазы - это проверка базовых умений программирования, полностью невостребованных в современном программировании. Может человек не знает про циклы и ифы. Именно это и проверяет физзбазз
>>781673 >% Очень дорогая операция. Делается у тебя 100 раз.
>>781697 Человек знает про циклы и ифы. Но он не умеет применять их к таким задачам. К задачам "перебрать всех пользователей по id, найти тех у кого рост выше двух метров" он умеет.
>>781703 Без разрастания кода лучше не сделать. Понятно, что можно захуярить машину Даффа или вообще на шаблонах нагенерировать сразу итоговую строку, но таки байтоебство актуально обычно в микрухе, а там память дороже тактов.
>>781710 Хотя бы не проверять деление следующих двух чисел после делящегося без остатка на 3 на делимость без остатка на 3 - можно было догадаться? Это всего один счетчик, два инкремента и два целочисленных сравнения - против очень дорогой операции %.
>>781714 Предпочитаешь чтобы тебя попросили назвать не менее пяти видов локов, применяемых в Java и имеющихся в ней - с их преимуществами и недостатками?
>>781703 >Человек знает про циклы и ифы. Но он не умеет применять их к таким задачам. К задачам "перебрать всех пользователей по id, найти тех у кого рост выше двух метров" он умеет. Только вот зачем нужен в 2016 г. специалист, решающий такую типовую задачу перебором вместо лямбда-функции? Или, если язык не позволяет, то зачем нужен такой язык?
>>781734 >Только вот зачем нужен в 2016 г. специалист, решающий такую типовую задачу перебором вместо лямбда-функции? Для того чтобы решать типовые задачи, клепать формы, отчеты, бизнес-логику.
>>781746 Ну то есть не всё решается, а конкретно поиск в массивах, фильтрация, select'ы и т. д. Скоро школокодеры и быдлокодеры забудут, что такое индексы и цикл for.
>>781748 >со скоростью не менее O(n) n может быть равен стоимости операции деления по модулю, а может быть - стоимости операции инкремента и сравнения. Это два очень разных n.
>>781747 >Скоро школокодеры и быдлокодеры забудут, что такое индексы и цикл for. Тогда тем более неясно, зачем заставлять их писать Fizz Buzz. Или какой-нибудь двусвязный список.
>>781524 (OP) >Я решил разработать набор вопросов, которые позволили бы мне быстро идентифицировать таких «недопрограммистов» Охуеть. Только вот реально на интервью вопросы "назовите минимум 20 фреймворков в которых вы про" и "кем вы видите себя через 5 лет в нашей компании" Всем срать, насколько ты умеешь кодить и можешь в алгоритмы. Надрессирован на нужные фремворки? Проходишь. Не надрессирован? Вы нам не подходите.
> Согласитесь, всё это совершенно базовые вещи, и если человек затрудняется с ответом на подобные вопросы, значит у него попросту нет опыта программирования.
Да потому что сука сегодняшнему програмисту надо столько говна знать, что в голове ни на что другое места не останется. Понятное дело что он будет где то путаться и тормозить, вспоминать какие там есть вообще методы перебора, какой из них лучше использовать и т.д. Нельзя знать настолько огромную теорию и за секунду сообразить понять и сделать то что от тебя требуется.
>>781524 (OP) > Но вот что интересно: многие люди с профильным образованием вообще не могут справится с этой задачей. Были даже случаи, когда кандидаты, подававшие резюме на вакансию «Senior developer» тратили на эту программу больше 15 минут.»
Аффтар поди шютит, ибо такое говно уровня хелловордика пилится за 2 минуты даже если аццки тупить и философствовать над ним.
Хотя если подумать то сейчас столько-то типа-программист-обезьян развелось что вполне могут и не осиливать, лол.
>>781831 >Аффтар поди шютит Автор может и пиздеть, потому что ни имен неосиляторов физбаза, ни даже фамилий не называет, а этак и я могу статью написать, мол ГЛЯДИТЕ ТОЛЬКО ДВА ИЗ МИЛИЛОНА ЧЕЛОВЕК УМЕЮТ ВДЫХАТЬ ПРАВОЙ НОЗДРЕЙ И ВЫДЫХАТЬ ЛЕВОЙ, НО Я ВАМ ИХ НЕ НЕ НАЗОВУ
>>781833 Да я просто не сразу смог поверить что вообще могут быть такие дауны среди senior developer, подумал типа аффтар преувеличивает и просто для примера завернул. Но потом все же вспомнил каким тупым уебищем является среднестатистический современный кодер и таки поверил.
>>781811 > Понятное дело что он будет где то путаться и тормозить, вспоминать какие там есть вообще методы перебора, какой из них лучше использовать и т.д.
Отмазки какие-то. Любой норм программер у которого таки есть опыт просто возьмет и применит решение "в лоб" в таких случаях, и оно будет включать в себя так же оценку производительности в разумных пределах (чтобы без говнокодерских тормозов, но и без ультра оптимизаций). Это все происходит прямо-таки на автомате и во время прочтения условий. И да, даже сама по себе попытка поиска каких-то шаблонных методов и алгоритмов для решения таких хелловордиков -- очевидный признак квадратно-гнездового мышления
>>781524 (OP) Что за манямирок? Любой джун такое напишет без проблем за минуту. Вы типа себя убеждаете что большинство программистов лохи и вы лучше их или в чем смысмл треда?
>>781947 Удваиваю. физбаз уже протухло, хочется новых тривиальных задач. >>781929 Выглядит неплохо, только всю оптимизацию пожирает printf. Я бы переписал с путc, а в конце флэш еще навернул.
>>781961 Ты прав, принтф же по идее делает лишние проверки каждого символа. Компилятор, конечно, может легко и сам заменить принтф на путс, но все равно так будет правильнее. Что такое флэш? fflush? Нахуя?
Алсо, запилите кто-нибудь для лулзов максимально оптимизированный физзбазз на каком-нибудь асме. Интересно было бы посмотреть.
>>781961 Вариаций может быть много. Даже малейшее изменение поможет справиться с выучившими физбаз наизусть лохами. Например, пропускать четные числа. Или посчитать сумму всех чисел, делящихся на 3 и 5.
>>781961 Запили мне функцию, которая получает строку и говорит палиндром это или нет. Палиндром - слово, которое читается одинаково в обе стороны. Типа "Аргентина манит негра".
>>781649 синглтон - чек декоратор - чек дескриптор - чек контекст-менеджер - чек mvc - django не MVC миксин - чек как валидирует входные данные - ВУТ? валидирую в формах, вьюхах, на фронтенде валидирую
fizzbuzz проверяет скорее не навыки, а уверенность программиста. Любой, кто тратит много времени на эту задачу, просто начинает загоняться на тему "ох епт, сказали, что задачка простая, а у меня какое-то кривое говно с тремя if'ами получилось, надо поискать решение получше". Обычно такие разработчики прогоняют всю эту логическую цепочку в уме, не написав ни строчки кода. А реально, можно писать работающий код годами и запнуться на 10 минут этой херне. Уж не будет ли вменяемый человек оспаривать тот факт, что этот человек действительно написал весь свой предыдущий код? Так и живем.
>>782244 >>782264 O(1) по времени, но O(N) по памяти. Для повторяющегося вывода это неприемлемо, ибо когда техзадание поменяется и станет 100 000 000 вместо 100, ты соснешь и придется переписывать в спешке.
>>781524 (OP) Спектрум-элита неспешно вкатывается в тред, обоссывая школоту и хипстеров.
10 FOR I=1 TO 100 20 LET S$="" 30 IF INT(I/3)<>I/3 THEN GOTO 50 40 LET S$=S$+"Fizz" 50 IF INT(I/5)<>I/5 THEN GOTO 70 60 LET S$=S$+"Buzz" 70 IF LEN(S$)=0 THEN LET S$=STR$(I) 80 PRINT S$ 90 NEXT I
>>782300 Зато работает без единого разрыва бага. Сегодня шел по рынку и увидал хипстера в футболке "Go", ну я подскочил и резко переебал ему в щи с вертушки, потому что угорел по Бейсику. Пацаны, дух старой школы живет только в BASIC, FORTRAN, FORTH, ASSEMBLER, где пацаны живут полной жизнью и ебут систему в рот! Только ZX Spectrum, только хардкор! Пацаны, ебашьте хипстеров, угорайте на портах и прерываниях, любите семью, пацанов и сцену!
А Р Г Е Н Т И Н А М А Н И Т Н Е Г Р А Р Г Е Н Т И Н А М А Н И Т Н Е Г Р А А Г Е Н Т И Н А М А Н И Т Н Е Г Р А А Р Е Н Т И Н А М А Н И Т Н Е Г Р А А Р Г Н Т И Н А М А Н И Т Н Е Г Р А А Р Г Е Т И Н А М А Н И Т Н Е Г Р А А Р Г Е Н И Н А М А Н И Т Н Е Г Р А А Р Г Е Н Т Н А М А Н И Т Н Е Г Р А А Р Г Е Н Т И А М А Н И Т Н Е Г Р А А Р Г Е Н Т И Н М А Н И Т Н Е Г Р А А Р Г Е Н Т И Н А М А Н И Т Н Е Г Р А А Р Г Е Н Т И Н А А Н И Т Н Е Г Р А А Р Г Е Н Т И Н А М Н И Т Н Е Г Р А А Р Г Е Н Т И Н А М А И Т Н Е Г Р А А Р Г Е Н Т И Н А М А Н Т Н Е Г Р А А Р Г Е Н Т И Н А М А Н И Н Е Г Р А А Р Г Е Н Т И Н А М А Н И Т Н Е Г Р А А Р Г Е Н Т И Н А М А Н И Т Е Г Р А А Р Г Е Н Т И Н А М А Н И Т Н Г Р А А Р Г Е Н Т И Н А М А Н И Т Н Е Р А А Р Г Е Н Т И Н А М А Н И Т Н Е Г А А Р Г Е Н Т И Н А М А Н И Т Н Е Г Р
>>782411 А Р Г Е Н Т И Н А М А Н И Т Н Е Г Р А Р Г Е Н Т И Н А М А Н И Т Н Е Г Р А А Г Е Н Т И Н А М А Н И Т Н Е Г Р А А Р Е Н Т И Н А М А Н И Т Н Е Г Р А А Р Г Н Т И Н А М А Н И Т Н Е Г Р А А Р Г Е Т И Н А М А Н И Т Н Е Г Р А А Р Г Е Н И Н А М А Н И Т Н Е Г Р А А Р Г Е Н Т Н А М А Н И Т Н Е Г Р А А Р Г Е Н Т И А М А Н И Т Н Е Г Р А А Р Г Е Н Т И Н М А Н И Т Н Е Г Р А А Р Г Е Н Т И Н А М А Н И Т Н Е Г Р А А Р Г Е Н Т И Н А А Н И Т Н Е Г Р А А Р Г Е Н Т И Н А М Н И Т Н Е Г Р А А Р Г Е Н Т И Н А М А И Т Н Е Г Р А А Р Г Е Н Т И Н А М А Н Т Н Е Г Р А А Р Г Е Н Т И Н А М А Н И Н Е Г Р А А Р Г Е Н Т И Н А М А Н И Т Н Е Г Р А А Р Г Е Н Т И Н А М А Н И Т Е Г Р А А Р Г Е Н Т И Н А М А Н И Т Н Г Р А А Р Г Е Н Т И Н А М А Н И Т Н Е Р А А Р Г Е Н Т И Н А М А Н И Т Н Е Г А А Р Г Е Н Т И Н А М А Н И Т Н Е Г Р
>>782564 Я, разумеется, всегда подозревал, что хаскеллисты суть опущенцы, которые в своем манямирке давно забыли не то что о вреде преждевременной пессимизации, но даже об элементарном DRY. Но чтобы настолько...
>>782564 Ваш код не решает задачу. Была дана четкая спецификация: а) готовая программа; б) печать без спецсимволов на отдельных строках. Мы вам перезвоним.
Но далеко не любой выпускник с дипломом программиста становится даже джуном.
По моему опыту, самая распространённая реакция собеседуемого на самые элементарные и простые вопросы/задания на собеседовании - "ой, а что это такое - функция?" или что-то в таком роде. Хотя такие, разумеется, быстро отсеиваются.
>>782681 Джун это всего лишь программистишка, устроившийся на работу впервые. Подготовка у него может быть какая угодно. Очевидно, что джун в JetBrains, победитель олимпиадок, даст пососать сеньору-быдлокодеру из ООО "Рога и копыта".
>>782026 >django не MVC А что же тогда? >>782449 >Стандартная лабораторка для первокурсника на турбо паскале. Турбо Паскаль - это же который с указателями. Нормальные программисты сегодня с ними никогда не имеют дела. Большинство ненормальных - тоже.
>>782690 В глаза долбишься? Оно выводит через пробел, но после цифр добавляет дополнительный пробел. Первый "FizzBuzz" без пробела как раз после 14. Но я неправильно назвал /MOD - по смыслу нужно было просто MOD Кстати, на процессорах без команд деления, как в этом эмуляторе, такое будет притормаживать.
>>782026 > MVC Как и те, что выше, это полезный паттерн проектирования, который необходимо понимать для правильного проектирования архитектуры системы. Ответ, вроде, "Да, наверное не стоит мешать представление с логикой, а логику с данными" вполне достаточен.
>>782026 А про валидацию - существует 1000 и один способ пропихнуть в программу говно, вместо инта в отрезке [1, 99], date вместо datetime, float вместо int, или любой другой случайный набор символов вместо твоего кастомного ModelType.
Если в случае java или go у тебя типизация работает из коробки - в слаботипизированных питонах вероятность объебаться стремится к небесам Аллаха.
Ну и кроме того, на собесах соискатели всё ещё показывают код, в которых во вьюха такое:
param = request.GET['param'] if not param: ___raise KudahError()
>>782841 >существует 1000 и один способ пропихнуть в программу говно Верно. Поэтому надо проверять, валидировать и отличать проверенное от непроверенного. >Если в случае java или go у тебя типизация работает из коробки И типизация в этом никак не помогает. Китайский набор иероглифов от Ивана Петрова в String она не отличит.
Типизация вообще помогает только от сложения носорогов с апельсинами, что состаавляет примерно одну десятую процена от типичного числа ошибок. Однако бороться со всеми остальными ошибками будем именно ей, конечно, ведь важен не результат, важно чтоб все было красиво типизировано.
>>781524 (OP) Что там сложного? def fizzbuzz(x): --f = 'Fizz' if x % 3 == 0 else '' --b = 'Buzz' if x % 5 == 0 else '' --return f + b if f != '' or b != '' else x [print(fizzbuzz(x)) for x in range(1, 100)]
>>781524 (OP) >Напишите программу, которая выводит на экран числа от 1 до 100. При этом вместо чисел, кратных трем, программа должна выводить слово «Fizz», а вместо чисел, кратных пяти — слово «Buzz». Если число кратно и 3, и 5, то программа должна выводить слово «FizzBuzz» Может это задача на внимательность? Типа нужно вывести все числа от 1 до 100. И выводить вместо 15 не только FizzBuzz, а и Fizz и Buzz, и FizzBuzz, потому что число кратно 3, кратно 5, кратно и 3 и 5.
Что-то типа этого:
'use strict' let rem = true; for(let i = 1; i<101; ++i){ if(!(i%3)){console.log("Fizz"); rem = false;}; if(!(i%5)){console.log("Buzz"); rem = false;}; if(!(i%15)){console.log("FizzBuzz"); rem = false;}; if(rem)console.log(i); rem = true; }
>>783058 Я не понял, как ее на питоне решать. На scheme в свое время решил без проблем, у меня даже сейчас есть, лол. Просто с односвязным списком не так просто, т.к. во многом решение зависит от стандартного представления списка в языке. Строки/словари я вращаю, как хочу, но вот с single linked list в питоне проблемес встретил.
Как я проигрываю с хабрадаунов. Дрочат на трудоемкость деления и сравнения и в то же время тратят кучу времени на создание объектов на стеке и конкатенацию строк.
Вкатился со своим скучным решением. Хотел что-нибудь на хаскеле написать, но пока что у меня мышление не настолько разработано лямбда-абстракциями, банка сгущенки еще не пролезает.
>>783246 > вместо чисел, кратных трем ... У тебя в мозгах память как у спектрума, что ты забываешь начало предложения? Или проблемы с пониманием текста?
>>783628 Лениво думать, попытался сделать как-то так. Нашел число двоичных рязрядов в максимальном числе последовательности и попытался как-то применить комбинаторику. Ответ неправильный.
>>783807 Извиняюсь за съеденные отступы. В статье не понравился тезис о огромной пропасти между состояниями "учусь программировать" и "умею программировать". Мне кажется "умею программировать" вообще не бывает, всегда есть куда развиваться и что учить.
>>783810 Ну, то есть я так думал: вычисляем максимально возможное число разрядов, а потом: 1. Воткнули одну единицу в один из разрядов 2. Воткнули две единицы в любые два разряда 3. Воткнули три единицы в любые три разряда 4. ... 5. ПРОФИТ
IF = -> b { b } LEFT = -> p { p[-> x { -> y { x } } ] } RIGHT = -> p { p[-> x { -> y { y } } ] } IS_EMPTY = LEFT FIRST = -> l { LEFT[RIGHT[l]] } REST = -> l { RIGHT[RIGHT[l]] }
def to_integer(proc) proc[-> n { n + 1 }][0] end
def to_boolean(proc) IF[proc[true][false]] end
def to_array(proc) array = []
until to_boolean(IS_EMPTY[proc]) array.push(FIRST[proc]) proc = REST[proc] end
array end
def to_char(c) '0123456789BFiuz'.slice(to_integer(c)) end
def to_string(s) to_array(s).map { |c| to_char(c) }.join end
fizzbuzz = -> k { -> f { -> f { -> x { f[-> y { x[x][y] }] }[-> x { f[-> y { x[x][y] }] }] }[-> f { -> l { -> x { -> g { -> b { b }[-> p { p[-> x { -> y { x } } ] }[l]][x][-> y { g[f[-> l { -> p { p[-> x { -> y { y } } ] }[-> p { p[-> x { -> y { y } } ] }[l]] }[l]][x][g]][-> l { -> p { p[-> x { -> y { x } } ] }[-> p { p[-> x { -> y { y } } ] }[l]] }[l]][y] }] } } } }][k][-> x { -> y { -> f { f[x][y] } } }[-> x { -> y { x } }][-> x { -> y { x } }]][-> l { -> x { -> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[l][f[x]] } }] } }[-> f { -> x { f[-> y { x[x][y] }] }[-> x { f[-> y { x[x][y] }] }] }[-> f { -> m { -> n { -> b { b }[-> m { -> n { -> n { n[-> x { -> x { -> y { y } } }][-> x { -> y { x } }] }[-> m { -> n { n[-> n { -> f { -> x { n[-> g { -> h { h[g[f]] } }][-> y { x }][-> y { y }] } } }][m] } }[m][n]] } }[m][n]][-> x { -> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[f[-> n { -> p { -> x { p[n[p][x]] } } }[m]][n]][m][x] }][-> x { -> y { -> f { f[x][y] } } }[-> x { -> y { x } }][-> x { -> y { x } }]] } } }][-> p { -> x { p[x] } }][-> p { -> x { p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[x]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] } }]][-> n { -> b { b }[-> n { n[-> x { -> x { -> y { y } } }][-> x { -> y { x } }] }[-> f { -> x { f[-> y { x[x][y] }] }[-> x { f[-> y { x[x][y] }] }] }[-> f { -> m { -> n { -> b { b }[-> m { -> n { -> n { n[-> x { -> x { -> y { y } } }][-> x { -> y { x } }] }[-> m { -> n { n[-> n { -> f { -> x { n[-> g { -> h { h[g[f]] } }][-> y { x }][-> y { y }] } } }][m] } }[m][n]] } }[n][m]][-> x { f[-> m { -> n { n[-> n { -> f { -> x { n[-> g { -> h { h[g[f]] } }][-> y { x }][-> y { y }] } } }][m] } }[m][n]][n][x] } ][m] } } }][n][-> p { -> x { p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[x]]]]]]]]]]]]]]] } }]]][-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> x { -> y { -> f { f[x][y] } } }[-> x { -> y { x } }][-> x { -> y { x } }]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]][-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]][-> b { b }[-> n { n[-> x { -> x { -> y { y } } }][-> x { -> y { x } }] }[-> f { -> x { f[-> y { x[x][y] }] }[-> x { f[-> y { x[x][y] }] }] }[-> f { -> m { -> n { -> b { b }[-> m { -> n { -> n { n[-> x { -> x { -> y { y } } }][-> x { -> y { x } }] }[-> m { -> n { n[-> n { -> f { -> x { n[-> g { -> h { h[g[f]] } }][-> y { x }][-> y { y }] } } }][m] } }[m][n]] } }[n][m]][-> x { f[-> m { -> n { n[-> n { -> f { -> x { n[-> g { -> h { h[g[f]] } }][-> y { x }][-> y { y }] } } }][m] } }[m][n]][n][x] }][m] } } }][n][-> p { -> x { p[p[p[x]]] } }]]][-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> x { -> y { -> f { f[x][y] } } }[-> x { -> y { x } }][-> x { -> y { x } }]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]][-> b { b }[-> n { n[-> x { -> x { -> y { y } } }][-> x { -> y { x } }] }[-> f { -> x { f[-> y { x[x][y] }] }[-> x { f[-> y { x[x][y] }] }] }[-> f { -> m { -> n { -> b { b }[-> m { -> n { -> n { n[-> x { -> x { -> y { y } } }][-> x { -> y { x } }] }[-> m { -> n { n[-> n { -> f { -> x { n[-> g { -> h { h[g[f]] } }][-> y { x }][-> y { y }] } } }][m] } }[m][n]] } }[n][m]][-> x { f[-> m { -> n { n[-> n { -> f { -> x { n[-> g { -> h { h[g[f]] } }][-> y { x }][-> y { y }] } } }][m] } }[m][n]][n][x] }][m] } } }][n][-> p { -> x { p[p[p[p[p[x]]]]] } }]]][-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> x { -> y { -> f { f[x][y] } } }[-> x { -> y { x } }][-> x { -> y { x } }]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]][-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]][-> f { -> x { f[-> y { x[x][y] }] }[-> x { f[-> y { x[x][y] }] }] }[-> f { -> n { -> l { -> x { -> f { -> x { f[-> y { x[x][y] }] }[-> x { f[-> y { x[x][y] }] }] }[-> f { -> l { -> x { -> g { -> b { b }[-> p { p[-> x { -> y { x } }] }[l]][x][-> y { g[f[-> l { -> p { p[-> x { -> y { y } }] }[-> p { p[-> x { -> y { y } }] }[l]] }[l]][x][g]][-> l { -> p { p[-> x { -> y { x } }] }[-> p { p[-> x { -> y { y } }] }[l]] }[l]][y] }] } } } }][l][-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> x { -> y { -> f { f[x][y] } } }[-> x { -> y { x } }][-> x { -> y { x } }]][x]][-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }] } }[-> b { b }[-> m { -> n { -> n { n[-> x { -> x { -> y { y } } }][-> x { -> y { x } }] }[-> m { -> n { n[-> n { -> f { -> x { n[-> g { -> h { h[g[f]] } }][-> y { x }][-> y { y }] } } }][m] } }[m][n]] } }[n][-> n { -> f { -> x { n[-> g { -> h { h[g[f]] } }][-> y { x }][-> y { y }] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]][-> x { -> y { -> f { f[x][y] } } }[-> x { -> y { x } }][-> x { -> y { x } }]][-> x { f[-> f { -> x { f[-> y { x[x][y] }] }[-> x { f[-> y { x[x][y] }] }] }[-> f { -> m { -> n { -> b { b }[-> m { -> n { -> n { n[-> x { -> x { -> y { y } } }][-> x { -> y { x } }] }[-> m { -> n { n[-> n { -> f { -> x { n[-> g { -> h { h[g[f]] } }][-> y { x }][-> y { y }] } } }][m] } }[m][n]] } }[n][m]][-> x { -> n { -> p { -> x { p[n[p][x]] } } }[f[-> m { -> n { n[-> n { -> f { -> x { n[-> g { -> h { h[g[f]] } }][-> y { x }][-> y { y }] } } }][m] } }[m][n]][n]][x] }][-> p { -> x { x } }] } } }][n][-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]][x] }]][-> f { -> x { f[-> y { x[x][y] }] }[-> x { f[-> y { x[x][y] }] }] }[-> f { -> m { -> n { -> b { b }[-> m { -> n { -> n { n[-> x { -> x { -> y { y } } }][-> x { -> y { x } }] }[-> m { -> n { n[-> n { -> f { -> x { n[-> g { -> h { h[g[f]] } }][-> y { x }][-> y { y }] } } }][m] } }[m][n]] } }[n][m]][-> x { f[-> m { -> n { n[-> n { -> f { -> x { n[-> g { -> h { h[g[f]] } }][-> y { x }][-> y { y }] } } }][m] } }[m][n]][n][x] }][m] } } }][n][-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]] } }][n]]]] }]
>>783860 >Напишите программу, которая выводит на экран числа от 1 до 100. При этом вместо чисел, кратных трем, программа должна выводить слово «Fizz», а вместо чисел, кратных пяти — слово «Buzz». Если число кратно и 3, и 5, то программа должна выводить слово «FizzBuzz»
>>781524 (OP) Очень просто: fizz = lambda x: x % 3 == 0 and 'Fizz' or '' buzz = lambda x: x % 5 == 0 and 'Buzz' or '' check = lambda x: len(x) > 0 and x or False [print(check(fizz(x) + buzz(x)) or x) for x in range(1, 101)]
>>783916 Я тут подумал, его ведь можно еще проще написать, с одним лишь условием: N, F, B = False, 'Fizz', 'Buzz' seq = [N, N, F, N, B, F, N, N, F, B, N, F, N, N, F + B] [print(seq[x % 15 — 1] or x) for x in range(1, 101)] Там ведь циклический кусок. Можно вообще в лоб, без условий, если просто захардкодить этот списочек в виде голых принтов но мне лень.
>>783821 > Напишите функцию деления целого числа на 10 с использованием только операций сложения и вычитания и сдвигов. Вангую, никто не осилит. Можно проще. toString и ставишь запятую перед последней цифрой.
>>783010 Какой ты нахуй программист, если не аутист. Если буквально понимать (а иначе в поставленных задачах не бывает) условия задачи, то решение точно соответствует тому о чем говорится в задаче. Довольно неплохой фильтр для отбора тру программистов.
Как я ненавижу таких ебаных позеров. На математику дрочат, интегральчики руками берут, про мистический смысл пи говорят. Покажите свои статьи по гомологической алгебре или теории типов, подсосы. Покажите результаты своих исследований в математике, которые были использованы в промышленности. Ебаные гуманитарии.
Аутисты тупые же, за редким исключением. У них мозг поражен. Решать задачи по шаблону это еще не ум, новые теоремы вы все равно не докажете, чмошника. Здоровый человек вам всем по губам проведет.
Пиздец ебанашка нахваталась говна и думает что это все реально важно и каждый должен это высирать на месте. То что все это моментально узнается если возникает необходимость этому гению блядь не понять.
Устройство сборщика мусора - это вообще пиздец. Там может быть несколько отдельных куч для молодых/старых объектов и больших/маленьких. Но блядь если бы была машина стирающая воспоминания, я бы специально попросил чтобы мне выжгли из мозга эту охуительно ценную информацию. Это вообще самое бесполезное что только можно узнать в разработке.
>>784611 Да всё он правильно написал. Если ты три года разрабатывал срачечку на жабе, то знать это так или иначе будешь. А знание о работе сборщика мусора может помочь писать более производительный код (хотя любой, у кого сборщик мусора вообще работает в производительном коде - долбоёб). Вот, например, есть такая юмористическая книжка Real World Ocaml от Минского, там про всю подобную хуйню (тот же сборщик мусора) довольно подробно рассказывается.
Так, сучечки, задача усложняется. Дядя заказчик доволен вашим кодом и просит усовершенствовать его. Теперь надо сделать так чтобы он мог добавлять условия, например если число делится на 7 выводить bar, на 11 foo и так далее. Но если число делится на все сразу, то выводить не fizzbuzz а great.
>>781524 (OP) Ага. Только вот под "умением программировать на Жабе"(или каком-нибудь другом языке, на ваш выбор) подразумевается не только это самое программирование, но и знание шаблонов, ЖДБЦ/Гибернейт, Спринг, Мэйвен, Скрам и т.д. Физзбаззы тут уже не помогут.
>>784993 Не поможет знание всей этой хуеты, если ты не умеешь написать физзбазз. Уже вижу как такой программист гуглит до охуения библиотека_сделай_за_меня_всю_работу_нейм.
>>784981 Как-то так, наверное http://try.haxe.org/#ed852 >>785026 Ты, наверное, слышал, что операция взятия квадратного корня - это пиздец и смерть производительности? Ну так вот, по тактам они с делением абсолютно одинаковы.
>>785108 >более лучшим Хех. Нет, речь о том, что Физзбазз тоже плохо определяет пригодность программиста к выполнению задачи, для которой его нанимают.
>>784932 >Если ты три года разрабатывал срачечку на жабе, то знать это так или иначе будешь. Говори за себя, дибилка. >А знание о работе сборщика мусора может помочь писать более производительный код (хотя любой, у кого сборщик мусора вообще работает в производительном коде - долбоёб). Нужно но не нужно. Ясно. >Вот, например, есть такая юмористическая книжка Real World Ocaml от Минского, там про всю подобную хуйню (тот же сборщик мусора) довольно подробно рассказывается. Кто-то высрал какую-то говнокнижку. Аргумент. Ясно.
>>785032 Ты явно делишь на 15, и не добавил туда остальные условия. Я забыл дописать кстати что если число делится на несколько то результаты конкатенируются например fizzbuzzbar.
Ну вот что в голову пришло сразу function fizzBuzz(...n) { n.forEach((item, i) => { while (item) { i === 15 ? console.log('FizzBuzz') : false; i % 3 === 0 ? console.log('Fizz') : false; i % 5 === 0 ? console.log('Buzz') : false; ++i; --item; } });
>>785550 Думал, что на асмоговне будет. Респект, в общем, че. Помню время, когда тоже фанился с этой хренью, у меня валлпапер был с таблицей ASCII-символов.
>>788208 Проблевался. Типичный код энтерпрайзных макак - и работает неверно, и тормозит, и память засирает. for (int k = 1; k <= 100; k++) { bool f = false; if (k % 3 == 0) { System.out.print("OP"); f = true; } if (k % 5 == 0) { System.out.print("HUY"); f = true; } if (!f) { System.out.print(k); } System.out.println(); } Вот так нужно на жабе писать.
Публикую новое решение на Бейсике. Самый быстрый вариант, всего один цикл и 2 условия и всего 2 числовых переменных. Почувствуйте всю мощь ZX Spectrum! На ваших жалких языках такое не получится.
[if x `mod` 3 == 0 && x `mod` 5 == 0 then "FizzBuzz" else if x `mod` 3 == 0 then "Fizz" else if x `mod` 5 == 0 then "Buzz" else show x | x <- [1..100]]
>>788256 byte n = 23 for (byte i = 1; i <= 100; ++i) { n -= 5 byte origN = n if (!(n&3)) { n ^= 3 print 'Fizz' } if (!(n&20)) { n ^= 20 print 'Buzz' } if (origN == n) { println i } else { println() } }
>>788789 Verilog. Правда этот физзбазз не зальешь на кристалл, но при симуляции должно работать. И главное, никаких кэшей, инструкций и адресации, только чистая логика!
>>788754 А также после cnt7 <= cnt7 + 1; вставить end. Не путай людей. Это не синтезируемое подмножество верилога, эта программа выполнится только в симуляторе, естественно не за 100 нс. Вообще ни о чем этот код, нужно хотя бы через uart выдавать.
>>788256 Ну нету в спектруме аппаратного деления, этот код будет очень медленно работать.
>>784150 Человеческие мозги есть и у обычного быдла. От программиста же требуется решать ровно ту задачу, которую перед тобой поставил заказчик, а не что ты там нафантазировал в своем маня-мирке.
>>789326 Если бы заказчик мог нормально сформулировать задачу, он бы сам ее и закодил. Аутистам нужны всякие лиды и прочие прослойки, чтобы хоть как-то работать. Ну и из аутистов хуевые программеры, внезапно.
>>789327 >из аутистов хуевые программеры Ты хотел сказать лучшие? Как может быть человек хуевым программистом, если ему интереснее писать код, чем делать еще что-то? На мой взгляд аутисты рождены, чтобы писать программы. Понятно зачем туда идет простое быдло. Зарплатка. Пивко. Попизделки. Что там еще. В командах где есть такие люди, если кто что и делает, так это аутисты. А социоблядский рак, примерно такой же как тян тестировщицы. Кофебрейки. Попизделки. Чутка спизженный код. Бесполезное говно, за которым потом приходится всю их работу переписывать. ага, подгорело
>>789333 Да ты просто омега-ноулайфер и сублимируешь в программирование. Сам пишешь про решение поставленных задач, и тут же перепрыгиваешь на интерес к дрочьбе кода, которая только замедляет решение этих задач. Опять отличился "нестандартным мышлением".
>>782294 Бейсик помню смутно, но нахуя тебе goto на ровном месте, когда 30 IF...THEN LET... и 50 соответственно тоже? Правильно сказали, полный набор. А так хули тут, казалось бы язык как язык, народ в 2016 году алгоритмически так же эту задачу решает, и очень похожими конструкциями вроде проверки длины строки, добавления к ней физбазов всяких и т.д.
>>788256 Спагетти из goto и весьма заурядный код, который в общем-то на многих популярных языках будет алгоритмически одинаковым (только у тебя он млять еще и нечитаемый). Почувствуй всю мощь своего долбоебизма, fizzbuzz не осилил написать без скатывания кода в неочевидную херню, и это на бейсике.
Год назад учил джаву, потом пошел на другу работу. Хочу снова учить и тут увидел задачу с пика. В голове сразу родилась идея просто заполнить массив от 1 до 100, а потом печатать его с 3 условиями. Понимаю, что решение уровня ОРК. Или просто через массив без всякого заполнения. А это уровня КЕК
>>792074 Да всем насрать на ваши детские шифры. Напиши кодирование Хэмминга при помощи матриц, напиши код Рида-Соломона точно так же, а не как Крис Касперски, не осиливший математику и пытавшийся своим больным мозгом преобразовывать массивы, разберись в CRC32 и отреверси его.
>>781524 (OP) >Напишите программу, которая выводит на экран числа от 1 до 100. При этом вместо чисел, кратных трем, программа должна выводить слово «Fizz», а вместо чисел, кратных пяти — слово «Buzz». Если число кратно и 3, и 5, то программа должна выводить слово «FizzBuzz»
Мне кажется, проблема в том, что условие здесь очень громоздко составлено.
>>792368 а я так и не смог это прочесть - срок давности осёк, диски, блять, если другие статьи читая можно было ощутить приятные воспоминания по времени, то это - меланхолию. на самом деле я не знаю что такое коды рида-соломона
>>792070 Нет, напишу генератор стратегий с автовыбором в зависимости от размера массива и кол-ва и размеров классов вычетов. А это уже изменение тз и рефакторинг в счёт нового бюджета.
>>782128 Обычно накидываю говнокод, а потом смотрю, где обосрался и делаю ЛАКОНИЧНО И ЭЛЕГАНТНО.
А в случае задач на тех же собеседованиях, лучше уж сначала показать, что ты вообще вкурсе, что от тебя требуют, хотя бы примерно. А уж потом намекнуть, что это можно сделать красиво.
Самый важный момент: создание программ для Linux не сосредоточено внутри закрытых корпораций, а осуществляется открытым сообществом вольных программистов, разбросанных по всему миру и активно общающихся через Интернет.
Понятно, что этот процесс координируется, но не управляется. В этом смысле программы создаются стихийно, и говорить, например, о точных сроках выхода чего-либо не приходится. Но, что поразительно на первый взгляд, проекты доводятся до ощутимого результата, качество продукта хорошее, развитие стремительное, ошибки устраняются быстро. Хотя никто ни за что как бы не отвечает, всегда можно получить помощь и поддержку.
Как ни парадоксально, одним из "достижений" индустриального программирования является фактическое устранение большого числа индивидуумов и даже, как мне кажется, многих фирм от создания программ. Несмотря на появление инструментальных средств типа Delphi, C++ Builder и прочих Builder и Visual, сложность построения программ с графическим интерфейсом повысила порог вхождения в умение создавать программы.
Сотни, а может, тысячи функций API, сложные и иногда загадочные отношения между ними, наличие целых недокументированных пластов. Наличие сложных и неочевидных (появившихся благодаря сугубо историческим причинам) правил построения программ. За последние годы для платформы Wintel можно назвать несколько смен парадигм программирования. Голая Windows API, MFC, OWL, OLE, ActiveX, VCL. За каждым сокращением - существенные и принципиальные смены тенденций и моделей программирования.
Принятие за основу ООП (C++) что-то облегчило в программировании, но не устранило. Так, для нормальной работы с библиотеками классов ТРЕБУЕТСЯ изучение их исходного кода. Хотя они, по замыслу, созданы как раз для того, чтобы "простой" разработчик не углублялся в системные подробности. Где-то я встретил мнение: "На C++ легко написать плохой код".
Со мной можно поспорить, но индустриальный подход к программированию пытался сделать из программирования ремесло. Мне показалось, что Linux собрала вокруг себя людей, считающих программирование все же искусством. В этом, может быть, основная причина успеха.
Вот эпиграф к предисловию книги Бьярна Страуструпа, создателя C++: "Язык формирует наш способ мышления и определяет, о чем мы можем мыслить" (Б. Л. Ворф). Интересно, что основной язык программирования, формирующий способ мышления творцов Linux, - это все-таки С, а не C++.
Я уже сопоставлял KDE и GNOME. Теперь посмотрим на их основы - графические библиотеки Qt и gtk+.
- gtk+ - "побочный" продукт разработки графического редактора Gimp. Интересно, что библиотека написана на С, но использует свою систему типов данных, имеет объектную структуру и реализует концепцию событий. И если нижний уровень библиотеки довольно изощренный, то код, который приходится писать прикладному программисту, довольно прозрачен и прост.
- Qt - творение норвежской фирмы Troll Tech, написанное на C++, а раз так, то это иерархия-дерево классов. Построение интерфейса программы основано на идее "сигнал-слот" и реализует концепцию компонентного программирования. Интересно, что довольно новые в C++ исключения и RTTI (определение типа данных во время исполнения) в библиотеке не используются. Хочется еще отметить, что возможен перенос приложений для Qt на платформу Windows 95/NT (причем утверждается и возможность обратного переноса без изменения текста прикладных программ). На первый взгляд, по сравнению с gtk+ библиотека Qt более массивна и более профессиональна, документация лучше проработана. Но... библиотека Qt, хотя ее исходные тексты доступны, не совсем свободна. Поэтому регулярно возникают проблемы с ее разработчиками по поводу изменения кода библиотеки. Вплоть до появления желания написать свободный аналог Qt, к тому же на С.
Нужно отметить, что технология программирования (в смысле инструментария) под Linux слишком традиционна. По сравнению с Delphi и прочими Builder'ами. Но есть информация, что через некоторое время появится что-то подобное и здесь. Так, о создании инструментов говорит Troll Tech (QtEZ и Qt Architect). Также я собственными ушами слышал, что фирма Inprise подумывает о переносе своих инструментов под Linux.
Мне кажется, что Linux принципиально устраняет недовольство собой. Ну не нравится что-то - сделай лучше. Благо исходные тексты доступны, инструментарий есть. Хотя, конечно, этот путь осилит далеко не каждый, и для многих это достоинство Linux чисто умозрительное.
Нельзя не вспомнить, что программист - это все же профессия, то есть один из способов зарабатывать деньги. Идеология Linux требует смены модели зарабатывания денег на программном обеспечении. На продаже самих программ много не заработаешь. Важнее становятся сопровождение, консультации, разработки на заказ - то есть услуги, труд и время квалифицированных специалистов, а не стрижка купонов. Этот подход непривычен, и споры по этому поводу слышны часто.
>>781524 (OP) Ну давай разберем по частям тобою написанное.
>Больше всего проблем у них вызывают совершенно тривиальные задачи. Пруфы на исследования подтверждающие это?
>Нормальный программист должен написать такую программу на бумажке за пару минут. Пруфы?
>Были даже случаи, когда кандидаты, подававшие резюме на вакансию «Senior developer» тратили на эту программу больше 15 минут. Я мог бы и несколько дней потратить, если был бы не в настроении. Этот мудак, кстати, тоже аналогичную задачу за 2 минуты не решил бы, а только кукарекать на способности других может.
Я вот заметил что люди вообще тупые. Все без исключения. У программистов это лучше видно (но это не значит что они тупее). Мне редко когда удается написать несколько строк кода и нигде не ошибиться. Ошибки бывают почти всегда, почти в 100% случаев, и как правило сразу много. Отладку для этого и придумали, чтобы компенсировать умственную слабость людей.
>>783835 Продавай свой труд на том рынке, где платят 120К, какие проблемы?
>>781611 >Я тоже долго думал, но у меня все равно получилось какое-то ifthenelse говно. Условие задачи сформулировано как ifthenelse, поэтому и решение должно быть таким же. Тут всё нормально. Вы ищете подвох там где его нет. Ожидаете что собеседующему надо не просто решение, а какое-то особенное решение , и ищете это особенное решение чтобы поразить его воображение. В итоге поражаете его тем что на решение уходит много времени, по его никчемному мнению. Кстати, много времени это скорее всего даже хорошо, это значит что быдлокодер искал оптимальное решение, а не какое попало, и скорее всего именно те кто решали эту задачу долго, смогут хуярить эффективный код для хайлоада. А те кто решали быстро, смогут только шаблонно говнокодить тормозную хуйню. В общем, автору я бы хорошо объяснил что он идиот и ничем не умнее тех программистов которых он пытается унизить за тупость.
>>793413 Протестую. Там, где просто - должно быть просто. Без всяких но. Насчет ошибок - какой-то ты необучаемый видать, если и пару строк кода не можешь родить без ошибок.
>>793415 >Насчет ошибок - какой-то ты необучаемый видать Ага, и все мои коллеги тоже необучаемые, и судя по багам в софте вообще все кодеры необучаемые. Ты просто ссышь признать что и сам постоянно пишешь баговый код. Либо у тебя задачи уровня этого fizzbuzz.
Как же заебал этот жирный вброс. FizzBuzz в школе в первый год изучения информатики проходят. Любая книга по ЯП рассматривает эту задачу в первой главе после Hello, World. Если человек собеседуется на вакансию программиста и не может написать FizzBuzz, то он вообще никогда не занимался коммерческой разработкой и умеет максимум в домашнее формошлёпство под андроид, винду или веб. Даже самая последняя похапе-мартышка сталкивается периодически с задачами сложнее этой - какой-нибудь парсинг сайта, обработка многомерных структур данных, которых в вебе пруд пруди, сортировка по собственному условию (это вообще суть FizzBuzz) и т.д. Кстати, WHERE в SQL есть то же самое по сути. Кто вообще в зравом уме может верить статье из ОП-поста, где FizzBuzz не могут написать не то что джуны, СЕНЬОРЫ
>>793426 Так никто не может же проверить иначе кто они вообще такие - пиздеть не мешки ворочать, некоторые наверно мнят себя верховными сеньор-тимлидами с 5 месяцами опыта.
>>793428 Если это не вымысел и не редкий случай, а обыденное явление, то почему бы не избавить себя от разрыва жопы, предлагая написание FizzBuzz ПЕРЕД собеседованием? Не управился за минуту - до свидания.
>>793432 Ну представь: ты собеседуешь на вакансию физика-ядерщика в CERN. И к тебе приходит чудо-человек - куча рекомендательных писем (липовых), диплом (липовый). Рассказывает, как он увлечен и как мечтает делать крутые исследования. Ты так восхищен, что тратишь своё драгоценное время (платят тебя $150 в час), слушая его и думая "это наш кандидат". И вот в конце ты говоришь ему, мол, чистая формальность, но надо убедиться, что вы не пиздабол. И задаёшь простейшую задачу из области теоретической физики, даже в шутку скорее спрашиваешь. Он уходит от ответа. И тут у тебя в мозгу замыкается что-то - ты осознал, что фактически у тебя нет ни малейшего доказательства его компетентности, но он так заболтал тебя, что это не всплывало из подсознания всё время, что вы общались. Но не могло не всплыть, ты же профессионал. Ты, боясь, что ошибаешься, сам отшучиваешься, а потом переводишь разговор на серьёзную тему - мол, "есть такой-то нерешенный вопрос в современной физике, что вы думаете по этому поводу?". Он снова уходит от ответа. Ты говоришь, что очень хотел бы знать мнение будущего коллеги. Он предлагает ответить завтра. Ты, уже сильно уверенный в том, что тебя наебали, отвечаешь: "Боюсь, без понимания уровня вашей компетенции я не смогу работать с вами". Он снова уходит от ответа. Ты говоришь ему "мы вам перезвоним". Твоя жопа в огне.
>>793436 Так я о том и говорю - если ситуация, описанная в статье из ОП-поста, не редка и такие псевдо-сеньоры часто понапрасну тратять время собеседующих их программистов компании, то надо пересмотреть подход к собеседованиям и просить решить FizzBuzz перед началом собеседования. Благо это больше минуты у нормального кандидата не займёт.
>>781524 (OP) На самом деле похоже на правду. Имел опыт собеседований, так вот много из тех, кто приходит настоящие пиздоболы, записывающие себе в навыки технологии, от которых слышали только название, и не знающие основ языка.
>>809416 Ну так смелость и наглость города берут. Привирают о своём уровне компетенции почти все. На 9 собеседованиях их отсеют, а на 1 повезёт и примут. Причём если пиздобол толковый, то есть шанс, что он по ходу дела всё это выучит. Но не все толковые, увы.
>>781524 (OP) >Напишите программу, которая выводит на экран числа от 1 до 100. При этом вместо чисел, кратных трем, программа должна выводить слово «Fizz», а вместо чисел, кратных пяти — слово «Buzz». Если число кратно и 3, и 5, то программа должна выводить слово «FizzBuzz» Хуита же. Это как попросить написать "Hello world", но вместо Hello написать 2 а вместо world - ch. Или тут есть кто реально не знает таких вещей?
>>783502 Говно. Не нужен там тернарный оператор, if и elseif в разы читабельнее. Ты же, во-первых, добавил бессмысленные false в каждую строку, во-вторых нагородил кашу из ненужных переменных b, c, d. Вместо $d = (condition) ? 'string' : false; echo $d Правильнее использовать echo (condition) ? 'string' : false
>>781524 (OP) Написал на бумажке за 5 минут, тебе отвечают что неправильно, надо переменные в кемелкейсе а еще вот оно должно быть с использованием Бла-Бла-Бла фреймворка и еще в Авс через докер запускаться и распределенно в базу писать, собственно это все надо настроить за пол часа.
И ты такой в мыле ... вместо 3 за 3,5часа успеваешь .... и тебе такие 2-й вопрос, а что будет если в жс: function() {a=1} a=2
Ты им такой мол ошибка вывалится ...
А они нееееет, ошибка вывалиться только если строгий режим включен, ну да ладно это вы завалили ... а ответтье ка в каком случае маржины схлопываются и как на это влияет баундинг бокс, а если еще позишин абсолют что случится со следующим дивом...
>>810832 Читаемость не количеством строк определяется, а простотой и понятностью языковых конструкций. По-твоему, >>782564-этот однострочник - наиболее читаемое из всех решение? Странно, что тебе такие очевидные вещи приходится объяснять.
>>793413 > редко когда удается написать несколько строк кода и нигде не ошибиться. Это нормально, и меня это не парило до тех пор пока я не начал железками заниматься и махарайки паять. Вот где программистские привычки (руки работают быстрее головы) выходят боком! Каждый раз перепаивая запаяный задом наперед разъем (или меняя спаленную из за этого микруку) я думаю - а ведь в коде бы просто переставил строчки местами и всех делов.
for x in range(1,101): if not x % 3 == 0 and not x%5 == 0: print(x) if x%3 ==0 and x%5 ==0: print('tvoju') if x%3 == 0: print('mamu') if x%5 == 0: print('ebal')
>>781524 (OP) > всё правда настолько плохо Да. Смотри сам. Студенту читают 4 курса. 1-2 это история, философия, культурология, политология, физика, математика, конфлоиктология, физра, английской, электроника, электротехника. 3 - специальность 4 - уже никто не учится, т.к. нужно искать работу Итого у тебя всего 1 год чтобы стать крутым программистом и научиться кодить ВСЁ на листочке.
> Senior developer У нас сеньерность измеряется подругому. Тоесть наши синьеры это даже не их мидлы. Я когда устраивался в майкрософт ДС1, то реально брал, садился и вспоминал это всё на листочке, а потом переводил в комп. Да, я не мог решить FuzzBuzz на листочке. Это у меня потребовало где-то 4-5 месяцев дрочки geeksforgeeks и Скиены. Не каждый день, но 2 тетрадки 96 листов я исписал. Я даже понял, как работает мержсорт. Тоесть мог нарисовать блоксхему сходу. И когда ты проходишь собеседование, то у тебя вылетает из головы где-то половина.
>>813765 Бля, как всегда. Надо запускать хоть раз перед коммитом. >There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors. Ну вы понели.
>>811497 Ти што поц? n - параметр анонимной функции. >>810835 Так написано потому что пробелы форматирования проебываются. Конечно никто больше 80 символов в строку не захуярит.
for(var i=1; i<=100; i++) { if(i=3) return fizz else if(i=5) return buzz else if(i=15) return fizzbuzz else return i} переменная содержит свое название Я даун или статью писал даун?
>>781714 Ты нихуя не знаешь. Эти слова применялись корифеями computer science задолго до твоего рождения и рождения твоих хипсторов, и до них тоже, и до программирования - в типографии и книгопечатании. Ишь, петушок тут раззапрещался.
Ещё задачка: Преобразовать первую строку во вторую, исходя из правила "буква встречается в слове ровно один раз - заменить на (, 2 или больше - заменить на )"
Тред не читал, сразу набросал первый вариант: [code] for i in range(1, 101): f=i%3 b=i%5 fb=i%15 if (fb==0): print("FizzBuzz") elif (f==0): print("Fizz") elif (b==0): print("Buzz") else: print(i) [/code] Потом нашел коммент на +40 >а если кратно и трем, и пяти — FizzBuzz получится само)
И написал вот так: [code] for i in range(1, 101): f = i % 3 b = i % 5 if (f == 0): i = ('Fizz') if (b == 0): i += ('Buzz') print(i) [/code]
Хочу написать однострочник без посторонней помощи, но не хватает практики, что использовать?
Аспирантик, ты свои ОЛГОРИТМЫ будешь у себя в шараге рассказывать)))) Всем похуй на твою парашу, нормальные пацаны на работе мутят, а не учат ОЛГАРИТМЫ
>>819851 > Хочу написать однострочник Нахрена? К чему искусственная сложность? Ты от этого круче не станешь, это пустое показушничество, никак не делающее тебя лучше. Лучше реши: >>819662 >>782010 >>782377
>>822581 Я видел, что там написано Pascal, но я был почему-то уверен, что в нем тип переменной указывается до её названия, как в C-подобных. Оказалось - ошибся, основательно я его подзабыл.
>>822851 Вот что гугл выдаёт по запросу "pascalgui": PascalGUI (Pascal compiler) - Android Apps on Google Play PascalGUI is a GUI/small-IDE for freepascal compiler. PascalGUI supports devices with ARM, x86 and MIPS processors (MIPS doesn't support graph at the ...
Смотрите какую наркоманскую хуйню накатал. Работает только для набора последовательных положительных чисел, но зато всего две операции получения остатка. Оптимизация!
>>828796 Так у меня там и есть только значение и линк на следующую ноду. Только в ноде ещё флаг, последняя ли она или нет. Cons(h, t) -> Cons - флаг, h - значение, t - линк на следующую ноду. Можно, конечно, обойтись без флагов и нахакать вот такую вот штуку http://try.haxe.org/#DB61b , но это нифига не красиво получится.
Я решил разработать набор вопросов, которые позволили бы мне быстро идентифицировать таких «недопрограммистов». Вопросам такого рода я дал название «FizzBuzz questions», в честь игры, в которую играют британские школьники. Типичный FizzBuzz question выглядит следующим образом:
Напишите программу, которая выводит на экран числа от 1 до 100. При этом вместо чисел, кратных трем, программа должна выводить слово «Fizz», а вместо чисел, кратных пяти — слово «Buzz». Если число кратно и 3, и 5, то программа должна выводить слово «FizzBuzz»
Нормальный программист должен написать такую программу на бумажке за пару минут. Но вот что интересно: многие люди с профильным образованием вообще не могут справится с этой задачей. Были даже случаи, когда кандидаты, подававшие резюме на вакансию «Senior developer» тратили на эту программу больше 15 минут.»
https://habrahabr.ru/post/298134/
Вопрос в том числе к тем, у кого есть опыт проведения собеседований - всё правда настолько плохо?