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”
関連する記事はありません.