diff --git a/syamauchi/src/C020.java b/syamauchi/src/C020.java new file mode 100644 index 0000000000000000000000000000000000000000..4475588cf66db88c3bba95dc4bb66db9ec49346e --- /dev/null +++ b/syamauchi/src/C020.java @@ -0,0 +1,41 @@ +package src; + +import java.math.BigDecimal; +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); + + // food - food * percentageSaleFood + final BigDecimal unsold = food.subtract(food.multiply(percentageSaleFood)); + final BigDecimal percentageSaleSideDish = saleSideDish.divide(PERCENTAGE); + // unsold - unsold * percentageSideDish + final BigDecimal allUnsold = unsold.subtract(unsold.multiply(percentageSaleSideDish)); + // + return (allUnsold.floatValue()); + } +} diff --git a/syamauchi/src/C052.java b/syamauchi/src/C052.java new file mode 100644 index 0000000000000000000000000000000000000000..1260f69e3404d979079716e7a35cc5799430e0bf --- /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/C020Test.java b/syamauchi/test/C020Test.java new file mode 100644 index 0000000000000000000000000000000000000000..8c036a123c44f456aa4fc3043a395229c6e6da65 --- /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)); + } +} diff --git a/syamauchi/test/C052Test.java b/syamauchi/test/C052Test.java new file mode 100644 index 0000000000000000000000000000000000000000..ad8d26280002a214a7abbfb7f44d1b468a94f1d0 --- /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)); + } +}