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

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

7
キングペン!(ドットとボックス)
これはドットとボックス(別名、ペンザピッグ)のキングオブザヒルチャレンジです。ゲームは簡単です。あなたの番では、空のフェンスに線を引くだけです。正方形を完成するたびにポイントを獲得します。また、私たちはチャンピオンシップルールに従ってプレーしているため、自分のターンで少なくとも1つのスクエアを完了すると、追加のターンが得られます。これはラウンドロビントーナメントで、各ボットは9x9グリッドで12回、お互いのボットを2回プレイします。ChainCollectorが共同チャンピオンAsdfのミンチ肉を作る2つのヘビー級タイタンの間のこの試合をチェックしてください: ルール 移動ごとに0.5秒の制限時間。 他のボットと干渉しません。 ランダム性のためにPigPen.random()およびPigPen.random(int)を使用します。 ファイルへの書き込みはありません。 ボットとそのすべての永続データは、対戦相手が変わるたびにリセットされます(12ラウンドごと)。 ボット すべてのボットはPlayer.javaを拡張します。 package pigpen; public abstract class Player { public abstract int[] pick(Board board, int id, int round); } Board主にPenクラスへのアクセスを提供するゲームボードでありid、playerID(1番目または2番目の場合roundはあなたに伝えます)は、同じ対戦相手(1または2)に対してどのラウンドをプレイしているかを示します。戻り値はです。int[]最初の要素はpenID(1から始まる)で、2番目の要素はfenceID(0から始まる)です。Pen.pick(int)この戻り値を生成する簡単な方法を参照してください。プレーヤーとJavaDocの例については、Githubページを参照してください。正方形グリッドのみを使用しているため、六角形に関連する関数とフィールドは無視されます。 実行方法 Githubからソースをダウンロードします。 コントローラーボットを作成し(必ずを含めてくださいpackage pigpen.players)、src/フォルダーに入れます。 でコンパイルしjavac -cp src/* -d . src/*.javaます。実行java pigpen.Tournament 4 9 9 false(グリッドサイズを調整するために最後の2つの数値を変更できます。最後の変数はtrue、pp_recordソフトウェアを使用する場合にのみ設定する必要があります。) スコア チェーンコレクター:72 Asdf:57 レイジーボーン:51 フィニッシャー:36 = LinearPlayer:18 = …

9
基本的なラテン文字名から文字
基本に戻りましょう! 完全なプログラムまたは関数であるコードは、印刷可能なBasic Latinラテン文字の公式Unicode名を対応する文字に変換する必要があります。たとえば、入力の場合LOW LINE、コードはoutputを指定する必要があります_。 入力として使用する必要があるのは、単一の文字名のみです。 組み込みまたはその他の既存の関数またはライブラリを使用することはできません。これらの関数またはライブラリは、Unicode文字名(Python unicodedata、Java など)に特に関連するロジックを提供しますCharacter.getName。 これらの名前以外の入力の場合、任意の動作が受け入れられます。 これはコードゴルフです。バイト単位の最短コードが勝ちです。 あいまいさを避けるために、これは私たちが使用する公式キャラクター名の完全なセットです(この質問から借用しています): SPACE ! EXCLAMATION MARK " QUOTATION MARK # NUMBER SIGN $ DOLLAR SIGN % PERCENT SIGN & AMPERSAND ' APOSTROPHE ( LEFT PARENTHESIS ) RIGHT PARENTHESIS * ASTERISK + PLUS SIGN , COMMA - HYPHEN-MINUS . FULL STOP / …

30
コンセント
これはNCPC 2005の問題です。ロイには、コンセントが1つしかないアパートがありますが、電源タップがたくさんあります。所有する電源タップを使用して、所有できるコンセントの最大数を計算します。電源タップごとのコンセントの数は、入力として指定されます。 ストリップのアウトレットの数がそれぞれ p1,p2,…,pnp1,p2,…,pnp_1, p_2, \dots, p_n アウトレットの数は 、1−n+∑ipi1−n+∑ipi1 - n + \sum_i p_i または 1+p1−1+p2−1+⋯+pn−11+p1−1+p2−1+⋯+pn−11 + p_1-1 + p_2-1 + \dots + p_n-1。 プログラムまたは関数への入力は、空ではない一連の正の整数です。 例 2 3 4 > 7 2 4 6 > 10 1 1 1 1 1 1 1 1 > 1 100 1000 10000 > …

25
メビウス関数
メビウス関数 メビウス関数は重要な数論関数です。 提出は正の整数nを受け入れ、で評価されたメビウス関数の値を返す必要がありますn。 定義 メビウス関数μ(n)は次のように定義されます。 | 1 if n is squarefree and has an even number of distinct prime factors μ(n) = | -1 if n is squarefree and has an odd number of distinct prime factors | 0 otherwise nnの素因数分解の指数がすべて厳密に2よりも小さい場合、平方自由と呼ばれます。(または、2つの除算の累乗に対する素数はありませんn)。 テストケース ここで、μの最初の50個の値を確認できます。 ウィキペディアのパブリックドメイン画像 メビウス関数は、OEISのシーケンス番号A008683です。 これらは最初の77の値です: 1, -1, -1, 0, …

1
3つの相互のクイン
タスク この課題では、あなたの仕事は、一種の相互に似たシステムを形成する3つのプログラムを作成することです。プログラムを呼ぶことにしましょうA、BとC。プログラムの1つに別のプログラムのソースが入力として与えられた場合、3番目のプログラムのソースを出力します。たとえば、AがB入力として与えられた場合、を出力しますC。プログラムは、入力として、独自のソースを与えている場合は、出力3つの文字列はなら"three"、"mutual"と、"quines"(引用符なし)。いずれの場合でも、1つの追加の末尾の改行を出力できます。他の入力については、プログラムはクラッシュを含め、何でもできます。 例 例えば、のソースコードを仮定しA、BそしてCありaSdf、ghJkそしてzxcV。その後、プログラムは次のように動作するはずです。 Source Input Output -------------------- aSdf aSdf three aSdf ghJk zxcV aSdf zxcV ghJk ghJk aSdf zxcV ghJk ghJk mutual ghJk zxcV aSdf zxcV aSdf ghJk zxcV ghJk aSdf zxcV zxcV quines ルールとスコアリング ソリューションA、BおよびCは、機能または完全なプログラムのいずれかですが、完全に独立している必要があります。共有コードは許可されません。 標準の抜け穴とクインルールが適用されるため、プログラムは独自のソースコードにアクセスできません。 あなたのスコアはの組み合わせバイト数でA、BかつC、低いスコアは良くあること。
23 code-golf  quine 

30
数値を16進数に変換します
チャレンジ これは簡単なものです。 入力として基数10の数値が指定されたときに関数またはプログラムを作成すると、その数値の値が16進数で返されるか出力されます。 例 15 -> F 1000 -> 3E8 256 -> 100 ルール 組み込みの16進関数は一切ありません 文字は小文字でも大文字でもかまいません あなたは非負の整数だけを心配する必要があり、負の数や厄介な小数はありません 言語のデフォルトタイプの制限までの任意の大きな数で動作するはずです。 改行は必須ではありません いつものように、これはcode-golfなので、バイト単位で測定された最短コードが勝ちです!

2
配管のランダムパス
width w、height h、およびstep countの3つの整数を受け取るプログラムまたは関数を作成しますs。あなたは、非自己交差描画されるランダムウォーク sに長いステップを5*wすることにより5*h、すべての5により画素セルが空にされるか(ピュアベージュ)、またはこれらの12の簡単な「パイプ」の1ピクセルの画像: 上の画像は詳細を示すために拡大されています。実際のサイズのパイプは次のとおりです。 (灰色の線は、パイプタイプを区別するためのものです。) ランダムウォークは、1つのパイプエンドポイント(下から4つのパイプタイプの1つ)で始まり、別のパイプエンドポイントで終わる単一の連続パイプパスになります。 空で開始wすることによりh、グリッドとランダム開始点であることを一つのセルを選択してください。次に、開始する4つの方向のいずれかをランダムに選択し、対応するパイプエンドポイントを描画します。この開始セルは、ウォークの最初のステップをマークし、新しいセルを描画するか、既存のセルを上書きするたびに、別のステップとしてカウントされます。 ここで、選択された方向が有効な場合、適切なパイプセルを描画して、繰り返しランダムに右、左、または直線に進むことを選択します。完全なsステップパスが形成されるまで方向が有効でない場合は、バックトラックして再選択します。パスは、パイプエンドポイントで終了する必要があります。パイプエンドポイントは、パスがたどった経路に応じて、グリッド上のどこかにある場合があります。 2つの直線パイプセルのみを上書きでき、反対方向の直線パイプセルによってのみ上書きできることに注意してください。結果は交差セルになります。それ以外の場合は、すべてのパイプを空のセルに配置する必要があります。 交差点が描画されるとき、開始セルからさらに遠いパスの部分が一番上に描画されます。 グリッドに周期的境界条件(PBC)があるかどうか、つまり、グリッドの片側から出るパイプが反対側に出るかどうかはあなた次第です。PBCがない場合、グリッドの境界は、他のパイプと同様に遭遇する可能性のある障壁としてカウントされます。 特殊なケース s0の場合、パイプは描画されず、出力はイメージごとに空白5*wになり5*hます(つまり、すべてベージュ)。 場合s1つの管スタブであります (実寸:) ランダムに選択された開始セルに描画する必要があります。 その他の詳細 あなたはそれsがせいぜいw*hパスであると仮定するかもしれません。(ただし、交差点により長いパスが可能です。) wそしてh常にポジティブです。 すべてのランダムな選択は、一様にランダムでなければなりません。たとえば、問題が簡単になったとしても、可能であれば交差点を作成することを避けるべきではありません。疑似乱数ジェネレーターが許可されています。 黒、青、ベージュの代わりに、視覚的に異なる3色を使用できます。 彼らは実際にあるように、あなたの出力画像が拡大される5*w*kことにより、5*h*k画素のk正の整数です。(あなたkが1 歳であっても、投稿するサンプルを拡大することをお勧めします。) 一般的なロスレス画像ファイル形式を使用でき、画像をファイルに保存したり、表示したり、生のまま標準出力に吐き出したりできます。 バイト単位の最短コードが優先されます。 例 (すべて500%拡大)。 入力がw=2, h=1, s=0その場合、出力は常に次のようになります。 入力がw=2, h=1, s=1その場合、出力はこれらの画像のいずれかであり、同じチャンスがあります。 入力がw=2, h=1, s=2次の場合、出力は または多分 グリッドにPBCがあると想定されている場合。 (このようにパスを開始すると、2番目のステップが不可能になることに注意してください。) w=3, h=2, s=6PBCを想定した、の可能な出力を次に示します。 w=3, h=3, s=9PBCを想定した場合の可能な出力は次のとおりです。 交差点が2つのステップとしてカウントされるため、パスがすべてのセルをカバーする必要がないことに注意してください。また、交差点の陸橋は後で描かれている必要があるため、コーナーの端点が開始セルであると推定できます。したがって、行われたランダムな選択のシーケンスを推測できます。 start at …

5
正方形から六角形へのシームレスな変換
グリッドでプレイされる多くのゲームでは、六角形がClearly Superior Choice™です。残念ながら、多くの無料ゲームアートサイトには、正方形のマップ用のシームレスなタイルセットしかありません。過去のプロジェクトで、これらのいくつかを使用して、手動で六角形に変換しました。 しかし、私は老後は怠け者になりました。小さなスクリプトでプロセスを簡単に自動化できるはずです。 しかし、私は老後は怠け者になりました。だから私はあなたにそれをアウトソーシングし、コードゴルフチャレンジ1としてそれを偽装しています。 入力 入力は、24ビットRGBカラーが可能な一般的な画像形式の正方形の画像です。画像データ自体の代わりに、入力としてファイル名を使用することもできます。 画像が正方形で、辺の長さが4の倍数であると仮定できます。 出力 出力は入力タイルですが、六角形に変換されます(画像自体は透明な領域のある正方形になります)。ファイルに保存したり、画面に表示したりできます。 繰り返しになりますが、一般的な画像形式ならどれでもかまいません。使用している形式が透明度をサポートしている場合、背景領域は透明でなければなりません。そうでない場合は、代役として色#FF00FF(恐ろしいフクシアの1つ)を使用できます。 方法 それではどうすればいいのでしょうか?私が2つ使用する方法は、画像を少し垂直に押しつぶしますが、全体的にはほとんどの場合にかなり良く見えます。この入力画像を使用して例を示します。 拡大縮小:画像を3:2の比率に拡大縮小します。画像は正方形になるため、幅75%、高さ50%に拡大縮小するだけです。入力例は200x200なので、この150x100の画像になります。 タイル:スケーリングされた画像のコピーを2x2グリッドに配置します。 切り抜き:この2x2グリッドの任意の場所から適切なサイズの六角形を取得します。さて、タイリングを簡単にするために、この六角形は厳密には規則的ではありません。元のサイズの正方形(ここでは200x200)をトリミングした後、コーナーをトリミングします。切り取り線は、(おおよそ)左右の各辺の中央から上/下の端から4分の1の位置まで伸びる必要があります。 それがあなたの出力です! 以下は、タイル表示されたときの外観の例です(ここで拡大表示されています)。 これはコードゴルフであるため、バイト単位の最短コードが優先されます。標準的な抜け穴などが適用されます。 1これを信じても信じなくても構いません。 2 この役立つサイトの方法1 。

20
Nスラブスラッシュケーキ
正の整数Nを取り込むプログラムまたは関数を作成します。 Nが1の場合、出力 /\ \/ Nが2の場合、出力 /\/\ \/ / / / \/ Nが3の場合、出力 /\/\/\ \/ / / / / / \/ / / / \/ Nが4の場合、出力 /\/\/\/\ \/ / / / / / / / \/ / / / / / \/ / / / \/ より大きなNの場合、パターンは継続し、Nがインクリメントされるたびに新しいレイヤーが追加されます。 「出力」は、スラッシュパターンを印刷するか、文字列として返すことを意味します。 出力では単一の末尾の改行が許可されます。 出力の末尾のスペースは許可されますが、先頭のスペースは許可されません。 バイト単位の最短コードが優先されます。

5
ChevronsをSolidusesに変換する
スペース、改行、山かっこのみを含む文字列を取り込むプログラムを作成します:<、>(chevrons)。出力スペース、改行、およびスラッシュの列:/、\(soliduses形状入力に対応する)が、元の入力の各列の間に挿入されたスペースの列と、4分の1回転時計回りに回転(美学のために)。 たとえば、入力が次の場合: <> 出力は次のようになります。 /\ \/ 入力がこれである場合: ><<<> <>< 出力は次のようになります。 \/ /\ /\ \/ /\ /\ /\ \/ 入力がこれである場合: >> << <> <> < >< 出力は次のようになります。 /\ \/ \/ \/ \/ /\ /\ /\ /\ \/ /\ 最後の2つの例の元の入力行の間にスペースの単一の列があることに注意してください。 入力を通常の方法(コマンドライン、stdin)で取得して出力を出力する完全なプログラムを作成するか、出力を出力または返す文字列引数を使用して関数を作成します。 入力の空白の先頭および末尾の空の行または列は、出力に存在する必要はありません。さらに、結果の形状が正しい限り、出力の任意の場所に任意の量の先頭および/または末尾のスペースおよび/または改行が存在する可能性があります。言い換えると、アスキーアートの翻訳は問題ではなく、形状とそれらの相互関係だけが重要です。 オプションで、入力の末尾に改行があると想定することもできます。 バイト単位の最短コードが優先されます。

10
* Overwrit * labels
本当に密集したプロットにラベルを追加しようとしたことがある場合、ラベルが互いに重なり合って読みにくくなることがあります。同様のことを1Dで行います。 入力は(label, x-coordinate)ペアのシーケンスになり、出力は各ポイントとラベルを所定の順序で描画した結果になります。*ポイントを表すアスタリスクは、指定されたx座標に配置され、ラベルが続く必要があります。既存の文字はすべて上書きされます。 たとえば、入力が Hello 0 World 8 Fizz 3 Buzz 5 PPCG 16 X 9 その後、次のことが起こります。 *Hello *Hello *World *He*Fizz*World *He*F*Buzzorld *He*F*Buzzorld *PPCG *He*F*Buz*Xrld *PPCG 最後の行が出力されます。 I / Oルール 入力は、任意の数のペアで構成できます。各ラベルは大文字と小文字のみで構成され、ラベルの長さは最大で127文字です。各x座標は0から127の間です。 入力は、ペアが明確であり、ラベル/ x座標が入力内で交互になるように、任意の便利なリストまたは文字列形式にすることができます。たとえば、[("Hello", 0), ("World", 8) ...]またはのような形式[0 "Hello" 8 "World" ...]は問題ありません。ただし、ラベルとx座標の2つの別個のリストを想定することはできません。 機能と完全なプログラムはどちらも大丈夫です。 ラベルで覆われていないスポットはスペースで表す必要があります。ただし、単一のオプションの末尾の改行を除いて、余分な先頭または末尾の空白はない場合があります。 例 入力: OneLabel 10 出力: *OneLabel 入力: …
23 code-golf  string 

18
シンプルな印刷矢印
ゴルフの練習のために、私は私のガールフレンドのPython入門クラスで課題を行っています。この割り当てには、文字数が非常に近い複数の戦略があり、ここの人々はさらに良い方法を見つけることができると確信しています。私はPythonでこれを行う方法に最も興味がありますが、このプログラムが得ることができる最もゴルフを知りたいので、これはコードゴルフであり、最短回答が勝ちます。 ルール: 割り当ての概要は以下のとおりです。ユーザーは2回入力するように求められる必要がありますが、プロンプトは何も言わなくてもよく、別の順序でもかまいません。 標準の抜け穴が適用されます。 課題3:矢印 ユーザーに複数の列の入力を求めるプログラムを作成すると、次のようにパターンが印刷されます。ユーザーが正数を提供すると想定できます。プログラムは、左矢印と右矢印の両方を処理する必要があります。以下にいくつかのサンプルランニングを示します。 How many columns? 3 Direction? (l)eft or (r)ight: r * * * * * How many columns? 5 Direction? (l)eft or (r)ight: l * * * * * * * * *

30
チェス盤を作る
これをPHPチャレンジで見ました。目的は、最小限のコードで64マス(8 * 8)のチェス盤を作成することです。簡単なことですが、私は356バイトでPHPで作成しました(印象的ではありませんが、私は知っています)。これは、バニラを保持する限り、選択した言語で作成できるため、インポートはできません。最小のバイトカウントが優先されます。 出力は次のようになります。 そして私のコード: <table><?php $c='black';function p($c,$n){echo'<td style="width:50px;height:50px;background:'.$c.'"></td>';if($n==1){echo"<tr>";}}for($i=1;$i<=64;$i++){if($i%8==0&&$c=="black"){$c="white";$n=1;}elseif($i%8==0&&$c=="white"){$c="black";$n=1;}elseif(isset($n)&&$n==1){$n=0;}elseif($c=="black"){$n=0;$c="white";}elseif($c=="white"){$n=0;$c="black";}p($c,$n);} または読み取り可能: <table><tr> <?php $color = 'black'; function printcolor($color, $nl) { echo '<td style="width:50px; height:50px; background:' . $color . '"></td>'; if ($nl == true) { echo "</tr><tr>"; } } for ($i=1; $i<=64;$i++) { if ($i % 8 == 0 && $color == …


23
州および首都
入力として文字列を指定すると、州都の場合は首都である米国の州、州の場合は州の首都、またはArstotzkaどちらでもない場合は州の首都が出力されます。 例: Austin -> Texas Alaska -> Juneau The Nineteenth Byte -> Arstotzka すべての首都とそれぞれの州: Baton Rouge, Louisiana Indianapolis, Indiana Columbus, Ohio Montgomery, Alabama Helena, Montana Denver, Colorado Boise, Idaho Austin, Texas Boston, Massachusetts Albany, New York Tallahassee, Florida Santa Fe, New Mexico Nashville, Tennessee Trenton, New Jersey Jefferson, Missouri Richmond, …

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