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

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

2
猫はどこへ行くの?(軌道力学)
ほぼ無質量の猫が(x, y, z)、速度のある点で宇宙船に落とされます(宇宙服とすべてで心配しないでください)(vx, vy, vz)。ポイントには固定された無限に密集した惑星(体積0)があり、加速(0, 0, 0)して距離rを置いてオブジェクトを引き付けます1/r^2。ニュートン重力によると、オブジェクトは時間の経過後にどこに行くのtでしょうか? この場合、ほとんど質量がないということは、の値を出力していることを意味しますlim (mass --> 0) <position of cat>。質量は惑星の重力の影響を受けますが、惑星は猫の重力の影響を受けません。つまり、中心体は固定されています。 これは、コードゴルフに多少似ています:宇宙船の運命は?[浮動小数点バージョン]ですが、これは精度を測定しているため、異なります。 3秒未満で実行する必要があるシミュレーションに基づいたソリューションを実装することも、正確な値を提供するプログラムを実装することもできます(3秒未満で実行する必要があります)。以下のスコアリングの詳細を参照してください。シミュレーションを実装する場合、正確である必要はありませんが、不正確なためにスコアが低くなります。 入力:x y z vx vy vz t、必ずしもx、y、z座標、x、y、およびz方向の速度と時間を表す整数ではありません。猫の速度が厳密にその高度での脱出速度よりも遅いことが保証されています。関数へのパラメーターを含め、どこからでも入力を取得できます。プログラムは、私のラップトップ上で3秒未満で実行する必要がありますt < 2^30。つまり、シミュレーションを実行している場合は、それに応じてタイムステップを調整する必要があります。すべてのテストケースで3秒の制限に達することを計画している場合は、コンピューターで3秒で実行できるように、速度のゲインをより正確に/より正確に調整できる調整可能なパラメーターがあることを確認してください。 出力:x y z時間後の位置t。 二体問題は完全に解決できるので、理論的には完全で正しい答えを得ることができます。 スコアリング:すべてのテストケースで、エラーは出力と「真の」出力の間の距離として定義されます。真の出力は、テストケーススニペットが生成するものと定義されています。エラーが未満の場合、エラーは10^(-8)ゼロに切り捨てられます。スコアは、100(またはそれ以上)のランダムテストケースの平均誤差です。完全に正確な答えを書いた場合、スコア0を取得する必要があります。最も低いスコアが勝ち、コードの長さによって関係が壊れます。 テストケース: 1 0 0 0 -1 0 1000000000 --> 0.83789 -0.54584 0 この場合、軌道は周期2 * piで完全に円形であるため、159154943回旋回した後、猫はおよそ(0.83789、-0.54584)になります。これは、コードがテストされるテストケースではありません。ただし、完全に正確な回答を提出する場合は、これでテストすることをお勧めします。 以下のスニペットは、ランダムな追加のテストケースを生成し、提出を判断するために使用されます。これにバグがあるかどうか教えてください: コードスニペットを表示 var generateTestCase = …

10
ジャムはそのように追加しないでください
バックグラウンド Jellyの算術原子は自動的にベクトル化します。実際には、X + Yはいつでも明確に定義されているX及びYは、数値または数値の不揃い配列です。Jellyのソースコードは、ジェネリックベクトライザーを使用してこの動作を実装しますが、この課題では、整数とネストされた整数配列の追加のみを考慮します。 定義 深さを定義Xをとして0あればxはのように、整数である1が整数の(おそらく空の)平坦アレイであり、そして場合としてN + 1は少なくとも一つの深さの要素が含まれている場合、Nと深さのない要素kは> n個。 このように、1は深さ0、[]と[1]、[1、1]は深さ1、[[]、[]]と[[1]、[1]]と[[1]]と[1 、[]]は深さ2、[1、[1、[1]]]は深さ3などです。 操作x + yは、次のように定義されます。 場合のxとyは深持っ0を、その合計を返します。 場合、XとYが等しいが正の深さを有する、再帰的に適用+のすべての項目にXとの対応する項目Y。 xとyの長さが異なる場合、長い配列の末尾を合計の配列に追加します。 結果を返します。 場合のxの深さがより厳密に小さいYの深さ、再帰的に適用されます+にXとのすべてのアイテムのy、その結果を返します。 yの深さが厳密にxより小さい場合は、逆の操作を行います。 たとえば、操作[1、[2、3]、[4]] + [[[10、20]、[30]、40、50]、60]を考えます。 左引数の深さは2で、右引数の深さは3なので、[1、[2、3]、[4]] + [[10、20]、[30]、40、50を計算します]および[1、[2、3]、[4]] + 60。 [1、[2、3]、[4]]および[[10、20]、[30]、40、50]は両方とも深さが2であるため、1 + [10、20]、[2、3 ]を計算します+ [30]及び[4] + 40。 1 + [10、20] = [1 + 10、1 + 20] = [11、21] [2、3] + [30] = …

4
強く接続されたコンポーネント
有向グラフ内の2つの異なる頂点は、グラフ内に互いからのパスがある場合、強く接続されます。強連結成分グラフのサブセットに別個の頂点の各ペアが強固に接続され、サブセットにそれ以上の頂点を追加すると、このプロパティを破るであろうように、グラフのサブセットです。 あなたの課題は、グラフを強く接続されたコンポーネントに分離することです。具体的には、グラフ内のすべてのSCCを出力する必要があります。 I / O: 入力として、有向エッジのリスト、隣接リスト、隣接行列、またはその他の妥当な入力形式を使用できます。よくわからない場合は尋ねてください。グラフには完全に接続されていない頂点がなく、自己エッジがないと仮定できますが、それ以上の仮定はできません。オプションで、頂点の数だけでなく、頂点のリストを入力として使用することもできます。 出力として、各サブリストが強く接続されたコンポーネントである頂点のリストのリストなどの頂点のパーティション分割、または各ラベルが異なるコンポーネントに対応する頂点のラベル付けのいずれかを指定する必要があります。 ラベルを使用する場合、ラベルは頂点、または整数の連続したシーケンスである必要があります。これは、計算がラベルに流れ込むのを防ぐためです。 例: これらの例は、各エッジが1番目のエントリから2番目のエントリに向けられているエッジのリストと、出力パーティションを取ります。この形式または別の形式を自由に使用できます。 入力は最初の行にあり、出力は2行目にあります。 [[1, 2], [2, 3], [3, 1], [1, 4]] [[1, 2, 3], [4]] [[1, 2], [2, 3], [3, 4]] [[1], [2], [3], [4]] [[1, 2], [2, 1], [1, 3], [2, 4], [4, 2], [4, 3]] [[1, 2, 4], [3]] [[1, …

15
n番目の完璧な力を見つけましょう!
完全な力はいくつかの形a**bであり、どこa>0でb>1。 たとえば、125はとして表現できるため、完全なパワー5**3です。 ゴール あなたの仕事はn、正の整数が与えられたときに、-thの完全なべき乗を見つけるプログラム/関数を書くことnです。 スペック 最初の完全な力は1(つまり1**2)です。 合理的な形式の入出力。 組み込みが許可されます。 さらに詳しい情報 OEIS A001597 得点 これはcode-golfです。バイト単位の最短ソリューションが優先されます。 テストケース input output 1 1 2 4 3 8 4 9 5 16 6 25 7 27 8 32 9 36 10 49

8
行列を変換する
行列A(行列の次元の最大値が100)が新しい行列Bに変換されるプログラムまたは関数を記述します。新しい行列Bの各要素は、行列Aの対応する要素の正の隣接要素の合計です。 。 直交する4方向の近傍のみが考慮され、エッジはラップアラウンドしません。 入力例: 1 2 3 4 -1 -2 -3 -4 10 1 2 10 出力: 6 4 2 1 6 13 5 12 10 2 11 12 ルール: 入力として整数を使用します。 これはcode-golfであるため、バイト単位の最短コードが優先されます。
16 code-golf  math  matrix 

10
潜在的に巨大なファイルからn個のランダムな行を読み取ります
この課題は、ファイル全体をメモリに読み込まずに、潜在的に巨大なファイルからランダムな行を読み込むことです。 入力 整数nとテキストファイルの名前。 出力 n 置換せずにランダムに均一に選択されたテキストファイルの行。 これnは、1からファイル内の行数の範囲にあると想定できます。 n答えが均一になる範囲からランダムに数値をサンプリングする場合は注意してください。rand()%nCでは、たとえば均一ではありません。すべての結果は等しく等しくなければなりません。 ルールと制限 テキストファイルの各行の文字数は同じで、80文字以下です。 次の場合を除き、コードはテキストファイルの内容を読み取ってはなりません。 出力する行。 テキストファイルに1行あたりの文字数を計算する最初の行。 テキストファイルの各文字は、正確に1バイトであると想定できます。 行区切り文字は1バイト長であると想定されます。ソリューションでは、この必要性が指定されている場合にのみ、2バイトの長い行区切り文字を使用できます。最後の行が行区切り文字で終了していると仮定することもできます。 答えは完全なプログラムである必要がありますが、便利な方法で入力を指定できます。 言語とライブラリ 任意の言語またはライブラリを使用できます。 ノート ファイルの行数の計算に懸念がありました。nimiがコメントで指摘しているように、これはファイルサイズと1行あたりの文字数から推測できます。 動機 チャットでは、これは本当に「YなしでXを行う」の質問かと尋ねられた人もいました。これを解釈して、制限が異常に人工的なものであるかどうかを尋ねます。 巨大なファイルから行をランダムにサンプリングするタスクは珍しくなく、実際に私が時々しなければならないタスクです。これを行う1つの方法はbashです。 shuf -n <num-lines> ただし、ファイル全体を読み取るため、大きなファイルでは非常に遅くなります。

1
Alphysの最新パズルの開発を支援してください!
地下の王立科学者アルフィスは、新しいパズルのプロトタイプを完成させました。しかし、彼女はそれをテストしてくれる人を見つけることができないようです。 彼女のパズルのルールは次のとおりです。 目標は、左側の中央のタイルから開始して右側に到達することです。高さが偶数のパズルの場合は、2つの中央のタイルの下から始めます。(例:インデックス0の4x4配列では、開始位置は[2,0]-行2、列0になります。インデックス0の5x5配列では、開始位置は[2,0]-行2、列になります0.) 各色のタイルには、独自の「サディスティック」機能があります。 ピンクと緑のタイル(「P」と「G」として表される)は何もしません 赤と黄色のタイル(「R」、「Y」)は通過できません。 オレンジ色のタイル(「O」)により、プレイヤーはオレンジのような香りがします。 紫色のタイル(「U」)は、プレーヤーを向いている方向の次のタイルに移動させ、レモンのような匂いを与えます。 青いタイル(「B」)は、プレイヤーがオレンジのような匂いがしない限り問題ありません。 フレーバーのメカニズムを明確にするために、プレイヤーの匂いは無期限に、または異なる香りのタイルで上書きされるまで持続します。つまり、プレイヤーがオレンジ色のタイルを踏むと、紫色のタイルを踏むまでオレンジの匂いがします。 さらに、青のタイルに垂直または水平に隣接して黄色のタイルを配置すると、青のタイルも通過できなくなります。 あなたのタスクは、入力としてパズルのレイアウトを表す2次元文字配列(または1D文字列配列、または他の有効な形式)を受け入れ、元のパズルと解かれたパズルの両方をアスタリスクなどで出力するプログラムまたは関数を書くことです正しいパスを示す他の文字。与えられたパズルは解けると仮定します。 このパズルを例として使用してください。 BGYBG PGPBG PUBPB OUGYB PPOPP プログラムは次を出力します。 BGYBG PGPBG PUBPB OUGYB PPOPP BGYBG PGPBG ***** OUGYB PPOPP 使用するパズルは、これを使用して生成する必要があります。 標準コードのゴルフ規則が適用されます。最良の回答は、各言語で最短になります。回答には、言語、バイト数、および3つのテストケースが含まれている必要があります。最初の2つは任意のレイアウトにすることができますが、3つ目は次のようにする必要があります。 RRRR RPPR PUOR RPBP

20
数字を分解してください!
あなたの仕事は、以下の形式を使用して数値を分解することです。 これはベース変換に似ていdigitsますが、ベースにリストする代わりに、リストをvalues入力に追加するようにリストします。 指定されたベースがの場合、nリスト内の各数値はの形式である必要があります。k*(n**m)ここで0<=k<nおよびmはリスト全体で一意です。 スペック 合理的な入力/出力フォーマット。プログラム/関数は2つの入力を受け取り、リストを出力します。 出力リストの順序は任意です。 0 除外または含めることができます。 リード0は許可されます。 組み込みが許可されます。 テストケース number base converted list input1 input2 output 123456 10 [100000,20000,3000,400,50,6] or [6,50,400,3000,20000,100000] 11 2 [8,2,1] or [0,0,0,0,8,0,2,1] 727 20 [400,320,7] 101 10 [100,1] or [100,0,1] 得点 これはcode-golfです。バイト単位の最短ソリューションが優先されます。
16 code-golf  number  sequence  number-theory  base-conversion  code-golf  bitwise  hashing  code-golf  string  ascii-art  whitespace  code-golf  math  code-golf  code-golf  image-processing  counting  code-golf  math  arithmetic  checksum  code-golf  code-golf  math  arithmetic  number-theory  code-golf  array-manipulation  random  code-golf  string  code-golf  math  ascii-art  base-conversion  code-golf  graphical-output  geometry  3d  code-golf  math  linear-algebra  matrix  code-golf  math  number  sequence  code-golf  array-manipulation  code-golf  math  matrix  linear-algebra  code-golf  number  sequence  counting  code-golf  string  code-golf  string  restricted-source  quine  sorting  code-golf  string  geometry  code-golf  string  code-golf  networking  code-golf  base-conversion  code-golf  math  matrix  code-golf  arithmetic  linear-algebra  matrix  code-golf  number  arithmetic  grid  code-golf  number  source-layout  code-golf  string  bitwise  checksum  code-golf  array-manipulation  code-golf  string  probability-theory  code-golf  tips  code-golf  sequence  code-golf  string  math  sequence  calculus  code-golf  string  palindrome  bioinformatics  code-golf  math  combinatorics  counting  permutations  code-golf  parsing  logic-gates  code-golf  arithmetic  number-theory  combinatorics  code-golf  math  sequence  polynomials  integer  code-golf  string  ascii-art  chess  code-golf  string  code-golf  number  code-golf  string  ascii-art  parsing  code-golf  code-golf  number  natural-language  conversion  code-golf  arithmetic  code-golf  string  code-golf  ascii-art  decision-problem 

30
交互サインシーケンス
前書き 数値の符号は、a +、または-ゼロ以外のすべての整数に対してaです。ゼロ自体は無意味です(+0と同じです-0)。次のシーケンスでは、正符号、ゼロ、負符号を交互に使用します。シーケンスはで始まる1ため1、正の符号、ゼロ(これは奇妙ですが、数字に0を掛けるだけ)と負の符号で記述します。 1, 0, -1 次の番号は2で、同じことを繰り返します。 2, 0, -2 最終的なシーケンスは次のとおりです。 1, 0, -1, 2, 0, -2, 3, 0, -3, 4, 0, -4, 5, 0, -5, 6, 0, -6, 7, 0, -7, ... または、より読みやすい形式: a(0) = 1 a(1) = 0 a(2) = -1 a(3) = 2 a(4) = 0 a(5) …

10
落下ボールマップの作成
前書き 以前にこのゲームを聞いたことがない人のために。できるだけ長く生き残る必要があるボールをプレーしています。これは、左または右に移動して穴に移動することによって行われます。マップは上に移動するため、長く生き残るためには下に移動する必要があります。画像を検索する場合、おそらく私が意味するゲームを知っているでしょう。 タスク 正の整数nを指定すると、n層の落下ボールマップが出力されます。レイヤー間には、4つの改行があります。レイヤーの幅は25個の下線文字で構成され、長さ5の穴が1つあります。つまり、合計幅は30になります。これは各レイヤーの後にランダムにシフトされます。有効なレイヤーの例は次のとおりです。 _______________ __________ 穴は、レイヤーが円柱のように端にある場合もあります。 _________________________ 先頭に2つのスペースと末尾に3つのスペースがあることに注意してください。作る単一幅5の穴を。 テストケース 以下のために、N = 4、これは有効な出力です。 _______________ __________ ______ ___________________ _______________________ __ _________________________ 注:穴は均一に分布している必要があります。末尾および/または先頭の改行が許可されます。 これはcode-golfであるため、バイト数が最小の提出が勝ちです!

15
最小スカラー積
最小スカラー積 このコードゴルフの問題のインスピレーションは、Googleのコードジャムコンペティションにあります。問題の背後にある前提は、長さが異なる2つのベクトルの入力が与えられると、可能な最小のスカラーを見つけることです。スカラーは、次の式を使用して見つけることができます。 x1 * y1 + x2 * y2 + ... + xn * yn ただし、問題は、入力ケースの数字の順序に応じて、スカラーの複数の値を見つけることができることです(以下を参照)。あなたの目標は、入力ケース番号を方程式にプラグインしてそれを解くことにより、可能な最小のスカラー整数解を決定することです。入力ですべての数字を使用できるのは1回だけであり、すべての数字を使用する必要があります。 次のベクターを使用して例を提供させてください。 入力 3 1 3 -5 -2 4 1 出力 -25 行の最初の整数は、各ベクトルの数値の数nを表します。この場合、各ベクトルに3つの数値があります。 数値nはテストケースごとに異なる場合がありますが、常に2つのベクトルがあります。 入力例では、最小のスカラー積は-25です。 (-5 * 4) + (1 * 1) + (3 * -2) = 25 ルール 両方のベクトルで各整数を一度だけ使用できます。 ベクトル内のすべての整数を使用する必要があります。 出力には最終製品のみを含める必要があります どの言語でも、上記のすべての仕様に従う最小のコードでソリューションを選択します! ヒント:コードを短くしない限り、この問題を総当たりする必要はありません。最小スパンスカラーの検出には、特定の方法が含まれます:)。

6
誰が言った?2016年大統領選挙
この課題では、あなたの仕事は、候補者が言った短い段落またはいくつかの文を取り、それを誰が言ったかを出力する300文字未満のプログラムを作成することです。 入力:関数へのパラメーター、プログラムへの入力などとして使用できます。短い段落で、適切に区切られています。 出力:あなたがそうだと思う候補。これは Ben Carson (1) Ted Cruz (2) John Kasich (3) Marco Rubio (4) Donald Trump (5) Hillary Clinton (6) Bernie Sanders (7) 3月1日の時点で中退した人の名前は省略しました。名前自体を出力することも、より便利なことに、名前に対応する番号を出力することもできます。 スコアリング: あなたのスコアは、あなたが正しいテストケースの割合です。最高スコアが勝ちます。コードゴルフのように、タイ(またはパーフェクトスコア)はコードの長さによって分割されます。 テストケースは以下から取得できます。 http://www.presidency.ucsb.edu/debates.php これまでに起こった(3月1日以前の)民主党と共和党の両方の議論をクリックしてください。「段落」の長さが20文字未満でない限り、すべての段落はテストケースです。 特定のページからテストケースを引き出すコードは次のとおりです。 var t = $(".tools").parentNode.querySelectorAll("p"); var categ = {}, cur = 0; for (var i = 0; i < t.length; …

10
列からのブロック対角行列
Stack Overflowのこの質問からコピーしたものに触発されました。 行列が与えられた場合A、Bの列がAブロック対角形式で配置されるように行列を作成します。たとえば、与えられた 1 2 3 4 5 6 出力は 1 0 0 4 0 0 0 2 0 0 5 0 0 0 3 0 0 6 ルール 入力と出力は、2D配列、ネストされた配列、または行と列の区切り文字が異なる文字列の形式です。 入力(行列A)の数値は正の整数になります。 出力のゼロが何らかの合理的な方法で表示される限り、単項形式が許可されます。たとえば、上記の結果は、引用符を使用して各番号を囲むことで表示できます。 '1' '' '' '1111' '' '' '' '11' '' '' '11111' '' '' '' '111' '' '' '111111' …

24
繰り返しのないランダム配列
ここで1つの課題に答えていましたが、このタスクは課題の一部でした。私はjavascriptで73バイトのソリューションを持っています。しかし、単純なことには多すぎると思います。 チャレンジ 入力として2つの整数を与えます: N 予想される配列の長さ R1で始まる間隔の範囲:1..Rではなく0..R-1 プログラム/関数の実行ごとに、1つの値が複数回発生しないようにN値が異なる長さの1つの異なる配列を出力します1..R。 R-valueコードで使用する必要があります。 制限事項 以下を想定できます2 <= N <= R。 私は本当に73バイトより短いJavaScriptソリューションを見たいと思っています。 しかし、もちろん、それはすべての言語に開かれています! あなたの言語が配列を返せない場合、すべての数字を印刷できます;)

5
ネストされた数字リード文字列を解析する
タスク 文字列Sは、次のプロセスで構築されます。 S空の文字列から始めます。 Sの形式の文字列のある位置に挿入しますds。ここでdは0以外の数字でs、d小文字のASCII文字の文字列です。dsはの構成要素であると言いSます。 ステップ2に進むか、停止します。 あなたの仕事は、そのような文字列を入力として受け取り、その構成要素を先頭の数字の出現順に連結して単一の文字列に出力することです。出力は単一の文字列でなければならず、構成要素間に区切り文字(改行を含む)を含めることはできません。入力文字列と出力文字列に引用符を付けるかどうかを選択できます。入力と出力が空になることはありません。 例 上記のプロセスで文字列を作成しましょう。構成要素の構造は、最終結果で強調表示されます。 S = "" // Insert "3abc" S = "3abc" // Insert "2gh" after 'a' S = "3a2ghbc" // Insert "1x" before '3' S = "1x3a2ghbc" // Insert "3tty" after '3' S = "1x33ttya2ghbc" // Final result └┘│└┴┴┘│└┴┘││ └────┴───┴┘ 出力は、数字の順に構成要素を連結することによって取得されます。この場合、正しい出力は "1x3abc3tty2gh" ルールとスコアリング 完全なプログラムまたは関数を作成できます。最小のバイトカウントが優先され、標準の抜け穴は許可されません。 …

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