Escriba un programa o función que tome una cadena que solo contenga los caracteres ^
y v
(puede suponer que no habrá otros caracteres). Lea de izquierda a derecha esta cadena representa la secuencia de clics del mouse que un solo usuario realizó mientras veía una pregunta o respuesta de Stack Exchange por primera vez.
Cada ^
representa un clic del botón de votación positiva y cada uno v
representa un clic del botón de votación negativa . (Para ejemplos de trabajo, mire ligeramente a la izquierda).
Suponga que no existen limitaciones de votación, por lo que todos los clics se registran correctamente.
Imprimir o devolver:
1
o+1
si la publicación termina siendo votada.0
si la publicación termina sin ser votada. (-0
y+0
no son válidos)-1
si la publicación termina siendo rechazada.
Las publicaciones comienzan con cero votos netos del usuario y los botones cambian los votos netos de la siguiente manera:
Net Votes Before Button Pressed Net Votes After
1 ^ 0
1 v -1
0 ^ 1
0 v -1
-1 ^ 1
-1 v 0
El código más corto en bytes gana.
Casos de prueba:
[empty string] -> 0
^^ -> 0
^v -> -1
^ -> 1
v -> -1
v^ -> 1
vv -> 0
^^^ -> 1
vvv -> -1
^^^^ -> 0
vvvv -> 0
^^^^^ -> 1
vvvvv -> -1
^^^^^^ -> 0
vvvvvv -> 0
^^v -> -1
^v^ -> 1
^vv -> 0
vv^ -> 1
v^v -> -1
v^^ -> 0
^vvv^^vv^vv^v^ -> 1
^vvv^^vv^vv^v^^ -> 0
^vvv^^vv^vv^v^^^ -> 1
^vvv^^vv^vv^v^^v -> -1
^vvv^^vv^vv^v^^vv -> 0
^vvv^^vv^vv^v^^vvv -> -1
^vvvvvvvvvvvv -> 0
^^vvvvvvvvvvvv -> 0
^^^vvvvvvvvvvvv -> 0
vvv^^^^^^^^^^^^ -> 0
vv^^^^^^^^^^^^ -> 0
v^^^^^^^^^^^^ -> 0
fuente
^
personaje puede causar un cambio de puntaje de -1, +1 o +2? ¿Soy denso donde? ¿Que esta pasando?Respuestas:
Gol> <> 0.3.11 ,
131211 bytesPruébalo en línea . Aunque esto funcionará bien en la próxima actualización, lo he enumerado como 0.3.11 por si acaso.
Explicación
Tenga en cuenta que el primer uso de
@
tira un 0 desde la parte inferior de la pila para inicializar el recuento de votos para la primera iteraciónPara ilustrar con una tabla completa:
fuente
código de máquina x86, 24 bytes
Esta es una función que utiliza la convención de llamada fastcall, que toma una cadena y devuelve un entero de 8 bits.
Lo probé con el siguiente programa en C, que debe compilarse para el modo de 32 bits.
fuente
JavaScript (ES7),
474644433736 bytesTachado 44 sigue siendo regular 44 :(
Mantiene un total acumulado
s
. Utiliza elfor of
bucle para iterar sobre cada carácter en la cadena y las actualizacioness
basadas en el carácter actual y el valor anterior.Ediciones: Golfed
~s&&-1
a!~s-1
. Esta expresión tiene que ser igual a 0 sis
es igual a -1 y -1 en caso contrario. Guardado 6 bytes gracias a @nderscore.Cómo funciona la expresión:
fuente
v=>[for(x of v)v=x<"v"?~~v<1:!~v-1]|v
CJam,
1814 bytesVersión actualizada con mejoras significativas aportadas por Dennis:
Pruébalo en línea
Explicación:
fuente
Befunge 93 - 55 bytes
52 caracteres y 3 líneas nuevas.
Probado en este intérprete .
El
j
es equidistante de^
yv
en ascii, por lo que se usa para hacer conversiones aritméticas al final, en lugar de condicionales que consumen espacio.fuente
brainfuck, 146 bytes
Este programa toma cada byte de entrada y lo compara con el último. Si son iguales, tira la entrada y almacena "0" como la "entrada anterior", de lo contrario la guarda normalmente.
Si el resultado final es
v
, se imprime-
. Si el resultado final fue distinto de cero, se agrega 1 a una celda vacía. Finalmente, se agrega 48 a esa celda y se imprime.fuente
Javascript ES6,
9148 caracteresExplicación:
undefined
termina pord
.Prueba:
Historial de respuestas:
fuente
Pitón 2, 49
Se repite con la función de actualización
que toma el recuento de votos actual
x
y el nuevo personajec
y genera el nuevo recuento de votos.La idea es utilizar Python 2
cmp
función, que compara sus dos argumentos y da-1, 0, 1
para<, ==, >
respectivamente. El interiorcmp('u',c)
da-1
porv
y1
para^
; cualquier personaje entre ellos es suficiente'u'
. El externo luego compara eso conx
, que dacmp(1,x)
por^
ycmp(-1,x)
parav
, que tienen los valores correctos.La iteración directa fue 3 caracteres más larga (52), aunque sería un carácter corto (48) si
input()
se permitiera tomar comillas con comillas.La mejor función recursiva que encontré fue una char más larga (50)
fuente
Prolog,
159152bytesCódigo:
Pruébelo usted mismo:
Intérprete en línea aquí
Ejemplo
Editar: Guardado 7 bytes al unificar las cláusulas r con OR.
fuente
CJam, 16 bytes
Esto se bloqueará después de imprimir 0 , si corresponde. El error se puede suprimir con el intérprete de Java. Si intenta esto en línea , ignore todo menos la última línea de salida.
Cómo funciona
fuente
Python 2,
17715972 bytesTodavía un poco nuevo en este código de golf.
EDITAR: se corrigió el comportamiento incorrecto.
EDIT 2: Gracias @MorganThrapp por eliminar muchos bytes.
fuente
JavaScript (ES6),
64595852 bytesEsto se basa en la observación de que solo el último tramo de la repetición (de cualquiera
^
ov
) afecta el resultado.Gracias a Neil por jugar golf en 6 bytes.
fuente
f=v=>(t=/\^*$|v*$/.exec(v)[0]).length*(t<'v'?1:-1)%2
suficiente.>
u<
operador. Gracias por los consejos[0]
que puede haberte confundido.f=v=>(t=/\^*$|v*$/.exec(v))[0].length*(t<'v'?1:-1)%2
, lo que funciona debido a la coerción de tipo con array.Haskell, 40 bytes
fuente
f
como una función infija%
. Además, creo quev
puede ser un_
.-1
por envv
lugar de 0?1%_=-1
_%_=0
12 caracteres.Scala, 75 bytes
Prueba de función implementada.
fuente
APL, 17
Para intérpretes sin notación fork (como GNU APL), sería
{⍺×⍺≠⍵}/⌽0,2-'^ '⍳⍞
(19). Esta es probablemente la solución más aburrida posible porque funciona directamente desde la definición del problema.fuente
Ruby,
4135 bytesRegex. Solo el último botón presionado es interesante, así que verifique la duración de la ejecución. Luego compárelo con
"a"
(o cualquier letra entre^
yv
) para obtener1
o-1
.fuente
C # 6, 18 + 80 = 98 bytes
Requiere:
Función real:
Cómo funciona: el código primero elimina todo antes del último
^^
ovv
. Ese contenido no es relevante porque hacer clic en el mismo botón dos veces siempre cancelará su voto. Esto se hace mediante la división de^^
yvv
y tomando el último elemento. Si este elemento es una cadena vacía (.Length<1
), la función vuelve0
porque toda la votación ha sido cancelada. Si la cadena no está vacía, solo mira el último carácter de la cadena original: anulará todos los votos anteriores. Si el código char es menor que 95, entonces será 94^
, por lo que devuelve1
, de lo contrario-1
.fuente
Python 2.7,
797588fuente
(-1,(1,0)[n==0])[n>0]
para ahorrar 10 bytes. Además, no lo usesa=str.count
. En realidad te cuesta 4 bytes.Minkolang 0.11 ,
2822 bytesPruébalo aquí.
Explicación
Tenga en cuenta que no hay
N.
al final. Eso es porque lo dejé envolver hasta el principio. Cuando la entrada está vacía, la cuenta final se emite como un número entero y el programa se detiene.fuente
Pyth, 13 bytes
fuente
Mathematica, 60 bytes
fuente
@#&
? Eso es inútil (a menos queSequence
s están involucrados, peroSequence
s no están involucrados.Script de forma , 26 bytes
Cómo funciona:
fuente
C # 6, 18 +
9795 =115113 bytes, sin métodos de cadena, LINQ excesivoVerdaderamente merece ser precedido por
Tuve la idea de usar en
x<95?1:-1
lugar de la respuestax=='^'?1:-1
de ProgramFOXCoincidencias:
fuente
C:
6766 bytesgolfizado:
sin golf:
fuente
Ir, 179 bytes
Una solución extremadamente ingenua.
Sin golf:
fuente
Perl 5, 41 bytes
40 bytes, más 1 para
-p
/(.)\1*$/;
compara la cadena de entrada con la expresión regular/(.)\1*$/
, es decir, ve si termina con un solo carácter repetido un número ≥1 de veces.Si es así,
$&
es toda la cadena de repetición y$1
es el personaje; de lo contrario (es decir, la cadena de entrada está vacía), esas dos variables son la cadena vacía.$1=~v?-1:1
se compara$1
con la expresión regularv
y devuelve −1 si coincide y 1 de lo contrario.Y multiplique eso ± 1 por
(length$&)%2
la longitud del$&
módulo 2.fuente
05AB1E ,
141211 bytesPuerto de la respuesta Gol> <> de @ Sp3000 .
NOTA: @Grimy ya publicó una alternativa más corta de 8 bytes para 05AB1E , ¡así que asegúrese de votarlo!
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
05AB1E , 8 bytes
Pruébalo en línea!
Soluciones alternativas con la misma longitud:
u㤮öÓÆ(
,㤮ögÓÆ(
.fuente
^^ -> 0
CJam,
2724 bytesPruébalo en línea .
Todo lo que tomé de la respuesta de Dennis es
g
(función de signo).fuente
Rubí, 43
9-i/11
se evalúa a 1 o -1 cuando se le dan los códigos ascii de^
(94) ov
(118)En programa de prueba:
fuente