Comment detail
逆順になるあみだくじ (Nested Flatten)バブルソートの可視化の問題ですね。 これって、縦方向の量って圧縮できるんでしょうか。
ばれちゃいましたか。
わかる人はわかったようですね。
最初は「縦方向がもっとも圧縮されたものを表示してください」という
お題にしようかと思っていたのですけども、
あえて書かないことにしたのでした。
ネタバレついでに僕が試しに書いたコードのうち読みにくい方を投稿~。
1 | (lambda w:(lambda n,f:[w("%s "%i)for i in range(n)]and w("\n")or[f((i+x)%2 for x in range(n-1))for i in range(n)]and f([0]*(n-1))or[w("%s "%i)for i in reversed(range(n))]and w("\n"))(input("n=? >>>"),lambda b:w("|"+"|".join(" _"[c]for c in b)+"|"+"\n")))(__import__("sys").stdout.write)
|
縦方向にもっとも圧縮されたものに挑戦。 もっとも圧縮でn回になりそうですね。
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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | #include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
int n; /* あみだの数 */
int keta; /* 数字の桁数 */
int i, j; /* ループカウンタ */
char *under; /* 移動線 */
/* nを決定する */
if (argc < 2) {
fprintf(stderr, "usage: %s n\n", argv[0]);
return 1;
}
n = atoi(argv[1]);
if (n < 2) {
n = 2;
}
keta = 1;
for (i = n+1; i >= 10; i /= 10) {
keta++;
}
/* 初期化、一番上の数字の表示 */
under = malloc((keta+1) * sizeof(*under));
memset(under, '_', keta);
under[keta] = '\0';
for (i = 0; i < n; i++) {
printf("%d%*c", i, keta, ' ');
}
printf("\n");
/* あみだ作成 */
for (i = 0; i < n; i++) {
if ((i % 2) == 0) {
j = 0;
}
else {
j = 1;
printf("|%*c", keta, ' ');
}
/* 実際に移動線がでるとこ */
for (; j+1 < n; j+=2) {
printf("|%s|%*c", under, keta, ' ');
}
if (j+1 <= n) {
printf("|%*c", keta, ' ');
}
printf("\n");
}
/* 最後の縦線と数字の表示 */
for (i = 0; i < n; i++) {
printf("|%*c", keta, ' ');
}
printf("\n");
for (i = 0; i < n; i++) {
printf("%-*d ", keta, n-i-1);
}
printf("\n");
free(under);
return 0;
}
|
作ってみたけどやり方が一緒なんで、ちょっと短縮させていただきました。
1 2 3 4 5 6 7 8 | /* あみだ作成 */
for (i = 0; i < n; i++) {
for (j=0; j < n-1; j++) {
if((i+j)%2==0) printf("|%s",under);
else printf("|%*c",keta,' ');
}
printf("|\n");
}
|





にしお
#734()
Rating0/0=0.00
1 reply [ reply ]