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

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

22
明確なふるい
整数のリストが与えられたら、真のインデックスを使用してリストから個別の値をフィルターできるようにブールマスクを作成します。真のインデックスとして選択されるインデックスは、同一の値に対応するインデックスのセットごとに1つだけが選択されている限り、重要ではありません。 入力は、ご使用の言語に適した形式の負でない整数の空でないリストになり、出力は上記の仕様に従ったブール値のリストになります。出力リストでは、真偽値と偽値の独自の定義を使用できます。 以下の例では、私は1真実であり0、虚偽であると定義しています。 [5, 4, 7, 1] Input [1, 1, 1, 1] Output Select only the values with with true indicies in the sieve [5 4 7 1] Contains zero duplicate values [5, 9, 7, 5, 6, 0, 5] [0, 1, 1, 1, 1, 1, 0] [ 9, 7, 5, …

7
通常および視覚的な文字列復帰
catプログラムとして機能するコードを作成します。つまり、文字列を入力してそのまま出力します。ただし、コードの通常の復帰では、入力文字列の通常の復帰を出力する必要があります。また、コードの視覚的な反転は、入力文字列の視覚的な反転を出力する必要があります。 通常の復帰とは、文字列の逆の文字シーケンスです。視覚的復帰は、文字()[]{}<>が)(][}{><それぞれ置き換えられた通常の復帰です。 ()[]{}<>文字を定義し、このチャレンジの前に公開されている任意のコードページを使用して文字を定義できます。すべてのコードに同じコードページを使用する必要があります。元のコードはこのコードページで有効である必要があり、逆のコードのいずれかをそのコードページに適用すると、結果が得られます。 これはcode-golfで、バイト単位の最短コードが優先されます。 例 文字列の場合はAB(XY)、その正常な視覚的な差し戻しがある)YX(BAと(YX)BA、それぞれ。 (架空の言語で)あなたのコードがある場合はAB(XY)、そのコード)YX(BAと(YX)BAすべき出力をそれぞれ入力文字列の正常かつ視覚的な差し戻し。そしてAB(XY)、猫のプログラムとして機能する必要があります。

19
素因数の二乗和が減算される範囲の最大数
式 たとえば、数300 300の素因数は[2, 3, 5](300の素数で素数である一意の数) これらの各数値を二乗すると、 [4, 9, 25] そのリストを合計すると、 4 + 9 + 25 = 38 最後に元の数からその合計(38)を引きます300-38 = 262(これが結果です) 入力 入力は2より大きい正の整数になります。2から入力値(両端を含む)までのすべての数値をチェックし、上記の式で最大の結果をもたらす数値を見つける必要があります。 出力 出力は、スペース、コンマ、改行、または言語で許可されているもので区切られた2つの数字になります(2つの数字を区別するには、区切りが必要です)。これらは、ファイル、stdout、または言語で使用されるものに出力できます。目標は、上記の式を実行したときに最大出力を生成する範囲内の数値を見つけることです。表示される最初の番号は開始番号(300など)で、2番目の番号は式が生成した出力(262など)である必要があります テストケース Input: 3 Output: 2, -2 Input: 10 Output: 8, 4 Input: 50 Output: 48, 35 Input: 1000 Output: 1000, 971 Input: 9999 Output: 9984, 9802 …

1
scanfよりもCで複数のintを読み取るより良い方法
ゴルフチャレンジでCの4つのintを読み取ろうとしていますが、解決するために必要なコードの長さに悩まされています。 scanf("%d%d%d%d",&w,&x,&y,&z) これは29文字です。これは、合計コードサイズが101文字であることを考えると、非常に大きなものです。本当に必要ないので、最初のintを取り除くことができます。そのため、次のコードを取得します。 scanf("%*d%d%d%d",&x,&y,&z) これは27文字ですが、まだ長いです。 私の質問は、私が知らないintを読み取る他の方法(トリック、関数、K&Rなど)があり、このコードを減らすのに役立つでしょうか? どうもありがとう。 編集:一部のユーザーは、私の質問はCでのゴルフのヒントに似ていると報告しています このトピックにはCコードを短縮するための多くの有用な情報が含まれていますが、入力を読み取るためのより良い方法を提供しないため、実際のユースケースには関係ありません。 scanfよりも複数の整数を読み取るための実際の方法が実際にあるかどうかはわかりません(それが最初に質問をしている理由です)ヒントとコツ。 より良い方法がなければ、誰かがより良い解決策を見つけたとしても、私の質問は近い将来に役立つことがあります。 EDIT2:私は完全なプログラム(機能のトリックはありません)と可能なすべてのライブラリを探しています。C ++ではなく、Cである必要があります。現在、私のプログラム全体は次のようになっています。 main(w,x,y,z){scanf("%*d%d%d%d",&x,&y,&z)} コードを短縮する限り(これはコードゴルフ:))、c ++でない限り、どんなトリックでも大歓迎です
17 code-golf  tips 

10
画像内のコードを圧縮する
これは、クワインバリエーション。 前書き いくつかのあいまいな理由のため、私たちはすべて短いコードを記述しますが、何をするにしても、少なくとも144ピクセル/バイト(12pxフォント)を占有します。しかし、コードを画像にエンコードするとどうなりますか?これが今日のあなたの仕事です。 チャレンジ あなたのタスクは、独自のソースコードを読み込み(非適切なクインは許可されます。たとえば、文字通りソースファイルを読み込みます)、ASCIIに基づいてピクセルの赤、緑、青のコンポーネントを設定することで、そこから画像を作成します文字の値。 例: 「Hello world!」という文字列があります。 Hello world! これをASCII値に変換しましょう。 72 101 108 108 111 32 119 111 114 108 100 33 RGB値をそれにマップします(ソースコードの長さが3で割り切れない場合、残りの文字として0を使用します)。 __________________________________________________ | R | G | B || R | G | B || R | G | B || R | G | B | …

10
汚染された広場
前書き 数字のみで構成される次の正方形を観察してみましょう0 - 9。 1034 4167 8414 3542 この正方形の外側のシェルは次のとおりです。 1034 4 7 8 4 3542 ゼロが含まれているため、外側のシェルを剥がす必要があります: 16 41 この正方形の外側のシェルは次のとおりです。 16 41 ゼロは含まれていないため、汚染されていない正方形です。したがって、基本的に、汚染されていない正方形の定義は、正方形の外殻にゼロが含まれていない場合です。 タスク 任意の妥当な形式で(負でない整数のみを含む)数字の2乗が与えられた場合、任意の妥当な形式で外側のシェルを絶えず剥がして、汚染されていない最大の2乗を出力します。 テストケース テストケース1: Input Output 1234 1234 2345 2345 3456 3456 4567 4567 テストケース2: Input Output 123 123 204 204 346 346 テストケース3: Input Output 101 1 …
17 code-golf  number 

1
Symme-Try This Triangle Trial
長さが正の三角形の数字(1、3、6、10、15 ...)である文字列は、スペースと改行を追加する(および同じ読み上げ順序で保持する)ことにより、「正三角形の三角形」に配置できます。 たとえば、長さ10の文字列ABCDEFGHIJは次のようになります。 A B C D E F G H I J それが唯一の文字が含まれています除き、そのようなA列を取り込みプログラムや関数を記述0して1。(入力が有効であると想定できます。) 結果の「正三角形の三角形」の場合、表示される対称性のタイプを示す4つの数値のいずれかを出力(印刷またはリターン)します。 2三角形に左右対称がある場合に出力します。つまり、任意の1つのコーナーから反対側の中点への対称線を持ちます。 例: 0 1 1 1 0 1 0 0 1 0 1 0 1 1 1 1 0 1 0 1 1 1 3三角形に回転対称がある場合に出力します。つまり、視覚的な変化なしに120°回転させることができます。 例: 0 1 0 0 1 1 0 1 0 …

4
実際に整数のメタゴルフ
バックグラウンド 実際(Seriouslyの後継)は、2015年11月に作成したスタックベースの命令型ゴルフ言語です。他の多くのゴルフ言語と同様に、スタックの内容に基づいて異なる機能を実行する1バイトのコマンドがあります。その専門の1つは数学です-多種多様な数学ベースのコマンドがあります。ただし、数学演算を実行するには、スタックに(1つ以上の)数値を配置する必要があります。多くの異なるオプションがあるため、特定の値をできるだけ少ないバイト数でプッシュすることは困難です。この課題では、実際にできる限り少ないバイトで数値(具体的には整数)を表すことを正確に行います。 チャレンジ N入力として整数を指定するNと、スタックにプッシュされる結果となる有効な実際のコードを出力します。 入力は、32ビットの符号付き2の補数整数の範囲内にあります(つまり、包括的範囲の整数[-2147483648, 2147483647])。 結果は整数(float、string、list、またはfunctionではなく)でなければならず、スタックの先頭になければなりません。 スタックの内容について何も仮定しないでください(空かどうかなど)。スタック上の既存の値を変更または再配置してはなりません。 このチャレンジを書いている時点でのActuallyの最新のコミットが使用されることになっています。バグ修正またはパフォーマンスの強化(または許可されたコマンドの機能を削除または変更しないその他の小さな変更)を行った場合、このバージョンを更新します。 ソリューションは、少なくとも単純なソリューション(:数値リテラルを作成するために入力に追加)と同様に実行する必要があります。 スコアは、簡単な解の長さの合計から、スコアリングに使用される1000個の32ビット符号付き2の補数整数の選択の出力の長さの合計を引いたものになります。必要に応じて、スコアリング整数をいつでも変更する権利を留保します(テストケースの最適化や、テストケースの徹底が不十分な場合など)。 ソリューションは、入力ごとに30秒以内に有効な回答を出力する必要があります。タイミングは、標準の無料のCloud9ワークスペースで行われます。 コマンド 簡単にするために、(現在の)208個のコマンドのうち141個のみを使用でき、数値計算とは関係のない141個の多くのオーバーロードが削除されています。許可されるコマンドのリストは次のとおりです(形式は<hex code> (<symbol>): <descriptions of functions based on stack values and types>次のとおりです。 0B (♂): take the next command and map it over the top of the stack (for example, ♂A is equivalent to `A`M) 1F (▼): pop …

7
異なるベースの素数
チャレンジ: 基数10の数字が与えられます。10から2までのカウントダウンの各ベースに対して: 元の入力番号を基数10の文字列として取得し、基数に対して無効な数字の数字を削除します。 そのベースの結果の数値文字列を解釈します。これにより1または0が得られた場合、プロセス全体を終了します。 最大の素因数を10進数として出力または印刷します。 出力は、最大の素因数の配列にすることができます。 サンプルケース: 入力: 987654321 出力: 379721 10593529 1091 179 1493 293 19 7 代わりに: [379721,10593529,1091,179,1493,293,19,7] これは、987654321の最大素因数を印刷87654321 9 = 42374116 10、7654321 8 = 2054353 10、及びそれが1に達するまでに2止まります。

5
すべての方向で長方形の反対側の角に移動-より難しく
これは基本的にこの質問と同じですが、難しいことを除きます。再び、長方形の左下隅から右上隅に到達するプログラムを作成します。ただし、今回は斜めの移動が許可されています。 プログラムは順序付きペアを受け入れ、(width, height)これらを長方形の寸法として使用します。プログラムは、ソリューションのASCIIアートを作成し(.空の正方形、#ソリューションの一部、およびX開始正方形に使用)、エンドポイントに到達するために必要な移動の数をカウントします。 例 入力: (5, 6) 出力: ....# ....# ...#. ..#.. .#... X.... Move count: 5 バイト単位の最短回答が勝ちます!

11
ABACABA都市を作成する
これが3番目のABACABA市です。 _ A|_| B|__| A|_|_ C|___| A|_| B|__| A|_| ABACABAシーケンスから作成され、基本的には次のとおりです。 A(1回目の反復) 場所B-AB A-ABAを繰り返します(2回目の反復) 場所C-ABAC ABAの繰り返し-ABACABA(3回目の反復) そしてあなたはアイデアを得る。 建物の高さ(下線の数で対応)は、A = 1、B = 2などの数字に変換された文字と同じです。 入力 繰り返し数1 <= n <= 26。 出力 行の先頭の文字を含む、順序nのABACABA市。

13
好奇心の素数式
正の整数nを出力すると、整数aおよびb(簡約された小数部a / bを形成)は次のようになります。 ここで、p kはk番目の素数です(p 1 = 2)。 例: 1 -> 3, 5 2 -> 12, 25 3 -> 144, 325 4 -> 3456, 8125 5 -> 41472, 99125 15 -> 4506715396450638759507001344, 11179755611058498955501765625 420 -> very long 確率的素数チェックは許可されており、言語の整数型の制限により回答が失敗した場合でも問題ありません。 バイト単位の最短コードが優先されます。

5
このコードの説明をもう一度きれいにする
前書き ほとんどのコード愛好家は、提出物に説明を追加するため、何が起こっているのかを理解しやすくなります。通常、コードラインは左側にあり、対応する説明はある種のセパレーターとともに右側にあります。見た目をよくするために、セパレータはすべて同じ列にあります。また、通常、長い説明テキストは次の行に折り返されるため、読者はすべてを読むために水平にスクロールする必要はありません。 しかし、クレイジーなゴルフをしたためにこの説明を編集したい場合、説明をかなりやり直すために時間を費やすことがよくあります。これは非常に反復的なタスクなので、このためのプログラムを作成する必要があります。 チャレンジ 説明とセパレータを含む数行のコードが与えられたら、説明付きのきれいにフォーマットされたコードを出力します。 例 入力 shM-crz1dc4。 "ANDBYOROF#z =入力 rz1#入力を大文字に変換します cd#スペースで入力を分割 c4。 "ANDBYOROF#無視されるパックされた文字列から単語のリストを作成します -#これらの単語を除外 hM#すべての単語の最初の文字のみを取得 s#それらを1つの文字列に結合する 出力 shM-crz1dc4。 "ANDBYOROF#z =入力 rz1#入力を大文字に変換します cd#スペースで入力を分割 c4。 "ANDBYOROF#パックされた文字列から単語のリストを作成します。 #無視 -#これらの単語を除外 hM#すべての単語の最初の文字のみを取得 s#それらを1つの文字列に結合する このコードが何をするかを知ることができる最初の人のための1つのクッキー。 フォーマットアルゴリズム 最も長いコード行を見つけます(説明と、コードと区切り文字の間のスペースを除く)。 このコード行の後に5つのスペースを追加し、対応するセパレーターに説明を追加します。これが基準線になりました。 セパレーターがすべて同じ列になるように、この基準線に1行おきに調整します。 93文字を超えるすべての行を次の方法で新しい行にラップします。 末尾が93列以下である最後の単語を見つけます。 この後のすべての単語を取り、先頭の区切り文字と正しい間隔で新しい行にラップします。これらの2つの単語の間のスペースは削除する必要があるため、最初の行は単語文字で終わり、2番目の行は区切り文字の後の1つで始まります。 結果の行がまだ93文字より長い場合は、すべての行が94文字未満になるまで同じ操作を繰り返します。 ノート 単語は非空白文字で構成されます。単語は単一のスペースで区切られます。 ワードラッピングは常に可能です。これは、ラッピングが不可能になるほど長い単語がないことを意味します。 入力には印刷可能なASCIIのみが含まれ、末尾の空白は含まれません。 セパレータは1行に1回だけ表示されます。 説明の長さには制限がありませんが、セパレータとコードの最大長の合計は93 - 5 = 87charsのみです。5文字は、コードと区切り記号の間のスペースです。コードと区切り記号は常に少なくとも1文字の長さです。 入力には空の行が含まれる場合があります。これらには文字は含まれません(入力を複数行の文字列として使用する場合は改行を除きます)。これらの空の行も出力に存在する必要があります。 すべての行には、いくつかのコード、セパレータ、説明があります。例外は空の行です。 …
17 code-golf  string 

5
橋とトーチの問題
このコードのゴルフパズルのインスピレーションは、ブリッジとトーチの問題です。この問題では、ブリッジの開始時にd人がすべて最短時間で橋を渡らなければなりません。 キャッチは、最大2人が一度に横断できることです。さもないと、橋は自重でつぶれ、グループは橋を渡るために運ばなければならない1つのトーチにしかアクセスできません。 パズル全体の各人には、橋を渡るのにかかる時間が指定されています。2人が一緒に交差する場合、ペアは最も遅い人と同じくらい遅くなります。 橋を渡らなければならない人数は決まっていない。あなたのソリューションは、dの任意の値に対して機能しなければなりません。 この問題に標準入力を使用する必要はありませんが、問題を説明するために、以下の入力および出力形式を使用して説明します。最初の数dは、橋の始点にいる人の数です。次に、コードはd個の数字をスキャンし、それぞれが人の速度を表します。 コード出力は、前述の基準を満たしながら、ブリッジの開始から終了までのすべてのユーザーを横断するのに必要な最短時間になります。 以下に、いくつかの入力ケースと出力ケース、および最初の入力ケースの説明を示します。この情報からアルゴリズムを導き出し、可能な限り少ないバイトのコードで問題を解決するのはあなた次第です。 入力 4 1 2 5 8 出力 15 この出力に到達するには、人々は次の方法で交差する必要があります。 A and B cross forward (2 minutes) A returns (1 minute) C and D cross forward (8 minutes) B returns (2 minutes) A and B cross forward (2 minutes) 道に沿ってガイドする別のテストケースを次に示します。 入力 5 3 1 …
17 code-golf 

2
ボックスを実装する
ASCIIボックスは次のようになります。 ++ +---+ +------+ +---+ +---+ ++ | | | | | | | | | | | | | | | | +-+ | | | | | | | | +-+ | | | | | | +---+ +---+ | | | | +--+ | | | | …

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