タグ付けされた質問 「python」

この課題はPython言語に関連しています。回答が特定の言語である必要がある課題は、一般的には推奨されません。

4
抽象構文木ゴルフ:FizzBu​​zz、Python
概要 可能な限り少ないトークンで、FizzBu​​zzをPythonで実装します。 チャレンジ 1から100までの10進数を出力するプログラムを作成します。しかし、3の倍数の場合は数字ではなく「フィズ」、5の倍数の場合は「バズ」が印刷されます。3と5の両方の倍数である数字の場合、「FizzBu​​zz」と印刷します。プログラムは、Pythonの何らかのバージョンで作成する必要があります。 詳細については、1、2、Fizz、4、Buzzを参照してください 得点 スコアは、Python 3のこのプログラムまたはPython 2のこのプログラムによって報告されたコードの抽象構文ツリーのノードの数に等しくなります。プログラムを実行するには、プログラムのコマンドライン引数としてコードのファイル名を指定します。例えば: python simple_counter.py fizzbuzz.py これらのプログラムは、Pythonのastモジュールに基づいています。何か問題がある場合はお知らせください。 実際のプログラムで長い文字列を実行したり、出力をハードコーディングしたりといった些細な解決策を防ぐために、いくつかの追加の制限があります。 コード内のトークンは15文字を超えることはできません。上記のプログラムは、この要件を確認します。実装を簡単にするために、上記のプログラムはコメントをトークンとしてカウントすることに注意してください。 コードの実行/評価は禁止されています。 何かが許可されているかどうかについて質問がある場合は、私に尋ねてください。 スコアリングヒューリスティック 通常、プログラムのスコアを計算するには、次のルールで十分です。 ブロック文は1ポイントです:if、for ... in ...、while、else、など スタンドアロン文は1ポイントです:printPythonの2にbreak、passなど、 変数は2ポイントです シングルトークンリテラルは1ポイントです:2131、"Hello, world!"、True 関数は3つのポイント(変数を使用するための2つ、余分な1つ)です:printPython 3 rangeなど オペレータは2ポイントです:+、*、%、and、not、など = 1ポイントです :拡張割り当ては2点であり+=、|=等 括弧、インデントなどは0ポイントです。 代入または式ではなく、式を含む行は+ 1ポイントです。 コードを持っていることは1ポイントです。 チャレンジ: 最も低いスコアが勝ちます。幸運を!

12
0〜100の偶数を出力する最小のPythonスクリプト
私は楽しみのために自分自身で設定した問題に取り組んでいます。それは0から100までの偶数を出力するPythonスクリプトを作成することです。挑戦はスクリプトをできるだけ小さくすることです。これは私がこれまでに持っているものです: for x in range(0, 101): if (x % 2 == 0): print x 現在、60バイトです。誰でもそれを小さくする方法を考えることができますか? 編集:print(*range(2,101,2),sep='\n')30バイトです。もっと小さい?
11 code-golf  tips  python 

9
ホワイトエレファントエクスチェンジ
7月のクリスマスです。だから、仮想の白い象のギフト交換よりも良いお祝いの方法です。 このキングオブザヒルチャレンジでは、ホワイトエレファントエクスチェンジシミュレーションで遊ぶボットを作成し、可能な限り最高のプレゼントを獲得する必要があります。 ゲームのルール ゲームは多くのラウンドでプレイされ、各ラウンドは可変数のターンで構成されます。 ラウンド設定:ゲーム内のプレイヤーと同じ数のプレゼントがあり、それぞれが範囲[0 ... 1)でランダムに均一に評価されます。この値は、プレゼントが「開かれる」まで不明です。プレイヤーはランダムな順番でキューに入れられます。最初のプレーヤーがキューの先頭からポップされます。 プレイヤーのターンのとき、彼らはプレゼントを開くか、他のプレイヤーのプレゼントを盗んで、プレゼントが盗まれたプレイヤーにターンを渡すことができます。 各プレゼントは最大3回盗まれます。 盗まれたプレイヤーから盗むことはできません。 各プレーヤーは、一度に1つのプレゼンスしか持てません。 プレゼントが開かれた後、プレイはキューの先頭からポップされた次のプレイヤーに進みます。これは、まだ順番が来ていない次の順番​​のプレイヤーになります。 ラウンド終了:すべてのプレゼントが開かれると、ラウンドが終了し、各プレイヤーが保持しているプレゼントの値がそのプレイヤーのスコアに加算されます。新しいラウンドが始まり、各プレイヤーは現在何も持っておらず、プレイヤーの順番はシャッフルされます。 ゲームの終了:少なくとも1人のプレイヤーが100 500ポイントを獲得すると、ゲームは終了し、プレゼントの合計値が最も高いプレイヤーに勝利が与えられます。 コーディング すべての提出物はPython 3.7と互換性がある必要があります。から直接継承するクラスを作成する必要がありますWhiteElephantBot。例えば: class FooBot(WhiteElephantBot): # Your implementation here ボットクラスで__init__メソッド(引数を1つ取るname)を提供できます。このメソッドはを呼び出す必要がありますsuper().__init__(name)。クラスにはtake_turn、この順序で次の引数を受け取るメソッドが必要です。 players:まだプレゼントを持っていないすべてのプレイヤーの順番でのプレイヤー名のリスト。 presents:プレーヤー名を2タプルにマップする辞書。このタプルには、そのプレーヤーが保持している現在の値と、現在の盗まれた回数が含まれています。これには、現在プレゼントを持っている他のプレイヤーのみが含まれます。 just_stole:最後に行われたアクションがスチールであった場合、これは盗んだプレーヤーの名前になります。そうでない場合は、になりますNone。 各引数は不変または新しいオブジェクトであるため、それらのいずれかを変更してもゲームに影響はありません。必要に応じて、任意の引数のコピーを保持できます。 以下の値の例presents: { 'Alice': (0.35, 0), 'Bob': (0.81, 2), 'Charlie': (0.57, 1) } あなたのtake_turn方法はあなたから盗むしたり、希望するプレイヤーの名前を返す必要がありますNone存在を開くことを。例外を発生させstrたりNone、または以外の何かを返したり、盗むことができないプレーヤーの名前を返したりした場合、デフォルトでプレゼントを開きます。 コンストラクタは各ラウンドの開始時に呼び出されるため、ラウンドごとに状態を覚えることはできません。 から継承することにより、WhiteElephantBot現在のsteal_targets辞書を取得し、just_stole盗むことができるプレイヤーの名前のリストを返すメソッドにアクセスできます。 スクリプトに必要なモジュールは、エントリの一番上にインポートする必要があります。 テストドライバー テストドライバーはこちらにあります。from white_elephant import WhiteElephantBot投稿された回答に含める必要はありませんが、ローカルモジュールで行う必要があります。 …

2
キャメルアップカップ:AIボードゲームトーナメント
キャメルアップカップ2k18 このチャレンジでは、半人気のボードゲームCamel Upをプレイします。 キャメルアップ!ラウンドに勝つ、ゲームに勝つ、またはゲームに負けるためにラクダに賭けているプレイヤーがいるボードゲームです。これらの決定のそれぞれは、いくらかのお金を得るチャンスであなたに報酬を与えます、それは勝者を決定するものです。プレイヤーは、確率、ゲームの状態、および対戦相手のテナントを使用して決定を下す必要があります。これはプレイヤーがプレイする方法を示す短いビデオです。 遊び方 プレイ方法の大まかなアイデアを以下に示します。ビデオのいずれかを見ると、視覚効果があるため、より役立つ場合があります:) あなたの番には4つの選択肢があります。 ラクダを動かします。これは、移動していない人からラクダを選び、1〜3スペース間で移動します。あなたは1コインを取得します。5頭すべてのラクダが移動するとラウンドが終了し、その後すべて移動できます トラップを配置します。これはラウンドの終わりまでボードに残ります。+ 1 / -1トラップを選択します。ラクダまたはラクダのスタックがその上に着地した場合、それらは+ 1 / -1移動し、コインを受け取ります。正方形0にトラップを配置することはできません。ラクダがいる場所にトラップを配置することはできますが、その後に着くラクダにのみ影響します。 ラウンド勝者の賭け。ラウンドの勝者に賭けます。あなたは、あなたがそのラクダに賭ける1/2/2/3であるかどうかに応じて5/3/2/1を獲得します。 ゲームの勝者/敗者。ゲームの最後に誰が最初か最後かを賭けます。あなたがそのラクダに賭けたのが1/2/2/3だったかどうかに基づいて8/5/3/1/1(私は思う)を得る ノート: 5匹のラクダがいます。0から2までの位置からランダムに開始します。 ラクダを動かすと(これをトリガーするものについては上記を参照)、1〜3マス移動します。それらが別のラクダと正方形に配置される場合、それらは他のラクダの「上」に配置され、ラクダスタックが作成されます。ラクダが移動する場合は、ラクダスタック上でラクダの上にあるすべてのラクダを移動します。スタックの最上部にあるラクダが先頭にいると見なされます +1トラップに着地した場合(これをトリガーするものについては上記を参照)、1マス先に移動します。標準のスタッキングルールが適用されます。 ただし、-1トラップをヒットすると、1マス後ろに移動します。あなたは行くの下であれば、その広場にあるラクダのスタック。 ラクダがスクエア16に達すると、ゲームは終了します。これにより、ラウンドエンドとゲームエンドトリガーが直ちに呼び出されます。 ゲームの勝者/敗者のベットは、ラクダごとに1回のみ行うことができます。つまり、あなたが勝つためにラクダに賭けることができないとゲームを失います チャレンジ この課題では、4人のプレーヤーをプレイするPython 3プログラムを作成し、勝者はCamel Upのすべての栄光のゲームを取ります あなたのプログラムは以下を含むゲームステートを受け取ります: camel_track:ラクダの位置 trap_track:トラップの場所([trap_type(-1,1)、player]の形式のエントリ) player_has_placed_trap:プレイヤーがこのラウンドでトラップを配置したかどうかを通知する配列 round_bets:このラウンドで行われたベットの配列。フォームの[キャメル、プレーヤー] game_winner_bets / game_loser_bets:ラクダがゲームに勝つか負けるために作られたベットプレイヤーの配列。ベットしたプレイヤーではなく、ベットしたプレイヤーの価値のみを見ることができます。あなたは誰に賭けているかを知ることができます。#フォーム[キャメル、プレーヤー] player_game_bets:game_winner_bets / game_loser_betsの別の表現。繰り返しますが、ボットが行った賭けだけを見てください。 player_money_values:各プレイヤーが持っている金額を示す配列。 camel_yet_to_move:ラクダがこのラウンドを移動したかどうかを示す配列。 ゲームステートの上部には次のものもあります: player:プレーヤー番号(0〜3)を示す整数。 プレイヤーが返すものの構文は次のとおりです。 [0]:キャメルを移動 [1、trap_type、trap_location]:トラップを配置 [2、projected_round_winner]:ラウンド勝者のベットをする [3、projected_game_winner]:ゲームの勝者を賭ける [4、projected_game_loser]:ゲーム敗者のベットをする これはmove(player、gamestate)メソッドでラップする必要があります …

2
numpy、scipy、またはpylabでゴルフするためのヒント
pythonのためのヒントの包括的なリストすでにありますここでは、どのような私が求めているが、具体的使用に適用されますヒントになるよう、numpy、scipyまたはpylabライブラリを。 これらはnumpy、既にを使用しているコードを短縮する方法、またはこれらのライブラリを使用して一般的なPython操作を短縮する方法のいずれかです。 回答ごとに1つのヒントを入力してください。
10 code-golf  tips  python 

1
入力と出力を備えた最短のpython A + Bプログラム
私の時間を浪費していると言う人もいるかもしれませんが、この仕事は500日以上の間私に平和を与えません。2つの数値を入力として受け取り、それらの合計を表示するプログラムをPython 3.xで作成する必要があります。番号は次の形式で示されます。 a b テストケースの例: 100 500 -> 600 3 4 -> 7 コードの長さは、式max(スペース、タブ、改行を含まないコード長、コード長/ 4)で計算されます。私が知っているソリューションは2つだけで、それぞれの長さは36文字です。 print(sum(map(int, input().split()))) そして: print(eval(input().replace(' ', '+'))) また、長さが34シンボルのソリューションが存在することも知っています。このウェブサイトで確認できます。
10 code-golf  tips  python 

1
f(item)が最小のリストでアイテムを見つける方法は?
リストlと関数がありますf。f厳密に増加または減少しているわけではありません。リストでf(item)最小のアイテムを見つけるにはどうすればよいですか?たとえば、次のようなリストがあるとします。 l = [1, 2, 3, 4] そしてlist(f(x)for x in l): [2, 9, 0, 3] f(3)他のどのfよりも小さいので、「3」と表示されます。これを行う最短の方法は何ですか?私は最初に試しました: min(f(x) for x in l) しかし、これは0、ではありません3。簡潔にするためではなく、読みやすさのために撮影している場合は、次のようにします。 index = 0 smallest = f(l[0]) for i in range(len(l)): value = f(l[i]) if value < smallest: smallest = value index = i これは問題ありませんが、コードゴルフにとっては恐ろしいものです。ゴルフしても i,s=0,f(l[0]) for x in …
10 code-golf  tips  python 

7
べき等でないPython [終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、 Code Golf Stack Exchangeのトピックとなるようにします。 4年前休業。 次のXようなグローバル変数を参照しない数行のPythonコードを記述します。 def method(): X print(a) method() 印刷します1が def method(): X X print(a) method() プリント2。 だから、私は厄介者になるのが嫌いですが、それは実際にはPythonのグローバル変数のようでvarsあり、locals def test_global_1(): global vars, locals vars = lambda: 2 locals = lambda: 3 def test_global_2(): print(vars()) print(locals()) test_global_1() test_global_2() また、このようなパズルの客観的な勝利基準を見たいと思うようです。コードの長さはここでは実際には感じられないので、コードのさまざまな新機能のためにブラウニーポイントのシステムを作成できますか?これらが何であるかは正確にはわかりませんが、ここから始まります: 本当に本当にないグローバル(+1 varsまたはlocals)の+1 特定のテクニックを最初に投稿したことに対する+1 投稿された最短のソリューションの+1 +1は、単一のPythonステートメントのみを含むソリューションの場合 字句の非境界に参加するなどの興味深い「ハック」の+1 例外を使用しない場合は+1 …

2
Python:2つのリストからアイテムをインターリーブする最短の方法
リスト3を取得する最短の方法(可能な限り文字)を取得しようとしています。 リスト1とリスト2はすでに引数として指定されており、長さは同じです。 l1 = [1, 2, 3, 4, 5] l2 = ['a', 'b', 'c', 'd', 'e'] リスト3は次のようになります(はい、リストである必要があります)。 l3 = ['a', 1, 'b', 2, 'c', 3, 'd', 4, 'e', 5]

1
Python 3-割り当てをゴルフしてみた
注:これはゴルフの課題ではありません。それはゴルフの提案を求めるよりもです。 最近、コーディングできるかどうかを確認するために、Web開発クラスにPythonを割り当てました。私はすでにPythonに慣れているので、それを試してみることにしました。そして、私が逃したことを人々が指摘できるかどうか疑問に思いました。 一部の場所に余分なスペースがあることはすでに知っていますがwhile r:、rが変数である場合に使用し、それが「実行」されるのを待つなど、概念的なものに興味があります。 割り当て import random from collections import Counter s=l='' c=['yellow','blue','white','green','Black', 'purple', 'silver', 'cyan', 'magenta', 'red'] n=[10,15,1,10,6,15,10,25,1,12,5,10,4,6,5,12,0,10,1,1] o=i=0 for y in c:l+=y[0]*(random.randint(n[o],n[o+1]));o+=2 l=list(l) print("Welcome to the CIMS Gumball Machine Simulator\nYou are starting with the following gumballs:") for b in c:print(str(l.count(b[0])) + " "+b);random.shuffle(l) print("Here are your random purchases:") …

3
Partially-Observable Connect-4
ゲーム Connect-4の(ほぼ)標準的なゲームをプレイします。残念ながら、それは通信ゲームであり、誰かが下から順に2行ごとに黒いテープを貼ったため、これらの行内での対戦相手の動きを見ることができません。 すでに満杯の列内での移動は、あなたのターンを通過したものとしてカウントされ、ゲームが6 * 7ターンよりも長く続く場合、それはドローとして裁定されます。 チャレンジ仕様 プログラムはPython 3関数として実装する必要があります。最初の引数はボードの「ビュー」であり、既知のボードの状態を下から上への2D行リストとして表します。1最初のプレーヤー2による移動、2番目のプレーヤーによる移動0、空の位置または非表示です。対戦相手に移動します。 2番目の引数は、からインデックスが付けられたターン番号0であり、そのパリティにより、どのプレイヤーかがわかります。 最後の引数は任意の状態であり、None各ゲームの開始時に初期化され、ターン間で状態を保持するために使用できます。 再生したいカラムインデックスの2タプルを返す必要があり、新しい状態は次のターンで返されます。 得点 勝利は+1、引き分けは0、損失はとしてカウントされ-1ます。あなたの目標は、ラウンドロビントーナメントで最高の平均スコアを達成することです。私は明確な勝者を特定するために必要なだけの試合を実行しようとします。 ルール 競合他社は一度に最大1つの競合するボットを持つ必要がありますが、改善を加えた場合はエントリを更新しても問題ありません。ボットを1ターンあたりの思考時間を最大1秒に制限してみてください。 テスト中 以下は、コントローラーのソースコードと、参照用のいくつかの競合しないボットの例です。 import itertools import random def get_strides(board, i, j): yield ((i, k) for k in range(j + 1, 7)) yield ((i, k) for k in range(j - 1, -1, -1)) yield ((k, j) for …

6
底のダンジョン
–危機と殉教 (字幕がかっこいいのでそれが字幕です) Python でのこの挑戦的な挑戦(うん、あなたはJavaで送信しないかもしれないと知る必要はありません)では、ダンジョンへようこそと非常によく似たゲームをプレイするボットを作成する必要があります ゲームのルール (これは元のゲームではないことに注意してください) デッキ、アイテムセット、そしていくつかのポイントカードとデスカードがあります。基本HPは3です。このデッキ1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 9は、強みを示すために番号が付けられた13枚のモンスターカードで構成されています。 アイテムリスト 悪魔の契約:デーモン(強度7のモンスター)とその下のモンスターをダンジョンパイルで倒します。-(デーモンがダンジョンの最後だった場合、デーモンを倒すだけです) 体力ポーション:0 HPに落ちたら、モンスターを倒して3 HPに戻る。 聖杯:偶数の強さのモンスターを倒す(ゲームでは、これらはアンデッドです)。悪魔の協定が使用された後に偶数番号のモンスターが発生した場合、それが最初に動作し、このモンスターの後に余分な協定のキルは得られません。 ヴォーパルダガー:ダンジョンに入る前にモンスターを1つ選択してください。このタイプのモンスターは打ち負かされます。悪魔の契約が使用された後に対象のモンスターが発生した場合、それが最初に機能し、このモンスターの後に追加の契約キルを得ることができません。 シールド:スペルを上げる前に、合計HPに3を追加します。これはヘルスポーションの使用には影響しません。ヘルスポーションは常にヘルスを3に戻します。 装甲:スペルする前に、合計HPに5を追加します。これはヘルスポーションの使用には影響しません。ヘルスポーションは常にヘルスを3に戻します。 ポイントカードは、誰がダンジョンで成功したかを追跡するために使用されます。デスカードは、ダンジョンで失敗した人を追跡します。 描画フェーズ 引き分け段階が始まる前に、すべてのモンスターカードがデッキに戻され、両方のプレイヤーが3 HPに回復し、廃棄されたすべてのアイテムがそれぞれ1つになるように回復されます。 最初のプレイヤーはデッキからカードを引くかどうかを決定し、他のプレイヤーからそれを隠します。もしそうなら、彼らはそれをダンジョンパイルの上に置くか、自分の選んだアイテムと一緒に捨てるかを選ばなければなりません。捨てられたアイテムとカードは、次のラウンドまでどちらのプレイヤーも利用できません。 プレーヤー1が自分の番になった後、プレーヤー2も同じようにします。プレイヤーは、誰かがドローしないことを決定するか、プレイヤーが最後のカードをデッキから取り出すまで、ドローするかどうか、およびドローしたカードをどうするかを交互に決定します。プレイヤーがドローしないことを決定した場合、または最後のカードをドローした場合、ドローフェーズは終了し、他のプレイヤーはダンジョンに入り、洞窟探検を開始する必要があります。 Spelunkingフェーズ ヴォーパルダガーが捨てられていない場合、スペルを打ったプレイヤーは、どのカードに適用するかを決定する必要があります。このフェーズの残りの部分について、積極的な決定はありません。 最初のプレイヤーが一番上のカードを取ります。つまり、ダンジョンに配置された最後のカードで、その強さの数値が表示されます。悪魔の契約が前のターンからアクティブである場合、引かれたカードは捨てられます。それ以外の場合、プレイヤーのアイテムは「悪魔の契約」、「聖杯」、「ヴォーパルダガー」の順にチェックされます。引き出されたカードを倒すことができる最初の捨てられていないアイテムが使用され、カードは捨てられます。悪魔の契約が使用されている場合は、次のカードで有効になります。使用済みのアイテムは廃棄されません。 該当するアイテムがない場合、カードの強さはプレイヤーのヘルスから差し引かれます。体力がポジティブでなくなった場合、3 HPに回復し、可能な場合はポーションが破棄されます。そうでない場合、ダンジョンクロールは終了し、デスカードを取得します。 プレイヤーが敗北せず、ダンジョンにカードが残っている間、このトップのカードを引くプロセスが繰り返されます。ダンジョン内のすべてのカードを無事に倒すと、ダンジョンクロールは終了し、洞窟探検家はポイントカードを集めます。 完全なゲームの説明 ゲームは一連のラウンドで構成されており、それぞれが描画フェーズとそれからスペルフェーズを持っています。各ラウンドの終わりに、1人のプレイヤーがデスカードまたはポイントカードのいずれかを収集します。プレイヤーがいずれかのタイプの5を蓄積すると、ゲームは終了します。彼らが5枚のデスカードを持っている場合、彼らはゲームに負けます。彼らが5枚のポイントカードを持っている場合、彼らは勝ちます。いずれにしても、他のプレイヤーは反対の結果を受け取ります。どちらのプレイヤーも1つのタイプのカードを5枚持っていない場合、プレイは次のラウンドに進み、前のラウンドで2番目に進んだプレイヤーが最初に進み、その逆も同様です。 コス詳細 各ボットは、上記のルールに従って、他のすべてのボットに対して400ゲームをプレイします。プレイヤー1であるボット(つまり、最初のラウンドで最初に実行されるボット)が各ゲームを交互に切り替え、すべての状態がゲーム間でリセットされます。 再びアイテムは次のとおりです。 悪魔の契約:デーモン(強度7のモンスター)とその下のモンスターをダンジョンパイルで倒します。-(デーモンがダンジョンの最後だった場合、デーモンを倒すだけです) 体力ポーション:0 HPに落ちたら、モンスターを倒して3 HPに戻る。 聖杯:偶数の強さのモンスターを倒す(ゲームでは、これらはアンデッドです)。悪魔の協定が使用された後に偶数番号のモンスターが発生した場合、それが最初に動作し、このモンスターの後に余分な協定のキルは得られません。 …

2
Pythonでの一般化整数キャスト
バックグラウンド Pythonに整数に変換したい文字列があります。通常、私は単に使用しますint: >>> int("123") 123 残念ながら、このメソッドは-?[0-9]+(先頭または末尾の空白を削除した後)一致する文字列のみを受け入れるため、あまり堅牢ではありません。たとえば、小数点付きの入力は処理できません。 >>> int("123.45") Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: invalid literal for int() with base 10: '123.45' そしてそれは確かにこれを処理することができません: >>> int("123abc?!") 一方、この動作は、Perl、PHP、そして謙虚なQBasicでさえ大騒ぎすることなく実現できます。 INT(VAL("123abc")) ' 123 質問 これがint、Python でのこの「一般化された」作業における私の最短の取り組みです。元の文字列が含まれs、結果が次のようになると想定すると、50バイトになりますi。 n="";i=0 for c in s: n+=c try:i=int(n) except:0 かなり単純ですが、try/ exceptビットは醜くて長いです。それを短くする方法はありますか? 細部 回答は次のすべてを行う必要があります。 …

3
`range(…)`のより短い代替案を探しています
私が取り組んでいるゴルフコードパズルについてこれまでに見つけた最良の解決策には、2つのかなり太っているような呼び出しがありrangeます。私はコードゴルフ、特にPythonが初めてなので、いくつかのヒントを使うことができます。 関連フラグメントはこれです [x for x in range(n+1,7**6)if`x`==`x`[::-1]*all(x%i for i in range(2,x))] 最初の上限はrange鋭いものではありません。それは少なくとも98690である必要があり、他のすべてが等しい場合(ゴルフの場合、つまり)、この上限と98690の差が小さいほど、パフォーマンスの点で優れています1。私が7 6(= 117649)を使用しているの7**6は、私が思いつくことができる最も短いPython式であり、それが法案に合うからです。 対照的に、range1つ目の下限と2つ目の下限はどちらもしっかりしています。IOW、これらの制限が変更されると、プログラム(現在の形式)は誤った結果を生成します。 式の一方または両方を短くする方法はありますか range(n+1,7**6) range(2,x) ? ところで、この場合range、たとえばへのエイリアスrは何も得ません: r=range;rr rangerange 編集:FWIW、完全なプログラムはこれです: p=lambda n:[x for x in range(n+1,7**6)if`x`==`x`[::-1]*all(x%i for i in range(2,x))][0] p(n)より大きい最小の回文素数である必要がありnます。また、p再帰的であってはなりません。警告:すでに卑猥に遅いです! 1はい、わかっています。コードゴルフではパフォーマンスは重要ではありませんが、それが私が「他のすべてが等しい(ゴルフに関しては)」と書いた理由です。たとえば、私が選択したのは7**6、すぐにはわかりませんが、パフォーマンスが低く、「ゴルフと同等の」代替手段9**9です。私は実際にコードゴルフの試行を実行するのが好きです。つまり、コードを実行するのに何年もかかるほどパフォーマンスが低下しないようにします。もちろん、私がそれを助けることができれば。

1
回文の素数
私はタスクを解決しています、ここで: 入力: 整数としての数値。 出力: 整数として最も近い大きい回文素数。 私は感謝のヒントを私の解決策を短くする方法。または、アプローチの変更が有益であるかどうかの指示。 golf=lambda l,r=range:next(x for x in r(10**6)if(x==int(`x`[::-1]))&all(x%d for d in r(2,x))and x>l) 回文: x==int(`x`[::-1]) プライム: all(x%d for d in r(2,x))
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.