読者です 読者をやめる 読者になる 読者になる

naoya_t@hatenablog

いわゆるチラシノウラであります

ショートコーディング「世界を革命する力を」

ふとしたツイートからコードゴルフ大会が勃発


元ネタはご存知「少女革命ウテナ」の挿入歌「絶対運命黙示録」の歌詞。




CodeIQの中の人ノリノリですね…

さて。
{も,く,し} のpermutation全てが使われているので、next_permutation() を使って

#include <algorithm>
#include <cstdio>
main() {
  char *c[3]={"も","く","し"};
  int m[]={0,1,2};
  do {
    printf("%s%s%s¥n",c[m[0]],c[m[1]],c[m[2]]);
  } while (std::next_permutation(m,m+3));
}

みたいに書けるんじゃないか(※C++だけど)と一瞬思ったものの、
012→120→201→102→021→210
の順なのでこれを実現しようとすると

#include <algorithm>
#include <cstdio>
main() {
  char *c[3]={"も","く","し"};
  int m[]={0,1,2,3,1,4,5,4,0};
  for (int i=3; i<9; ++i) {
    printf("%s%s%s¥n", c[m[0]], c[m[1]], c[m[2]]);
    for (int j=m[i]; j; --j)
      std::next_permutation(m,m+3);
  }
}

的な事になってしまう。という以前に長すぎる*1

出力テキストをコードに埋め込んだ

main(){puts("もくし\nくしも\nしもく\nくもし\nもしく\nしくも");} 

でも81バイトなので、これより長いコードには(コードゴルフ的に)存在価値がない。

以下ツイートの抜粋。










特に期限も設けていないので、もっと短くできた人は @naoya_t までご一報ください!

*1:スペース等省いても215バイト。そしてツイートできる上限の140字を大きく上回る