Dada una lista no vacía de enteros no negativos, considere reescribirlo como un problema aritmético donde:
- Se
+inserta un signo más ( ) entre pares de números que aumentan de izquierda a derecha (también conocido desde el principio de la lista hasta el final). - Se
-inserta un signo menos ( ) entre pares de números que disminuyen de izquierda a derecha. - Se
*inserta un signo de multiplicación ( ) entre pares de números que son iguales.
Dicho de otra manera: cualquier sublista se a,bconvierte en a+bif a<b, a-bif a>by a*bif a==b.
Por ejemplo, la lista
[12, 0, 7, 7, 29, 10, 2, 2, 1]
se convertiría en la expresión
12 - 0 + 7*7 + 29 - 10 - 2*2 - 1
que evalúa a 75 .
Escriba un programa o función que tome esa lista y la evalúe, imprimiendo o devolviendo el resultado.
- El orden de las operaciones importa. Las multiplicaciones deben hacerse antes de cualquier suma o resta.
- Si la lista de entrada tiene un número, eso debería ser lo que evalúa. Por ejemplo,
[64]debería dar64. - El uso de
evaloexecse permite o similares constructos.
Aquí hay algunos ejemplos adicionales:
[list]
expression
value
[0]
0
0
[1]
1
1
[78557]
78557
78557
[0,0]
0*0
0
[1,1]
1*1
1
[2,2]
2*2
4
[0,1]
0+1
1
[1,0]
1-0
1
[1,2]
1+2
3
[2,1]
2-1
1
[15,4,4]
15-4*4
-1
[9,8,1]
9-8-1
0
[4,2,2,4]
4-2*2+4
4
[10,9,9,12]
10-9*9+12
-59
[1,1,2,2,3,3]
1*1+2*2+3*3
14
[5,5,4,4,3,3]
5*5-4*4-3*3
0
[3,1,4,1,5,9,2,6,5,3,5,9]
3-1+4-1+5+9-2+6-5-3+5+9
29
[7637,388,389,388,387,12,0,0,34,35,35,27,27,2]
7637-388+389-388-387-12-0*0+34+35*35-27*27-2
7379
El código más corto en bytes gana. Tiebreaker es la respuesta anterior.
code-golf
math
number
arithmetic
Pasatiempos de Calvin
fuente
fuente

Respuestas:
Python 2, 63 bytes
Construye y
evals la cadena de expresión. El símbolo aritmético se elige comparando el número anteriorpcon el actualx. El símbolo se agrega seguido del número actual.El primer número se maneja con un ingenioso truco de Sp3000. El valor inicial de
pse establece en una cadena, que es más grande que cualquier número y, por lo tanto, causa un-antes del primer número. Pero,sse inicializa alprint-mismo tiempo que hace que el resultado comience conprint--(gracias a xsot por guardar 2 bytes al inicializar conprint).fuente
printa la cadena y usar enexeclugar deeval.Pyth,
312619171615 bytesLas expresiones con
*no se evaluarán en línea, pero teóricamente funcionarían.2 bytes gracias a Maltysen.
Conjunto de pruebas (con evaluación).
Los otros casos (sin evaluación).
Historia
M+G@"*-+"->GH<GHv+sgMC,JsMQtJ\x60eM+G@"*-+"->GH<GHv+sgVQtQ\x60evtssVm@"*-+"->Zd<~ZvtssVm@"*-+"._-~ZvssVm@"*-+"._-~kvsm+@"*-+"._-~kfuente
+y en-línea)--safeinterruptor, que reemplazaevalconast.literal_eval.Jalea ,
18161514 bytesNo utiliza evaluaciones integradas. Pruébalo en línea! o verificar todos los casos de prueba .
Cómo funciona
fuente
evalcomo un átomo ...MATL , 12 bytes
Esto utiliza la muy buena idea de @ aditsu de codificación de longitud de ejecución.
Pruébalo en línea!
Explicación
fuente
CJam, 20
Pruébalo en línea
Explicación:
fuente
JavaScript (ES6), 54
evalrecibe una lista de expresiones separadas por comas y devuelve el valor de la última.Prueba
fuente
Julia,
7657 bytesMi primera vez jugando al golf con Julia, así que quizás haya mejoras obvias. Pruébalo en línea!
Dennis ahorró una tonelada de bytes.
fuente
!.Pyth -
232220 bytesAl igual que con Kenny's, la multiplicación no funciona en línea.
Test Suite sin hacer eval .
fuente
R, 92 bytes
Es probable que todavía se pueda hacer un buen golf aquí.
Sin golf:
fuente
Brachylog ,
3432 bytesPruébalo en línea!
fuente
TI-BASIC, 146 bytes
Lo formatearé bien cuando no esté en el móvil. El sueño se me escapa, así que entiendes esto. Disfrutar.
fuente
Javascript ES6,
6462 caracteresfuente
aun parámetro?a[i+1]...a[i+1]=>a[++i]...a[i]- 2 caracteres más cortos, pero reemplacé por error la caída completa del códigoa=>).Java, 384 bytes
Intente sin golf en línea
fuente
int a=l.length,&&=>&, poner elint i=0en la misma "línea" comoint n=l[0],m.if(i<l.length-2&&l[i+1]!=l[i+2])n+=l[i+1];else{m=l[i+1];while(i<l.length-2&&l[i+1]==l[i+2])m*=l[(i++)+1];n+=m;, puede reemplazar esto con el contenido dentro delelsebloque.Javascript ES6, 79 caracteres
fuente
Perl, 49 bytes
48 bytes código + 1 para
-pUso
Notas
Aprendí aquí que puedes capturar un lookahead en PCRE, aunque es un poco intuitivo (en
(?=(\d+))lugar de((?=\d+))). Sin embargo, tiene sentido después de leer, ya que capturaría una coincidencia de longitud cero (la búsqueda anticipada) con la última, y en su lugar capturará la coincidencia con la primera).¡Gracias a @ninjalj por guardar 8 bytes!
fuente
-egratis, agregué un resultadopque-pefue +1 ? Se actualizará por ahora, pero si pudieras encontrar una fuente que pudiera citar / vincular para seguir adelante, ¡sería increíble!$&.qw(* - +)[$&<=>$1]en la parte de reemplazo dels///operador.En realidad, 30 bytes
Desafortunadamente, porque el eval (
≡comando ) solo evalúa literales en TIO, este programa no funciona en TIO.Explicación:
fuente
R ,
12044 bytesPruébalo en línea!
El algoritmo es similar a esta respuesta , pero solo me di cuenta después de codificar mi respuesta. Mucho mejor que mi respuesta original que estaba usando
eval(parse).Aprovecha al máximo las operaciones vectorizadas de R:
*primero realiza la operaciónrle(x)$values ^ rle(x)$lenghtsy utiliza productos de punto con este vectorsign( diff( rle(x)$values ) )(precedido por1).fuente
05AB1E (heredado) ,
171615 bytes-2 bytes gracias a @Emigna .
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
>moviéndose+al final de la cadena.Ćy¨, si lo usa en‚ζlugar deø‚ζes una alternativa perfecta, ya que el espacio se ignora en la evaluación. Gracias de nuevo. :)PHP, 103 bytes
Buen desafío. Esto se hizo más largo de lo esperado. Creo que usando
array_mapo similar no mejorará el recuento de bytes, ya que las funciones anónimas siguen siendo caras en PHP.Se ejecuta desde la línea de comandos, solicitará una lista separada por comas, como:
fuente
PowerShell v2 +, 62 bytes
Toma datos como argumentos de línea de comandos separados por espacios, que se convierten en una matriz automática
$args. Realizamos iteraciones a través de cada elemento, utilizando la variable auxiliar$ocada iteración para recordar cuál fue nuestra entrada anterior. Usamos una cadena indexada para extraer el operador apropiado, que se realiza mediante la matemática de los valores booleanos convertidos implícitamente (p. Ej., Si la entrada anterior es más pequeña, la[]evaluación1+2*0también'*+-'[1]significa que+está seleccionada).Las cadenas concatenadas se dejan en la tubería. Recopilamos todos esos fragmentos entre sí (por ejemplo,
3-,1+,4-, etc.) con una-joinoperación de concatenación del número final (implícitamente convertido en cadena), y el tubo de TIiex(alias paraInvoke-Expressiony similares aeval).fuente
Japt , 25 bytes
Me gustaría acortarlo, pero no pude hacer que una versión sin evaluación funcione.
Pruébalo en línea!
fuente
Japt
-x,2119 bytesIntentalo
Explicación
fuente