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

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

24
階乗と決して終わらないサイクル!
ご存知かもしれませんが、正の整数の階乗nはに等しいかそれより小さいすべての正の整数の積ですn。 例えば ​​: 6! = 6*5*4*3*2*1 = 720 0! = 1 次のような無関係な名前で特別な操作を定義しますsumFac。 正の整数を考えるとn、sumFac(n)数字の階乗の合計があります。 例えば ​​: sumFac(132) = 1! + 3! + 2! = 9 仕事 あなたの使命は、あなたがそれを受け入れるかどうかにかかわらず、アプリケーションのシーケンス(潜在的に無限)をsumFac入力で与えられた整数に戻すことです。 例: 132 -> 132, 9, 362880, 81369, 403927, ... しかし、それだけではありません!確かに、のアプリケーションは、sumFac最終的にサイクルを作成します。また、このサイクルを返す必要があります! 言語に階乗が組み込まれている場合は、それを使用できます。戻り値のタイプについては気にしません。単にsumFacアプリケーションのシーケンスとサイクルを人間が理解できる形式で返す必要があります。 編集:出力がどのように見えるかをよりよく視覚化するために、Leaky Nunのすぐ下をコピーしました: [132, 9, 362880, 81369, 403927, 367953, 368772, 51128, 40444, 97, 367920, …

7
ロイターシュヴァルトの三角形を描く
この不可能なオブジェクトは、ロイターシュヴァルトの三角形です。 次のルールに従って独自のバージョンを描画します。 合計9個のキューブ 各辺はちょうど4つの立方体で構成されています キューブは、レンダリングされたオブジェクトが実際には不可能なオブジェクトであるように重なっているように見えます 4つの異なる色が使用されます-背景用に1つ、キューブの各面に3つ ビットマップ出力では、完全な三角形の高さは少なくとも100ピクセル、幅は少なくとも100ピクセルにする必要があります アスペクト比:完全な三角形の幅と高さが2倍以上ずれてはいけません 三角形は、上の画像に対して任意の量だけ回転できます 三角形は、上記の画像に対して反映される場合とされない場合があります

17
ねじれのある最小の素数(A068103)
手元のタスクは、番号を指定すると、番号の先頭にあるAT LEASTでn始まる最小の素数を見つけます。これは私がOEIS(A068103)で見つけたシーケンスです。 n2 シーケンスの最初の17個の数値を以下に示します。さらに必要な場合は、実際にシーケンスを実装する必要がありますが、これを実行してもかまいません。 0 = 2 1 = 2 2 = 223 3 = 2221 4 = 22229 5 = 2222203 6 = 22222223 # Notice how 6 and 7 are the same! 7 = 22222223 # It must be **AT LEAST** 6, but no more than necessary. 8 …

11
シャルコフスキーの奇妙な順序
前書き この課題では、正の整数の特定の順序付けを扱います。順序は次のようになります。 3, 5, 7, 9, 11, ... 2*3, 2*5, 2*7, 2*9, 2*11, ... 4*3, 4*5, 4*7, 4*9, 4*11, ... 8*3, 8*5, 8*7, 8*9, 8*11, ... 16*3, 16*5, 16*7, 16*9, 16*11, ... ... ... 64, 32, 16, 8, 4, 2, 1 最初に、1より大きいすべての奇数整数を昇順でリストします。次に、1より大きい2倍の奇数の整数をリストし、4倍、8倍、というように、すべてのkについて、1より大きい奇数の整数の2 k倍を昇順でリストします。最後に、1で終わる降順で2のべき乗をリストします。すべての正の整数は、この「リスト」に1回だけ出現します。 より明確に、2つの異なる正の整数A = n・2 pおよびB = m・2 qを検討します。ここで、n、m≥1は奇数で、p、q≥0です。次に、次の条件のいずれかが当てはまる場合、順序付けでAがBの前に来ます。 …

6
Cornuスパイラルのプロット
コルニュスパイラルは、光伝播の経路積分のためのファインマンの方法を用いて算出することができます。次の離散化を使用して、この積分を近似します。 この画像のように鏡を考えてみましょう。ここSで、光源とP光を集めるポイントがあります。S鏡の各点から点へと直線光線で光が跳ね返ると仮定しますP。我々は、中にミラーを分割するN標識された本実施例13において、セグメントAへのM光の経路長であるように、R=SN+NPここで、SNからの距離であるSミラーセグメントにN、そしてための同様P。(画像中の点の距離ことを注意S及びPミラーには、ブロックが視覚的目的のために、多くの短縮されたQかなり無関係であり、ミラーを介して反射を確実にするために純粋に配置され、そしてからの直接光を避けるためSにP。) 所与の波数ためフェーザ光線のように計算することができ、ここで、虚数単位です。これらすべてのフェーザーを左から右に向かって左右にプロットすると、Cornuスパイラルにつながります。13個の要素と、以下で説明する値の場合、次のようになります。kexp(i k R)i 大きいN、つまり多くのミラーセグメントの場合、スパイラルは「真の」Cornuスパイラルに近づきます。以下のさまざまな値を使用してこの画像を参照してくださいN。 チャレンジ 指定Nされたlet に対して、n番目のミラーセグメントx(n)のx座標の中心()を指定します。n = 0,1,2,...,N x(n) := n/N-0.5 をn番目のミラーセグメントまでSN(n)の距離とS = (-1/2, 1000)します。 SN(n) := sqrt((x(n)-(-1/2))^2 + 1000^2) 同様に NP(n) := sqrt((x(n)-1/2)^2 + 1000^2) したがって、n番目の光線が移動した合計距離は R(n) := SN(n) + NP(n) 次に、n番目のミラーセグメントを通過する光線のフェーザー(複素数)を次のように定義します。 P(n) = exp(i * 1e6 * R(n)) ここで、累積和を(積分の近似として)考えます C(n) = P(0)+P(1)+...+P(n) 目標は、点を通る区分的線形曲線をプロットすることです(C(0), C(1), ..., …

30
リバース(バイナリ)ビット番号とは何ですか?
あなたが与えられているので、POSITIVEのベース10(10進数)の数を。あなたの仕事は、2進数を逆にし、その10進数を返すことです。 例: 1 => 1 (1 => 1) 2 => 1 (10 => 01) 3 => 3 (11 => 11) 4 => 1 (100 => 001) 5 => 5 (101 => 101) 6 => 3 (110 => 011) 7 => 7 (111 => 111) 8 => 1 (1000 => 0001) …

9
山頂を描く
山の範囲を描くプログラムまたは関数を作成します。後続の大きな山のピークはそれぞれ、前の山の「背後」にあり、どちらの側が見えるかを交互に切り替えます。 これは山岳地帯の大きさです 1 /\ これは山岳地帯の大きさです 2 /\ /\ \ これは山岳地帯の大きさです 3 /\ / /\ / /\ \ これは山岳地帯の大きさです 4 /\ /\ \ / /\ \ / /\ \ \ これは山岳地帯の大きさです 5 /\ / /\ / /\ \ / / /\ \ / / /\ \ \ 等々。 入力 単一の正の整数、任意の便利な形式で、n > …

24
非重複文字列
前書き 次の文字列を観察してみましょう。 AABBCCDDEFFGG 手紙を除いて、すべての手紙が複製されていることがわかりEます。それは、手紙Eが重複していないことを意味します。したがって、ここで行う必要があるのは、そのプロセスを逆にすることだけです。これにより、次の重複のない文字列が得られます。 AABBCCDDEEFFGG もっと難しい例を見てみましょう。 AAAABBBCCCCDD 連続したBの数が不均一であることがわかりBBます。つまり、元の文字列の1つが重複していないことを意味します。この手紙の重複を取り消すだけで、次のことができます。 AAAABBBBCCCCDD チャレンジ 空でない所与の重複除外で構成される文字列、英字のみ(どちらかのみ大文字または小文字のみ)、戻り非重複除外文字列。文字列には少なくとも1つの重複排除された文字が常に存在すると想定できます。 テストケース AAABBBCCCCDDDD --> AAAABBBBCCCCDDDD HEY --> HHEEYY AAAAAAA --> AAAAAAAA N --> NN OOQQO --> OOQQOO ABBB --> AABBBB ABBA --> AABBAA これはcode-golfであるため、バイト単位の最短の有効な送信が優先されます!
33 code-golf  string 

30
Notcalc(間違った答えを計算する)
ゴール: 2つの自然数(0から無限大までの整数)が与えられた場合、それらの数の合計ではなく自然数である数値を出力します。 ソリューション例(TI-Basic): A+B+1 not(A+B) 無効なソリューション: A+B-1(入力の0,0場合、それは戻ります-1、これは自然ではありません) "ABC"(ABC数字ではありません) ノート: 出力は常に2つの自然数の合計でなければなりません(実際には単なる自然数です) -1、undefined、infinity、NaNおよびエラーメッセージは自然数ではありません。私たちの目的で0は、これは自然です(ただし、すべての数学者が同意するわけではありません)。

30
ランダムダイティッパーの検証
ほぼ6年前、仲間のPPCGメンバーsteenslag は次の課題を投稿しました。 標準のサイコロ(ダイス)では、反対側の面が7になるように番号が配置されます。ランダムスローに続いて9回のランダムチップを出力する、可能な言語で最短のプログラムを記述します。チップはサイコロの4分の1回転です。たとえば、サイコロが5に面している場合、すべての可能なチップは1,3,4および6です。 望ましい出力の例: 1532131356 だから、今では誰もがそれを完全に忘れており、勝者の答えは長い間受け入れられてきたので、提出されたソリューションによって生成されたダイチップシーケンスを検証するプログラムを書くことになります。(これは理にかなっています。そうするふりをしてください。) チャレンジ あなたのプログラムや関数は このようなシーケンスを与えています1532131356。連続する各桁が以下であることを検証します。 前の数字と等しくない 7から前の数字を引いたものと等しくない (最初の数字を検証する必要はありません。) ルール プログラムは、入力が有効な場合は真実の値を返し、そうでない場合は偽の値を返す必要があります。 入力は1〜6の数字のみで構成され、少なくとも1文字の長さであると想定できます。シーケンスは、steenslagのチャレンジのように固定長になりません。 入力は、文字列("324324")、配列または配列のようなデータ構造([1,3,5])、または複数の引数(yourFunction(1,2,4))として受け取ることができます。 標準のI / Oおよび抜け穴の規則が適用されます。 テストケース 真実の 1353531414 3132124215 4142124136 46 4264626313135414154 6 2642156451212623232354621262412315654626212421451351563264123656353126413154124151545145146535351323 5414142 偽り 繰り返し数字 11 3132124225 6423126354214136312144245354241324231415135454535141512135141323542451231236354513265426114231536245 553141454631 14265411 ダイの反対側 16 42123523545426464236231321 61362462636351 62362462636361

19
素数-1がnで割り切れるようなn番目の素数を見つける
問題 目標は、タイトルがn番目の素数を見つけることで、素数-1がnで割り切れるようにすることです。 説明 質問を理解するための例を次に示しますが、これは必ずしも解決すべき方法ではありません。それは単に質問を説明する方法として 入力として3を指定すると、まずすべての素数を調べます 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 ... 次に、素数-1がn(この場合は3)で割り切れるような素数を選択します 7 13 19 31 37 43 61 67 73 79 97 103 107 109 127 ... 次に、このシーケンスのn番目の用語を選択します 3の入力に対して19を出力します 注意 これは、シーケンス{1、n + 1、2n + 1、3n + 1 …

9
ひし形が本当に欲しかったのですが、得たのはこの愚かな長方形だけでした
直定規とコンパスのみが与えられた場合、与えられた長方形の内側に菱形を刻み、2つの反対の点を共有します。 入力 入力は長方形の寸法です。示されている例では、それはになります125, 50。最も便利な方法(2つの整数、リスト、文字列など)で入力を受け取ることができます。 大きい方の寸法は最小100で、小さい方の寸法は最小25です。両方のキャップは200です。 出力 出力は、画面に表示されるかファイルとして保存される画像です 入力長方形 すべての「作業」線/円 刻まれた菱形 異なる色で。上の画像では、長方形は黒、作業線は青、菱形はオレンジです。線はリストに表示されている順序で描画する必要があります(たとえば、菱形は作業線と長方形を上書きします)。 出力画像は、すべてを含むのに十分な大きさである必要があります。たとえば、表示されている円は範囲を超えることはできません。 方法 上記の画像例で使用されている方法は次のとおりです。 左下隅を中心として、右上を境界上の点として使用して円を描き、長方形の対角線に等しい半径を与えます。 同じことを行いますが、中心点と周辺点を交換します。 2つの円の交点の間に線を引き、長方形の対角線に垂直な二等分線を与えます。 新しい線と長方形の交点を使用して、菱形を描きます。 これは、菱形の内部の対角線が常に互いに垂直に二等分するために機能します。ただし、このことの完全な証拠はここには含めません。 これが菱形を取得する唯一の方法ではなく、あなたが何をしているのかを説明すれば、別の菱形を使用することもできます。おそらく最も簡単だと思います。 ルール 円と線(または線分)のみを描画できます。円は、中心点と周辺点で定義されます。線は任意の2点で定義されます。線は、指定された長さである必要はありませんが、少なくとも定義点をカバーする必要があります(例の画像に注意してください:線は円の交差点を少し過ぎますが、端までは行かない)。円の場合、中心から選択した境界点までの半径は作業線と見なされ、表示する必要があります。 行をラスタライズするには、認識されたアルゴリズム(Bresenhamなど)を使用するか、言語に組み込まれているものに依存します。出力がベクトルベースの場合、少なくともピクセル単位の入力矩形と同じ大きさの解像度で表示されることを確認してください。また、プレーンキャンバスに描画するため、グリッドマークや無関係な出力を抑制してください。 不正行為はありません!これまでに設定したものを使用してのみ、ポイント/ライン/円の配置を決定できます。作業線/円を使用して菱形であることを示す方法を説明できない場合、それは間違っています。 必要な反対のポイントのペアを使用でき、出力が正しい限り、長方形を軸に沿って描画する必要はありません。 入力は常に非正方形の長方形になりますので、特別な場合は心配しないでください。 最後に、これは標準コードゴルフであるため、バイト単位の最小サイズが優先されます。

14
言葉を歩きます!
私の謙虚な意見では、標準的なテキストは退屈です。したがって、私は新しい文章の基準である「歩く言葉」を提案します! 歩く言葉 歩く言葉は、特定のキャラクターに反応する言葉です。このチャレンジの目的のために、トリガーキャラクターは[u, d, r, l]からup down right leftです。 テキストを印刷するときにこのような文字に遭遇するたびに、テキストの方向を移動します。 たとえば、テキストのabcdef結果は次のようになります。 abcd e f ルール 大文字UDRLと小文字の両方でudrl方向を変更する必要がありますが、出力では大文字と小文字を保持する必要があります 入力には印刷可能な文字のみが含まれ(0-9, A-Z, a-z, !@#%^&*() etc...)、改行は含まれません! テキストが衝突するたびに、その位置の古い文字が上書きされます 出力はファッショナブルな問題でユーザーに提示される必要がありますが、単一の出力(行の配列なし) 末尾と先頭の改行が許可されます 末尾のスペースは許可されます 標準的な抜け穴が適用されます テストケース empty input => empty output or a newline u => u abc => abc abcd => abcd abcde => abcd e abcdde => …

14
ピタゴラスのトリプルシーケンス
A ピタゴラストリプルように3つの正の整数、B、及びC、から成る2 + B 2 = C 2。このようなトリプルは一般的に(a、b、c)で記述され、よく知られた例は(3、4、5)です。(a、b、c)がピタゴラスのトリプルの場合、正の整数kの場合も(ka、kb、kc)です。原始的なピタゴラスのトリプルは、a、b、およびcが互いに素であるトリプルです。 この知識を使用して、最小長のトリプルを連結することでシーケンスを作成できます。シーケンスの次の要素は、長さの最小要素として前の要素を含む最小プリミティブピタゴラストリプルの斜辺(最大数)です。 最小のプリミティブピタゴラストリプル(3、4、5)から始めます。シーケンスはで始まり3、斜辺(シーケンスの次の要素)は5です。次に5、足として最小の原始的なピタゴラスのトリプルを見つけて、(5、12、13)を取得します。したがって、シーケンスはに続き13ます。 シーケンスを永久に出力するか、整数入力nを取りn、シーケンスの最初の要素(0または1のインデックス付き)を出力します。 少なくともを含む出力をサポートする必要があり28455997ますが、使用しているデータ型の制限が突然引き上げられた場合、その新しい制限に対応する必要があります。したがって、数字のリストをハードコーディングすることはできません。 3 5 13 85 157 12325 90733 2449525 28455997 295742792965 171480834409967437 656310093705697045 1616599508725767821225590944157 4461691012090851100342993272805 115366949386695884000892071602798585632943213 12002377162350258332845595301471273220420939451301220405 OEIS A239381 同様のシーケンス(これらを出力しないでください!): A018928 A077034(奇数項)

1
ガスケットウィービング-シェルピエスキーノットを描く
N> = 2の整数を指定すると、N次のシェルピスキーノットを示す画像が生成されます。 たとえば、2、3、4、5次のノットがあります。 画像をクリックしてフルサイズで表示します(次数が高いほど画像が大きくなります)。 仕様 次数Nのシェルピエスキーノットは、次数Nのシェルピエスキー三角形の頂点をガイドポイントとして使用して描画されます。次数Nのシェルピエスキー三角形は、より大きな三角形に配置された次数N-1の3つのシェルピエスキー三角形です。次数0のシェルピスキー三角形は正三角形です。 最小のコンポーネント三角形の辺の長さは64であり、ノエルの基になるSierpiński三角形は、 外側の三角形の中心は、画像の中心に配置されます。これは、上部と下部に等しい空白を与えません。 出力は、辺の長さの正方形の画像です。ここではceiling(x)、x以上の最小の整数です。これは、三角形の中心が画像の中心にあるときに、基になるSierpiński三角形の頂点が画像内に含まれるのに十分な大きさです。 単一の曲線は、厳密に交互に上下に通過する必要があります。ソリューションは、アンダーザオーバー、オーバーザアンダー、オーバーザアンダーのいずれかを選択できます。 サンプル画像は、黒い前景と白い背景を示しています。簡単に区別できる2つの色を選択できます。アンチエイリアスは許可されていますが、必須ではありません。 2つの円弧が交わる場所、または曲線がそれ自体の上または下を通る場所に隙間があってはなりません。 出力は、任意のラスター形式の画像ファイル、または正しいデフォルトの表示サイズを含む任意のベクター形式の画像ファイルになります。画面に直接表示する場合は、画面よりも大きいときにスクロールして画像全体を表示できる形式にする必要があります。 アークの中心、半径、厚さの決定 結び目は、接線が平行な点で交わる一連の円弧として構築され、シームレスな結合を提供します。これらの円弧は、環状の扇形(太さのある円弧)として表示されます。 これらの円弧の中心は、最小の逆さまの三角形の頂点です。そのような各頂点は、正確に1つの円弧の中心です。 各円弧の半径は 例外は、3つの最も外側の三角形(大きな三角形の角にある)の円弧の中心が2つの隣接する内側の頂点の中点であり、したがって半径が 各弧は、合計の厚さ(内側半径と外側半径の差)で表され、それぞれの黒い境界線の厚さは、曲線だけでなく、これらの境界線を持つ必要があります。 測定の単位 すべての距離はピクセル単位です(1は2つの隣接するピクセル間の水平または垂直距離です)。 3の平方根は、7つの有効数字に対して正確でなければなりません。つまり、計算は、ROOT3を使用するのと同等である必要があります。1.7320505 <= ROOT3 < 1.7320515 得点 バイト単位の最短コードが優先されます。 不思議な人には、N = 0とN = 1は含まれません。これらは円と三葉に対応しているため、N> = 2に適用されるパターンとは完全には一致しません。この課題へのほとんどのアプローチでは、0と1に特別なケースコードを追加する必要があると予想されるため、それらを省略することにしました。

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