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

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

20
シーケンスにない整数の合計のシーケンス
バックグラウンド 次のように定義されたシーケンスを検討してください。 最初の要素は0です。 2番目の要素は4です。 3番目の要素以降、その値は次のように計算できます。 0からシーケンスの前の要素までの整数のセット(包括的または排他的、重要ではありません)を取得します。 シーケンスの前の方で既に出現した整数をセットから削除します。 セットの残りの要素を一緒に追加します。それがあなたが望む値です。 興味深いことに、このシーケンスはまだOEIS上にないようです。 タスク 入力として整数nを取り、シーケンスのn番目の要素を出力するプログラムまたは関数を作成します。 テストケース シーケンスの最初のいくつかの要素は次のとおりです。 0 4 6(1 + 2 + 3) 11(1 + 2 + 3 + 5) 45(1 + 2 + 3 + 5 + 7 + 8 + 9 + 10) 969(1 + 2 + 3 + 5 + …

9
MおよびS文字で構成されたASCIIアートウィンドウを検出する
ウィンドウは、奇数の辺の長さが少なくとも3のASCIIアートの正方形で、エッジの周りに1文字の境界線があり、中央に垂直および水平のストロークがあります。 ####### # # # # # # ####### # # # # # # ####### MSウィンドウは、境界線が文字Mとのみで構成されるウィンドウSです。あなたの仕事は、文字列を取り、入力が有効なMSウィンドウであれば真理値を出力し、そうでなければ偽値を出力するプログラム(または関数)を書くことです。 仕様書 入力は、改行で区切られた文字列または各行を表す文字列の配列として取得できます。 MSウィンドウの境界線には、M文字とS文字が混在している場合がありますが、内部は常にスペースで構成されます。 末尾の改行があるウィンドウのみを検出するか、末尾の改行がないウィンドウのみを検出するかを選択できますが、両方は検出できません。 テストケース 真実: MMM MMM MMM SMSMS M M S SMSMM S S M SMSMS MMMMMMM M S M M S M MSSSSSM M S M M S M MMMMMMM …

18
4ビットを切断する
あなたのタスク:入力文字列が与えられたら、その文字列のバイナリ表現に4 1sまたは0sが連続していないかどうかを判断します。さらに、コード自体には、このような4つの実行が連続して含まれてはなりません。 テストケース String Binary Result U3 01010101 00110011 Truthy 48 00110100 00111000 Falsy Foobar 01000110 01101111 Falsy 01101111 01100010 01100001 01110010 Feeber 01000110 01100101 Truthy 01100101 01100010 01100101 01110010 $H 00100100 01001000 Truthy <Empty> - Truthy ルール 入力は常に、空白文字を含む印刷可能なASCIIの範囲内になります。 コードはビットレベルでのみ重要であるため、任意のエンコードを使用できます。 この条件により、空白や他の多くの文字の使用が妨げられるため、コードには実際には、実行ごとに10バイトのペナルティで、このような4つの実行が連続して含まれます。 5 1sまたは0sの実行は2回の実行としてカウントされ、6行の実行は3回の実行としてカウントされます。 入力は文字列または文字配列であり、他の形式ではありません。 完全なプログラムまたは関数を作成できます。 回答にコードのバイナリ表現を入力する必要があります。 幸運を祈ります、最低スコアが勝ちます! このスクリプトは、チャレンジに役立ち、コードを入力に入れると、UTF-8を使用している場合、コードのバイナリ表現、長さ、ペナルティ、および合計スコアを提供します。 リーダーボード これは、通常のリーダーボードと言語ごとの勝者の概要の両方を生成するスタックスニペットです。 …

12
素数表
イントロ 私がレクリエーション数学で遊んだのは、数値の素数の除数を視覚的に比較/対比するための除数テーブルの構築です。入力番号のセットは列ラベルとして上部にあり、素数は行ラベルとして左側にあり、マークは2つの行の位置を示します。 たとえば、入力の場合、6, 9, 14, 22次のような表が作成されます。 6 9 14 22 2 * * * 3 * * 7 * 11 * これは、ある6の素因子を持っている2と3、9の素因子を持っている3ように、と。 建設 テーブルは、入力番号がスペースで区切られた昇順の列ラベルを形成するように構築され(事前にソートされていると想定できます)、行を形成する行ごとに1つずつ昇順で素数がリストされますラベル。 数値の長さが異なる場合、すべての列が同じ幅で適切に整列するように、素数の先頭スペースと入力数値が必要になる場合があることに注意してください。 各除数は単一*(または同じ文字がすべての出現に使用される限り、選択した他の適切なASCII文字)で表されます。 複数の除数は無視されます(たとえば、その交差点には3 x 3 = 91つしかありません*)。 *限り、それは(私はすべての私の例を持っている明確なだとして、列の任意の場所に水平に配置することができ*右揃え)。 入力 それぞれの便利な形式の正の整数のリスト>1。 入力が事前にソートされていると想定できます。 入力には一意の値のみが含まれることが保証されています。 出力 結果の素数表のASCIIアート表現。 ルール 文字自体が正しく並んでいる限り、先頭または末尾の改行または空白はすべてオプションです。 列/行の見出しを表形式のデータから分離する分割線を使用する方が短い場合は、それも許可されます。 完全なプログラムまたは機能のいずれかが受け入れられます。関数の場合、出力する代わりに出力を返すことができます。 可能であれば、オンラインテスト環境へのリンクを含めて、人々がコードを試せるようにしてください! 標準的な抜け穴は禁止されています。 これはコードゴルフなので、通常のゴルフルールがすべて適用され、最短のコード(バイト単位)が勝ちます。 例 6,9,14,22 6 9 14 …

11
2016 Time Capsule String:整数ラダーに登る
2016タイムカプセル文字列の74文字を使用する H@~*^)$.`~+1A|Q)p~`\Z!IQ~e:O.~@``#|9@)Tf\eT`=(!``|`~!y!`) Q~$x.4|m4~~&!L{% Nコードスニペットをすべて同じ言語で記述します。 最初のスニペットが出力します1。 2番目のスニペットが出力されます2。 3番目のスニペットが出力されます3。 ...など... N番目のスニペット出力N(リテラル文字ではなく、数字)。 「コードスニペット」は、次のいずれかとして定義されます。 通常数を出力する必要な入力のない完全なプログラム。 通常、数値を出力/返す必須の引数のない関数。 REPLの表現番号に評価されます。 (Nスニペットでこれら3つのバリアントを組み合わせて使用​​できます。) あなたはNスニペットの組み合わせセットでの使用を許可している文字は正確にタイムカプセルの74の文字、プラス floor(N/2)余分な「ワイルドカード」バイト、世界中どこででも使用できること。 たとえば、タイムカプセルには3つ@のが含まれているため、ワイルドカードバイトの@一部floor(N/2)を追加に使用することを決定しない限り、Nスニペット全体で最大3つのスニペットが存在する可能性があります@。 したがって、ワイルドカードをカウントせずに、N個のスニペットの文字の組み合わせセットは、74個のタイムカプセル文字のサブセットでなければなりません。長さの合計は74を超えることはできません。スニペット間でタイムカプセル文字またはワイルドカードバイトを再利用することはできません 。 ノート スニペットの長さや、スニペットごとに使用できるワイルドカードの数に他の制限はありません。 1からNまでのすべてのスニペットを記述する必要があります。これは、0からN-1ではなく、kからN + k-1ではありません。 スニペットは、リストを出力する1つのスニペットではなく、個別でなければなりません1, 2, 3, ..., N。 出力はの3.0代わりにfloatである3場合があり、言語の自然なbaseである場合は、decimal以外のbaseを使用できます。すべてのスニペットに同じベースを使用する必要があります。 ワイルドカードは、言語のエンコーディングでバイトとしてカウントされます。これはおそらくASCIIになりますが、たとえば∞エンコードで1バイトとしてカウントする場合、単一のワイルドカードバイトとして使用できます。 マルチバイト文字にはワイルドカードバイトを使用できます。たとえば∞、通常は 3バイトなので、スニペットで使用できますが、floor(N/2)ワイルドカードバイトの3 つがかかります。 などの改行\r\nは1バイトと見なされます。 例 Pythonでは、REPLを使用するだけでN = 4が可能です。floor(4/2) = 2ワイルドカードがあります。 1タイムカプセルからはに評価する表現です1。 2単一のワイルドカード、つまりで構成され2ます。への評価2。 3また、単一のワイルドカードで構成されます。への評価3。これ以上のワイルドカード。 4幸運なことにタイムカプセルに入っていてそれが評価され4ます。 これらのスニペットは短くて簡単です。実際の答えは、おそらくもっと複雑です。 (Pythonで5つ以上は確かに可能かもしれませんが、専門家に任せます。) 得点 最も高いNの答えが勝ちます。すなわち、整数のはしごを最高に登る人。 同点の場合、最も少ないワイルドカードバイトを使用した回答が優先されます。 …

30
ABCのように簡単
入力 文字のそれぞれの最も1に含まれている文字列A、BとC。それらの順序は任意です。空の文字列は有効な入力です。 注:このチャレンジの以前のバージョンでは、LEJ代わりに文字ABCが使用されていましたが、必要に応じて引き続き使用できます。 出力 文字列A、B、C入力には存在していなかった手紙。それらの順序は任意です。 出力が空の文字列である場合、それが実装にとって意味がある場合、単に出力を与えないことは有効です。(たとえば、実際にprint空の文字列を呼び出す必要はありません。) 例 入力された場合B、出力のいずれかでなければならないCA、またはAC以降AとC入力には存在しません。 入力が空の文字列である場合、入力にはABC3文字が存在しないため、出力は任意の順列である必要があります。 入力がCAB3つの文字すべてが入力に存在するため、入力がその場合、出力は空の文字列になります。 テストケース 入力ケースが非常に少ないため、すべてを列挙できます。 in -> out1 | out2 | out3 | ... ABC -> "" ACB -> "" BCA -> "" BAC -> "" CAB -> "" CBA -> "" AB -> C AC -> B BC -> A BA -> …

11
負のフィボナッチ数
あなたはおそらくフィボナッチ数列を知っています: fibonacci(n)=fibonacci(n-1)+fibonacci(n-2) fibonacci(0)=0 fibonacci(1)=1 あなたの仕事はできる限り簡単です: 与えられた整数N計算fibonacci(n) しかし、ここにひねりがあります: また否定的に N 待つ。何? fibonacci(1)=fibonacci(0)+fibonacci(-1) そう fibonacci(-1)=1 そして fibonacci(-2)=fibonacci(0)-fibonacci(1)=-1 等々... これはコードゴルフなので、バイト単位で最短のプログラムが勝ちます。 機能または完全なプログラムを提出できます Nは[-100,100]です CSVのテストケース: -9;-8;-7;-6;-5;-4;-3;-2;-1;0;1;2;3;4;5;6;7;8 34;-21;13;-8;5;-3;2;-1;1;0;1;1;2;3;5;8;13;21 ヒント: n <0およびn&1 == 0: fibonacci(n)=fibonacci(abs(n))*-1

16
オイラー数を出力する
負でない整数n,n,n ,、nthnthn^{\text{th}} オイラー数(OEIS A122045)を出力します。 奇数インデックスのオイラー数はすべて0.0.0 .偶数インデックスオイラー数は、下記式(で計算することができるi≡−1−−−√i≡−1i \equiv \sqrt{-1}は虚数単位を指します): E2n=i∑k=12n+1∑j=0k(kj)(−1)j(k−2j)2n+12kikk.E2n=i∑k=12n+1∑j=0k(kj)(−1)j(k−2j)2n+12kikk. E_{2n} = i \sum_{k=1}^{2n+1}{ \sum_{j=0}^{k}{ \left(\begin{array}{c}k \\ j \end{array}\right) \frac{{\left(-1\right)}^{j} {\left(k-2j\right)}^{2n+1}}{2^k i^k k} } } \,. ルール nnnは、nthnthn^{\text{th}}オイラー数が言語の表現可能な整数の範囲内での整数になります。 テストケース 0 -> 1 1 -> 0 2 -> -1 3 -> 0 6 -> -61 10 -> -50521 20 -> 370371188237525

14
nのすべての乗算パーティションをリストします
正の数で与えられたN、出力のすべての異なる乗法パーティションN任意の便利なフォーマットです。 nの乗法パーティションは、すべてが1より大きい整数のセットであり、その積はnです。たとえば、20には次の異なる乗法パーティションがあります。 2 * 2 * 5 2 * 10 4 * 5 20 順序は関係ないため2 * 2 * 5、と同じパーティションになり2 * 5 * 2ます。 例: 1 -> {} 2 -> {2} 4 -> {2, 2}, {4} 20 -> {2, 2, 5}, {2, 10}, {4, 5}, {20} 84 -> {2, 2, 3, …

11
シディ多項式係数の絶対和
バックグラウンド 次数nのSidi多項式(または(n + 1)番目の Sidi多項式)は、次のように定義されます。 シディ多項式にはいくつかの興味深い特性がありますが、係数も同様です。後者はOEISシーケンスA075513を形成します。 仕事 非負の整数を与え、ことをフルプログラムまたは機能を記述し、N、プリントまたは戻り度のシディ多項式の係数の絶対和をN、即ち これらの合計は、OEISシーケンスA074932を形成します。 1ベースのインデックス付けを希望する場合は、代わりに正の整数nを取り、n 番目の Sidi多項式の係数の絶対和を計算できます。 これはcode-golfであるため、コードをできるだけ短くする必要があります。すべての標準ルールが適用されます。 テストケース(0ベース) n Σ 0 1 1 3 2 18 3 170 4 2200 5 36232 6 725200 7 17095248 8 463936896 9 14246942336 テストケース(1ベース) n Σ 1 1 2 3 3 18 4 170 5 2200 6 …

18
XOR 2つのモノクロ画像
チャレンジ: 2つの白黒(モノクロ)画像を入力し、最初の画像の各ピクセルと2番目の画像の各ピクセルをxorし、それらを新しい画像に追加して、新しい画像を出力します。 いくつかの説明: 写真のサイズは関係ありません。拡張子/画像形式は関係ありません。拡張機能がデジタル画像の保存に使用されている限り、任意の拡張機能を入力し、任意の拡張機能を出力することができます。また、グラフィックを使用して、たとえば、必要に応じてピクチャボックスに出力を描画することもできます。それ以外の場合は、出力をファイルとして保存します。入力は、画像またはURLへのパスとして取得できます。 ただし、できないことの1つは、I / O配列です。トリプレット(R、G、B)の。 alphaを改ざんしないでください。固定する必要はありません。ピクセルごとに255(最大値)にする必要があります。 各ピクセルのxまたはxとはどういう意味ですか? この方法で行う必要はありませんが、2つのピクセルをxorする1つの方法は、RGB値とxor R1とR2、G1とG2、B1とB2を取得し、その結果を新しい色にすることです。 2色しかないため、明らかに同じ色の場合、結果は(0,0,0)になり、異なる場合(白は255,255,255、黒は0,0,0)になり、結果は次のようになります。 255,255,255になります。 したがって、2つのピクセルが異なる場合、結果は白ピクセルになり、そうでない場合は黒ピクセルになります I / Oの例: 入力1:入力2: 出力: これはコードゴルフなので、最短のコードが優先されます。

2
画像のヒルベルト化
私はヒルベルト曲線が好きです。 この課題のタスクは、画像(すべての辺が2ピクセルの幅である厳密に正方形の画像)を取得し、ジグザグ形式で1行ずつ展開し、擬似ヒルベルト曲線で元に戻すことです。 。 解き明かす 解くには、左上隅のピクセルから始めて、画像の端に到達するまで右に進みます。画像の端に到達したら、次の行に移動し、再び端に到達するまで左に移動し始めます。行を切り替えるたびに行を解き続けて、1つの連続した曲線を取得します。これはヘビのよくプレイされるゲームのように見えるはずです 展開の結果は、すべてのピクセルを1回だけ含むピクセルの順序になります。 レラベリング ピクセルの順序が決まったら、擬似ヒルベルト曲線のパスに従って、新しい同じサイズのキャンバス上でピクセルを再配置します。以下のために2**nサイズの正方形の画像あなたは、擬似ヒルベルト曲線のn番目の反復を使用する必要があります。各ピクセルは、新しいキャンバス上のちょうど1つの場所に配置されます。元々左上のポイント(スネークカーブの開始点)がそのまま残り、右下のポイント(スネークカーブの終了点)が右上に配置されるように、イメージを展開する必要があります。 I / O プログラムまたは関数は、標準的な方法で指定された制約の画像を取り込み、標準的な方法で別の画像を出力する必要があります。 得点 これは、勝ちが最も少ないコードゴルフプログラムです。 例 入力 出力 入力 出力 入力 出力 また、空白の白または単色のイメージでテストして、ピクセルが欠落していないことを確認することをお勧めします。 あなたの答えにあなた自身の結果を含めてください。

20
ペアリング可能な文字列
文字列があるペア可能で、それが連続して2回繰り返した文字列で、それぞれのsubtrings、に分割することができます。たとえば、次のようにaabaaababbbabaペアリング可能です: aaba aaba b b ba ba 空ではないa'sとb' s の文字列を指定すると、ペアリング可能な場合はTruthy値を出力し、ペアリングできない場合はFalsey値を出力します。 ペアリング可能: aa abaaba bbababbb aabaaababbbaba babababa bbbbbbbbbbbb aaababbabbabbbababbaabaabaababaaba aaaabaab ペアリング不可: a ba baab abaabaaba bbbbbbbbbbbbbbb baababbabaaaab aaaaabbaaaaa あなたの言語で既に短い正規表現の回答がある場合でも、正規表現に基づいていないソリューションを考え出すことをお勧めします。「正規表現なし」としてマークできます。正規表現とは、組み込みの文字列パターンマッチングサブシステムを意味します。 リーダーボード: コードスニペットを表示 var QUESTION_ID=98252,OVERRIDE_USER=20260;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/98252/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o …

19
URLフレンドリーなタイトル
このサイトの人々は、投稿タイトルを飾るのが大好きです... Stewie's sequence: + * - / + * - / ただし、このタイトルをページURLに含める必要がある場合、簡略化されます。 stewies-sequence チャレンジ あなたの仕事は、投稿のタイトルを表す文字列が与えられると、その「URLフレンドリー」変換を出力/返すプログラムまたは関数を作成することです。 アルゴリズムは次のとおりです。 小文字に変換(該当する場合) すべてのスペース()、ピリオド(.)、コンマ(,)またはスラッシュ(/)をダッシュ​​(-)に置き換えます ダッシュ以外の英数字以外の文字を削除します。 隣接するダッシュのグループを縮小し(a---b -> a-b)、先頭または末尾にあるダッシュを削除します。 このアルゴリズムは簡略化であり、サイトの実際の方法と同じ結果を常に生成するとは限らないことに注意してください。 ルール 次の入力を想定できます。 空になりません。 少なくとも1つの英数字が含まれます。 ASCII範囲32〜126の文字のみが含まれます(印刷可能) 完全なプログラムまたは機能が許可されています。 正確なタスク指定を行うビルトインは許可されていません。 これはcode-golfなので、最短の解決策(バイト単位)が勝ちです! テストケース このサイトのほとんどの投稿はテストとして機能しますが、便利なリストを次に示します。 Loading... Forever -> loading-forever N(e(s(t))) a string -> nest-a-string "Hello, World!" -> hello-world URL-Friendly titles -> url-friendly-titles …

20
与えられた長さの直鎖アルキネの数
直鎖alk * neは、単結合(アルカン)、二重結合(アルケン)、三重結合(アルキン)で接続された一連の炭素原子として定義されます(暗黙の水素が使用されます)。炭素原子は4つの結合しか形成できません。炭素原子に4つを超える結合を強制することはできません。直鎖alk * neは、その炭素-炭素結合のリストとして表すことができます。 これらは、有効な直鎖アルケンのいくつかの例です: [] CH4 Methane [1] CH3-CH3 Ethane [2] CH2=CH2 Ethene [3] CH≡CH Ethyne [1,1] CH3-CH2-CH3 Propane [1,2] CH3-CH=CH2 Propene [1,3] CH3-C≡CH Propyne [2,1] CH2=CH-CH3 Propene [2,2] CH2=C=CH2 Allene (Propadiene) [3,1] CH≡C-CH3 Propyne [1,1,1] CH3-CH2-CH2-CH3 Butane ... これらはそうではありませんが、少なくとも1つの炭素原子には4つ以上の結合があるためです。 [2,3] [3,2] [3,3] ... あなたの仕事は、正の整数が与えられると、正確に炭素原子の長さの有効な直鎖アルケンの数をn出力/返すプログラム/関数を作成することです。これはOEIS A077998です。n 仕様/明確化 を1返すことで正しく処理する必要があり1ます。 …

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