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

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

3
棚の本
本と本棚があります。できるだけ多くの本を棚に置きたいのですが、ルールがあります。ブックのすべての寸法(高さ、幅、深さ)は、シェルフ上で増加しないシーケンスを形成する必要があります。 これは、すべての本が少なくともそれ以降の本と同じ高さでなければならないことを意味します。同じことが幅と深さについても言えます。本を回転して高さ、幅、奥行きを入れ替えることはできません。 すべての書籍の寸法を入力出力として指定するか、棚に置くことができる書籍の最大数を返すプログラムまたは関数を作成する必要があります。 入力 正の整数のトリプレットのリスト。各トリプレットは本の高さ、幅、深さを定義します。 入力リストには少なくとも1つのトリプレットがあります。 2冊の本は、任意の数の次元に沿って同じ長さを持つことができます。 出力 単一の正の整数、ルールに従って棚に収まる本の最大数。 時間の複雑さ アルゴリズムには、書籍の数が最悪の場合の時間複雑度多項式が必要です。これは、たとえば、次の時間計算量がすべて有効であることを意味します:O(N ^ 3)、O(log(N)* N ^ 2)、O(N)、および次のものは無効です:O(2 ^ N)、 O(N!)、O(N ^ N)。 例 入力=>出力 (1, 1, 1) => 1 (5, 2, 5), (1, 3, 5) => 1 (5, 2, 5), (1, 2, 5) => 2 (2, 2, 2), (2, 2, 2), …

8
ソースコードの文字数
ソースコード内の各一意の文字の出現回数のリストを出力するプログラムを作成します。 たとえば、この仮想プログラム{Source_Print_1};は次の出力を生成するはずです。 ; 1 P 1 S 1 _ 2 c 1 e 1 i 1 n 1 o 1 p 1 r 2 t 1 u 1 { 1 } 1 書式はこの例と一致する必要があります。オプションの最終改行を除き、無関係な空白は許可されません。 プログラムは、ソースファイルから独自のソースコードを読み取らない場合があります。 リストされている文字は、2つの順序のいずれかでなければなりません。言語で使用されている文字エンコードの文字値の順序(おそらくASCII)、またはソースに表示される文字の順序。 この質問は触発され、このコメントで月ドヴォルザーク。
12 code-golf  quine 

4
パウリ行列の乗算
パウリ行列が量子物理学では非常に一般的に表示される2×2行列のセットです(いや、あなたはこの挑戦のための任意の量子物理学を知っている必要はありません)。セットにアイデンティティを含める場合、4つのマトリックスは次のとおりです。 σ0 = σ1 = σ2 = σ3 = [1 0] [0 1] [0 -i] [1 0] [0 1] [1 0] [i 0] [0 -1] 乗算それは複雑な相のいずれかを乗じてもよいが、常に、別のパウリ行列を与えるこれらのうちの2つを1、i、-1、-i。たとえば、。σ1σ3 = -iσ2 あなたの仕事は、多数のパウリ行列を乗算し、結果の行列と位相を返すことです。入力は、数字の非空の文字列として指定する0の3行列を表すします。出力は、結果のマトリックスの1桁の数字を含む文字列で、オプションで前に、または位相を示します(は)。σ0σ3i--i--1 プログラムまたは関数を作成し、STDIN(または最も近い代替)、コマンドライン引数または関数引数を介して入力を取得し、STDOUT(または最も近い代替)、関数の戻り値または関数(out)パラメーターを介して結果を出力できます。 パウリ行列に関連する組み込み(またはサードパーティ)機能を使用しないでください。 これはコードゴルフで、最短の回答(バイト単位)が勝ちです。 テストケース 1 => 1 13 => -i2 000 => 0 123 => i0 03022 => 3 02132230 => …

16
文字列内の文字をシフトする
このチャレンジでは、入力した文字列の文字をn回シフトし、シフトした文字列を出力する必要があります 入力 入力には最初に文字列が含まれます。次の行には、n存在することを示す整数があります。 出力 nが正の場合、文字列内の文字を正しいn時間にシフトします。 nが負の場合、文字列内の文字を左にシフトしnます。 nがゼロの場合、文字列内の文字をシフトしません。 シフト後(nゼロの場合を除く)、シフトされた文字列を出力します。 ノート 文字列は空またはにはなりませんnull。 文字列は100文字以下で、範囲(スペース)から~(チルダ)(文字コード0x20から0x7Eを含む)のASCII文字のみが含まれます。見るリファレンス ASCIIテーブルを参照してください。 シフトは周期的です。 人数、個数、総数 nは、正、負、またはゼロです。 n 常に-1000以上で、1000以下です あなたは経由で入力を取ることができます stdinコマンドライン引数をまたはコマンドライン引数からます シフトされた文字列は、 stdout(またはそれに最も近いもの) 完全なプログラム、または入力を受け取って文字列を出力する関数、stdoutまたはそれに最も近いものを書くことができます テストケース 1) Hello world! 5 -->orld!Hello w 2) Testing... -3 -->ting...Tes 3) ~~~ 1000 -->~~~ 4) 12345 0 -->12345 5) ABA 17 -->BAA 得点 これはcode-golfであるため、最短の送信(バイト単位)が優先されます。
12 code-golf  string 

3
ほとんど馬を作る
私は彼に与えることによって、友人をだますしたいQUINEことはほとんど働いていたが、しかしsloppierとsloppierになりました。 実行すると、プログラムを出力しますが、1文字オフになるプログラムを作成します。1つの文字を追加、削除、または両方することができます(1文字変更)。ただし、1文字のみです。 あなたのスコアは(length of your program) / floor(sqrt(number of times the program almost quines))(/ 0無限はどこにあります) number of times the program almost quinesstdoutで1文字のみを変更しながらプログラムを実行する回数です。プログラムが入力を受け付けない場合があります。また、既に印刷したプログラムを印刷しない場合があります。 以前に追加した文字を追加したり、同じインデックスから文字を削除したりすることもできません。たとえば、1以前に追加1したことがあり、再度追加した場合、そこでnumber of times the program almost quines停止します。最初の文字を削除する場合、最初の文字を再度削除することはできません。3番目の文字をに変更した場合、3番目の文字を2追加2または削除することはできません。
12 code-golf  quine 

3
その言葉は女性的ですか、男性的ですか?
小文字のa〜zのみを含む単一の文字列を取り込んだプログラムまたは関数を作成し、単語が表すものの女性バージョンの場合は真理値、男性バージョンの場合は偽値を出力または返します。例えば、hen鶏のためのフェミニンなバージョンで、rooster男性的なバージョンなので、hen生じる可能性があります1し、rooster生じる可能性があります0。 性別を反映するすべての英語の単語に対してこれを行うことは、もちろんあまりにも扱いにくいでしょう。あなたのプログラム/機能は、20の男性/女性ペアのみをサポートする必要があります。以下は、トピックごとに分類された10組の男性/女性ペアの5セットです。セットのいずれか2つを選択します。これら2つのセットの合計20個のペアは、プログラム/関数が機能する必要がある40ワードです。 (形式はmasculine_version feminine_version) 全般 he she him her man woman boy girl male female masculine feminine guy gal lad lass mister miss sir madam 家族性 father mother dad mom pa ma son daughter brother sister husband wife grandfather grandmother grandpa grandma uncle aunt nephew niece 動物 lion lioness rooster …

2
リストを滑らかにする
入力として負でない整数kとソート済み整数リストを取りL、平滑化リストを出力または返すプログラムまたは関数を作成する必要がありますM。 MリストをソートしたままL最大でk整数要素を挿入することにより、昇順リストから作成されます。挿入される整数は、最大の前方差分がMできるだけ小さくなるように選択する必要があります。この最小値を「滑らかさ」と呼びます。 リストの前方差分-1 3 8 11 15はで4 5 3 4あり、最大前方差分は5です。 2挿入の滑らかさ2 10 15、IS 4との可能な出力があり2 6 10 11 15、前方の違いで4 4 1 4。 入力 負でない整数k。 L少なくとも2つの要素を持つ昇順の整数リスト。 出力 昇順の整数リストM。 複数の正解が存在する場合は、そのうちの1つだけを出力します(いずれか1つで十分です)。 あなたの解決策は、私のコンピューターで1分以内にすべてのサンプルテストケースを解決する必要があります(近くのケースのみをテストします。平均以下のPCを持っています)。 例 入力(k、L)=>可能な出力と括弧内の最大前方差分(出力の一部ではない) 0, 10 20 => 10 20 (10) 2, 1 10 => 1 4 7 10 (3) 2, 2 10 15 …

20
暗号ハッシュゴルフ(強盗)
このコンテストは終了しました。 警官のチャレンジには、クラック可能な答えは残っていません。 暗号ハッシュゴルフのコンパニオンスレッド 念のため、主な課題からの強盗のルールを以下に示します。 仕事 スレッドの強盗に次のように掲載することにより提出警官のいずれかをクラック:二つのメッセージMとNでIように H(M)= H(N)およびM≠N 。 得点 各警官の提出物をクラックすると、1ポイントが得られます。最も多くのポイントを持つ強盗が勝ちます。 同点の場合、最長の提出をクラックした縛られた強盗が勝ちます。 追加のルール すべての警官の提出は、一度しかクラックできません。 警官の提出が実装定義または未定義の動作に依存している場合、マシン上で(検証可能に)動作するクラックを見つけるだけで済みます。 各クラックは、強盗のスレッドの個別の回答に属します。 無効なクラッキングの試みを投稿すると、その特定のサブミッションを30分間クラッキングできなくなります。 あなた自身の提出物をクラックすることはできません。 例 Python 2.7、user8675309による22バイト 1 そして 18 リーダーボード eビジネス:クラック3回、393バイト MartinBüttner:クラック3回、299バイト jimmy23013:3つのクラック、161バイト Sp3000:3つのクラック、44バイト tucuxi:2つのクラック、239バイト Vi .:クラック2回、87バイト feersum:1クラック、216バイト mathmandan:1クラック、139バイト squeamish ossifrage:クラック1、134バイト

29
文字列から余分なスペースを取り除く
文字列が与えられます。単語ごとに1つのスペースを含む文字列を出力します。 チャレンジ 入力は、を介して送信されたnullquotes(")で囲まれた文字列(not またはempty)になりstdinます。先頭と末尾のスペースを削除します。また、2つの単語(または記号など)の間に複数のスペースがある場合は、1つのスペースにトリミングします。変更された文字列を引用符付きで出力します。 ルール 文字列は100文字を超えず、範囲(スペース)から~(チルダ)(文字コード0x20から0x7Eを含む)のASCII文字のみを含みます"。つまり、文字列には引用符が含まれません(")およびその他の文字上記で指定された範囲。リファレンスについては、ASCIIテーブルを参照してください。 から入力を取得する必要があります stdin(または最も近い代替)。 出力には引用符が含まれている必要があります(")。 完全なプログラム、または入力を受け取る関数( stdin)を受け取り、最終的な文字列を出力ます テストケース "this is a string " --> "this is a string" " blah blah blah " --> "blah blah blah" "abcdefg" --> "abcdefg" " " --> "" "12 34 ~5 6 (7, 8) - 9 - " --> "12 …
12 code-golf  string 

3
ハンケラブル行列の数を数える
バックグラウンド バイナリハンケル行列は、0sと1s のみを含む一定のスキュー対角(正の傾斜対角)を持つ行列です。たとえば、5x5バイナリハンケル行列は次のようになります a b c d e b c d e f c d e f g d e f g h e f g h i はまたa, b, c, d, e, f, g, h, iはのいずれ0か1です。 レッツは、行列の定義MとしてHankelableを行と列の順序の順列がある場合はMだからMは、ハンケル行列です。これは、1つの順列を行の順序に適用し、場合によっては異なる順列を列に適用できることを意味します。 チャレンジ 課題は、すべての可能な限り最大の値に対して、行列によるハンケラブルの 数を数えることです。nnn 出力 1以上の各整数nに対して、またはであるエントリを持つ行列によるハンケラブル の数を出力します。nn01 以下のためにn = 1,2,3,4,5答えなければなりません2,12,230,12076,1446672。(これらを生成するコードのorlpに感謝します。) 制限時間 私のマシンでコードを実行し、1分後に停止します。nの最大値まで正解を出力するコードが勝ちます。制限時間は、回答n = …

3
円周率の切り捨てられた数字の計算
正の整数nを出力すると、最初のnの合計の小数部の桁π N。 入力と出力の例: 1→1 2→14 3→6 4→13 5→24 50→211 →211500 →2305 5000→22852 πの数字を計算する組み込み関数たり、べき級数や連続分数を評価したりするは許可されていません。標準の抜け穴が適用されます。入力/出力は便利な形式(stdin、stdout、関数in / outputなど)にすることができます。 バイト単位の最短コードが優先されます。

5
旗を取れ
これは、赤対青-Pixel Team Battlebotsに大きく影響を受けた旗をキャプチャするゲームです。それは素晴らしい質問でした(Calvin'sHobbiesに感謝します;私が恥知らずにあなたから多くのコードを盗んだことを気にしないことを願っています)-ここに別のチームベースのキングオブザヒルがあります。願わくば、旗を掴むには、より多くのチームの協力とより多くの戦略が必要になるでしょう。 あなたのIDの最後の桁が間にある場合はそれをミックスするために、あなたは赤チームに考えられている0と4包括的。これにより、同じ人が答えることを決めた場合、まったく同じチームが再び戦うのを防ぐことができます。ボードがある350pxで350px。青いチームはボードの上半分から始まり、赤いチームは下半分から始まります。 フラグをキャプチャするプレイ方法は次のとおりです。ゲームの目的は、相手チームのフラグを取り、自分の側に戻すことです。あなたが彼らの側にいるなら、あなたはタグを付けられ、刑務所に送られます。刑務所にいる場合は、移動できません。あなたが味方である場合、あなたの仕事は彼らを刑務所に送るために敵対するチームメンバーにタグを付けることです。刑務所から抜け出す唯一の方法は、あなたのチームの誰かが刑務所にいる全員に自由にタグを付けることです。(刑務所は相手チームの側にあることに注意してください)。 具体的には: FIELD_PADDING20に設定された定数があります。これは、フィールドのパディングです。ゼロの場合、フラグと刑務所はキャンバスの隅に正確にあります。そうではないので、旗と刑務所は角から20ピクセル離れています。 青旗(青チームは上半分)が(WIDTH - FIELD_PADDING, FIELD_PADDING) = (330, 20)右上隅にあります。 赤い旗は (FIELD_PADDING, HEIGHT - FIELD_PADDING) = (20, 330) 青い刑務所(赤いメンバーがいる場所)は、(20, 20)青い側、左上にあります。 青いメンバーが保管されている赤い刑務所は (330, 330) すべてのチームメンバーがランダム位置から開始45 < x < 305し、45 < y < 175青用と175 < y < 305赤のために。チームメンバーDEFENSE_RADIUS = 25は、自分の旗や自分の刑務所のピクセル内に入ることはできません(もちろん、自分の旗が相手のボットに奪われた場合を除き、その場合、そのボットにタグを付ける必要があります)。これは、ボットのような子犬の保護を防ぐためです。その範囲内に入ると、「プッシュ」されます。同様に、チームメンバーは範囲外(0未満または350以上)に行くことはできません。その場合、できる限り近くの合法的な場所に押し戻されます。 移動するたびに使い果たしますstrength。でstrength開始し、すべてのターンで20補充さ2れます。使用する強さの量は、移動距離に等しくなります。特定の場所に移動することによってあなたの力が負になる場合、その移動を行うことはできません。2通常の追いかけの速度で移動することをお勧めします。勝ちに近づいていて、追加の速度が必要な場合にのみ、より高い速度を使用する必要があります(私の意見では)。 スペック: 仕様は、Pixel Team Battlebotsの質問に非常によく似ています。javascriptでコードブロック(グローバル変数なし)を記述する必要があります。xとyの値の変化を表すx-valueとy-valueを持つオブジェクトを返す必要があります。次の答え: return { x: …

7
線上のフラクタル点
時々、私が本当に退屈している(本当に退屈している)とき、線分を描き、その上に点を描くのが好きです。 まず、特定のサイズの線分を描画します。これは、Nの値に対して2 ^ Nです。線は、一連の .文字でます。 ................ 次に、左端にポイントをプロットします。ポイントはX文字ます。 X............... 次に、パターンに従います。最後にプロットしたポイント(これをAと呼びます)から開始し、ライン上の次のプロットポイント(B)に進みます(必要に応じて折り返します)。次に、に進みますライン(C)上の次のプロットポイントます。次に、この3番目のポイント(C)と既にプロットされている次のポイント(D)の中間に新しいポイントをプロットします。 行を折り返すたびに、「中間」は折り返しの方法で決定されます。新しくプロットされたポイントは、常にCの右側にあります。 次の行が現在の行だったとしましょう。次の2点をプロットする方法を次に示します。この例では、重要な各ポイントに文字でラベルを付けます。 X...A...X.X...X. ^ X...A...B.X...X. ^ X...A...B.C...X. ^ X...A...B.C...D. ^ X...X...X.X.A.X. ^ X...X...X.X.A.B. ^ C...X...X.X.A.B. ^ C...D...X.X.A.B. ^ X.A.X...X.X.X.X. ^ 前の例に戻ると、次の点が線の中央にプロットされます。 X.......X....... これはおそらく少し特殊なケースです。次のポイントに進むと、開始した場所がそのまま残ります。唯一の有用な中間点は、それ自体の上に点をプロットするのとは対照的に、「循環」中間点(線上の中間点)です。 以下は、ここから最後までの線にプロットする一連のポイントです。 X.......X....... X.......X...X... X.......X.X.X... X...X...X.X.X... X...X...X.XXX... X.X.X...X.XXX... X.X.X...XXXXX... 次のポイントをプロットする余地はもうありません。隣接する2つのポイントの間に挟まれる必要があるため、N = 4の指定された値の最大深度に達しました。上記のリストの最後の行は「complete 」 チャレンジ 目標は、指定されたNの値に対して完了した行を出力/返す最短のプログラム/名前付き関数を作成することです。上記はN = 4を示しています。 入力 入力は単一の非負整数Nになります。生成された行の長さは2 …
12 code-golf 

2
x86アセンブリで大きさの順序を計算する最速の方法
タスクは簡単です。可能な限り少ないクロックサイクルを使用して整数の大きさを計算するアセンブリを記述します。 大きさの順序はと定義されてlog10いlog2ます。 有効な入力の範囲はある0に、包括的。その範囲外の入力の動作は未定義です。1012 値は、最も近い整数に切り捨てる必要が0あります0。ただし、入力を指定した場合、出力はである必要があります。(これは符号なし整数で可能な負の無限大の最良の表現であると考えることができます)。 x86アセンブリでなければなりません。 整数は、静的/インライン整数ではなく、ランタイム値である必要があります。そのため、コンパイル時にそれが何であるかはわかりません。 既にレジスタに整数がロードされていると仮定します。(ただし、明確にするために回答のレジスタに値を設定することも含めてください)。 外部ライブラリまたは関数を呼び出すことはできません。 Intelのドキュメントに記載されている手順を自由に使用できます。 いいえC 〜7個のIntel Coreアーキテクチャのいずれでも使用できます(10ページにリスト)。理想的にはNehalem(Intel Core i7)。 勝利の答えは、可能な限り少ないクロックサイクルを使用するものです。つまり、1秒あたりの操作数が最も多くなります。おおよそのクロックサイクルの概要は、http://www.agner.org/optimize/instruction_tables.pdfにあります。クロックサイクルの計算は、回答が投稿された後に発生する可能性があります。

1
適切にコードゴルフをしていますか?
私はコードゴルフをきちんとやっているのか興味があります。Pythonで小さなハッシュプログラムを単一のステートメントにするという課題を自分自身に設定しました。私は最初に始めました: from itertools import permutations from string import ascii_lowercase from random import sample def test(): chars = sample(ascii_lowercase, 9) sums = list(map(h, permutations(chars))) if len(set(sums)) == len(sums): print("unique results for permutations of given string") else: print("duplicate entries present in test results") def h(s): r = 0 for i in range(len(s)): …
12 code-golf  tips  python 

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