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

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

3
自然に線形なディオファンチン方程式
2変数の線形ディオファントス方程式は、ax + by = cの形式の方程式です。ここで、a、b、およびcは定数整数であり、xおよびyは整数変数です。 多くの自然に発生するディオファントス方程式では、xとyは負の値にできない量を表します。 仕事 係数を受け付けるプログラムまたは機能書き込み、B及びCの入力及び戻りのような任意の一対の自然数(0、1、2、...)のx及びyは式検証すること= cで+ AXを例えば一対場合、存在します。 追加のルール 入力にコードを埋め込まない限り、目的の整数のみを含む入力および出力の任意の形式を選択でき、オプションで言語の配列/リスト/行列/タプル/ベクトル表記を選択できます。 係数aとbが両方ともゼロではないと仮定できます。 コードは、の間の整数のいずれかのトリプレットのために働く必要があり-2 60と2 60。私のマシン(Intel i7-3770、16 GiB RAM)で1分以内に終了する必要があります。 あなたは、このようなMathematicaのようディオファントス方程式を解くため、このタスクを矮小任意のビルトインを、使用することはできませんFindInstanceかFrobeniusSolve。 時間制限に準拠し、その出力が有効なソリューションと混同されない限り、ソリューションが見つからない場合でも、コードは希望どおりに動作します。 標準のコードゴルフ規則が適用されます。 例 以下の例は、方程式2x + 3y = 11の有効なI / Oを示しています。これには、正確に2つの有効な解((x、y)=(4,1)および(x、y)=(1,3))があります。 Input: 2 3 11 Output: [4 1] Input: (11 (2,3)) Output: [3],(1) 2x + 3y = 2の唯一の有効なソリューションは、ペア(x、y)=(1,0)です。 以下の例は、式2x + 3y …

5
15パズルの順列
チャレンジ 解決された状態の15パズルの次の図を検討してください。 _____________________ | | | | | | 1 | 2 | 3 | 4 | |____|____|____|____| | | | | | | 5 | 6 | 7 | 8 | |____|____|____|____| | | | | | | 9 | 10 | 11 | 12 | |____|____|____|____| | | …

5
選挙の時間です!
投票を数える時です! 今日、私の全国で地方選挙があります。ここで、各パーティーの座席数は、D'Hondtメソッドを使用して決定されます。あなたの目標は、各パーティが取得する座席数を最短のバイト数で決定するプログラムまたは機能を実装することです。 この方法では、配布するシートの数が固定されており、次のようになります。 すべての当事者には、獲得した投票数から始まる変数番号が割り当てられます。 そして、最初のシートは、その変数で最大の値を持つ当事者に与えられ、そのパーティーのための値になることで割っ票のその総数は1+seats、丸みを帯びたダウン、seatsそれが既に持っている座席の数は(取得した後そうです最初に、彼らの票は2で割られ、2番目の議席を獲得した後は3で割られます)。 その後、当事者の投票が再度比較されます。このプロセスは、すべての座席が割り当てられるまで続きます。 最大数が2つ以上の関係者の間の同点である場合、ランダムに解決されます(ランダムである必要があり、リストの2つのうちの最初の数だけになることはできません)。 入力 あなたは数受け取るN利用できる座席数、およびあなたが好みの形式で、各当事者は得票のリストを示します。例: 25 12984,7716,13009,4045,1741,1013 出力 各パーティーが獲得した座席のリストを出力する必要があります。上記の例では、次のようになります 8,5,9,2,1,0 入力の関係者と同じ順序である必要があります。 例 5 3,6,1 outputs: 2,3,0 135 1116259,498124,524707,471681,359705,275007,126435 outputs: 45,20,21,19,14,11,5 ボーナス パーティの名前を入力として受け取り、出力でそれらを与えると、-20%のボーナス、たとえば: 25 cio:12984,pcc:7716,irc:13009,icb:4045,cub:1741,bb:1013 outputs cio:8 pcc:5 irc:9 icb:2 cub:1 bb:0
13 code-golf 

10
コードボット3:並列プログラミングのアンチパターン
お帰りなさい!3つ目のCodeBotsチャレンジを紹介できることを嬉しく思います。これは、作成に長い時間がかかりました。この課題は、ショートバージョン、ロングバージョン、および追加の詳細の3つのセクションに分割されます。 ショートバージョン 各競技者は24コマンドプログラムを作成します。これらのボットは世界中を移動し、コードを他のボットにコピーしますが、他のボットが同じことを実行できないようにします。可能なコマンドの1つはno-op Flagです。ボットがFlag他のボットよりも多くのボットを持っている場合、Flagポイントを獲得します。最も多くのポイントを獲得して勝ちます。 上記のすべては、過去2つの課題に当てはまりました。今回は、ボットは複数行のコードを同時に実行できます。 ロングバージョン API すべてのボットには24行あります。各行の形式は次のとおりです。 $label command parameters //comments ラベルとコメントはオプションであり、各コマンドには異なる数のパラメーターがあります。すべて大文字と小文字は区別されません。 パラメーター パラメーターは入力され、次の形式にすることができます。 0〜23の値。 変数:A、B、C、D 加算を使用した値:A+3または2+C 符号を使用して指定されたコード行#(#45行目#C+2を表し、で計算された行を表しますC+2)。 $labelコード行を指定する代わりにを使用できます。 で指定された相手の変数またはコード行*。対戦相手は、あなたが直面している広場のボットです。(*B対戦相手のB価値を*#9表し、敵の10行目を表します)。その正方形に誰もいない場合、コマンドは実行されません。 コマンド Vを移動 ボットを移動しNorth+(V*90 degrees clockwise)ます。動きは方向を変えません。 Vを回す ボットをV*90 degrees時計回りに回転させます。 VWをコピー にあるものをにコピーVしWます。Vが行番号の場合、行番号であるW必要があります。Vが変数または値の場合、変数でWなければなりません。 国旗 何もしません。 Vを開始 変数にアタッチされた新しいスレッドを開始しますV。すぐに、そして将来の各ターンで、スレッドはlineでコマンドを実行しますV。 Vが既にスレッドに接続されている場合、このコマンドはノーオペレーションです。場合はV、相手の変数であり、その後、相手はその変数に添付スレッドを開始します。 停止V Vこのターンの終わりに変数に接続されたスレッドを停止します。 ロックV を呼び出したスレッド以外の方法で、行または変数Vが使用されないようにしますLock。Lock同じスレッドによるの後続の呼び出しでロックが解除されVます。ロックは、相手の変数またはラインで呼び出すことはできません。 Cond VWの場合 これはテストしCondます。条件が真の場合、スレッドポインターを行番号Vに移動しますW。それ以外の場合は、行番号に移動します。その行はすぐに実行されます。 条件文をすることができX=Y、X<Y、!X、または?X: X=Y 2つのラインが同じタイプで同じボットのものであるかどうかをテストするか、2つの値が同じ量に等しいかどうかをテストします。 X<Yの値Xが未満かどうかをテストしますY。 !X変数または行Xがロックされているかどうかをテストします(ロックされている場合はtrueを返します) ?X 指定された変数にスレッドが接続されているかどうかをテストします …

1
Pythonで項目ごとに文字列のリストを連結する
これはpythonでのゴルフのヒントの質問です。 文字列のリストが2つあり、各リストの対応するエントリを連結するとします。例えば、a=list("abcd")とb=list("1234")を計算し["a1","b2","c3","d4"]ます。 これは、一般に操作がリストにメンバーごとに適用される配列ベースのプログラミング言語では簡単です。たとえば、私のゴルフ言語Pipのコードは単純a.bです。しかし、Pythonではそれほど簡単ではありません。 Pythonicの方法は、おそらくzipリスト内包表記(25文字)を使用することです。 [x+y for x,y in zip(a,b)] 別の方法はmap、ラムダ関数を使用する方法です(23): map(lambda x,y:x+y,a,b) 以下は、私が思いついた最短のものです(21): map("".join,zip(a,b)) もっと短い方法はありますか? リストの長さは同じで、必要なのは何らかの反復可能なものだけであると仮定します(したがって、mapPython 3ではオブジェクトは問題ありません)。
13 code-golf  tips  python 

11
距離mod Nの計算
Advanced Collecting Device Controller™から長い間データを収集しています。ログを確認すると、恐ろしいことに何かがひどく間違っていることがわかります。データには数字の最後のビットしか含まれていません。 幸いなことに、開始値がわかっていて、値が決して速く変化することはありません。つまり、スタート地点からの距離を見つけるだけで残りを回復できるということです。 チャレンジ モジュラスNと中間値モジュロのリストを指定して、値が変化した量を計算するプログラムまたは関数を作成しますN。 数値の各ペア間の変化は常により小さいためN/2、各テストケースに対して有効な回答は1つだけです。 入力として、N2を超える整数と値のリストが、選択した形式で提供されます。入力は、STDINまたはコマンドラインまたは関数の引数を介して指定できます。 元の値が変更された量である単一の整数を出力します。出力はSTDOUTに出力されるか、返されます。 ルール プログラムは、未満の距離とモジュラスで機能する必要があり2^20ます。 あなたはそれを仮定するかもしれません: Nは少なくとも3です。 リストには少なくとも2つの値があります。 リスト内のすべての値は、少なくとも0未満ですN。 数値のすべての変更は未満ですN/2。 それ以外は無効な入力であり、プログラムは必要な処理を実行できます。 この正確な目的のための標準的な抜け穴、非標準ライブラリ、組み込み関数は禁止されています。 これはcode-golfであるため、バイト単位の最短プログラムが優先されます。 テストケースの例 入力: 3 0 1 2 2 0 1 0 2 1 2 0 1 2 1 1 出力: 4 説明(値の例付き): Value mod 3: 0 1 2 2 0 1 …
13 code-golf  math 

4
非常に素晴らしいフリードマン番号
A フリードマン数は、*、/、^、括弧と連結-操作+、と組み合わせて独自の数字を使用して非自明な式に等しい正の整数です。 ニース・フリードマン数は、自明な式に等しい正の整数であり、元の順序で数字を使用して、同じ操作と組み合わせて独自の数字を使用します。 私がここで発明している非常に素晴らしいフリードマン数(VNFN)は、そのような表現のあまりきれいでない(私の意見では)部分なしで書くことができるニース・フリードマン数です。括弧、連結、および単項否定は許可されていません。 この挑戦のために、括弧なしで式を書く3つの可能な方法があります。 プレフィックス:これは左結合性と同等です。このタイプの式は、すべての演算子が数字の左側に記載されています。各演算子は、次の2つの式に適用されます。例えば: *+*1234 = *(+(*(1,2),3),4) = (((1*2)+3)*4) = 20 この方法で記述できるVNFNは343です。 ^+343 = ^(+(3,4),3) = ((3+4)^3) = 343 後置:これは、右結合性と同等です。操作は数字の右側に移動することを除いて、プレフィックス表記に似ています。各演算子は、前の2つの式に適用されます。例えば: 1234*+* = (1,(2,(3,4)*)+)* = (1*(2+(3*4))) = 14 この方法で記述できるVNFNは15655です。 15655^+** = (1,(5,(6,(5,5)^)+)*)* = (1*(5*(6+(5^5)))) = 15655 中置:中置表記法では、5つの操作に標準の操作順序が使用されます。チャレンジのために、その操作の順序は次のように定義されます^。次に、括弧で囲み*、/同時に連想的に残します。最後に、括弧で囲む+と-同時に、連想的に残します。 1-2-3 = (1-2)-3 = -4 2/3*2 = (2/3)*2 = 4/3 2^2^3 = …

1
ツー・ゼロ・ワン・ファイブ・パズル
バックグラウンド このパズルは、フォーフォーズパズルのバリエーションです(それ自体が過去の質問のトピックです)。そのパズルのように、目的は、4桁と特定の数学演算子のみを使用して、異なる整数の数式を見つけることです。ただし、この場合、許可される数字は2、0、1、および5だけです。それぞれがソリューションに正確に1回、正しい順序で表示される必要があります。驚くほど多くの整数がこの方法で表現できます。ソルバーは、奇妙に楽しいので、最初に手で解決することをお勧めします。 ルール 定数は、1桁または複数の数字から作成できます。 整数:たとえば、2、0、15など。 10進数:例.2、.01、1.5など 繰り返しの小数:.2〜(= 0.222 ...)、. 15〜(= 0.1555 ...)、20.15 ~~(= 20.1515 ...) 次の単項演算が許可されています。 単項否定:-x 平方根:sqrt(x) 整数階乗:x! 次のバイナリ操作が許可されています。 標準算術演算子:x + y、xy、x * yおよびx / y 任意のべき乗:x ^ y 任意のルート:rt [x](y)(= xのyのルート) 仕事 プログラムは、できるだけ多くの0〜100の整数の式を出力し、生成した式の数を出力する必要があります。 ソリューションは、n = [expr]の形式で順番に印刷する必要があります。 式では、2、0、1、5のすべての数字をその順序で1つずつ使用する必要があります。 式は、上記の表記法を使用して印刷する必要があります。不要な括弧は許可されますが、空白のように必須ではありません。演算子の優先順位は、単項否定、階乗、べき乗、乗算/除算、加算/減算です。 プログラムは、すべての数値の解を返す必要はありません。したがって、単に0を出力するプログラムは有効です。ただし、以下のスコアリングセクションを参照してください。 プログラムは、最新のコンピューターで15分未満で実行する必要があります。 プログラムまたは関数を作成できます。式はSTDOUT(または最も近い代替)に出力する必要があります。式の数は、STDOUTに出力するか、整数として返すことができます。標準コードのゴルフ制限が適用されます。 出力例 0=2*0*1*5 10=20*1*.5 42=((2+0!)!+1)!/5! 100=20*1*5 4 得点 …

4
単語は互いに隣接するキーで入力可能ですか?
これを読む前に、この小さなパズルを読むことをお勧めします:https : //puzzling.stackexchange.com/questions/11408/longest-word-with-adjacent-letters-on-a-keyboard 1つの引数、単語(小文字のみ)を取り、キーボードの隣接するキーで単語を入力できる場合は「はい」(記事を参照)、出力できる場合は「いいえ」を出力するプログラムを作成してほしい隣接する文字を入力しないでください。 このチャレンジで使用されるキーボードレイアウトは次のとおりです。 ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ | Q | W | E | R | T | Y | U | I | O | P | └─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┘ | A | S | D | F | G | H | J | K | L | └─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┘ | Z …

2
アスキーアートジェネレーション
仕事 width wとheightのイメージhと2つの整数a <= w/2およびを取りb <= h/2、寸法のaxを持つイメージのASCIIアート表現を出力するプログラムまたは関数を記述しますb。 アスキーアートは、次の手順(または同じ出力を持つ別のプロセス)で生成する必要があります。 サイズを変更するwのx hに画像を2aX 2b。ピクセルの色(x, y)リサイズ画像では、以下のコーナーを有する矩形内部原画像からすべてのピクセルの色の平均値に等しくなければなりません。 (floor[x * w/2a], floor[y * h/2b]) (ceil[(x+1) * w/2a], ceil[(y+1) * h/2b]) 色の赤、緑、青の成分の平均を取り、各成分をこの平均に設定することにより、サイズ変更された画像の彩度を下げる必要があります。 以下のルールに従って、ピクセルの2x2ブロックごとに文字を出力する必要があります。 Let e = 3 - floor[color/64]、ここで、色は、左上のピクセルの色の赤成分を指します(範囲0..255)。ましょうf、gと、hこの値を参照しますが、それぞれ右上、左下、および右下の画素について。 させるzの平均でe、f、g、h。 以下に対応する文字を出力します(白3 - floor[color/64]はゼロのピクセルを表し、灰色は非ゼロを表します)。 =スペースを出力() または=出力"の場合e (or f) >= 2と'そうでありません。 または=出力,の場合g (or h) >= 2と.そうでありません。 または=出力- または=出力; =出力 …

1
テトリスタングラム
前書き タングラムは、ブロックをさまざまな形に配置/適合させる古典的なパズルです。中国の七巧板から-文字通り「7つのスキルボード」を意味します。このアイデアを活用して、7つのテトロミノスのピースを使用してグリッドを埋めましょう。 チャレンジ 入力としてグリッド座標の配列を受け取り、指定された座標を除き、テトリスの破片で満たされた10 x 20の完成したグリッドを出力する関数またはプログラムを作成します。 ピースの分布を均一に保つようにして、スコアを最適化します。 基準 この座標のペーストビンを使用して、タスクを完了します。5組の座標があります。座標を書き込む形式は自由に変更できますが、値は変更しないでください。 データセット#2は解決できません-この場合、入力セルが埋められた状態でグリッドを出力するだけです(つまり、X穴のある場所)。 入力 グリッド座標は、グリッドの「穴」を表します。これらはテトロミノの部分を含むことができないセルです。 グリッド座標: (0,0), (1,0), (2,0), ... (9,0) (0,1), (1,1), (2,1), ... (9,1) . . . (0,19), (1,19), (2,19), ... (9,19) プログラミング言語の配列スタイルを使用して、座標を入力します。 Xまたはその他の印刷可能なASCIIでグリッドの穴を表します。 出力 幅10セル、高さ20セルの標準テトリスグリッドサイズを使用して、Tetrominoピースを使用してグリッドを完全かつ完全に埋めることができる場合にのみ、ソリューショングリッドを印刷します。 手紙で構成小品I、O、L、J、T、Z、Sとして、次のとおりです。 I I L J I OO L J T ZZ SS I OO LL …

2
レーザーの宛先に一致するミラー構成を見つける
更新されたスコアリング:このチャレンジは予想以上に難しいので、スコアリングを調整しました。単一のミラー入力を解決できるプログラムが有効な答えです。より洗練されたプログラムは、スコアにボーナスを与えます。 PPCGには、ミラーボックス内のレーザーパスを見つけるためのパズルがいくつかあります。このパズルでは、いくつかのレーザーの宛先に一致するミラーのボックスを作成する必要があります。 レーザーが出入りするボックスと仕様が表示されます。プログラムは、仕様を満たすために正確にN個の両面ミラーをボックスに配置する必要があります。ミラーは45度の角度にする必要がありますが、前方に傾斜することも後方に傾斜することもできます。 入力 プログラムは、STDIN、コマンドライン引数、または次の形式のファイルを介してボックスグリッドを受け入れる必要があります。 +--G--+ +abcde+ G | f/////d | /| a// c +-----+ f | +-b-e-+ 文字ペア([a-zA-Z]を使用可能)は、最大52個のレーザーの入力/出力を示します。箱の中にはN個の/ミラーがあります。ボックスの寸法は3 <= W、H <= 200です。ボックスは+|-文字で構成されています。ボックスには、ゼロを含む任意の数のミラーがあります。 出力 /文字が移動および/または\文字に変更される可能性があることを除いて、出力は入力と一致する必要があります。プログラムは、正しいミラーボックス文字列をSTDOUTまたはファイルに送信する必要があります。末尾の改行はオプションです。ミラーの配置が入力仕様を満たすことができない場合、output Impossible\n。可能な解決策の例: +--G--+ +abcde+ G / | f \ \ d | | a/ \ c +-----+ f / //| +-b-e-+ テスト例 入力: +abcdefghijklmnopqrstuvwxyA-+ |/////////////// | …
13 code-golf  grid 

30
文字列の各単語の母音の数を数える
これはかなり簡単な挑戦です。 チャレンジ 入力には、null最大長100の文字列(not またはempty)が含まれます。文字列の各単語の母音の数をスペースで区切って出力します。 ルール 文字列の長さは100文字を超えません。 文字列にはアルファベットのみが含まれA-Z、a-zスペースを含めることもできます。 入力は、stdinまたはコマンドライン引数から使用する必要があります。 出力はで出力する必要がありますstdout。 完全なプログラム、またはから入力stdinを取得して結果を出力する関数を作成できます。 あなたのプログラム/機能のニーズがカウントすること母音があるaeiouとAEIOU。 テストケース This is the first test case --> 1 1 1 1 1 2 one plus two equals three --> 2 1 1 3 2 aeiou AEIOU --> 5 5 psst --> 0 the quick brown fox jumped over …

7
行、列、対角、ブロック
正の整数Nに対して、幅N文字、高さN文字の正方形のコードブロックを記述します。 たとえば、Nは5で、ブロックは次のようになります。 ThisI sMy5B y5Cod eBloc kOkay このブロックは次のように動作する必要があります。 一番上の行を抽出してプログラムとして実行する場合、正確なテキストrowを標準出力に出力する必要があります。 たとえば、ThisI印刷しますrow。 左の列を抽出してプログラムとして実行する場合、正確なテキストcolを標準出力に出力する必要があります。 たとえば、Tsyek印刷しますcol。 左上隅から右下隅までの主要な対角線を抽出してプログラムとして実行する場合、正確なテキストdiaを標準出力に出力する必要があります。 たとえば、TMCoy印刷しますdia。 ブロック全体が改行(オプションの末尾の改行を含む)を含むプログラムとして実行される場合、正確なテキストblkを標準出力に出力する必要があります。 例えば、 ThisI sMy5B y5Cod eBloc kOkay 印刷しますblk。 詳細 4つのプログラムはすべて同じプログラミング言語で実行されます。 元のブロックのN 2文字は、行末記号以外のものである可能性があります。 言語に標準出力がない場合は、別の一般的な出力方法を使用できます。4つのプログラムすべてで同じ方法でなければなりません。 オリジナルブロックに含まれる文字列が最も少ない(改行を含まない)提出物が勝ちです。Tiebreakerは、より小さいNを使用してサブミッションに進みます。

2
単語検索パズルの生成
文字列のリストが与えられたら、各初期文字列を含む最小の正方行列を見つけます。文字列は、この質問「ワード検索パズル」のように、水平、垂直、または斜めに、前後に表示されます。 単語は、各方向(水平、垂直、および対角)に少なくとも1単語ずつ、正方形に配置する必要があります。単語は一度だけ表示されるはずです。 したがって、入力は単なる単語のリストです。例:CAT, TRAIN, CUBE, BICYCLE。考えられる解決策の1つは次のとおりです。 B N * * * * * * I * * C A T * A C * * * * * R * Y * * C * T * * C * U * * * * * L B * * …

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