Introdução
Para quem não conhece o vapor - ou pelo menos esse aspecto em particular:
Frequentemente, nos perfis das pessoas, as pessoas deixam comentários dizendo "+ rep _____" ou "-rep _____". Esse é um meio não oficial de mostrar se você acha que alguém da comunidade tem uma reputação boa ou má, por várias razões. Esses comentários são parecidos com:
+ rep um bom jogador
+ rep útil
-rep hacker
-rep scammer
Tarefa
O programa deve receber informações de qualquer maneira consensual. A entrada consiste em uma sequência com novas linhas opcionais ( \n
). No início de cada linha, '+rep '
ou '-rep '
pode estar presente. O restante da linha pode ser descartado. Se a linha não começar com '+rep '
ou'-rep '
(observe o espaço à direita), a linha deve ser ignorada.
O programa deve manter uma pontuação total de reputação. Começando em 0
, essa pontuação deve ser incrementada em todas as linhas que começam com '+rep '
e diminuída em todas as linhas que começam com '-rep '
.
Esse resultado deve ser produzido de qualquer maneira acordada.
Casos de teste
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
Bônus
Eu nem sei se é possível, mas pontos de bônus, se você puder obter esses comentários do Steam.
0
, não1
.Respostas:
05AB1E ,
181617 bytesEconomizou 2 bytes graças ao Okx
+1 byte devido a alterações nas especificações, onde agora o representante precisa ser seguido por um espaço.
Experimente online!
Explicação
fonte
ð¡0è
por4£
. Eu estava trabalhando em uma solução para isso ao mesmo tempo que você estava.|ðý#D'·Ý©.åÏ®1:O
pode ter 14 ou 15 anos, mas não estou vendo. Também preso aos 16 anos, talvez isso o ajude. Vou deixar aqui. Substituindo basicamente a palavra "rep" pelo número "1" para que você possa direcionar a soma.0|vy4£'·Ý1:R.V
não funciona para linhas que não começam com +/- rep. De volta à área de desenho :(Python 3, 73 bytes
Tenho certeza de que essa resposta é lixo e será vencida em breve, mas ainda não há outras respostas em python
Use assim:
Buscando do vapor
Aqui está um exemplo de código que busca os 100 primeiros comentários do perfil de KennyS e calcula seu representante.
fonte
if"rep"==i[1:4]
para -1Perl 5 , 25 bytes
24 bytes de código +
-p
sinalizador.Experimente online!
/^\+rep /
retorna1
se a linha começa com+rep
;/^-rep /
retorna1
se a linha começa com-rep
(portanto, apenas um deles será um no máximo). Usamos$\
para armazenar o resultado, pois ele é impresso implicitamente no final (graças ao-p
sinalizador e aos inigualáveis}{
).fonte
Python 2 , 54 bytes
Experimente online! Pega uma sequência multilinha como entrada.
Conta as aparências
'+rep '
e'-rep '
somente no início das linhas, procurando a sequência seguindo um símbolo de nova linha. Para capturar a primeira linha, uma nova linha é anexada à entrada.fonte
Retina ,
63515049 bytesComo não cumpri bem as especificações, resolvi alguns problemas, mas também joguei bastante (emprestando a primeira linha da solução da Kritixi Lithos).
Guardou outro byte graças a Kritixi Lithos.
Experimente online!
Explicação
Primeiro, tudo da entrada é excluído, exceto o
+
e-
de qualquer um+rep
ou-rep
no início de uma linha.Em seguida, pares adjacentes de
+
e-
são removidos até que não mais possam ser removidos. Depois disso, o que resta é uma sequência de+
s, uma sequência de-
s ou nada.Em seguida, uma corrida de um ou mais caracteres (
+
ou-
) é substituída pelo caractere que compõe a corrida seguido pelo comprimento da corrida. Dessa forma,+
é preservada no início para resultados positivos e-
negativos.Todos os
+
s são removidos, caso o representante seja positivo.Finalmente, se a string estiver vazia neste momento, o representante será 0, então escrevemos 0.
fonte
|¶
e adicione umas
(modo de linha única) após om
na primeira linhaJavaScript, 55 bytes
Obrigado @ Neil por jogar fora 12 bytes Obrigado @Arnauld por jogar fora 2 bytes
Experimente online!
Mostrar snippet de código
fonte
split
vez dematch
(ele sempre retorna uma matriz 1 mais longa que você normalmente deseja, mas os dois 1s são cancelados). Eu também tentei eliminar a duplicação, mas ela saiu com 57 bytes novamente.Mathematica, 47 bytes (codificação ISO 8859-1)
Função pura, tendo como entrada uma string separada por nova linha e retornando um número inteiro. Observe que as três novas linhas no código são flanqueadas por aspas e, portanto, são equivalentes a
"\n"
uma sequência de caracteres (mas dessa maneira é um byte menor que"\n"
).StringCount
faz o trabalho pesado; adicionamos manualmente uma nova linha ao início da string para que a primeira linha corresponda quando apropriado.±
é uma função de ajuda unária para evitar a repetição deStringCount
.A solução alternativa
é 4 bytes mais, mas eu gosto da sequência
±"+"-±"-"
....fonte
Retina ,
59535250 bytesExperimente online!
Confira a resposta mais curta do Basic Sunset no mesmo idioma!
Explicação
Remove tudo, exceto
[+-]rep
s.Remove repetidamente 1
-
para cada+
e vice-versa.Anexe um a
-
(porque o número é negativo) a-
s e substitua os-
s pelo número de-
s.Faça o mesmo para
+
s, mas não inclua a-
.Finalmente, se não houver nada, substitua-o por a
0
.fonte
PHP, 118 bytes
Experimente online!
Usado assim:
fonte
Röda , 53 bytes
Experimente online!
fonte
Java, 109 bytes
Tentando diminuir isso usando
Stream
'sfonte
Empilhados , 45 bytes
Experimente online!
Como alternativa (49 bytes):
Explicação
Basicamente, isso extrai tudo
+
ou é-
anexado ao início da linha erep
. Então, para cada um, ele precede a#
. Então, para a coisa toda, a0
é anexado.#~
avalia a string, que agora se parece com:#+
é incremento e#-
é decremento. Assim, obtemos o resultado desejado.fonte
Retina , 38 bytes
Experimente online!
Uma solução diferente (e mais curta) do que as que já foram publicadas na Retina.
Explicação
(Esta linha tem um espaço à direita). Mantenha apenas as partes relevantes da entrada, ou seja, o
+rep
ou-rep
no início de uma linha.Classifique todos os caracteres (incluindo novas linhas). isso colocará + se -s próximos um do outro.
Remova os
+-
casais repetidamente até que no máximo um dos dois sinais permaneça.Combine o primeiro
-
(se houver) e imprima-o sem modificar a sequência.Conte o número de placas restantes e imprima-o, pois esta é a etapa final do programa.
fonte
C #, 87 bytes
A função anônima que divide a string de entrada usando o caractere de nova linha, procura a string "rep" prefixada por um caractere e, se a encontrar, aumenta a reputação (a propriedade
n
variável) em 1 ou -1.Programa completo com método não destruído e casos de teste:
Observe que o código ASCII para
+
é 43 e para-
é 45. Esse método passa todos os casos de teste do OP. No entanto, se o primeiro caractere for outra coisa, isso levará a respostas erradas!Isso pode ser corrigido ao custo de 17 bytes:
C # fixo, 104 bytes
A função anônima modificada procurará um sinal
+
ou-
como o primeiro caractere em cada linha.fonte
Japt , 14 bytes
Experimente online!
+1 byte para
-x
sinalizadorfonte
C ++, 144 bytes
Experimente online!
fonte
C # , 104 bytes
Apesar de já existir uma solução - e a minha ser mais longa - ainda acho que devo publicá-la, pois o que já está aqui pode falhar se algo assim
'=rep '
atrapalhar.Golfe
Ungolfed
Ungolfed legible
Código completo
Lançamentos
104 bytes
- Solução inicial.Notas
Nada para adicionar
fonte
Ruby, 46 bytes
Obtenha todo o representante +/- da entrada e monte em uma única sequência. Em seguida, avalie isso para rep = 1.
fonte
JavaScript ES6,
8579 bytesTente
Ungolfed
História
85 bytes
fonte