検索

ハンマーリスト

Dec 30, 2024 pm 04:34 PM

Hammering lists

ウィークリーチャレンジ 301

Mohammad S. Anwar は毎週、毎週 2 つのタスクに対する解決策を全員が考え出すチャンスであるウィークリー チャレンジを送信します。私のソリューションは最初に Python で書かれ、次に Perl に変換されます。これは、私たち全員がコーディングを練習するのに最適な方法です。

挑戦、私の解決策

タスク 1: 最大の数

タスク

正の整数のリスト @ints が与えられます。

指定されたリスト内のすべての要素を最大の数を形成するように配置し、それを返すスクリプトを作成します。

私の解決策

考えすぎかもしれませんが、これは思ったほど簡単ではありません。

1 つのオプションは、すべての順列を計算し、どの数値が最大であるかを確認することです。ただし、整数を追加すると、リソースが大量に消費されます。 13 個の整数がある場合、60 億を超える順列が存在します。したがって、私はこれを解決策として除外します。

したがって、当然のことは、整数をソートし、結合して結果を出力することです。 Python では文字列と整数の処理が異なるため、ソートされたリストを文字列に変換し、結合して整数に戻す必要があります。

def largest_number(ints: list) -> int:
    sorted_ints = sorted(ints, key=cmp_to_key(number_sort), reverse=True)
    return int(''.join(map(str, sorted_ints)))

並べ替えに関しては、少し複雑です。 2 番目に提供された例では、3、30、および 34 がすべて整数として指定されていることがわかります。このため、項目 (最高値から最低値へ) 34、3、および 30 を並べることで最大の数値が得られることがわかりました。

number_sort 関数では、整数を文字列 s1 と s2 に変換します。次に、s1 と s2 を連結した整数 c1 が得られ、c2 は s2 と s1 を連結したものになります。

c1 が c2 より小さい場合、-1 を返します。大きい場合は 1 を返します。同じ場合は 0 を返します。sorted 関数はこの情報を使用して、必要に応じてリストを並べ替えます。

def number_sort(i1: int, i2: int) -> int:
    s1 = str(i1)
    s2 = str(i2)

    c1 = int(s1 + s2)
    c2 = int(s2 + s1)

    if c1  c2:
        return 1

    return 0

Perl コードははるかに単純です :)

sub number_sort() {
    return "$a$b"  "$b$a";
}

$ ./ch-1.py 20 3
320

$ ./ch-1.py 3 30 34 5 9
9534330

タスク 2: ハミング距離

タスク

整数の配列 @ints が与えられます。

指定された整数配列内のすべての整数ペア間のハミング距離の合計を返すスクリプトを作成します。

2 つの整数間のハミング距離は、それらのバイナリ表現が異なる箇所の数です。

私の解決策

前のタスクでは、Python が整数と文字列を異なる型として扱う方法について説明しました。 Perl の利点の 1 つは、あらゆる点で変数の型指定について心配する必要がないと言われていることです。内部的には異なる方法で保存されていますが、Perl は何をすべきかを知っています。

Perl 5.10 と Perl 5.16 (私は Perl 開発のほとんどをここで行いました) には、2 つの注目すべき例外があります。 1 つは JSON モジュールで、文字列の場合は「10」、整数の場合は 10 を出力します。

もう 1 つはビット単位の演算です。パーロップのページから、105 | 150 (2 つの整数) は 255 ですが、「105」 | 「150」(2つの文字列)は155です。

そこで、perlop ページをもう一度読んで、これが Perl の新しいバージョンで解決されていることを確認して、嬉しい驚きを感じました。 Perl 5.22 で実験的であり、Perl 5.28 で利用できるビットごとの機能が追加されました。これにより、ビット単位の演算子が常に値を整数として扱うことが保証され、文字列ベースのビット単位には新しい演算子が追加されます。

とにかく、目の前の仕事に戻りましょう。このために、2 つの整数のすべての組み合わせを計算します。組み合わせごとに、2 つの値の XOR (排他的論理和) を実行し、バイナリに変換して、バイナリ表現内の 1 の数を数えます。

def largest_number(ints: list) -> int:
    sorted_ints = sorted(ints, key=cmp_to_key(number_sort), reverse=True)
    return int(''.join(map(str, sorted_ints)))

def number_sort(i1: int, i2: int) -> int:
    s1 = str(i1)
    s2 = str(i2)

    c1 = int(s1 + s2)
    c2 = int(s2 + s1)

    if c1  c2:
        return 1

    return 0

以上がハンマーリストの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Pythonアレイに要素をどのように追加しますか?Pythonアレイに要素をどのように追加しますか?Apr 30, 2025 am 12:19 AM

inpython、youappendelementStoalistusingtheappend()method.1)useappend()forsingleelements:my_list.append(4).2)useextend()or = formultipleElements:my_list.extend(another_list)ormy_list = [4,5,6] .3)forspecificpositions:my_list.insert(1,5).beaware

シバン関連の問題をどのようにデバッグしますか?シバン関連の問題をどのようにデバッグしますか?Apr 30, 2025 am 12:17 AM

シェバンの問題をデバッグする方法には次のものがあります。1。シバン行をチェックして、それがスクリプトの最初の行であり、接頭辞スペースがないことを確認します。 2.通訳パスが正しいかどうかを確認します。 3.通訳を直接呼び出してスクリプトを実行して、シェバンの問題を分離します。 4. StraceまたはTrustsを使用して、システムコールを追跡します。 5.シバンに対する環境変数の影響を確認してください。

Pythonアレイから要素をどのように削除しますか?Pythonアレイから要素をどのように削除しますか?Apr 30, 2025 am 12:16 AM

pythonlistscanbemanipulatedsingseveralmethodstoremoveElements:1)theremove()methodremovesthefirstoccurrenceofaspecifiedValue.2)thepop()methop()methodremovessanelementatagivenindex.3)thedelstatementementementementementementementementementemoritemoricedex.4)

Pythonリストに保存できるデータ型は何ですか?Pythonリストに保存できるデータ型は何ですか?Apr 30, 2025 am 12:07 AM

Integers、strings、floats、booleans、otherlists、anddictionaryを含むpythonlistscanstoreanydatype

Pythonリストで実行できる一般的な操作は何ですか?Pythonリストで実行できる一般的な操作は何ですか?Apr 30, 2025 am 12:01 AM

PythonListsSupportNumersoperations:1)AddingElementSwithAppend()、Extend()、Andinert()

numpyを使用してマルチディメンシャルアレイをどのように作成しますか?numpyを使用してマルチディメンシャルアレイをどのように作成しますか?Apr 29, 2025 am 12:27 AM

Numpyを使用して多次元配列を作成すると、次の手順を通じて実現できます。1)numpy.array()関数を使用して、np.array([[1,2,3]、[4,5,6]])などの配列を作成して2D配列を作成します。 2)np.zeros()、np.ones()、np.random.random()およびその他の関数を使用して、特定の値で満たされた配列を作成します。 3)アレイの形状とサイズの特性を理解して、サブアレイの長さが一貫していることを確認し、エラーを回避します。 4)np.reshape()関数を使用して、配列の形状を変更します。 5)コードが明確で効率的であることを確認するために、メモリの使用に注意してください。

Numpyアレイの「ブロードキャスト」の概念を説明します。Numpyアレイの「ブロードキャスト」の概念を説明します。Apr 29, 2025 am 12:23 AM

BroadcastinginNumPyisamethodtoperformoperationsonarraysofdifferentshapesbyautomaticallyaligningthem.Itsimplifiescode,enhancesreadability,andboostsperformance.Here'showitworks:1)Smallerarraysarepaddedwithonestomatchdimensions.2)Compatibledimensionsare

データストレージ用のリスト、array.array、およびnumpy配列を選択する方法を説明します。データストレージ用のリスト、array.array、およびnumpy配列を選択する方法を説明します。Apr 29, 2025 am 12:20 AM

Forpythondatastorage、chooseLists forfficability withmixeddatypes、array.arrayformemory-efficienthogeneousnumericaldata、およびnumpyArrays foradvancednumericalcomputing.listSareversatilebuteficient efficient forlargeNumericaldatates;

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境