Skip to content

Commit 73abc53

Browse files
committed
add expressions
1 parent c13220f commit 73abc53

File tree

4 files changed

+35
-15
lines changed

4 files changed

+35
-15
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package io.polypen;
2+
3+
import java.util.List;
4+
5+
public class Expressions {
6+
public sealed interface Expression permits Product {
7+
String eval();
8+
}
9+
10+
public record Product(List<String> factors) implements Expression {
11+
@Override
12+
public String eval() {
13+
List<Polynomial> polynomials = factors.stream().map(Polynomial::parse).toList();
14+
Polynomial result = Polynomial.ONE;
15+
for (Polynomial p : polynomials) {
16+
result = result.multiply(p);
17+
}
18+
return result.toString();
19+
}
20+
}
21+
}

src/main/java/io/polypen/Main.java

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,19 @@
11
package io.polypen;
22

3-
import java.util.List;
3+
import io.polypen.Expressions.Expression;
4+
45
import java.util.Scanner;
56

67
public class Main {
78

8-
public static Polynomial evalProduct(String s) {
9-
List<Polynomial> polynomials = Parser.parseProduct(s).stream().map(Polynomial::parse).toList();
10-
Polynomial result = Polynomial.ONE;
11-
for (Polynomial p : polynomials) {
12-
result = result.multiply(p);
13-
}
14-
return result;
15-
}
16-
179
public static void main(String[] args) {
1810
Scanner in = new Scanner(System.in);
1911
StringBuilder sb = new StringBuilder();
2012
while (in.hasNextLine()) {
2113
String line = in.nextLine();
2214
sb.append(line);
2315
}
24-
System.out.println(evalProduct(sb.toString()));
16+
Expression expression = Parser.parseProduct(sb.toString());
17+
System.out.println(expression.eval());
2518
}
2619
}

src/main/java/io/polypen/Parser.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.polypen;
22

3+
import io.polypen.Expressions.Expression;
4+
import io.polypen.Expressions.Product;
35
import org.apache.commons.numbers.fraction.Fraction;
46

57
import java.util.ArrayList;
@@ -43,7 +45,7 @@ static List<Fraction> parsePolynomial(String s) {
4345
return result;
4446
}
4547

46-
static List<String> parseProduct(String s) {
48+
static Expression parseProduct(String s) {
4749
List<String> result = new ArrayList<>();
4850
StringBuilder sb = new StringBuilder();
4951
int nestingLevel = -1;
@@ -74,7 +76,7 @@ static List<String> parseProduct(String s) {
7476
if (!sb.isEmpty()) {
7577
result.add(sb.toString());
7678
}
77-
return result;
79+
return new Product(result);
7880
}
7981

8082
enum Sign {

src/test/java/io/polypen/PolynomialTest.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package io.polypen;
22

3+
import io.polypen.Expressions.Expression;
34
import org.apache.commons.numbers.fraction.Fraction;
45
import org.junit.jupiter.api.Test;
56

67
import java.util.List;
78

89
import static io.polypen.Polynomial.parse;
910
import static org.junit.jupiter.api.Assertions.assertEquals;
11+
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
1012

1113
class PolynomialTest {
1214

@@ -39,7 +41,9 @@ void monomialMultiplication() {
3941

4042
@Test
4143
void parseProduct() {
42-
List<String> strings = Parser.parseProduct("(a + 1) * (a - 1)");
43-
assertEquals(List.of("a + 1", "a - 1"), strings);
44+
Expression expression = Parser.parseProduct("(a + 1) * (a - 1)");
45+
assertInstanceOf(Expressions.Product.class, expression);
46+
Expressions.Product product = (Expressions.Product) expression;
47+
assertEquals(List.of("a + 1", "a - 1"), product.factors());
4448
}
4549
}

0 commit comments

Comments
 (0)