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

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

12
仕事仲間からの挨拶ボット
毎週火曜日と木曜日に自宅で仕事をしている同僚がいます。午前8:00頃、彼は次のテキストを含むメッセージを送信します。 こんにちは今日は自宅で仕事をしています 彼が毎日家にいるという負担から彼を解放するために、私たちは彼のためにこの仕事を自動化したいと思います。 チャレンジ 次のようなコードをできるだけ少ないバイトで記述します。 現在の時刻を受け取る:コードは、現在の年、月(1〜12)、日(1〜31)、時間(0〜23)、分(0〜59)、および曜日の値を受け取ることができます。 (この番号が0から始まるか1から始まるかを選択できます。0/ 1が日曜日、月曜日、またはその他の日を意味する場合)。代わりに次のような構造を受け取ることがDate、DateTime、Calendarまたは他の時間関連の構造は、あなたの言語がそれを許可している場合。yyyyMMddHHmm必要に応じて日付を含む文字列、または日付と時刻の2つの個別の文字列、および曜日を含む整数を受け取ることもできます。お気軽に。 メッセージを仕事のチャットに送信する必要があるかどうかを示す、2つの一貫した真実と偽の値を返します。 ルール このコードは定期的に呼び出されると想定されています。それにもかかわらず、正確な周期性は無関係です。 曜日が火曜日または木曜日で、時刻が午前8時でエラーマージンが10分(7:50から8:10までを含む)である場合、真偽値を返す必要があります。 指定された日のそれらの時間の間にコードが初めて呼び出される場合にのみ、真偽値を送信する必要があります。ボットが同じメッセージを連続して何度も送信するのは望ましくありません。この制限を管理する方法は完全にあなた次第です。 コードは、繰り返し実行される独立したプログラムの場合もあれば、常に実行されているより大きなコードの一部である場合もあります。あなたの選択。 コードの実行の間に再起動は行われないと想定できます。 日付は常に正しいと仮定することができます。 コードについて、特に永続性を実現するために使用される方法について説明することをお勧めします。 例 (Week starts on Monday: 1, the following invokations will be made in succession) 2018,08,27,08,00,1 = falsey (not Tuesday or Thursday) 2018,08,28,07,45,2 = falsey (out of hours) 2018,08,28,07,55,2 = truthy (first time invoked …

30
3つの整数はすべて区別されますか?
入力として3つの整数が与えられます。入力は互いに異なっていてもいなくてもかまいません。3つの入力すべてが互いに異なる場合は1を出力し、入力が複数回繰り返される場合は0を出力する必要があります。 これはcode-golfなので、コードをできるだけ短くしてください!

15
算術合計の欠損値
チャレンジ 有効な算術和にいくつかの欠損値を与えて、完全な式を出力します。 例: 1#3 123 + 45# => + 456 -------- -------- 579 579 入力 式の形式は、配列["1#3", "45#", "579"]、文字列"1#3+45#=579"、または3つの入力にすることができますf("1#3","45#","579") 出力 入力と同じ 結果を出力する必要はありません ノート 不足している数字は、次を使用して表されます。 #またはその他の定数以外の定数ます 結果に欠けている番号がないと仮定する 入出力が2つの用語で構成され、最終結果であると仮定する 用語> 0および結果> = 2の両方を想定 複数の解決策があるかもしれません。合計結果が一致する限り、誰でも出力できます 出力の可能性があるテストケース(きれいな形式) #79 879 + 44# => + 444 -------- -------- 1323 1323 5#5 555 + 3#3 => + 343 …

16
配列実行の検索
配列内の実行を見つける 実行とは、一定のステップで前から増加する3つ以上の数として定義されます。たとえば、[1,2,3]はステップ1の実行であり、[1,3,5,7]はステップ2の実行であり、[1,2,4,5]は実行ではありません。 これらの実行は、「i to j by s」という表記で表現できます。iは実行の最初の番号、jは実行の最後の番号、sはステップです。ただし、ステップ1の実行は「i to j」で表されます。 したがって、前に配列を使用すると、次のようになります。 [1,2,3]-> "1to3" [1,3,5,7]-> "1to7by2" [1,2,4,5]-> "1 2 4 5" この課題では、複数の実行がある可能性のある配列に対してこれを行うのはあなたのタスクです。 再帰を使用したPythonコードの例: def arr_comp_rec(a, start_index): # Early exit and recursion end point if start_index == len(a)-1: return str(a[-1]) elif start_index == len(a): return '' # Keep track of first delta to …

6
グラフ5-彩色
正直なところ、これはまだ質問されていないとは信じられませんが、ここでは バックグラウンド 単純な無向平面(グラフは交差なしで平面に描くことができます)グラフを考えると、グラフが4色であることが証明された定理です。ただし、グラフを5色にする方がはるかに簡単です。これが、今日の課題に焦点を当てるものです。 グラフの有効なk色は、次のプロパティを持つグラフのノードへの「色」の割り当てです。 2つのノードがエッジで接続されている場合、ノードは異なる色で色付けされます。 グラフ全体で、最大5色があります。 これを踏まえて、単純な無向平面グラフを5色にするための非常に基本的なアルゴリズムを紹介します。このアルゴリズムには次の定義が必要です 到達可能性:ノード1がノード2から到達可能である場合、最初のノードがノード2で最後がノード1であるように、それぞれがエッジで接続された一連のノードがあることを意味しますノード1がノード2から到達可能である場合、ノード2はノード1から到達可能です。 サブグラフ:ノードNの特定のセットのグラフのサブグラフは、サブグラフのノードがすべてNであり、両方のノードがエッジで接続されている場合にのみ、元のグラフのエッジがサブグラフにあるグラフです。北にあります Color(N)を、N個のノードを持つ平面グラフを5色で色付けする関数とします。以下の関数を定義します 接続されているノードの数が最も少ないノードを見つけます。このノードには、最大で5つのノードが接続されます。 グラフからこのノードを削除します。 この新しいグラフでColor(N-1)を呼び出して、色を付けます。 削除したノードをグラフに追加し直します。 可能であれば、追加されたノードに、接続されているノードのいずれにもない色を割り当てます。 可能でない場合、追加されたノードに隣接する5つのノードすべてに5つの異なる色があるため、次のプロセスを試す必要があります。 追加されたノードn1 ... n5を囲むノードに番号を付けます n1またはn3のいずれかと同じ色の元のグラフのすべてのノードのサブグラフを検討します。 このサブグラフで、n1から到達可能なノードのセット(n1を含む)で、n1からn3に到達できない場合、n1のすべての色をn3に置き換えます。追加したノードn1の元の色に色を付けます。 この新しいグラフでn1からn3に到達できる場合、n1とn3ではなく、ノードn2とn4でステップ9からのプロセスを実行します。 チャレンジ edgelist(グラフを表す)の入力を指定して、各ノードに値を割り当てることにより、グラフに色を付けます。 入力:グラフ内のエッジのリスト(つまり、[('a','b'),('b','c')...]) 入力エッジリストは、(a、b)がリスト内にある場合、(b、a)はリスト内にないことに注意してください。 出力:値のペアを含むオブジェクト。各ペアの最初の要素はノードで、2番目はその色、つまり、[('a',1),('b',2)...]または{'a':1,'b':2,...} 色、数字、文字、その他のものを表すために何でも使用できます。 入力と出力が非常に明確である限り、入力と出力は非常に柔軟です。 ルール これはコードゴルフの挑戦です 上記のアルゴリズムを使用する必要はありません。これは単に参照用です。 どのグラフでも、多くの場合、有効な色付けの方法があります。アルゴリズムが生成した色付けが有効である限り、それは受け入れられます。 グラフは5色でなければならないことに注意してください。 テストケース 次のコードを使用して、カラーリング結果の有効性をテストします。グラフごとに有効なグラフの色が多数あるため、このアルゴリズムは単に色の有効性をチェックします。コードの使用方法については、docstringをご覧ください。 いくつかのランダムな(そしてかなり馬鹿げた)テストケース: テストケース2:Krackhardt Kite Graph [(0, 1), (0, 2), (0, 3), (0, 5), (1, 3), …

5
最適なキャッシュ
メモリリクエストのシーケンスとキャッシュサイズが与えられます。キャッシュ置換戦略では、キャッシュミスの数をできるだけ少なくする必要があります。 最適な戦略は、Beladyのアルゴリズムです。これは、必要に応じて使用できます。 キャッシングシステムは次のように機能します。キャッシュは空から始まります。メモリ要求が入ります。要求がキャッシュ内のデータの一部を要求する場合、すべてが順調です。そうでない場合、キャッシュミスが発生します。この時点で、将来使用するために要求されたデータをキャッシュに挿入できます。キャッシュがいっぱいで、新しいデータを挿入する場合は、以前にキャッシュにあったデータを削除する必要があります。キャッシュ内だけではないデータを挿入することはできません。 あなたの目標は、特定のメモリリクエストシーケンスとキャッシュサイズについて、キャッシュミスの最小数を見つけることです。 キャッシュサイズ、正の整数、およびトークンのリストであるメモリ要求シーケンスが提供されます。これらのトークンは、少なくとも256個の異なるトークンが可能な限り、どのような種類のトークンでもかまいません(バイトは問題ありませんが、ブールはできません)。たとえば、int、string、listはすべて問題ありません。必要に応じて説明を求めてください。 テストケース: 3 [5, 0, 1, 2, 0, 3, 1, 2, 5, 2] 6 これを実現する代替ポリシーについては、ウィキペディアを参照してください。 2 [0, 1, 2, 0, 1, 0, 1] 3 2キャッシュへの追加を避けるだけです。 3 [0, 1, 2, 1, 4, 3, 1, 0, 2, 3, 4, 5, 0, 2, 3, 4] 9 これを達成する1枚の方法は、追い出したことがないことである0と2し、立ち退か1その最後の使用後は、できるだけ早く。 得点:これはコードゴルフです。少ないバイトが勝ちます。

10
Sequentia Filii Bonacci
ピサのレオナルド(1175年頃-1245年頃)はフィボナッチとして知られています。しかし、これは実際にはラテン語の「フィリウスボナッチ」(ボナッチの息子)の略語であり、18世紀に作られました(ウィキペディアによる)。 この課題では、間(文字通りの意味での)序数与えられます1回目と20回目を、あなたはに対応する項を返す必要がフィボナッチ数列。 ひねりは、序数がラテン語で与えられることです。 例: "duodecimus" →。898989 完全なI / Oテーブル input | meaning | output --------------------+---------+-------- "primus" | 1st | 0 "secundus" | 2nd | 1 "tertius" | 3rd | 1 "quartus" | 4th | 2 "quintus" | 5th | 3 "sextus" | 6th | 5 "septimus" | 7th | 8 …

1
放射線硬化クインを作る
昨夜、私は放射線強化クインチャレンジを探していましたが、それを見つけることができませんでした。誰もまだそれを聞いていないことがわかりました!だからここにある: あなたの仕事は、クインを作成することです。それは、空ではないコンピュータープログラムで、それを読み取らずに独自のソースを印刷します。さらに、元のプログラムから1バイト削除すると、新しいプログラムは元のプログラムのソースを出力するはずです。 これはコードゴルフであるため、回答はバイト単位で記録され、バイト数は少ない方が良いです。

11
タイムシートの計算
タイムシート 職場では、タイムシートに記入する必要があります。このタスクは、これを支援するコードを書くことです。 入力 スペースで区切られた1日の始まりと終わりを示すわずかに非標準の12時間時計で2回。3番目の数字は、昼食にかかった時間を表します。例えば 9:14 5:12 30 つまり、午前9時14分に作業を開始し、午後5時12分に作業を終了し、昼食に30分かかりました。 あなたはそれを仮定することができます 最初の列の時間は00:00(真夜中)から午後1時までで、2番目の列の時間は少なくとも午後11:59までです。 昼休みは営業日より長くありません! 入力形式は、指定された例のとおりでなければなりません。 仕事 コードは、これらのトリプルのファイル(または標準入力)を読み取り、各出力ごとに作業時間を読み取ります。この出力は時間数を示す必要があります。上記の例の場合: 7時間と58分から30分を差し引いた7時間28分です。 出力 出力では、(全体の)時間数と分数を指定する必要があり、59分を超えてリストすることはできません。つまり、2時間123分は出力できません。それとは別に、あなたのコードはあなたにとって便利な人間が読むことができるフォーマットで出力できます。 例 10:00 1:00 30 --> 2hr 30min 12:59 1:00 0 --> 0hr 1min 00:00 11:59 0 --> 23hr 59min 10:00 2:03 123 --> 2hr 0min
14 code-golf  date 

6
レカマンの複製
Recamánのシーケンスは次のように定義されます。 an=⎧⎩⎨0if n = 0an−1−nif an−1−n>0 and is not already in the sequence,an−1+notherwisean={0if n = 0an−1−nif an−1−n>0 and is not already in the sequence,an−1+notherwisea_n=\begin{cases}0\quad\quad\quad\quad\text{if n = 0}\\a_{n-1}-n\quad\text{if }a_{n-1}-n>0\text{ and is not already in the sequence,}\\a_{n-1}+n\quad\text{otherwise}\end{cases} または擬似コードで: a(0) = 0, if (a(n - 1) - n) > 0 and it is …

3
マルチレベルの無料駐車スペースファインダー
キッズ関連のイントロ 子供を遊園地に連れて行くたびに、子供たちは公園に近づくにつれて緊張し、駐車場にいるときに神経質になり、駐車する場所が見つかりません。そこで、駐車に費やす時間を最小限に抑えるために、最も近い無料駐車スペースを見つける方法が必要だと判断しました。 技術紹介 このような駐車場の表現を想像してください: ***************** * * * ··CC··C··CC·· * * ************* * * ··CCCCCCCCC·· * * * **********E****** この表現で*は、aは壁、·無料駐車スペース、E入り口、およびCすでに駐車されている車を意味します。すべての空白は、駐車する車が駐車場内を移動するために使用できる位置です。次に、この概念を3Dに拡張して、複数レベルの駐車場を作成します。 1st floor 2nd floor 3rd floor 4th floor ***************** ***************** ***************** ***************** * 1 * 2 * 3 * * * CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ····C··CCCCCC * * …

5
最近は複合体になるのがますます難しくなっています
空でないリスト所与Lより大きい整数の1、我々は定義D(L)最小の正の整数であり、その結果として、N + D(L)である複合それぞれについてNでLを。 シーケンスa nを次のように定義します。 0 = 2 a i + 1は、d(a 0、...、a i、a i + 1)> d(a 0、...、a i)となるようなa iより大きい最小の整数です あなたのタスク 次のいずれかです。 整数Nを取り、シーケンスのN番目の項(0インデックスまたは1インデックス)を返します 整数Nを取り、シーケンスの最初のN項を返します 何も入力せずに、シーケンスを永久に印刷します これはcode-golfなので、バイト単位の最短回答が勝ちです! Nが大きくなるにつれてコードが遅くなっても問題ありませんが、少なくとも2分以内に20個の最初の用語を見つけるはずです。 最初の用語 a 0 = 2およびd(2)= 2(2 + 2が合成されるように2を追加する必要があります) d(2、3)= 6であるため、a 1 = 3 ( 2 + 6と3 + 6が合成されるように6を追加する必要があります) d(2、3、5)= 7であるためa 2 …

19
文字列内の数値の加減算
文字列を入力として受け取り、文字列内のすべての数字の加算/減算を実行し、それらの演算の合計を結果として出力します。 ルール 文字列の数字は左から右に読み取られます 数字(n)が奇数の場合、次の数字(n + n1)で加算を実行します 数字(n)が偶数の場合、次の数字(n-n1)で減算を実行します 文字列の最後の数字に達した場合は、文字列の最初の数字で操作を実行します 出力は、結果のすべての値の合計になります 文字列に1桁しかない場合は、それ自体で操作を実行します(n + nまたはnn) 文字列に数字がない場合、出力は0 例 Input: r5e6o9mm!/3708dvc Process: (5+6) + (6-9) + (9+3) + (3+7) + (7+0) + (0-8) + (8-5) Output: 32 ノート 機能または完全なプログラムのいずれかが受け入れられます 最大入力長は、文字列入力の言語の制限に依存します 文字入力に制限はありませんが、半角数字のみが出力にカウントされます 最少バイト数が勝つ
14 code-golf  string 

9
正の合理的要素に番号を付ける
正の有理数は、次のプロセスで数えることができます。 ゼロの序数は0です 行a、列bにa / bが含まれるように、他の数値をグリッドに配置します 斜めのジグザグを右上から左下にプロットします ジグザグに沿って発生した一意の数字の集計を実行してください ジグザグの写真は次のとおりです。 したがって、発生した番号は、順番に 1/1, 2/1, 1/2, 1/3, 2/2, 3/1, 4/1, 3/2, 2/3, 1/4, 1/5, 2/4, 3/3, 4/2, 5/1, 6/1, 5/2, 4/3, 3/4, 2/5, 1/6, 1/7, 2/6, 3/5, 4/4, 5/3 ... そして、遭遇する単純化された一意の数字は 1, 2, 1/2, 1/3, 3, 4, 3/2, 2/3, 1/4, 1/5, 5, 6, 5/2, …

10
Kaadiシステムのデコード
埋もれた宝の山を描いた古いインドの写本に出会いました。原稿には宝物の場所も記載されていますが、一部の重要な数字は間接的にテキストにエンコードされています。テキストは、より一般的な「カタパヤディ」システムの制限されたサブセットである「カアディ」システムを使用していることがわかります。 (カタパヤディシステムは、数字を文字としてエンコードする古代インドのシステムで、長い数字を覚えるためのニーモニックとしてよく使用されます。) ここでのタスクは、Kaadiシステムでエンコードされたテキストをデコードし、数値を出力することです。 詳細 入力文字 KaadiシステムはKatapayadiシステムのルールに基づいていますが、子音の最初の行のみを使用します。ここのテキストはラテンアルファベットに音訳されており、次のもののみが含まれていることがわかっています。 母音「a」、「e」、「i」、「o」、「u」 子音「g」、「k」、「c」、「j」、およびそれらの大文字の形式(これらの子音の吸引形式を表す)、および「ṅ」および「ñ」。 (言語でより便利な場合は、「ṅ」を「ng」、「ñ」を「ny」として受け取り、処理することもできます。) 値の割り当て このシステムでは、 母音が続く子音にはそれぞれ数字が関連付けられます。これらは: 'k'=>1, 'K'=>2, 'g'=>3, 'G'=>4, 'ṅ'=>5, 'c'=>6, 'C'=>7, 'j'=>8, 'J'=>9, 'ñ'=>0 ただし、これらの子音の後に母音が続く場合にのみ、これらの値が適用されることに注意してください。 (kacCiと同じ値を持ち、kaCikaCi中央のcには母音が伴わないため、は =(1,7))。 さらに、2つの母音の最初の母音または配列は0を表し、aikaCi次のようになりますai、ka、Ci=(0,1,7) テキストの真ん中の他の場所にある余分な母音にkauCiaは値がありません:kaCiはと同じで、余分な母音は無視できます。 最終的な数値 文字の数字が計算されると、それらの数字の逆順として最終的な数値が取得されます。つまり、テキストの最初の数字が最終値の最下位桁になります。 例えば。 GucCihas GuとCi、(4、7)なので、最終値は74 kakakaGoです。(1,1,1,4)なので、答えは4111です。 guṅKoある(3,2)ので、(23をコードgungKoASCIIを使用する場合-同等。) 入力 Kaadiエンコードされたテキストを含む文字列 母音と上記の子音のみが含まれます 母音は常に小文字で、2個以下のグループで発生します Unicode文字「ṅ」と「ñ」またはASCII同等の「ng」と「ny」のいずれかとして、5と0の文字を受け入れることを選択できます(どちらの形式でも小文字です) スペースや句読点がないと仮定できます 出力 上記の規則で与えられたテキストの数値 空の入力の場合、0に加えて、選択した言語の空の出力またはfalse-y出力が受け入れられます 無効な入力(母音と上記の子音以外の入力)の場合、出力は未定義-何でも テストケース "GucCi" => 74 "kakakaGo" => …

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