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

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

6
ロールオーバーカレンダー
これは、SandboxのDowngoatの質問の1つに触発され、日/月形式を使用する人には4月31日をPi日として含めることを提案しました。 日付文字列を 無効な月/日形式の指定すると、ロールオーバーを使用して正しい日付を出力します。(最初に月をロールオーバーし、次に日をロールオーバーします)。 例: 「15/43」 -これは、15か月目の43日目と読みます。最初に、月を翌年に繰り越すため、最終的に3(3月)になります。現在、3月は31日しかないため、余分な日を4月にロールオーバーし、実際の日付を「4/12」として出力します。(4月12日)ます。 「3/16」 -これは有効な日付です(3月16日)。そのまま返してください。 「12/64」は -ああ、非常に多くの思い出12月第64回から... 12月31日を持って、1月には、私は本当に平均であるので、どのような31日間、持っている「2/2」(2月2日)を。 「19/99」 -最初に、19は7(7月)になります。7月には31日、8月には31日、9月には30日があるため、出力は「10/7」(10月7日)です。 「1/99999」 -1年は365日です。99999(mod 365)=354。年の354日は"12/20"です。 "9999999/10" -どうやら、9999999(mod 12)= 3なので、これは"3/10"(3月10日)です。 基準: 入力月は0より大きい整数です。入力日は0より大きい整数です。処理するうるう年がないため、年を指定する必要はありません。 更新: 私はそれが挑戦を過度に単純化すると思うので、Java Calendarクラスにあるようなカレンダー機能は禁止されています。ただし、日付の解析/書式設定機能は引き続き使用できます。
17 code-golf  date 

16
部分積を出力する
で長い乗算、数を乗算した後、あなたが出力それらの部分積を意志この挑戦に、部分積が残されています。 長い乗算は長いため、コードを補正するにはできるだけ短くする必要があります。 例 34, 53 102, 1700 48, 38 384, 1440 361, 674 1444, 25270, 216600 0, 0 0 1, 8 8 仕様書 入力/出力は、配列、コンマ区切りの文字列(または数字ではないその他の区切り文字)、リスト、関数の引数など、妥当な形式にすることができます。 部分的な製品は昇順でなければなりません。 部分的な製品がの場合、0出力するかどうかを選択できます。 これはコードゴルフなので、バイト単位の最短コードが勝ちです!

9
噴水を数える
噴水は、各コインがその下の行の2枚のコインに接触、または下の行であり、下段が接続されるように行のコインの配置です。これが21コイン噴水です。 あなたの課題は、指定された数のコインでいくつの噴水が作れるかを数えることです。 入力として正の整数が与えられます n。n存在するさまざまなコインファウンテンの数を出力する必要があります。 標準I / Oルール、標準の抜け穴は禁止されています。ソリューションはn = 101分以内に計算できる必要があります。 望ましい出力n = 1 ... 10: 1, 1, 2, 3, 5, 9, 15, 26, 45, 78 このシーケンスはOEIS A005169です。 これはコードゴルフです。最少バイトが勝ちます。

2
ビリヤードをする
このコードゴルフでは、ポケットに落ちる前に正確にn個のクッションに当たる最短ショットの方向を決定する必要があります。 ビリヤードテーブルは、次の特徴を持つ6ポケットプールテーブルです。 寸法は可変です(a x b) 摩擦なし:ボールはポケットに落ちるまで永遠に転がります ポケットとボールのサイズはほぼゼロです。これは、同じ位置にある場合にのみ、ボールがポケットに落ちることを意味します。 ボールは最初に左下の穴に置かれます(しかし、落ちません) テーブルの寸法(a、b)とnをヒットするクッションの数を入力として受け取り、ポケットに落ちる前に正確にn個のクッションをヒットする最短パスの角度を度数で返す完全なプログラムまたは関数を作成します。 a > 0 b > 0 0 <= n <10000000 0 < アルファ <90(度)精度:少なくとも10 ^ -6 例: で= 2、B = 1、N(1)(2)(3)次の図に:= 1三つの可能な経路が存在します。数値(1)は最短であるため、出力はatan(2)= 63.43494882292201度になります。 a = 2、b = 1、n = 4 の解はatan(4/3)= 53.13010235415598度です 試験サンプル: a = 2, b = 1, n = …

4
スイッチをひっくり返す
暗い部屋で目を覚ますと、対応するスイッチが付いた長方形のライトグリッドが表示されます。座標系を使用して、左下のライトが(1,1)を表し、上方向(y方向)および右方向(x方向)に座標が増加することを決定します。グリッドは、(a、b)でスイッチを切り替えると(a、b)のライトと( a、b)。 入力は、オンとオフを表す2つの異なる文字の長方形のグリッドになります(それぞれ1と0を使用します)。また、入力の一部は、フリップするスイッチを表す一連の少なくとも1つの座標ペア(任意の形式と間隔)になります。 出力は同じグリッドになり、入力として指定された各座標ペアに「フリップ」が適用されます。入力をフォーマットする方法を選択できますが、出力は配列ではなくグリッドでなければなりません。 サンプル サンプル入力1 111111 111111 111111 111111 (3,2) サンプル出力1 110111 110111 000000 110111 サンプル入力2 01101 10100 00010 11111 10110 (1,1), (5,5) サンプル出力2 00010 00101 10011 01110 01000 サンプル入力3 1 (1,1) サンプル出力3 0 サンプル入力4 00000 11111 00000 11111 (2,3), (2,3) サンプル出力4 00000 11111 00000 11111 これはコードゴルフです。標準ルールが適用されます。バイト単位の最短コードが優先されます。
17 code-golf  grid 

1
スキッシュ-アンスキッシュ合字
以下は、Unicodeの一般的な合字のリストです (DebianのComposeキーで作成できるもの): Orig Ascii Lig ae [ae] æ AE [AE] Æ oe [oe] œ OE [OE] Œ ij [ij] ij IJ [IJ] IJ ff [ff] ff fi [fi] fi fl [fl] fl ffi [ffi] ffi ffl [ffl] ffl この課題には2つのオプションがあります。実際のUTF-8合字を使用するか、ASCIIのみのバリアントを使用します。実際のUTF-8合字バリアントを使用すると、20%のボーナスが得られます。ASCIIのみのバリアントを使用する場合、合字を示す場合を除いて、角括弧は関係しないと想定できます。 課題:入力として文字列を与え、同じ文字列を出力する 元のすべての合字が展開された対応物に置き換えられます。 貪欲に一致:affibとなりaffib(a[ffi]b)ではなく、affib(a[ff]ib)またはaffib(af[fi]b)。 すべての「展開された」文字列が合字に置き換えられます。 たとえば、æOEfoo([ae]OEfoo)はaeŒfoo(ae[OE]foo)になります。 :完全に独立してこれを行うffi([ff]iとなり)ffi(ffi、)ではありませんffi ([ffi])。 簡単に聞こえますか?キャッチがあります:2つの非合字がちょうど1文字重複するたびに 、両方の合字を文字列に挿入する必要があります。以下に、いくつかのテストケースを示します。 Input Ascii-output …

2
デイ#6のランダムゴルフ:d20を転がす
シリーズについて まず、これを他のコードゴルフチャレンジと同様に扱い、シリーズについてまったく心配することなく答えることができます。ただし、すべての課題にリーダーボードがあります。リーダーボードは、最初の投稿でシリーズに関する詳細情報とともに見つけることができます。 このシリーズにはたくさんのアイデアが並んでいますが、将来の課題はまだはっきりしていません。提案があれば、関連するサンドボックスの投稿でお知らせください。 穴6:d20を転がす テーブルトップRPGで非常に一般的なダイスは、20面ダイス(20面体、一般にd20として知られています)です。このようなサイコロを振るのはあなたの仕事です。ただし、1〜20の間の乱数を返すだけの場合は、少し簡単です。だからあなたの仕事は、与えられたダイのランダムネットを生成することです。 次のネットを使用します。 これは三角形のストリップなので、整数のリストとして簡単に表すことができます。たとえば、入力が与えられた場合: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] それは次のダイスに対応します(楽しい事実:これはマジックが使用するネットです:ライフカウンターの収集 /スピンダウンサイコロ)。 ただし、このダイを表すネットはこれだけではありません。顔の展開方法に応じて、60種類のネットがあります。さらに2つあります。 [1, 8, 9, 10, 2, 3, 4, 5, 6, 7, 17, 18, 19, 11, 12, 13, 14, 15, 16, 20] …

9
セブンのサイクルサムシーケンス
7×0から7×9までの7の乗算表を見てください。 0, 7, 14, 21, 28, 35, 42, 49, 56, 63 自分の場所の数字だけを見ると、数字0〜9の順列が得られます。 0, 7, 4, 1, 8, 5, 2, 9, 6, 3 正の10進整数Nを取り、Nの各桁Dを7×Dの場所の桁に置き換えることを検討してください。 たとえば、15209なっ75403ているため1にマップ7、5にマップは5、2にマップ4、0にマップ0、および9にマップ3。 さて、この新しい10進整数でサイクルを見るまで、つまり、すでに見た整数が現れるまで、このプロセスを繰り返しましょう。 たとえば15209、サイクルを取得すると 15209 -> 75403 -> 95801 -> 35607 -> 15209 -> repeats... ^ | cycle restarts here 別の例として505、短いサイクルがあります 505 -> 505 -> repeats... ^ | …

7
日付形式の紛争の解決
日付のフォーマット順序は、今日世界が直面している最も複雑で分裂的な問題の1つです。私たちの一部は、月/日/年が適切であると激しく主張します。他の人は、日/月/年が最高であると大声で宣言しています。 いい加減にしろ。コンピューターはこの論争を簡単かつ公正に解決できます。完全な関数またはプログラムであるコードは、スラッシュなどで区切られた日付文字列を取ります12/1/2015。これは正確な形式であり、先頭にゼロを付けず、末尾に4桁の年を付けます。 それはなら間違いなく月/日/年、例えば10/31/1998、出力完全な月名、日、年で、この正確な形式でその日付のテキスト表現:October 31, 1998 それはなら間違いなく日/月/年、例えば25/12/1989、出力テキスト表現の同じ種類:December 25, 1989。 月/日/年か日/月/年かがあいまいな場合は、次のように2つの可能な日付を組み合わせてあいまいさを解決する日付を出力します。 名前の最初の半分取ることによって、新しい月の名前を作成して、以前の月をし、後半追加後の月を。長さが奇数の月の場合、前半には余分な文字が付きます。明示的には、数ヶ月の最初の半分でありJanu、Febr、Mar、Apr、Ma、Ju、Ju、Aug、Septe、Octo、Nove、およびDece第二半部は、したがってありary、uary、ch、il、y、ne、ly、ust、mber、ber、mber、およびmber。 2つの可能な日を平均して日を計算し、平均が整数でない場合に床を取ります。 for 10/8/2011、outputなど、この日付のテキスト表現を出力しますAugber 9, 2011。 入力日付が月/日/年または日/月/年(13/13/2013または2/30/2002)にできない場合、任意の動作が許容されます。このコードはゴルフ、最短コードが勝ちます! テストケース: 10/31/1998 与える October 31, 1998 25/12/1989 与える December 25, 1989 10/8/2011 与える Augber 9, 2011 8/5/1957 与える Maust 6, 1957 9/12/2012 (奇妙なことに) September 10, 2012 1/1/2000 与える January 1, 2000
17 code-golf  string 

3
タイムトラベルのパラドックス
男性には2つのデバイスがあります。 タイムマシン -彼は考えることでこのマシンを制御できます。それにより、彼は、ある時点から過去または未来の別の時点(または現在の時点)にまったく時間をかけずに移動できます。彼がBからAに過去に移動する場合、AからBのすべての通常のイベント(タイムマシン、オルタネーターは除外)はまったく同じ方法で繰り返す必要があることに注意してください。その後、ポイントBからポイントAに戻ります。したがって、1回のタイムトラベルで無限ループが作成されます。 オルタネーター -この問題を認識して、彼は別のマシンを作成します。彼は、すべての物理的な出来事がループで繰り返されても、彼の考えが異なる場合があることに気付きます。したがって、このマシンは思考によっても制御できるように設計されています。マシンはいつでも使用して、使用した時間とは別の未来(過去ではない)を提供することができます。 例 長い例を使用して、すべての詳細を説明します。 1000 T+250 250 T+0 500 T-200 100 T-50 125 A 225 T-400 500 A 100 T-200 150 T-25 100 T+100 50 A 25 1000年が経過しました。今は1000年です。 彼は1000から1250まで移動します。 250年が経ちました。今は1500年です。 彼は1500から1500まで移動します。これは効果がありません(そして無視できます)。 500年が経ちました。2000年になりました 彼は2000年から1800年まで旅をしています。 100年が経ちました。今は1900年です。 彼は1900年から1850年に旅行します。 125年が経ちますが、今回は、彼がループに入っているため、状況は異なります。1850年から1900年に50年が経過します。彼は1850年にループバックします。1850年から1900年にさらに50年が経過します。彼は再びループバックします。25年が経過し、1875年、つまり125年を完了します。 彼はオルタネーターを使用しています。現在、彼が現在いる1875年とは別の未来があります。過去は変わりません。 225年が経ちました。現在は2100年です。 彼は2100から1700まで移動します。 500年が経過:1700年から1875年までは通常175年です。いいえ、彼はオルタネーターに再び出会うことはありません。つまり、1875年以降に3番目の未来が作られました。通常は325年が経過し、2200年になります。 まだ定義されていない2200の未来は1つしか存在しないため、オルタネーターを使用しても効果はありません(無視してもかまいません)。 100年が経ちました。現在は2300です。 彼は2300から2100に移動します。 150年が経過:2100年から2200年までは通常100年です。2番目の未来は2200から作成されます。50年が経過し、現在は2250年です。 彼は2250から2225に移動することになっています。しかし、現在2つの異なるタイムラインに2つの2225が存在します。したがって、これはパラドックスにつながります。なぜなら、彼がどの時点に到達するかを判断できないからです。(彼がより最近のタイムラインに行くとは想定しません)したがって、これでシミュレーションが終了します。 100 T+100 …
17 code-golf 

1
アルカンのルイス構造の描画
私は学校でアルカンについてのレッスンを受けたばかりで、おそらくそれが素晴らしいゴルフの挑戦に役立つと考えました!心配しないでください、見た目ほど複雑ではありません! クイックリハッシュ (注:この簡潔さを保つために、すべての情報が100%正確であるとは限りません。) アルカンは炭素と水素のストリングです。すべての炭素原子には4つの結合があり、すべての水素原子には1つの結合があります。アルカンのすべての炭素原子は、各C原子が他の2つのC原子(ルイス構造の左右)と2つのH原子(上下)に接続されているストリングを形成します。 C原子は他の1つのCにのみ接続されていますが、3つのHに接続されています。ペンタン(5個のC原子と12個のH原子を持つアルカン)の基本的な例を次に示します。 H H H H H | | | | | H-C-C-C-C-C-H | | | | | H H H H H アルカンは枝を持つこともできます。しかし、心配しないでください。この課題のすべてのアルカンは、1レベルの分岐だけで表現できます。例: H | H-C-H H H H | H | | | | | H-C-C-C-C-C-H | | | | | H H H H …

8
デジタルセルオートマトン
奇数の正の整数Nと10進数の文字列(0123456789)を取り込むプログラムまたは関数を作成します。文字列は、10状態の1次元セルオートマトンを表します。各桁は1つのセルを占有し、世代から世代への更新規則は、すべてのセルが、10を法とするセルを中心とするN個のセルの合計から生じる桁になることです。 最初と最後のセルは隣接セルのように折り返されるため、セルは常にN個のセルを中央に配置できます。Nは文字列の長さよりも大きい場合があることに注意してください。これは、Nが複数回折り返される可能性があり、それに応じていくつかの桁が複数回合計されることを意味します。 例として、Nが7で文字列がの038場合、合計するセルを視覚化するため038に、両方向に無限に繰り返すことができます ...038038038038038... に0変更される数字は、010を法としてanyを中心とした7桁の合計です。 ...038038038038038... ^_____^ | sum all these これは(0+3+8+0+3+8+0)%10、です2。 同様の数字3と8変化によって定義さに(3+8+0+3+8+0+3)%10= 5及び(8+0+3+8+0+3+8)%10= 0それぞれ。 したがって、後の世代038は250Nが7のときです。 プログラムまたは関数は、次世代の入力数字列の数字列を印刷または返す必要があります。すなわち、各セルに更新ルールを1回適用し、出力を提供します。バイト単位の最短コードが優先されます。 テストケース [digit string] -> [N = 1], [N = 3], [N = 5], [N = 7], [N = 9], [N = 43] 0 -> 0, 0, 0, 0, 0, 0 1 -> 1, …

6
N次元ベクトルの列挙
正の整数k > 1と非負の整数iを指定すると、非負の整数の- kタプル(または- k次元ベクトル)を生成します。すべてのためにk、ℕのにℕからマップkは、全単射でなければなりません。つまり、すべての入力iは異なるタプルを生成する必要があり、可能なタプルはすべてinputによって生成される必要がありますi。 プログラムまたは関数を作成し、STDIN(または最も近い代替)、コマンドライン引数または関数引数を介して入力を取得し、STDOUT(または最も近い代替)、関数の戻り値または関数(out)パラメーターを介して結果を出力できます。 出力には、便利で明確なフラットリスト形式を使用できます。 あなたのソリューションは、上の人工的な制限を課すべきではないkとiはできますが、彼らはあなたの言語のネイティブ整数のサイズに収まることを仮定してもよいです。少なくとも、最大の値をサポートする必要があり255ますが、ネイティブの整数サイズでさえそれより小さくなります。 いずれかのために1 < k < 32、(あなたの答えはサポートされていない場合は、もちろん、あなたのコードは、ほんの数秒で結果を生成する必要があり、以前のルールによる大規模な、制限が相応に調整されていること)。これは何の問題もないはずです。それは、そのようなことは2まで働くことは、この課題を解決することが可能です128数秒ではなく、制限は実際の反復を避け回答にありへの結果を見つけること。i < 231i0i 選択したマッピングの説明と、それが全単射である理由の正当性を回答に含めてください(これは正式な証明である必要はありません)。 これはコードゴルフで、最短の回答(バイト単位)が勝ちです。 関連する課題 非負のものから整数のペアを生成します すべての有理数のリストを出力します

11
ガンマ関数ゴルフ
実数所与tにおける(-10^9,13)(含まない-10^9か、13入力、出力として)Γ(t)としても知られている、ガンマ関数は以下のように定義されます: このタスクを解決するために組み込みのガンマ関数を使用したり、組み込みの数値またはシンボリック積分関数を使用したりすることはできません。出力は、有効数字6桁まで、または10^-6実際の値の範囲内で、指定された値に対する制限の少ない方が正確である必要があります。Pythonの組み込みガンマ関数は、実際の値を決定するために使用されます。あなたΓ(t)は定義されていると仮定することができます-つまりt、正の実数または非整数の負の実数-とその|Γ(t)| ≤ 10^9。Pythonの組み込みガンマ関数を使用して、実際の値を取得するために使用できる参照プログラムを次に示します。 例 1 -> 1.000000 -2.5 -> -0.945309 3.14159265 -> 2.288038 -2.71828182846 -> -0.952682 12 -> 39916800.000000 0.5 -> 1.772454 8.675309 -> 20248.386956 -10.1 -> -0.000002 ルール これはcode-golfであるため、最短の回答(バイト単位)が優先されます。 標準的な抜け穴は禁止されています。 入力および出力は、言語の標準と見なされる方法で実行できます。 完全なプログラム、関数、または通常あなたの言語にとって有効な答えと考えられるものを書くことができます リーダーボード この投稿の下部にあるスタックスニペットは、a)言語ごとの最短ソリューションのリストとして、およびb)リーダーボード全体としての回答からリーダーボードを生成します。 回答が表示されるようにするには、次のマークダウンテンプレートを使用して、見出しから回答を開始してください。 ## Language Name, N bytes N提出物のサイズはどこですか。スコアを改善する場合、古いスコアを打つことで見出しに残すことができます。例えば: ## Ruby, <s>104</s> <s>101</s> 96 bytes ヘッダーに複数の数字を含める場合(たとえば、スコアが2つのファイルの合計であるか、インタープリターフラグペナルティーを個別にリストする場合)、実際のスコアがヘッダーの最後の数字であることを確認します。 …

20
数学のコンペティショングレーダーを作る
アメリカの数学名誉協会であるMu Alpha Thetaが運営する数学大会に参加するのは楽しいです。競技会では、30問の多肢選択テストを受けます。質問ごとに5つの選択肢があり、A〜Eとラベル付けされています。 テストでの私のスコアは、正解ごとに4ポイント、空白のままの質問ではゼロポイント、間違った回答ごとにマイナス1ポイントです。 上記のスコアリングシステムに従ってテストを採点するプログラムを作成します。入力には、応答キーと応答が続く2つのコンポーネントが必要です。空白のままの質問は、空白として入力します。最初の入力には文字AE(または選択したae)のみを含める必要があり、入力に空白がないと想定できます。2番目の入力には、空白と文字AE(またはae)のみを含める必要があります。30問のテストを実装していない入力はInvalid test、出力として印刷する必要があります。 出力はグレードまたはでなければなりませんInvalid test。 ボーナス プログラムが最終スコアの後に数値を右、数値を空白、数値を間違って印刷する場合、(aR bB cW)20バイトを削除します。 サンプル入力 CABBDCABECDBACDBEAACADDBBBEDDA //answer key CABEDDABDC BACDBBAADE CBBEDDA //responses サンプル出力 ボーナスなし 73 ボーナス 73 (20R 3B 7W) 標準ルールが適用されます。バイト単位の最短コードが優先されます。
17 code-golf  string 

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