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

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

24
Brexitはいつ発生しますか?
まあ、Brexit が起こった。そして、Sky Newsは天才であるため、バスの横にカウントダウンを作成することにしました。 あなたの仕事は似たようなことをすることです。英国は2019年3月31日にEUを離脱します。これには、毎秒変化するデジタルカウントダウンを作成する必要があります(0.05秒の偏差が許可されます)。 入力 あなたのプログラムはまったく入力を受け付けません。禁止されています! 出力 Brexitまでの時間をフォーマットで出力する必要がありますddd:hh:mm:ss。先頭と末尾の改行は許可されますが、表示は毎回同じ場所に留まる必要があります。実際には所定の位置で減少しているように見えるはずです。@AnthonyPhamが指摘したように、これは画面を「クリア」するのに十分な改行を印刷することを意味するものではなく、実際に画面をクリアする必要があることを意味します。 このような出力は許可されていません。 100:20:10:05 100:20:10:04 これも 100:20:10:05 *A thousand newlines* 100:20:10:04 彼らは複数の行にいるので。 Brexitの後に心配する必要はありません。あなたのプログラムは31/3/2019までしか動作しません ルール 標準的な抜け穴は許可されていません これはコードゴルフなので、バイト単位の最短コードが優先されます。 エラーメッセージ(方法は思いつきませんが)は許可されません コードは2年後(英国がEUを離れるとき)に実行でき、実際の時刻を表示する必要があり、730から再び開始することはできません(以下を参照) カウントダウンルール カウントダウンはハードコードされてはならず、Brexitが終了する前にいつでも実行でき、正しい結果を生成できるはずです。新しい日が始まると、時間は次の形式に従う必要があります 712:00:00:01 712:00:00:00 711:23:59:59 繰り返しますが、Brexitが終了する日付は、便宜上深夜31/31/2019です(31:3:19 00:00:00または31:3:2019 00:00:00またはその他の任意の形式) NB:私はすべてを持っていると思いますが、私はこれをサンドボックスに投稿しませんでした。さもなければ、タイミングがずれていたかもしれません。完璧ではないため、改善のための提案を自由に投稿してください。
27 code-golf  date 

24
クリスマスの日は?
序文 よく知られているキャロル「クリスマスの十二日間」では、ナレーターに毎日いくつかのプレゼントが贈られます。歌は累積的です -各節で、新しいギフトが追加され、その前のギフトよりも1つ多くなります。1つのヤマウズラ、2つのカメの鳩、3つのフレンチヘンなど。 与えられた詩Nで、N番目の四面体の数を見つけることで、これまでの曲のプレゼントの累積和を計算できます。 Verse 1: 1 Verse 2: 4 Verse 3: 10 Verse 4: 20 Verse 5: 35 Verse 6: 56 Verse 7: 84 Verse 8: 120 Verse 9: 165 Verse 10: 220 Verse 11: 286 Verse 12: 364 たとえば、4節以降、4 *(1ヤマウズラ)、3 *(2カメの鳩)、2 *(3フランスの雌鶏)、1 *(4羽の鳥)がありました。これらを合計すると、が得られ4(1) + 3(2) + 2(3) + …

6
ASCIIジグソーパズル
これは3x3ASCIIジグソーパズルです。 _____ _____ _____ | _| |_ | | (_ _ _) | |_ _|_( )_|_ _| | (_) |_ _| (_) | | _ _) (_ _ | |_( )_|_ _|_( )_| | _| (_) |_ | | (_ _) | |_____|_____|_____| これも3x3ASCIIジグソーパズルです。 _____ _____ _____ | |_ _| …

2
カインについてのハイパー
ハイパープログラミングに触発された:N + N、N×N、N ^ Nがすべて1つ。 @MartinEnderと@trichoplaxがサンドボックスで助けてくれたことに感謝します。 定義 ハイパークイン 定義hyperquineオーダーのNを QUINE状完全なプログラムまたは関数としてP を満たすに適用されるすべてのルール適切quines加えて、以下の構造を有し、そして。 Pは、同じ文字のn個のコピーで構成される文字‡グループの連結です。ときPが実行され、出力が文字の1つの以上のコピーによって拡張、同じグループの連結です。 例 ソースコードaabbccが出力を生成する仮想プログラミング言語ではaaabbbccc、このプログラムは次数2のハイパークインを構成します。 定義では、異なるグループの文字が異なる必要はありません。 ソースコードaabbccが出力を生成する場合、aaaabbbbccccプログラムは1次のハイパークインです。ソースコードは6つの単一文字グループ、6文字のペアの出力で構成されています。 ではGS2、空のプログラムを印刷\nし、プログラム\nを印刷\n\n。ただし、ハイパークインは、適切なクインのすべてのプロパティを満たさないため、ハイパークインで\nも\n\nありません。ソースコードのどの部分も、出力の別の部分をエンコードしません。 ハイパークインチェーン 次の制約を満たす、n個の完全なプログラムまたはn個の関数(P 1、…、P n)の有限シーケンスとして、長さnのハイパークインチェーンを定義します。 出力P 1、...、P N-1であるP 2、...、P nはそれぞれ、。 P 1、…、P nはハイパークインです。 次数P 1、...、P Nを形成狭義増加の配列に隣接する整数。 最後に、各初期間隔(P 1、…、P n)が長さnのハイパークインチェーンを構成するように、無限プログラムおよび関数(P 1、P 2、…)の無限シーケンスとして無限ハイパークインチェーンを定義します。 例 ソースコードは、仮想的なプログラミング言語のaabbcc出力を生成aaabbbccc順に、出力を生成し、、 aaaabbbbcccc、ペア(aabbcc、aaabbbccc)長さのhyperquineチェーン構成2。 aaaabbbbccccチェーンの最後のハイパークインの出力は、特定の出力を生成する必要がないことに注意してください。有効なソースコードである必要はありません。 場合は、前の例を続けるとaaaabbbbcccc、出力を生成するaaaaabbbbbccccc(トリプレットaabbcc、aaabbbccc、aaaabbbbcccc)長のhyperquine鎖構成3。 このパターンが永遠に続けば、シーケンスは(aabbcc、aaabbbccc、aaaabbbbcccc、...)無限hyperquineチェーンを構成しています。 出力(abc、aabbcc)を持つプログラムのペア(aabbcc、aaaabbbbcccc)はハイパーキンチェーンではありません。これは、ハイパーキンの次数が両方とも1であるため、厳密に増加するシーケンスを形成しないためです。 ハイパーキンの次数は1と4であるため、出力(aabbcc、aaaabbbbcccc)を持つプログラムのペア(aaaabbbbcccc、aaaaabbbbbccccc)はハイパーキンチェーンではありません。したがって、隣接する整数のシーケンスを形成しません。 ルール 仕事 選択したプログラミング言語で、重要なハイパーキンチェーン、つまり、少なくとも2つのハイパーキンで構成されるチェーンを記述します。 いつものように、あなたのプログラムはどんな形式でも入力を受け付けたり、独自のソースコードにアクセスしたりすることはできません。 インタプリタが暗黙的な改行を出力する場合、ハイパークインはこれを考慮する必要があります。 …

2
ハリケーンマシューとライトニングボルト
チャレンジ この挑戦と厄介なハリケーンマシューに触発され、私たちはいくつかの稲妻を動的に生成します。 n = 15: \ /\ / \ / / /\ /\ / \ \ / / /\ /\ \ / / \ /\ \ /\ / \ \ /\ / \ \ /\ 入力 正の整数nは、落雷の深さを決定します。 ルールと制約 /そして、\使用すべきです 雷の方向を導く確率は次のとおりです。 25%が2つのパスに分割 25%パスが行き止まりに達する 25%が残ります 25%が適切 以下に、重複および行き止まりに関するいくつかの例外があります。 コードは確定的であってはならず、毎回新しい稲妻がランダムに生成される必要があります ボルトはオーバーラップしてはなりません。たとえば、現在のボルトの左側にすでにボルトがある場合、現在のボルトは終了または右に移動する必要がありますが、左または分割にはなりません(確率は適用され、この場合は50%になります) / 50%right) 使用可能な別の分割パスが存在しない場合、パスは終了してはなりません。たとえば、パスが1つしかない場合は最初で、分割するまでパスは終了しません。 …

30
素因数を計算する
私たちは持っていた素因数分解の挑戦をしばらく前に、しかし、その挑戦は、ほぼ6歳で、私は新しいもののためにそれの時間を信じているので、やっと、私たちの現在の要件を満たしています。 チャレンジ 入力として1より大きい整数を取り、その素因数のリストを出力または返すプログラムまたは関数を作成します。 ルール 入力と出力は、任意の標準的な方法と標準的な形式で提供されます。 重複する要因を出力に含める必要があります。 出力の順序は任意です。 入力が2未満又は2以上ではありません31 1 - 。 組み込みは許可されていますが、非組み込みソリューションを含めることをお勧めします。 テストケース 2 -> 2 3 -> 3 4 -> 2, 2 6 -> 2, 3 8 -> 2, 2, 2 12 -> 2, 2, 3 255 -> 3, 5, 17 256 -> 2, 2, 2, 2, 2, 2, …

29
文字列をアルファベット順に並べ替えます
仕事 入力文字列(または文字の配列)が与えられると、その文字列内の文字のあらゆる可能な順列を出力するプログラムを書くことがあなたの目標です。私は自分の出力に精通しているので、重複しないようにアルファベット順にソートする必要があります。 例: 入力: buzz 出力: buzz bzuz bzzu ubzz uzbz uzzb zbuz zbzu zubz zuzb zzbu zzub ルール これはコードゴルフなので、最短のコードが優先されます。 各行の末尾のスペースは問題ありません 最後の行の後の単一の改行が許可されます(それ以上は許可されません)

21
プライマリストリング
プライマリ(binary-prime)文字列とは、バイナリグリッドとして記述されたときに、すべての行と列が総計を持つものです。 それはかなりあいまいな説明ですので、実際の例でそれを分解しましょう... この例では、文字列を使用しますbunny: まず、各文字のASCIIコードポイントとそのバイナリ表現を見つけます。 Char | ASCII | Binary b 98 1100010 u 117 1110101 n 110 1101110 n 110 1101110 y 121 1111001 これらのバイナリ値を上から下に取り、グリッドに配置します(必要に応じて先行ゼロを追加します)。 1 1 0 0 0 1 0 1 1 1 0 1 0 1 1 1 0 1 1 1 0 1 1 0 1 …

12
2の2のべき乗の和または差
あなたの挑戦であり、整数与えられた、あなたはそれを受け入れることを選択する必要がありK >= 1、負でない整数を見つけるAとB 、その結果ホールド以下の2つの条件のうち少なくとも1: K = 2^A + 2^B K = 2^A - 2^B そこに、このような存在しない場合AやB、あなたのプログラムは、任意の方法で動作をする場合があります。(明確にするために、AおよびB同等であってもよいです。) テストケース 多くの場合、複数の解決策がありますが、ここにいくつか例を示します。 K => A, B 1 => 1, 0 15 => 4, 0 ; 16 - 1 = 15 16 => 5, 4 ; 32 - 16 = 16; also 3, 3: 8 + …
27 code-golf  math 

11
純度の数
今日は、Collat​​z関数fに関連するシーケンスaを見ていきます。 我々は、フォームのシーケンスを呼び出す...、Z、F(z)は、F(F(z)を)このCollat​​zシーケンス。 最初の数私たちのシーケンスは、(1)は、ある0。fを繰り返し適用すると、サイクル0→0→… まだ見ていない最小の数は1で、a(2)= 1になります。fを繰り返し適用すると、サイクル1→4→2→1→… これで、上のサイクルで数値2が見られたため、次に小さい数値はa(3)= 3で、サイクル3→10→5→16→8→4→2→1→4→2→1に分類されます→… 上記のすべてのサイクルで、すでに4と5を見てきたので、次の数はa(4)= 6です。 ここまでで、アイデアが得られるはずです。a(n)は、すべてのa(1)、…、a(n − 1)の Collat​​zシーケンスの一部ではない最小の数です。 正の整数nを指定するとa(n)を返すプログラムまたは関数を作成します。バイト単位の最短コードが優先されます。 テストケース: 1 -> 0 2 -> 1 3 -> 3 4 -> 6 5 -> 7 6 -> 9 7 -> 12 8 -> 15 9 -> 18 10 -> 19 50 -> 114 (これはOEISシーケンスA061641です。)

30
12時間から24時間のタイムコンバーター
驚くべきことに、この単純なタスクはまだ存在していないようです... あなたの仕事は、入力として12時間の時間を取り、それを「軍事時間」または24時間の時間形式に変換するプログラムを書くことです。 入力は次の形式になります。 HH:MM am/pm わずかなバリエーションが許可されていますが: am / pmと残りの時間を区切るスペースはオプションです。 最後の部分は、「am」/「pm」または「a」/「p」のいずれかです。 大文字でも大丈夫です。 出力は、24時間形式に変換された入力時間になります。数値または文字列を指定できます。 入力と出力の両方について: 最初の0はオプションです。最後の3桁の0は必須です。 時間と分を区切る区切り文字は、「:」、「」(スペース)、またはなしです。 その他の注意事項: 真夜中は0000または2400のいずれかで表現できます。 真夜中は「午前」と見なされ、正午は「午後」と見なされます。 プログラムは関数または完全なプログラムであり、結果を返すか、標準出力に出力する必要があります。末尾の空白は問題ありません。 例(すべての形式をサポートする必要はありません): 12:00am -> 0000 1200 pm -> 1200 1234Am -> 00:34 134a -> 134 01:34PM -> 13 34 1234pm -> 1234 これはコードゴルフであるため、最小バイト数が優先されます。これはビルトインを使用して解決するのは非常に簡単なので、これを手動で解決するコードを見るといいでしょう(ただし、ビルトインの使用は問題ありません)。 明確にするために、考えられるすべての形式をサポートする必要はありません。(選択した)単一の入力および単一の出力形式のみをサポートすることは問題ありません。ただし、上記で概要を説明したようにフォーマットを制限したいと思います(これは既にかなり無料です)。{1134,'pm'}、たとえば、受け入れられません。

16
逆さまのテントを出力する
整数を指定すると、逆さまのテントを出力します。 入力により、テントのサイズ(絶対値)と、入り口が左側(負の数)か右側(正の数)かが決まります。 If input = -1: ____ \/_/ If input = -2: ________ \ / / \/___/ If input = -3: ____________ \ / / \ / / \/_____/ If input = 1: ____ \_\/ If input = 2: ________ \ \ / \___\/ If input = 3: ____________ \ …

30
部分文字列連鎖
前書き この例では、文字列Hello, World!と配列を取りましょう[3, 2, 3]。部分文字列チェーンを見つけるには、次のプロセスを実行します。 配列の最初の数は3、我々はサブ得るので、[0 - 3]あります、Hel。その後3、初期文字列から最初の文字を削除しlo, World!ます。 配列の2番目の数値は2ですので[0 - 2]、新しい文字列から部分文字列を取得しますlo。残りの文字列はになり, World!ます。 最後の数は、3私たちを与えます、, W。サブチェーンは、私たちを与える組み合わせたストリングのすべて、次のとおりです。 ['Hel', 'lo', ', W'] より視覚的な例: [3, 2, 3], 'Hello, World!' 3 -> Hel 2 -> lo 3 -> , W タスク 所与の非空の文字列と非空の配列のみからなる正の整数()、出力ストリングチェーン。配列内のすべての整数の合計が文字列の長さを超えないと仮定できます。> 0 また、文字列に改行が含まれないことも想定できます。 テストケース Input: abcdefghijk, [2, 1, 3] Output: ['ab', 'c', 'def'] Input: …
27 code-golf  string 

22
それよりも小さい最大の素数を繰り返し減算することにより、数は1に達することができますか?
チャレンジ: 数を指定して、それより厳密に小さい最大の素数を取り、この数からそれを減算し、それよりも小さい最大の素数でこの新しい数に再度これを行い、3未満になるまでこれを続けます。プログラムは真偽値を出力する必要があります。そうでない場合、プログラムは偽値を出力する必要があります。 例: これらはすべて、真の価値をもたらすはずです。 3 4 6 8 10 11 12 14 16 17 18 20 22 23 24 26 27 29 30 32 34 35 37 38 40 41 42 44 46 47 48 50 これらはすべて偽の値を与える必要があります。 5 7 9 13 15 19 21 25 28 31 33 36 39 …

26
(やや)自己参照文字列を作成する
あなたは(ここで、文字列を作りたい1-インデックス化されたインデックスの)文字がnありますn。ときにn10未満である、これは簡単です:"123456789"。nたとえば、12の場合、9を超える数(10を基数)は複数の文字を使用するため、不可能になります。文字列を2文字の部分文字列に分割することで妥協できます"020406081012"。これで、各部分文字列 の終わりのインデックスnはnです。 これは、任意のd数字に一般化できます。3桁の数字の文字列の「0991021」部分の説明は次のとおりです。 Index: ... * 97 98 99*100 101 102*103 ... * * * *---+---+---*---+---+---*---+ Character: ... * 0 | 9 | 9 * 1 | 0 | 2 * 1 | ... *---+---+---*---+---+---*---+ まだ理解していない場合は、文字列または整数を受け取り、上記のように自己参照文字列を出力するプログラム/関数を作成します。1桁の数字、文字、または1文字の文字列の配列を出力することもできます。 指定された整数は常に正で、その長さで割り切れます(たとえば、126は3で割り切れ、4928は4で割り切れます)。プログラムは理論的には任意の大きな入力に対して機能するはずですが、言語の最大整数や文字列の長さ、あるいはその両方よりも小さいと仮定できます。 それでも得られない場合の注意事項:出力の長さは常に入力そのものであり、出力に表示される数値は入力の桁数で割り切れます。 これはcode-golfであるため、バイト単位の最短回答が優先されます。 テストケース 1 => 1 9 => 123456789 10 => 0204060810 105 …

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