Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Crystalで最長コマンドしりとり

 Crystalで最長コマンドしりとり

2020/01/17(Fri) 社内LT会で発表したスライドです。

参考
- CiNii 論文 -  最長しりとり問題の解法: https://ci.nii.ac.jp/naid/110002768734
- 単語集合から最長しりとりを得るプログラム: https://chiraura.hhiro.net/shiritori/
- 拙作: https://github.com/typewriter/any-shiritori

typewriter / takuya

January 17, 2020
Tweet

More Decks by typewriter / takuya

Other Decks in Programming

Transcript

  1. 最長しりとり問題の解法 (乾・品野・鴻池・小谷、2005) 単語数を有向辺の容量 とし、しりとりの条件 を満たしつつ各有向辺 を流れるフロー量の総 和を最大化する問題 https://ci.nii.ac.jp/naid/110002768734 2 2

    1 1 1 1 1 1 ・始点のみ 出る量が1多い ・終点のみ 入る量が1多い ・それ以外は 入る量=出る量 ・連結である (緩和問題) いい感じに解く(論文参照) 1. 整数計画問題として定式化 2. しりとりの条件を一部外して パワーで解く(緩和問題) 3. 条件を足してパワーで解く、 を繰り返して最適解を求める 4. 最適解からしりとり生成
  2. Crystalでコマンドしりとり • https://github.com/typewriter/any-shiritori ◦ 整数計画問題のソルバにGLPKを使用 $ wc -l src/* 26

    src/any_shiritori.cr 257 src/branch_and_bound_solver.cr $ time ./any_shiritori debian-10.2.txt real 0.14
  3. • 最長でいくつ繋がったか? Docker image:tag コマンド数 しりとり長 alpine:3.10.3 317 ? centos:8

    573 ? debian:10.2 409 ? Docker image:tag コマンド数 しりとり長 alpine:3.10.3 317 173 centos:8 573 326 debian:10.2 409 231 最長コマンドしりとり: 結果
  4. Debian GNU/Linux 10.2のコマンドしりとり znew => wc => ctrlaltdel => ldconfig

    => groupmod => dd => diff => fgrep => paste => e2image => expr => runuser => rmt-tar => rmdir => rm => md5sum => mkfs.cramfs => ss => swapon => nologin => newusers => switch_root => tzselect => tsort => tset => tput => timeout => test => taskset => tarcat => tune2fs => stat => tabs => su => users => split => tty => yes => sum => mkfs.bfs => sha512sum => mkfs => sha384sum => mke2fs => sha256sum => md5sum.textutils => sha224sum => mkhomedir_helper => runcon => nsenter => ...
  5. Debian GNU/Linux 10.2のコマンドしりとり ... => mount => tic => choom

    => mktemp => prlimit => tc => chmem => mkswap => pivot_root => tac => cppw => wdctl => lsmem => mv => vipw => wipefs => sync => chcpu => useradd => debconf-show => wall => ls => sdiff => fdformat => tee => e2freefrag => getcap => pwunconv => vdir => raw => whoami => install => lastb => badblocks => start-stop-daemon => numfmt => touch => hwclock => killall5 ふーん…(知らないコマンド多すぎ)
  6. おまけ: 日本語対応(47都道府県 → 長さ4) $ ./any_shiritori jp_prefectures.txt Length: 4 Shiritori:

    やまなし => しが => かがわ => わかやま 短い(こなみかん)