Так задачи то и не было). Задача то она комплексная. Контекста то нет.
Лет семь назад писал одно сервисное приложение. Буквально килобайт 10-20 всего.
Семь языков программирования (не считая html/css которые были там отдельно).
До сих пор работает. Но это извращение в стиле вот этого вот "чарта".
Код неподдерживаемый совершенно. Отчасти потому что половину языков я уже и не помню.
Ваш код не уверен, но милторговский код не проходит под "тз" поскольку не содержит ввода. (К старому маковскому формату перевода строки и юникоду я так уж и быть придираться не буду раз ввода нет).
В общем считаю что мой код на 319 символов
if(!file_exists($filename) || !is_readable($filename)) throw new Exception('Bad file or filename');$handler = fopen($filename, 'r');if($handler == FALSE) throw new Exception('Bad file or filename');//while(!feof($handler)) { $line = fgets($handler); echo 'http://' . $line . PHP_EOL;}fclose($handler);
"круче" милторговского на 19 символов
***смайлик_с_языком***---------- Добавлено 13.02.2017 в 14:48 ----------
Покажите плиз весь Ваш код. а то "доменов много" в моем понимании это например файл-зоны дотком. Если не ошибаюсь там гига 3-4 файлик, если только домены, без служебной инфы. Плохо помню перл, но мне кажется вы задохнетесь по оперативке.
Вот это вот вообще классика психиатрии. Какое практическое применение этого бага вашей кривой реализации?
Ну строго говоря эта олимпиада таки по теме топика.
ТС (или кто другой пришедщий на сайт с таким же вопросом) нифига конечно не поймет в обсуждаемом коде, но по комментариям может понять почему дешевые дешевы а дорогие дороги, и сможет понять что в его КОНКРЕТНОМ случае лучше.---------- Добавлено 13.02.2017 в 13:40 ----------
Ну если модераторы ее попилят на две то я только за). А так то уже поздно отделять. По идее тут по батлу только код правильного решения осталось услышать.
Для того чтобы выбор был осознанным - необходимо ТЗ.
То что в стартпосте это бриф а не ТЗ. Примерно понятно направление, но не понятны цели. Советовать решение на данной стадии - не очень удачная идея.
Специалист способный подробно ставить задачи и т.п. стоит от 15 баксов.
Специалист способный их выполнять - от 5 баксов.
Ну это так. К слову.
Вернемся к нашей "олимпиаде".
Суть олимпиады у нас следующая: если вы проходите мои тесты, то можете изменить стоимость часа свой работы с 1 бакса до 5 баксов. Если я пройду ваши тесты, то я могу изменить мою стоимость часа с 25 баксов до 1,5 бакса. Ок.
Начнем наш батл.
Начнем с Вашей задачи, и собственно на ней и закончим.
Первое замечание - всё начинается с ТЗ. Это фундамент.
В вашем ТЗ нет ни языка, ни формата, ни цели. Ни даже размера входного потока. "Много" это не постановка задачи.
Поэтому я буду предполагать то что захочу. Предположу csv, по одному домену на строку, первая колонка это домен, дальше ничего нет или есть - не важно.
Замечание второе, на котором мы оба проваливаем тест.
Задача требует написание этого решения в одну строку. В задаче выполняется три действия и одна строка. Это нарушает все возможные стандарты кодирования поскольку выигрыша в скорости не будет, а читаемость кода ухудшается. Программирование в 21-ом веке это не соревнование в браинфаке (есть такой язык мозгодробильный для тех кто не знает) а написание поддерживаемого кода с которым и ты завтра сможешь работать, и другой. Переиспользование и всё такое. Итого вы провалили тест потому что задали такой вопрос, я потому что отказываюсь его решать.
Поскольку мы не принимали никаких стандартов, то я готов отойти от PSR и написать в две строки. В лоб это будет что-то вроде:
$inputData = s()->import->csv($filename,[0=>'domain']); foreach($inputData as $line) echo 'http://' . $line->domain . PHP_EOL;
Импорт конечно разберет любой размер файла, но во многих случаях при гигабайтных файлах выходной буфер может лечь по памяти.
Нолик в массиве имен полей естественно можно опустить, его я добавил чтобы было понятнее откуда взялось domain.
Если предположить что данных на входе будет не так много, мегабайт 100-200, и мы хотим без хелперов обойтись то можно набросать что-то вроде:
if(!file_exists($filename) || !is_readable($filename)) throw new Exception('Bad file or filename'); $handler = fopen($filename, 'r'); if($handler == FALSE) throw new Exception('Bad file or filename'); // while(!feof($handler)) { $line = fgetcsv($handler); echo 'http://' . $line[0] . PHP_EOL; } fclose($handler);
Или тоже самое в "олимпиадном стиле", т.е. без проверок на ошибки, закрытий потоков и т.п. грязных вещей.
$handler = fopen($filename, 'r'); while(!feof($handler)) { $line = fgetcsv($handler); echo 'http://' . $line[0] . PHP_EOL; }
Еще немного изнасилуем глаза того кто будет читать:
$h=fopen($f,'r'); while(!feof($h)){ $l=fgetcsv($h); echo 'http://'.$l[0].PHP_EOL; }
Выберем менее универсальный формат. Пусть у нас кроме имени домена ничего нет, так что мы можем использовать символ конца строки из изначальной строки при выводе. Ограничиваем условия входа и выхода, но у нас же олимпиада а не работа да?
$h=fopen($f,'r'); while(!feof($h))echo'http://'.fgets($h);
Следующее изнасилование с переносом присвоения в условие:
$h=fopen($f,'r'); while($d=fgets($h)) echo 'http://'.$d;
53 символа и это предел который могут выдержать мои глаза.
Вроде должно сработать что-то вроде
for($h=fopen($f,'r');$d=fgets($h);echo'http://'.$d)
Но это всего 51 символ, никак не 19 символов а изнасилование глаз уж слишком жестокое (я вот даже не могу сказать будет ли оно работать вот так сходу.
Ну ок, ну допустим уйдем в консоль, тогда
for(;$d=fgets(STDIN);echo'http://'.$d)
38 символов. Все равно много.
Ну пусть будет
for(;;echo'http://'.fgets(STDIN))
33 символа, или оно же, более читаемое на 1 байт больше т.е. 34 символа.
while(1) echo'http://'.fgets(STDIN)
В общем сдаюсь, давайте ваше супер-бупер-решение на 19 байт.---------- Добавлено 13.02.2017 в 13:11 ----------
Ы. Не вижу кода, но может оно и к лучшему)
Не вижу где речь шла о перл. Я что-то пропустил?
Вот нифига из вашего задания не понятно такого)
Тогда надо еще и последний домен удалять? Или каждый четвертый?)
Вообще почитав комментарии сложилось ощущение что вы подводили к тому что знаете какой-то dirty hack с заменой EOL на протокол + EOL. Но в принципе даже если и так, то дальше я в любом случае пасс, мы уже доказали что работать за 1,5евро в час я не смогу. Не справлюсь.
borisd, да оно и вправду не для делания. Привык верить людям. По сто раз встречал на форуме шуточки про Милторга, дай думаю спрошу, вдруг хоть половину слов поймет. Тогда могло бы быть и долгосрочное сотрудничество. Эта задача все равно из "долгого ящика". Вполне допускаю что этот костыль доживет и до публичного релиза. Даже скорее доживет. Все равно после новой версии ядра надо будет переписывать, так что черт с ним.
Задача то отрефакторить готовое.
JS и верстка готова, все работает и все такое.
По сути надо swith на 300 строк (два свича) раскидать по паре десятков родственных классов (уже существующих) да на место свичей закинуть соответствующий код вызова. Верстку особо трогать не нужно, может что-то заметить, но в основном просто интеллектуальная правка имен и т.п.
Тут больше половины работы - тесты. Всё остальное не столько делать сколько понимать.
Не. Там реально задача по 15 баксов по уровню. Единственное в чем я слукавил - в 10 часов сырой мидл не уложится ибо уйдет много времени на знакомство с фреймворком. Но человек который в теме, то да, так и будет.
Жаль, очень жаль. Заказов по 10 баксов в час очень много, жаль людям постоянно отказывать ;)
Приблизительный ключ если хочется сравнить по мутагену это будет что-то вроде "уход за собакой киев". Думаю по масштабу Франкфурт будет соизмерим.
С другой стороны ТАМ это чуть более востребовано. В общем контент решает, и 90% трафа будет информационные запросы.
Плачу 5 евро в час, если сделаете хорошо - по 10 евро работы хватит.
Нужно отрефакторить виджет активформы и покрыть его тестами.
достаточно пхпюнит. Там всего около 40 классов.
Валидация, все функции хтмл5 + жс-валидация, естественно бекенд-валидация отдельно, но вам ее нужно отобразить. Типов полей штук 20 всего.
Естественно нужно соблюдение основных PSR, валидно "кросбраузерно" и .т.п.
Вынесение в отдельный репозиторий для композера.
Работы там часов на 10.
От меня доступ к битбакету и два килобайта более подробного ТЗ. Коммитите пулреквест с готовым результатом - перечисляю гонорар.
Подходит задача?
У меня дядя известный американский художник. Я знаю сколько стоят его картины.
Мои дети - 2 и 6 лет гуашью разрисовали стену.
Абстракционизм. Просто краску по стене размазали.
Сколько будет не дорого за их картину? Да нисколько.
Хотя цвета подобраны хорошо. Гены не пропьешь. Но и на стену не повесишь)
Ваш с позволения сказать "сайт" это демонстрация способности установить ЦМС на хостинг. Демонстрация ваших навыков. Всё.
Если бы это была установка чистого вордпресса с выбором одной из тем из их каталога бесплатных тем и заполнением несколькими записями или статьями - тупо копипастой из википедии, чисто для вида, то я бы понимал о чем речь идет.
Можно было бы говорить дешево или дорого. Но тут? Что это? Сайт? Правда?
Любой конструктор сайтов на любом хостинге (у испманагера есть к примеру) или автоустановка из панели хостинга любой базовой ЦМС в один клик - даст ровно столько же. Бесплатные варианты естественно.
Но хрен с ним. Бывает.
Можно и такое продать.
Не важно за сколько. Важно что можно.
Только работой здесь будет не нажатие одной кнопки, а объснение клиенту что же он хочет, и объяснение и обучение минимуму работы с админкой.
А это уже не 2 евро.
Ну нет, может и 2. Всяко может. Но... это не входит в стоимость)))).
А что входит? Знание на какую кнопку у хостера нажать чтобы автоматом ЦМС поставилась?