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

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


5
バイナリツリーを解放する
したがって、コンピューターサイエンスの基本的な概念を読む前に。 バイナリツリーは、動的に割り当てられた構造です(通常、順序付けられたストレージに使用されます)。 その性質のため、バイナリツリーの走査は通常再帰的です。 これは、ループの2つの方法がある場合、(ループを介した)線形トラバーサルが自然ではないためです。 再帰的:これは、それ自体を呼び出す関数を意味します。 昔ながらの言語では、メモリ管理には手動のメモリ管理が必要です。 マニュアル:自分でやらなければならないことを意味します。 手動でメモリ管理を行う場合、実際にツリーの各メンバーを解放するように、基礎となるシステムに依頼する必要があります。 無料:メモリをグローバルpoosに回復し、再利用できるようにします。メモリが不足することはありません。 解放:これは、関数free()を呼び出して、回復したいポインターを渡すことによって行われます。 ポインター:仮想スティックのようなものです。最後はメモリです。メモリを要求すると、メモリのあるポインタ(仮想スティック)が与えられます。完了したら、ポインター(仮想スティック)を返します。 再帰的な解決策: freeTree(Node* node) { freeTree(node->left); freeTree(node->right); free(node); } 問題は、再帰は同じ関数を繰り返し呼び出していることを意味するということです。これによりスタックが大きくなります。スタックを大きくすると、より多くのメモリが使用されます。ツリーを解放する理由は、より多くのメモリを使用してメモリを戻す必要があるためです(メモリの両方のビットを取り戻す場合でも)。 最後に質問: したがって、問題の中心は、上記の再帰バージョンを線形ソリューションに変換することです(したがって、メモリを使用する必要はありません)。 ノードタイプを指定します typedef struct Node Node; struct Node { Node* left; Node* right; }; これらのノードのツリーを解放する関数を作成します。 制限事項: 再帰を使用できません(間接的にも) 追跡用のダイナミックスペースを割り当てることができません。 O(n)ソリューションがあることに注意してください 勝者: 最高の複雑さ。 タイブレーク1:最初の送信 タイブレイク2:キャラクターの最小数。

10
天気予報
次の7日間の天気を予測する最短のプログラムを書く (stdinからの)入力は平日と季節です (標準出力への)出力は平日 7行で、温度は摂氏です 平日は入力された平日に始まります 気温は季節に応じた範囲の乱数です 春10〜30度 夏20〜40度 秋5-25度(秋は秋の同義語です) 冬-5〜15度 サンプル入力 Thursday Winter サンプル出力 木曜日-1 金曜日3 土曜日8 日曜日7 月曜日10 火曜日10 水曜日-1 プログラムは、同じ入力で実行されるたびに同一の出力を持つことはできません
13 code-golf  random 

2
圧縮率が最も低い画像を作成する
「写真は千の言葉に値する」-それで、古いことわざは言う。平均的な単語の長さは約4文字なので、写真は4kBの情報を伝えます。しかし、情報ではなく、どのくらいのエントロピーが絵で伝えることができますか? あなたの仕事は、可能な限り最高のエントロピーで、サイズがちょうど4,000バイトのイメージを生成することです。選択した任意の言語、ライブラリ、または画像形式を使用でき、ここに画像をアップロードする限り、コンソールまたはファイルに出力できます。 得点 スコアは、DEFLATEアルゴリズムとデフォルト設定(具体的にはcommand)を使用して、GNU tarバージョン1.28およびgzipバージョン1.6で画像を圧縮した場合の圧縮率(4000÷圧縮サイズ)ですtar -czvf out.tar.gz image。最小の圧縮率が優先されます。

28
最短16進ダンププログラム
チャレンジ ファイルの各バイトを表示するコンソールプログラムを作成します。 勝ち これはcode-golfであるため、バイト数が最も少なくなります。 ルール プログラムはコンソールアプリケーションである必要があります。つまり、何らかのコマンドラインインタープリターから実行されます。 各バイトは、スペースで区切られた大文字の16進数でなければならず、2桁でなければなりません。(1桁の場合は、その前に番号0を入れます) ファイルは、IOまたは代替を使用して読み取る必要があり、ハードコードされていません。 ファイルパスは、コマンドライン引数またはユーザープロンプト(STDINなど)として指定する必要があります。 抜け穴はありませんしてください。 例 test.txt(LFで終わる) Hello World! $ ./hexdump.exe test.txt 48 65 6C 6C 6F 20 57 6F 72 6C 64 21 0A
13 code-golf 

29
セットのN番目のサブセット
タスク 与えられたセット S=[1,2,3,4,5,6,7,8]S=[1,2,3,4,5,6,7,8]S = \left[{1,2,3,4,5,6,7,8}\right] および整数 0≤N&lt;2|S|0≤N&lt;2|S|0 \leq N < 2^{|S|} N番目のサブセットを見つけます。 入出力 Nは、stdinで符号なし整数として指定されます。あなたはあなたの言語に適した形式でN番目のサブセットを印刷する必要があります(この含むことができ[1,2,3]、{1,2,3}、[1, 2, 3]、1 2 3、1,2,3などのために長い間、それは人間が読めるな限りテキスト形式)。 サブセットについて少し サブセットとベース2の数値の間には関係があります。各数字 didid_{i}は、セットのi番目の要素がサブセット内にあるかどうかを指定します。たとえば、00000000は空のセットで、10000001は[1,8](最後と最初の要素)を含むサブセットです。N番目のサブセットを取得するには、数値を基数2に変換すると、サブセットにすべての要素が含まれます(di&gt;0di&gt;0d_{i} > 0。したがって、3番目のサブセット(3 = 00000011)にはが含まれます[1,2]。右端の数字は数字#0です。印刷しても構いません[2,1]。セットをソートする必要はありません。 補遺: はい、セットはに固定されてい1..8ます。セットは入力の一部ではありません。入力はちょうどNです。 はい、別の入力フォームを使用できます。 すべてのNのすべての予想出力:https : //tio.run/##SyotykktLixN/f/fyNS02qIoP8soJd1CwSAg2kY32LPWPaoqs7jg/38A
13 code-golf 

4
Pythonの128バイト以内で可能な限り低いパイリントスコアを取得する
pylintには、コードに与えるスコアの下限はありません。次のメトリックを使用してコードをスコアリングします。最大スコアは10です。 10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) python 3.6を使用して、次のようなプログラムを作成してみてください。 コマンドライン(つまりpython script.py)から実行すると「Hello World」を出力し、他の出力は出力しません。 から可能な最低スコアを取得しpylintます(デフォルト設定)(つまりpylint script.py) 厳密に128バイト以下のサイズです。

13
QBasicでのゴルフのヒント
QBasicでゴルフをするための一般的なヒントは何ですか?私は、少なくともQBasicに特有のゴルフ問題全般のコーディングに適用できるアイデアを探しています(たとえば、「コメントの削除」は答えではありません)。 QB64エミュレーターに関するヒントも歓迎します。Microsoft QBasicにはない追加機能がいくつかあります。
13 code-golf  tips  basic 

7
許容されるシーケンスのテスト
エグゼクティブサマリー:整数の入力シーケンスが「許容される」かどうかをテストします。これは、モジュラスのすべての剰余クラスをカバーしないことを意味します。 「許容される」シーケンスとは何ですか? 整数m≥2が与えられた場合、mを法とする剰余類は、共通の差mのmの算術級数になります。たとえば、m = 4の場合、4を法とする4つの剰余クラスは ..., -8, -4, 0, 4, 8, 12, ... ..., -7, -3, 1, 5, 9, 13, ... ..., -6, -2, 2, 6, 10, 14, ... ..., -5, -1, 3, 7, 11, 15, ... k番目の剰余クラスは、mで除算したときの剰余がkに等しいすべての整数で構成されます。(負の整数に対して「剰余」を正しく定義している限り) 整数a1、a2、...、akのシーケンスは、剰余クラスの少なくとも1つと交差しない場合、mを法として許容されます。たとえば、{0、1、2、3}および{-4、5、14、23}は4を法とする許容値ではありませんが、{0、1、2、4}および{0、1、5、9 }および{0、1、2、-3} は 4を法として許容されます。また、{0、1、2、3、4}は4を法として許容されませんが、{0、1、2} は 4を法として許容されます。 最後に、整数のシーケンスは、すべての整数m≥2に対してモジュロmで許容される場合、単純に許容されます。 チャレンジ 入力として整数のシーケンスを受け取り、シーケンスが許容される場合は(一貫した)Truthy値を返し、シーケンスが許容されない場合は(一貫した)Falsy値を返すプログラムまたは関数を作成します。 整数の入力シーケンスは、任意の妥当な形式にすることができます。入力シーケンスに少なくとも2つの整数があると仮定できます。(必要に応じて入力整数が異なると仮定することもできますが、おそらく役に立ちません。)正および負の整数(および0)を処理できる必要があります。 通常のコードゴルフスコアリング:バイト単位の最短回答が勝ちます。 サンプル入力 …

4
三角形のフェルマー点を計算する
これは、三角形の中心に多少似ていますが、異なる点があります。フェルマーポイント AP + BP + CPの値が最小となるような三角形ABCの点Pです。次の2つのケースがあります。 120度を超える角度がある場合、その頂点はフェルマーポイントです。それ以外の場合は、ABCの各辺に正三角形を描きます。各正三角形の遠い頂点を三角形ABCの​​反対の頂点に接続します。3つの正三角形のそれぞれに対してこれを行うと、3つの線すべての共通の交点が1つになります。これがフェルマーポイントです。 適切なマシンで5秒以内に実行されるはずです。 入力:3点のセット。必ずしも整数ではありません。これは、ネストされた配列、文字列、タプルのリストなど(あなたの言語に合ったもの)として取ることができます。 出力:フェルマーポイントの座標。ここでも、言語はポイントを最適に処理します。浮動小数点の不正確さは、あなたに対してカウントされません。 テストケース: [[1, 1], [2, 2], [1, 2]] --&gt; [1.2113248654051871, 1.788675134594813] [[-1, -1], [-2, -1], [0, 0]] --&gt; [-1, -1] [[-1, -1], [1, -1], [0, 1]] --&gt; [0, -0.42264973081037427] [[0, 0], [0.5, 0.8660254037844386], [-5, 0]] --&gt; [0, 0] [[0, 0], [0, …

9
CamelCase2snake_case()
snake_caseにキャメル記法のテキストを変換する機能を書く:FunctionForHTMLManipulationとなりfunction_for_html_manipulation 入力テキストは、多くの言語で単一の適切な識別子になります。英語の文字で始まり、その後に任意の数の英語の文字または数字が続く必要があります。他の文字(スペース、シンボルなど)は使用できません。 CamelCasedテキスト内の各「単語」は、テキストの先頭または数字の直後を除き、大文字で始まり、その後にゼロまたはそれ以上の文字が続きます。すべて同じです。数字のグループは個別の単語と見なされますが、そのまま通過します。 つまり、小文字の後に大文字が続く場合は、単語の区切りを示します。隣り合う文字と数字は、単語の区切りを示します。大文字の後に別の大文字と小文字が続く場合は、単語の区切りを示します。 ...lU...=&gt; ...l_u... ...l9...=&gt; ...l_9... ...U9...=&gt; ...u_9... ...9l...=&gt; ...9_l... ...9U...=&gt; ...9_u... ...UUl...=&gt;...u_ul... 両方Buy24Beersにbuy24beersなりbuy_24_beersます。 MacDonaldAndObrianになりmac_donald_and_obrianます。 MACDonaldAndOBrianになりmac_donald_and_o_brianます。
13 code-golf  string 

6
ブリッジハンドスコアリング
コントラクトブリッジを非常に興味深いものにしているものの1つは、非常に複雑な「人工」メタゲームです。採点のこのシステムは、そのほんの一部です。 Bridgeは、トリックをとるカードゲームです。各プレイヤーには13枚のカードが渡され、ゲームは入札から始まります。入札は、ゲームの残りの部分をどのようにプレイするかを決定するので、重要な部分です。あなたとあなたのパートナーが高すぎる(または低すぎる)入札をしないようにするために、この人工スコアリングシステムは、あなたのハンドがどれほど良いかを示すために開発されました。 得点 次にサンプルハンドを示します。 S:KQT5 H:J72 D:965 C:AK8 S、H、D、Cはスーツ(スペード、ハート、ダイアモンド、クラブ)を表し、残りはそれらのスーツのカードです。したがって、このハンドには、スペードのクイーン(Q)、スペードのキング(K)、スペードの10(T)、スペードの5、ハートのジャック、ハートの7などがあります。 スコアリングシステムは次のように機能します。 エース(A)ごとに4ポイント、キング(K)ごとに3ポイント、クイーン(Q)ごとに2ポイント、ジャック(J)ごとに1ポイントを獲得できます。他のカードはポイントを与えません。 スーツの4番目以降のカードはすべて1ポイントを与えます。したがって、ハートが6つある場合、2ポイントを獲得します。 カードが2枚しかないスーツでは、1ポイントが与えられます(これはダブルトンです)。カードが1枚しかないスーツでは、2ポイントが与えられます(これはシングルトンです)。特定のスーツにカードがない場合、3ポイントを獲得します(これは無効です)。(通常、これらはパートナーとの訴訟で合意した場合にのみカウントされますが、チャレンジをより面白くするためにそれらを含めています。) したがって、上記のハンドには13ポイントがあります。 チャレンジ 上記の形式のブリッジハンドが与えられたら、そのハンドのポイント数を計算します。スーツは常にスペード、ハート、ダイヤモンド、クラブの順にリストされ、カードは常にA、K、Q、J、T、9-2の順にソートされます。 サンプルの入力と出力 S:KQT5 H:J72 D:965 C:AK8 \-&gt; 13 S:AKQT6 H:54 D:J83 C:732 \-&gt; 12 S: H:KQT8754 D:A86 C:432 \-&gt; 15 S:9876 H:843 D:652 C:432 \-&gt; 0 S:AKQT5 H:AQJ6 D:Q3 C:AK \-&gt; 28 これはcode-golfなので、バイト単位の最短コードが優先されます。

10
素数インデックス付きの素数
最初の10000個の素数付き素数を出力/返すプログラムまたは関数を作成します。 n 番目の素数を呼び出すとp(n)、このリストは 3, 5, 11, 17, 31, 41, 59 ... 1366661 なぜなら p(p(1)) = p(2) = 3 p(p(2)) = p(3) = 5 p(p(3)) = p(5) = 11 p(p(4)) = p(7) = 17 ... p(p(10000)) = p(104729) = 1366661 標準的な抜け穴は禁止されており、標準的な出力方法が許可されています。完全なプログラム、名前付き関数、または匿名関数で答えることができます。
13 code-golf  math  primes 

7
レトロロケットを印刷する
(このSOの質問に触発された) 入力として、単一の正の整数nが与えられます。 できるだけ少ない文字で、頭部、尾部、およびn個のセグメントで構成される本文を含むASCIIアートのロケットを出力します。末尾のスペースや改行はありません。 ロケットの頭と尾は、nのどの値でも常に同じです。ボディは、交互に変わる2つの異なるタイプのセグメントで構成されています。例は、ロケットの構造を明確にする必要があります。 n = 1の出力 /**\ //**\\ ///**\\\ ////**\\\\ /////**\\\\\ +=*=*=*=*=*=*+ |\/\/\/\/\/\/| |.\/\/..\/\/.| |..\/....\/..| |../\..../\..| |./\/\../\/\.| |/\/\/\/\/\/\| +=*=*=*=*=*=*+ /**\ //**\\ ///**\\\ ////**\\\\ /////**\\\\\ n = 2の出力 /**\ //**\\ ///**\\\ ////**\\\\ /////**\\\\\ +=*=*=*=*=*=*+ |../\..../\..| |./\/\../\/\.| |/\/\/\/\/\/\| |\/\/\/\/\/\/| |.\/\/..\/\/.| |..\/....\/..| +=*=*=*=*=*=*+ |\/\/\/\/\/\/| |.\/\/..\/\/.| |..\/....\/..| |../\..../\..| |./\/\../\/\.| |/\/\/\/\/\/\| +=*=*=*=*=*=*+ /**\ //**\\ …

4
端数を削減しない方法
分数を間違った方法で減らす このコードとゴルフのチャレンジでは、間違った方法で減らすことはできますが、それでも同じ数になる分数を見つける必要があります。 注:ここで間違った方法で分数を減らすことには正確な定義があります。詳細を参照してください。 例: 64/16 = 6 4/1 6 = 4/1 = 4 もちろん、両方の6esを打つことはできませんが、ここでも正しい値になります。この課題では、このような例を見つける必要があります。 詳細 n入力として1つの正の整数を受け入れ、形式で分数のリスト/配列を出力/返す関数/プログラムを作成する必要があります numerator1,denominator1,numerator2,denominator2,... プログラムは、各分画のために見つけるために持っているa/bとa+b=nし、a,b&gt;0それを軽減することができるかどうか間違った方法を。(従来の方法で削減できるかどうか、または削減の多くの可能性があるかどうかは関係ありませんが、少なくとも1つの方法で間違った方法で削減できればよいだけです。) 定義 間違った方法は:割合を低減することができる間違った方法を場合にのみ、およびbで連続した数字が現れるのと同じ順序とあなたが部分文字列を削除する場合分数滞在の値が同じであれば。 例:1536/353を16/3に「減らす」ことができますが、これらの2つの値は等しくないため、この割合を間違って減らすことはできません。 間違った方法を減らすというこの定義には、正しい方法で減る分数も含めることができることに注意してください。これは、有効なステップであっても間違った方法110/10 = 11/1を減らすという定義の範囲内です。 得点 最小バイト数が優先されます。整数を受け入れ、stdin / stdoutを使用する配列またはプログラムを返す関数またはプログラムを作成するか、変数にnを保存し、プログラムの最後にリストを他の変数に保存する必要があると考えることができます。 テストケース 次のテストケースを含めてください(追加するテストケースを教えてください。それらのフラクションの数/予想される例の数はわかりません) n=80 (64/16 should be in this list) n=147 (98/49 should be in this list) n=500 (294/196 should be in this …

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