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

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

14
終了、純粋に周期的、または最終的に周期的?
前書き 有限の小数桁がある場合、小数は終了します。たとえば、0.4(2/5)は10進数が1つあるため終了します。 小数は、無限の数の小数桁を持ち、繰り返しのある小数の部分の前に小数桁がない場合、純粋に周期的です。たとえば、0.142857142857142…(1/7)は、繰り返しがあるため純粋に周期的です。 142857、小数点の直後から繰り返し始めます。 小数は、無限の小数桁数を持ち、繰り返しのある小数部の前に有限数の小数桁がある場合、最終的には周期的です。たとえば、0.166666666666666…(1/6)は最終的に周期的です。繰り返し6は1の後に繰り返されます。 あなたのタスク 数値pとq(整数、0 <= p < q <= 100)が与えられたときに、p / qの 10進表現がが終了するか、純粋に周期的か、最終的に周期的かます。 あなたは出力しなければならないaことの終端であれば(すなわち0.1)を、bそれは純粋に定期だ場合(すなわち0.333 ...)、またはcそれは結局定期だ場合(すなわち0.166 ...)、どこa、bと、cお好みのいずれかの明確な、定数文字列です。 テストケース 0/1 => Terminating 0/2 => Terminating 1/2 => Terminating 0/3 => Terminating 1/3 => Purely Periodic 2/3 => Purely Periodic 0/4 => Terminating 1/4 => Terminating 2/4 => Terminating 3/4 …
21 code-golf  math  number 

22
継続的な分数を単純化する
継続分数は、分数を反復的に記述する式です。それらはグラフィカルに表すことができます: または、値のリストとして表すことができます。 [a0; a1, a2, a3, ... an] チャレンジ: 基数:と分母値のリストを取得し、連続分数を単純化された有理分数に単純化します。分子と分母を個別に返すか、印刷します。a0[a1, a2, a3, ... an] 例: √19 : [4;2,1,3,1,2]: 170/39 ℯ: [1;0,1,1,2,1,1]: 19/7 π: [3;7,15,1,292,1]: 104348/33215 ϕ: [1;1,1,1,1,1]: 13/8 実装例:(python) def foo(base, sequence): numerator = 1 denominator = sequence[-1] for d in sequence[-2::-1]: temp = denominator denominator = d * denominator …

7
プログラミングパズル、ゴルフのコード
バックグラウンド イタリア語の定冠詞(英語theに対応)には、l '、il、lo、gli、i、la、leの 7つの異なる形式があります。どちらを使用するかは、3つの変数に依存します。 性別:男性/女性。 数:単数/複数。 後続の単語の頭文字:母音/子音タイプA /子音タイプB 母音は、これらのいずれかである:AEIOU。 子音タイプBは、これらのケースのいずれかである:S-別の子音が続く、Z-、gn-、PN- 、PS-、X-、I-(この母音が続くiは半母音として作用します)。 子音タイプAは、タイプBではない子音です。 表は、上記の3つの変数の12の組み合わせのそれぞれで使用される記事フォームを示しています。l '形式は、単一引用符でスペースなしで次の単語に付加されることに注意してください。 チャレンジ 単語と、性別と番号を示す1つまたは2つの文字列、数字、またはブール値を入力します。(最初の文字は、入力語から取得する必要があります)。 入力ワードは、小文字のASCII文字のシーケンスになります。アクセント付きの母音は、アクセントのない母音に置き換えられます(たとえば、realtàはrealtaとして入力されます)。 性別と数値の入力は、個別の数値、ブール値または文字列、または文字列の組み合わせ数(たとえば、男性の単数の場合は1、女性の単数の場合は2など)にすることができます。 回答で指定されている限り、任意の妥当な形式と区切り記号を使用できます。 出力単語は、物品の適切な形が先行し、必要に応じてスペースまたは単一引用符で、。出力も小文字にする必要があります。末尾または先頭の空白スペースが許可されます。 コードゴルフ、最短の勝利。 テストケース Iは、入力文字を使用して、以下にm、f性別を指定するために、及びs、p(これは単に1つの可能な入力形式である)数について。 Input Output Comment macchina f s la macchina Initial letter is cons. A zio m s lo zio Initial letter is cons. B libri m p i …

2
重なり合う円の境界線
平面上の複数のポイントの座標と、各ポイントを囲む円の半径を指定して、円と円が交わるエッジを表すポリゴンを描画します。まっすぐなエッジは常に円と円の交差線に沿って落ちますが、これらの線の全長に沿っていない場合があります。 パーmbomb007さんの提案、2D石鹸の泡の挙動を想像してみてください。それは技術的に間違っています。シャボン玉は常にエネルギーを最小化するために120°の角度で交わるのに対し、これらの円はどの角度でも交わることがあります。 これは、定義された面積平面を除いたボロノイ図です。アンドレアスに感謝します。これは実際には、パワー図と呼ばれるボロノイ図の一般化です。 例 たとえば、2つのポイントと2つの半径を指定すると、出力は次のようになります。 別のポイントと半径を追加すると、出力は次のようになります。 入力 入力は自由に構成できます。次の入力で結果を投稿してください。 テスト1 x:10、y:10、r:10 x:25、y:12、r:8 テスト2 x:8、y:10、r:6 x:20、y:8、r:4 x:18、y:20、r:12 出力 出力はグラフィカルで、ポリゴンの境界線を含む必要がありますが、他には何も必要ありません。ポイントや交差点は、例のように表す必要はありません。 制約 別の円の半径内にポイントは存在しません。 標準のcodegolfルール。 抜け穴のある回答は受け付けられませんが、気軽に楽しんでください。

2
さまざまな問題サイズで課題をスコアリングするにはどうすればよいですか?
これらの質問が具体的かつ回答可能である場合、メインのトピックに挑戦的な質問を書くためのメタに対するかなり強力なサポートがあります。しかし、まだそのような質問はありませんので、私は水域をテストすると思いました。この質問は、おそらく良い主観的、悪い主観的領域に入っていますが、それはチャレンジライティングの質問がどうあるべきかだと思います。質の高いコンテンツを生成するために、回答にワイルドな投機的なアイデアを投稿しないでください。以下に挙げた問題を回避する理由を説明するか、過去に提案された手法を使用して成功した既存の課題を理想的に示します。 特定の最適化の課題では、課題を設定する際の自由なパラメーターは、最適化する問題のサイズです。「最適化の課題」とは、回答が通常正確/最適であることが要求される最速コードのジャンルのようなものを意味するものではなく、課題は固定問題サイズまたは処理可能な最大問題サイズのいずれかで採点されます一定の時間で。根本的な問題に対する次善の解決策が許可され、可能性が高い場合でも、具体的に挑戦することを意味し、目標は可能な限り行うことです。 原則として、これは既知の最適なソリューションを持たない他のチャレンジタイプにも適用されますが、ビジービーバーチャレンジを考慮してください(ここでビジービーバーを使用しているのは、下記の問題を悪化させるためです)。たとえば、最も忙しいBrainfuckビーバーを見つけることに挑戦したいと思いました。ビジービーバーの問題における自由なパラメーターは、コードのサイズです。なんらかの方法でコードサイズを参照せずにチャレンジを設定することはできません。ある意味では、problem-sizeパラメーターの各値Nは、個別の(ますます困難な)課題を与えます。私の主な質問は、バランスの問題に陥ることなく、このようなチャレンジをどのように機能させることができるかです。 明らかな解決策は修正することNです:「N可能な限り多くの文字を印刷する/可能な限り多くのティックで実行する、ソースコードのバイトで終了するBrainfuckプログラムを見つける」。これには大規模なバランスの問題があります。サイズを小さくしすぎると、誰かがすぐに最も忙しいビーバーと挑戦は終わった。サイズを大きくしすぎると、最適なソリューションは終了する前に天文学的な量の文字を印刷します。つまり、そのようなプログラムを見つけるのは簡単であり、挑戦は忍耐で雑用/運動になります。忙しいビーバーはプログラムで見つけることができますが、代わりに、多くの人があまり楽しいとは思わない結果を正式に証明する必要があります。もちろん、この問題は、最適なソリューションの成長により、他のタイプよりも忙しいビーバーの課題でより顕著になりますが、それでも他の課題に当てはまります。 次のオプションでは、N制約なしのままにして、何らかの機能を介してスコアリングの一部にします。「通常の」チャレンジでも、総合スコアのバランスを正しく取るのは非常に困難ですが、忙しいビーバーの場合、最適なソリューションがN計算可能な機能よりも速く成長するという事実により、実際には基本的に不可能です。つまり、十分なN長さで実行するプログラムを簡単に見つけられるので、手間をかけずに良いスコアを得ることができるので、常に既存の最良の答えを打ち負かすことができます。 また、固定Nを設定し、N次のタイブレーカーとして使用されるより大きなビーバーも送信できるようにすることを検討しました。これには似たような問題があります。誰かが「同じように良いビジービーバーを見つける」ことができN、それによってネクタイを作成し、次にN大きなスコアを見つけるのが簡単な次のためにほとんど何でも提出することができます最適なスコアが難しくなります)。これらの場合、同じソリューションを使用して複数の人にどのように対処しますか?最適な場合には、それを禁止するのも奇妙です。 たぶん、合理的Nな知識を身につけてN、5バイト以内のすべてのサイズのビジービーバーを要求することにより、中途をたどることができるかもしれません。いずれかの手法で単一のものに)。私の最初の推測Nは興味深い挑戦をする範囲からまだ大きく外れている可能性があるため、これも十分に満足できるものではありません。 TL; DR:サイズが変動する問題を(準最適に解決し)最適化することが課題の場合、サイズを課題に組み込むにはどうすればよいですか?理想的には、人々Nが扱いやすいサイズの範囲の上限に近い値で作業できるようにしたいと思います。しかし、そのために最適な解決策が可能であることが判明したN場合、少し大きな解決策Nが重くなり始め、より興味深い問題のサイズで挑戦が続くことができれば素晴らしいでしょう。

30
「フィット」番号を出力する
「フィット番号」 サムには、圧縮に関する「素晴らしい」アイデアがあります。手伝ってくれますか? これがサムの圧縮スキームの要約です。最初に、厳密に2 ^ 16よりも小さい任意の自然数の基数10表現を取得し、先行ゼロなしのバイナリ文字列として書き込みます。 1-> 1 9-> 1001 15-> 1111 13-> 1101 16-> 10000 17-> 10001 65535-> 111111111111111 1つ以上のゼロのグループを単一のゼロに置き換えます。これは、数値がスリムになったためです。バイナリ文字列は次のようになります。 1-> 1-> 1 9-> 1001-> 101 15-> 1111-> 1111 13-> 1101-> 1101 16-> 10000-> 10 17-> 10001-> 101 65535-> 111111111111111-> 111111111111111 ここで、バイナリ文字列をベース10表現に変換し、受け入れ可能な形式で出力します。テストケースは次のとおりです。最初の整数は入力を表し、最後の整数は出力を表します。一部の数値は変わらないため、「適合」と呼ぶことができることに注意してください 1-> 1-> 1-> 1 9-> 1001-> 101-> 5 …

6
課題が回答に値するかどうかを判断する
私は非常にカジュアルなコードゴルファーであり、StackOverflowの「Hot Network Questions」サイドバーに投稿が表示されるまで、投稿を見ることはあまりありません。通常、私はゲームに遅れており、私が知っている唯一の言語はPythonであるため、すでにいくつかのPythonの答えがあるので、答える意味はほとんどありません。あなたの課題は、質問に答える価値があるかどうかを判断することです。 入力: コード(関数またはプログラム)は1つの入力パラメーターを取ります i 出力: 質問idのTruthyまたはFalsey値i。質問に5つ以上の回答、3つ以上の質問スコア、およびPythonで1つ以下の回答がある場合、Truthyを出力します(バージョンの区別はありません)。 規則/説明: 入力形式は合理的なものであれば何でもかまいません(stdin、file、command line)が、回答で指定する必要があります。データ型と先頭/末尾の空白は関係ありません。 に対して質問IDが有効であると仮定しcodegolf.stackexchange.comます。 言語固有の質問要件を無視します。(つまり、質問が投票と回答を満たし、Pythonの回答がJavaのみであるために回答がない場合でも、結果はTruthyになります)。 「python」(大文字と小文字を区別しない)が投稿の最初の改行の前のどこかにある場合、回答はPython回答とみなされます。 これはコードゴルフであるため、バイト単位の最短コードが優先されます。 サンプルケース* id = 79082 => True id = 78591 => False (less than 5 answers, also hella hard) id = 78410 => True id = 76428 => False (greater than 1 Python answer) id = …

18
いくつかの番号を解凍します
あなたの仕事は、10行の長さのジッパーを生成するプログラムまたは関数を作成することです。ジッパーの各行は2つのダッシュで表され--ます: -- -- -- -- -- -- -- -- -- -- プログラム/関数は入力としてパーセンテージ(10で割り切れる)を取り、出力は上部からパーセンテージで「解凍」(ダッシュで区切られた)ジッパーになり、1インデックス付きの最低レベルが2回繰り返されます。以前のすべてのレベルが4、6、8、...などを繰り返した。ジッパーの底を中央に保ちながら何度も。 例 >>10% -11- -- -- -- -- -- -- -- -- -- >>50% -1111111111- -22222222- -333333- -4444- -55- -- -- -- -- -- >>100% -11111111111111111111- -222222222222222222- -3333333333333333- -44444444444444- -555555555555- -6666666666- -77777777- -888888- -9999- -10- 入力(パーセンテージ)は好きなようにフォーマットできます(50%、. 5、50、5 [ゼロインプライド]など)。常に0〜100の範囲で、10で割り切れます。例は出力に保存する必要があります。

10
フィボナッチ分解
フィボナッチ数 フィボナッチ数で始まるf(1) = 1とf(2) = 1(いくつかは、f(0) = 0これは、この挑戦とは無関係である。その後、のためにn > 2、f(n) = f(n-1) + f(n-2)。 チャレンジ あなたの仕事はn、フィボナッチ数の積として表現できる正の正の数を見つけて出力することです。インデックスを0にするか、インデックスを1にするか、どちらか適切な方を選択できますが、回答でこれを指定する必要があります。 また、あなたの答えは、妥当な時間で100番目の用語を計算する必要があります。 テストケース n result corresponding product (for reference) 1 1 1 2 2 2 3 3 3 4 4 2*2 5 5 5 6 6 2*3 7 8 2*2*2 or 8 8 9 3*3 …

23
除数の削減
数値nの除数は、1とn自体を含め、nを均等に分割する任意の数値です。約数d(n)は、数に含まれる約数です。最初のカップルn のd(n)は次のとおりです。 n divisors d(n) 1 1 1 2 1, 2 2 3 1, 3 2 4 1, 2, 4 3 5 1, 5 2 6 1, 2, 3, 6 4 数から除数の数を繰り返し減算できます。例えば: 16 = 16 16 - d(16) = 16 - 5 = 11 11 - d(11) = 11 - …

3
テストをランダム化する
私は教師で、数日後に生徒にテストをしなければなりません。今、私は、最も愛する生徒たちが不正行為をするときに最も愛らぬ生徒たちに傷つけられることを常に心配しています。だから、誰もだまさないようにテストをランダム化したいと思います。 今、私はこの形式でテストを保存しています: When was Java invented? Why does this matter? 1941 War was beginning None of the above What is the increment operator in Java? Stack Overflow>how 2 incrememnt Google>how 2 incrememnt increment ++ つまり、質問は1つの空白行で区切られ、回答の前にはすべて2つのスペースがあります。これは私が必要とする出力です: What is the increment operator in Java? ++ increment Google>how 2 incrememnt Stack Overflow>how 2 …
21 code-golf  random 

3
順列平方根
数学では、次数nの順列 σは、整数1 ... nからそれ自体への全単射関数です。このリスト: 2 1 4 3 は、σ(1)= 2、σ(2)= 1、σ(3)= 4、σ(4)= 3のような置換σを表します。 順列σの平方根は、それ自体に適用されるとσを与える順列です。たとえば、2 1 4 3平方根はτ = 3 4 2 1です。 k 1 2 3 4 τ(k) 3 4 2 1 τ(τ(k)) 2 1 4 3 なぜなら、すべての1≤k≤nに対してτ(τ(k))= σ(k)だからです。 入力 順列を表す、n > 0の整数(すべて1〜nを含む)のリスト。順列は常に平方根を持ちます。 入力と出力が一貫している限り、0 ... n-1のリストを代わりに使用できます。 出力 配列としての順列の平方根。 制限事項 アルゴリズムはnの多項式時間で実行する必要があります。つまり、n個すべてをループすることはできません。次数nの順列。 …

7
これは部分行列ですか?
これは、この課題の2次元の一般化です。 私たちの目的では、Bから行と列の数を完全に削除してAを取得できる場合、1つの行列(または2D配列)Aは別の行列Bの部分行列と見なされます。(注:一部のソースには、異なる/より制限的な定義があります。) 以下に例を示します。 A = [1 4 B = [1 2 3 4 5 6 2 1] 6 5 4 3 2 1 2 1 2 1 2 1 9 1 8 2 7 6] Bから列2、3、5、6および行2、4を削除してAを取得できます。 B = [1 2 3 4 5 6 [1 _ _ 4 _ _ …

14
最小剰余シーケンスを生成します
すべての数値は、無限に長い剰余シーケンスを使用して表すことができます。私たちは数7を取り、そして実行した場合たとえば、7mod2その後、7mod3その後、7mod4など、私たちが得ます1,1,3,2,1,0,7,7,7,7,....。 ただし、下位のすべての下位シーケンスと区別するために使用できる、可能な限り短い残りのサブシーケンスが必要です。再度7を使用[1,1,3]するのが最も短いサブシーケンスです。これは、前のサブシーケンスのすべてが次で始まっていないため[1,1,3]です。 0: 0,0,0,0... 1: 1,1,1,1... 2: 0,2,2,2... 3: 1,0,3,3... 4: 0,1,0,4... 5: 1,2,1,0... 6: 0,0,2,1... 7を表すために[1,1] は機能しないことに注意してください。1を表すためにも使用できるためです。ただし、[1]1を入力して出力する必要があります。 入出力 入力は負でない整数です。上記で定義されているように、剰余の最小長シーケンスのシーケンスまたはリストを出力する必要があります。 テストケース: 0: 0 1: 1 2: 0,2 3: 1,0 4: 0,1 5: 1,2 6: 0,0,2 7: 1,1,3 8: 0,2,0 9: 1,0,1 10: 0,1,2 11: 1,2,3 12: 0,0,0,2 30: 0,0,2,0 42: …

3
不完全な指示に従う
あなたの友人が町で最高のレストランへの道順を教えてくれました。一連の左と右のターンです。残念ながら、彼らはあなたがそれらのターンの間にまっすぐに進む必要がある時間について言及するのを忘れていました。幸いなことに、すべてのレストランがある通りの地図があります。たぶん、あなたは彼らがどのレストランを意味したかを理解できるでしょうか? 入力 マップは、ASCII文字の長方形のグリッドとして提供されます。.道は、ある#建物であるAためにZ様々なレストランがあります。左上隅から始まり、東に進みます。例: .....A .#.### B....C ##.#.# D....E ##F### 友人の指示は、LsとRs を含む(潜在的に空の)文字列または文字のリストとして提供されます。 出力 入力文字列の左と右のターンに対応する任意のパスを歩くことができます。ただし、それぞれのパスの前と最後で少なくとも1ステップ先に進む必要があります。特に、文字列がで始まる場合、R一番左の列ですぐに南に行けないことを意味します。また、その場で180°向きを変えることはできません。 最後に到達した建物以外の建物やレストランを歩くことはできません。あなたは左上隅がであると仮定するかもしれません.。 友達の指示で到達できるすべてのレストランを、文字列またはリストとして出力する必要があります。 指示が少なくとも1つのレストランにつながると想定することができます。たとえばL、上記のマップではシングルは無効です。 上記のマップの例: <empty> A R F RR B,D RL C,E RLRL E RLLR C RLLL B RLRR D RLRRRR A,C RLLLRLL B 特にR届かないことに注意してくださいB。 プログラムまたは関数を作成し、STDIN(または最も近い代替)、コマンドライン引数または関数引数を介して入力を取得し、STDOUT(または最も近い代替)、関数の戻り値または関数(out)パラメーターを介して結果を出力できます。 標準のコードゴルフ規則が適用されます。 追加のテストケース 以下は、Conor O'Brienの好意による大きなマップです(少し修正しました)。 .......Y..........................###### .####.....#.##....##..######....#.###.## B.........#.##.#..##....##...##.#.#P...# .#.#####..#.##..#.##....##.#....#.####.# .#.#...C..#.##...G##..#.##.#....#.#....# .#.#.#.#..#.####.###.#..##.#....#.#.NO.# .#.#A#.#..#.##...F###...##.#.##.#......# …

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