[paiza]フィズバズ（Fizz Buzz (paizaランク C 相当)

# 3がつくときだけアホになるやつではない
【世界の...】が付くと、山ちゃん（手羽先のアレ）が思いついちゃう。

https://paiza.jp/works/mondai/c_rank_skillcheck_sample/fizz-buzz

# チェック処理とかは端折ってる
/** ここから定型文 */
ここで記載したクラスについては、
[こっちの記事](https://qiita.com/AsilHatake/items/40204293bdf59cb9f9d8)に書いてある、標準入力をList化したりしてるMainクラスから呼び出す予定だし・なんか継承したりしてるYO!!

ちな、Mainを実行して標準入力から入力するのクソ面倒くさいので、
Java編については問題の入力例をパラメータにしたテストクラスとかも作って公開するYO!!

<details open><summary>開発・実行環境はこんな感じ</summary>

- VSCode
- Java 17
- jUnit 5.9
- maven

pom.xmlはこんな感じ

```xml:pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>jp.co.asil</groupId>
    <artifactId>paiza202408</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.9.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>
```

</details>
/** ここまで定型文 */

## 実装クラス 
```java:FizzBuzz.java
package jp.co.asil.paiza202408;

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class FizzBuzz extends Question {

  public FizzBuzz(List<String> list) {
    super(list);
  }

  /**
   * 整数 N が入力として与えられます。
   * 
   * 1からNまでの整数を1から順に表示してください。
   * 
   * ただし、表示しようとしている数値が、
   * 
   * ・3の倍数かつ5の倍数のときには、"Fizz Buzz"
   * ・3の倍数のときには、"Fizz"
   * ・5の倍数のときには、"Buzz"
   * 
   * を数値の代わりに表示してください。
   */
  @Override
  public List<String> answer() {
    return IntStream.range(1, Integer.parseInt(list.get(0)) + 1)
        .mapToObj(i -> i % 15 == 0 ? "Fizz Buzz" : i % 3 == 0 ? "Fizz" : i % 5 == 0 ? "Buzz" : String.valueOf(i))
        .collect(Collectors.toList());
  }
}
```

## テストクラス 
```java:FizzBuzzTest.java
package jp.co.asil.paiza202408;

import static org.junit.jupiter.api.Assertions.assertArrayEquals;

import java.util.List;

import org.junit.jupiter.api.Test;

public class FizzBuzzTest {

  @Test
  void testAnswer1() {
    FizzBuzz testClass = new FizzBuzz(List.of("5"));
    assertArrayEquals(testClass.answer().toArray(), new String[] { "1",
        "2",
        "Fizz",
        "4",
        "Buzz" });
  }

  @Test
  void testAnswer2() {
    FizzBuzz testClass = new FizzBuzz(List.of("20"));
    assertArrayEquals(testClass.answer().toArray(), new String[] { "1",
        "2",
        "Fizz",
        "4",
        "Buzz",
        "Fizz",
        "7",
        "8",
        "Fizz",
        "Buzz",
        "11",
        "Fizz",
        "13",
        "14",
        "Fizz Buzz",
        "16",
        "17",
        "Fizz",
        "19",
        "Buzz" });
  }
}
```

# 世界のナベアツロジック（3の倍数と3の付く数字の時にアホになるアレ
FizzBuzzの解説とか世の中に溢れてるため、特に何もなかったので、
桂三度さんのだいぶ古いネタをプログラム化してみたよ。
※こっちについても二番煎じ、三番煎じ感が強いところですが。。。
## 実装クラス 
```java:Nabeatsu.java
package jp.co.asil.paiza202408;

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class Nabeatsu extends Question {

  public Nabeatsu(List<String> list) {
    super(list);
  }

  /**
   * 整数 N が入力として与えられます。
   * 
   * 1からNまでの整数を1から順に表示してください。
   * 
   * ただし、表示しようとしている数値が、
   * 
   * ・3の倍数 または 3の付く数字のときには、"[数字]!(アホになる"
   * 
   * を数値の代わりに表示してください。
   */
  @Override
  public List<String> answer() {
    return IntStream.range(1, Integer.parseInt(list.get(0)) + 1)
        .mapToObj(i -> i % 3 == 0 || String.valueOf(i).indexOf("3") >= 0 ? (i + "!(アホになる") : String.valueOf(i))
        .collect(Collectors.toList());
  }
}
```

## テストクラス 
```java:NabeatsuTest.java
package jp.co.asil.paiza202408;

import static org.junit.jupiter.api.Assertions.assertArrayEquals;

import java.util.List;

import org.junit.jupiter.api.Test;

public class NabeatsuTest {

  @Test
  void testAnswer1() {
    Nabeatsu testClass = new Nabeatsu(List.of("40"));
    assertArrayEquals(testClass.answer().toArray(),
        new String[] { "1",
            "2",
            "3!(アホになる",
            "4",
            "5",
            "6!(アホになる",
            "7",
            "8",
            "9!(アホになる",
            "10",
            "11",
            "12!(アホになる",
            "13!(アホになる",
            "14",
            "15!(アホになる",
            "16",
            "17",
            "18!(アホになる",
            "19",
            "20",
            "21!(アホになる",
            "22",
            "23!(アホになる",
            "24!(アホになる",
            "25",
            "26",
            "27!(アホになる",
            "28",
            "29",
            "30!(アホになる",
            "31!(アホになる",
            "32!(アホになる",
            "33!(アホになる",
            "34!(アホになる",
            "35!(アホになる",
            "36!(アホになる",
            "37!(アホになる",
            "38!(アホになる",
            "39!(アホになる",
            "40" });
  }
}
```