Вступление
Для тех, кто не знаком с паром - или, по крайней мере, этот конкретный аспект:
Часто в профилях людей люди оставляют комментарии со словами "+ rep _____" или "-rep _____". Это неофициальный способ показать, считаете ли вы, что кто-то в сообществе имеет хорошую или плохую репутацию по ряду причин. Такие комментарии выглядят так:
+ репутация хорошего игрока
+ репутация полезна
-репак хакер
мошенник
задача
Программа должна принимать участие любым согласованным способом. Входные данные состоят из строки с необязательными символами новой строки ( \n
). В самом начале каждой строки, '+rep '
или '-rep '
может присутствовать. Остальная часть линии может быть отброшена. Если строка не начинается с '+rep '
или '-rep '
(обратите внимание на завершающий пробел), строка должна игнорироваться.
Затем программа должна вести итоговую оценку репутации. Начиная с 0
этого значения следует увеличивать каждую строку, начинающуюся с, '+rep '
и уменьшать каждую строку, начинающуюся с '-rep '
.
Этот результат должен быть выведен любым согласованным способом.
Контрольные примеры
Input:
+rep fast trade
+rep nice person
-rep too good
Output: 1
Input:
-rep hacker
-rep scammer
-rep was mean
Output: -3
Input:
first
i don't like him
+rep good at cs go
Output: 1
Input (note the lack of a trailing space on the third line):
+rep +rep
hi +rep
-rep
Output: 1
Input:
+ rep
Output: 0
Input:
+rep like
-thing
Output: 1
бонус
Я даже не знаю, возможно ли это, но бонусные баллы, если вы можете как-то получить эти комментарии от Steam.
0
, а не1
.Ответы:
05AB1E ,
181617 байтСохранено 2 байта благодаря байту Okx
+1 из-за изменения спецификации, где после rep теперь должен следовать пробел.
Попробуйте онлайн!
объяснение
источник
ð¡0è
на4£
. Я работал над решением этой проблемы одновременно с вами.|ðý#D'·Ý©.åÏ®1:O
может быть 14 или 15, я просто не вижу этого. Также застрял на 16, может быть, это поможет вам, хотя. Я оставлю это здесь. В основном, заменяя слово «rep» числом «1», вы можете направить сумму.0|vy4£'·Ý1:R.V
не работает для строк, не начинающихся с +/- rep. Вернуться к чертежной доске :(Python 3, 73 байта
Я уверен, что этот ответ - мусор и скоро будет побежден, но других ответов на Python пока нет
Используйте как это:
Извлечение из пара
Вот пример кода, который выбирает первые 100 комментариев из профиля KennyS и вычисляет его репутацию.
источник
if"rep"==i[1:4]
для -1Perl 5 , 25 байт
24 байта кода +
-p
флаг.Попробуйте онлайн!
/^\+rep /
возвращает,1
если строка начинается с+rep
;/^-rep /
возвращается,1
если строка начинается с-rep
(поэтому только один из них будет один максимум). Мы используем$\
для хранения результата, так как он неявно печатается в конце (благодаря-p
флагу и непревзойденному результату}{
).источник
Python 2 , 54 байта
Попробуйте онлайн! Принимает многострочную строку в качестве ввода.
Считает появления
'+rep '
и'-rep '
только в начале строк путем поиска строки, следующей за символом новой строки. Чтобы поймать первую строку, перед вводом добавляется новая строка.источник
Retina ,
63515049 байтНе совсем соответствовал спецификации, поэтому я исправил некоторые проблемы, но также много играл в гольф (позаимствовав первую строку из решения Kritixi Lithos).
Сохраненный еще один байт благодаря Kritixi Lithos.
Попробуйте онлайн!
объяснение
Во-первых, все входные данные удаляются, кроме
+
и-
из любого+rep
или-rep
в начале строки.Затем соседние пары
+
и-
удаляются, пока больше не могут быть удалены. После этого остается либо+
s, либо-
s, либо ничего.Затем последовательность из одного или нескольких символов (либо,
+
либо-
) заменяется символом, составляющим цикл, за которым следует длина цикла. Таким образом,+
сохраняется в начале для положительных результатов и-
для отрицательных.Затем все
+
s удаляются, если репутация положительная.Наконец, если строка в этой точке пуста, значение rep равно 0, поэтому мы пишем 0.
источник
|¶
оставить и добавитьs
(однострочный режим) послеm
первой строкиJavaScript, 55 байт
Спасибо @Neil за игру в гольф от 12 байтов Спасибо @Arnauld за игру от 2 байтов
Попробуйте онлайн!
Показать фрагмент кода
источник
split
вместоmatch
(он всегда возвращает массив, который на 1 больше, чем обычно требуется, но две единицы отменяются). Я также попытался устранить дублирование, но оно снова оказалось на 57 байтах.Mathematica, 47 байт (кодировка ISO 8859-1)
Чистая функция, принимающая строку, разделенную символом новой строки, и возвращающая целое число. Обратите внимание, что три символа новой строки в коде заключены в кавычки и, таким образом, каждая эквивалентна
"\n"
строке (но этот путь на один байт короче"\n"
).StringCount
выполняет тяжелую работу; мы вручную добавляем новую строку в начало строки, чтобы первая строка соответствовала при необходимости.±
это одинарная функция помощи, чтобы избежать повторенияStringCount
.Альтернативное решение
на 4 байта длиннее, но мне нравится последовательность
±"+"-±"-"
....источник
Сетчатка ,
59535250 байтПопробуйте онлайн!
Ознакомьтесь с кратким ответом Basic Sunset на том же языке!
объяснение
Удаляет все, кроме
[+-]rep
s.Неоднократно удаляет 1
-
для каждого+
и наоборот.Добавьте a
-
(поскольку число отрицательное) к-
s, а также заменив-
s на число-
s.Сделайте то же самое для
+
s, но не добавляйте a-
.Наконец, если ничего нет, замените его на
0
.источник
PHP, 118 байт
Попробуйте онлайн!
Используется так:
источник
Рёда , 53 байта
Попробуйте онлайн!
источник
Java, 109 байт
Попытка сделать это короче , используя
Stream
«ю.ш.источник
С накоплением , 45 байтов
Попробуйте онлайн!
В качестве альтернативы (49 байтов):
объяснение
Это в основном извлекает все
+
или-
присоединяется к началу строки иrep
. Затем каждому из них предшествует#
. Затем ко всему этому0
добавляется a .#~
оценивает строку, которая теперь выглядит примерно так:#+
это увеличение и#-
уменьшение. Таким образом, мы получаем желаемый результат.источник
Сетчатка , 38 байт
Попробуйте онлайн!
Другое (и более короткое) решение, чем те, которые уже опубликованы в Retina.
объяснение
(Эта строка имеет завершающий пробел). Сохраняйте только соответствующие части ввода, то есть
+rep
или-rep
в начале строки.Сортировка всех символов (включая переводы строки). это поместит + s и -s рядом друг с другом.
Повторно удаляйте
+-
пары, пока не останется не более одного из двух признаков.Соответствуйте первому
-
(если есть) и распечатайте его без изменения строки.Подсчитайте количество оставшихся знаков и распечатайте его, так как это последний этап программы.
источник
C #, 87 байт
Анонимная функция, которая разбивает входную строку с помощью символа новой строки, ищет строку «rep» с префиксом символа и, если находит, увеличивает репутацию (
n
переменную) на 1 или -1.Полная программа с методикой ungolfed и тестовыми примерами:
Обратите внимание, что код ASCII для
+
равен 43, а для-
равен 45. Этот метод проходит все тестовые случаи из OP. Однако, если первый символ - это что-то другое, это приведет к неправильным ответам!Это может быть исправлено за счет 17 байт:
C # исправлено, 104 байта
Измененная анонимная функция будет проверять наличие
+
или-
подпись в качестве первого символа в каждой строке.источник
Japt , 14 байт
Попробуйте онлайн!
+1 байт за
-x
флагисточник
C ++, 144 байта
Попробуйте онлайн!
источник
C # , 104 байта
Несмотря на то, что уже существует одно решение - а у меня - больше, - я все еще думаю, что должен опубликовать его, поскольку уже включенное здесь может потерпеть неудачу, если что-то вроде
'=rep '
будет мешать.Golfed
Ungolfed
Ungolfed читаемый
Полный код
релизы
104 bytes
- Исходное решение.Примечания
Нечего добавить
источник
Рубин, 46 байт
Получить все +/- повтор от ввода и собрать в одну строку. Затем оцените это для rep = 1.
источник
JavaScript ES6,
8579 байтПопытайся
Ungolfed
история
85 байт
источник