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

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

3
単語のリストをフォーマットする
課題は、各行にできるだけ多くの単語が含まれ、単語が不必要に切り捨てられないように、指定された文字数以下の複数行にわたって単語のリストをフォーマットすることです。 入力 入力は、スペースで区切られた単語のリストと、少なくとも4の数字になります。 出力 出力は、行にグループ化された入力単語である必要があります。これにより、行に入力番号より多くの文字が含まれることはありません。単語は入力された順に出力される必要があります。単語はカンマで区切り、次にスペースで区切る必要があります。ただし、各行の最後はスペースは不要です。単語が長すぎて行に収まらない場合は、他の規則に従って単語をできるだけ短く切り取り、最後に「...」を追加する必要があります。 テストケース Input: foo bar baz qux 12 Output: foo, bar, baz, qux Input: foo bar baz qux 5 Output: foo, bar, baz, qux Input: strength dexterity constitution intelligence wisdom charisma 10 Output: strength, dexterity, consti..., intell..., wisdom, charisma Input: quas wex exort 4 Output: ..., …
16 code-golf  string 

30
除外して追加
仕事 タスクは非常に簡単です。数字、大文字、小文字を含む空でない文字列が与えられた場合、残りの数字の合計を出力します。例えば: a1wAD5qw45REs5Fw4eRQR33wqe4WE すべての文字を除外すると、次のようになります。 1 5 45 5 4 33 4 これらの数値の合計は1 + 5 + 45 + 5 + 4 + 33 + 4 = 97です。したがって、出力はになります97。 テストケース a > 0 0 > 0 5 > 5 10 > 10 a0A > 0 1a1 > 2 11a1 > 12 4dasQWE65asAs5dAa5dWD > …

5
XORプライムを見つける
では、この課題 XNORによってもたらされる、我々はXOR乗算を実装するように求めていました。この課題の目標は、最初のnXORプライムを見つけることです。XORプライムは、次の定義からわかるように、通常のプライムに非常に似ています。 素数の定義: 1とそれ自体の乗算を除き、2つの数値の乗算では形成できない1より大きい正の数。 XOR Primeの定義: 1とそれ自体のXOR乗算を除き、2つの数値のXOR乗算では形成できない1より大きい正の数。XORプライムはoeisシーケンスA014580を構成することに注意してください。 XOR乗算は、キャリーなしのバイナリロング乗算として定義されます。xnorのchallengeでXOR乗算の詳細を見つけることができます。 入力: 整数n。 出力: 最初のnXORプライム。 500以下のXORプライムは次のとおりです。 2 3 7 11 13 19 25 31 37 41 47 55 59 61 67 73 87 91 97 103 109 115 117 131 137 143 145 157 167 171 185 191 193 203 211 213 229 …

7
Prologでのゴルフのヒント
Prologでゴルフをするための一般的なヒントは何ですか?私は、Prologに少なくともある程度固有の一般的なゴルフ問題のコードに適用できるアイデアを探しています(たとえば、1文字の変数は、プログラムのサイズを小さくするためにPrologに固有ではありません)。 Prologの実装に固有のものかどうかをヒントに明記してください(例:SWI-Prolog固有のビルトイン) 回答ごとに1つのヒントのみ、または同じメインアイデアに密接に関連するヒントのリストのみを投稿してください。
16 code-golf  tips 

2
増加するサブシーケンスへの分割
仕様 この課題は簡単に説明できます。入力は負でない整数の空ではない配列であり、タスクはできるだけ少ないサブシーケンスに分割することです。より正式にはA、入力配列がの場合、出力は次のBような配列の配列になります。 の各配列はB、A互いに素な(必ずしも連続していない)サブシーケンスへのパーティションを形成します。帰納的に、これはをB含むシングルトン配列Aであるか、の最初の要素BがのサブシーケンスでAあり、残りAがそのサブシーケンスが削除されたパーティションを形成することを意味します。 のすべての配列Bは(必ずしも厳密ではありませんが)増加しています。 配列の数Bは最小限です。 入力と出力の両方を、言語のネイティブ配列形式で取得できます。いくつかの正しい出力がある場合があることに注意してください。 例 入力配列を考えますA = [1,2,1,2,5,4,7,1]。可能な出力の1つですB = [[1],[1,2,4,7],[1,2,5]]。パーティションの状態は、次の図から明らかです。 A 1 2 1 2 5 4 7 1 B[0] 1 B[1] 1 2 4 7 B[2] 1 2 5 また、の各配列Bは増加しています。最後に、A増加する2つのサブシーケンスに分割できないため、の長さBも最小になります。したがって、それは有効な出力です。 ルールとスコアリング 関数または完全なプログラムを作成できます。最小のバイトカウントが優先され、標準の抜け穴は許可されません。期限はありませんが、提出する前にすべてのテストケースでソリューションを評価する必要があります。 テストケース 表示される出力は1つだけですが、有効なオプションがいくつかある場合があります。特に、結果の配列の順序は重要ではありません(ただし、個々の配列は昇順である必要があります)。 [0] -> [[0]] [3,5,8] -> [[3,5,8]] [2,2,2,2] -> [[2,2,2,2]] [1154,1012,976,845] -> [[845],[976],[1012],[1154]] [6,32,1,2,34,8] …

6
フラクタルシーケンスの収束和
バックグラウンド フラクタルシーケンスは、あなたがすべての整数の最初の発生を削除し、前と同じ配列で終わることができ整数シーケンスです。 このような非常に単純なシーケンスは、キンバリングの言い換えと呼ばれます。正の自然数から始めます。 1, 2, 3, 4, 5, 6, 7, 8, 9, ... 次に、いくつかの空白をリフルします。 1, _, 2, _, 3, _, 4, _, 5, _, 6, _, 7, _, 8, _, 9, ... そして、空白自体にシーケンス自体(空白を含む)を繰り返し入力します。 1, 1, 2, _, 3, 2, 4, _, 5, 3, 6, _, 7, 4, 8, _, 9, …

3
サイコロを転がす
サイコロを転がす だから、私はさっきサイコロを転がしていて、挑戦を考えていました。 入力と動きのリストから取得されたネットを持つキューブが与えられたら、最後の下部にある正方形を見つけます。 ここでは例としてこの画像を使用します。 入力 動きのリストで文字列を受け取ります。文字列には大文字のASCII文字N、S、W、およびEのみが含まれます。これらは、キューブをその方向に1ステップ移動することに対応します。 写真では、1つのNが底面を6にします。この画像では、北がカメラから離れ、南が向かっており、東が右、西が左です。 また、次の形式の文字列を受け取ります。1P2P 3P 4P 5P 6P。ここで、各PはN、S、W、E、T、およびBの位置です。TおよびBは下と上です。 数字はその数字の顔であり、文字は顔の位置を表します。明確でない場合、ネットは常に数字で順序付けられるため、1P 2P 3P 4P 5P 6P、決して2B 1T 3N 4S 5W 6E。 画像内の位置は1S 2B 3E 4W 5T 6Nです。 出力 プログラムは、下側を表す数値を出力する必要があります。 テストケース (nothing), 1S 2B 3E 4W 5T 6N -> 2 N, 1S 2B 3E 4W 5T 6N -> 6 …

11
Pi Day、Pi Minute、Pi Second?
この課題では、Pi Day、Pi Minute、Pi Secondのいずれであるかを判断する必要があります。 Piは非合理的であるため、コードをできるだけ短くする必要があります。 例 入力は提供されません。プログラムはシステム時刻を使用する必要があります。わかりやすくするために追加しました March 14, 2016 0:00:00 Pi Day December 25, 2015 3:14:45 Pi Minute December 29, 2015 0:03:14 Pi Second January 1, 2016 0:00:00 <No Output> Piの日/分/秒とは Pi Day 月は3月で、日付は14日です Pi Minute 時は3で、分は14です Pi Second 分が3で、秒が14の場合 Pi DayPi Minuteまたはの代わりに優先されるべきでありPi Second、のPi Minute代わりに優先されるべきですPi Second。 このチャレンジでは、12時間(15:14 == 3:14)を使用する必要があります。決定に使用される日付/時刻はPi …
16 code-golf  date  pi 

4
POSIXおよびWindowsで実行される実行可能スクリプトファイル
課題:任意のWindows固有のコードを実行するために、(PowerShellではなく管理者モードではなく)foo.cmdWindows cmd.exeプロンプトから呼び出すことができる単一のスクリプトファイルを記述します... > .\foo.cmd Hello Windows! ...だけでなく、一般的なPOSIX準拠する(Linux / OSX)から変更されていない呼び出される(プロンプトシェルbash、tcshまたはzsh任意POSIX固有のコードを実行するために、): $ chmod a+x foo.cmd $ ./foo.cmd Hello POSIX! ...サードパーティのインタプリタ/ツールのインストールまたは作成を必要としません。 私はこれが可能であることを知っていますが、クラフとは(つまり、Windowsでは、「Hello Windows!」の前にstderrまたはstdoutに1行または2行のゴミ/エラーメッセージが出力されます)。 勝利の基準は、(最初​​の)cruft行の数の最小化、および(2番目の)cruft文字の数の最小化です。 Cruftは、(任意の)ペイロードコードによって生成されないコンソール出力(stdoutまたはstderr)として定義できます。空白行は行数にカウントされます。改行は文字数にはカウントされません。両方のプラットフォームでクラフトスコアを合計する必要があります。clsそのようなメカニズムを無視して、残骸を一掃しますが、以前の端末出力も消去します。Windowsが@echo offまだ有効になっていないためにコマンドをエコーする場合は、現在のディレクトリとプロンプトの印刷に費やす文字を除外しましょう。 2番目の基準は、内部のソリューションのシンプルさ/優雅さfoo.cmdです。「インフラストラクチャ」が任意のペイロードコードに直接関与しない文字として定義されている場合、最初にインフラストラクチャ文字を含む行の数を最小化し、次にインフラストラクチャの総数を最小化します文字。 ファイルにCRLFの行末があるにもかかわらずPOSIX部分が機能する場合の追加の称賛!(最後の部分が可能かどうかわからない。) 私の既存のソリューションは、他の人がチャンスを得たらここに投稿しますが、6行のインフラストラクチャコード(改行を除く52文字)を使用します。5行のクラフを生成し、そのうちの2行は空白で、すべてがWindowsで発生します(改行を除き、これらの行の2つに現れる現在のディレクトリ/プロンプト文字列を除く30文字)。

1
弾丸が衝突するとき
この挑戦は、私が少し前にいくつかの本で読んだ謎に基づいています。さまざまな速度で1秒間に1回銃から発射される弾丸が永久に直線で移動することです。ある弾丸が別の弾丸に当たると、両方が完全に破壊されます。(「弾丸」のすべてのインスタンスを「ミサイル」に置き換えてください。) タスク 発射された順番で弾丸の速度のリストが与えられたら、すべての弾丸が破壊されるかどうかを決定します。 ルール 入力は、任意の区切り文字で区切られ、前後に1つのオプション文字がある、負でない整数のリストです。これらは、有効な入力です:1 2 3 4 5 6と[1,2,3,4,5,6]。プログラマーが選択します。 少なくとも1つの弾丸が永遠に生き残る場合は真実の値を出力し、そうでない場合は偽の値を出力します。 弾丸の速度は1秒あたりの単位で与えられます。 弾丸は同時に連続的に移動します。 箇条書きは、わずかなオフセットで衝突する場合があります。 原点からの整数または小数のオフセットにかかわらず、正確に同じ位置に同時に到達する複数の弾丸は、すべて互いに衝突します。 例 これらの図でGは、銃、>弾丸を表し、*弾丸が衝突して爆発するときです。 真実の 入力: 0 0123456789 Time 0 G> 1 G> 2 G> ... 出力: 1 入力: 0 0 0 0123456789 Time 0 G> 1 G* 2 G> 3 G> 4 G> ... 出力: 1 …

6
可分性関係の最大一致を見つける
正の整数のセットが与えられます。次のようなペアに配置する必要があります。 各ペアには2つの数字が含まれており、その1つは別の倍数です。たとえば、8は4の倍数で、9は9の倍数です。 初期セットで同じ数が何度も発生する場合、ペアで何度も使用できます。番号は、同じ番号の別の出現とペアにすることもできます 可能な最大数のペアが取得されます。 出力はペアの数でなければなりません。最短のコードが優先されます。 サンプルデータ 2,3,4,8,9,18 -> 3 7,14,28,42,56 -> 2 7,1,9,9,4,9,9,1,3,9,8,5 -> 6 8,88,888,8888,88888,888888 -> 3 2,6,7,17,16,35,15,9,83,7 -> 2

28
Revu'aを綴る
実際には、Atbash Self PalindromesやGeneralized Gematria Calculatorのどちらにも触発されていません。 ストリング所与の長さのN、出力Revu'aシーケンスの最初の文字であり、Sの最初の2つの文字S、...第nは -2の文字S、最初のn -1文字の、全体の。 文字列は、強い指向性を持ち、0x0000〜0xFFFFの範囲にあるUnicode(必要なエンコード)文字のみで構成されます。ただし、方向性制御文字は発生しません。任意の文字列のすべての文字は同じ方向性を持ちます。 ["t","te","tes","test"]スペースで区切られた文字列"t te tes test"、複数行のテキストttetestest、事前にフォーマットされた配列として配列表記で返すことができますt て テス テスト、または同様のもの。先頭、区切り、末尾のスペースの量は重要ではなく、末尾の改行も重要ではありません。疑問がある場合は尋ねます。 右から左への入力は、正しい順序で右から左への出力になる必要があります。 入力:"נחמן" 出力:"נ נח נחמ נחמן"またはנ נח נחמ נחמן 、または["נ","נח","נחמ","נחמן"]。無効な結果の中には"נחמן נחמ נח נ"、"ן מן חמן נחמן"、と"נחמן חמן מן ן"。

5
キーの森が見えない
などの任意の合理的な便利なフォーマットで整数の空でないリストを取り込みプログラムまたは機能書く4, 0, -1, -6, 2かを[4 0 -1 -6 2]。 リストをASCIIアートフォレストとして表示する文字列を印刷するか、返します。各数値は、高さが比例したツリーになります。各ツリーは、次のように出力で4列のテキストを使用します。 正の整数Nは、ベースが__|_でトップが ^ で / \、その間にN層あるツリーになります。 たとえば、N = 1の場合、ツリーは ^ / \ __|_ N = 2の場合、ツリーは ^ / \ / \ __|_ N = 3の場合、ツリーは ^ / \ / \ / \ __|_ 等々。 負の整数Nは、対応する正のツリーのようになりますが、垂直バーがスペースではなくブランチスラッシュの間にある点が異なります。 たとえば、N = -1の場合、ツリーは ^ /|\ __|_ …

1
動かしたい
ジュリアン王はジャングルを抜け出す必要がありますが、彼は怠け者です。彼は、コンピューターが彼のためにジャングルを通るルートを計算できることを望んでいます。 STDINを使用して、コンピューターがクラックするためのジャングルのマップを取得します。次の形式に従います。 01001E 010110 000P00 1100J1 S00111 ジャングルマップの仕組みは次のとおりです。 0 ジュリアンが一緒に移動できる根拠です。 1 密林のジャングルです。 P 捕食者がいる地域であり、あなたはどんな犠牲を払っても避ける必要があります。 J比較的厚いジャングルです。ジュリアンの手先は、疲れる前にこれらのいずれかを突破することができます。 Sジュリアンが始まるところです。マップ上の任意の場所に配置できます。 Eジュリアンが行きたい場所です。パスの終わり。また、他のタイルと同様に、マップ上の任意の場所に配置できます。 すべてのキャラクターはマップ上のタイルです。改行は、タイルの新しい行を示します。ご使用の言語のSTDINが改行をサポートしていない場合、改行をスペースで置き換えて新しい行を示す必要があります。 タイル間を移動するには、次の特殊文字を含むSTDOUTを使用して文字列を出力する必要があります。 F -進む B -後方 L -ジュリアンを左に回転(反時計回りに90度) R -ジュリアンを右に回転(時計回りに90度) M-ミニオンはJ、ジュリアンから1タイル先にタイルがあれば、それを破壊します(Mます場合) 可能な出力は次のとおりです。 RFFLFRFMFLFRFLFF 上記のマップを解決します。 ノート: プログラムが捕食者を襲うソリューションを出力する場合、ゲームオーバーです。 通り抜けられないジャングルにぶつかると、密なジャングルに出会う前の場所に戻り、同じ方向に向かいます。(ジャングルに向かって) ジュリアンは上向きになり始めます。(^そのように^) 出力は最速の解決策になる必要があり、しないFFFとFBFBFBFBFBFFF同じです。ただし、可能な限り高速のソリューションを出力すると、-10%のバイトカウントボーナスが得られます。 マップが無効な場合、STDOUT 'Invalid map。' (マップが解決できない場合を含む) マップに異なる長さの行または列を含めることはできません。それが無効になります。 あなたの答えはこのフォーマットにいくらか従うべきです: #Language name, *n* bytes code Explanation (optional) これはcode-golfであるため、バイト単位の最短コードが優先されます。
16 code-golf 

4
クロックハンドザイジー
(このためのテストケースの設計を手伝ってくれたEl'endia StarmanとSp3000に感謝します!) 正の整数で指定されたn出力最小の正の整数であり、(秒)時計の針の数の正の整数回転期間のリストを整列手の全てのクロックを開始した後の秒は、正確に手の位置合わせされています。開始位置に揃える必要はありません- 整数で最小化されている限り、どの位置でも構いません。さらに、すべての針を同じ位置に合わせる必要はありません。たとえば、2つの針からなる2つのグループを揃えるソリューションが有効です。グループのサイズは2以上である必要があります。2つの整列されていない手は、1つの整列された手の2つのグループを構成しないため、有効なソリューションではありません。xxnxn=4 n整数秒後に正確に手を揃えることができる入力のみが与えられると仮定することができます- 2, [3,3,3]任意の秒数が経過すると3つの手すべてが揃えられるため、有効な入力ではありません。正確に2を揃えます。 例: 2, [3,4] -> 12 (the only option is a multiple of 12, so we pick 12 - 4 and 3 full rotations, respectively) 3, [3,5,6,9,29] -> 18 (picking 3, 6, and 9, the hands would align after 6, 3, and 2 rotations, …
16 code-golf  math 

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