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

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

11
バイナリ部分文字列の合計
この課題は簡単で、10進数が与えられ、2進数に変換され、元の数字よりも短い2進数の部分文字列の合計を計算します。以下に例を示します。 Input: 11 Binary: 11 -> 1011 Substrings: 101 = 5 011 = 3 10 = 2 01 = 1 11 = 3 1 = 1 0 = 0 1 = 1 1 = 1 Sum: 5+3+2+1+3+1+0+1+1=17 Output: 17 上記のように、プログラムは入力として単一の10進整数を取り、バイナリサブストリングの合計を出力する必要があります。入力のバイナリ表現は常に2桁以上であり、入力ではプログラムの実行中にエラーが発生しないと想定できます。 これはcode-golfで、バイト単位の最短コードが勝ちです! テストケース: 2 => 1 3 => 2 4 => …

13
numberに最も近い値を取得します
このコードゴルフでは、リスト内の別の番号から最も近い番号を取得する必要があります。 出力は、入力に最も近い番号になる場合があります。 例: value: (Input) 5 --- [1,2,3] --- 3 また、プログラムは負の数で動作する場合があります。 例: value: (Input) 0 --- [-1,3,5] --- -1 value: (Input) 2 --- [1, 5, 3] --- 1 (Because it gives priority to lower numbers) ルール: 前述のように、負の数を処理する必要があります。 2つの回答がある場合(例:0-[5、-5])、プログラムは最も低い番号を優先します。(-5) これはコードゴルフなので、最短のコードが勝ちます!

3
任意精度の整数除算
任意の大きな整数の除算を実装します。 これはcode-golfです。 タスクは、任意の精度の整数とその除算を実装するプログラムまたは関数を作成することです。 これを非常に簡単にする多くのことが許可されていないことに注意してください。仕様を必ずお読みください。 入力 入力として2つのものが与えられます。 基数10桁の文字列、それを呼び出しますn。 基数10の別の文字列、それを呼び出す m ことを前提としn>m>0ていることを意味しますが、ゼロ除算に頼まれることはありませんが。 出力 もし出力二つの数字、意志Q及びM * Q + R = N及び0 <= R <MR 仕様書 送信は、任意の大きな整数(使用可能なメモリによって制限される)に対して機能します。 外部ライブラリを使用することはできません。I / O用の外部ライブラリが必要な場合は、組み込みライブラリとして扱うことができます。(iostreamなどのようなものを見て)。 あなたの言語がこれを簡単にするビルトインを持っているなら、あなたはそれを使わないかもしれません。これには、任意の精度の整数を処理できる組み込み型が含まれます(ただし、これに限定されない場合があります)。 何らかの理由で言語がデフォルトで任意の精度の整数を使用する場合、この機能を使用して、通常64ビットで格納できない整数を表すことはできません。 入力と出力は基数10でなければなりません。メモリへの数値の格納方法や数値の演算方法は関係ありませんが、i / oは10を基数になります。 結果を出力するには15秒あります。これは、反復減算を禁止するためです。 ここでの目標は、実際に任意の精度の整数を実装することです。何らかの理由でチャレンジ仕様を遵守し、それらを実装せずにこれを成功させることができれば、私はあなたにとって良いと思う、有効だと思う。 テストケース この場合、入力は39です!そして30! 入力 n = 20397882081197443358640281739902897356800000000 m = 265252859812191058636308480000000 出力 Q = 76899763100160 R = 0 n50までのすべての階乗の合計に1を足したものmが、20までの連結数です。 …

10
関数の引数を独自の行に揃える
関数定義を表す文字列の入力が与えられたら、関数の引数が改行で区切られて整列されるように、改行とスペースが挿入された文字列を出力します。 入力文字列は次のパターンに従います。 まず、プレフィックスで始まります。プレフィックスは常に少なくとも1文字の長さで、文字は含まれません,()。 開き括弧(()は、引数リストの始まりを示します。 その後、ゼロ個以上の引数のリストが続きます。これらは文字列", "(コンマとスペース)で区切られます。引数には文字は含まれません,()。 閉じ括弧())は、引数リストの終わりを示します。 最後に、0個以上の文字であり、文字を含むことがある接尾辞が見つかる 場合があります,()。 入力文字列は、印刷可能なASCIIのみで構成されます(つまり、改行は含まれません)。 出力は次のとおりでなければなりません。 プレフィックス、コピーされたそのまま、および開き括弧。 引数リスト。今回は", "、コンマ、改行、および各引数の最初の文字を垂直方向に揃えるために必要なだけのスペースで区切られています。 閉じ括弧と接尾辞(存在する場合)はそのまま。 これはcode-golfであるため、バイト単位の最短コードが優先されます。 テストケース(形式:単一行の入力とそれに続く出力と二重の改行): def foo(bar, baz, quux): def foo(bar, baz, quux): int main() { int main() { fn f(a: i32, b: f64, c: String) -> (String, Vec<i32>) { fn f(a: i32, b: f64, c: String) -> …
16 code-golf  string 

3
作業期間を確認する
前書き ここドイツでは、労働時間に関する裁定は非常に厳格です。1日6時間以上働く場合は、少なくとも30分の休憩を取る必要があります。9時間以上働く場合は、45分の休憩を取る必要があります。勤務時間が6時間未満の場合は、休憩を取る必要はありません。 もちろん、これらの休憩を分割することもできますが、各パートをカウントするには少なくとも15分以上の長さが必要です。 チャレンジ この課題では、作業期間のリストを取得し、次のルールを使用して、十分な休憩が取られたかどうかを確認する必要があります。 w仕事時間を時間単位にしてみましょう: w < 6 -> No breaks needed 6 <= w < 9 -> 30 minute break needed w >= 9 -> 45 minute break needed さらに、各休憩の長さは少なくとも15分である必要があります。また、必要以上の休憩を取ることができます。これらはすべて「少なくとも」値です。 入力 入力は作業期間のリストになります。正確な形式はユーザー次第ですが、時間と分として時間値のみを含める必要があります。 例: ここでの形式はタプルのリストですが、各タプルは作業期間を表します。タプルの最初の要素は開始時間になり、2番目の要素は終了時間になります。 [("07:00","12:00"),("12:30","15:30"),("15:45","17:15")] これにより、合計作業時間は9.5時間、合計休憩時間は45分になります。 これらの作業期間は、休憩で区切る必要はありません。互いにちょうど続く作業期間もあります(例はテストケースを参照)。 また、休憩は勤務時間にカウントされないことに注意してください。これらは2つの別個の値です。 作業期間が順序付けられていると想定できます。 出力 この入力、出力を考えるとtruthyの十分な休憩が取られた場合は、値とfalsy値でない場合。 ルール 提出物で使用している入力形式を指定します。 空の入力を処理する必要はありません。常に少なくとも1つの作業期間があります。 作業期間は1日のみであるため、深夜に作業を行う必要はありません。 日付/時刻-/ Whatever-ビルトインは、言語に付属している限り許可されます。 機能または完全なプログラムが許可されます。 …

3
この言葉は何語ですか?
特定の単語の言語を決定するプログラムまたは関数を作成する必要があります。 タスクは、4つの言語で最も一般的な5000の単語の一部を認識することです。 英語 ドイツ人 イタリアの ハンガリー語 単語リストは、このGitHubリポジトリにあります。 提供されたテストケースの40%で間違いを犯すことができます。つまり、20000個の入力のうち8000個を誤って分類する可能性があります。 詳細 リストには小文字の単語のみが含まれているa-zため、たとえばwon't、möchteなどは含まれません。 いくつかの単語が複数の言語で表示されます。これは、コードが常に期待される出力を正しく推測できないことを意味します。 便宜上、すべてのテストケースを1つのリストとしてダウンロードできます。各行の数字は、単語の言語を示します。(1英語、2ドイツ語、3イタリア語、4ハンガリー語の場合。) 標準抜け穴は許可されていません。 単語リストを使用して、プログラミング言語によって提供される類似のデータは禁止されています。 入力 小文字の英字(az)のみを含む文字列。 末尾の改行はオプションです。 出力 言語ごとに明確で一貫した(常に同じ)出力を提供することで、単語を分類できます。(たとえば1、英語、2ドイツ語、3イタリア語、4ハンガリー語)。 これはコードゴルフであるため、最短のプログラムまたは機能が優先されます。 関連コードのゴルフの質問:これは言葉ですか? 単語リストは、wiktionary.orgと101languages.netから取得されました。

4
愚かな株式市場
複数の人の投資データを含む文字列が与えられた場合、彼らが記録した利益/損失を調べてください。 文字列には、次のように大文字と小文字のみが含まれます。 AABaBbba 各文字は人を表します-大文字は購入を意味し、小文字は販売を意味します。彼らが投資している株の価格(CGLF)は50ドルから始まります。誰かが購入すると、価格は5%上がります。誰かが売った後、価格は5%下がります。参加した各人がどれだけのお金を稼いだ/失ったかを把握する必要があります。 ノート: 文字列は常に有効で、最初に購入しないと販売できません。また、株式を買う人は誰でも最終的にそれを売るでしょう。 計算は、少なくとも小数点以下6桁まで正確でなければなりません。ただし、最終的な回答は小数点以下2桁に丸める必要があります。 テストケース: 入力: AABaBbba A:購入-$ 50 A:購入-$ 52.50 B:購入-$ 55.125 a:販売-$ 57.88125 B:購入-$ 54.9871875 b:販売-$ 57.736546875 b:販売-$ 54.8497195313 a:販売-$ 52.1072335547 人Aの利益:57.88125+52.1072335547-50-52.50=7.4884835547 人Bの利益:57.736546875+54.8497195313-55.125-54.9871875=2.4740789063 出力:( A:7.49,B:2.47順序は関係なく、セパレータは不要です) 入力: DGdg D:購入-50ドル G:購入-$ 52.50 d:販売-$ 55.125 g:販売-52.36875ドル 人Dの利益:55.125-50=5.125 人Gの利益:52.36875-52.50=-0.13125 出力: D:5.13,G:-.13 入力: ADJdja A:購入-$ 50 D:購入-$ 52.50 J:購入-$ 55.125 …
16 code-golf 

3
ラベルの行き止まり
ASCIIアート「道路」の入力が与えられると、すべての行き止まりにラベルが付けられた道路を出力します。 これは道です: ########.....######..#..### #......#######....#..#..#.# #.##......#...#####..#..### #..#####..#....#..#######.# #......#...#####.....##...# #..###.#...#...###...#..### ##########.#..#..##..#.##.# ..#......#.######.#..#.#.#. ..#......#.#..#.#.#..#.#.#. ..######.###..##..######### これは、文字でラベル付けされた行き止まりの道路Xです: ########.....######..X..### #......#######....#..X..#.# #.XX......X...X####..X..### #..XXXXX..X....#..#######.# #......X...#####.....##...# #..###.X...#...###...#..### ##########.#..X..##..#.##.X ..X......#.#XXXXX.#..#.#.X. ..X......#.#..X.X.#..#.#.X. ..XXXXXX.###..XX..######XXX デッドエンドは、任意の道路タイルとして定義される境界nは少なくとも他の道路タイル、N-1であると考えられるその行き止まりをこのルールによって既に。「境界線」は4つの基本方向であるため、斜めに隣接するタイルはカウントされません。 このルールは繰り返し適用されます。新しく作成された行き止まり自体が、さらに行き止まりを作成できるためです。また、他の1つの道路タイルのみに接する道路タイルは、ルールが初めて適用されたときに行き止まりと見なされることに注意してください。 入力と出力は、単一の文字列(#または以外の文字で区切られた行を持つ.)または配列/リスト/などのいずれかです。言語がサポートしている場合は、関数の引数として各行を入力することもできます。 入力について次のことを想定できます。 常に少なくとも1つの「ループ」、つまり#無限に追跡できる文字のグループがあります。(そうしないと、すべてのタイルが行き止まりになります。) これは、最小ループが次のようになるため、入力が常に2×2以上になることを意味します。 ## ## (ちなみに、変更せずに出力する必要があります。) すべての#キャラクターが接続されます。つまり、any #で塗りつぶしを実行すると、それらすべてが影響を受けます。 これはcode-golfであるため、バイト単位の最短コードが優先されます。 上記の例と小さな2×2グリッドは、テストケースとして使用できます(この課題でカバーするエッジケースは多くありません)。

2
チェスのダービー
チェスや解体ダービーよりも正反対の可能性があるもの。あなたは、今日まで、一方を楽しむ人はもう一方を楽しむことはないと思うでしょう。 ルール 開始位置は、標準のチェス盤です。 RNBQKBNR PPPPPPPP PPPPPPPP RNBQKBNR 普通のように見えますが、それがすべての最後の部分の競争であることがわかるまでは: ターンごとに、ボード上の各ピースは、ランダムに選択された有効な動きを1つ行います(標準の動きルールを使用)。ただし、ピースが移動する順序は、ターンごとにランダム化されます。 ピースは、たとえそれが同じ色であっても、王であっても、あらゆるピースをキャプチャできます。 ポーンはFORWARDと対角線をキャプチャできます。さらに、通常のように、その前に空きスペースがある場合、ポーンはその最初の動きで2つのスペースを移動できます(そのようにキャプチャすることもできます)。さらに、ポーンはaポーン。 勝者は最後の駒です。ただし、1000ターン後に複数のピースが残っている場合、残りのピースはすべて勝者です。 通行人、小切手、城などはありません 出力 ターンごとにターン番号と、ボードの外観を出力します。ピースが殺された後、ボードから削除されます。最初のターンの後、ボードは次のようになります。 1. K RBQ N BR NP P P PP P P R PP BPN PNP K R Q 1000回の移動後、ボードは次のようになります。 1000. Q K P N R R B N Q そしてゲームは終了します。 または、おそらく556ターン後にボードは次のようになります。 556。 R それでゲームはそこで終わります。 *このチャレンジで行われるすべてのランダム化が均一であることを確認してください(すべての可能性が等しく発生する可能性があります)。

12
指定された非数値行を削除します
疑問がある場合:Nan = Non-numeric datatypeこのチャレンジの目的のため。 入力として行列/配列と列インデックスのリストを受け取るプログラムまたは関数を記述します。 課題は、指定された列のすべての要素が存在する行を削除することNanです。行内の他の要素が数値であるかどうかは関係ありません。次の例は、これをより明確にすることを願っています(1インデックス化されています)。 Input array: 16 NaN 3 13 5 11 NaN 8 NaN 7 NaN 12 4 14 -15 1 Input column index: [1 3] Output array: 16 NaN 3 13 5 11 NaN 8 4 14 -15 1 ---- Input array: 16 NaN 3 13 …

10
整数の分割、反転、再結合
バックグラウンド 数学では、整数を整数のペアと1対1で対応させることができることはよく知られています。これを行うには多くの方法がありますが、この課題では、そのうちの1つとその逆の操作を実装します。 タスク 入力は正の整数n > 0です。a, b ≥ 0などの一意の非負整数が存在することが知られています。出力は、正の整数の「反転バージョン」です。n == 2a * (2*b + 1)n2b * (2*a + 1) 入力および出力は、言語の標準の符号なし整数データ型に適合すると仮定できます。 ルールとスコアリング 完全なプログラムまたは関数のいずれかを作成できます。最小のバイトカウントが優先され、標準の抜け穴は許可されません。 テストケース in <-> out実装される関数はそれ自体が逆であるため、これらはformat で与えられます。出力をフィードバックする場合、元の入力を取得する必要があります。 1 <-> 1 2 <-> 3 4 <-> 5 6 <-> 6 7 <-> 8 9 <-> 16 10 <-> 12 11 <-> …

21
降順の数字列
前書き 例として、番号を見てみましょう7。次に、これを複製し、間に7つのスペースを配置します。これを取得します。 7_______7 その後、スペースがなくなるまで数を減らします。数7については次のようになります。 7_______7 6543210 次に、2つをマージするだけです。 7_______7 6543210 becomes 765432107 これは、N = 7の場合に出力されます。 簡単そうですね。N = 12を取ります。再び2つの数字の間に12個のスペースを挿入します。 12____________12 次に、減分を開始します。 12____________12 111098765432 そして、これは最終的に私たちに与えます: 1211109876543212 ご覧のとおり、下降部分は0 ではなく 2で終わります。 仕事 1より大きい整数を指定すると、上記のように降順が出力されます。 テストケース Input Output 2 2102 3 32103 4 432104 5 5432105 6 65432106 7 765432107 8 8765432108 9 98765432109 10 10987654321010 11 …

5
困惑する数を追加して乗算する
「複素数」とも呼ばれる分割複素数は、複素数に似ています。i^2 = -1ただし、代わりにがありj^2 = 1; j != +/-1ます。各番号はの形式を取りますz = x + j*y。 この課題の複雑さを制限するための1つの試み-では、減算を行わないため、シンボルを使用して否定を表します。 視聴の楽しみの例を次に示します。 6 * 9 = 54 // real numbers still act normally 5 + -7 = -2 j*1 + j*1 = j*2 // two `j`s added together make a j*2 7 * j*1 = j*7 // multiplication …

9
文字列を使用したベース変換
前書き 過去にいくつかの基本変換の課題がありましたが、任意の長さの数値(つまり、整数データ型をオーバーフローさせるほど長い数値)に取り組むように設計されたものは多くありませんでした。複雑です。このように基本コードの変更をどのように実行できるか興味があります。 チャレンジ あるベースの文字列を別のベースの文字列に変換できるプログラムまたは関数を選択した言語で記述します。入力は、変換される数値(文字列)、from-base(10進数)、to-base(10進数)、および文字セット(string)である必要があります。出力は、変換された数値(文字列)でなければなりません。 いくつかの詳細と規則は次のとおりです。 変換される数値は負でない整数になり(以降-と.文字セットであってもよいです)。出力も同様です。 先行ゼロ(文字セットの最初の文字)は削除する必要があります。結果がゼロの場合、単一のゼロ桁が残るはずです。 サポートされる最小ベース範囲は2〜95で、印刷可能なASCII文字で構成されます。 変換する数値の入力、文字セット、および出力は、すべて文字列データ型である必要があります。基数は、基数10の整数データ型(または整数浮動小数点数)でなければなりません。 入力数値文字列の長さは非常に長くなる場合があります。賢明な最小値を定量化することは困難ですが、少なくとも1000文字を処理し、まともなマシンで10秒未満で100文字の入力を完了することができると期待しています(この種の問題には非常に寛大ですが、私はしたくない焦点となる速度)。 組み込みの基本変更機能は使用できません。 文字セットの入力は、通常の0-9a-z ...などだけでなく、任意の配置にすることができます。 有効な入力のみが使用されると仮定します。エラー処理を心配しないでください。 勝者は、基準を達成する最短のコードによって決定されます。少なくとも7から10日以内に、または十分な提出があった場合は、それらが選択されます。同点の場合、より高速に実行されるコードが勝者になります。速度/パフォーマンスが十分に近い場合、先に出された答えが勝ちです。 例 コードで処理できる入力と出力の例を次に示します。 F("1010101", 2, 10, "0123456789") > 85 F("0001010101", 2, 10, "0123456789") > 85 F("85", 10, 2, "0123456789") > 1010101 F("1010101", 10, 2, "0123456789") > 11110110100110110101 F("bababab", 2, 10, "abcdefghij") > if F("10", 3, 2, …

1
ここに住んでもいいですか?
ゲームTerrariaでは、ゲームメカニクスの1つにNPCが入居できるように家を建てることが含まれます。有効な家と見なされるかどうかについての厳しいルールセットがあります。ルールのリストは次のとおりです。 家の総面積は、少なくとも60平方タイルで、750未満でなければなりません。また、外枠を含む家のサイズは、少なくとも次のいずれかでなければなりません。 5x12 6x10 7x9 8x8 9x7 10x6 12x5 15x4 簡単にするために、次のことを安全に想定できます。a)すべての入力家は長方形であり、b)#家の中には固体のタイルはありません。こちらが12x6フレームです(美しいASCIIで描かれています): ############ # # # # # # # # ############ 家は背景の壁で覆われている必要があります。これらは固体のタイルではなく、三次元の家の後ろの壁です。穴は許可されますが、4x4より大きくすることはできません。行に5つ以上のスペース文字の行または列がある場合、これは4x4より大きい穴であり、家は無効です。複数の穴も許可されますが、少なくとも1つの壁が離れている必要があります。 ############ #**********# #**********# #**********# #**********# ############ ############ #* * # #* * # #* * # #****** # ############ (Still acceptable since neither hole is larger than 4x4 …
16 code-golf  string  game  grid 

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