プログラミングパズルとコードゴルフ

プログラミング愛好家やコードゴルファーのためのQ&A

5
INTERCALでのゴルフのコツ
INTERCALでゴルフをする上での一般的なヒントは何ですか?私はコードゴルフの課題に適用でき、少なくともINTERCALに固有のアイデアを探しています(「コメントの削除」は有用な回答ではありません)。 エキゾチックな言語がゴルフコンテストに勝つために本当に役立つことを私は知っていますが、私はこのあたりに多くのINTERCALコードを見ていません。人々がINTERCALで競争力のあるコードサイズを得るのに役立つアドバイスはありますか?この言語は競争力がありますか? INTERCALはあまり活用されていないため、タグもありません。とても悲しい...
10 code-golf  tips 

3
クノーデル数-Knを見つける
クノーデル数 クノーデル数は一連のシーケンスです。具体的には、正の整数のKnödel数は、と互いに素であるすべてがを満たすようなn合成数のセットです。特定のKnödel数のセットが示されます。(ウィキペディア)。mi < mmi^(m-n) = 1 (mod m)nKn たとえば、K1はカーマイケル番号、およびOEIS A002997です。彼らは次のようになります{561, 1105, 1729, 2465, 2821, 6601, ... }。K2はOEIS A050990で、のようになり{4, 6, 8, 10, 12, 14, 22, 24, 26, ... }ます。 あなたのタスク あなたの仕事は、プログラム/関数/その他を書くことです。それには2つの数値をとり、nそしてp。pKnödelシーケンスの最初の数を返す必要がありKnます。 これはcode-golfなので、バイト単位の最短コードが優先されます! 例 1, 6 -> [561, 1105, 1729, 2465, 2821, 6601] 2, 3 -> [4, 6, 8] 4, 9 -> …

5
あらゆるサイズのデッキのパーフェクトシャッフルのサイクル長
チャレンジ 最短のコードで: 任意のサイズのカードのデッキ上に完全シャッフルの順列サイクルの長さを計算し、N(N ≥2及びnは偶数です)。 出力2≤のためのすべてのサイクルの長さのテーブルN ≤1000(nは偶数)。 完璧なシャッフルを定義するには、2つの基本的な方法があることに注意してください。あり、アウトシャッフル上に最初のカードと下部に最後のカードを保持し、かつそこにある中、シャッフル中央に向かって、最初と最後のカード1点の位置を移動し、。シャッフルするかシャッフルするかを選択できます。アルゴリズムは2つの間でほとんど同じです。 10カードデッキのシャッフル:[1,2,3,4,5,6,7,8,9,10]↦[1,6,2,7,3,8,4,9,5、 10]。 10カードデッキのシャッフル:[1,2,3,4,5,6,7,8,9,10]↦[6,1,7,2,8,3,9,4,10、 5]。 グラフィカルな例 ここでは、20カードデッキのアウトシャッフルのサイクル長が18ステップであることがわかります。(これは説明のみを目的としています。サイクルをグラフィカルに出力するためのソリューションは必要ありません。)一方、クラシック52カードデッキは、8段のアウトシャッフルサイクル長しかありません(図には示されていません)。 インシャッフル 20枚のカードデッキには、6つのステップのサイクル長を有しています。 出力の表形式の例 プログラムはこれに似たものを出力するはずですが、好きな表形式を選択することもできます。これはアウトシャッフル用です: 2 1 4 2 6 4 8 3 10 6 12 10 14 12 16 4 18 8 20 18 22 6 24 11 26 20 28 18 30 28 32 5 34 …

5
ゴルフ練習場:ピス[閉店]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、 Code Golf Stack Exchangeのトピックとなるようにします。 2年前休業。 これは、Pythでゴルフするときに使用できるトリックと最適化に関する課題です。Pythゴルファーは、関係するトリックの多くを認識しているかもしれません。ただし、馴染みのないアプローチや構成が含まれる可能性があるので、行き詰まった場合はPythのヒントとPythのキャラクターリファレンスをご覧ください。ソリューションはここでテストできます。 目標: 8つの問題があり、それぞれに最適化するPythスニペットがあります。あなたの目標は、同等で短いものを作成することです。参照ソリューションは合計80バイトです。あなたの目標は、それを可能な限り上回ることです。 勝者は、最小の合計バイト数で8つの問題すべてを解決する提出物に行きます。タイブレイカーは以前の投稿です。 回答:合計スコアを除いて、回答全体を台無しにしてください。自分の答えを提出する前に、他の人の答えを見ないことが意図されています。 送信ごとにすべての問題に回答し、対応するバイト数を提供する必要がありますが、改善できない場合はリファレンス実装を自由に使用してください。 詳細:質問で特定の値または出力qが必要な場合は、同等であることが望ましいため1、!0同等です。質問が条件が真であるかどうかのテストを要求する場合、出力は、条件が真である場合は真実であり、条件が偽である場合は偽である必要がありますが、それ以上制約はありません。trueをfalseに、falseをtrueに交換することはできません。質問で印刷する必要がある場合、末尾の改行以外は印刷できません。 すべての回答は、この質問の投稿時点での最新のPythコミットに対して有効である必要があります。 問題1: Qのセットを指定して、任意の順序でQの要素を含むリストを出力します。 ; 3 bytes f1Q 問題2:リストを出力します[1, 1, 0, 0, 1, 1, 0]。 ; 9 bytes [J1JZZJJZ 問題3: Qに正の整数を指定して、Qのすべての桁が正(ゼロではない)かどうかをテストします。 ; 7 bytes !f!TjQT 問題4: zの文字列を指定して、zに引用符が含まれているかどうかをテストします- "または'。 ; 9 bytes |}\'z}\"z 問題5: Q = 1を「Win」に、Q …
10 code-golf  pyth 

10
空の空白を埋めて空のスペースを埋める
placeAt非負の整数の配列と非負の整数のインデックスを取る関数(など)を記述します。与えられたインデックスに1を配置し、他のエントリを1スポットシフトしてそのスポットを空にする必要があります。0は空のスポットを表します。 目的のインデックスのエントリが0の場合は、1を入力します。 それ以外の場合は、インデックスの左側で最も近い0を探します。エントリをその左に1スポット左にシフトしてスペースを確保し、インデックスを1で埋めます。 左側に0がない場合は、同じことを右に行ってください。 どちらも可能でない場合(つまり、0がない場合)は、配列を変更せずに返します。 アイテムは0インデックスです。関数名は任意の名前にすることができます。 例: (文字は正の整数値を表します。) [a, b, 0, c, d, 0] placeAt 2 // output [a, b, 1, c, d, 0] place 2 is 0, just fill [a, b, 0, c, d, 0] placeAt 3 // output [a, b, c, 1, d, 0] place 3 is filled, …
10 code-golf 

8
異なる合計の作成
整数を入力として受け取り、合計が最初の整数である2つの整数を出力または返すプログラムまたは関数を作成する必要があります。 さらに1つの要件があります。2つの異なる入力の出力に数値を含めることはできません。 細部 少なくとも範囲-32768 .. 32767(両端を含む)の入力を処理できる必要があります。 データ型が任意の整数を処理できない場合は問題ありませんが、理論上はアルゴリズムが任意の大きい数と小さい数で機能するはずです。 例 各ブロックは、正しいまたは正しくないソリューションの一部をの形式で示していinput => outputます。 1 => 6 -5 2 => -2 4 15 => 20 -5 Incorrect, as `-5` is used in two outputs. -5 => -15 10 0 => 0 0 1 => 5 6 2 => -5 7 Incorrect, as `5 …
10 code-golf  number 

2
4x4 Hexの完璧なゲームをプレイする
バックグラウンド 六角はK×K六角形のタイルの菱形でプレイされる2プレーヤーの抽象戦略ゲームです。菱形の反対側の2つの側面は白く色付けされ、他の2つは黒く、2人のプレーヤー(黒と白)は交互に色のトークンを空いているタイルに配置します。最初に自分の色の反対側の間にパスを構築することに成功したプレーヤーが勝者です。ゲームは引き分けで終了することはできず、最初のプレイヤーはボードのサイズに関係なく勝利戦略を持っていることが知られています(詳細はWikipediaのページを参照してください)。 タスク この課題では、ボードサイズをに固定し、ボードをK = 4次のグリッドとして表します。太い線は隣接するタイルを示します。 あなたの仕事は、最初のプレーヤーのための勝利戦略を作成することです。あなたは黒か白のどちらかを選ぶことができます。これは、相手のプレーヤーがどのような合法的な動きをしても、あなたのプレーは勝利をもたらさなければならないことを意味します。入力はゲームの位置(ボード上のトークンの配置)であり、出力は以下に指定された形式での合法的な動きです。勝者戦略を自分で見つけたい場合は、このネタバレを読まないでください。 白が最初であると仮定して、1つの可能な勝利戦略の概要。 最初に5を選択します。その後、5から一番下の行へのパスがある場合、または黒が任意の時点で0または1を選択している場合、空いている0または1のいずれかを選択して応答します。黒が9または13を選択する場合、10を選択してから、14または15のいずれかが空くようにします。黒が9、13、または14を選択しない場合、9を選択し、次に13または14のいずれかが空いていることを選択します。黒が14を選択した場合は、15を選択して応答します。次に、空の場合は10を選択します。黒が10を選択した場合は11で応答します。黒が6を選択した場合は7で応答し、次に空いている2または3のいずれかを応答します。黒で6が選択されていない場合は選択して、5から最下行までのパスを作成します。 入出力 入力は16文字の文字列でWBE、白、黒、空を表します。上に列挙したように、それらはボードのタイルを表しています。以下から入力方法(出力方法も決定します)を選択できます。 STDINからの入力、STDOUTへの出力。 1つのコマンドライン引数として入力し、STDOUTに出力します。 16文字の1文字のコマンドライン引数として入力し、STDOUTに出力します。 名前付き関数の引数として入力し、戻り値として出力します。 次のトークンが移動する番なので、出力は次のトークンを配置するタイルを表します。次の出力形式から選択できます。 ゼロベースのインデックス(上の画像で使用されているもの)。 1から始まるインデックス。 プレーヤー用に選択した、またはユーザーが選択した文字列にE置き換えられた入力文字列。WB ルール あなたの戦略は決定論的でなければなりません。戦略を使用して空のボードから到達できないゲームの位置、またはいずれかのプレイヤーがすでに勝っている位置を正しく処理する必要はなく、クラッシュする可能性があります。逆に、あなたの戦略を使用して到達可能なボードでは、合法的な動きを返さなければなりません。 これはコードゴルフなので、最小バイト数が優先されます。標準の抜け穴は許可されていません。 テスト中 手作業で行うのは非常に面倒なので、エントリを検証するためのPython 3コントローラを作成しました。あなたはここでそれを見つけることができます。最初の3つの入力形式とPython 3関数(他の言語の関数はプログラムにラップする必要があります)、3つの出力形式すべて、および両方のプレーヤーをサポートしています。戦略が勝っていない場合は、見つかった敗北ゲームを出力するので、プログラムを微調整できます。

5
亡命マップの組み合わせのパス
この質問には、このゲームのゲーム「Path Of Exile」のメカニックが登場します。MAPSと呼ばれるものがあります。これらは、高レベルのエリアを開くために使用できるアイテムです。それらの3つを組み合わせて、アップグレードされたものを取得することもできます。この挑戦の課題。アップグレードの組み合わせは次のとおりです。 A Crypt Map 68 -> Sewer Map E Dungeon Map 68 -> Channel Map I Grotto Map 68 -> Thicket Map O Dunes Map 68 -> Mountain Ledge Map U Pit Map 68 -> Cemetery Map T Tropical Island Map 68 -> Arcade Map N Desert Map …

2
確率-どのくらい高くできますか?
以前に確率をすばやく正確に計算する方法について質問しました。しかし、明らかに、閉じた形のソリューションが与えられたので、それはあまりにも簡単でした!これはより難しいバージョンです。 このタスクは、確率を正確かつ迅速に計算するコードを記述することです。出力は、最も縮小された形式で分数として記述された正確な確率でなければなりません。つまり、出力んです4/8けど、むしろ1/2。 いくつかの正の整数の場合n、1と-1の長さの一様にランダムな文字列を検討し、nそれをAと呼びます。次にA、それ自体のコピーに連結します。これはA[1] = A[n+1]、1からインデックスを作成する場合A[2] = A[n+2]などです。 A今長さがあり2nます。ここでn、最初のn値が-1、0、または1であり、確率がそれぞれ1 / 4、1 / 2、1 / 4 である長さの2番目のランダムな文字列についても検討し、Bと呼びます。 今の内積考えるBとA[1+j,...,n+j]異なるためにj =0,1,2,...。 たとえば、を検討してくださいn=3。以下のための可能な値Aとは、B可能性A = [-1,1,1,-1,...]とB=[0,1,-1]。この場合、最初の2つの内積は0および2です。 仕事 それぞれについて、jで始まるj=1コードは、すべての最初のj+1内積がすべてゼロになる確率を出力する必要がありますn=j,...,50。 MartinBüttnerが作成したテーブルをコピーするj=1と、次のサンプル結果が得られます。 n P(n) 1 1/2 2 3/8 3 7/32 4 89/512 5 269/2048 6 903/8192 7 3035/32768 8 169801/2097152 スコア あなたのスコアは、j私のコンピューターでコードが1分で完了する最大のスコアです。少し明確にするために、それぞれjに1分を与えます。前のリンクされた質問の動的プログラミングコードは、これを簡単に実行しj=1ます。 タイ・ブレーカー 2つのエントリが同じjスコアを取得した場合n、私のマシンで1分間で最高のスコアを獲得したエントリが勝者となりますj。2つの最高のエントリがこの基準でも等しい場合、勝者が最初に送信された回答になります。 言語とライブラリ 自由に利用できる言語とライブラリを使用できます。私はあなたのコードを実行できなければならないので、可能であればLinuxでコードを実行/コンパイルする方法の完全な説明を含めてください。 私のマシンタイミングは私のマシンで実行されます。これは、AMD FX-8350 8コアプロセッサへの標準のUbuntuインストールです。これは、コードを実行できる必要があることも意味します。 …

4
チェス盤のポーンが多すぎる
整数2nを指定して、2n ^ 2の黒のポーンと2n ^ 2の白のポーンを2n x 2nのチェス盤に配置して、ポーンが他のポーンを攻撃しないようにする方法の数を見つけます。 黒のポーンは白のポーンのみを攻撃でき、その逆も可能です。 通常のチェスの攻撃ルールは次のとおりです。つまり、白いポーンは正面の対角線のすぐ後ろの正方形を攻撃し、黒いポーンはすぐ後ろの斜めの正方形を攻撃します(白い観察者が見るように)。 すべての回転、反射は個別としてカウントされます。 120秒で2nの最高値のすべての可能な構成を出力できるプログラムが勝利します。(ただし、すべてのプログラムを歓迎します) たとえば、アリスのプログラムは120秒以内に最大n = 16を処理でき、ボブのプログラムは同じ時間内に最大n = 20を処理できます。ボブが勝ちます。 プラットフォーム:Linux 2.7GHz @ 4 CPU

5
交差する単語を数える
次の標準的な15×15 クロスワードパズルグリッドについて考えてみましょう。 これをASCII #ブロックで表すには、forブロックと(スペース)を白い正方形に使用します。 # # # # # # # ### ## ## ## # # # # ## ## ## ### # # # # # # # 上記のASCIIアート形式のクロスワードグリッドを前提として、それが保持する単語数を決定します。(上記のグリッドには78ワードあります。先週の月曜日のニューヨークタイムズパズルです。) 単語は、垂直または水平に走る2つ以上の連続したスペースのグループです。単語は、ブロックまたはグリッドのエッジのいずれかで開始および終了し、常に上から下または左から右に実行されます。対角線または後方には決して実行されません。上のパズルの6行目のように、単語はパズルの幅全体に及ぶ場合があることに注意してください。単語を別の単語に関連付ける必要はありません。 細部 入力は常に文字#または(スペース)を含む長方形で、行は改行(\n)で区切られます。グリッドは、およびの代わりに、2つの異なる印刷可能なASCII文字で構成されると想定できます。# オプションの末尾の改行があると想定する場合があります。末尾の空白文字は、単語数に影響を与えるため、カウントされます。 グリッドは常に対称であるとは限らず、すべてスペースまたはすべてブロックである場合があります。 プログラムは理論的にはあらゆるサイズのグリッドで機能する必要がありますが、この課題では21×21を超えることはありません。 グリッド自体を入力として、またはグリッドを含むファイルの名前として使用できます。 stdinまたはコマンドライン引数から入力を取り、stdoutに出力します。 必要に応じて、プログラムの代わりに名前付き関数を使用して、グリッドを文字列引数として取得し、stdoutまたは関数returnを介して整数または文字列を出力できます。 テストケース 入力: # # # 出力:(7各の前にスペースが4つあります#。各番号記号を削除した場合の結果は同じですが、Markdownは空の行からスペースを削除します。) 入力: ## # ## …

2
各漂流トラッカーをご覧ください
あなたの仕事は、多くの浮遊魚追跡装置のバッテリーパックを最短時間で交換することです。基地を基地ヘリコプターに残し、各トラッカーを1度訪問して、基地に戻る必要があります。 最適なルートを見つけることは難しいことが知られていますが、さらに困難があります!各トラッカーにはドリフト速度があります(これはその日の定数であると想定されます)。 これは、ノードの移動という課題が追加された、巡回セールスマンの標準的な問題です。有効なツアーを簡単に見つけられるはずです。主な課題は、最適に近いツアーを見つけるアルゴリズムを開発することです。私は現在のN = 300で完璧なツアーを見つけることは不可能だと予測しています(しかし、私は間違っていると証明されたいです)。 ルール プログラムには、STDINまたはコマンドライン引数を介して、一連のトラッカーデータが提供されます。各トラッカーを1回だけ訪れてベースに戻るルートを見つける必要があります。出力は、空白で区切られたトラッカーID:時間のペアのリストである必要があります。 位置はセンチメートル(cm)で表示されます。 時間は、t = 0から始まる秒単位で測定されます。 速度はcm /秒で与えられます。 各トラッカーIDは、1から8文字の大文字です。 IDが「BASE」のベースはにあり(0,0)ます。 入力と出力のすべての数値は、符号付き整数を使用します。 入力は、1つ以上の空白またはスラッシュで区切られたトラッカーです。 各トラッカーは持っていますID:x,y,vx,vy(例:フォーマットをA:566,-344,-5,11) 時間tでは、トラッカーはにあります(x+vx*t, y+vy*t)。 ヘリコプターは速度5000 cm /秒(時速180 km)を超えてはなりません。 出力は、時間順にホワイトスペースで区切られた訪問である必要があります。 各訪問はIDにする必要があります:時刻の形式(例:A:5723) (例:あなたの出力の最後の訪問は、ベースにする必要がありますBASE:6120) 複数のトラッカーが同じ位置にある場合、それらの間を移動するのにかかる時間はゼロです。 標準の抜け穴は禁止されています。 データセットの例 A:77000,88000,-120,80 B:52000,-12000,0,-230 C:-140000,-23000,-270,110 非最適なソリューションの例: A:30 B:60 C:120 BASE:160 A:30 B:60 C:120 BASE:130ヘリコプターは10秒でベースに戻るために17268 cm /秒で飛行する必要があるため、無効になることに注意してください。 テストデータセット AA:-164247,-378265,182,113 AB:-1494514,-385520,-25,80 AC:-744551,832058,-13,-123 AD:-930133,1598806,97,177 AE:-280777,-904936,-48,305 …

5
確率を正確かつ迅速に計算する
[これは正確に確率を計算するためのパートナーの質問です ] このタスクは、確率を正確かつ迅速に計算するコードを記述することです。出力は、最も縮小された形式で分数として記述された正確な確率でなければなりません。つまり、出力んです4/8けど、むしろ1/2。 いくつかの正の整数についてn、1と-1の長さの一様にランダムな文字列を考え、nそれをAと呼びます。次にA、最初の値に連結します。これはA[1] = A[n+1]、1からのインデックスAが長さを持っている場合 n+1です。ここでn、最初のn値が-1、0、または1であり、確率がそれぞれ1 / 4、1 / 2、1 / 4 である長さの2番目のランダムな文字列についても検討し、Bと呼びます。 今の内積考えるA[1,...,n]とBとの内積をA[2,...,n+1]してB。 たとえば、を検討してくださいn=3。以下のための可能な値Aとは、B可能性A = [-1,1,1,-1]とB=[0,1,-1]。この場合、2つの内積は0および2です。 コードは、両方の内積がゼロである確率を出力する必要があります。 MartinBüttnerが作成したテーブルをコピーすると、次のサンプル結果が得られます。 n P(n) 1 1/2 2 3/8 3 7/32 4 89/512 5 269/2048 6 903/8192 7 3035/32768 8 169801/2097152 言語とライブラリ 自由に利用できる言語とライブラリを使用できます。私はあなたのコードを実行できなければならないので、可能であればLinuxでコードを実行/コンパイルする方法の完全な説明を含めてください。 タスク コードは、先頭がn=1nで、別の行にnが増えるたびに正しい出力を与える必要があります。10秒後に停止します。 スコア スコアはn、コンピューターで実行したときにコードが10秒後に停止する前に到達した最高点です。同点の場合、勝者が最も早く最高スコアに到達する人になります。 エントリの表 n = 64Python。Mitch Schwartzによるバージョン1 n …

1
床の最も単純なタイリング
床を表す文字列を入力として受け取り、床の特定のパターンを作成できる最も単純なメタタイルの領域を出力または返すプログラムまたは関数を記述する必要があります。 床は正方形のグリッドの一部です。すべての正方形のタイルは、紺碧または黒のいずれかで色付けされます(入力によってa、およびb入力で表されます)。 フロアの例: aaaa ababab aaaaa メタタイリング 構築されているNことにより、M空色、黒四角の矩形メタタイル 使用されるメタタイルは平行移動まで同一です(回転またはミラーリングすることはできません) 2つのメタタイルの側面が接続されている場合、それらはその全長に沿って接続する必要があります(つまり、メタタイルはスペースをグリッド状に並べます)。 メタタイルの例: ba aa それによって作成されたメタタイリング: . . . babababa aaaaaaaa ... babababa ... aaaaaaaa babababa aaaaaaaa . . . このメタタイルは、左の文字が示すように、上部に表示されるフロアを作成します。 . . . ******** ***aaaa* ... *ababab* ... *aaaaa** ******** ******** . . . メタタイルの面積が小さい場合、メタタイルは他より単純です。この例には2*2 = 4、例の床で可能な最小の面積があります。したがって、出力は4例のようになります。 入力 文字列の文字から成るa b spaceとnewline少なくとも一つを含有するa又はb。 …
10 code-golf  grid  tiling 

30
16進カウンター
16進数は、から0までの16 進数のカウントシステムですf。あなたの仕事は、これらの数を表示するカウンターを作ることです。 例: $ python counter.py 1 2 3 4 5 6 7 8 9 a b c d e f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 26 27 28 29 2a 2b 2c …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.