Advertisement
Advertisement

More Related Content

Advertisement

ゴルフ

  1. コードゴルフ Created by / 嶋⽥健志 @TakesxiSximada
  2. はい
  3. お前誰よ(⾃⼰紹介) 嶋⽥健志 (@TakesxiSximada) Webエンジニア フリーランス Python好き
  4. 本題
  5. コードゴルフは好きですか?
  6. これではありません
  7. コードゴルフは好きですか?
  8. コードゴルフは好きですか?
  9. コードゴルフは好きですか?
  10. コードゴルフ!!
  11. コードゴルフ Created by / 嶋⽥健志 @TakesxiSximada
  12. コードゴルフ is ... コードゴルフ(Code golf)とは、 特定の動作をするプログラムのソ ースコードを、可能な限り短いバ イト数で記述するプログラミン グ・コンテストである。 by Wikipedia
  13. つまり コードが短い⽅が偉い
  14. 偉い (๑•̀ㅁ•́๑)✧
  15. そんなの当たり前 だろ!!
  16. プログラミングの種類と考えること 種類 考えること 実際の業務 可読性/保守性/再利⽤性など...い ろいろ 競技プログラミ ング 計算速度(計算量)/メモリ使⽤量 コードゴルフ コードの短さ
  17. 要件が違えば 書くコードは変わる
  18. さらに⼤事なこと
  19. さらに⼤事なこと 140⽂字以下じゃない とTweetできない
  20. 例1: fizzbuzz
  21. fizzbuzz is ... 1からスタートして⾃然数を表⽰していく 3で割り切れる数字はfizzを表⽰する 5で割り切れる数字はbuzzを表⽰する
  22. つまり世界のナベアツ
  23. python -c 'print("n".join(["fizz",""] [bool(i%3)]+["buzz",""][bool(i%5)] or str(i) for i in range(1,101)))'
  24. 106⽂字 In [1]: len("""python -c 'print("n".join(["fizz",""][bo ol(i%3)]+["buzz",""][bool(i%5)] or str(i) for i in range(1,101)))'"" ") Out[1]: 106
  25. (╭☞•́⍛•̀)╭☞からの?
  26. python -c 'for c in range(101):print(c%3//2*"Fizz"+c%5//4*"Buzz"or- ~c)'
  27. 72⽂字 In [1]: len(""""python -c 'for c in range(101):print(c%3 //2*"Fizz"+c%5//4*"Buzz"or-~c)'""") Out[1]: 73
  28. (๑˃ ̵ᴗ˂̵)‫ و‬ヨシ!
  29. 例2: 奇数の完全数
  30. 奇数の完全数 is ... 2で割り切れない⾃然数(つまり奇数) その数を除く約数の和がその数になる(つまり完全数) 上記2つが同時に成り⽴つ数
  31. これまでに このような数字は
  32. これまでに このような数字は ⾒つかっていない
  33. もし運良く ⾒つかってしまったら 数学史に名前が残る
  34. ٩(๑❛ᴗ❛๑)۶ ヤッタ〜!!
  35. python -c "from itertools import *; print(next(n for n in count(1,2) if sum(s for s in range(1,(n//2)) if ((n/s)%1)==0)==n))"
  36. よくわかかる解説
  37. sum(s for s in range(1,(n//2)) if ((n/s)%1)==0) 1からある数n//2(nの半分)までの数 (完全数はn⾃⾝は含まない) sは1からn//2までの整数 n/sが1で割り切れる(余りなしなので約数) sum()内はリスト内包表記のジェネレータとなる sum()で合計
  38. next(n for n in count(1,2) if (約数の合 計)==n)" count() (itertools.count())で奇数を取得 約数の合計がある数nになるものを探す next()内はジェネレータとなる next()でジェネレータを⼀つ進める itertools.count()は標準モジュールなのでセーフ (ということにしている)
  39. 125⽂字 In [2]: len('''python -c "from itertools import *; print (next(n for n in count(1,2) if sum(s for s in range(1,(n//2)) if ((n /s)%1)==0)==n))"''') Out[2]: 125")
  40. 実際にやってみて 103029以下には ない事を確認した
  41. 実際にやってみて 103029以下には ない事を確認した なお⾒つからない模様
  42. 探す事は難しくない ⾒つける事は難しい
  43. 探す事は難しくない ⾒つける事は難しい 世の中そんなに ⽢くない
  44. (๑•́ ₃ •̀๑)エー
  45. まとめ コードゴルフはコードが短いほどよい 少なくとも140⽂字以下じゃないとtweetできない コードゴルフはゴルフではありません
  46. みんなやろうよ!! コードゴルフ おわり
Advertisement