— レビログ



C言語使いが、トリッキーにFizzBuzzを書くとprintfは1回で

#include <stdio.h>

int main(void){
    int i;
    for(i = 1 ; i <= 100 ; i++){
        printf("%d \0Fizz \0FizzBuzz "+(i%5?(i%3?0:4):(i%3?14:10)),i);
    }
    printf("\n");
    return 0;
}

普段こんなトリッキーなコードは書きませんが
C言語使いがトリッキーにFizzBuzzを書くならどうするかを考えました

とりあえずは、printfのハッキングですよね
("%d \0Fizz \0FizzBuzz "

という\0を使った文字列と+数式というコードで表示位置をずらすという典型的なCのトリックを使いました。
最後の,iの部分はスタックを使ったハックですが、メモリ的には怪しいこともw

基本的に、こんな読みにくいコード書く意味を感じませんが、トリッキーにかつ実用的に書くとこういうことですよねぇと

ちなみにBuzzはFizzBuzzを4文字目から表示させることでメモリを消メモリ化しています。

?という3項演算子を使って判断行を1行にまとめつつ、strcpyなどの重い関数を使わない。
基本的なトリックということでいかがでしょうか?

C – は「LLですが、なにか?」 – Fabrice Bellard on tcc
http://blog.livedoor.jp/dankogai/archives/51494577.html

LL的にというかPerl的にCを使ってFizzBuzzを書かれた方がいらっしゃったので触発されて書きました

C is truly Lightweight Language for “CPU”


関連する記事はありません.

0 comments
Submit comment