нужно сделать портал!

Prior
На сайте с 03.03.2008
Offline
184
#101
langemark:
Ваша правда. Под требования ТС вполне будет пригоден DLE с некоторыми доработками и привязками. Чего я и рекомендую. Бюджет - минимален, а с заявленными требованиями движок, вполне, справится.

Очень повезёт, если удастся подобрать набор готовых плагинов под ДЛЕ, чтобы реализовать все пункты ТЗ (и скорее всего всё-таки придётся допиливать плагины под требования либо менять требования). И с учетом того какого качества код зачастую оказывается внутри всех этих плагинов под ДЛЕ, очень сомневаюсь, что по итогу получится соответстовать этим требованиям:

1. Безопасность

2. Скорость

3. Надежность

И далеко не редкой является ситуация, когда потратив кучу денег, времени, нервов на такую вот экономию, потом плюют на то, что уже сделано, и заказывают разработку с нуля.

Впрочем тут у каждого своя правда. Кто-то специалист по готовым решениям и видит их преимущества (дешевизна, зачастую скорость разработки), кто-то делает сайты "с нуля" и, соответственно, тянет одеяло в свою сторону. Хотя конечно "долго, дорого" (с). По факту сейчас применяются оба подхода, и у каждого свои сторонники. Так что выбор за заказчиком и неплохо бы, чтобы этот выбор был осознанным :)

Ответы на вопрос - https://answers.net.pl
mendel
На сайте с 06.03.2008
Offline
232
#102
Prior:
Так что выбор за заказчиком и неплохо бы, чтобы этот выбор был осознанным

Для того чтобы выбор был осознанным - необходимо ТЗ.

То что в стартпосте это бриф а не ТЗ. Примерно понятно направление, но не понятны цели. Советовать решение на данной стадии - не очень удачная идея.

miltorg:
Да. Разбивайте на более мелкие задания - часа на 3 и можем хоть сейчас начинать

Специалист способный подробно ставить задачи и т.п. стоит от 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 ----------

Aisamiery:
Вот код (тут и ввод и вывод):

Ы. Не вижу кода, но может оно и к лучшему)

Aisamiery:
Кто шарит в perl

Не вижу где речь шла о перл. Я что-то пропустил?

miltorg:
В конце результата должно быть http:// - см. исходное задание.

Вот нифига из вашего задания не понятно такого)

Тогда надо еще и последний домен удалять? Или каждый четвертый?)

Вообще почитав комментарии сложилось ощущение что вы подводили к тому что знаете какой-то dirty hack с заменой EOL на протокол + EOL. Но в принципе даже если и так, то дальше я в любом случае пасс, мы уже доказали что работать за 1,5евро в час я не смогу. Не справлюсь.

Шутку любишь над Фомой, так люби и над собой. (с) народ. Бесплатные списки читабельных(!) свободных доменов (http://burzhu.net/showthread.php?t=2976) (5L.com) Сайты, All inclusive. 5* (/ru/forum/962215)
danforth
На сайте с 18.12.2015
Offline
153
#103

Обожаю битвы милторга с вменяемыми участниками форума.

Junior Web Developer
Arakss
На сайте с 24.03.2016
Offline
36
#104

Почему бы эту битву не запилить в отдельной теме? Было б интересно посмотреть за развитием событий. Тут ТС свой вопрос все-таки решает.

Dokkino.org (http://dokkino.org)
mendel
На сайте с 06.03.2008
Offline
232
#105
danforth:
Обожаю битвы милторга с вменяемыми участниками форума.

Ну строго говоря эта олимпиада таки по теме топика.

ТС (или кто другой пришедщий на сайт с таким же вопросом) нифига конечно не поймет в обсуждаемом коде, но по комментариям может понять почему дешевые дешевы а дорогие дороги, и сможет понять что в его КОНКРЕТНОМ случае лучше.

---------- Добавлено 13.02.2017 в 13:40 ----------

Arakss:
Почему бы эту битву не запилить в отдельной теме? Было б интересно посмотреть за развитием событий. Тут ТС свой вопрос все-таки решает.

Ну если модераторы ее попилят на две то я только за). А так то уже поздно отделять. По идее тут по батлу только код правильного решения осталось услышать.

[Удален]
#106
mendel:

Но это всего 51 символ, никак не 19 символов а изнасилование глаз уж слишком жестокое (я вот даже не могу сказать будет ли оно работать вот так сходу.
Ну ок, ну допустим уйдем в консоль, тогда

В общем сдаюсь, давайте ваше супер-бупер-решение на 19 байт.

---------- Добавлено 13.02.2017 в 13:11 ----------


Ы. Не вижу кода, но может оно и к лучшему)

Не вижу где речь шла о перл. Я что-то пропустил?

Вот нифига из вашего задания не понятно такого)
Тогда надо еще и последний домен удалять? Или каждый четвертый?)
Вообще почитав комментарии сложилось ощущение что вы подводили к тому что знаете какой-то dirty hack с заменой EOL на протокол + EOL. Но в принципе даже если и так, то дальше я в любом случае пасс, мы уже доказали что работать за 1,5евро в час я не смогу. Не справлюсь.

#!/usr/bin/perl

$_=q~

karta-kryma.ru

nomer-aski.ru

icq-besplatno.ru

besplatnyj.ru

raskrutka-sajtov.ru

karty-oblasti.ru

vid-ulic.ru

potrebitel-ne-prav.ru

juvelirnyj.ru

radio-onlajn.ru

tury-po-evrope.ru

televidenie-onlajn.ru

but-s.ru

avtomobil-prodazha.ru

vyrazhenija.ru

slushat-radio.ru

~;

s/\n/\nhttp:\/\//g;# 19 символов

print;

------------------------------

Язык решения не важен. Я просто по опыту знаю что такие вещи на Перле решаются легко и изящно

Aisamiery
На сайте с 12.04.2015
Offline
311
#107
mendel:

Ы. Не вижу кода, но может оно и к лучшему)

Вот такой там код на скрине, в одной строке все 3 операции


while(<>){printf'http://'.$_;};
mendel:
Не вижу где речь шла о перл. Я что-то пропустил?

Да как бы там вообще не шла речь о языке в ТЗ, а хороший спец, как правило этот тот спец, который выбирает инструмент под задачу, а не наоборот))) Заметьте я никого не хочу назвать хорошим спецом или плохим

Разработка проектов на Symfony, Laravel, 1C-Bitrix, UMI.CMS, OctoberCMS
[Удален]
#108
Aisamiery:
Вот такой там код на скрине, в одной строке все 3 операции

while(<>){printf'http://'.$_;};



Да как бы там вообще не шла речь о языке в ТЗ, а хороший спец, как правило этот тот спец, который выбирает инструмент под задачу, а не наоборот)))

В коде Обе ; не нужны. Иначе вообще у вас получается 2 строки. Но они там не нужны.

Ваш код у меня выдаёт:

karta-kryma.ru

http://karta-kryma.ru

nomer-aski.ru

http://nomer-aski.ru

icq-besplatno.ru

http://icq-besplatno.ru

То есть не верно. Хотя... Я с консоли вообще никогда не работаю.

Aisamiery
На сайте с 12.04.2015
Offline
311
#109
miltorg:
Ваш код у меня выдаёт:

karta-kryma.ru
http://karta-kryma.ru
nomer-aski.ru
http://nomer-aski.ru
icq-besplatno.ru
http://icq-besplatno.ru


То есть не верно. Хотя... Я с консоли вообще никогда не работаю.

Если вы вводите домены руками, то все верно, он так и выдаёт. Вы должны на STDIN ввести весь список целиком как в ТЗ а не по очереди

Если у вас доменов много, то скорее всего они лежат в файле в вашем формате (хотя можно и Ctrl+C Ctrl+V), тогда вызов команды должен быть таким

cat domains.txt | perl test.pl

Если вы хотите записать результат в файл (так как доменов то много), то вызов будет таким:

cat domains.txt | perl test.pl > result.txt

Вообще консоль достаточно мощная и универсальная штука. Советую освоить. С консолью не знакомы разве что онли виндовс пользователи, но для вэб программиста, тем более хорошего это не свойственно, ибо всё окружение на никсах завязано (если конечно не под ASP идет разработка)

PS. Хотя преобразование такие на самом деле удобней делать через sed что я бы и сделал, но это уже не совсем к программированию

[Удален]
#110
Aisamiery:
Если вы вводите домены руками, то все верно, он так и выдаёт. Вы должны на STDIN ввести весь список целиком как в ТЗ а не по очереди

Если у вас доменов много, то скорее всего они лежат в файле в вашем формате, тогда вызов команды должен быть таким

cat domains.txt | perl test.pl


Если вы хотите записать результат в файл (так как доменов то много), то вызов будет таким:
cat domains.txt | perl test.pl > result.txt


Вообще консоль достаточно мощная и универсальная штука. Советую освоить. С консолью не знакомы разве что онли виндовс пользователи, но для вэб программиста, тем более хорошего это не свойственно, ибо всё окружение на никсах завязано (если конечно не под ASP идет разработка)

Девиз Перл: Простое не должно быть сложным.

Вот решение вашим способом:

#!/usr/bin/perl

$_=q~

karta-kryma.ru

nomer-aski.ru

icq-besplatno.ru

besplatnyj.ru

raskrutka-sajtov.ru

karty-oblasti.ru

vid-ulic.ru

potrebitel-ne-prav.ru

juvelirnyj.ru

radio-onlajn.ru

tury-po-evrope.ru

televidenie-onlajn.ru

but-s.ru

avtomobil-prodazha.ru

vyrazhenija.ru

slushat-radio.ru

~;

for (split/\n/){printf "http://$_\n"}

Но оно не даёт пустого http:// внизу

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий