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

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

7
通訳通訳
この質問に対するジョージ・エジソンのコメントに基づいて、最小の自己解釈通訳を書きます。 選択した言語を使用できます。 空の言語はカウントされません。プログラムの長さは少なくとも2文字でなければなりません。 プログラムは言語全体を解釈する必要はなく、言語機能のチューリング完全サブセット(インタープリターを含む)のみを解釈する必要があります。 クインはカウントされません。 言語の組み込みeval関数または同等の関数を使用しないでください。同じことがのために行くapplyなど、

22
人生、宇宙、ASCIIアートへの答え
簡単な課題:できるだけ少ないバイト数で次のテキストを出力してみてください。 the answer toli fetheuniv ersea nde ver ything the ans wer tol ife the uni ver sean dev ery thin gth ean swer tolifetheuni ver seandeveryth ing the ans wer tol ifetheuniver sea ndeverything 元の図面には332文字が含まれています。 ルール 入力なしまたは未使用の入力。 出力は、任意の妥当な形式(文字列、文字列のリスト、文字のマトリックスなど)にすることができます。 必要に応じて、描画に小文字ではなく大文字を使用できます。 末尾の空白と改行が許可されます。 これはcode-golfなので、各言語の最短のプログラム/機能が勝つかもしれません! ノート これは、私たちがゴルフをコーディングするのは見知らぬ人ではないという重複の可能性があると特定されています。ルールを知っているので、私もそうです。その質問は、テキストの検索と置換に関するものでした。ここでは、特定のテキストを使用して図形を描画する必要があります。現在の回答のうち少なくとも2つは、この場合、ゴルフ言語がプレーンな圧縮アルゴリズムに勝ることを示しています。

25
マジックポップカウント数
32ビット符号なし整数のセットビット数をカウントする有名なトリッキーなアルゴリズムがあります。 int popcount(unsigned x) { x = (x & 0x55555555) + ((x >> 1) & 0x55555555); x = (x & 0x33333333) + ((x >> 2) & 0x33333333); x = (x & 0x0F0F0F0F) + ((x >> 4) & 0x0F0F0F0F); x = (x & 0x00FF00FF) + ((x >> 8) & 0x00FF00FF); x …

8
ボウラーズ・ゴルファーズ分数戦争
前書き 0から1までのすべての分数を最小分母、次に最小分子の順に並べることから始めましょう。 1 / 2、1 / 3、2 / 3、1 / 4、3 / 4、1 / 5、2 / 5、3 / 5、4 / 5、1 / 6、5 / 6、1 / 7 ... 重複はカウントされないので、2 / 4、2 / 6、3 / 6、または4/6はリストされていません。すでに簡略化された形式(1 / 2、1 / 3、2 / 3)。 これでタスクは簡単になりnました。コマンドライン引数として正の整数を指定するnと、リストのth分数を標準出力に出力します。したがって、の入力は(0.75ではなく)の5出力を生成する必要があります。3/4 ボウラー あなたの目標は、これを可能な限り長いプログラムで解決することです。スコアは文字数です。 ゴルファー あなたの目標は、既存の答えを取り、それらをゴルフすることです。それらの答えをゴルフするときは、コードから1つ以上の文字を削除し、オプションで残りの文字を並べ替えて、結果のコードが同じ言語で有効なソリューションになるようにします。あなたのスコアはすべての削減の結果です。(つまり、ある回答から10文字、別の回答から15文字を削除すると、スコアは150になります。) ルール 有効なプログラムには、少なくとも3つの固有の文字が必要です。 ASCII文字のみを使用できます。 プログラムのサイズが小さくなると、スコアもそれに応じて小さくなります。 …

30
465アレンジメント
これが課題です。範囲内のすべての整数を出力するコードを作成します。簡単に聞こえますが、ここで注意が必要な部分があります。最小の番号から開始し、次に最大の番号になります。次に、配列にまだない最小の番号。それから、まだその中にない最高。 例: 1〜5を開始点としてみましょう 番号は[1、2、3、4、5]です。 私たちは最初のものを取るので、[1]。残りの数字は[2、3、4、5]です。最後に、新しい配列は[1、5]です。残りの数字は[2、3、4]です。最初の新しい配列は[1、5、2]です。残りの数字は[3、4]です。最後の新しい配列は[1、5、2、4]です。残りの数字は[3]です。最初の新しい配列は[1、5、2、4、3]です。残りの数字はありません、完了です。出力[1、5、2、4、3] ルール: これはコードゴルフです。最小のバイト数で、あらゆる言語で記述してください。 標準的な抜け穴はありません。 オンライン通訳へのリンクをお願いします。(例:https : //tio.run/) 2つの入力、両方とも整数。範囲の下限と範囲の上限。 出力のデータ型は何でも構いませんが、正しい順序で数字を表示する必要があります。 例 低:4高:6結果:4 6 5 低:1高:5結果:1 5 2 4 3 低:-1高:1結果:-1 1 0 低:-1高:2結果:-1 2 0 1 低:-50高:50結果:-50 50 -49 49 -48 48 -47 47 -46 46 -45 45 -44 44 -43 43 -42 42 -41 41-40 40 …
24 code-golf 

4
感謝していません!…またはそれは?
前書き ストリートトークは、特にプログラマーにとっては理解するのが非常に難しい場合があります。 私たち全員が都市環境で生き残るのを助ける通訳を作成するのはあなたの仕事です。 チャレンジ 入力として英語の文を指定して、文の結果が正か負かを決定するプログラムまたは関数を作成します。 文には否定的な単語が含ま0れ2ます。プログラマなら誰でも知っているように、二重の負は正になります。したがって、コードは、次の規則に従って、true / falsey値を出力または返す必要があります。 No negative words -> truthy One negative word -> falsey Two negative words -> truthy 否定的な単語のリスト: no、not、none で終わるもの n't never、neither、nor nobody、nothing、nowhere エッジケースが1つあります。文がで始まるときはいつでも、No,結果を決定するときにその単語は否定的な単語として扱われません(否定的な単語の数にカウントされるので、もう1つだけあります)。 文は基本的な文法規則(大文字、句読点)に従い、辞書から検索できる単語のみを含みます(幸いなことに、これは質問のタイトルを無効にしません)。この文には固有名詞は含まれません(申し訳ありませんが、Dr。いいえ、あなたは外出しています)。 テストケース 真実: Yes. It's noon. Hello, World! What is this? Ain't no thang! Never say never. No, it's noon …

30
base-n番号からのASCIIアート圧縮解除
これは、Magic Octupus Urnによる05AB1Eの回答に触発されました。 2つの引数、正の整数と文字列/文字のリストが与えられた場合: 数値をbase-nに変換します。nは文字列の長さです。 各文字について、base-n番号のその文字のインデックスのすべての外観をその文字に置き換えます。 新しい文字列を印刷するか返します。 例: Input: 2740, ["|","_"] 2740 -> 101010110100 in base 2 -> Replace 0s with "|" and 1s with "_" Output: _|_|_|__|_|| Input: 698911, ["c","h","a","o"] 698911 -> 2222220133 in base 4 -> Replace 0s with "c", 1s with "h", 2s with "a", and 3s …

21
これを何回押すべきですか?
私たちは皆、昔ながらの電話キーパッドに慣れていますよね?参考までに、次のようになります。 小文字のASCII文字と単一のスペースのみで構成される文字列を考えると、あなたの仕事は、上記のように電話のキーパッドで文字列全体を入力するために必要なタップ数を返すことです。 これに不慣れな方のために、以下にその仕組みを示します。 2たとえば、数字が付いたキーには、文字列もabc書き込まれています。を入力するにはa、このキーを1回b押すc必要があります。2回押す必要があり、3回押す必要があります。 同じキーにある連続した文字の場合、もう一度押す前に1秒待つ必要があります。したがって、を入力する場合はcb、を3回押してc、1秒待ってから、を2回押しbて5タップする必要があります。 同じことが他のすべてのキーにも当てはまりますが、1回押すだけでよい1 つのスペースを除きます。また、キー7に9は4つの文字があります。同じアルゴリズムが適用され、唯一の違いは文字数です。各キーに対応する文字列は、上の画像(ただし小文字)、または受信する可能性のあるすべての文字を含む次のリストにあります。 "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz", " " テストケース 入力->出力(説明) ""-> 0(何もタップしないでください) "water"-> 8( "w、a、t"はそれぞれ1タップ(キー9、2および8)、 "e"は2タップ(キー3)、 "r"は3タップ(キー7) )、1 + 1 + 1 + 2 + 3 = 8) 「石鹸」-> 9(4 + 3 + 1 + 1) 「カンデラ」-> 13(3 + 1 + …

9
Graeco-Latin正方形を生成する
免責事項:私は、非総当たり的な解決策を知りません Graeco-Latin正方形は、同じ長さ 2つのセットの場合、のセルの配置であり、各セルには、最初のセットの要素と2番目のセットの要素の一意の(正方形全体)ペアが含まれます。そのため、ペアのすべての最初の要素とすべての2番目の要素は、行と列で一意です。使用される最も一般的なセットは、推測できるように、ギリシャ語とラテン語のアルファベットの最初の文字です。nnnn × nn×nn \times nnnn これは、4x4のグレコラテン広場の写真です。 Graeco-Latinの正方形は、見た目と同じくらい便利です(Wikipediaの記事では、「実験の設計、トーナメントのスケジューリング、および魔方陣の構築」に言及しています)。あなたのタスクは、正の整数与えられ、グレコ-ラテン二乗を生成します。nnnn × nn×nn\times n 入力 正の整数 ; Graeco-Latin正方形が存在することが保証されます(つまり、)。n > 2n>2n > 2n × nn×nn\times nn ≠ 6n≠6n \ne 6 出力 二次元配列、配列の配列、平坦化された配列、または直接出力としての辺の長さnのGraeco-Latin正方形。 ノート ギリシャ語とラテン語のアルファベットを特に使用する必要はありません。たとえば、正の整数のペアを出力することもできます。 任意に拡張できないアルファベットを使用する場合、(理論的には、宇宙の熱死の前にコードを終了する必要はありません)少なくとも20の最大辺の長さをサポートする必要があります。 これはcode-golfなので、最短のコードが優先されます!
24 code-golf 

7
六角形を展開する
ASCIIアートの六角形を入力として指定し、辺がすべて1単位長い出力1 _____ ____ / \ / \ / \ / \ / \ \ \ => \ \ \ / \ / \____/ \ / \_____/ 入力六角形は180度の対称性を持ちますが、それ以外の場合、辺はすべて異なる長さにできます。上記では、辺の長さ(2、4、3)は(3、5、4)に拡大されます。辺の長さはゼロ以外になります。 六角形は、アンダースコア_、スラッシュ/、およびバックスラッシュで構成されています\。(アンダースコアで作成された)水平エッジのうち、上端は独自の線上にありますが、下端はそうではありません。 I / O ここではスティッカーになりますが、ここではascii-artの書式設定が必要です。入力と出力は、行のリストではなく、イメージを表す改行を含む文字列にする必要があります。もちろん、コードは各行を順番に印刷して画像を生成するか、言語がそれを行うことができる場合は入力のために1行ずつSTDINを読み取ることができます。 詳細 入力には、必要に応じてオプションの末尾の改行を含めることができますが、それ以外の場合は空の行はありません。入力に末尾のスペースがないようにするか、各行を同じ長さ(最長の行)に埋め込むスペースを選択できます。 出力は、入力と同様に画面の左端と同じ高さにする必要があります。上下に余分な改行があり、末尾にスペースがある場合があります。 テストケース 入力に続いて出力。 _ / \ \_/ __ / \ / \ \ / \__/ ____ …

13
2つの回文では不十分です
などの一部の数字は、10を底とする回文です。数字を逆の順序で書くと、同じ数字になります。142411424114241 いくつかの数字は2つの回文の合計です。たとえば、、またはです。110 = 88 + 22110=88+22110=88+222380 = 939 + 14412380=939+14412380=939+1441 他の数字では、2回の回文では不十分です。たとえば、21は2回の回文の合計として書くことはできず、できる最善の方法はです。21 = 11 + 9 + 121=11+9+121=11+9+1 整数入力nを受け取り、n2つの回文の合計として分解できないth数を出力する関数またはプログラムを作成します。これは、OEIS A035137に対応しています。 1桁(0を含む)は回文です。 シーケンスの標準ルールが適用されます。 入出力は柔軟です 0インデックスまたは1インデックスを使用できます n番目の項、最初のn項、または無限シーケンスを出力できます (補足:すべての整数は、最大3つのパリンドロームの合計として分解できます。) テストケース(1-indexed): 1 -> 21 2 -> 32 10 -> 1031 16 -> 1061 40 -> 1103 これはコードゴルフなので、最短の答えが勝ちです。

3
配列からツリーを描く
1桁の正の整数の入れ子になっている可能性のある空でない配列(一意であることが保証されていない)を指定すると、ボックス描画文字を使用してASCIIアート表現をツリーとして出力します┌ ┴ ┐ ─ │ ┬ ┼。(これらはコードページ437からコピーされましたが、同等の表現を使用できます)。 配列のすべての整数は、ツリーの葉でなければなりません。配列の同じレベルの要素は、ツリーの同じレベルに存在する必要があります。すべての要素は、明確に区別できるように十分な空白で区切る必要があります(1つのスペースの最小幅を決定するのはユーザー次第です)。 たとえば、与えられた配列[[1, [2]], [3, [4, 5]]]、次のツリーを出力します ┌─┴─┐ ┌┴┐ ┌┴─┐ 1 │ 3 ┌┴┐ 2 4 5 配列の場合[1, 2, 3]、ツリーは次のようになります ┌─┼─┐ 1 2 3 しかし、配列[[1, 2, 3]]は次のようになります │ ┌─┼─┐ 1 2 3 配列[1, [1, [1, [1]]]]は次のようになりますが ┌─┴┐ 1 ┌┴─┐ 1 ┌┴┐ 1 │ 1 …

17
50,000未満のスネーキング番号のリストを作成します
スネークナンバーチャレンジ 1〜50,000のスネークナンバーがいくつあるのだろうか。 このゲームのスネーキング番号は、1つのキーを上下左右に動かすことにより、従来の番号パッド(下の形式)で入力できる番号です。 7 8 9 4 5 6 1 2 3 0 たとえば、5番から始める場合、次の有効な移動として4、6、8、または2を選択できますが、7、3、9、および1は現在のキーに対して斜めに配置されるため、立ち入り禁止です。したがって、5、2の場合、次に実行可能なキーの選択肢は0、1、3、または5です。 このコードゴルフの演習では、1〜50kの正のスネーキング数のリストと、基準を満たすすべての数の最終カウントを出力します。 ルール 数字をゼロから始めることはできません。 数値は正の整数でなければなりません。 左から右に読むそれぞれの連続した数字は、数字パッドの周りに「蛇」しなければなりません。 ヘビはキーを斜めに移動できません 番号0は、番号1と2の両方からアクセスできます。 番号をペアにすることはできません(例:22) 有効なスネーキング番号の例: 12369 45201 1254 10102 1 12 987 無効な番号の例 1238 - 8 is not connected 0001 - multiple leading 0s 0101 - leading 0 159 - snake cannot …
24 code-golf 

30
ゼロから遠ざかる
ゼロから遠ざかる ゼロに向かってラウンドに触発されました。 任意の合理的な方法で入力された数値を、「ゼロから離れる」ように数値を切り上げます-正の数値は切り上げ、負の数値は切り捨てます。 入力を文字列として(たとえば、STDINを介して)取得する場合は、小数点の有無にかかわらず数値を処理できる必要があります。数値として使用する場合、少なくとも浮動小数点精度(倍精度は不要)または有理数を処理できる必要があります。 必要に応じて、小数点付きの浮動小数点数(42.0など)を出力できます。(または、回答が短くなる場合は、テストケースに浮動小数点と出力整数を出力させることもあります。) 標準的な抜け穴などは許可されません テストケース -99.9 => -100 -33.5 => -34 -7 => -7 -1.1 => -2 0 => 0 2.3 => 3 8 => 8 99.9 => 100 42.0 => 42 -39.0 => -39 サンドボックスリンク
24 code-golf  number 

17
Game of Bar Diceで優勝したのは誰ですか?
チャレンジ Bar Diceは、Bar with Dice(名前の由来)でプレイされるシンプルなゲームです。5つのサイコロを5つ振り、ベストハンドを作ろうとします。 スコアリングは、同じ数字で最大数のサイコロを集めることに基づいています。有効なハンドであるためには、各ハンドに少なくとも1つの「エース」または1つが含まれている必要があります。エースは「ワイルド」として機能し、他の数字とペアにすることができます。プレーヤーの手の強さは、最初に桁数、次にそれらの桁の値に依存します。例として、4つの3を持つハンド(ワイルドを数える)は3つの5を持つハンドよりも優れていますが、5つの2を持つハンドよりは良くありません。ウィキペディアの記事 から引用 つまり、最高ランクのハンドはすべて6と1で構成され、最低ランクのハンドは1のないハンドです。 あなたの課題は、両手を取り、勝ったプレーヤーを返すか、または同点の場合に戻すことです。 入力 1から6までの5つの数字の2つの未分類リスト。各リストはプレーヤーの手を表します。入力形式は柔軟です。 出力 プレイヤー1とプレイヤー2のどちらが勝ったか、それとも同点だったかを示す3つの異なるが一貫した静的な値(範囲は許可されません)。何にどの値を使用しているのかを答えてください。たとえば、-1P1が勝った0場合、同点の1場合、P2が勝った場合に戻ることができます。 ルール 入力は常に有効です 勝者を決定するために、各ハンドの可能な限り最高のスコアのみが使用されます。タイブレーカーはありません。例えば、[1,4,4,3,3]タイであろう[1,4,4,2,2]タイブレーカとして3つの2人の者を使用する代わりに。 出力は、毎回選択した3つの値のいずれかでなければなりません。すべての負の数値を単にマッピングすることP1 Winsは許可されておらず、正規化する必要があります。 無効なハンド、つまり1がないハンドは、すべての有効なハンドに負けますが、他のすべての無効なハンドと結びつきます。例えば、[2,2,2,2,2]ネクタイ[3,3,3,3,3]。 手[1,1,1,1,1]のランキングの目的のために6つの者の有効なセットとしてカウントされます。 これはコードゴルフなので、最短バイト数が勝ちです。 例 #You guys are pretty good at finding edge-cases that break things. Good job! Input: [2,1,5,6,6], [6,2,6,6,6] Output: P1 Wins Input: [2,4,5,6,6], [6,2,6,6,6] Output: Tie Input: [1,2,3,4,5], [5,4,3,2,1] Output: …

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