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

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

2
Connect 4をプレイ!
Connect 4のゲームをプレイするプログラムを作成します。ボードの状態が入力として与えられ、4列(水平、垂直、または斜め)を取得するか、対戦相手が同じことをできないようにするために、ピースを配置する列を決定する必要があります。 ボードは6x7アレイで、各セルは空( '')で、ピース( 'X')または対戦相手のピース( 'O')が含まれます。サンプルボード: O XX X XOX OO XOO OXO OXXOXXO XOXOXOX 対角線で勝つために、列3(列は0から6で、左から番号が付けられています)でプレーします。あなたは出力します: 3 コードは列番号を出力する必要があり、次の条件を満たす必要があります。 すでに6個の駒がある列ではプレイできません。 少なくとも1つの勝利の動きがある場合、それらの1つをプレイする必要があります。 相手が次の動きで勝つことを防ぐことができるなら、そうしなければなりません。 最適なプレイは必要ないことに注意してください。ただちに勝利するか、対戦相手の即時勝利を妨げます。対戦相手に複数の勝ち方がある場合、それらをブロックする必要はありません。 標準入力でボードが提供され、標準出力で再生する列番号を印刷する必要があります。ボードは正しい形式(ホールなし、少なくとも1つの可能な動き)であることが保証されており、どちらのプレイヤーもまだ勝てないことが保証されています。 最短のコードが優先されます。 例1 X O X O OOO X XXX O 勝つためには、列0または4をプレイする必要があります。 例2 X X X O O XOX XO XXO XOX XXO XXO 対戦相手の即時勝利をブロックするには、列3をプレイする必要があります。 例3 X XO …

10
エジプト分数
概要: ウィキペディアから:エジプトの分数は、異なる単位分数の合計です。つまり、式の各分数には1に等しい分子と正の整数である分母があり、すべての分母は互いに異なります。このタイプの式の値は、正の有理数a / bです。すべての正の有理数は、エジプトの分数で表すことができます。 チャレンジ: 特定の分数に達する単位分数の最小セットのすべての分母の値を返す最短関数を記述します。 ルール/制約: 入力は2つの正の整数値になります。 これは、上ですることができSTDIN、argv、カンマ区切り、スペースが区切られ、あるいは他の方法は、あなたが好みます。 最初の入力値は分子で、2番目の入力値は分母です。 最初の入力値は2番目の入力値よりも小さくなければなりません。 出力には、システム/言語のメモリ制限(RAM、MAX_INT、またはその他のコード/システム制約が存在する)を超える値が含まれる場合があります。これが発生した場合は、できるだけ高い値で結果を切り捨てて、何らかの形で(つまり...)に注意してください。 出力は、少なくとも2,147,483,647(2 31 -1、符号付き32ビットint)までの分母値を処理できる必要があります。 より高い値(longなど)は完全に許容されます。 出力は、見つかった単位分数の最小セットの分母のすべての値(または分数自体、つまり1/2)のリストです。 出力は、分母の値に応じて昇順(分数の値で降順)に並べられます。 出力は任意の方法で区切ることができますが、ある値と次の値を区別するために、間に文字が必要です。 これはコードゴルフであるため、最短のソリューションが優先されます。 例: 入力1: 43, 48 出力1: 2, 3, 16 入力2: 8/11 出力2: 1/2 1/6 1/22 1/66 入力3: 5 121 出力3: 33 121 363

11
アセンブリ言語クイン
可能な限り短いアセンブリ言語のquineを書きます。 print-quine命令または同等のものがない限り、必要なISAを使用します。例には、x86、MIPS、SPARC、MMIX、IBM BAL、MIX、VAX、JVM、ARMなどが含まれます。 _printfI / O のC標準ライブラリの関数(またはJVMバイトコードに相当するJava)に対してリンクできます。 長さは、命令数とデータセグメントのサイズの両方で判断されます。ソリューションには少なくとも2つの指示が含まれている必要があります。 QUINEを印刷する必要があり、アセンブリコードではなく、組み立てられたマシンコード。

30
回転した文字列を検出する
から2つの文字列を読み取りますstdin。一方の文字列が他方の文字列の回転バージョンである場合に 出力Yesされます。 それ以外の場合は出力No テストケース 入力 CodeGolf GolfCode 出力 Yes 入力 stackexchange changestackex 出力 Yes 入力 stackexchange changestack 出力 No 入力 Hello World 出力 No
20 code-golf  string 

19
基本的な電卓
計算機に入力される文字列を評価するプログラムを作成する必要があります。 プログラムは入力を受け入れ、正しい答えを出力する必要があります。標準の入出力関数を持たない言語の場合、関数readLineおよびを想定できますprint。 必要条件 いかなる種類の「評価」関数も使用しません 浮動小数点数と負数を処理できます 少なくとも+、-、*、および/演算子をサポートします 演算子と数字の間に1 つ以上のスペースを含む入力を処理できます 式を左から右に評価します 最短のプログラムが勝ちます。同点の場合、最初に提出されたプログラムが勝ちます。 入力が有効で、正しい形式に従っていると想定できます テストケース 入力 -4 + 5 出力 1 入力 -7.5 / 2.5 出力 -3 入力 -2 + 6 / 2 * 8 - 1 / 2.5 - 18 出力 -12

30
最初に奇数を並べ替えます
すべての奇数がすべての偶数の前に表示されるように、指定されたリストを再配置します。この要件に加えて、出力リストの順序は任意です。 入力には整数のみが含まれますが、それらは負であり、重複がある場合があり、任意の順序で表示される場合があります。 最短のソリューションが勝ちます。 テストケース [1,2] → [1,2] [2,1] → [1,2] [1,0,0] → [1,0,0] [0,0,-1] → [-1,0,0] [3,4,3] → [3,3,4] [-4,3,3] → [3,3,-4] [2,2,2,3] → [3,2,2,2] [3,2,2,2,1,2]→ [1,3,2,2,2,2]または[3,1,2,2,2,2] [-2,-2,-2,-1,-2,-3]→ [-1,-3,-2,-2,-2,-2,]または[-3,-1,-2,-2,-2,-2,] [] → []

30
コードポイントサムクイン
このサイトでのすべての馬の挑戦は、バイト数またはキャラクター自体に焦点を合わせています。これは違います。あなたの課題は、ソースのコードポイントの合計と同じコードポイントの合計を持つ出力を生成するプログラムを作成することです。 コードポイントの合計を生成するには: プログラムの文字セット内の文字の値を見つけます。 たとえばFOO、ASCIIの場合:F= 70、O= 79、O= 79 それらをすべて追加します。ASCIIの コードポイントの合計FOO:F+ O+ O= 70 + 79 + 79 = 228。 ASCII和クインの例は、ソースコードがABCあり、出力があった場合!!!!!!です。これは、ソースのASCII値の合計(A= 65、B= 66、C= 67、合計= 198)が、出力のASC​​II値の合計(!= 33、33 * 6 = 198)と同じであるためです。。BBBのように、有効な出力にもなりますcc。 ルール あなたのプログラムは、リバース、シャッフル、エラー、またはその他の「真の」クインであってはなりません。詳述するには:出力にソースと同じ文字がすべて含まれている場合、それは無効です。 プログラムでは、コンパイラ/インタープリターからのエラー/警告を出力として使用できません。 プログラムのソースは、出力と同じコードページを使用する必要があります。 あなたのプログラムは、このチャレンジよりも前に作成されたコードページを使用できます。 プログラムの出力には、改行とタブを除き、印刷できない文字(ASCII 0〜31、または127以上)を含めることはできません。 標準の抜け穴が適用されます。 ソースまたは出力に末尾の改行がある場合、コードポイントの合計に含める必要があります。 コンパイラフラグは、ソースのコードポイントの合計ではなく、最終バイトカウント(スコア)に含める必要があります。 出力/ソースは空ではないかもしれません。 得点 コードポイントの合計ではなく、バイトカウントの最短回答が勝ちます。このヘッダー形式の回答を使用してください: # Jelly, 12 bytes, sum 56 (SBCS) このツールを使用して、 ASCIIの合計を計算できます。 …
20 code-golf  quine 

5
コイン問題
バックグラウンド Golfenistanの架空の国の公式通貨はfooであり、流通しているコインは3種類、3 foo、7 foo、8 fooのみです。これらのコインを使用して、4 fooなどの特定の金額を支払うことは不可能であることがわかります。それでも、十分な量をすべて形成できます。あなたの仕事は、コインでは形成できない最大量(この場合は5 foo)を見つけることです。これはコイン問題として知られています。 入力 入力は、流通しているコインの価値を表す正の整数のリストです。次の2つのことが保証されています。L = [n1, n2, ..., nk] の要素のGCD Lは1です。 L 番号1は含まれません。 ソートされていないか、重複している可能性があります(特別版のコインを考えてください)。 出力 のGCD Lは1 なので、十分に大きい整数mはすべて、その要素の非負の線形結合として表現できます。言い換えれば、 m = a1*n1 + a2*n2 + ... + ak*nk 一部の整数の場合。出力は、この形式では表現できない最大の整数です。ヒントとして、およびが(reference)の最大要素と最小要素である場合、出力は常により小さいことが知られています。ai ≥ 0(n1 - 1)*(nk - 1)n1nkL ルール 完全なプログラムまたは関数を作成できます。最小のバイトカウントが優先され、標準の抜け穴は許可されません。あなたの言語がこのための組み込み操作を持っている場合、あなたはそれを使用してはいけません。回答を投稿する前にテストケースを評価できる必要があることを除いて、時間やメモリの効率に関する要件はありません。 このチャレンジを投稿した後、ユーザー@vihanはStack Overflowに完全な重複があることを指摘しました。このMetaディスカッションに基づいて、このチャレンジは重複として削除されません。ただし、SOバージョンの回答に基づくすべての回答は、オリジナルを引用し、コミュニティWikiのステータスを付与し、オリジナルの著者が回答をここに投稿したい場合は削除するようお願いします。 テストケース [3, 7, 8] -> 5 [25, …

7
ローリングクインダイス
自分自身を出力するプログラムを作成します。 ただし、ソースコードがn回繰り返される場合(ソースコードのコピーを末尾にn-1回連結することを意味します)、元のソースコードを出力する1 / nの確率、出力する1 / nの確率が必要ですソースコードは2回繰り返され、ソースコードを出力する1 / n確率は3回繰り返され、...、およびソースコードを出力する1 / n確率はn回繰り返されます。 たとえば、プログラムがの場合、foobar常に正確に出力する必要がありますfoobar。あなたが実行した場合しかし、foobarfoobarfoobarfoobar、そこに出力の各¼のチャンスである必要がありfoobar、foobarfoobar、foobarfoobarfoobarとfoobarfoobarfoobarfoobar。 各可能な出力の分布は等しくなければなりません 適用される標準のI / Oメソッドと禁止される標準の抜け穴に加えて、標準のクインルールが適用されます(独自のソースにアクセスできないなど) これはコードゴルフなので、バイト単位の最短回答が勝ちます

2
最大nのサイズの正方形を含む最小の長方形の領域を見つける
これは、OEISシーケンスA038666に適用される通常のタイプのシーケンス質問です。つまり、次のいずれかを実行します。 宇宙の熱死まで、入力をまったくまたはまったく受け入れず、A038666を出力します。 入力として正の整数を受け入れ、A038666の番目の項またはその最初の項を出力します。(インデックス付けの代わりにを使用する場合、もちろん入力時に出力する必要があります。)nnnnnn00011110 A038666 の番目の項は、インデックスを使用している場合、サイズが重複しない正方形を含む長方形の中で最小の領域です。nnn1 × 1 、2 × 2 、... 、N × N1×1,2×2,…n×n1\times1,2\times2,\dots n\times n111 例: サイズの非重複正方形含有することができる最小面積の矩形介して寸法有し:1 × 11×11\times14 × 44×44\times47 × 57×57\times5 4 4 4 4 3 3 3 4 4 4 4 3 3 3 4 4 4 4 3 3 3 4 4 4 4 2 …

12
Landauの関数を計算する
Landauの関数 (OEIS A000793)は、対称群要素の最大次数を与えます。ここで、置換順序は最小の正の整数、が恒等式であり、これは置換のサイクル分解におけるサイクルの長さの最小公倍数に等しくなります。たとえば、は、たとえば(1,2,3)(4,5,6,7)(8,9,10,11,12,13,14)によって達成されます。g(n )g(n)g(n)SnSnS_nππ\pikkkπkπk\pi^kg(14 )= 84g(14)=84g(14) = 84 したがって、はの最大値にも等しくここでは正の整数です。g(n )g(n)g(n)lcm(a1,…,ak)lcm⁡(a1、…、ak)\operatorname{lcm}(a_1, \ldots, a_k)a1+⋯+ak=na1+⋯+ak=na_1 + \cdots + a_k = na1,…,aka1、…、aka_1, \ldots, a_k 問題 Landauの関数を計算する関数またはプログラムを作成します。 入力 正の整数。nnn 出力 g(n)g(n)g(n)、対称グループ要素の最大次数。SnSnS_n 例 n g(n) 1 1 2 2 3 3 4 4 5 6 6 6 7 12 8 15 9 20 10 30 11 …

4
ボウルパイルの高さを計算する
ボウル杭高さ このパズルの目標は、ボウルの山の高さを計算することです。 ボウルは、厚さのない放射状に対称なデバイスとして定義されます。そのシルエット形状は偶数多項式です。スタックは、それぞれが偶数の多項式に関連付けられた半径のリストで記述され、係数のリストとして入力として与えられます(たとえば、リスト3.1 4.2は多項式表します)。3.1 x2+ 4.2 x43.1x2+4.2x43.1x^2+4.2x^4 多項式の次数は任意です。簡単にするために、パイルの高さは一番上のボウルの中心の高度として定義されます(例については例3のプロットを参照)。 テストケースの形式はradius:coeff1 coeff2 ...次のとおりです。各行はボウルの半径を表す浮動小数点数で始まり、コロンと、べき乗の係数を含むスペースで区切られたリストが続きます。 。たとえば、線2.3:3.1 4.2は半径のボウル2.3と形状多項式を示し3.1 * x^2 + 4.2 * x^4ます。 例1 42:3.141 単一のボウルには高さがないため、高さゼロのパイルを表します。 例2 1:1 2 1.2:5 1:3 高さの山を表し2.0ます(プロットを参照)。 例3 1:1.0 0.6:0.2 0.6:0.4 1.4:0.2 0.4:0 10 高さ0.8のパイルを示します(プロットの緑の矢印を参照)。 これはコードゴルフなので、最短のコードが勝ちます。 私が持っている参照コードを。 編集: リファレンス実装は、ライブラリを使用して多項式の根を計算します。あなたもそれを行うことができますが、する必要はありません。参照実装は(非常に良い)数値近似にすぎないため、一般的な浮動小数点の許容範囲内で正しい結果を生成するコードを受け入れます。 アイデアは重要です。小さなerrosがあるかどうかは気にしません。&lt; ε&lt;ε<\varepsilon このパズルのもう1つのバリエーションは、ボウルを並べ替えて高さを最小化することです。高速な解決策があるかどうかはわかりません(NPハードだと思います)。誰かがより良いアイデアを持っている場合(またはNP完全性を証明できる場合)、教えてください!

6
2つのリンクされたプログラムを使用して、最大nまでの序数を出力します
...序数(または序数)は、順番に位置またはランクを表す単語です。 ウィキペディアから。 タスクは、2つの異なるプログラム(そのうち2つの異なる言語から作成可能)を使用して、最初からの順序シーケンスを出力しnthます。secondではなく、完全な単語を出力し2ndます。 序数の課題は、特にこのエントリで以前に取り上げられました。この課題では、序数は、以下で詳述する固有の条件を促進するための手段にすぎません。 パート1 の入力が与えられたときに何かをn出力する必要があるプログラムを作成する必要があります。常に999以下の正のゼロ以外の整数になります。 n 有効な出力には次のものが含まれますが、これらに限定されません。 stdout/ stderr/などへの出力 ファイル/フォルダー/などの作成 あらゆる種類のグラフィカルインターフェイスまたは画像 何でもあり。 パート2 パート1のプログラムの出力を使用して、1(最初)から始まりn、パート1で解析されたものまでの順序数のシーケンスを出力するプログラムを作成する必要があります。 一般的な条件: パート2の合計バイトは、パート1の合計バイト(以下)を超えてはなりません。 出力条件: 大文字と小文字を区別しません。 出力には、順序シーケンス(a〜zの文字のみ)と空白(改行が許可されている)のみが含まれている必要があります。 実行中または実行後に表示される限り、任意のソースに出力できます。 出力が正しい限り、プログラムを終了する必要はありません。 出力には文法は必要ありませんが、オプションでそれを含めることができます(ハイフン、コンマ、「ands」など)。nine hundred ninety ninthはと同じくらい受け入れられnine hundred and ninety-ninthます。 サンプル出力 n8はどこですか FIRST SECOND THIRD FOURTH FIFTH SIXTH SEVENTH EIGHTH 得点 勝利条件の階層は次のとおりです。 パート1の最小バイト数 パート2の最小バイト数 Entry #1 | Part 1 = 32 …
19 code-golf 

15
展開と契約
入力として正の整数を取ります。スタートと繰り返し増加 10の最大の整数乗で、このようなことと。kkkn := 1n:=1n := 1nnn私私iI ≤ n個私≤ni \le nI + N ≤ K私+n≤ki + n \le k まで繰り返し、最初のと最後の両方を含むすべての中間値のリストを返します。n = kn=kn = knnn111kkk このプロセスの間、成長は最初は前者の不平等によって制限され、その後は後者によってのみ制限されます。成長は、初期の「拡張」期間の形をとる、その間であろうその間に「契約」期間が続くますます大きな力、増加された「ズームイン」するために、ますます小さい力だけ増加されます正しい番号で。nnnnnn テストケース 1 =&gt; [1] 10 =&gt; [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 321 =&gt; [1, 2, 3, 4, 5, 6, 7, 8, …

10
並べ替えられたサブセットに基づいてマスターリストを並べ替える
最近、職場で解決すべき問題がありました。マスターリストと、マスターリスト内のアイテムのサブセットが異なる順序で含まれている可能性がある2つのリストがありました。リストにないアイテムの順序を変更せず、可能な限り同じ場所にアイテムを保持することなく、サブセット内のアイテムが同じ順序で表示されるように、マスターリストを並べ替える必要がありました。さて、それはおそらく混乱を招くように聞こえるので、私はそれを分解します: マスターリストは、アイテムのデフォルトの順序を定義します。 サブセットリストは、特定のアイテムの相対的な順序を定義します。 マスターリストに2つの要素があり、サブセットリストに従って順序が狂っている場合、マスターリストの前の項目は、サブセットリスト内の他の項目に対して正しい位置にある最も早いインデックスに移動する必要があります。(つまり、後の項目の直後) あなたの仕事は、この並べ替えアルゴリズムを実装することです。 テストケースの例 Master: [1, 2, 3] Subset: [] Result: [1, 2, 3] Master: [9001, 42, 69, 1337, 420] Subset: [69] Result: [9001, 42, 69, 1337, 420] Master: [9001, 42, 69, 1337, 420, 99, 255] Subset: [69, 9001, 1337] Result: [42, 69, 9001, 1337, 420, 99, 255] …

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