ウィークリーチャレンジ140
2712 ワード
Challenge、My Solutions
先週の課題を行った後、基本的に Perl コードをコピーしてから Python に変換していることに気付きました. Python が私にとって最も困難な課題であるため、今後の課題については別の方法で行う可能性が高いと判断しました.
2 つの 10 進コード化された 2 進数
指定された 2 進数の加算をシミュレートするスクリプトを作成します.スクリプトは $a + $b のようなものをシミュレートする必要があります. (オペレーターのオーバーロード)
したがって、このタスクでは、10 進数である
次に、2 つの BinaryDecimal 値を加算する加算演算子をオーバーロードする
チーム PWC のメンバーに、小学校でどのように足し算を教えられたかを説明する必要はないと思います.各数値の最後の桁 (モジュラス演算子を使用) と
このタスクでは、Perl コードは Python コードの音訳です.余分な
3 つの正の整数、
これらの課題を実行するとき、通常、最適なソリューションを達成するためにどのくらいの作業を行うかを決定するポイントがあります.これはそのようなタスクの 1 つです.これに取り組むには 2 つの方法があるため、言語ごとに異なる道をたどりました.
Python コードでは、力ずくですべての積を計算し、配列を並べ替えて、適切な数値を表示します.これは機能し、うまく機能します.
ただし、非常に大きな数を使用し始めると、そのような大きな配列を格納することで RAM を簡単に使い果たす可能性があります.私の Perl コードでは、配列の最大サイズが 2 *
ロジックは次のとおりです.
1) 変数
2) 検索する必要がある製品の最大数を計算する
配列サイズがすでに それ以外の場合は、
3) これらの数値に
4) 配列をソートしてトリムします.
これははるかに効率的であり、非常に大きな数を簡単に計算できることを意味します.例を考えるとやり過ぎかもしれませんが、とにかくやってみるのは楽しいです.
先週の課題を行った後、基本的に Perl コードをコピーしてから Python に変換していることに気付きました. Python が私にとって最も困難な課題であるため、今後の課題については別の方法で行う可能性が高いと判断しました.
タスク 1 › バイナリの追加
仕事
2 つの 10 進コード化された 2 進数
$a
と $b
が与えられます.指定された 2 進数の加算をシミュレートするスクリプトを作成します.スクリプトは $a + $b のようなものをシミュレートする必要があります. (オペレーターのオーバーロード)
私の解決策
したがって、このタスクでは、10 進数である
value
を保持する BinaryDecimal というクラスがあります.この値に 1 と 0 のみが含まれていることを確認します.次に、2 つの BinaryDecimal 値を加算する加算演算子をオーバーロードする
__add__
メソッドを使用します. Pythonは整数と文字列を区別するので、ショートカットはありません:)チーム PWC のメンバーに、小学校でどのように足し算を教えられたかを説明する必要はないと思います.各数値の最後の桁 (モジュラス演算子を使用) と
carry
の値を取得し、それらを合計します.結果が 2 または 3 の場合、carry
を 1 に設定します.結果が 1 または 3 の場合、適切な値を result
変数に追加します.次に、両方の数値を 10 で割り、両方の数値とキャリー値がなくなるまで続けます.このタスクでは、Perl コードは Python コードの音訳です.余分な
my
、ドル記号、セミコロン、および括弧のすべてが、私に Python を高く評価させます.唯一の大きな変更点は、 overload
モジュールを使用して演算子をオーバーロードし、 package
の代わりに class
を使用することです.例
$ ./ch-1.py 11 1
100
$ ./ch-1.py 101 1
110
$ ./ch-1.py 100 11
111
タスク #2 › 九九
仕事
3 つの正の整数、
$i
、 $j
、および $k
が与えられます.$k
と $i
のソートされた乗算表の $j
番目の要素を出力するスクリプトを作成します.私のソリューション
これらの課題を実行するとき、通常、最適なソリューションを達成するためにどのくらいの作業を行うかを決定するポイントがあります.これはそのようなタスクの 1 つです.これに取り組むには 2 つの方法があるため、言語ごとに異なる道をたどりました.
Python コードでは、力ずくですべての積を計算し、配列を並べ替えて、適切な数値を表示します.これは機能し、うまく機能します.
ただし、非常に大きな数を使用し始めると、そのような大きな配列を格納することで RAM を簡単に使い果たす可能性があります.私の Perl コードでは、配列の最大サイズが 2 *
$k
である、よりスマートなソリューションを使用します.ロジックは次のとおりです.
1) 変数
$i
を使用して、1 から $m
まで繰り返します.2) 検索する必要がある製品の最大数を計算する
$k
項目である場合、最後の値を $m
で割った結果が最大値になります. $k
と $j
の最小値を計算します3) これらの数値に
$m
を掛けた積を配列にプッシュします.4) 配列をソートしてトリムします.
これははるかに効率的であり、非常に大きな数を簡単に計算できることを意味します.例を考えるとやり過ぎかもしれませんが、とにかくやってみるのは楽しいです.
例
$ ./ch-2.py 2 3 4
3
$ ./ch-2.py 3 3 6
4
$ ./ch-2.pl 2 3 4
3
$ ./ch-2.pl 3 3 6
4
Reference
この問題について(ウィークリーチャレンジ140), 我々は、より多くの情報をここで見つけました https://dev.to/simongreennet/weekly-challenge-140-a50テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol