Introducción
Para aquellos que no están familiarizados con el vapor, o al menos con este aspecto en particular:
A menudo en los perfiles de las personas, las personas dejan comentarios diciendo "+ rep _____" o "-rep _____". Estos son un medio no oficial de mostrar si cree que alguien en la comunidad tiene una buena o mala reputación, por varias razones. Tales comentarios se parecen a:
+ representante de un buen jugador
+ representante útil
pirata informático
estafador
Tarea
El programa debe recibir información a través de cualquier forma consensuada. La entrada consiste en una cadena con nuevas líneas opcionales ( \n
). Al comienzo de cada línea, '+rep '
o '-rep '
podría estar presente. El resto de la línea se puede descartar. Si la línea no comienza con '+rep '
o '-rep '
(tenga en cuenta el espacio final), la línea debe ignorarse.
El programa debe mantener un puntaje de reputación total. Comenzando en 0
, este puntaje debe incrementarse en cada línea que comience '+rep '
y disminuirse en cada línea que comience con '-rep '
.
Este resultado se debe generar de cualquier forma acordada.
Casos de prueba
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
Prima
Ni siquiera sé si es posible, pero puntos de bonificación si de alguna manera puedes obtener estos comentarios de Steam.
0
, no1
.Respuestas:
05AB1E ,
181617 bytesAhorró 2 bytes gracias a Okx
+1 byte debido a un cambio en la especificación donde el representante ahora debe ir seguido de un espacio.
Pruébalo en línea!
Explicación
fuente
ð¡0è
con4£
. Estaba trabajando en una solución a esto al mismo tiempo que tú.|ðý#D'·Ý©.åÏ®1:O
puede ser 14 o 15, simplemente no lo veo. También atascado en 16, aunque quizás te ayude. Lo dejo aquí. Básicamente reemplazando la palabra "rep" con el número "1" para que pueda sumar directamente.0|vy4£'·Ý1:R.V
no funciona para líneas que no comienzan con +/- rep. Volver al tablero de dibujo :(Python 3, 73 bytes
Estoy seguro de que esta respuesta es basura y será superada pronto, pero aún no hay otras respuestas de Python
Usar así:
Obteniendo vapor
Aquí hay un código de muestra que obtiene los primeros 100 comentarios del perfil de KennyS y calcula su representante.
fuente
if"rep"==i[1:4]
para -1Perl 5 , 25 bytes
24 bytes de código +
-p
bandera.Pruébalo en línea!
/^\+rep /
regresa1
si la línea comienza con+rep
;/^-rep /
regresa1
si la línea comienza con-rep
(por lo que solo uno de ellos será uno como máximo). Usamos$\
para almacenar el resultado, ya que se imprime implícitamente al final (gracias a-p
flag y aquellos que no coinciden}{
).fuente
Python 2 , 54 bytes
Pruébalo en línea! Toma una cadena multilínea como entrada.
Cuenta las apariencias
'+rep '
y'-rep '
solo al comienzo de las líneas buscando la cadena que sigue a un símbolo de nueva línea. Para capturar la primera línea, se antepone una nueva línea a la entrada.fuente
Retina ,
63515049 bytesNo cumplí con la especificación, así que solucioné algunos problemas, pero también jugué mucho (tomando prestada la primera línea de la solución de Kritixi Lithos).
Salvó otro byte gracias a Kritixi Lithos.
Pruébalo en línea!
Explicación
Primero, se elimina todo de la entrada, excepto el
+
y-
de cualquiera+rep
o-rep
al comienzo de una línea.Luego, los pares adyacentes de
+
y-
se eliminan hasta que no se puedan eliminar más. Después de esto, lo que queda es una serie de+
s, una serie de-
s, o nada.Luego, una serie de uno o más caracteres (uno
+
o más-
) se reemplaza con el personaje que forma la serie seguido de la longitud de la serie. De esta manera,+
se conserva al principio para obtener resultados positivos y-
negativos.Luego
+
se eliminan todos los s, en el caso de que el representante sea positivo.Finalmente, si la cadena está vacía en este punto, el representante es 0, entonces escribimos 0.
fuente
|¶
y agregar uns
(modo de línea única) despuésm
de la primera líneaJavaScript, 55 bytes
Gracias @Neil por jugar golf con 12 bytes Gracias @Arnauld por jugar golf con 2 bytes
Pruébalo en línea!
Mostrar fragmento de código
fuente
split
lugar dematch
(siempre devuelve una matriz que es 1 más larga de lo que normalmente desea, pero los dos 1 se cancelan). También intenté eliminar la duplicación, pero salió de nuevo a 57 bytes.Mathematica, 47 bytes (codificación ISO 8859-1)
Función pura que toma una cadena separada por una nueva línea como entrada y devuelve un entero. Tenga en cuenta que las tres nuevas líneas en el código están flanqueadas por comillas y, por lo tanto, cada una es equivalente a
"\n"
una cadena (pero de esta manera es un byte más corto que"\n"
).StringCount
hace el trabajo pesado; agregamos manualmente una nueva línea al comienzo de la cadena para que la primera línea coincida cuando sea apropiado.±
es una función de ayuda unaria para evitar la repetición deStringCount
.La solución alternativa
es 4 bytes más largo, pero me gusta la secuencia
±"+"-±"-"
...fuente
Retina ,
59535250 bytesPruébalo en línea!
¡Mira la respuesta más corta de Basic Sunset en el mismo idioma!
Explicación
Elimina todo excepto el
[+-]rep
s.Repetidamente elimina 1
-
por cada+
y viceversa.Anteponga a
-
(porque el número es negativo) a-
s y reemplace-
s por el número de-
s.Haga lo mismo para
+
s, pero no anteponga a-
.Finalmente, si no hay nada, reemplácelo con a
0
.fuente
PHP, 118 bytes
Pruébalo en línea!
Usado así:
fuente
Röda , 53 bytes
Pruébalo en línea!
fuente
Java, 109 bytes
Tratando de hacer esto más corto usando
Stream
'sfuente
Apilado , 45 bytes
Pruébalo en línea!
Alternativamente (49 bytes):
Explicación
Básicamente, esto extrae todo
+
o se-
adjunta al comienzo de la línea yrep
. Luego, a cada uno, antepone a#
. Entonces, a todo,0
se antepone a.#~
evalúa la cadena, que ahora se parece a:#+
es incremento y#-
es decremento. Por lo tanto, obtenemos nuestro resultado deseado.fuente
Retina , 38 bytes
Pruébalo en línea!
Una solución diferente (y más corta) que las ya publicadas en Retina.
Explicación
(Esta línea tiene un espacio final). Mantenga solo las partes relevantes de la entrada, es decir,
+rep
o-rep
al comienzo de una línea.Ordenar todos los caracteres (incluidas las nuevas líneas). esto pondrá + sy -s uno al lado del otro.
Retirar repetidamente las
+-
parejas hasta que como máximo quede uno de los dos signos.Haga coincidir el primero
-
(si está presente) e imprímalo sin modificar la cadena.Cuente el número de signos restantes e imprímalo ya que esta es la etapa final del programa.
fuente
C #, 87 bytes
Función anónima que divide la cadena de entrada utilizando el carácter de nueva línea, busca la cadena "rep" con el prefijo de un carácter y, si la encuentra, incrementa la reputación (la
n
variable) en 1 o -1.Programa completo con método no protegido y casos de prueba:
Tenga en cuenta que el código ASCII para
+
es 43 y para-
es 45. Este método pasa todos los casos de prueba del OP. Sin embargo, si el primer personaje es otra cosa, ¡esto dará lugar a respuestas incorrectas!Esto se puede arreglar a un costo de 17 bytes:
C # fijo, 104 bytes
La función anónima modificada verificará si hay un signo
+
o-
como el primer carácter en cada línea.fuente
Japt , 14 bytes
Pruébalo en línea!
+1 byte para
-x
banderafuente
C ++, 144 bytes
Pruébalo en línea!
fuente
C # , 104 bytes
A pesar de que ya existe una solución, y la mía es más larga, sigo pensando que debería publicarla, ya que el encendido aquí podría fallar si algo así se
'=rep '
interpone en su camino.Golfed
Sin golf
Legible sin golf
Código completo
Lanzamientos
104 bytes
- Solución inicial.Notas
Nada que añadir
fuente
Ruby, 46 bytes
Obtenga todo el +/- rep de entrada, y junte en una sola cadena. Luego evalúe eso para rep = 1.
fuente
JavaScript ES6,
8579 bytesIntentalo
Sin golf
Historia
85 bytes
fuente