Python

もうすぐIPython Notebookが流行る気がするので

不在通知票を貼っておく。というか日本語の情報に飢えているので誰か包括的な解説を書いてほしいです。なんかできることが多すぎて私の手には余る。 MatplotlibのグラフやSympyの数式がインタラクティブ表示できる Markdown形式で文章を挿入できMathJaxも普…

Word ladder

問題文 [12/4/2012] Challenge #114 [Easy] Word ladder steps : dailyprogrammer ワード・ラダーは、単語を一度に一文字だけ変更することによって生成される単語の順列のことである。例: cold → cord → card → ward → warmこの問題では、四文字単語の辞書…

Redditをスクレイピングする例題

[11/3/2012] Challenge #110 [Intermediate] Creepy Crawlies : dailyprogrammer 問題 問題文 Webは不気味なストーリーで溢れかえっています。Redditにおいては/r/nosleepに。あなたは熱烈な不眠愛好者ですから(我々は結局のところプログラマですからね)、…

文字列が数字のみで成り立っているか調べる

問題 [10/30/2012] Challenge #109 [Easy] Digits Check : dailyprogrammer 概要 与えられた文字列が数字のみで成り立っていればTrue、そうでなければFalseを返す関数を書く。 たとえば小数点(.)を含むものはFalseを返す。 入力 入力:数字のみを含むか含ま…

パンデジタル数(Pandigital Number)を見つける

問題 Need help with a number theory problem(java) : learnprogramming 3桁の数に3桁の数を足して4桁の数にする式を考える。0〜9までの数字を一度ずつ使ってこの等式を表したとき、3つの数が最小になるような組み合わせはどれか。 http://programmingpraxi…

野球のボールカウント

オフラインリアルタイムどう書く第三回の参考問題 #どう書く #yhpg #勉強会 #Ruby - Qiita 問題 野球のボールカウント・アウトカウントの遷移を計算する。(得点・ランナー・イニング の計算は不要) ただし、ストライク・ボール・ファウル・ヒット・ピッチ…

Pythonでリストをflattenする方法まとめ

参考 1段ネストしたリストをflattenする方法 Making a flat list out of list of lists in Python - Stack Overflow 2段以上ネストしたリストをflattenする方法 Flatten (an irregular) list of lists in Python - Stack Overflow Right Foot In: More on py…

単語の異なる文字の数[9/30/2012] Challenge #102 [intermediate] (n-character-set strings) : dailyprogrammer

[9/30/2012] Challenge #102 [intermediate] (n-character-set strings) : dailyprogrammer 問題 単語sと数nを受け取り、単語の異なる文字の数がn以下の時Trueそれ以外の場合False返す関数。 解答 def ncset(s, n): return len(set(s)) <= n if __name__ == …

余りを取るだけの簡単な問題[10/18/2012] Challenge #104 [Easy] (Powerplant Simulation) : dailyprogrammer

問題 [10/18/2012] Challenge #104 [Easy] (Powerplant Simulation) : dailyprogrammer 日数を取り、3, 14, 100の倍数日ごとに停止する発電所の稼働日数を返す関数を作る。 解答 def plant_online_days(day): online_day = 0 for i in range(1, day+1): if i…

テトリスの揃った列を消す - Bit Tetris

問題 Bit Tetris 〜 横へな 2012.7.25 16進数文字列で表現されたテトリスのフィールドを受け取って揃っている列を消す問題。 解答 zip(*list)が便利すぎる。 def bit_tetris(notation): xbits = notation.split("-") bbits = map(lambda x: bin(int(x, 16))[…

ポーカーの手札から役を特定する

問題 第一回 オフラインリアルタイムどう書くの参考問題 #勉強会 #Ruby #C - Qiita 5枚のカードを示す文字列を入力とし、ポーカーの役を出力せよ。 ただし: 一枚のカードは、スートを表す文字+ランクを表す文字列 で構成される。 スートを表す文字は、S, H,…

三目並べ(Tick Tack Toe)の勝敗を出力

問題 Tick-Tack-Toe 〜 横へな 2012.7.6 文字列形式で入力された先攻後攻の手から勝敗(引き分け)を判断する。 不正な入力は考慮しないが、不正な手(すでに置かれている場所に置こうとする)は考慮する。 解答 def tick_tack_toe(record): record = map(la…

ある表記法に則った画像を回転する問題 - 第2回 オフラインリアルタイムどう書くの参考問題

問題 第2回 オフラインリアルタイムどう書くの参考問題 #勉強会 #どう書く #yhpg #Ruby #C - Qiita ある表記法に則った2値画像データを時計回りに90度回転させてもとの表記に戻す問題。 解答 一行あたりの処理単位がめちゃくちゃだけど、スライシング多用で…

テーブルトークRPGのダイス表記を計算する [9/30/2012] Challenge #102 [easy] (Dice roller) : dailyprogrammer

[9/30/2012] Challenge #102 [easy] (Dice roller) : dailyprogrammer 問題 ダイス表記(dice notation)とは"AdB(+/-)C"という形式の文字列(A,B,Cは数)を受け取って以下の計算を行う記法である。 1からBまでの乱数(B面ダイス)をA回ふって合計する。 1の…

操車場アルゴリズム(Shunting Yard Algorithm)による中置記法の解析 [10/18/2012] Challenge #104 [Hard] (Stack Attack) : dailyprogrammer

[10/18/2012] Challenge #104 [Hard] (Stack Attack) : dailyprogrammer 問題 あのDijkstraが発明した手法だそう。 説明 あなたは邪悪なエンジニアであり、D++という新しい言語を作ろうとしている。これはあなたのお気に入りの計算機科学者にちなんで"Dijkst…

カッコの対応を判定する[10/18/2012] Challenge #104 [Intermediate] (Bracket Racket) : dailyprogrammer

[10/18/2012] Challenge #104 [Intermediate] (Bracket Racket) : dailyprogrammer 問題文 カッコ"()", カギカッコ"[]", 波カッコ"{}", 山カッコ"<>" を含む文字列がちゃんと対応して閉じているか確認する。 入力と出力の形式 入力は文字列、返り値は真偽値…

AOJ 0033 - Ball

問題文はこちら テストインプットを0033.txtから開いているのでそのままでは通らない。 解答 def solve(balls): right, left = [0], [0] while balls: ball = balls.pop(0) if ball > right[-1]: right.append(ball) elif ball > left[-1]: left.append(ball…

n人の中で誕生日が同じ人がいる確率

問題 Birthday Paradox « Programming Praxis 23人いる場合、そこに誕生日が同じ人がいる確率は50%である。57人の場合は99%だ。 これは確率の知識として知られている。 シミュレーションによってこれを確かめよう。 解 うるう年は考慮しない。 from __future…

Challenge #101 [easy] (Non-repeating years) : dailyprogrammer

問題 [9/27/2012] Challenge #101 [easy] (Non-repeating years) : dailyprogrammer (年を表す)数字を桁ごとに見たとき、重複のないものだけを選ぶ問題。 たとえば1980から1987までの間で考えると、1がふたつある1981を除く(1980, 1982, 1983, 1984, 1985,…

Pygameでラングトンの蟻(Langton's Ant)

ラングトンのアリ - Wikipedia描いてみただけ。 ソース ちょうてきとう。 # -*- coding: utf-8 -*- import sys import pygame from pygame.locals import * FPS = 30 width, height = 800, 600 BLACK = (0, 0, 0) WHITE = (255, 255, 255) RED = (255, 0, 0)…

Python/PILで画像にノイズをかけ各種フィルタで除去する

PIL特有の機能を使わずにピクセル操作から自力実装する。 Python Imaging Library Handbook 流れ ノイズ付加 ごま塩ノイズ(Salt-pepper Noise) ガウシアンノイズ?(Gaussian Noise)→ よくわからなかった ノイズ除去 移動平均法(Mean Filter) ガウシアン…

Python/PILによる画像のグレイスケール化とアスキーアート化

これを見ていたら手がうずうずしてきたので描いてみた。Cool Ascii Animation using an Image Sprite, Canvas, and Javascriptリンク先はカラー画像(JavaマスコットキャラのDukeくん)をCanvasで グレイスケール化し、 輝度にあわせてアスキーアートに変換し…

ABC予想をPythonで調べる

もちろん宇宙際Teichmüller理論とか全然分からない。 計算機で何か分かればいいなというコンセプトでWikipediaをなぞりながら逐一プログラムを書いてゆく。ABC予想 - Wikipedia 数学の難問「ABC予想」、京大教授が解明か :日本経済新聞 ABC Conjecture «…

Let's take tea break | Code Puzzle解題

Let's take tea break | Code Puzzle 任天堂のクイズのやつ。 first_code.py if pow(m, 17) % 3569 == 915: return str(m) となる自然数 m を探す問題。range(10000)ぐらいまでとって総当たりすればよい。数学的に解けるかも? second_code.py あるルールに…

『幅優先探索の基本:ITpro』の例題を解く

2012/09/03 高橋 直大 出典:日経ソフトウエア 2012年7月号 やわらか頭でアルゴリズムを10倍生かす - 第1回 幅優先探索の基本:ITpro [追記 解くと銘打ってますが間違いが多くて参考になりませんごめんなさい] 例題1 200円持ってコンビニに行きました。コン…

Pythonでコラッツの問題

問題の定義はコラッツの問題 - Wikipediaを参照。 コードは簡単。数列の形で解を得るようにする。 def collatz(x): lists = [] while x != 1: x = x/2 if x%2 == 0 else x*3 + 1 lists.append(x) return lists ステップ数を得る場合はlenを使う。 len(collat…

joinのデフォルトセパレータ

文字列の配列を結合するさい、Pythonでは "".join(['1', '2', '3']) # => '123' という書き方をする。 区切り文字を入れたい場合は、以下のようにすればよい。 "_".join(['1', '2', '3']) # => '1_2_3' さて、RubyにおいてはArrayがjoinを持っていて、それぞ…

Pythonでパスワード生成

問題文 [2/12/2012] Challenge #4 [easy] : dailyprogrammer ランダムパスワードジェネレータを作りましょう! 解答 まず候補となる文字を用意しよう。 問題文リンク先の、トップバッターの解答者のように、 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRS…

Python 2.xでカエサル暗号を一行で書く方法

驚いたので書留めておく。Pythonのencodeとはいったい…うごごご "abcd".encode("rot13") # => nopq またdecryptも "nopq".decode("rot13") で一行で書ける。ワンライナーと呼ぶほどおしゃれなものではない。ときにPythonでカエサル暗号というと、import this…

先頭文字の大文字化(capitalize)を使う例題[7/13/2012] Challenge #76 [easy] (Title case) : dailyprogrammer

redditのdailyprogrammerが楽しげです。 問題 Challenge #76 (Title case) : dailyprogrammer 文字列のそれぞれの単語の先頭文字を大文字にする(capitalize)関数を作る。ただしexceptionsで渡された単語は除いて。なおexceptionsに含まれるものであっても文…