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

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

7
合計のないパーティションを見つける
エグゼクティブサマリー 入力を考えるとk、整数のパーティションを見つける1にnにk最大のための和自由サブセットn10分以内にすることができます。 背景:シュール数 自己合計に共通する要素がない場合、セットAは合計なしですA + A = { x + y | x, y in A}。 すべての正の整数の場合はk整数の最大があるS(k)セットがあるよう{1, 2, ..., S(k)}に分割することができますk合計フリーサブセット。この番号は、k 番目の シューア番号(OEIS A045652)と呼ばれます。 たとえば、S(2) = 4。{1, 2, 3, 4}としてパーティション化できます。{1, 4}, {2, 3}これは、2つの合計のないサブセットへの一意のパーティションですが、5どちらの部分にもa を追加することはできません。 チャレンジ 以下を実行する決定論的プログラムを作成します。 k入力として正の整数を取る 現在のUnixタイムスタンプをstdoutに書き込みます パーティションのシーケンスを出力1するnにk増大させるための和自由サブセットn現在のUnixタイムスタンプを持つ各シーケンス以下、。 勝者は、n入力が与えられたときに私のコンピューターで10分以内に最大のパーティションを印刷するプログラム5です。n3回の実行で平均された最大のパーティションを見つけるための最も早い時間で関係が壊れます。そのため、出力にタイムスタンプを含める必要があります。 重要な詳細: 私はUbuntu Preciseを持っているので、あなたの言語がサポートされていない場合、スコアをつけることができません。 Intel Core2 Quad CPUを持っているので、マルチスレッドを使用したい場合、4つ以上のスレッドを使用しても意味がありません。 特定のコンパイラフラグまたは実装を使用する場合は、回答に明確に文書化してください。 入力を処理するためにコードを特殊なケースにしないでください5。 見つかったすべての改善を出力する必要はありません。たとえば、入力の2場合は、パーティションのみを出力できますn = …

4
奇妙なコインによる最適化の課題
あなたは持っているn、それぞれがそれぞれのからラベル付けされているいずれかの重量を量る-1または1コイン0にn-1あなたが離れてコインを伝えることができるようにします。1つの(魔法の)計量装置もあります。最初のターンでは、負の重量と正の重量の両方を測定できる計量装置に好きなだけコインを置くことができます。 しかし、計量装置には本当に奇妙なことがあります。x_1, x_2, ..., x_j初めてデバイスにコインを置いた場合、次回(x_1+1), (x_2+1) , ..., (x_j+1)よりも大きい番号のコインを置くことができないことを除いて、次にスケールにコインを置く必要がありますn-1。それだけでなく、新しい計量ごと0に、スケールにコインを入れたいかどうかを選択できます。 このルールでは、どのコインの重さが1で、どのコインの重さが-1であるかを常に示す最小計量値は何ですか? 明らか0に、最初のターンでデバイスにコインを置くだけでn問題を解決するには正確な計量が必要です。 言語とライブラリ 好きな言語やライブラリを使用できます(このチャレンジ用に設計されたものではありません)。ただし、可能であればコードをテストできるようにしたいので、Ubuntuでコードを実行する方法について明確な指示を提供できれば非常にありがたいです。 スコア 与えられたnスコアに対してn、最悪の場合に必要な計量の回数で割られます。したがって、スコアが高いほど優れています。このパズルへの入力はありませんが、あなたの目標はn、最高のスコアを獲得できるものを見つけることです。 同点の場合、最初の答えが勝ちです。誰かが無限のスコアを得る方法を見つけるという非常にまれな状況では、その人がすぐに勝ちます。 仕事 あなたの仕事は、最高のスコアを獲得するコードを書くことです。コードはnを賢く選択し、そのために計量回数を最適化する必要がありnます。 主要なエントリー Sarge BorschによるPythonの4/3 7/5 ピーターテイラーによるJavaの 26/14

5
携帯電話のキーボード入力
携帯電話のキーボード入力 この質問はしばらく前に尋ねられましたが、仕様が悪いため終了しました。だから、私はそれをより良い仕様でやり直しています。この質問は関連していますが、反対の方向に進みます。 T9が登場する前に、テキストメッセージに文字を入力するには、数字キーの1つを何度か押して、目的の文字を取得する必要がありました。参考のために、標準のマッピングを次に示します。 +-------+-------+-------+ | 1 | 2 | 3 | | .?!1 | ABC2 | DEF3 | +-------+-------+-------+ | 4 | 5 | 6 | | GHI4 | JKL5 | MNO6 | +-------+-------+-------+ | 7 | 8 | 9 | | PQRS7 | TUV8 | WXYZ9 | +-------+-------+-------+ | …

14
順列の楽しみ
順列を絶対に好きではない人はいますか?私は知っています、彼らは驚くべきことです。とても楽しいです! さて、なぜこの楽しさを取ると、それにしないfunner? これが課題です。 正確な形式で入力所与:nPr、nプールから採取されるとr、そのプールからの選択の数である(そしてnそしてr整数である)、出力/順列の正確な数を返します。用語で少し錆びているあなたのために:順列、定義。2a。 ただし、これが課題の出番です(簡単ではありません): 置換関数に組み込みのライブラリ、フレームワーク、またはメソッドを使用することはできません。階乗法、順列法、またはそのようなものは使用できません。すべてを自分で書く必要があります。 さらに説明が必要な場合は、コメントで私に話すことをheしないでください、私はすぐにそれに応じて行動します。 I / Oの例を次に示します。 サンプル関数は permute(String) -> int 入力: permute("3P2") 出力: 6 これはコードゴルフなので、最短のコードが勝ちです!

2
いくつかの安全なPINを生成する
このひどく受信された移行された投稿に触発されました。 あなたの会社のセキュリティ責任者は、彼に与えたPIN生成システムを心配しています12345。彼はまた、あなたが彼の費用で行ったスペースボールのジョークを本当に感謝していなかったので、あなたはPINジェネレータを書き直すように委任されました。いくつかの特別なハードウェアに収まる必要があるため、できるだけ小さくする必要があります。 あなたのタスク PINの数とPINの桁数の2つの入力を受け取ります。 指定されたサイズの指定された数のPINをランダムに生成し、印刷します。 サイズが均一である可能性がなくても、すべての有効なPINを印刷できる必要があります。 ただし、PINにはいくつかの制限があります。無効なものは次のとおりです。 すべてのペアが同じ数字である場合:(114422注:これには明らかにすべて同じ数字のPINが含まれます)。 ますます線形のPIN(MOD 10): 246802。 3のすべてのグループは以下のキーパッドの物理的な線です1 2 3;4 5 6;7 8 9;bksp 0 enter;:147369。 PINはルール1とルール3からグループに完全に分割できます。 これはcode-golfなので、バイト単位の最短コードが勝ちです!

6
ウラムのらせんの素数
Ulamのスパイラルは、数学では本当に魅力的でありながら不可解なトピックです。詳細については、こちらをご覧ください。ただし、短い要約は次のように説明できます。 最初に1を書くことから始め、次にその右側に2を書きます。2つの上に3を書き、その左側に4を書きます。このパターンを1(および私と1の間の数字)を無限に(または停止するように指示されるまで)旋回させ、らせんパターンを形成します。(下の例を参照) 目的 行の数と相関する入力としてn(常にゼロより大きい奇数)を受け入れるプログラムを作成し、Ulamスパイラルの行ごとに素数の値を出力します。書式設定はどのような方法でもかまいませんが、人間が判読できる明白なものでなければなりません。 たとえば、入力3を指定する5,3,2,7と、3行が次の螺旋を生成するため、プログラムはを出力する必要があります。 5 4 3 <-- first row has the primes 5 and 3 6 1 2 <-- second row has the prime 2 7 8 9 <-- third row has the prime 7 これはコードゴルフであるため、バイト数が最も少ない答えが(どれだけ非効率であっても)勝ちます!標準的な抜け穴は受け入れられません。
17 code-golf  math  primes 

14
チェスのFEN文字列に基づいてスコアを評価する
チャレンジ Forsyth–Edwards Notation(FEN)は、チェスゲームの特定のボードの位置を記述するための標準的な表記法です。あなたの課題は、FEN文字列を使用してスコアを評価することです。これはFEN文字列の例です。 5k2/ppp5/4P3/3R3p/6P1/1K2Nr2/PP3P2/8 この文字列を使用して、次のスコアテーブルで各色のマテリアルスコアを計算できます。 p / P =ポーン= 1ポイント n / N =ナイト= 3ポイント b / B =ビショップ= 3ポイント r / R =ルーク= 5ポイント q / Q =クイーン= 9ポイント k / K =キング、これらのポイントはありません 白い部分は大文字( "PNBRQK")を使用して指定され、黒い部分は小文字( "pnbrqk")を使用します。空の四角は1〜8の数字(空の四角の数)を使用して示され、「/」はランクを区切ります。 FEN文字列の例から、各側の材料スコアを計算できます。 黒の場合: 5 k 2 / ppp 5 / 4P3 / 3R3 p …
17 code-golf  chess 

8
Pawn Chessboardでキャプチャする
入力および出力としてポーンのみを含むチェスボードを表す文字列を受け取るプログラムまたは関数を作成する必要があります。または、ボード上でキャプチャが可能かどうかを返します。 入力は、他のピースが存在しない白と黒のポーンの位置を記述するFENのような表記法です。敵を捕まえることができるポーンがあるかどうかを判断する必要があります。 ランク8から始まり、ランク1で終わる各ランクが記述されています。各ランク内で、各正方形の内容はファイル「a」からファイル「h」まで記述されます。各ポーンは1文字で識別されます(白いポーン=「P」、黒いポーン=「p」、)。空の四角は1〜8の数字(空の四角の数)を使用して示され、「/」はランクを区切ります。(一部ウィキペディアから取得) 例えば 8/pppppppp/8/8/4P3/8/PPPP1PPP/8 ボードについて説明します -------- pppppppp P PPPP PPP -------- 白のポーンは黒のポーンが斜めに上にある場合(黒は左上または右上)、黒のポーンは白のポーンが下から斜めにある場合(白は白左下または右下)。他のキャプチャー移動(en passant)は考慮しないでください。 入力 A FENの文字からなる文字列様12345678pP/。 入力は、有効なチェスのゲーム位置のポーンを記述します。これは、(他のより複雑な制約の中でも)各側に最大8つのポーンがあり、ランク1と8にはポーンがないことを意味します。 出力 あなたが出力するいずれかの側に可能なキャプチャがある場合truthyの値とfalsyそうでない場合、値を。 例 真実の出力を持つ入力(1行に1つ) 8/7p/6P1/8/8/8/8/8 8/8/p7/1P6/3P3p/8/8/8 8/2P5/8/4P1p1/2p2P2/3p4/3p1P2/8 8/P7/8/5P2/2pp4/3P2p1/3pP3/8 8/P7/p7/p1P1P3/1P3p2/8/1p6/8 8/4p1P1/2P2P1P/2p1pPpp/8/6P1/pP1p4/8 偽の出力を伴う入力(1行に1つ) 8/8/8/8/8/8/8/8 8/7P/6p1/8/8/8/8/8 8/7p/7P/8/8/8/8/8 8/pppppppp/8/8/8/8/PPPPPPPP/8 8/p7/8/1p6/5P2/8/8/8 8/p7/P7/2P1p1p1/2p5/8/PP6/8 これはコードゴルフなので、最短のエントリーが勝ちます。

16
このように印刷
STDINへの入力を受け取り、2k-1thワードのすべての小文字(アクセント付き文字を含む)を大文字にし、2kthワードの小文字(アクセント付き文字も含む)をすべて小文字(k正の整数)にするプログラムを作成します。プログラムは、どの単語の他の文字にも影響を与えません。たとえば、文字列がの場合Ook! O0k!、出力はになりますOOK! o0k!。 空白以外の文字の後に空白がゼロ以外の量があると、新しい単語が形成されます。入力の先頭の空白は無視する必要があります。単語に変更された文字が含まれていない場合、プログラムはそれを単語とみなして続行します。 サンプル入力(異なる入力は空白の改行で区切られます) Nineteen Eighty-Four (1984) Programming Puzzles & Code Golf - Hooray for Code Golf Stack Exchange! 2be or not 2be, that is the ~~~QuEsTiOn~~~ ++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++. サンプル出力 NINETEEN eighty-four (1984) PROGRAMMING puzzles & code GOLF - HOORAY for CODE golf STACK exchange! 2BE or NOT 2be, THAT …
17 code-golf 

6
オードゴルフ-レターの削除
辞書ファイル(各行に単語または句を含むテキストファイルで、句読点は使用できますが数字はありません。行はアルファベット順です)を指定すると、単語から文字を削除して別の文字を作成できます。削除した文字は括弧で囲む必要があります。 たとえば、入力 cat cart code golf ode verify versify の出力を与える必要があります ca(r)t (c)ode ver(s)ify 同じペアを取得する複数の方法は、一度だけ表示する必要があります。scra(p)pedまたはを出力できますscrap(p)edが、両方はできません。 出力は、長いエントリのアルファベット順に並べる必要があります。 mart mar mat ma の出力が必要です ma(r) ma(t) ma(r)t mar(t) 後者の2つはどちらの順序でもかまいません。 辞書ファイルには、大文字、スペース、ハイフン、またはアポストロフィを含めることができます。これらは無視する必要があります。例えば、 inlay in-play を生成する必要がありin(p)layます。出力はすべて同じケースにする必要があります。余分な空白は許可されます。 入力は、STDINまたはファイルから行うことができます。改行で区切られています。出力は、関数の戻り値またはSTDOUT(または必要に応じてファイルに書き込まれます)です。 これはcode-golfであるため、バイト単位の最短コードが優先されます。 (これはPPCGに対する私の最初の挑戦です-何か間違ったことをしたかどうかを教えてください。それを修正します。)
17 code-golf  string 

3
トグル、印刷、繰り返し
このチャレンジは緩く未実装esolangに触発されPADA。 すべてゼロに初期化された8ビットの配列を考えます。任意の文字列を印刷するための非常に最小限の命令セットを紹介します。2つの命令があり、どちらもNビットのインデックスであるパラメーターを取ります。 t N以下のためにトン oggle:これは、ビットの値を変更しますN。 p Nfor p rint:これは、8ビットすべてを、bitから始まりNendの周りにラップするバイトとして解釈します。このバイトに対応する文字がSTDOUTに出力されます。 例を見てみましょう。印刷したい:=。単純に次のようにこれを達成します(0ベースのビットインデックス): t 2 [0 0 1 0 0 0 0 0] t 3 [0 0 1 1 0 0 0 0] t 4 [0 0 1 1 1 0 0 0] t 6 [0 0 1 1 1 0 1 0] …

3
より強力な4平方暗号
バックグラウンド 100年と13年前、アマチュア暗号学者のフェリックス・デラステッレは、25字のアルファベットの2つの順列をキーとして受け入れ、それらの文字で構成されるメッセージをエンコードする4乗暗号に関する研究を発表しました。 ほとんどのペンと紙の暗号と同様に、4平方暗号は現在暗号的な価値を持ちませんが、発明の時点では、モノグラフの暗号よりも大きな利点がありました。 100年後、13年後、アリス・デラステッレは、アルファベットのサイズとキーの数を増やすことで4平方暗号を改善することにしました。[引用が必要] キー設定 アルファベットには次の文字が含まれます(スペースで始まる): !"#$%&'()*+,-./:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ パスフレーズを指定すると、次のようにこのアルファベットの順列を作成します。 各文字の最初の出現のみを保持します。 アルファベットの未使用文字を自然な順序で追加します。 4つのパスフレーズを4つのキーに変換した後、各キーを辺の長さ7の正方形に分割し、結果の4つの正方形を配置して1つの大きな正方形を形成します。 たとえば、パスフレーズが PROGRAMMING PUZZLES & CODE GOLF POPULARITY CONTESTS & CODE BOWLING CORRECT HORSE BATTERY STAPLE DON'T TELL EVE!!! キーは次のように構築および配置されます。 PROGAMI POULARI N UZLES TY CNES &CDF!"# &DBWG!" $%'()*+ #$%'()* ,-./:;< +,-./:; =>?@BHJ <=>?@FH KQTVWXY JKMQVXZ CORET H DON'T E …

18
トーナメント形式の同義語
今日はすべてをスーパースマッシュブラザーズトーナメントで過ごし、セットを説明するときに使用する用語の一部について考え始めました。これらは、トーナメントでプレイされる3種類のセットです。 ベストオブ3(Bo3) 3つのゲームがプレイされます。このセットの勝者は、ゲームの大半を獲得したプレーヤーです。 1人のプレイヤーがセットの2ゲームに勝った場合、相手が追いつくことは不可能なので、すぐに勝者と宣言されます。 ベストオブ5(Bo5) 5つのゲームがプレイされます。このセットの勝者は、ゲームの大半を獲得したプレーヤーです。 1人のプレイヤーがセットの3ゲームに勝った場合、相手が追いつくことは不可能なので、すぐに勝者と宣言されます。 最初の5(Ft5) さて、以前の文言で少しごまかしました。この種のセットはトーナメントの一部ではありませんが、多くの場合、会場で開催されます。これは伝統的に、他のプレイヤーに挑戦してお金が出ている場合にプレイする種類のセットです。 簡単なことです。プレーヤーは、ゲームの1つが5つ勝つまで繰り返しプレイし、そのプレーヤーが勝者と宣言されます。 明らかに、Bo3とBo5は非常に似ており、プレイされるゲームの数のみが異なります。しかし、Ft5は明らかに違います...そうですか?あんまり!Bo3セットがどのようにダウンしたとしても、勝者はちょうど2つのゲームに勝ったことになります。Bo5セットの勝者は、正確に3ゲーム勝ちました。なぜFt2またはFt3と呼ばないのですか?逆に適用された同じロジックは、Ft5がBo9とまったく同じであることを示します。 この課題の目的は、セット形式の同義語を判別することです。 仕様 プログラムまたは関数はinputから単一の文字列を取得します。最初の2文字はBoまたはFtになり、その後に数字が続きます。プログラム/関数意志の出力と反対のプレフィックスと、入力と出力文字列が同じものを意味するような数の文字列。 で始まる文字列Boは奇数で終わります。 入力文字列の数値が200を超えることはないと想定できます。また、正しい出力に200を超える数値が含まれる入力を受信しないと想定することもできます。同様に、入力および正しい出力の数値は常に0より大きくする。 例 Bo3 -> Ft2 Ft2 -> Bo3 Bo5 -> Ft3 Ft3 -> Bo5 Bo9 -> Ft5 Ft5 -> Bo9 Bo51 -> Ft26 Ft26 -> Bo51 Bo199 -> Ft100 Ft100 -> Bo199
17 code-golf 

14
基準角度を見つける
これはかなり単純な質問です。よると、私が見つけたこのランダムなウェブサイト- Webアーカイブ、基準角度は、the acute angle formed by the terminal side of the given angle and the x-axis.あなたがこれらを見つけるためのプログラムを記述する必要があります。 代数2のことは何も覚えていませんが、これはどういう意味ですか? 通常、角度は標準形式で与えられます。これは、角度の片側を配置し、反対側を反時計回りに測定することで測定されます。 これが入力になります。出力はこれの基準角度になります。これは、基本的に端末側からx軸までの最小距離と考えることができます。ただし、距離ではなく角度です。ここではいくつかの例を示します。 明確化 入力および提出に関するすべてのデフォルト。 角度は度単位です。 負の角度、非整数の角度、および360度を超える角度が許可されます。 形式で出力します60 deg。 これはcode-golfなので、バイト単位の最短コードが勝ちです! 別の役立つリンク。 テストケース 70 -> 70 deg 135 -> 45 deg 210 -> 30 deg -60 -> 60 deg 91 -> 89 deg 610 -> …

24
その言葉にサイン2!
その言葉にサイン2! その少し前に、私はその言葉に署名というチャレンジを投稿しました!。課題では、順番に入れ文字(の例えば署名である単語の署名、見つけなければならないthisですがhist)。さて、そのチャレンジは非常にうまくいきましたが、重要な問題が1つありました。それはとても簡単でした(GolfScriptの回答を参照)。そのため、同様の課題を投稿しましたが、より多くのルールがあり、そのほとんどは前のパズルのコメントでPPCGユーザーによって提案されています。だから、ここに行きます! ルール プログラムは入力を受け取り、使用する言語に関係なくSTDOUTまたは同等のものに署名を出力する必要があります。 組み込みのソート関数を使用することは許可されていないため$、GolfScriptのようなものは許可されていません。 マルチケースをサポートする必要があります-プログラムは大文字と小文字の両方の文字をグループ化する必要があります。したがって、の署名は、最初のバージョンのGolfScript回答で指定されたとおりでHelloはeHlloありませんHello。 プログラム用の無料のインタープリター/コンパイラーが必要です。リンクする必要があります。 得点 スコアはバイトカウントです。最も少ないバイト数が優先されます。 リーダーボード これは、通常のリーダーボードと言語ごとの勝者の概要の両方を生成するスタックスニペットです。 回答が表示されるようにするには、次のマークダウンテンプレートを使用して、見出しから回答を開始してください。 # Language Name, N bytes N提出物のサイズはどこですか。スコアを改善する場合、古いスコアを打つことで見出しに残すことができます。例えば: # Ruby, <s>104</s> <s>101</s> 96 bytes コードスニペットを表示 var QUESTION_ID=55090;function answersUrl(e){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),e.has_more?getAnswers():process()}})}function shouldHaveHeading(e){var a=!1,r=e.body_markdown.split("\n");try{a|=/^#/.test(e.body_markdown),a|=["-","="].indexOf(r[1][0])>-1,a&=LANGUAGE_REG.test(e.body_markdown)}catch(n){}return a}function shouldHaveScore(e){var a=!1;try{a|=SIZE_REG.test(e.body_markdown.split("\n")[0])}catch(r){}return a}function getAuthorName(e){return e.owner.display_name}function process(){answers=answers.filter(shouldHaveScore).filter(shouldHaveHeading),answers.sort(function(e,a){var r=+(e.body_markdown.split("\n")[0].match(SIZE_REG)||[1/0])[0],n=+(a.body_markdown.split("\n")[0].match(SIZE_REG)||[1/0])[0];return r-n});var e={},a=1,r=null,n=1;answers.forEach(function(s){var t=s.body_markdown.split("\n")[0],o=jQuery("#answer-template").html(),l=(t.match(NUMBER_REG)[0],(t.match(SIZE_REG)||[0])[0]),c=t.match(LANGUAGE_REG)[1],i=getAuthorName(s);l!=r&&(n=a),r=l,++a,o=o.replace("{{PLACE}}",n+".").replace("{{NAME}}",i).replace("{{LANGUAGE}}",c).replace("{{SIZE}}",l).replace("{{LINK}}",s.share_link),o=jQuery(o),jQuery("#answers").append(o),e[c]=e[c]||{lang:c,user:i,size:l,link:s.share_link}});var s=[];for(var t in e)e.hasOwnProperty(t)&&s.push(e[t]);s.sort(function(e,a){return e.lang>a.lang?1:e.lang<a.lang?-1:0});for(var o=0;o<s.length;++o){var l=jQuery("#language-template").html(),t=s[o];l=l.replace("{{LANGUAGE}}",t.lang).replace("{{NAME}}",t.user).replace("{{SIZE}}",t.size).replace("{{LINK}}",t.link),l=jQuery(l),jQuery("#languages").append(l)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",answers=[],page=1;getAnswers();var …

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