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

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

3
Hexcellent Minesweeping
Hexcellsは、マインスイーパをベースにした六角形のゲームです。(完全な開示:Hexcellsとは何の関係もありません。実際、ゲームはあまり好きではありません。)Hexcellsのルールのほとんどは、Generalized Minesweeper(Minesweeperが任意のグラフで再生)で簡単に表現できます。最も困難なものである{X}と-X-ルール。 {X}ルールは、セルの境界線のことを教えてくれるX鉱山と鉱山これらの全てが連続した経路で互いに接していること。たとえば、ボードがある場合: ? ? ? {3} ? ? ? 鉱山配置の6つの可能性は * . . . . . . * * * * * * {3} . * {3} . . {3} * . {3} * . {3} * * {3} . * . * * * * . * . …

2
21文字で「勝つためにtrueを返す」という合計タスクを解決する方法
Javascriptプログラマ向けの興味深いタスクを含む「Return True to Win」というサイトがあります。目標は、強制的にtrueを返す特定の関数の引数を見つけることです。 以下はタスクの1つです。 function total(x) { return (x < x) && (x == x) && (x > x); } ユーザーはx、関数がtrueを返す原因となる値のスニペットを見つける必要があります。スニペットをテストするには、スニペットをパラメーターとして関数を呼び出します(例:)total(<snippet>)。 22文字のソリューションを見つけました。 {valueOf:_=>n++%3},n=0 一部の人々は21文字で解決策を見つけました。私はこの解決策を見つけることができません。21文字の解決策は何ですか?

3
コードゴルフ模擬ゴルフ
穴のヤード、グリーンサイズ、スライス角度、最大距離のリストが与えられたら、ゴルフスコアを計算します。 仮定 地球は平らです すべてのグリーンは円形です スライス角度は-45〜45度で、度単位で指定されます 同じメトリック内のすべての距離(ヤードまたはメートル、重要ではありません) アウトオブバウンズ、障害物、ドッグレッグはありません 穴の最大スコアは8 すべてのショットは、最大距離またはホールまでの距離のうち、ホールへの角度とスライス角度で定義される方向の小さい方を移動します。 距離は、始点と終点の間の直線またはユークリッド距離として測定されます。 最大距離とスライス角度は、すべての穴のすべてのショットで同じです ゴルファーは常にグリーンで2パット(またはグリーンの端)を常に1回パットします。 例 ホール2については、以下のテストケース5のハッカーを見てみましょう。ハッカーはボールを320ヤード打撃できますが、常に30度スライスします。一般性を失うことなく、ティーボックスが{0,0}にあり、グリーンが{497,0}にあると仮定すると、彼は次のポイントまでショットをヒットし、7番目のショットでグリーンに到達します。 {{0.,0.},{277.128,-160.},{547.543,-131.372},{569.457,7.67088},{502.872,37.2564},{479.159,7.92741},{490.646,-7.85868},{500.078,-4.22987}} この時点で、2つのパットが必要なため、彼のスコアは9になります。したがって、彼の最終スコアは、仮定により8に制限されます。 グラフィカルには、次のようになります。 テストケース すべてのテストケースには、標準の18ホールコースがあります Case#1 {MaxDistance->280,SliceAngle->10,HoleDistances->{181,368,161,416,158,526,377,427,509,148,405,443,510,494,396,388,483,172},GreenDiameters->{26,18,17,23,27,23,21,23,25,21,19,24,21,23,25,24,22,22}} Scores: {4,5,4,5,4,5,5,5,5,4,5,5,5,5,5,5,5,4} Output: 85 Case#2 (same course as Test Case #1, shorter more accurate golfer) {MaxDistance->180,SliceAngle->5,HoleDistances->{181,368,161,416,158,526,377,427,509,148,405,443,510,494,396,388,483,172},GreenDiameters->{26,18,17,23,27,23,21,23,25,21,19,24,21,23,25,24,22,22}} Scores: {4,5,4,5,4,6,5,5,6,4,5,5,6,6,5,5,5,4} Output: 89 Case#3 (Same golfer as test case #1, shorter course) …

5
境界線がn未満の整数三角形
定義 「整数三角形」は、整数座標を持つものです。たとえば、次の三角形は整数三角形です。 (0, 0), (0, 1), (1, 2) with perimeter 1 + sqrt(2) + sqrt(5) ≈ 4.650. 仕事 この課題の目標は、境界がn未満のすべての整数三角形(合同まで)をカウントすることです。 入出力 引数は整数として与えられ、出力は厳密に引数よりも小さい周囲を持つ三角形の数でなければなりません。 例 境界線による最小の整数三角形は、 (0, 0), (0, 1), (1, 0) which has perimeter 2 + sqrt(2) ≈ 3.414 次に小さいものは次のとおりです。 (0, 0), (0, 1), (1, 2) with perimeter 1 + sqrt(2) + …

20
最適正方行列の計算
最適なマトリックス(この課題のかなり狭い範囲のための)が正方行列の対応する行と列から要素を「ジッピング」とそれぞれペアの最大値を取得することによって得られます。 たとえば、次のマトリックスが与えられた場合: 4 5 6 1 7 2 7 3 0 これを転置と組み合わせて、以下を取得できます[[[4,5,6],[4,1,7]],[[1,7,2],[5,7,3]],[[7,3,0],[6,2,0]]]。リストの各ペアを圧縮すると、次のものが得られます[[(4,4),(5,1),(6,7)],[(1,5),(7,7),(2,3)],[(7,6),(3,2),(0,0)]]。最後のステップは、各ペアの最大値を取得して最適なマトリックスを取得することです。 4 5 7 5 7 3 7 3 0 あなたの仕事は、入力として与えられた正方行列の最適な行列を出力することです。マトリックスには整数のみが含まれます。I / Oは、合理的な形式で実行できます。バイト単位の最短コード(UTF-8または言語のカスタムエンコーディング)が勝ちます! テスト [[172,29]、[29,0]]-> [[172,29]、[29,0]] [[4,5,6]、[1,7,2]、[7,3,0]]-> [[4,5,7]、[5,7,3]、[7,3,0] ]] [[1,2,3]、[1,2,3]、[1,2,3]]-> [[1,2,3]、[2,2,3]、[3,3,3] ]] [[4,5、-6]、[0,8、-12]、[-2,2,4]]-> [[4,5、-2]、[5,8,2]、[- 2,2,4]]

3
共産的な部分文字列の正規化
長さKのストリングTがストリングSでK回以上現れるなら、それは潜在的に共産的です。例えば、でそれが現れるため、潜在的に共産主義で2回と長さである2。これらの部分文字列は重複できないことに注意してください。1010/10 共産変換は、この文字列かかり一つでTを、各キャラクタが移動するT iは、のTをする私の発生TにおけるS。したがって、前の例では、共産主義の変換は次のようになり1/0ます。10置換の最初の文字が10最初に10検出され、02回目に検出されます。 共産正規化は、全てのそのようなストリングとる関数であるTとK ≥2及び実行共産変換をそれらに。 アルゴリズムの詳細: 最初に最長の有効な文字列Tで 共産主義の変換を実行します。Tの最初の出現を優先します。 次に、次に長い文字列で共産主義的な変換を実行し、次に次に長い文字列で...などを実行します。 そのような文字列が文字列に存在しなくなるまで繰り返します。 テストケースの「Hello、Hello」の例などの一部の文字列は、2つの異なる方法で解釈できることに注意してください。あなたは使用することができるellためにTが、あなたにも使用することができますllo。この場合、コードはいずれかのオプションを選択できます。示されているテストケースではを使用lloしていますが、異なる有効な出力が得られる場合があります。 あなたの仕事は、共産主義の正規化を実装することです。入力は、印刷可能なASCII文字(0x20〜0x7E、ティルドまでのスペース)のみで構成されます。このタスクを解決するプログラムまたは関数を作成できます。入力は、STDINからの行、文字列/文字配列引数、ARGVからの引数などとして取得できます。 テストケース '123' -> '123' '111' -> '111' '1111' -> '11' 'ABAB' -> 'AB' '111111111' -> '111' 'asdasdasd' -> 'asd' '10/10' -> '1/0' '100/100+100' -> '1/0+0' ' + + ' -> ' + ' 'Hello, hello, dear fellow!' -> …
13 code-golf  string 

9
特性多項式
特性多項式正方行列のAは多項式として定義されたP A(X)= DET(I X- A)ここで、Iは、ある単位行列とDET 決定基を。この定義は、解が一意であるようなモニック多項式を常に与えることに注意してください。 この課題のタスクは、整数値の行列の特性多項式の係数を計算することです。このため、ビルトインを使用できますが、推奨されません。 ルール 入力は、任意の便利な形式のNxN(N≥1)整数行列です。 プログラム/関数は、係数を昇順または降順で出力/返します(どちらを指定してください) 係数は、x Nの係数が1になるように標準化されます(テストケースを参照) 無効な入力を処理する必要はありません テストケース 係数は降順で与えられます(x N、x N-1、...、x 2、x、1): [0] -> [1 0] [1] -> [1 -1] [1 1; 0 1] -> [1 -2 1] [80 80; 57 71] -> [1 -151 1120] [1 2 0; 2 -3 5; 0 1 …

10
苦労している大学生のGPA計算機
GPA計算機 (GPA =成績平均点) あなたは決勝戦の週にストレスを感じた大学生です。今後の試験のために勉強する代わりに、学期の終わりにどのGPAを取得するかを決定することが最善であると判断します。このように、Bの代わりにCalculusでそのAを取得してDeanのリストに残すという決定をバックアップするためのデータがあります! コンピューターサイエンス専攻なので、このGPAを決定する最もクールな方法を見つけたいと思います。もちろん、最もクールな方法は、最短のコードを使用することです!これはcode-golfなので、バイト単位の最短コードが勝ちです! 詳細 あなたが行く大学は単位時間に合わせてスケーリングされた基本的なGPAを使用します。 Aの文字グレードは4.0、Bは3.0、Cは2.0、Dは1.0、Fは0.0です。 GPAは加重GPAであるため、4クレジット時間クラスのAは、1クレジット時間クラスのAの4倍にカウントされます(詳細については、以下の例を参照してください) クレジット時間の範囲は1〜4 プログラムには、2つのコマンドライン入力、GradeおよびCredit Hourのリストが必要です。これらをコマンドラインからプログラムに入力する最適な方法を決定できます。入力が多すぎることを心配する必要はありませんが、コードが19クレジット時間の学期を処理できることを確認してください。 すなわち、入力:A 1 B 4 C 2… プログラムは、3桁(X.XXなど)を使用してGPAを出力する必要があります GPAは小数点以下2桁に丸める必要があります。好きな方法(床、天井、ベースなど)でラウンド 入力例(デザインに最適なものを選択してください) A1B3C2F3B4 A1 B3 C2 F3 B4 A 1 B 3 C 2 F 3 B 4 A、1、B、3、C、2、F、3、B、4 A1、B3、C2、F3、B4 または、上記の組み合わせのいずれかで、すべての成績を一覧表示する形式を使用し、次にクレジット時間を指定する場合: すなわちABAA 3 4 1 1 例 Input - A 3 …
13 code-golf 

6
ASCII六角形チェーン
問題 xそれぞれy長さのある六角形のチェーンを長く描きます 入力 x -チェーンの長さ<= 50 y -各辺の長さ<= 50 例 x=1,y=1 _ / \ \_/ x=4,y=1 _ _ / \_/ \_ \_/ \_/ \ \_/ \_/ x=3,y=2 __ __ / \ / \ / \__/ \ \ / \ / \__/ \__/ \ / \__/ ルール バイト単位の最短の有効な回答が優先されます。 先頭および末尾の改行が許可されます。 末尾の空白が許可されます。

4
いくつのインスタンスが実行されていますか?
現在実行されている自身のインスタンスの数を報告する無期限に実行するプログラムを作成します。プログラムの各インスタンスは、現在実行中の他のすべてのインスタンスから開かれた順序も報告する必要があります。 例 ユーザーが起動初めてプログラムは-私たちは、このインスタンス1インスタンス1のディスプレイと呼ぶことにします1/1、それがあるので、最初の合計のうち発足するインスタンス1、現在実行中のインスタンスが。 インスタンス1の実行中に、ユーザーは2回目のプログラムを起動してインスタンス2になります。インスタンス1が表示され1/2、現在実行中の合計2つのインスタンスのうち最初のインスタンスになります。例えば2ディスプレイ、それがあるため、第二のトータルのインスタンスのうち2現在実行中のインスタンス。2/2 ユーザーが5つになるまでさらにインスタンスを生成し続けるとします。起動順に、出力は次のとおり1/5 2/5 3/5 4/5 5/5です。 彼らはそれぞれなので、それでは、ユーザーがインスタンス3インスタンス4を終了することを決定したとしましょうことは、その後、新しいインスタンス3およびインスタンス5新しいインスタンス4となり第三及び第四今の合計であるもののうち開始されたのはインスタンス4インスタンス。したがって、各インスタンスの出力の変更は次のようになります。 1/5 → 1/4 2/5 → 2/4 3/5 →(終了) 4/5 → 3/4 5/5 → 4/4 ルール 2つの数値(インスタンス番号、合計インスタンス)を適切な形式で出力できます。 インスタンスが起動または終了するたびに、他のすべてのインスタンスはそれぞれの出力を100ミリ秒以内に更新する必要があります。 新しい行(または置換ではなく他の「追加」出力形式)に印刷して出力を更新する場合、インスタンスの数が変更された場合にのみ印刷し、それ以外の時間には印刷しないでください。 これはコードゴルフです。バイト単位の最短プログラムが優先されます。 回答では、ユーザーが複数のインスタンスを開くために何をする必要があるかを指定すること、および/またはデモのためにスクリーンキャストを記録することをお勧めします。

25
上限Divmodを計算する
仕事 2つの正の整数(divid e ndとdivis o r)が与えられた場合、q uotientとr emainderを計算します。 通常、e = o*q+rwhere q*o<=eおよびとして計算され0<=r<oます。 この挑戦のためにまだe = o*q+rそれがq*o>=e、そして-o<r<=0。 たとえばe=20とo=3、通常はそれは次のようになり20/3 -> 20=3*6+2、以来18<=20と0<=2<3。ここでそれは20/3 -> 20=3*7-1どこに21>=20なります-3<-1<=0 テストケース Input -> Output 20, 3 -> 7, -1 10, 5 -> 2, 0 7, 20 -> 1, -13 100, 13 -> 8, -4 処理する必要はありませんo=0。

6
アルファベットをスパイラルアウト!
次の文字列を見てください。パターンに気づきましたか? ABEFNOPEFGH DC GQI MHRJ LKJI SK DTL CUM BAZYXWV N EO DP CQ BAZYXWVUTSR 気づいたかもしれませんが、基本的にはアルファベットのらせん状で、行/列間の距離は1スペース/改行で徐々に増加しています。 厳格な定義 最初は0であるカウンターcを用意しましょう。 アルファベットの最初のc + 1文字を左から右に書きますA。 次に、上から下に次の(c + 1)(c + 2)/ 2文字(add B):を追加しますAB。 左から右へ、次の(c + 1)(c + 2)/ 2(add C): AB C そして、下から上へ、次のc + 1文字(add D): AB DC サイクルの終わりに達しました。したがって、cをインクリメントしてみましょう(1になります)。次に、最初のステップから戻ります。唯一の違いは、アルファベットの最初のc + 1文字を使用する代わりに、このサイクルの最後の要素から始まる次のc + 1文字を使用することです(Dこの場合、EFG...)に進みます。にZ達すると、から循環しAます。 仕事 整数N(1インデックスの場合は正、0インデックスの場合は非負)を指定すると、最初のを指定すると、スパイラルの …

4
二部ですか?
二部グラフは、頂点ないエッジが同じセット内の2つの頂点を接続しないように、2つの互いに素の集合に分割することができるグラフです。グラフが2色である場合にのみ、グラフは2部構成です。 チャレンジ あなたの仕事は、無向単純グラフの隣接行列を与えられて、それが二部グラフであるかどうかを決定することです。つまり、エッジが頂点iとjを接続する場合、行列の(i、j)と(j、i)の両方のエントリは1です。 グラフは無向で単純なので、その隣接行列は対称であり、0と1のみを含みます。 仕様 入力としてN行N列の行列を使用する必要があります(リストのリスト、文字列のリスト、Cのようなint**サイズ、フラット化された配列、生の入力など、任意の形式で)。 関数/プログラムは、グラフが2部構成である場合は真偽値を返し、そうでない場合は偽である必要があります。 テストケース ['00101', '00010', '10001', '01000', '10100'] : False ['010100', '100011', '000100', '101000', '010000', '010000'] : True (divide into {0, 2, 4, 5} and {1, 3}) ['00', '00'] : True 得点 答えを直接計算する組み込み関数は禁止されています。 これはcode-golfなので、今月末までに最短のプログラム(バイト単位)が勝ちます!

21
反復ファイシーケンス
関連:繰り返しphi(n)関数。 あなたの課題は、反復phi関数を計算することです。 f(n) = number of iterations of φ for n to reach 1. どこφでオイラーのφ関数は。 関連OEIS。 以下がそのグラフです。 ルール: あなたの目標はからに出力f(n)するn=2ことn=100です。 これはコードゴルフなので、最短のコードが優先されます。 確認できる値は次のとおりです。 1, 2, 2, 3, 2, 3, 3, 3, 3, 4, 3, 4, 3, 4, 4, 5, 3, 4, 4, 4, 4, 5, 4, 5, 4, 4, 4, 5, 4, …

9
繰り返される数字の素数
別のシーケンス、別の課題。* 定義 首相はpこのシーケンスである、レッツ・コールもA、すべての桁のIFF dでpの小数点以下の拡張、あなたが代わるdとdのコピーdと結果の整数はまだ素数です。ゼロは許可されません。 たとえば11、このシーケンスでは些細なことです(ちなみに、最初の数字です)。シーケンスの次はある31ので、3331また、素数です。その後53ためには55555333そうでも素数である、と。 チャレンジ input n、return A(n)、つまりnこのシーケンスのth番目のアイテムを指定します。 例 始めるための最初の20の用語を以下に示します。これは、OEIS上のA057628です。 11, 31, 53, 131, 149, 223, 283, 311, 313, 331, 397, 463, 641, 691, 937, 941, 1439, 1511, 1741, 1871 これはA(0) = 11、A(1) = 31ゼロインデックスを使用する場合、などを意味します。 ルール ゼロベースまたは1ベースのインデックスを選択できます。あなたの答えにどれを指定してください。 nth要素だけを返す代わりに、最初のn用語を返すことを選択できます。 入力/出力は、あなたの言語のネイティブ整数フォーマットよりも大きくないと仮定できます。ただし、繰り返し数字の素数は言語のネイティブ形式よりも大きい場合があるため、これを考慮する必要があります。 たとえば1871、最後の例のには、対応する素数があり18888888877777771、標準のINT32よりもかなり大きくなっています。 完全なプログラムまたは機能のいずれかが受け入れられます。関数の場合、出力する代わりに出力を返すことができます。 出力は、コンソールに出力したり、関数から返されたり、警告ポップアップに表示したりできます。 標準的な抜け穴は禁止されています。 これはコードゴルフなので、通常のゴルフルールがすべて適用され、最短のコード(バイト単位)が勝ちます。 *公平を期すために、私はシーケンスの最初のいくつかの用語をいくつかの数字で遊んでいたので、OEISに行って残りのシーケンスを取得しました。

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