このコードはどのようにしてインドの地図を生成するのでしょうか? 質問する

このコードはどのようにしてインドの地図を生成するのでしょうか? 質問する

このコードはインドの地図を印刷します。どのように動作するのでしょうか?

#include <stdio.h>
main()
{
    int a,b,c;
    int count = 1;
    for (b=c=10;a="- FIGURE?, UMKC,XYZHello Folks,\
    TFy!QJu ROo TNn(ROo)SLq SLq ULo+\
    UHs UJq TNn*RPn/QPbEWS_JSWQAIJO^\
    NBELPeHBFHT}TnALVlBLOFAkHFOuFETp\
    HCStHAUFAgcEAelclcn^r^r\\tZvYxXy\
    T|S~Pn SPm SOn TNn ULo0ULo#ULo-W\
    Hq!WFs XDt!" [b+++21]; )
    for(; a-- > 64 ; )
    putchar ( ++c=='Z' ? c = c/ 9:33^b&1);
    return 0;
}

ベストアンサー1

長い文字列は、単に ASCII に変換されたバイナリ シーケンスです。最初のforステートメントはb10 から始まり、[b+++21]文字列の後のステートメントは 31 になります。文字列を配列として扱うと、オフセット 31 は文字列内の「実際の」データの開始点になります (提供されたコード サンプルの 2 行目)。コードの残りの部分は、ビット シーケンスをループし、1 と 0 を ! と空白に変換して、一度に 1 文字ずつ出力します。

より分かりやすいバージョン:

#include "stdio.h"
int main (void) {
    int a=10, b=0, c=10;
    char* bits ="TFy!QJu ROo TNn(ROo)SLq SLq ULo+UHs UJq TNn*RPn/QPbEWS_JSWQAIJO^NBELPeHBFHT}TnALVlBLOFAkHFOuFETpHCStHAUFAgcEAelclcn^r^r\\tZvYxXyT|S~Pn SPm SOn TNn ULo0ULo#ULo-WHq!WFs XDt!";
    a = bits[b];
    while (a != 0) {
        a = bits[b];
        b++;
        while (a > 64) {
            a--;
            if (++c == 'Z') {
                c /= 9;
                putchar(c);
            } else {
                putchar(33 ^ (b & 0x01));
            }
        }
    }
    return 0;
}

奇妙で 巧妙な部分 はステートメントにありますputchar。最初の を取りますputchar。ASCII は'Z'10 進数で 90 なので、90 / 9 = 10 となり、これは改行文字です。2 番目では、10 進数 33 は の ASCII です'!'。33 の下位ビットを切り替えると 32 になり、これはスペースの ASCII です。これにより、 が奇数の!場合は が印刷されb、 が偶数の場合は空白が印刷されます。残りのコードは、単に文字列内でb「ポインタ」を移動するためのものです。a

おすすめ記事