хм... я так понимаю вы все решения достаете после окончания конкурса...
думаю не будет ошибкой если я просто отредактирую свое сообщение
тогда и удалять ничО не прийдется:0113:
Вид для печати
хм... я так понимаю вы все решения достаете после окончания конкурса...
думаю не будет ошибкой если я просто отредактирую свое сообщение
тогда и удалять ничО не прийдется:0113:
Итак, мои оценки за задание "Римские цифры". Как я оценивал.
Я составил 20 записей римских цифр (легкие, средние и каверзные). Ваши коды должны были их правильно обработать. Каждый верный ответ - 0,5 балла. Итого, 10 баллов за 20 правильных ответов. 20 правильных ответов не дал никто. Лишь два скрипта дали 15 правильных ответов. Это acad и decoder. Плюс еще я оценивал в целом код. Вы могли получить как плюс несколько баллов, так и минус.
Победители этого задания стали:
acad и decoder по 7 баллов
PoHePist - 6 баллов
Для проверки использовался следующий код, который запускался в консоли сервера:
<?php
require_once "your_file.php";
$input = array('ICD',
'IIIIIIIIIIIIIIII',
'VIIIIIIIIIII',
'VVIIIIII',
'XIIIIII',
'VVVI',
'XVI',
'XIX',
'IIM',
'VIIIX',
'IIIIIVIVIIII',
'IIIIIVIVIIIILXMCCCLMII',
'CIIIIIVIVIIIILXMCCCLMII',
'IIIVIIIIIIIII',
'IVX',
'IIIX',
'IIVIIII',
'MCMXCIX',
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII',
'MMMCMXCIX');
$temp = array(401,
16,
16,
16,
16,
16,
16,
19,
1000,
16,
16,
2328,
2428,
17,
6,
11,
9,
1999,
49,
3999);
$output = array('ICD',
'XVI',
'XVI',
'XVI',
'XVI',
'XVI',
'XVI',
'XIX',
'M',
'XVI',
'XVI',
'MMCCCXXVIII',
'MMCDXXVIII',
'XVII',
'VI',
'XI',
'IX',
'MIM',
'IL',
'MMMIM');
$points = 0;
for ($i = 0; $i < count($input); $i++) {
$participant = your_function($input[$i]);
echo $input[$i]." - ".$participant." - ".$temp[$i]." - ".$output[$i]."\n";
if ($participant == $output[$i]) {
$points++;
}
}
echo $points."\n";
?>
Вывод результатов:
Входное число - результат участника - арабский эквивалент - самый короткий вариант
Например,
acad 7 баллов (-0,5 за лишний код)
ICD - CCCIC - 401 - ICD
IIIIIIIIIIIIIIII - XVI - 16 - XVI
VIIIIIIIIIII - XVI - 16 - XVI
VVIIIIII - XVI - 16 - XVI
XIIIIII - XVI - 16 - XVI
VVVI - XVI - 16 - XVI
XVI - XVI - 16 - XVI
XIX - XIX - 19 - XIX
IIM - M - 1000 - M
VIIIX - XVI - 16 - XVI
IIIIIVIVIIII - XVI - 16 - XVI
IIIIIVIVIIIILXMCCCLMII - MMCCCVI - 2328 - MMCCCXXVIII
CIIIIIVIVIIIILXMCCCLMII - MMCDVI - 2428 - MMCDXXVIII
IIIVIIIIIIIII - XV - 17 - XVII
IVX - IV - 6 - VI
IIIX - XI - 11 - XI
IIVIIII - IX - 9 - IX
MCMXCIX - MIM - 1999 - MIM
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII - IL - 49 - IL
MMMCMXCIX - MMMIM - 3999 - MMMIM
В аттаче файл со всеми результатами. Чтобы быстро узнать, сколько ваш скрипт дал правильных ответов произведите вычисления полученных баллов с баллам в скобках и умножьте на два. Например,
acad 7 баллов (-0,5 за лишний код): (7 + 0,5) * 2 = 15 правильных ответов
vvsh - 5 баллов (+1 балл за чистоту кода): (5 - 1) * 2 = 8 правильных ответов
ЗЫ. Я оценивал только задания поданные до сообщения ведущего конкурса. Кто подал позже, могут самостоятельно проверить свой код.
Объясните, пожалуйста, почему везде, где выводятся имена пользователей, их количество всегда больше на 1?
Хотя бы на главной - пользователей 14, а в списке 13 ников :)
А, ну тогда вопросов нет :)
Mulder, можно пояснить лишний код? просто ради интереса, ибо я лишнего не вижу.
С точки зрения пользователя вашего класса у вас лишний код. Правильнее было бы сказать - лишние действия со стороны пользователя. С вашей же точки зрения, точки зрения разработчика класса, код не дописан.
Задача стояла в представлении самого короткого варианта записи. Меня как пользователя вашего класса не должны интересовать подробности реализации: делаете ли вы преобразования на прямую, переводите ли в арабскую систему, систему древних шумеров или систему индейцев майя. Это должно быть скрыто от конечного пользователя вашего продукта. Т.е. говоря сухим языком, не должно быть конструкций вроде:
$conn->arab2rome($conn->rome2arab($number));
Я, как пользователь вашего класса вправе ожидать только такой метод:
$conn->short_rome($number);
А уже вызовы методов arab2rome и rome2arab должны происходить внутри вашего класса. Т.е. у вас немного неверен сам принцип организации класса.
Можно привести классический пример с движением фигуры. Обычно движение делается через затирание и перерисовку фигуры в новом месте. Если делать это быстро и через малые расстояния, то получается эффект движения. Если я хочу передвинуть фигуру на 20 позиций по оси X и на 20 позиций по оси Y, то следуя вашему принципу, я должен по 20 раз вызвать методы затирание объекта-передвижение по оси X-прорисовка объекта-затирание объекта-передвижение по оси Y-прорисовка объекта. Согласитесь, что эти действия должны вызываться внутри вашего класса, но их не должен вызывать пользователь этого класса. Для пользователя должен существовать один единственный метод: moveBy(20, 20).