回答編集履歴

4

コードを追記

2023/04/17 21:18

投稿

xebme
xebme

スコア1083

test CHANGED
@@ -6,3 +6,56 @@
6
6
  ただしnが偶数の場合のみ行`i/n`を加える
7
7
 
8
8
  改行は`(i+1)%n == 0`
9
+
10
+ **素朴案**
11
+
12
+ 1行の文字数が偶数、奇数どちらの場合でもチェッカーボードになるよう除数`d`を調整しました。
13
+
14
+ ```Java
15
+ /**
16
+ * チェッカーボードを作る
17
+ * @param l 1行のマス目の数
18
+ * @param n 行数
19
+ */
20
+ static void pattern(int l, int n) {
21
+ int d = (l%2==0) ? l : l * n;
22
+ for (int i = 0; i < l * n; ++i) {
23
+ if ((i+i/d)%2 == 0) {
24
+ System.out.print('□');
25
+ } else {
26
+ System.out.print('■');
27
+ }
28
+ if ((i+1)%l == 0) {
29
+ System.out.println();
30
+ }
31
+ }
32
+ System.out.println();
33
+ }
34
+ ```
35
+
36
+ **関数化案**
37
+
38
+ 文字の判定、改行の判定をそれぞれ関数化しました。
39
+
40
+ ```Java
41
+ import java.util.function.Function;
42
+ import java.util.stream.Collectors;
43
+ import java.util.stream.IntStream;
44
+
45
+ public class CheckerBoard {
46
+
47
+ static Function<Integer,String> letter = x -> (x%2 == 0) ? "□" : "■";
48
+ static Function<Integer,Function<Integer,String>> supp1 = l -> (l%2 == 0) ? x -> letter.apply(x + x/l): x -> letter.apply(x);
49
+ static Function<Integer,Function<Integer,String>> supp2 = l -> x -> ((x+1)%l == 0) ? "\r\n" : "";
50
+
51
+ static void pattern(int l, int n) {
52
+ Function<Integer,String> bw = supp1.apply(l); // "□""■"判定
53
+ Function<Integer,String> cr = supp2.apply(l); // "\r\n"判定
54
+ System.out.println(
55
+ IntStream.range(0,l * n)
56
+ .mapToObj(i -> bw.apply(i) + cr.apply(i))
57
+ .collect(Collectors.joining())
58
+ );
59
+ }
60
+ }
61
+ ```

3

文章の乱れは心の乱れ。文字判定、改行判定は関数化できます。食べ物名パターンの質問者は同一人物ですか。ChatGPTに聞いてみてね。

2023/04/17 20:32

投稿

xebme
xebme

スコア1083

test CHANGED
@@ -1,8 +1,8 @@
1
1
  **今何行目ですか**
2
2
 
3
- 文字の白黒判定は`i % 2`
3
+ 文字の白黒判定は`i % 2`
4
4
  これに今何行目かを加えるとよい `(i + i/4) % 2`
5
5
  行に含まれる文字数を変えたければ4を任意の数`n`に変える
6
- ただしnが偶数のみ行`i/n`を加え。nが奇数なら`i/n`を加えない
6
+ ただしnが偶数の場合のみ行`i/n`を加え
7
7
 
8
8
  改行は`(i+1)%n == 0`

2

nが偶数、奇数で場合わけ

2023/04/17 07:49

投稿

xebme
xebme

スコア1083

test CHANGED
@@ -1,7 +1,8 @@
1
1
  **今何行目ですか**
2
2
 
3
3
  文字の白黒判定は`i % 2`。
4
- これに今何行目かを加えるとよい `(i + i / 4) % 2`
4
+ これに今何行目かを加えるとよい `(i + i/4) % 2`
5
5
  行に含まれる文字数を変えたければ4を任意の数`n`に変える
6
+ ただし、nが偶数のみ行`i/n`を加え。nが奇数なら`i/n`を加えない
6
7
 
7
8
  改行は`(i+1)%n == 0`

1

改行を変更

2023/04/17 01:02

投稿

xebme
xebme

スコア1083

test CHANGED
@@ -4,4 +4,4 @@
4
4
  これに今何行目かを加えるとよい `(i + i / 4) % 2`
5
5
  行に含まれる文字数を変えたければ4を任意の数`n`に変える
6
6
 
7
- 改行は`(i+1)/n == 0`
7
+ 改行は`(i+1)%n == 0`