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

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

22
配電盤上の一部のスイッチを反転する
この挑戦に触発されました。 ゴール: 事前に設定されたスイッチボードとインデックスのリストを指定すると、指定されたインデックスでスイッチを反転します。 配電盤は、いくつかのスイッチ(vまたは^)でラップ-され、さまざまな長さの列に配置されます。スイッチボードの例を次に示します。 -v-^-v- -^-v- -v-^-v- スイッチを反転/反転するとは、スイッチをvから^、またはから^に変更することを意味しvます。 スイッチには左から右、上から下にインデックスが付けられています。たとえば、上記の例vでは、最初の行の最後が位置3にあり^、中央の行が4にあります(1インデックスを使用)。 入力: スイッチボードを表す文字列(または文字列のリスト)。正規表現と一致することが保証されてい((-[v^])+-)(\n(-[v^])+-)*ます。 インデックスを表す番号の空のリストは、0または1(または必要に応じて任意の番号)になります。これらは、反転する必要があるスイッチです。 出力: 指定されたスイッチが反転した入力と同じ形状の配電盤。指定されていないスイッチは、初期状態を保持する必要があります。 ルール: 入力は常に正しくフォーマットされ、指定されたインデックスが範囲外になることはありません。 インデックスのリストはソートされ、重複はありません。 答えには、0、1、または任意のインデックスを使用してください。 出力が入力のように見える限り、末尾の空白は問題ありません。 これはコードゴルフなので、最短のコードが優先されます。 例: #Using 1-indexing input: #Empty Case [], -v-^-v- output: -v-^-v- input: #Single switch [1], -v- output: -^- input: #Skip a line [3,5], -^-v-v- -v- -^-^- output: -^-v-^- -v- -v-^- input: …

24
Gimbapカッターを作る
ジンバップ(김밥)は韓国料理で、やや巻き寿司のように見えます。 韓国の顔文字はGimbapを表しています: @)))))))))) あなたの探求は、ASCII Gimbapカッターを作ることです。 ルール 入力はとのみ@で作成された文字列)です。 出力は、すべての有効なGimbapをでカットし)、 @それらの間に追加します。例えばそう@))に@) @)。 有効なGimbapはで始まり@、その後に任意の量が続き)ます。 有効なGimbapがない場合、出力は空白です。 入出力 Input | Output @))))) | @) @) @) @) @) @))))))) | @) @) @) @) @) @) @) @))@))) | @) @) @) @) @) @) | @) )) | @ | @@)@@@))) | @) @) …

3
ヌーの道
反時計回りの正方形のスパイラルに番号が付けられた無限のチェス盤上の正方形で始まるヌーの位置を与えるプログラムまたは関数をゴルフし彼女はまだ訪れていないことを知ることができます。n番目n番目n^{\text{th}} 1111 インスピレーション:閉じ込められた騎士とOEIS A316667。 編集:このシーケンスはA323763としてOEISにあります。 コードは、場所、最初の場所を生成するか、入力なしでシーケンスを生成します。n番目n番目n^{\text{th}}nnn 代わりに(または)最大ジャンプ後に彼女の位置を自由に指定できますが、そうする場合は、回答にこれを明記し、入力が得られることを確認してください(または適切な場合)。nnnn = 0n=0n=01[1] これはcode-golfであるため、目的は、選択した言語で可能な限り少ないバイトで作業コードを生成することです。 注:ヌーは彼女の閉じ込められます(騎士が場所、正方形で、ラクダが彼の、正方形)。正方形場所。コードの振る舞いは、これよりも大きい未定義になる場合があります。(これを見つけたC ++コードの Deadcodeに感謝します!)2016年番目2016年番目2016^{\text{th}}2084208420843723rd3723rd3723^{\text{rd}}70817081708112899744968番目12899744968番目12899744968^{\text{th}}128518502581285185025812851850258nnn 詳細 ボードは次のようになり、無期限に継続します。 101 100 99 98 97 96 95 94 93 92 91 102 65 64 63 62 61 60 59 58 57 90 103 66 37 36 35 34 33 32 31 56 89 104 67 …

23
最も近い3桁の16進数の色を見つける
CSSでは、色は「16進トリプレット」(各バイトが色の赤、緑、または青の成分を表す3バイト(6桁)の16進数)で指定できます。たとえば、#FF0000は完全に赤で、と同等rgb(255, 0, 0)です。 色は、3桁の16進数を使用する簡略表記で表すこともできます。速記は、各桁を複製することにより6桁の形式に拡張されます。たとえば、に#ABCなり#AABBCCます。 16進数の短縮形では桁数が少ないため、表現できる色が少なくなります。 チャレンジ 6桁の16進数カラーコードを受け取り、最も近い3桁のカラーコードを出力するプログラムまたは関数を作成します。 以下に例を示します。 入力16進コード:#28a086 赤成分 0x28 = 40(10進数) 0x22 = 34 0x33 = 51 0x22は近いため、短縮されたカラーコードの最初の桁は2です。 グリーン成分 0xa0 = 160 0x99 = 153 0xaa = 170 0x99は近いため、2桁目は9です。 青成分 0x86 = 134 0x77 = 119 0x88 = 136 0x88は近いため、3桁目は8です。 短縮カラーコードは#298(#229988に展開されます) プログラムまたは関数は、先頭に6桁の16進数のカラーコードを入力として受け入れ、先頭に#3桁のカラーコードを追加して出力する必要があります#。 例 #FF0000→#F00 #00FF00→#0F0 #D913C4→#D1C #C0DD39→#BD3 #28A086→#298 …

19
Analog is Obtuse!
アナログ時計には2つの針があります*:時間と分。 これらの針は、時間が経つにつれて時計の顔を一周します。分針が1回転するごとに、時針が1/12回転します。時針を2回転させると、1日を表します。 これらの手は同じ中心点に固定され、その点を中心に回転するため、いつでも手の間の角度を計算できます。実際、任意の時点で2つの角度があります。大きいものと小さいもの(両方とも180になることがありますが、それは重要ではありません) *仮想時計には秒針がありません 仕事 24時間形式で時刻を指定すると、手の間の小さい角度を度単位で出力します。手が直接対向互いに(例えばにおける通りである場合6:00、18:00等)出力180は ルール 入力は次のように使用できます。-区切り文字で区切られた文字列:6:32、14.26 -2つの独立した値、文字列または整数:6, 32、14, 26 -2つの値、文字列または整数の配列:[6, 32]、[14, 26] あなたはまた、必要に応じて(あなたが文字列を取ると仮定して)あなたの答えは入力が2桁にパッドを入れられたことが必要であることを指定することができ、すなわち:06:32、06, 32、[06, 32] :あなたはまた、必要に応じて、すなわち、その後、時間分を取って、入力の順序を逆にします32:6、32, 6、[26, 14] Hourは0から23(包括的)までの整数値で、Minuteは0から59(包括的)までの整数値です 分針が顔に沿って6度刻みでスナップすると仮定できます(各分値に対して等間隔の位置1つ) 時針が顔に沿って0.5度刻みでスナップすると仮定できます(時間値ごとの各分値) 出力は、ラジアンではなく度で指定する必要があります。.0整数の末尾を含めることができます 得点 これはコードゴルフなので、各言語で最少のバイトが勝ちます! テストケース Input: 06:32 Output: 4 Input: 06:30 Output: 15 Input: 18:32 Output: 4 Input: 06:01 Output: 174.5 Input: 00:00 Output: 0 Input: 00:01 Output: …
23 code-golf  math  number  date 

24
強盗:隠されたOEISサブストリング
これは警官と強盗の挑戦です。これが強盗のスレッドです。警官のスレッドはここにあります。 警官はOEISから任意のシーケンスを選択し、そのシーケンスの最初の整数を出力するプログラムpを作成します。彼らはまた、いくつかの文字列を検索します秒。sをp のどこかに挿入する場合、このプログラムはシーケンスの2番目の整数を出力する必要があります。s + sをpの同じ場所に挿入する場合、このプログラムはシーケンスの3番目の整数を出力する必要があります。同じ場所にあるs + s + sは4番目を印刷し、以下同様に続きます。以下に例を示します。 Python 3、シーケンスA000027 print(1) 隠し文字列は2バイトです。 文字列は+1、プログラムprint(1+1)がA000027の2番目の整数を印刷するため、プログラムがprint(1+1+1)3番目の整数を印刷するためなどです。 警官は、シーケンス、元のプログラムp、および非表示の文字列sの長さを明らかにする必要があります。強盗は、その長さまでの文字列と、それを挿入してシーケンスを作成する場所を見つけることにより、提出物を解読します。文字列は、有効なクラックであるために意図したソリューションと一致する必要はなく、挿入される場所も一致する必要はありません。 警官の回答の1つをクラックした場合は、解決策(非表示の文字列と場所が公開されている)と回答へのリンクを投稿してください。次に、ここであなたのクラックへのリンクで警官の答えにコメントしてください。 ルール ソリューションは、シーケンス内の任意の数、または少なくともメモリ制限、整数/スタックオーバーフローなどが原因で失敗する合理的な制限まで動作する必要があります。 勝者の強盗は、最も多くの提出物をクラックするユーザーであり、タイブレーカーはその数のクラックに最初に到達します。 勝利した警官は、割れていない最短の文字列の警官です。Tiebreakerは最短のpです。ひびのない提出物がない場合、解決策を持っていた警官が最も長い間勝ちました。 安全であると宣言するには、ソリューションを1週間クラックせずに、隠し文字列(および挿入する場所)を公開する必要があります。 sはネストできません。エンドツーエンドで連結する必要があります。たとえば、sがいた10、各反復は行くだろう10, 1010, 101010, 10101010...ではなく、10, 1100, 111000, 11110000... すべての暗号化ソリューション(たとえば、部分文字列のハッシュのチェック)は禁止されています。 sにASCII以外の文字が含まれている場合は、使用するエンコードも指定する必要があります。

14
あなたの「KVZ」を知っていますか?
概念 英語のアルファベットをどのようにスクランブルして、曲を壊さずにトゥインクルトゥインクルリトルスターに合わせて歌うことができますか? ルール スワッピング 次の各セットに含まれる文字は、曲を損なわずにデフォルトで自由に交換できると仮定してみましょう。 {A、J、K} {B、C、D、E、G、P、T、V、Z} {I、Y} {Q、U} {S、X、F} {M、N} したがって、H、L、O、R、およびWは所定の位置にロックされます 出力 プログラムは、順序が上記の条件を満たしている限り、任意の順序で完全な英語のアルファベットを含む単一のランダム文字列(または文字のリスト)を出力する必要があります。プログラムがどの文字列を出力するかを予測する方法はないはずです(シードを無視する場合)。つまり、ハードコーディングすることはできません。 あなたのプログラムは、9 !⋅ 3 !⋅ 3 !⋅ 2 !⋅ 2 !⋅ 2 != 1045094409!⋅3!⋅3!⋅2!⋅2!⋅2!=104509440 9! \cdot 3! \cdot 3! \cdot 2! \cdot 2! \cdot 2! = 104509440 それぞれを生成するいくつかの正の確率(必ずしも均一ではない)を持っている必要があります!⋅ 3 !⋅ 3 !⋅ 2 !⋅ 2 !⋅ 2 …

20
隣接していないアイテムの最大合計サブシーケンス
前書き: これら2つのSO質問(同じクラスからの疑いのない質問)に触発された:隣接要素なしの最大合計のサブ配列の要素javaおよび配列の非隣接要素の最大合計を印刷します。 チャレンジ: 整数のリストが与えられた場合、最高の合計を持つ非隣接要素で構成されるサブシーケンスを出力します。ここにいくつかの例があります: [1,2,3,-1,-3,2,5]は、0から始まるインデックスで[1,3,5](合計で9)になります[0,2,6]。 [4,5,4,3]いずれかをもたらすであろう[4,4](の和と80ベースのインデックスで)[0,2]又は[5,3](もの和と80ベースのインデックスで)[1,3]。 [5,5,10,100,10,5]は、0ベースのインデックスまたはのいずれかで[5,100,5](合計で110)になります。[0,3,5][1,3,5] 上記のこれらの例で最も重要なのは、要素を含むインデックスが少なくとも2つ離れていることです。この例を[5,5,10,100,10,5]さらに詳しく見ると、非隣接アイテムを含む次の潜在的なサブシーケンスがあります。インデックスがその下にあります。以下の合計で: [[5],[10],[100],[10],[5],[5],[100,5],[10,5],[10,10],[5,5],[5,10],[5,100],[5,5],[5,10],[5,100],[5,10],[5,100,5],[5,100,5],[5,10,5],[5,10,10]] // non-adjacent subsequences [[5],[ 4],[ 3],[ 2],[1],[0],[ 3,5],[ 2,5],[ 2, 4],[1,5],[1, 4],[1, 3],[0,5],[0, 4],[0, 3],[0, 2],[1, 3,5],[0, 3,5],[0, 2,5],[0, 2, 4]] // at these 0-based indices [ 5, 10, 100, 10, 5, 5, 105, 15, 20, 10, 15, 105, 10, 15, …

17
本当の宝物は、私たちが道に沿って作った数字でした
あなたの仕事は、整数を出力するだけのプログラム、関数、またはスニペット(はい、スニペットは許可されます)を書くことです。ただし、提出物を、別個の整数も生成するプレフィックスに分割できる必要があります。以前のプレフィックスに出現したバイトは使用できません。たとえば、プレフィックスを付けることができます。 1 # 1 (Now we can't use 1) 1-6 # -5 (Now we can't use - or 6) 1-6/3 # -1 (Now we can't use / or 3) 1-6/3+0xA # 9 Final submission ルール あなたの目標は、最もユニークな整数をゼロに近づけて作成しようとすることです。 スコアリングシステムはで((number of unique integers)**3)/(sum of absolute values)、スコアが高いほど優れています。上記の例のスコア。(43)/(1+|−5|+|−1|+9)=64/16=4(43)/(1+|−5|+|−1|+9)=64/16=4(4^3)/(1+\lvert-5\rvert+\lvert-1\rvert+9) = 64/16 = 4 少なくとも2つの一意の整数が必要です(ゼロで除算しない!) 次のような回答をフォーマットしてください: # …

11
最小整数ディスク
この課題は、特定のポイントを含む最小のディスクを見つけることです。ただし、この課題では、ディスクの座標と半径は両方とも整数でなければならないという事実により、これはやや複雑になります。 入力は、整数座標xとを持つ点のリストになりyます。これは、タプルのリスト、リストのリスト、またはペアのコレクションを表す他の方法として使用できます。xそして、y両方とも(おそらく負の)整数になります。すべてのポイントは一意であることが保証されており、少なくとも1つのポイントがあります。 あなたの出力は、3つの数字の形でディスクになりX、YとR。X、YおよびRすべての整数であり、XおよびYディスクの中心を表し、Rその半径を表します。与えられたすべての点と中心の間の距離はに等しいかそれ以下Rでなければならず、Rこの条件を満たしているより小さいディスクが存在してはなりません。 特定の入力に対して複数の可能な解決策がある可能性がありますが、この場合、コードは少なくとも1つを出力する必要があります。 言語がサポートしている場合は、言語でサポートされているあらゆる種類のジオメトリビルトインを使用できます。入力/出力は、単なる数字ではなく、組み込みのポイント/ディスクオブジェクトを介して行われます。 テストケース Input (Possible) Output(s) (x,y) (X,Y,R) ------------------------- (0,0) (0,0,0) ------------------------- (0,1) (0,0,1) (1,0) (1,1,1) ------------------------- (1,4) (4,4,3) (3,2) (4,1) (4,5) (5,2) (7,4) ------------------------- (-1,0) (0,0,2) (2,0) (1,0,2) ------------------------- (-1,0) (1,0,2) (2,1) (0,1,2) ------------------------- (0,0) (1,0,1) (1,1) (0,1,1) 少ないバイトが勝ちます。

16
ケーキを焼きます
私の誕生日は1か月で、これはおいしいケーキのスライスです。 .-""-. .-" "-. |""--.. "-. | ""--.. "-. |""--.. ""--..\ | ""--.. | | ""--..| ""--.. | ""--.. | ""--..| 最小バイト数で、このケーキのスライスを作成してください。STDOUTに出力するか、関数の結果として返すことができます。 文字が適切に並んでいる限り、余分な空白は許容されます。 ルールとI / O 入力なし 便利な方法で出力できます。 完全なプログラムまたは機能のいずれかが受け入れられます。 標準的な抜け穴は禁止されています。 これはコードゴルフなので、通常のゴルフルールがすべて適用され、最短のコード(バイト単位)が勝ちます。

18
折りたたみ番号
10進数d kとして書かれた自然数nnn関数を定義しましょうdkdk−1…d1d0dkdk−1…d1d0d_k\; d_{k-1}\; \dotsc\; d_1\; d_0は次のとおりです。 等しい隣接する数字d iがある限りdidi−1didi−1d_i\;d_{i-1}、その合計によってそれらを置き換えるdi+di−1di+di−1d_i+d_{i-1}左から右へ。そのような数字があった場合は、同じ手順を繰り返します。 つまり、各反復で、隣接する等しい数字のすべてのペアを貪欲に取り、それらを同時に合計で置き換えます(重複する場合は左端のペアを使用します)。 例 例として99889988\texttt{9988}を見てみましょう。 等しい最初の隣接する数字は2つの99\texttt{9} したがって、それらを9 + 9=189 + 9=18\texttt{9 + 9} = \texttt{18}に置き換えると、1888が得られます。18881888\texttt{1888} 私たちはまだ最初の左右走査であり、まだ2つの88\texttt{8}があったので、これらを最初に置き換える必要があります 我々が得るように、18161816\texttt{1816} 何かが変わったので、別の繰り返しを行う必要があります しかし、そのような数字はないので、停止します したがって、そのシーケンスの9988th9988th9988^\text{th}数値は181618161816です。 チャレンジ 最初の200の用語は次のとおりです。 0,1,2,3,4,5,6,7,8,9,10,2,12,13,14,15,16,17,18,19,20,21,4,23,24,25,26,27,28,29,30,31,32,6,34,35,36,37,38,39,40,41,42,43,8,45,46,47,48,49,50,51,52,53,54,10,56,57,58,59,60,61,62,63,64,65,12,67,68,69,70,71,72,73,74,75,76,14,78,79,80,81,82,83,84,85,86,87,16,89,90,91,92,93,94,95,96,97,98,18,10,101,102,103,104,105,106,107,108,109,20,21,4,23,24,25,26,27,28,29,120,121,14,123,124,125,126,127,128,129,130,131,132,16,134,135,136,137,138,139,140,141,142,143,18,145,146,147,148,149,150,151,152,153,154,20,156,157,158,159,160,161,162,163,164,165,4,167,168,169,170,171,172,173,174,175,176,24,178,179,180,181,182,183,184,185,186,187,26,189,190,191,192,193,194,195,196,197,198,28 あなたの仕事は、そのシーケンスを生成することです nnn指定すると、そのシーケンスのnthnthn^\text{th}数値を返します。 nnn指定すると、そのシーケンスの最初のnnn数値を返します または、シーケンスを無期限に生成します。 000または111インデックス作成のいずれかを使用するように提出を選択できますが、どちらを指定してください。 テストケース 上記の用語を使用することもできますが、ここにいくつかの大きな用語を示します。 222 -> 42 1633 -> 4 4488 -> 816 15519 -> 2019 19988 -> …

15
セミパリンドロームパズル
回文とは、それ自体が逆の言葉です。 今ではパリンドロームのように見えるかもしれないがそうではない単語がいくつかあります。たとえば、単語 はパリンドロームsheeshで sheeshはありません。その逆はhseehsどちらが異なるかを考えshてみましょう。しかし、単一の文字と考えると、逆はになりsheeshます。この種の単語をセミパリンドロームと呼びます。 具体的には、単語をいくつかのチャンクに分割して、チャンクの順序が逆になったときに元の単語が形成される場合、単語はセミパリンドロームです。(sheeshこれらのチャンクはsh e e sh)単語の両方の半分からの文字を含むチャンクも必要ありません(そうでない場合、すべての単語はセミパリンドロームになります)。たとえば、元の単語の両側の文字を含むチャンク()があるrearため、セミパリンドロームではありません。奇数の長さの単語の中心文字は単語のどちら側にもないと考えます。したがって、奇数の長さの単語の場合、中心文字は常に独自のチャンクになければなりません。r ea rea あなたの仕事は、正の整数のリストを取得し、それらがセミパリンドロームかどうかを判断することです。コードは、入力がセミパリンドロームの場合とそうでない場合の2つの一貫した等しくない値を出力する必要があります。ただし、コードのバイトシーケンスはセミパリンドロームそのものでなければなりません。 回答はバイト単位でスコアリングされ、バイト数が少ないほど優れています。 テストケース [] -> True [1] -> True [2,1,2] -> True [3,4,2,2,3,4] -> True [3,5,1,3,5] -> True [1,2,3,1] -> False [1,2,3,3,4,1] -> False [11,44,1,1] -> False [1,3,2,4,1,2,3] -> False より多くのテストケースを生成するプログラム。 恐ろしいことは、これらが一般化されたスマランダチェ回文に似ていることを指摘した。したがって、さらに読みたい場合は、1つの場所から始めてください。

25
最大桁で並べ替え
チャレンジ: 整数のリストが与えられたら、それらの単一の最大桁で降順でソートします。次に、同じ最大桁の数字の順序は、2番目に大きい桁などでソートさ れます。数字の重複桁は無視されます。また、数字のすべての数字が同じ場合、リスト内の数字の順序は任意に設定できます。 例: Input: [123, 478, -904, 62778, 0, -73, 8491, 3120, 6458, -7738, 373] Possible outputs: [8491, -904, 62778, 478, -7738, 6458, 373, -73, 3120, 123, 0] [8491, -904, 62778, 478, -7738, 6458, -73, 373, 3120, 123, 0] どうして?番号がソートされた関連する数字は次のとおりです。 Output: [8491, -904, 62778, 478, -7738, 6458, 373, -73, …

15
多次元反転
非負整数のN次元の直交(非不規則)配列と、どの次元を反転させるかの指示が与えられると、配列を返しますが、それらの次元に沿って反転します。指示は、長さNのブールリスト、または0または1からインデックス付けされた最初のN次元のサブセットのリストとして指定できます。 入力形式を明記してください。コードの説明は大歓迎です。 ウォークスルーの例 2層3行4列3Dアレイが与えられます [[[ 1, 2, 3, 4], [ 5, 6, 7, 8], [ 9,10,11,12]], [[13,14,15,16], [17,18,19,20], [21,22,23,24]]] そして [true,false,true](ブールリスト) [0,2](0インデックス付きリスト) [1,3](1インデックス付きリスト) 最初と最後の次元の順序を逆にする必要があります。つまり、各レイヤーの行ではなく、レイヤーと行の要素(列)です。最初に(これを行う実際の順序は重要ではありません)、レイヤーの順序を逆にします。 [[[13,14,15,16], [17,18,19,20], [21,22,23,24]], [[ 1, 2, 3, 4], [ 5, 6, 7, 8], [ 9,10,11,12]]] 次に、各行の要素の順序を逆にします。 [[[16,15,14,13], [20,19,18,17], [24,23,22,21]], [[ 4, 3, 2, 1], [ 8, …

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