Мне нравится участвовать в математических олимпиадах, проводимых Му Альфа Тета, обществом по чести математики в Соединенных Штатах. На соревнованиях я беру 30 вопросов с несколькими вариантами ответов. Есть пять вариантов ответа на вопрос, обозначенные буквами от A до E.
Моя оценка по тесту - четыре балла за каждый правильный ответ, ноль баллов за оставленный вопрос пустым и минус один балл за каждый неправильный ответ.
Напишите программу, которая оценивает тест в соответствии с вышеупомянутой системой оценки. На входе должно быть два компонента: ключ ответа, за которым следуют ответы. Вопросы, оставленные пустыми, должны быть введены как пробелы. Первый вход должен содержать только буквы AE (или ae, по вашему выбору), и можно предположить, что во входе нет пробелов. Второй вход должен содержать только пробелы и буквы AE (или ae). Входы, не реализующие тесты из 30 вопросов, должны печататься Invalid test
как выходные данные.
На выходе должна быть оценка или Invalid test
.
бонус
Если ваша программа печатает число справа, число оставлено пустым, а число неверно после итоговой оценки как (aR bB cW)
, снимите 20 байтов.
Пример ввода
CABBDCABECDBACDBEAACADDBBBEDDA //answer key
CABEDDABDC BACDBBAADE CBBEDDA //responses
Образец вывода
Нет бонуса
73
бонус
73 (20R 3B 7W)
Стандартные правила применяются. Самый короткий код в байтах побеждает.
Invalid test
,Ответы:
Pyth,
5351Попробуйте онлайн
Проверки выполняются путем проверки того, содержат ли все входные данные какие-либо символы при
a-e
удалении всех пробелов , и путем проверки длины обеих строк30
.Расчет баллов производится проносясь две строки вместе, а затем путем отображения каждой паре:
(letters are equal) ? 4 : -1
. Затем просто суммируйте значения и добавьте количество пробелов во второй строке обратно к результату.источник
Серьезно , 86 байтов
Принимает вход как
"CABBDCABECDBACDBEAACADDBBBEDDA", "CABEDDABDC BACDBBAADE CBBEDDA"
Попробуйте онлайн (вам придется вручную вводить данные, потому что постоянные ссылки не любят кавычки)
Работаем над бонусом сейчас.Нет, добавление бонуса будет стоить более 20 байтов.Я знал, что что-то забыл ...
Invalid Test
не печатался в случае ошибки. Мои надежды на то, чтобы выйти за пределы Денниса.источник
JavaScript (ES6), 134 байта
Изменить: Требования к вопросу изменились. Это ответ, когда программе нужно было убедиться, что каждый символ ответа - AE, каждый символ ответа - AE или пробел, и они оба имеют длину 30, в противном случае возвращается
Invalid test
.объяснение
Тестовое задание
источник
CJam, 60 байтов
Попробуйте онлайн в интерпретаторе CJam .
источник
JavaScript (Firefox 31+), 86 байт
Использует понимание массива, которое предлагается для ES7. Таким образом, поддержка ограничена Firefox на данный момент.
С бонусом 106 байт (126 - 20)
Изменить: Ранее мое решение проверял только ответ или длину вопроса, теперь проверяет оба.
Показать фрагмент кода
источник
f=
в начале и сказать, что это генерирует лямбда-функцию.(x,y)=>(r=i=0,[for(l of y)x[i++]==l?r+=4:r-=l!=' '],i!=30|i-x.length?'Invalid test':r)
Japt , 71 байт
Japt - это сокращенная версия Ja vaScri pt . переводчик
Два
.
символа s в конце должны быть непечатаемыми символами Unicode U + 0017 и U + 0099 соответственно.Как это устроено
Я надеюсь, что есть более короткий способ убедиться, что обе длины равны 30. Предложения приветствуются!
источник
Haskell,
144138 байтБыло бы около 50 без проверки. сопение .
Использование:
"ABCDEABCDEABCDEABCDEABCDEABCDE" % "AAAAABBBBBCCCCCDDDDDEEEEEAAAAA"
источник
!
может быть определен какall(`elem`l)s
, экономя 6 байтов.g=all.flip elem
.C #,
162154148134 байтаиспользование
Тестовое задание
http://csharppad.com/gist/15f7c9c3c8cfce471ff2
источник
int s=0,i=0;for(;...
чтобы сохранить 3 байта.Рубин, 81 символов
Образец прогона:
источник
Джава,
183169 байтЭто была хорошая практика Java 8:
источник
String.valueOf
, просто добавив int к пустой строке (""+IntStream....
) - я также считаю, что Java допускает короткое замыкание и, поэтому вы можете удалить один из&
и сохранить байт ,брейкфук, 354 байта
Требуется интерпретатор, который позволяет вам идти влево от ячейки 0. Вывод является подписанным байтом. Например, байт
0x49
печатается для примера ввода и0xFF
печатается для ввода с той же первой строкой, но второй строкой, замененной на «C» и 29 пробелов.Счет начинается с 0, и когда читается вторая строка ввода, в него вносятся следующие изменения:
Наконец, 120 добавляется. Функционально это то же самое, что предполагать идеальный счет и применять штрафы, а не начинать с 0.
С комментариями:
источник
Python 3,
187 179 175 165 155151источник
JavaScript ES7, 102
Как обычно, бонус не стоит усилий.
Проверка на недопустимые пробелы в первом вводе (как это имеет смысл для меня) 112
источник
(k,r,s=0)=>/^[A-E]{30}$/.test(k)&&/^[ A-E]{30}$/.test(r)?Object.keys(k).map(i=>k[i]==r[i]?s+=4:s-=r[i]!=' ').pop():'Invalid Test'
это 129 байт.Python 2.7,
131, 116, 109, 139Я попытался сделать "короткое" решение Python ... Ну вот, предложения более чем приветствуются
Добавление еще нескольких символов делает его более читабельным ...
источник
Пролог, 165 байт
Более половины байтов предназначены для проверки недействительных тестов.
Код:
Разъяснение:
Пример:
Попробуйте это онлайн здесь
источник
MATLAB,
9290 байтСпасибо Тому Карпентеру за помощь в уменьшении моего ответа на 2 байта!
Функцию можно вызвать, назначив лист ответов q и отправив ответы a . например:
Ответ просто выводится на экран. 8 байт можно сохранить, если разрешено печатать ans = 73
источник
numel(q)
наnnz(q)
.C # 6.0 ->
(270 - 20 = 250)246 - 20 = 226 байтовЧитаемая и разглаженная версия:
Очень хотел получить бонус: D
источник
i
вместе сs
циклом for. Вы можете использоватьvar
для объявленияa
, сохраняя 1 байт (ура!). Вам не нужно много фигурных скобок{}
в вашем коде, что всегда является хорошим способом обрезать байты, и всегда стоит взглянуть на таблицу ASCII при сравнении символов (вы можетеc[i]==' '
немного сбить байт , используя неравенство). Вам также следует рассмотреть возможность подсчета строк в обратном направлении - в этом случае вы можете сэкономить не менее 1 байта, перенастроив цикл for.Groovy 2.4.5, 107 байт
Просто простой перевод более раннего ответа Java .
источник
C 273 - 20 = 253 байта
Я взял бонус, хотя он стоил мне 23 байта, чтобы распечатать его. :-(
объяснение
Для проверки правильности ввода вдвое больше кода, чем для подсчета ответов - настоящая суть проблемы в
for
цикле ближе к концу. Фактически, вот версия, которая предполагает, что ввод всегда действителен, в 163-20 = 143 байта:И тот, который делает то же самое предположение и печатает только результат в 133 байта:
источник
SAS 9,4, 291-20 = 271 байт (с бонусом) или 231 байт (без бонуса)
С бонусом:
Без бонуса:
Sas на самом деле не имеет ввода / вывода, поэтому вам нужно заменить k = '..' ключом, а r = '..' ответом. Вывод распечатывается в журнал.
источник