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

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

15
フィボノミアル係数を計算する
バックグラウンド フィボナッチ数列は次のように定義されます f(1) = 1 f(2) = 1 f(n) = f(n-1) + f(n-2) 階乗に似たフィボノリアルは、最初のn個のフィボナッチ数の積です。 g(n) = f(1) * f(2) * ... * f(n-1) * f(n) 二項係数と同様のフィボノミアル係数は次のように定義されます a(n, 0) = 1 a(n, k) = g(n) / ( g(n-k) * g(k) ) = f(n) * f(n-1) * ... * f(n-k+1) / ( …

4
DAGは推移的な削減ですか?
この課題の目的は、有限有向非巡回グラフ(DAG)を与えられ、グラフが推移的縮小であるかどうかを判断することです。 DAGと推移的削減の概要: DAGは有向エッジを持つグラフです(つまり、そのエッジ上を一方向にのみ移動できます)。そのため、グラフ上の開始ノードがある場合、開始ノードに戻ることはできません(つまり、サイクルはありません)。 開始ノードがある場合、任意の正の数のエッジを介してグラフ内の別の終了ノードに移動できる場合、その終了ノードは開始ノードから到達可能として定義されます。一般的なDAGには、開始ノードからターゲット終了ノードまでの複数のパスが存在する場合があります。たとえば、次のひし形グラフをご覧ください。 ノードに到達するためにDからA、あなたはパスを取ることができますA->B->DかA->C->D。したがって、Dから到達可能ですA。ただし、node Bから開始するノードに到達するために使用できるパスはありませんC。したがって、node Bはnode から到達できませんC。 グラフのすべての開始ノードの到達可能ノードのリストとして、グラフの到達可能性を定義します。したがって、同じダイアモンドグラフの例では、到達可能性は次のとおりです。 A: [B, C, D] B: [D] C: [D] D: [] 上記のグラフと同じ到達可能性を持つ別のグラフを以下に示します。 ただし、この2番目のグラフには、元のグラフよりも多くのエッジがあります。グラフの推移的削減は、エッジの数が最も少なく、元のグラフと同じ到達可能性を持つグラフです。したがって、最初のグラフは2番目のグラフの推移的な減少です。 有限DAGの場合、推移的縮約が存在することが保証されており、一意です。 入力 入力は「リストのリスト」であり、外部リストは頂点の数の長さを持ち、各内部リストは関連するノードを離れるエッジの数の長さであり、宛先ノードのインデックスを含みます。たとえば、上記の最初のグラフを説明する1つの方法は次のとおりです(ゼロベースのインデックス付けを想定)。 [[1, 2], [3], [3], []] 任意の整数値で最初のノードのインデックス作成を開始できます(0または1ベースのインデックス作成など)。 入力は、必要な入力ソース(stdio、関数パラメーターなど)から取得できます。追加情報が提供されない限り、正確な入力形式を自由に選択できます。たとえば、stdioから入力を取得する場合、各行を関連ノードのエッジのリストにすることができます。例: 1 2 3 3 '' (blank line) 各隣接リストのインデックスは必ずしもソートされているわけではなく、2つのノードを接続する複数のエッジが存在する可能性があります(例:)[[1,1],[]]。入力グラフが弱く接続されており、サイクルが含まれていない(つまり、DAGである)と仮定できます。 出力 与えられた入力DAGが推移的還元である場合、出力は真実であり、そうでない場合は偽の値です。これは、任意のシンク(stdio、戻り値、出力パラメーターなど)に対して行うことができます 例 すべての例では、0ベースのインデックス付けを使用しています。 [[1,2],[3],[3],[]] true [[1,2,3],[3],[3],[]] false [[1,1],[]] false [[1,2,3,4],[5,6,7],[5,8,9],[6,8,10],[7,9,10],[11,12],[11,13],[12,13],[11,14],[12,14],[13,14],[],[],[],[]] …

30
ファイルを作成して書き込む
チャレンジ 新しいファイルを作成し、文字列Hello Worldを書き込みます。 制限事項 チャレンジは、ファイルシステム内のディスク上のファイルに書き込む必要があります。 このファイルは、インタープリターの通常の操作中に生成されたログファイルではない場合があります。 ファイルには文字列のみを含める必要がありますHello World。末尾の改行または最小限の空白を含めることができます。他のコンテンツはありません。 プログラムの実行に必要な場合を除き、コマンドラインフラグ/パイプ(など)は許可されません。(例perl -p) ノート これはcode-golfであるため、バイト単位の最短プログラムが優先されます。 ルールの精神ではなく、手紙に従ってください。

3
EU推定サインを描く
欧州連合指令(UnicodeのU + 212e、この課題のために単に印刷することはできません)で使用される「推定」記号の仕様は非常に正確です。 この質問からいくつかの制限をコピーするには:ベクターまたはラスターグラフィックスを使用して、シンボルをファイルまたは画面にレンダリングします。出力をラスタライズする場合、画像のサイズは264ピクセル×240ピクセル以上である必要があります。その他の補助線または長さインジケータは描画しないでください。

1
GolfScriptで文字列を整数に強制する
GolfScriptは、次の「優先順位」シーケンスに従って自動的に値を強制します。 整数→配列→文字列→ブロック (最低から最高にリストされています。) これは"1"7+、文字列が整数よりも優先度が高いため、文字列"17"をスタックに残します(スタックには残しません8)。 [ GolfScriptの退役軍人に–それぞれの知性をin辱したことに対する謝罪。] これを他の方法でどのように行うことができますか?つまり、文字列を整数に強制するには?
11 tips  golfscript 

3
2つのベクトルの線形結合
エグゼクティブサマリー 2つのベクトルを表す入力とそれぞれの「重み」を指定すると、それらのベクトルの加重和も表す出力が生成されます。 チャレンジ 入力は、次の文字の1つ以上の行で構成されます。 2次元平面の原点を表す数字0の正確な1回の出現。 正確に他の2桁(1から9。同じ数字である場合とそうでない場合がある)、その原点に対する位置はベクトルを表し、その値はこれらのベクトルに付加された重みを表します。 いくつかの「背景文字」。ソルバーは特定の背景文字を選択できます。たとえば、「。」を選択します (主に人間が読みやすいように)。または、背景文字は空白のように見えるものであれば何でもかまいません。 (ソルバーは、入力が単一の複数行文字列であるか、1行文字列の配列であるかを選択できます。) たとえば、入力 ....2 .0... ...3. 重み2の座標(3,1)のベクトルと、重み3の座標(2、-1)のベクトルを表します。 出力は入力とほぼ同じで、次の変更が必要です。 ソルバーによって選択され、入力ベクトルの加重和によって指定された位置に(追加的に、入力ベクトルの適切な線形結合である位置に)追加される「結果文字」。 原点、2つの入力ベクトル、および出力ベクトルを同じ画像に収めるために必要な数の背景文字。必要に応じて、追加の背景文字を含めることができます。唯一の制約は、背景文字が可視文字である場合、出力全体の形状が長方形でなければならず、ベクトルを表さないすべての文字が背景文字でなければならないということです。(空白文字が背景文字として使用される場合、これらの制約を実施する必要はありません。) (一般に、重みaの1つのベクトル(v、w)と重みbの2番目のベクトル(x、y)がある場合、それらの加重和はa(v、w)+ b(x、y)=(av + bx、aw + by)。) 前の例では、適切な線形結合は2 *(3,1)+ 3 *(2、-1)=(12、-1)です。結果の文字として「X」を使用すると、出力は次のようになります ....2......... .0............ ...3.........X または ................ ...2............ 0............... ..3.........X... ................ ................ 通常のコードゴルフスコアリング:バイト単位の最短回答が勝ちます。 入出力の例 空白が使用される場合、上記の入力は次のようになります 2 0 3 出力は次のようになります 2 0 3 X 先頭/末尾の空白文字/行は無関係です。読者に見えない場合は問題ありません。(そうは言っても、残りの例では、読みやすくするために、背景文字に "。"を使用することに戻ります。) …

9
ASCIIアートを3次元に
この課題では、ASCIIアート(通常は2D)を3Dにする必要があります! どうやって? このような、 X X DD X D D X X DD に... X X DD X X DD D X X DDDD X XDDD X X DD それでは、どうすればそれができますか? アスキーアートとを指定するとN、このN回数を繰り返します。 すべてのキャラクター(これをA)と呼びます: let Bは、正確に1つ右から1つ上の文字ですA 場合はB空白であるか定義されていません。 に設定BしAます。 スペック 最初の入力は、改行文字を含む文字列または2D ASCIIアートを表す文字列のリストです。 %END%入力終了のタグ付けに使用できますが、これは必須ではありません。 2番目の入力はになりますN。正の整数になります。 文字列のすべての行は同じ長さになります。 例 入力: ("###\n###",1) 出力: ### #### ### ルール 基本的なコードゴルフ規則が適用されます。 …

2
文字列の実行を計算する
W. Rytterによる文字列の実行数から取られた以下の定義を考慮してください。単語、文字列、部分文字列はすべてほぼ同義語であることに注意してください。 文字列内の実行は、文字列内の拡張不可能な(同じ最小期間を持つ)定期的なセグメントです。 単語wの周期pは、この方程式の両側が定義されるたびにw [i] = w [i + p]となるような正の整数pです。per(w)がwの最小周期のサイズを示すものとします。per(w)<= | w | / 2の場合、単語wは周期的であると言います。 たとえば、文字列を考えますx = abcab。per(abcab) = 3としてx[1] = x[1+3] = a、x[2]=x[2+3] = bより短い期間はありません。abcabしたがって、文字列は周期的ではありません。ただし、文字列ababはper(abab)= 2のように周期的です。 文字列wの実行(または最大周期性)は、j> = iの区間[i ... j]です。 w [i ... j]は、周期p = per(w [i ... j])の周期的な単語です。 それは最大です。正式には、w [i-1] = w [i-1 + p]もw [j + …
11 code-golf  string 

5
ストラテゴの戦いを評価する
ゲームStrategoでは、主なゲームメカニズムは、対戦相手のピースを自分のもので攻撃することです。このチャレンジでは、あなたの仕事はこれらの戦いの1つをシミュレートし、誰が生き残るかを言うことです。 スペック 入力として、Strategoピースを表す文字列のペアを取得します。ピースは"S 1 2 3 4 5 6 7 8 9 10 B"(SスパイでありB、爆弾です)の1つです。ペアの最初は攻撃者で、2番目は攻撃されます。 戦闘の結果を決定するためのルールは次のとおりです。 数値が大きいほど、小さい数値に勝ります["4", "6"] -> ["6"]。 両方が同じ場合、両方とも死にます:["7", "7"] -> []。 スパイは下部にあり、下にもあり1ます["S", "2"] -> ["2"]。 ただし、スパイがを攻撃する10と、スパイが勝ちます:["S", "10"] -> ["S"]。 ただし、が10攻撃している場合は、通常のルールが引き続き適用されます["10", "S"] -> ["10"]。 何かが爆弾を攻撃すると、爆弾が勝ちます:["5", "B"] -> ["B"]。 ただし、鉱夫(a 3)は爆弾を除去できます["3", "B"] -> ["3"]。 爆弾が攻撃者になることはありません。 スポッター(a 1)は、通常のメカニズムを使用して攻撃できますが、他のプレイヤーのランクを「推測」することもできます。これは、適切な表記で示すことができます。 推測が正しければ、他のピースは死にます:["1(5)", "5"] -> …

3
すべてのアームストロング番号
アームストロング数(別名、完全な数、または自己陶酔的な数)は、そのn桁の累乗の合計に等しいn数です。ここで、は数字の桁数です。 たとえば、153持っている3数字を、および153 = 1^3 + 5^3 + 3^3ので、153アームストロングの番号です。 たとえば、8208持っている4数字を、および8208 = 8^4 + 2^4 + 0^4 + 8^4ので、8208アームストロングの番号です。 2013年11月14日、数値がアームストロングの数値であるかどうかをテストしました。 ここで、すべてのアームストロング番号をリストしたいと思います。88アームストロングの数字は正確にあります: 1 2 3 4 5 6 7 8 9 153 370 371 407 1634 8208 9474 54748 92727 93084 548834 1741725 4210818 9800817 9926315 24678050 24678051 88593477 146511208 472335975 534494836 912985153 …

6
最長算術部分列
整数の空でない有限シーケンスを指定すると、最大長の算術サブシーケンスを返します。 同じ最大長の倍数がある場合、それらのいずれかを返すことができます。 定義: 演算シーケンスは、シーケンスであるa(1),a(2),a(3),a(4),...定数が存在するように、cそのようなa(m+1)-a(m) = cすべてのためにm。つまり、次の2つの用語の差は一定です。 シーケンスを考えるとサブはシーケンスであると、すべてのために。つまり、元のシーケンスを取り、必要な数のエントリを削除します。b(1),b(2),b(3),b(4),...b(s(1)),b(s(2)),b(s(3)),b(s(4)),...1 <= s(1)s(m) < s(m+1)m 例 Input Output [4,1,2,3,6,5] [1,3,5] or [1,2,3] [5,4,2,-1,-2,-4,-4] [5,2,-1,-4] [1,2,1,3,1,4,1,5,1] [1,1,1,1,1] or [1,2,3,4,5] [1] [1] より長いテストケース: Length: 25 Input: [-9,0,5,15,-1,4,17,-3,20,13,15,9,0,-6,11,17,17,9,26,11,5,11,3,16,25] Output: [15,13,11,9] or [17,13,9,5] Length: 50 Input: [35,7,37,6,6,33,17,33,38,30,38,12,37,49,44,5,19,19,35,30,40,19,11,5,39,11,20,28,12,33,25,8,40,6,15,12,27,5,21,6,6,40,15,31,49,22,35,38,22,33] Output: [6,6,6,6,6] or [39,33,27,21,15] Length: 100 Input: [6,69,5,8,53,10,82,82,73,15,66,52,98,65,81,46,44,83,9,14,18,40,84,81,7,40,53,42,66,63,30,44,2,99,17,11,38,20,49,34,96,93,6,74,27,43,55,95,42,99,31,71,67,54,70,67,18,13,100,18,4,57,89,67,20,37,47,99,16,86,65,38,20,43,49,13,59,23,39,59,26,30,62,27,83,99,74,35,59,11,91,88,82,27,60,3,43,32,17,18] Output: [6,18,30,42,54] or …

3
AppleSauceフェーダー
当時、1337人の子供全員がチャットルームでテキストフェーダーを使用していました。君たちのことは知らないが、彼らのようにクールに感じたい。唯一の問題は、古いスクリプトとアプリケーションが、それらが作成されたソフトウェアと大きく結びついていることです。そのため、この驚くべき機能をどこでも利用することはできません。また、ソリューションを簡単に移植できるようにしたいので、フロッピーディスクに収まるようにコードをできる限り小さくする必要があります(ソースコードが大きすぎる場合は、フロッピーを1枚しか持ちません私は複数を運ぶことができます:P)。 入力 色のリスト(rgb、hex、namesなど) フォーマットするテキスト プログラムでは、色のリストに少なくとも2色が含まれている必要があります。 フォーマットするテキストの長さはゼロより大きくすることができ、文字は印刷可能なアスキーに制限されます。(ヒント:長いテキスト入力では、連続する文字の中間色を再利用する必要がある場合があります) 出力 出力テキストは、フォントおよび/またはマークアップ/スタイリング以外の点で入力テキストと異なるべきではありません(注:出力にhtmlマークアップが含まれている場合、入力をhtmlエンコードする必要があります)。マークアップ/スタイリング(htmlスタイルタグ、コンソールの色など)を使用してテキストを出力したり、色あせたテキストの画像を出力したりできます。入力にこの要件を満たすのに十分な文字が含まれていない場合を除き、すべてのカラーヘックスが出力に存在する必要があります。この場合、優先ルールを参照して、出力にどの色のヘックスが存在するかを決定してください。出力の順序またはこれらの色は、入力順序のままです。 色優先ルール 入力が1文字の場合、最初の色が使用されます 文字が2つしかない場合、最初と最後の色が使用されます 3色よりも多く、文字よりも多くの色がある場合、最初と最後の色に優先順位を付け、次に残りの色を入力順に並べる必要があります。 色よりも文字が多い場合、文字は中間色を使用してある色から次の色にフェードする必要があります 例(それぞれ優先規則1〜3): #色| カラー0 | ... | カラーn | テキスト 3 ff0000 0000ff ffff00 M-> -> -> 3 ff0000 0000ff ffff00 hi 4 ff0000 0000ff ffff00 0fff00 sup 明確にするために、テキストの色は1つの色のヘックスから次のヘックスにフェードする必要があります。フェードは完全に均一である必要はありませんが、きれいにフェードするのに十分なキャラクターがいない限り、急激な色の変化であってはなりません。通常、このフェードは、作業する必要のある文字の数と色の違いによって決まる間隔でrgb値をインクリメント/デクリメントすることにより、各文字の中間色を選択することによって実現されます。たとえば、(#ff0000)と(#000000)の間の単一の色が必要な場合、真ん中に配置するように選択できます。最適な出力はかなりきれいに見えます。 例(優先度ルール4): 3 ff0000 ff7f00 f0ff00 To be or not …
11 code-golf 

14
最大マキシマ!
この質問に触発され、ルイスメンドーによって洗練されました。 チャレンジ 整数の2Dマトリックスを指定すると、各行には最大値があります。各行の1つ以上の要素は、それぞれの行の最大値に等しくなります。あなたの目標は、それぞれの行の最大値とこれらの列で見つかった行ごとの最大値に等しいエントリが最も多い列を決定することです。 入力 入力は、選択した言語に適した形式の空でないMx N行列(M> 0およびN> 0)になります。 出力 プログラムは、行ごとの最大値の最大数を含む各列のインデックスを返します(個別の値またはリストとして)。0ベースまたは1ベースのインデックスを使用できます(説明で指定します)。 プログラムは、これらの列に存在した最大値の数(単一の数)も返す必要があります。 出力の順序/形式は柔軟ですが、回答に付随するテキストで説明する必要があります。 追加情報 入力行列のすべてのエントリは正の整数になります。 行の最大値がその行の複数の要素で共有されている場合、その値のすべての出現は列の合計にカウントされます。 複数の列に同じ数の最大値が含まれる場合、この数の最大値を持つすべての列のリストを返す必要があります。 例 入力を検討する 7 93 69 35 77 30 行1の最大値は93です。これは1回のみ、つまり列2で発生します。行2:列1で発生します。行3:また列1でも発生します。したがって、出力はになります[1] [2]。入力を 7 93 69 35 77 77 [1 2] [2]両方の列に最大値が2つあるため、出力はになります。 テストケース input => output ( [1-based index array], [nMaxima] ) ---------------------------------------------- 7 93 69 35 …

1
再帰スタイナーチェーン
スタイナーチェーンは、次の画像に示すように、各サークルがチェーンの前および次のサークルだけでなく、2つの他の交差しないサークルに接するN個のサークルのセットです。 この課題では、シュタイナーチェーンを再帰的に描画するプログラム/関数を作成します。つまり、特定のチェーンの円は、チェーンの別の反復の基本円になります。 チャレンジ 画像の寸法と、チェーンの各連続反復における円のレベルを示す整数のリストを受け入れるプログラム/関数を作成し、再帰シュタイナーチェーンが描画された画像を出力します。 入力 プログラム/関数は2つの引数を受け入れます。 s -画像の幅と高さ ls -チェーンの連続する各反復に存在する円の数を示す正の整数のリスト。最上位のチェーンから最下位のチェーンの順序 出力 プログラム/関数は、次元sxのイメージを出力しs、Resteinive Steinerチェーンを表示します。 最上位の基本円はs、画像の中心にある直径の画像と同じ大きさになります 物事を簡単にするために、シュタイナーチェーンの2つのベースサークルは同心になります。つまり、2つのベースラインサークルの中心点は同じになります。 外側の半径、Rおよびチェーン内の円の数が与えられると、内側の半径Nの式R'はR' = (R-R*sin(pi/N))/(sin(pi/N)+1) チェーンの円と内側の基本円は、チェーンの次の反復の外側の基本円になります チェーンサークルを再帰的に処理する間、次のチェーンの順序は次の値に対応する必要があります ls チェーンの内側の円を再帰的に処理するとき、順序はその親の順序と同じである必要があります(例[5,2]): すべてのチェーンは、再帰の長さの深さで終了する必要があります ls チェーンの回転は重要ではありません: ただし、親の中心点に対する再帰チェーンの回転は同じである必要があります。 すべての円は、アウトラインまたは塗りつぶしで描画する必要があります 色の選択は実装に任され、抜け穴を保存します(たとえば、すべてを同じ色で塗りつぶします) 実行例 次の例では、色はによって決定され(depth of the recursion)^4ます。 ここでソースを見つけることができます。 chain(600,[5,4,3]) chain(600,[11,1,1,1,1,1,1]) chain(600,[5,6,7,8,9])

7
あらゆる長さのサイクルを持つ関数を見つける
機能は持っていると言われている長さの周期をN個存在する場合、Xをそのドメイン、その結果、F N(X)= XとF M(X)≠X用0 <M <N 、上付き文字nは意味N - fのアプリケーションを折りたたみます。長さ1のサイクルは固定小数点f(x)= xであることに注意してください。 あなたの仕事は、整数から自身への全単射関数を実装することです。これは、すべての正の長さnの正確に1サイクルを持ちます。全単射関数は1対1の対応です。つまり、すべての整数が1回だけマッピングされます。長さの正確に一つの周期を有するN正確に存在することを意味し、Nの異なる番号がxはれるF N(X)= XとF M(X)≠X用0 <M <N 。 このような関数がx = 0の周りにどのように見えるかの例を次に示します。 x ... -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 ... f(x) ... 2 4 6 -3 -1 1 -4 0 -2 5 …

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