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

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

1
変異硬化したクイン
あなたの仕事は、独自のソースを印刷するプログラムを作成することです。 「ねえ、私たちはすでにこの挑戦と、それのトンのバリエーションを持っています!なぜあなたは別のものを作っているのですか?」質問するかもしれませんが、これは最も難しいものの1つになります(とにかく)。 あなたのウマは「突然変異に強く」されている必要があります。それは、その文字のいずれかが適切に複製されていても、ウマは元のプログラムのソースコードを出力しなければならないことを意味します。 たとえば、あなたが馬を持っている場合(次の例はどの言語でも書かれておらず、単なる擬似コードです): abcd これらのプログラムはすべて出力する必要がありますabcd: aabcd abbcd abccd abcdd (これらのプログラムのそれぞれで、a、b、cおよびd各重複文字が元の文字の直後に配置したことを意味する、その場で複製されます。) ルール: 標準のクインルールが適用されます。 マルチバイト文字は1文字としてカウントされ、複製された文字はそれぞれのバイトに「分割」されません。 これはcode-golfなので、バイト単位の最短コードが勝ちです!

5
曲線上の点の対極を計算する
曲線は、正方形のグリッド上の点のセットであり、各点は4近傍の正確に2つの近傍を持ち、点は単一の連結成分を形成します。つまり、グリッドグラフ上のポイントによって誘導されるグラフは、単一のサイクルと同型です。「誘導」とは、2つのポイントがサイクル内で隣接していなければ入力をタッチできないことを意味します。 グラフ内の頂点Vの対極は、Vから最も遠い頂点です。対極は、偶数長のサイクルでは常に一意です(グリッドグラフの各サイクルは偶数長です)。距離は、基礎となる正方形グリッドを考慮せずに、サイクル自体によって誘導されるように測定するものとします。 入力は曲線の画像でなければなりません。曲線は#、スペース文字()から背景に番号記号文字()のシーケンスでマークアウトされます。曲線上の点の1つにP文字(「ポッド」)が付けられます。出力は入力と同じになりますが、1つのカーブポイントがA(「対極」)に置き換えられます。 文字が長方形にパディングされると仮定することができます。入力の最初と最後の行と列は完全にスペースで構成されていると想定できます(入力には背景が埋め込まれます)。または、最初と最後の行と列にそれぞれ曲線ポイントが含まれると想定することもできます(入力には最小のパディングがあります)。 このグリッドは、改行で区切られた単一の文字列、行の配列、または個々の文字の2D配列として入出力できます。この選択は、入力と出力で同じです。言語でこれが許可されている場合、変更された文字列または配列を返す代わりに、入力をその場で変更して出力できます。 可能な入力: P# P## #P# ##### #####P# ####### #####P######### #####P######### ## # # # # # # # # # # # # # # ### ### ## ## # ### # # ### # # ### ### ### # # # ### # # ### …

20
インクリメントを倍増しながらカウントアップとダウン
入力: 各要素は、あなたが数えるだろうかどうかを示す値/文字を保持している非空のリスト/ベクトルアップ またはダウン。とを使用1し-1ますが、好きなものを選択できます。あなたが唯一の2つの値を使用することができ、あなたが使用することはできません1,2,3...し、-1,-2,-3...それぞれ上下ために、。 チャレンジ: 幾何級数1、2、4、8、16、32 ...の数字を使用します。あなたがカウントアップまたはダウンを開始するたびに、単位でカウントします1その後、2、その後、4というように。変更や他の方法を数え始めるなら、あなたは引くよ1、そして2、そして4などを。出力は、最終的に取得する番号でなければなりません。 例: 以下の例では、最初の行は入力、2番目の行はカウントアップ/ダウンする数値、3番目の行は累積合計、最後の行は出力です。 例1: 1 1 1 1 1 1 1 1 1 1 1 2 4 8 16 32 64 128 256 512 1 3 7 15 31 63 127 255 511 1023 1023 例2: 1 1 1 1 1 1 -1 -1 -1 …

6
クラッシュせずにループできますか?
私たちの多くは、Tronというゲームに精通しています。グリッドに配置された「ライトサイクル」を制御します。ライトサイクルは常に前方に移動し(方向を制御しますが)、その背後に永続的なトレイルを残します。トレイルにぶつかると、クラッシュします! ここでの目標は、特定のパスが有効なループであるかどうか、つまり「クラッシュ」せずに開始点に戻るかどうかを判断することです。これを行うために、ポイントから開始すると仮定し(0,0)ます。入力はN2E1S2W1、一連の基本方向(Nis north、Eis east、など)の形式で与えられ、それぞれにその方向に移動する距離が続きます。この例では、旅行します N2 : North 2 to (0,2) E1 : East 1 to (1,2) S2 : South 2 to (1,0) W1 : West 1 to (0,0) パスは(0,0)、他の座標(0,0)に2回以上アクセスすることなく終了する場合に有効と見なされます(正確に2回アクセスします。開始時に1回、終了時に1回)。上記の例よりも注意し(0,0)て(0,2)ください(0,1)。からに到達するには、必ずアクセスする必要があります。 他の例: input -> output N1E1S1W1 -> true N1E1N1E1S2W2 -> true N1S1E1W1 -> false // Visits (0,0) 3 times N4E2S2W4S2E2 -> false …

6
倍数でセットをカバーする
1より大きい整数のセットを取り、それをXと呼びましょう。S(i)を、iで割り切れるXのすべてのメンバーのセットとして定義します(i> 1)。これらのサブセットから、次のようなセットのグループを選択したい 彼らの和集合はXです Xの要素は2つのセットにありません。 例えば、我々は再編成することができます{3..11}よう {3,4,5,6,7,8,9,10,11} S(3): {3, 6, 9, } S(4): { 4, 8, } S(5): { 5, 10, } S(7): { 7, } S(11):{ 11} 一部のセットは、この方法では表現できません。我々が取る場合たとえば{3..12}、123と4の両方が相互に排他的であることから、当社のセットを防ぐの倍数です。 一部のセットは複数の方法で表現できます。たとえば{4..8}、 {4,5,6,7,8} S(4): {4, 8} S(5): { 5, } S(6): { 6, } S(7): { 7, } ただし、次のように表すこともできます {4,5,6,7,8} S(2): {4, 6, …

6
n * k = dd0d00dここで、d =…?
正の整数を考えるとN≤500: 検索最小の正の整数kの全ての小数表現の桁ようにN * kがされているか、0又はDで、1つの≤D≤9 。 dを30秒以内に印刷または返送します(詳細については、明確化と規則のセクションをご覧ください)。 簡単な例 dの最初の30個の値は次のとおりです。 +----+-------+---------+---+ +----+-------+---------+---+ | n | k | n * k | d | | n | k | n * k | d | +----+-------+---------+---+ +----+-------+---------+---+ | 1 | 1 | 1 | 1 | | 16 | 5 | 80 | …

3
ツリー幅の計算
無向グラフのツリー幅は、グラフ理論で非常に重要な概念です。小さいツリー幅でグラフを分解すると、高速で実行される多数のグラフアルゴリズムが発明されました。 ツリー幅は、多くの場合、ツリー分解の観点から定義されます。ウィキペディアの好意によるグラフとそのグラフのツリー分解を以下に示します。 ツリー分解とは、各頂点が次のプロパティを持つ元のグラフの頂点のサブセットに関連付けられているツリーです。 元のグラフのすべての頂点は、少なくとも1つのサブセットにあります。 元のグラフのすべてのエッジには、少なくとも1つのサブセットに両方の頂点があります。 サブセットに特定の元の頂点が含まれる分解内のすべての頂点が接続されます。 上記の分解がこれらの規則に従っていることを確認できます。ツリー分解の幅は、その最大サブセットのサイズから1を引いたものです。したがって、上記の分解では2です。グラフのツリー幅は、そのグラフのツリー分解の最小幅です。 この課題では、接続された無向グラフが与えられ、そのツリー幅を見つける必要があります。 ツリーの分解を見つけるのは困難ですが、ツリー幅を計算する方法は他にもあります。ウィキペディアのページには詳しい情報がありますが、ツリー幅を計算するためのアルゴリズムでよく使用される、そこに記載されていないツリー幅の計算方法の1つは、最小消去順序幅です。この事実を使用した論文についてはこちらをご覧ください。 消去順序では、グラフのすべての頂点を一度に1つずつ消去します。各頂点が削除されると、その頂点のすべての隣接点を互いに接続するエッジが追加されます。これは、すべての頂点がなくなるまで繰り返されます。削除順序幅は、削除される頂点がこのプロセス中に持つ隣接の最大数です。treewidthは、消去順序幅のすべての順序の最小値に等しくなります。以下に、この事実を使用してツリー幅を計算するプログラムの例を示します。 import itertools def elimination_width(graph): max_neighbors = 0 for i in sorted(set(itertools.chain.from_iterable(graph))): neighbors = set([a for (a, b) in graph if b == i] + [b for (a, b) in graph if a == i]) max_neighbors = max(len(neighbors), max_neighbors) graph = …

9
茎葉図を作成する
関連:茎葉図の検証 入力 正の整数の空でないリスト。必要に応じて、文字列として使用できます。ソートされていると想定することはできません。 出力 幹葉プロット番号の。で数十によって、その幹に収まるすべての数字は、そのものが幹の中に置かれた値、およびすべてのソートされてい茎にこの幹葉プロット、番号は注文されています。この課題では、改行が茎を分離し、スペースが茎を葉から分離します。 空でないステムの間にあるすべての空のステムを含めるか除外することができます。 テストケース (リストは言語のデフォルトのリストで取得できます。以下ではJSONを使用しました) 空の茎を含む: [1, 2, 3, 3, 3, 3, 3, 10, 15, 15, 18, 1, 100] 0 11233333 1 0558 2 3 4 5 6 7 8 9 10 0 [55, 59, 49, 43, 58, 59, 54, 44, 49, 51, 44, 40, 50, 59, …
14 code-golf  number 

14
英語の長い日付への短い日付
可能な限り少ないバイト数で短い日付形式を英語の長い日付に変換します。 入力 入力はyyyy-mm-dd、すべての値に対してオプションのゼロパディングを使用した、形式の文字列の形式になります。これは構文的に正しいと仮定できますが、必ずしも有効な日付ではありません。負の年の値をサポートする必要はありません。 出力 日付を英語の長い日付形式(例:)に変換する必要があります14th February 2017。ここでゼロパディングは許可されません。 日付が無効な場合(例:)、これは2011-02-29何らかの方法で認識される必要があります。例外をスローできます。 その他の例を以下に示します。 テストケース "1980-05-12" -> 12th May 1980 "2005-12-3" -> 3rd December 2005 "150-4-21" -> 21st April 150 "2011-2-29" -> (error/invalid) "1999-10-35" -> (error/invalid)

23
文字と数字の実行を交換する
英数字のASCII文字のみを含み、文字で始まる入力文字列を指定すると、各文字の実行を後続の数字の実行と入れ替えます。 実行は連続した文字や数字の列です。入力文字列が文字の連続で終了する場合、この連続は変更されないことに注意してください。 ウォークスルーの例 たとえば、入力文字列が与えられた場合uV5Pt3I0: 文字の連続と数字の連続: uV 5 Pt 3 I 0 実行のペアを特定します。 (uV 5) (Pt 3) (I 0) 実行のペアを入れ替える: (5 uV) (3 Pt) (0 I) 連結: 5uV3Pt0I 例 uV5Pt3I0 -> 5uV3Pt0I J0i0m8 -> 0J0i8m abc256 -> 256abc Hennebont56Fr -> 56HennebontFr Em5sA55Ve777Rien -> 5Em55sA777VeRien nOoP -> nOoP これはコードゴルフなので、バイト単位の最短回答が優先されます。説明が奨励されます。
14 code-golf  string 

3
ASCII直方体を描く
3以上の整数が2以上の場合、直交(キャビネット)投影でASCIIキューブを作成します。3つの整数は、角を含む高さ、幅、深さ(可視文字で測定)を表します。角は「o」または「+」で、自由に選択できます。 w:10、h:5、d:4したがって: o--------o / /| / / | o--------o | | | o | | / | |/ o--------o さて、これを少し難しくするために、すべての面をソリッド、透明、または欠落させることができます。このように面を注文します: o--------o / /| / 2 / | o--------o 3| | | o | 1 | / | |/ o--------o --- |2| ------- |5|1|3| ------- |4| --- |6| --- トークンのリスト、S、T、またはMを指定します。したがって、元の例は次のようになります。 w …

7
最小セットを見つける
三組考えてみましょうA、BとCそれぞれ含むn整数。これからセットを作ることができます S_n = {a * b + c | a in A, b in B, c in C}. が与えられると、選択されたセットに依存するn1つ以上の最小サイズがS_nありますA,B and C。 セットには、n個別の整数(正、ゼロ、または負)を含めることができます。たとえば、それらが連続した整数である必要も、セットが互いに等しい必要もありません。 A = {-1, 0, 5, 10, 27}, B = {2, 5, 6, 10, 14} and C = {-23, 2, 100, 1000,10000}たとえば、(良いアイデアではありませんが)許容されます。 仕事 タスクは、fromからtoまでのS_nそれぞれで可能な最小のセットを見つけるためのコードを記述することです。 n120 毎nから1の20コード出力が選択されなければならないA、BとCの得られた大きさに伴ってS_n スコア スコアは、S_n作成したサイズの合計になります。つまり、20個の数字の合計になります。 スコアが低いほど良い。 …

10
土壌のpH化学を学びましょう!
アンドリューは化学者であり、溶液の酸性度と農業に興味があります。数か月の研究の後(Googleは彼の友人ではありません)、彼はpH(水素の可能性)に関して人間が読めるレベルの酸性度に関する次の表*を思いつきました。 宗派| pH範囲 | ------------------------- + ------------------------ ----- 超酸性| 3.5未満 ------------------------- + ------------------------ ------ 強酸性| 3.5と4.4の間 ------------------------- + ------------------------ ------ 非常に強い酸性| 4.5と5.0の間 ------------------------- + ------------------------ ------ 強酸性| 5.1と5.5の間 ------------------------- + ------------------------ ------ 中程度の酸性| 5.6と6.0の間 ------------------------- + ------------------------ ------ 弱酸性| 6.1と6.5の間 ------------------------- + ------------------------ ------ ニュートラル| 6.6と7.3の間 ------------------------- + ------------------------ ------ …

5
素数を素数の適切なサブセットにマッピングする自然数内の全単射
定義 全単射セットからSセットには、Tから関数でSのTこのような1つの要素Tに正確に1つの要素によってマッピングされますS。 セット内の全単射で Sから全単射であるSとS。 自然数は、より大きいまたは等しい整数です0。 セットのサブセットは、セットS内のすべての要素もにあるようなセットですS。 適切なサブセットセットのはSの部分集合である集合であるSと等しくされていませんS。 仕事 入力として自然数を取り、自然数を出力するプログラム/関数を作成します。これは全単射でなければならず、プログラム/関数の下の素数のイメージは、{f(p) : p ∈ ℙ}の適切なサブセットである必要があります。ℙここℙで、は素数です。 得点 これはcode-golfです。バイト単位の最短回答が優先されます。標準の抜け穴が適用されます。

5
消灯、7セグメントバージョン
いくつかのセグメントがオンとオフに切り替えられた7セグメント表示の場合、各桁の対応するセグメントを切り替えた後、すべてのセグメントがオフになるように、一連の数字(0〜9)を見つけます。 例 _ _ [3] => | [1] => [OFF] _ | 番号と対応するセグメント: _ _ _ _ _ _ _ _ | | | _| _| |_| |_ |_ | |_| |_| |_| | |_ _| | _| |_| | |_| _| ルール Codegolf⊨最短エントリーが勝ちます。 入力 次のように指定された、オンになっているセグメントの空でないリスト 一連の数字。セグメントには、上から下、左から右に番号が付けられます。0または1から始まります。数字は順番に並んでいる必要はありません。 単一の7ビット数字。MSB / LSBが指定されていません(したがって、選択できます)。 …

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