From 22fac2f7a0b5dda2058fc9b01073ef80a349b8fc Mon Sep 17 00:00:00 2001 From: syamauchi Date: Fri, 7 Jul 2023 13:15:25 +0900 Subject: [PATCH 1/4] =?UTF-8?q?C020=E5=9B=9E=E7=AD=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- syamauchi/src/C020.java | 42 ++++++++++++++++++++++++++++++++++++ syamauchi/test/C020Test.java | 27 +++++++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 syamauchi/src/C020.java create mode 100644 syamauchi/test/C020Test.java diff --git a/syamauchi/src/C020.java b/syamauchi/src/C020.java new file mode 100644 index 0000000..591589d --- /dev/null +++ b/syamauchi/src/C020.java @@ -0,0 +1,42 @@ +package src; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.Scanner; + +public class C020 { + static BigDecimal PERCENTAGE = new BigDecimal("100"); + private final String food; + private final String saleFood; + private final String saleSideDish; + + public C020(final String food, final String saleFood, final String saleSideDish) { + this.food = food; + this.saleFood = saleFood; + this.saleSideDish = saleSideDish; + } + + public static void main(String[] args) { + final Scanner sc = new Scanner(System.in); + final C020 food = new C020(sc.next(), sc.next(), sc.next()); + System.out.println(food.calcUnsold()); + sc.close(); + } + + // 誤差ができるのが嫌なのでBigDecimalを使用 + public float calcUnsold() { + final BigDecimal food = new BigDecimal(this.food); + final BigDecimal saleFood = new BigDecimal(this.saleFood); + final BigDecimal saleSideDish = new BigDecimal(this.saleSideDish); + + final BigDecimal percentageSaleFood = saleFood.divide(PERCENTAGE, 3, RoundingMode.HALF_UP); + + // food - food * PerceSaleFood + final BigDecimal unsold = food.subtract(food.multiply(percentageSaleFood)); + final BigDecimal percentageSaleSideDish = saleSideDish.divide(PERCENTAGE); + // unsold - unsold * saleSideDish + final BigDecimal allUnsold = unsold.subtract(unsold.multiply(percentageSaleSideDish)); + // + return (allUnsold.floatValue()); + } +} diff --git a/syamauchi/test/C020Test.java b/syamauchi/test/C020Test.java new file mode 100644 index 0000000..8c036a1 --- /dev/null +++ b/syamauchi/test/C020Test.java @@ -0,0 +1,27 @@ +package test; + +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.*; +import org.junit.Test; +import src.C020; + +public class C020Test { + + @Test + public void 残り物の量を取得するテスト1() { + C020 sut = new C020("1", "80", "40"); + float expected = (float) 0.12; + float actual = sut.calcUnsold(); + + assertThat(actual, is(expected)); + } + + @Test + public void 残り物の量を取得するテスト2() { + C020 sut = new C020("10", "31", "52"); + float expected = (float) 3.312; + float actual = sut.calcUnsold(); + + assertThat(actual, is(expected)); + } +} -- GitLab From 68e2e3d37d590a7200de0c1c41ebc02c598f72b0 Mon Sep 17 00:00:00 2001 From: syamauchi Date: Fri, 7 Jul 2023 13:20:26 +0900 Subject: [PATCH 2/4] =?UTF-8?q?C020=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- syamauchi/src/C020.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/syamauchi/src/C020.java b/syamauchi/src/C020.java index 591589d..ff77abb 100644 --- a/syamauchi/src/C020.java +++ b/syamauchi/src/C020.java @@ -1,7 +1,6 @@ package src; import java.math.BigDecimal; -import java.math.RoundingMode; import java.util.Scanner; public class C020 { @@ -29,7 +28,7 @@ public class C020 { final BigDecimal saleFood = new BigDecimal(this.saleFood); final BigDecimal saleSideDish = new BigDecimal(this.saleSideDish); - final BigDecimal percentageSaleFood = saleFood.divide(PERCENTAGE, 3, RoundingMode.HALF_UP); + final BigDecimal percentageSaleFood = saleFood.divide(PERCENTAGE); // food - food * PerceSaleFood final BigDecimal unsold = food.subtract(food.multiply(percentageSaleFood)); -- GitLab From 03c85177b9c80abede209156d7aa312496f49c0d Mon Sep 17 00:00:00 2001 From: syamauchi Date: Fri, 7 Jul 2023 13:23:59 +0900 Subject: [PATCH 3/4] =?UTF-8?q?C020=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- syamauchi/src/C020.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/syamauchi/src/C020.java b/syamauchi/src/C020.java index ff77abb..4475588 100644 --- a/syamauchi/src/C020.java +++ b/syamauchi/src/C020.java @@ -30,10 +30,10 @@ public class C020 { final BigDecimal percentageSaleFood = saleFood.divide(PERCENTAGE); - // food - food * PerceSaleFood + // food - food * percentageSaleFood final BigDecimal unsold = food.subtract(food.multiply(percentageSaleFood)); final BigDecimal percentageSaleSideDish = saleSideDish.divide(PERCENTAGE); - // unsold - unsold * saleSideDish + // unsold - unsold * percentageSideDish final BigDecimal allUnsold = unsold.subtract(unsold.multiply(percentageSaleSideDish)); // return (allUnsold.floatValue()); -- GitLab From fd928f368397d34f9219b12eba3df0cd0910eee0 Mon Sep 17 00:00:00 2001 From: syamauchi Date: Fri, 7 Jul 2023 16:27:01 +0900 Subject: [PATCH 4/4] =?UTF-8?q?C052=E5=9B=9E=E7=AD=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- syamauchi/src/C052.java | 34 +++++++++++++++++++++ syamauchi/test/C052Test.java | 57 ++++++++++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+) create mode 100644 syamauchi/src/C052.java create mode 100644 syamauchi/test/C052Test.java diff --git a/syamauchi/src/C052.java b/syamauchi/src/C052.java new file mode 100644 index 0000000..1260f69 --- /dev/null +++ b/syamauchi/src/C052.java @@ -0,0 +1,34 @@ +package src; + +import java.util.Scanner; + +public class C052 { + final int verticalResolution; // 縦の画素数 + final int horizontalResolution; // 横の画素数 + + public C052(final int verticalResolution, final int horizontalResolution) { + this.verticalResolution = verticalResolution; + this.horizontalResolution = horizontalResolution; + } + + public static void main(String[] args) { + final Scanner sc = new Scanner(System.in); + final C052 screen = new C052(sc.nextInt(), sc.nextInt()); + // 計算して出力 + System.out.println(screen.redraw(sc.nextInt(), sc.nextInt())); + sc.close(); + } + + // 再描写する画素数の計算 + public int redraw(final int verticalScroll, final int horizontalScroll) { + // スクロールする距離は負の値をとることもあるので絶対値に変換して計算 + + // 縦の差分 + final int verticalDifference = this.horizontalResolution * Math.abs(verticalScroll); + // 横の差分 + final int horizontalDifference = this.verticalResolution * Math.abs(horizontalScroll); + // 縦の差分と横の差分の共通部分 + final int commonScreen = Math.abs(verticalScroll) * Math.abs(horizontalScroll); + return verticalDifference + horizontalDifference - commonScreen; + } +} diff --git a/syamauchi/test/C052Test.java b/syamauchi/test/C052Test.java new file mode 100644 index 0000000..ad8d262 --- /dev/null +++ b/syamauchi/test/C052Test.java @@ -0,0 +1,57 @@ +package test; + +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.*; +import org.junit.Test; +import src.C052; + +public class C052Test { + + @Test + public void 再描画画素数を計算するテスト() { + final C052 sut = new C052(240, 180); + final int actual = sut.redraw(30, 30); + final int expected = 11700; + + assertThat(actual, is(expected)); + } + + // 解像度の範囲は 1<= verticalResolution, horizontalResolution <=10000 + @Test + public void 解像度がそれぞれ1の時のテスト() { + final C052 sut = new C052(1, 1); + final int actual = sut.redraw(1, 0); + final int expected = 1; + + assertThat(actual, is(expected)); + } + + @Test + public void 解像度がそれぞれ10000の時のテスト() { + final C052 sut = new C052(10000, 10000); + final int actual = sut.redraw(10000, 0); + final int expected = 100000000; + + assertThat(actual, is(expected)); + } + + // スクロールする距離は負の値をとることもある + @Test + public void スクロール距離の値が負の時のテスト() { + final C052 sut = new C052(10000, 10000); + final int actual = sut.redraw(-10000, 0); + final int expected = 100000000; + + assertThat(actual, is(expected)); + } + + // スクロールが行われなければ再描画されない + @Test + public void 再描画しない時のテスト() { + final C052 sut = new C052(10000, 10000); + final int actual = sut.redraw(0, 0); + final int expected = 0; + + assertThat(actual, is(expected)); + } +} -- GitLab