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

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

3
ゼロからソリッドPNGを出力する
入力:RGBA 16進数の色c(例FFFF00FF)と0以上1000以下の整数n(例200)。 出力:PNGファイルの未加工バイト。出力がファイルに保存され、イメージビューアーで開かれると、色で塗りつぶされたnby nイメージcが表示されます。 仕様:プログラムは正確に出力する必要があります: PNGヘッダー(89504E470D0A1A0A16進数) IHDRこれらの仕様を含むチャンク: 幅:前の入力 n 高さ:前の入力 n ビット深度:8(RGBA) カラータイプ:(6アルファ付きトゥルーカラー) 圧縮方法: 0 フィルター方法: 0 インターレース方式: 0 IDAT画像データ(以前に入力された色のベタ画像c)を含む1つ以上のチャンク。圧縮または非圧縮の場合があります IEND画像終了チャンク 詳細は、ウィキペディア、W3サイト、またはGoogle検索で入手できます。 制限事項: いかなる種類の画像でも動作するように設計された画像ライブラリまたは関数を使用することはできません。 プログラムは3分以内に実行され、すべての入力に対して10 MB未満のファイルを出力する必要があります(健全性チェック)。 これはcode-golfなので、バイト単位の最短コードが勝ちます!

2
Xが3より大きく、XとYの間に少なくとも2つの差がある
私はいくつかのC ++をゴルフしようとしています。この条件を短くすることは可能ですか? X > 3 & X - Y > 1 (もちろん、空白の削除は別として。) だから、X少なくともです4がX >= Y + 2。 XおよびYは、[0,5]間隔の整数です。 ビット単位の数式を見つけようとしましたが、失敗しました。
11 code-golf  number  tips  c++  code-golf  popularity-contest  obfuscation  code-golf  c  code-golf  board-game  hexagonal-grid  code-golf  game  grid  code-golf  number  permutations  popularity-contest  math  graphical-output  number-theory  king-of-the-hill  code-challenge  compression  code-challenge  fastest-code  code-golf  math  ascii-art  animation  code-golf  popularity-contest  generation  counting  fastest-code  fastest-code  popularity-contest  image-processing  king-of-the-hill  code-golf  conversion  binary-tree  code-golf  math  number  rational-numbers  division  code-golf  restricted-source  hashing  atomic-code-golf  logic-gates  code-golf  function  code-challenge  puzzle-solver  ai-player  test-battery  popularity-contest  music  compression  code-golf  number  stack  atomic-code-golf  logic-gates  ascii-art  popularity-contest  code-golf  date  grid  code-challenge  game  code-golf  parsing  code-golf  math  geometry  sequence  popularity-contest  code-trolling  code-golf  string  restricted-source  code-golf  quine  king-of-the-hill  code-golf  math  code-golf  simulation  code-golf  ascii-art  code-challenge  sorting  optimization 

5
アルゴリズム編組-母の日
仕事: あなたの仕事は、多くのストランドと三つ編みの反復回数が与えられると、各ストランドがどこに行くかを伝えるプログラムを作成することです。ルールは次のとおりです。 ストランドの数は常に奇数で、3〜6000(両端を含む)の間です。 開始すると、ストランドは2つの(ほぼ)等しいバンチ、leftおよびに分割されrightます。leftあなたが起動したときにもう一本鎖を持つことになります。 入力が7の場合: / / / / \ \ \ 1 2 3 4 5 6 7 繰り返しごとに、より多くのストランドを持つ側の最も外側のストランドが反対方向に面する中央に配置されます。中心は、向かい合うストランドの間として定義されます////middle\\\。 入力7の1回の繰り返し(ストランド1は中央に移動しました): / / / \ \ \ \ 2 3 4 1 5 6 7 例: 入力: 3 4 計算: 1 2 3 \ 2 1 3 / 2 3 …
11 code-golf 

2
NAND論理ゲートを使用してビットカウントコンパレーターを構築する
ビットカウントコンパレータ(BCC)は、計数入力のいくつかの数をとる論理回路であり、A1, A2, A3, ..., An入力と同様にB1, B2, B4, B8, ...番号を表します。それ次いで戻る1の総数場合Aである入力番号によりバイナリで表さより大きいB(例えば、入力B1、B2およびB8数になるだろう11)、そして0そうでありません。 例えば、かかるビットカウントコンパレータの5入力を、そのA2、A4、A5、とB2に設定され1、戻ります13つのがあるためAである入力がよりも大きい、2(数のみによって表さB2です)。 あなたの仕事は、2入力NANDゲートのみを使用し、できるだけ少ないNANDゲートを使用して、合計16 A入力と4 B入力(から1までのビットを表す8)を取るビットカウントコンパレータを作成することです。物事を単純化するために、ダイアグラムでAND、OR、NOT、およびXORゲートを使用し、以下の対応するスコアを使用できます。 NOT: 1 AND: 2 OR: 3 XOR: 4 これらの各スコアは、対応するゲートを構築するために必要なNANDゲートの数に対応しています。 正しい構造を生成するために最少のNANDゲートを使用する論理回路が勝ちます。

13
ポイントフリーのルックアンドセイシーケンス
あなたは、入力として整数を取り、その番号が最初に何を見て、言うシーケンスであったかを出力するプログラムを作ります。 例えば: $ ./LAS 8 [1,11,21,1211,111221,312211,13112221,1113213211] ユーザーがシーケンスの異なる番号を明確に見ることができる限り、リストを出力する正確な方法は重要ではありません。しかし、ここにキャッチがあります。ユーザー定義変数を使用することはできません。 例えば: スコープ変数を含む変数はありません。 関数がある場合、名前を持つことはできません。(例外として、あなたの言語がメインの機能または同様の機能を必要とする場合、その機能を使用できます。) 関数がある場合、名前付き引数を持つことはできません。 また、look and sayシーケンスに関連する特定の機能を備えたライブラリを使用することはできません。また、ネットワークにアクセスしたり、プログラムにファイルを提供したりすることはできません(ただし、独自に生成および使用できます)。これはコードゴルフです。文字の最短コードが勝ちます!

14
CでのGolfed + Fastソート
[ 最新の更新:ベンチマークプログラムと暫定版が利用可能、以下を参照] そこで、古典的なアプリケーションであるソートを使用して、速度と複雑さのトレードオフをテストしたいと思います。 浮動小数点数の配列を昇順で並べ替えるANSI C関数を記述します。 あなたは使用することはできません任意のライブラリ、システムコール、マルチスレッドまたはインラインASMを。 エントリは、コード長とパフォーマンスの2つのコンポーネントで判断されます。スコアは次のとおりです。エントリは、長さ(空白なしの#charactersのログなので、フォーマットを維持できます)およびパフォーマンス(ベンチマークの#secondsのログ)、および各間隔[best、worst]に線形に正規化されます0,1]。プログラムの合計スコアは、2つの正規化されたスコアの平均になります。最低スコアが勝ちます。ユーザーごとに1つのエントリ。 ソートは(最終的に)適切に行われる必要があります(つまり、入力配列には戻り時にソートされた値が含まれる必要があります)。名前を含む次の署名を使用する必要があります。 void sort(float* v, int n) { } カウントされる文字:sort関数に含まれる文字、署名が含まれ、それに呼び出される追加の関数(ただし、テストコードは含まれません)。 プログラムはfloat、長さ> = 0、最大2 ^ 20の任意の数値と配列を処理する必要があります。 sortテストプログラムにプラグインとその依存関係をプラグインし、GCCでコンパイルします(派手なオプションはありません)。たくさんの配列をそこに入れて、結果の正確さと合計実行時間を確認します。テストは、Ubuntu 13のIntel Core i7 740QM(Clarksfield)で実行されます。 アレイの長さは、許容される範囲全体に渡り、短いアレイの密度が高くなります。値はランダムで、ファットテール分布(正と負の両方の範囲)になります。重複した要素はいくつかのテストに含まれます。 テストプログラムはこちらから入手できます。https : //gist.github.com/anonymous/82386fa028f6534af263 提出物をとしてインポートしuser.cます。TEST_COUNT実際のベンチマークのテストケースの数()は3000です。質問のコメントでフィードバックを提供してください。 締め切り:3週間(2014年4月7日、16:00 GMT)。2週間後にベンチマークを掲載します。 競合他社にコードを渡さないように、締め切り近くに投稿することをお勧めします。 ベンチマーク発行時点での予備結果: いくつかの結果があります。最後の列は、スコアをパーセンテージで示しており、高いほど良いので、ジョニーケージが1位になります。他のアルゴリズムよりも桁違いに遅いアルゴリズムをテストのサブセットで実行し、時間を推定しました。Cのものqsortは比較のために含まれています(ジョニーの方が高速です!)。終了時に最終比較を行います。

20
整数が指定された基数(基数)の回文であるかどうかを判別
stdinから2つの整数を読み取るプログラムを作成します。それぞれの改行は終了し、以降は「number」および「radix」と呼ばれます。 数がその基数での回文である場合(例えば、あなたが望む任意の固定メッセージを出力しtrue、t、1) 数はその基数(例えばで回文ではない場合、あなたが望む任意の異なる固定メッセージを印刷しfalse、f、0、など) これらのメッセージは実行ごとに同じである必要がありますが、メッセージの内容(ゴルフに最適なもの)に関するルールはありません。 入力が有効な2つの正の整数であると仮定できます。「数」は超えません2147483647、「基数」は超えません32767。 外部リソースを使用することはできませんが、言語にデフォルトで含まれている任意の数学関数を使用できます。 注: 基数は、数値の基数にすぎません。 サンプルの実行: 16 10 false 16 3 true 16 20 true 121 10 true 5 5 false 12346 12345 true 16781313 64 true 16781313 16 true

23
加算と減算のみを使用して、xまでのすべての平方を計算します
目標はx、加算と減算を使用して、すべての平方を計算することです。 ルール: コードは、生成する正方形の総数を取得し、それらすべての正方形を含む配列を返す関数でなければなりません。 文字列、構造、乗算、除算、または組み込み関数を使用して平方を計算することはできません。 配列、整数(整数)、加算、減算のみを使用できます。他のオペレーターは許可されていません! これはコードゴルフの質問なので、バイト単位の最短コードが勝ちです!
11 code-golf  math  number 

5
モンティホール問題の実行
モンティホール問題のシミュレーションについてはすでに質問があります。これは違います。ユーザーがします遊ぶモンティ・ホール問題を。プログラムがホストの役割を果たします。モンティボット、あなたが好きなら。 手順は次のとおりです。 3つのドアのどれが賞品を隠すかを(ランダムに)選択します。 3つのドアの視覚表示を出力します。簡単ABCにできます。または3つの正方形。または何でも。 ドアの1つを選択する入力を受け取ります。これは、選択したドアをマウスでクリックするか、1文字の入力(B)などです。 別のドアを開きます。選択したドアを開けません。メインプライズを隠すドアを開けないでください。それはありますが、選択肢がないわけか、それはありますが、2の選択肢を持っていることを意味します。2つの選択肢がある場合は、ランダムに1つ選んでください。ドアが開かれ、その背後に賞品が隠されていないことを視覚的に示します。プログラムのテキストベースの入力/出力の場合、これはoutputのように単純でAB0、ドアCが開かれたことを示します。もっと独創的になってください。GUIプログラムを実行している場合、表示の選択はユーザー次第です。 ユーザーからの入力を受け入れます。ユーザーは、入力するstickかswitch(または、GUIプログラムの場合はボタンをクリックするか、選択入力を使用するなど)できます。利用者は以外を入力した場合stickやswitch、実装が定義されていません。好きなことをしてください。 テキストYou won!またはを出力しますYou lost。 プログラムを終了します。 ルール: ランダムに何かを選択する必要がある場合、暗号のランダム性について心配しないでください。どのrand()機能でも実行できます。 プログラムはチートしてはなりません。賞品はゲーム開始前に設定されている必要があります。つまり、手順は指定された順序で実行する必要があるということです。まず、背後にある賞品を隠すドアを選択し、次にプレイヤーに選択を求めます。ステップ4で開くドアの選択は、ステップ4で行う必要があります。事前に選択されていません。 ステップ6の出力は正直でなければなりません。 これはコードゴルフです。最短のコードが優先されます。
11 code-golf 

5
オイラーのフロント9
プロジェクトオイラーは、競争する(よく、遊ぶ)ためのもう1つの楽しいプログラミングチャレンジサイトです。初期の問題は穏やかに始まりますが、最初の100を超える難易度で爆発します。最初のいくつかの問題には、素数、倍数、因子を見つけることの間に共通性があるため、興味深いコードのマイクロ再利用の機会があります。 したがって、先験的な知識を使用せずに、最初の9つの問題を解決するプログラムを作成します。 問題は、呼び出し時の引数または実行中の標準入力を介して、ASCII '1'から '9'を含むユーザーによって選択されます。(すべての回答を計算できますが、表示できるのは1つだけです。) 正解は、ASCIIを使用して、基数10の新しい行に印刷する必要があります。 プログラムは1分以内に実行する必要があります(PEの提案)。 「事前知識なし」とは、外部リソースなしであなたのコードが答えを導き出さなければならないことを意味します‡。このようなプログラムは無効と見なされます(そうでない場合は、タイプミスをしないと仮定します)。 print[233168,4613732,6857,906609,232792560,25164150,104743,40824,31875000][input()-1] ‡問題#8(1000桁の数字を含む)の場合、外部ファイルから数字を読み取り、保存方法(バイナリ、テキスト、ヘッダー、インポートされたモジュールなど)を指定するか、回答投稿に含めるか(またはその両方)メインプログラムの長さにはカウントされません)。 スコアはバイト単位です。 15ユニコーンポイント™は、2週間後にバイトカウントリーダーに授与されました。
11 code-golf  math 

1
「マッチ3」ゲームですぐに最高の動きを見つける
今日の課題は、次のような入力を行うことです。 fbcfbee ffcabbe debceec bccabbe edcfbcd daeaafc eebcbeb そして、出力のように(資本金に注意し、三個の以上の文字にマッチします宝石をちりばめたようなゲームで可能な限り最高の動きBとC)を: fbcfbee ffcabbe deBCeec bccabbe edcfbcd daeaafc eebcbeb 完全な仕様: 入力は、それぞれ小文字のn行ですn(n任意の数字を使用できます)。 出力は、マッチ3ゲームで行うことができる最高の動きになり、スワップしたい2文字を大文字にします。 一致には次の優先順位が必要です(これらの例で.は、重要でない正方形を示します)。 五行 xxYxx ..X.. 壊れた五行 X.. Yxx x.. x.. または .X. xYx .x. .x. 四列 xYxx .X.. 三列 xYx .X. 最も高い優先度の一致を見つけて出力する必要があります。 同じ優先度の一致が複数ある場合は、それらのいずれかを出力できます。 常に少なくとも1つの一致が存在します(一致しない場合、または必要な操作を行うとプログラムが中断する可能性があります)。 I / Oは、任意の妥当な形式(stdin / out、ファイルの読み取りと書き込み、関数の引数/戻り値、ダイアログボックスなど)にすることができますが、ハードコードされていません(などx="[insert input here]")。 これはコードゴルフなので、バイト単位の最短コードが優先されます。何らかの理由でネットワークアクセスを使用すると、ネットワークからダウンロードされたすべてのバイトがスコアにカウントされます。
11 code-golf  game 

4
決定論的なGo AIを構築する
先日考えた興味深い問題があります。それは、コードが持っているプロパティだけでなく、他のコードとゲームをプレイすることによって、他のコードと競合するコードを含んでいます。 あなたのタスクは、Goボードの現在の状態を取得し、実行または通過する動きを決定するプログラムを構築することです。 プログラムは、入力として次を受け入れます。 19行。各行に19文字があり、現在Goボード上にあるピースを表します。の文字は0、空の正方形を表し、1黒で、2白です。 各プレイヤーが持っている囚人の駒の数を表す2つの数字(黒、次に白)。 移動する順番を表す1つの数字(黒または白)。上記のように、1黒であり、2白です。 次のいずれかを出力します。 a b移動する座標を表す座標のペア。1 1は左上の正方形で、最初と2番目の数字はそれぞれ下と右への移動を表します。 pass渡す動きを表す文字列。 たとえば、プログラムは次の入力を受け取る場合があります。 0000000000000000000 0000000000000000000 0000000000000000000 0001000000000002000 0000000000000000000 0000000000000000000 0001210000000000000 0000100000000000000 0000000000000000000 0000000000000000000 0000000000000000000 0000000000000000000 0000000000000000000 0000000000000000000 0000000000000000000 0002000000000001000 0000000000000000000 0000000000000000000 0000000000000000000 0 0 1 これは、わずかな動きしかプレイされていないゲームを表します。 次に、プログラムはを出力します6 5。これは、「上から6番目、左から5番目のポイントに黒い石を置く」ことを意味します。これは、で白い石をキャプチャし7 5ます。ボードの状態は次のように変わります。 0000000000000000000 0000000000000000000 0000000000000000000 0001000000000002000 0000000000000000000 0000100000000000000 0001010000000000000 0000100000000000000 0000000000000000000 0000000000000000000 0000000000000000000 0000000000000000000 …

6
ダーツとCodegolfの出会い
私は誰もがダーツに精通していると思う、何人かの人々はスコアを理解していないので、ここのそれらの人々にとってはそれに関する有用なリンクです。 ボード ダーツボードは、20個に分割されたパイと比較できます。各ピースは4つのセクションに分かれています。 ダブルと呼ばれる小さな外輪(ポイントx2) シングルと呼ばれる大きなリング(ポイントx1) トリプルと呼ばれる別の小さなリング(ポイントx3) シングルと呼ばれる別の大きなリング(ポイントx1) ボードの中央にはさらに2つのリング、緑と赤のリングがあります(クラシックボード) 赤いリング、ブルズアイまたはダブルブルと呼ばれるボードの中央にあり、50ポイントに適しています。これはダブルとしてカウントされ、そのためチェックアウトが許可されています。 ブル、シングルブル、または単に25と呼ばれるグリーンリングは、シングルとしてカウントされます。 チャレンジ 3ダーツ以下ですべてのチェックアウトの可能性を見つけます。 ユーザーは整数を入力でき、3ダーツ(またはそれ以下)でスコアを0にできるかどうかを確認する必要があります。 例 例1: Input: 170 Output: T20, T20, Bullseye 例2: Input: 6 Output: D3; S3,S1,D1; S2,D2; S2,S2,D1; D2,D1; S4,D1; D1,D1,D1; S1,S1,D2; T1,S1,D1; 例3: Input: 169 Output: No possible checkout! ルール 基本的なダーツルール、ダブル(ボードの外輪またはブルズアイ)で終わる必要があります 外部リソースを使用しません。 可能なチェックアウトのハードコーディングは許可されますが、これはcodegolfであることを忘れないでください。コードを短くすることはできません;) ヒットするセルは、C + Nの形式で表示されます。C= Tはトリプル、Dはダブル、Sはシングルです。 ブルズアイは、ブルズアイまたはDB、DBullまたは類似したものと呼ばれます。 …
11 code-golf 

4
画像から2014年の数字を生成する
では2014年の挑戦、マイケル・スターンは、解析するためにOCRを使用することを提案している私は別の方向にこの挑戦を取るしたいと思います2014年に。選択した言語/標準ライブラリの組み込みOCRを使用して、ASCII文字列「2014」に解析される最小のイメージ(バイト単位)を設計します。 Sternの元の画像は7357バイトですが、少し手間をかけると980バイトに可逆圧縮できます。白黒バージョン(181バイト)も同じコードで機能することは間違いありません。 ルール:各回答では、画像、バイト単位のサイズ、および画像の処理に必要なコードを提供する必要があります。明らかな理由により、カスタムOCRは許可されません...!妥当な言語と画像形式が許可されます。 編集:コメントに応じて、既存のライブラリ、またはOCRが利用できない言語のhttp://www.free-ocr.com/を含むようにこれを拡大します。

7
コードゴルフ:ディレクトリツリー->ツリー
コンテスト(!):選択した言語で、指定されたディレクトリのディレクトリツリーを走査し、それに対応するツリー(配列の配列)を出力するプログラムを作成します。ディレクトリが事前定義された変数Dであると仮定します。最小の文字数が優先されます。 ルール: 再帰を使用する必要があります ルールを見る 注:再帰の深さの制限がないと仮定します。言い換えれば、コードは十分に小さなディレクトリツリーで動作する必要があり、原則として大きなディレクトリツリーで動作します。 例えば: ディレクトリツリーは dir1 ├── dir11 │ ├── file111 │ └── file112 ├── dir12 │ ├── file121 │ ├── file122 │ └── file123 ├── file11 ├── file12 └── file13 出力ツリーは [[[],[]],[[],[],[]],[],[],[]] ここで最初にゴルフをコーディングしてください。 楽しんで :)

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