En este desafío, estará utilizando distribuir un producto sobre sumas y diferencias de números, como se explica aquí .
Ejemplos
Input | Output
-------------|-------------
23(12+42) | (23*12)+(23*42)
9(62-5) | (9*62)-(9*5)
4(17+8-14) | (4*17)+(4*8)-(4*14)
15(-5) | -(15*5)
2(3) | (2*3)
8(+18) | +(8*18)
8(-40+18) | -(8*40)+(8*18)
Especificación
La entrada será una cadena de la forma n(_)
, con un solo entero positivo sin signo n
seguido de una expresión entre paréntesis _
. Esta expresión _
consistirá en sumas y diferencia de uno o más términos enteros positivos separados por signos +
y -
. El primer término puede estar precedido por un +
signo, un -
signo o por ningún signo.
En la salida, el número inicial n
debe distribuirse para multiplicar cada uno de los términos. Cada término de a
debe multiplicarse n
a la izquierda por para producir la expresión entre paréntesis (n*a)
, y estos nuevos términos deben combinarse con +
y -
signos exactamente de la misma manera que los términos originales.
Entradas inválidas
Estos son ejemplos de entradas que no tiene que manejar.
3(5 plus 3)
6(5 13)
(5+8)(6+6)
(5+3)8
Victorioso
Este es el código de golf , por lo que gana el código más corto en bytes.
fuente
8(-40+18)
Respuestas:
Pip, 28 bytes
Explicación:
Los objetos de Patrón de Pip siguen principalmente la sintaxis de expresiones regulares de Python, pero el
&
patrón de reemplazo se toma prestado de sed.Lea más sobre Pip en el repositorio de Github
fuente
JavaScript 65 bytes
Esto tomará la entrada. Obtenga el + o -, luego los dígitos, luego reemplácelos en el orden correcto.
Explicación
Uso
Esto solo funciona en Firefox y Safari Nightly ¿ quizás Edge? porque usa las funciones de ES6. Puedes ejecutarlo de la siguiente manera:
fuente
(.?)(\d+)
está roto. Esto falla en la23(12+42)
producción1(23*2)+(23*42)
.\D?
podría ser usado en lugar de[+-]?
Python 2.7,
110108 bytesEl programa toma la entrada de stdin, busca coincidencias contra -
([+-]?)(\d+)
regex y crea la cadena de salida.Probándolo
fuente
Retina , 40 bytes
Cada línea debe ir a su propio archivo, pero puede ejecutar el código como un archivo con la
-s
bandera. P.ej:Las primeras dos líneas empujan el multiplicador al lado de cada número en la forma esperada:
Las dos últimas líneas eliminan la parte final innecesaria:
fuente
sed, 105 bytes
Solo quería ver si esto se puede hacer con sed.
Quizás un poco vieja escuela, pero funciona.
fuente
rs , 77 bytes
Demostración en vivo y todos los casos de prueba.
¡Es la primera vez que se usan las macros de rs!
fuente
REGXY , 45 bytes
Utiliza REGXY, un lenguaje basado en la sustitución de expresiones regulares.
fuente
//
trabajo? Supongo que se desplaza hacia arriba hasta que la cadena cambia, pero no puedo encontrar en la página de esolang por qué.//
crea un bucle infinito, yanothing
que siempre coincidirá, por lo que siempre volvemos a la primera línea.Perl, 36 bytes
Código de 35 bytes + línea de comando de 1 byte
Uso:
fuente
Pyth,
3938 bytesUna terrible solución de expresiones regulares:
fuente
Ruby, 94 bytes
fuente
CJam, 50 bytes
Pruébalo en línea
CJam no tiene soporte para expresiones regulares, ni nada más allá de la búsqueda y división de cadenas que es muy conveniente para analizar expresiones. Entonces hay algo de trabajo involucrado aquí.
Explicación:
fuente
gawk -
6058Uf ... no he trabajado con expresiones regulares en mucho tiempo.
fuente
Perl 5,
70605544 Bytes + 1 penalizaciónUna solución perl que solo usa división y 1 expresión regular.
También calcula las entradas más largas.
Prueba
Una versión que toma un parámetro
Una versión que solo usa expresiones regulares.
Éste funciona a través de un grupo de captura dentro de una búsqueda anticipada positiva y una coincidencia perezosa. Probablemente habría usado una mirada positiva hacia atrás si Perl 5 lo admitiera, pero desgraciadamente. Me tomó un tiempo darme cuenta de que esto es posible con regex.
fuente
-p
opción de línea de comando (creo que esto es +1 char vs 9 para,<>
y;print
) yasplit
que funcionará$_
de forma predeterminada (que será lo que sea que esté<>
) y la impresión también se incluye en el bucle ! ¡Espero que ayude!Retina ,
505143 bytesCreo que este puede ser mi primer programa de Retina. Si no, es mi primer programa Retina que es tan complejo (no tan complejo, en realidad). Cada línea va en su propio archivo.
En realidad no probé esto con Retina, lo probé usando un probador de reemplazo de expresiones regulares varias veces, pero debería funcionar.
Descripción para el primer ejemplo:
Como hay un número par de archivos, Retina usa el modo de reemplazo. El primer reemplazo (primeros dos archivos) elimina un número que se distribuirá y agrega ese par de distribución
(23*12)
al final, dando23(+42)(23*12)
.+`
al principio le dice a Retina que reemplace repetidamente hasta que el patrón no coincida, y dado que esto coincide nuevamente, el patrón reemplaza esto con23()(23*12)+(23*42)
. Esto ya no coincide, por lo que los siguientes 2 archivos se usan para el próximo reemplazo. Esta vez, simplemente elimina el23()
. Esto funciona bien: dado que los productos se agregan hasta el final, no tengo que hacer nada extraño si un número no tiene un signo, ya que el único que puede estar sin un signo es el primer número.EDITAR:
$'
en reemplazo representa el resto de la cadena después del partido, por lo que puedo eliminar los(.*)
s finales .fuente
k, 98 bytes
No muy golfizado.
Dividir en no dígitos, eliminar parens, eliminar cadenas vacías, luego mantener
x
constante como la primera cadena, combinar*
con cada cadena restantey
, paréntesis y mover el signo al principio si está presente; aplanar la salida en una sola cadena.fuente