GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

donnemartin

interactive-coding-challenges – インタラクティブなPythonインタビューの課題(アルゴリズムとデータ構造)。 アンキーのフラ..

投稿日:

インタラクティブなPythonインタビューの課題(アルゴリズムとデータ構造)。 アンキーのフラッシュカードが含まれています。

インタラクティブコーディングの課題

Ankiフラッシュカードを使用して 、120以上の絶え間なく更新された、インタラクティブな、テスト駆動のコーディングの課題があります。

課題はコーディングのインタビューで見つかったアルゴリズムデータ構造に焦点を当てます。

各チャレンジには、以下の1つまたは複数の参照ソリューションがあります。

  • 完全に機能する
  • ユニットテスト済み
  • わかりやすい

挑戦はすぐにあなたが最適なソリューションに到達するのを助けるために、オンデマンドの段階的なヒントを提供します。

ノートブックの詳細:

  • 制約
  • テストケース
  • アルゴリズム
  • ビッグオーの時間と空間の複雑さ

また、さまざまなデータ構造アルゴリズムの 単体テストリファレンス実装も含まれています

挑戦のソリューション

Anki Flashcards:コーディングとデザイン

提供されているAnkiフラッシュカードデッキは、間隔のある繰り返しを使用して、主要な概念を保持するのに役立ちます。

外出先での使用に最適です。

設計リソース:システム設計入門

システム設計オブジェクト指向設計のインタビューの準備に役立つリソースをお探しですか?

姉妹レポをチェックしてください。システムデザイン入門 :Ankiデッキを追加しています:

ノートブックの構造

それぞれの課題には、2つのノートブックがあります.1つは単体テストのチャレンジノート、もう1つは解決ノートです。

問題文

  • 解決すべき問題を述べる。

制約

  • 制約事項や前提条件について説明します。

テストケース

  • ユニットテストで評価される一般テストとエッジテストのケースについて説明します。

アルゴリズム

  • [チャレンジノート]空です。ヒントが必要な場合は、ソリューションノートのアルゴリズムのセクションを参照してください。
  • [ソリューションノート] Big-Oの時間と空間の複雑さを伴う、1つ以上のアルゴリズム解説。

ヒント

  • [チャレンジノート]最適なソリューションに到達するためのオンデマンドインクリメンタルヒントを提供します。 近日公開!

コード(挑戦:私を実装する!)

  • [チャレンジノート]実装するスケルトンコード。
  • [ソリューションノート] 1つ以上のリファレンスソリューション。

単体テスト

  • [チャレンジノート]あなたのコードの単体テスト。 チャレンジを解決するまで失敗することが予想されます。
  • [ソリューションノート]参照溶液の単体テスト。

インデックス

課題カテゴリ

フォーマット :チャレンジカテゴリ – チャレンジ数

総チャレンジ数:120

参照実装:データ構造

ユニットテストされ、以下のデータ構造の完全に機能的な実装。

リファレンス実装:アルゴリズム

ユニットテスト済みで、以下のアルゴリズムの完全に機能的な実装。

参照実装:TODO

インストールと実行の課題

その他

課題

イメージクレジット

配列と文字列

チャレンジ スタティックノート
文字列に一意の文字が含まれているかどうかを判断する チャレンジ解決策
文字列が別の文字列の置換であるかどうかを判断する チャレンジ解決策
文字列が別の文字列の回転であるかどうかを判断する チャレンジ解決策
文字列を圧縮する チャレンジ解決策
文字列内の文字を反転させる チャレンジ解決策
2つの文字列を指定すると、1つの異なる文字 チャレンジ解決策
特定の値に合計する2つのインデックスを見つける チャレンジ解決策
ハッシュテーブルを実装する チャレンジ解決策
fizzのバズを実装する チャレンジ解決策
文字列中の最初に繰り返されない文字を見つける 寄付寄付
文字列内の指定された文字を削除する 寄付寄付
文字列内の単語を逆順にする 寄付寄付
文字列を整数に変換する 寄付寄付
整数を文字列に変換する 寄付寄付
チャレンジを追加 寄付寄付

リンクされたリスト

チャレンジ スタティックノート
リンクリストから重複を削除する チャレンジ解決策
リンクリストのk番目から最後の要素を見つける チャレンジ解決策
リンクリストの途中にあるノードを削除する チャレンジ解決策
指定された値を中心にリンクリストを分割する チャレンジ解決策
数字がリンクリストに格納されている2つの数字を追加する チャレンジ解決策
リンクされたリストループの開始点を見つける チャレンジ解決策
リンクされたリストが回文かどうかを判断する チャレンジ解決策
リンクリストを実装する チャレンジ解決策
リストが循環か非循環かを判別する 寄付寄付
チャレンジを追加 寄付寄付

スタックとキュー

チャレンジ スタティックノート
単一の配列を使用してn個のスタックを実装する チャレンジ解決策
最小要素を追跡するスタックを実装する チャレンジ解決策
容量に束縛されたスタックのリストをラップするスタッククラスのセットを実装する チャレンジ解決策
2つのスタックを使用してキューを実装する チャレンジ解決策
別のスタックをバッファとして使用してスタックをソートする チャレンジ解決策
スタックを実装する チャレンジ解決策
キューを実装する チャレンジ解決策
配列に基く優先度キューを実装する チャレンジ解決策
チャレンジを追加 寄付寄付

グラフと木

チャレンジ 静的ノート
ツリーの深さ優先検索(プリオーダー、インオーダー、ポストオーダー)を実装する チャレンジ解決策
ツリー上で幅優先探索を実装する チャレンジ解決策
木の高さを決定する チャレンジ解決策
ソートされた配列から最小の高さでバイナリ検索ツリーを作成する チャレンジ解決策
バイナリツリーの各レベルのリンクリストを作成する チャレンジ解決策
バイナリツリーがバランスしているかどうかを確認する チャレンジ解決策
ツリーが有効なバイナリ検索ツリーであるかどうかを判断する チャレンジ解決策
バイナリ検索ツリー内の所定のノードのインオーダー後続を見つける チャレンジ解決策
バイナリ検索ツリーで2番目に大きいノードを見つける チャレンジ解決策
最低の共通祖先を見つける チャレンジ解決策
バイナリツリーを反転する チャレンジ解決策
バイナリ検索ツリーを実装する チャレンジ解決策
minヒープを実装する チャレンジ解決策
トライを実装する チャレンジ解決策
深度優先検索をグラフに実装する チャレンジ解決策
グラフの幅優先探索を実装する チャレンジ解決策
グラフ内の2つのノード間にパスがあるかどうかを判断する チャレンジ解決策
グラフを実装する チャレンジ解決策
プロジェクトと依存関係のリストがあるビルドオーダーを探します。 チャレンジ解決策
重み付きグラフで最短経路を見つけます。 チャレンジ解決策
重み付けされていないグラフ内の最短経路を見つける。 チャレンジ解決策
チャレンジを追加 寄付寄付

並べ替え

チャレンジ 静的ノート
選択ソートを実装する チャレンジ解決策
挿入ソートの実装 チャレンジ解決策
クイックソートの実装 チャレンジ解決策
マージソートの実装 チャレンジ解決策
基数ソートの実装 チャレンジ解決策
すべてのアナグラムが互いに隣り合うように文字列の配列をソートする チャレンジ解決策
並べ替えられた回転した配列の項目を検索する チャレンジ解決策
アイテムのソートされた行列を検索する チャレンジ解決策
n個の整数の入力にない整数を見つける チャレンジ解決策
ソートされた配列A、Bがソートされた順序でBをAにマージする チャレンジ解決策
安定した選択ソートの実装 寄付寄付
不安定なソートを安定させる 寄付寄付
クイックソートの効率的なインプレース版を実装する 寄付寄付
2つのソートされた配列がある場合、ソートされた順に1つをもう1つにマージします 寄付寄付
回転してソートされた整数の配列内の要素を見つける 寄付寄付
チャレンジを追加 寄付寄付

再帰と動的プログラミング

チャレンジ 静的ノート
フィボナッチを再帰的に、動的に、繰り返し実行する チャレンジ解決策
ナップザックに入れたアイテムを最大化する チャレンジ解決策
ナップザックに置かれた無制限のアイテムを最大化する チャレンジ解決策
最も長い共通部分列を見つける チャレンジ解決策
最長増加するサブシーケンスを見つける チャレンジ解決策
行列乗算のコストを最小限に抑える チャレンジ解決策
k個の取引を考慮した株価の最大化 チャレンジ解決策
コインの配列が与えられた場合のnセントを表現する方法の最小数を求める チャレンジ解決策
コインの配列が与えられた場合のnセントを表すユニークな数の方法を見つける チャレンジ解決策
n組のかっこのすべての有効な組み合わせを出力する チャレンジ解決策
迷路をナビゲートする チャレンジ解決策
セットのすべてのサブセットを印刷する チャレンジ解決策
文字列のすべての順列を出力する チャレンジ解決策
配列内のマジックインデックスを見つける チャレンジ解決策
n個のステップを実行する方法の数を求める チャレンジ解決策
3つのタワーとN台のディスクを備えたハノイのタワーを実装する チャレンジ解決策
階乗を再帰的に、動的に、反復的に実装する 寄付寄付
ソートされた整数の配列に対してバイナリ検索を実行する 寄付寄付
文字列のすべての組み合わせを表示する 寄付寄付
ペイントフィル機能を実装する 寄付寄付
1セント、5セント、10セント、25セントコインを指定してnセントを表すすべての順列を見つける 寄付寄付
チャレンジを追加 寄付寄付

数学と確率

チャレンジ 静的ノート
素数のリストを生成する チャレンジ解決策
デジタルルートを見つける チャレンジ解決策
O(1)に挿入、最大、最小、平均、モードをサポートするクラスを作成する チャレンジ解決策
数字が2の累乗であるかどうかを判断する チャレンジ解決策
+または – 記号なしで2つの数字を追加する チャレンジ解決策
+または – 記号なしで2つの数字を減算する チャレンジ解決策
数字が素数であるかどうかを確認する 寄付寄付
デカルト平面上の2本の線が交差するかどうかを判定する 寄付寄付
addだけを使用して、intに乗算、減算、除算を実装する 寄付寄付
プライムファクタのみが3,5,7であるようなk番目の番号を探します。 寄付寄付
チャレンジを追加 寄付寄付

ビット操作

チャレンジ 静的ノート
共通のビット操作操作を実装する チャレンジ解決策
aをbに変換するために反転するビット数を決定する チャレンジ解決策
画面に線を引く チャレンジ解決策
1の最長シーケンスを最大にするために少しフリップする チャレンジ解決策
次に大きい番号と次に小さい番号を取得する チャレンジ解決策
2つの2進数をマージする チャレンジ解決策
整数の奇数と偶数のビットを入れ替える チャレンジ解決策
0と1の間の数値のバイナリ表現を出力する チャレンジ解決策
与えられた整数のバイナリ表現における1の数を決定する 寄付寄付
チャレンジを追加 寄付寄付

オンラインジャッジ

チャレンジ 静的ノート
最大でk個の異なる文字を持つ最長部分文字列を見つける チャレンジ解決策
3つの数字の中で最高の製品を見つける チャレンジ解決策
1つの買いと1つの売り上げによる株式利益の最大化 チャレンジ解決策
リスト内のすべてのゼロを最後まで移動する チャレンジ解決策
他のすべてのintの製品を見つける チャレンジ解決策
エントリと終了のリストがあれば、最も忙しい期間を見つける チャレンジ解決策
島の周辺を決定する チャレンジ解決策
ライセンスキーのフォーマット チャレンジ解決策
最も長い絶対ファイルパスを見つける チャレンジ解決策
タプル範囲をマージする チャレンジ解決策
クッキーを割り当てる チャレンジ解決策
あなたがNimで勝利できるかどうかを判断する チャレンジ解決策
マスコミが贖罪メモを作成するために使用されたかどうかを確認する チャレンジ解決策
センテンスが画面に収まる回数を見つける チャレンジ解決策
ユートピアの木 チャレンジ解決策
xorの最大化 チャレンジ解決策
チャレンジを追加 寄付寄付

レポ構造

interactive-coding-challenges        # Repo
├─ arrays_strings                    # Category of challenges
│  ├─ rotation                       # Challenge folder
│  │  ├─ rotation_challenge.ipynb    # Challenge notebook
│  │  ├─ rotation_solution.ipynb     # Solution notebook
│  │  ├─ test_rotation.py            # Unit test*
│  ├─ compress
│  │  ├─ compress_challenge.ipynb
│  │  ├─ compress_solution.ipynb
│  │  ├─ test_compress.py
│  ├─ ...
├─ linked_lists
│  ├─ palindrome
│  │  └─ ...
│  ├─ ...
├─ ...

*ノートブック(.ipynb)は、関連する単体テスト(.py)ファイルを読み書きします。

ノートブックのインストール

IPythonノートブック

既にPythonがインストールされていて、パッケージのインストールに精通しているなら、pipyでIPythonノートを得ることができます:

pip install "ipython[notebook]"

pyzmqに関する問題が発生した場合は、次のスタックオーバーフローポストを参照して実行してください。

pip uninstall ipython
pip install "ipython[all]"

また、提供されたrequirements.txtファイルを使用することもできます。

pip install -r requirements.txt

開発環境をより最適に設定するための詳細な手順、スクリプト、およびツールについては、 dev-setupレポを参照してください。

ノートブックのインストールの詳細については、 こちらの指示に従ってください

IPython / Jupyterノートブックの詳細はこちらをご覧ください

鼻検査

setuptools / distributeを使って鼻をインストールする:

easy_install nose

または

pip install nose

ノーズの詳細はこちらをご覧ください

実行中の課題

ノートブック

課題はIPython / Jupyterノートブックの形で提供され、Python 2.7とPython 3.xでテストています。

IPython / Jupyterノートブックをインストールする必要がある場合は、 ノートブックインストールのセクションを参照してください。

  • このREADMEには、リポジトリのコンテンツの静的ノートをホストするnbviewerへのリンクが含まれています
  • ダイナミックノートブック内の要素と対話する、または要素を変更するには、以下の手順を参照してください

問題のノートブックを実行します。

$ git clone https://github.com/donnemartin/interactive-coding-challenges.git
$ cd interactive-coding-challenges
$ jupyter notebook

これにより、チャレンジカテゴリのリストが表示されたWebブラウザが起動します。

  • 解決したいチャレンジノートに移動します
  • チャレンジノートブック内のセルを実行します(セル – >すべて実行)
    • これにより、予想されるユニットテストエラーが発生します
  • チャレンジを解決し、ユニットテストに合格したことを確認する
  • 詳細な説明は、付属のソリューションノートを参照してください。

pdbを使用してソリューションをデバッグするには、次のチケットを参照してください。

注:あなたのソリューションがソリューションノートブックに記載されているものと異なる場合は、プルリクエストを提出して、他の人があなたの仕事から利益を得ることができるようにしてください。 詳細については、 寄付ガイドラインを確認してください。

将来の開発

課題、ソリューション、単体テストは、 IPython / Jupyterノートブックの形で提示されます。

  • ノートブックは、現在Pythonソリューション(Python 2.7とPython 3.xの両方でテスト済み)のほとんどを含んでいますが、 サポートされている40以上の言語
  • レポは新しい解決策と課題で絶えず更新されます
  • 貢献は歓迎です!

貢献する

貢献は歓迎です!

以下の方法の詳細については、 寄付ガイドラインを確認してください。

  • 問題を提出する
  • 既存の課題へのソリューションの追加
  • 新たな課題を追加する

クレジット

リソース

イメージ

連絡先情報

問題、質問、コメントなどについて私に連絡してください。

私の連絡先情報は私のGitHubページにあります

ライセンス

私はオープンソースライセンスの下であなたにこのリポジトリのコードとリソースを提供しています。 これは私の個人的なリポジトリなので、コードとリソースに受け取るライセンスは私の雇用者ではなく、私の雇用者(Facebook)ではありません。

Copyright 2015 Donne Martin

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.







-donnemartin
-, , , , , , , , ,

執筆者: