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

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

30
組み込み関数を使用せずに、配列内の最小および最大整数を見つけます
チャレンジ stdinから受け取った整数の配列、関数の引数、プログラムの引数、またはその他のメソッドを指定します。 出力のみ戻り値、STDOUT、または他のフィッティング方法を介して、アレイ内の最小値および最大値、。 セッション例 > minmax( {0, 15, 2, 3, 7, 18, -2, 9, 6, -5, 3, 8, 9, -14} ) -14 18 リファレンス実装 // C++14 void minmax(std::vector<int> v) { int min = v[0]; int max = v[0]; for(auto it : v) { if (*it < min) min = *it; …

2
画像を鈍らせる
前書き 鋭いエッジは、率直に言って、単に危険なので、PNGを入力として、以下に説明する方法を使用して画像をぼかし、それらのとがった鋭いエッジを鈍らせます。 方法 各ピクセルのRGB値を取得するには、次の3つの式を使用します。 R = 1.5 × ∑na = 1R2an−−−−−−−−−−−−√R=1.5×∑a=1nRa2nR = \sqrt{\frac{1.5\times\sum^n_{a=1}R^2_a}{n}} G = 1.5 × ∑na = 1G2an−−−−−−−−−−−−√G=1.5×∑a=1nGa2nG = \sqrt{\frac{1.5\times\sum^n_{a=1}G^2_a}{n}} B = 1.5 × ∑na = 1B2an−−−−−−−−−−−−√B=1.5×∑a=1nBa2nB = \sqrt{\frac{1.5\times\sum^n_{a=1}B^2_a}{n}} ここで、∑na = 1R2a∑a=1nRa2\sum^n_{a=1}R^2_aは、隣接する各ピクセルの赤の値の2乗の合計です。nnnの値は、隣接するピクセルの数です(たとえば、コーナーピクセルのnnn値は3で、画像の中心付近のピクセルのnnn値は8です)。 隣接するピクセルとは、すべての方向(左、右、上、下、およびすべての対角線)で元のピクセルから1ピクセル離れたピクセルです。 たとえば、次の3 x 1の画像では: 中央のピクセルのぼやけたRGB値は次のようになります。 R = 1.5 ∗ (02+ 02)2−−−−−−−−−−−−√= 0R=1.5∗(02+02)2=0R = \sqrt{\frac{1.5*(0^2+0^2)}{2}} = 0 …

2
ファットアロー関数を短縮する方法はありますか?
ここPPCGで私が見てきたことから、太い矢印関数を含むほとんどのJavaScriptエントリは、2つの陣営のうちの1つである傾向があります。 単一のステートメントとして実行し、すぐに答えを返すことができるシンプルなもの x=(a,b)=>a*a+b ループを使用しているために通常中括弧があり、結果としてreturnステートメントを使用する必要がある、より複雑なもの。p=b=>{m=b;for(a=1;~-m;)--m,a*=m*m;return a%b} 概念実証として中括弧の概念を持つカテゴリ2から上記の例を取り上げreturnます。これは、JSゴルファーのコードから8バイトを削除できる可能性があるため(これが常に発生するというわけではない)、これを求めているだけです。このインスタンスで使用できるテクニックはありますか?私は再帰を試みましたが、このm=b声明は揺るがすことができないように思われるので、ちょっとしたバグであることが証明されました。 上記のコードの場合、returnゴルフが短くなるかどうかに関係なく、どのようにしてさらにゴルフがステートメントを削除するでしょうか?

20
y乗がxで割り切れる最小の正数
仕事 少なくとも整数の整数が与えられた場合x、-th乗がで割り切れる正の最小数を見つけます。y2yx 例 考えるx=96とy=2、出力は次のようになります24ので、24最小の正であるn満たしますn^2 is divisible by 96。 テストケース x y output 26 2 26 96 2 24 32 3 4 64 9 2 27 3 3 得点 これは、コードゴルフ。バイト数が最も少ないソリューションが優先されます。 参照資料 y=2:OEIS A019554 y=3:OEIS A019555 y=4:OEIS A053166 y=5:OEIS A015052 y=6:OEIS A015054

11
xxd出力をシェルコードに変換します
xxdからいくつかの出力を取得し、手動で使用可能なシェルコードに変換するのは面白くないので、あなたの仕事はプロセスを自動化することです。 ルール あなたの提出物は、関数、ラムダ、スクリプト、またはそれらの合理的な同等物です。結果を印刷するか、提出物が関数/ラムダである場合、それを返すこともできます。 プログラムは3つの引数を取る必要があります。最初の引数は、次のように、ファイル名以外の引数なしで実行されたxxdの出力を含む文字列ですxxd some_file。最初の引数がどのように見えるかの例を次に示します。 00000000: 31c0 b046 31db 31c9 cd80 eb16 5b31 c088 1..F1.1.....[1.. 00000010: 4307 895b 0889 430c b00b 8d4b 088d 530c C..[..C....K..S. 00000020: cd80 e8e5 ffff ff2f 6269 6e2f 7368 4e58 ......./bin/shNX 00000030: 5858 5859 5959 59 XXXYYYY バイトを含む中央セクション(の後の最初の8列:)を取得し、空白を削除してシェルコードに変換し、\x各バイトの前にaを置く必要があります。 上記の入力に対する出力は次のとおりです(他の引数は無視します): \x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80\xeb\x16\x5b\x31\xc0\x88\x43\x07\x89\x5b\x08\x89\x43\x0c\xb0\x0b\x8d\x4b\x08\x8d\x53\x0c\xcd\x80\xe8\xe5\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68\x4e\x58\x58\x58\x58\x59\x59\x59\x59 最初の引数は常に有効なxxd出力であり、ファイル名以外の引数なしで実行されると想定できます。 また、出力は、バックスラッシュがエスケープ文字として使用されないリテラルのバックスラッシュである文字列である必要があります。したがって、「\ x65」と言うとき、バイト0x65についても、文字「A」についても話していません。コードでは、文字列「\ x65」になります。 2番目の引数は、xxd出力のシェルコードの開始位置を指定し、3番目の引数は終了位置を指定します。3番目の引数がの場合、-1xxd出力の最後で終了します。2番目と3番目の引数も常に負ではありませんが、3番目が-1 以下にテストケースを示します。 …

5
差分ピラミッドを視覚化する
差分ピラミッドは、新しい対角線が最後の対角線の要素間の差の絶対値であるピラミッドです。たとえば、配列で始まる場合 2 5 4 9 3 4 次に、これらを対角列に配置します。 2 5 4 9 3 4 次に、次の対角線を塗りつぶします。この配列の連続する要素間の絶対的な違いは次のとおりです。 3 1 5 6 1 それが次の対角線です。 2 3 5 1 4 5 9 6 3 1 4 ピラミッドが塗りつぶされるまで繰り返します。 2 3 5 2 1 4 2 4 5 9 1 3 1 6 3 0 1 …

5
迷宮を歩く
または、それは実際には迷路ではありませんが、それでもです。 ルール: 入力は、2行の文字列で構成される*、1、xとX。そのひもは通り抜ける迷路です。行の長さは同じです。 入力を,(カンマ)を含む文字列またはこれらの2行の間の任意の便利な区切り文字として受け取ることができます。または、両方の行を関数の個別の引数として使用できます。 出力は、文字列を終了するために必要な手順の数です(最後の手順は、文字列から移動する手順です)。 最初のシンボルの前の左上隅(上の行)から開始します。 各ステップで、1シンボルずつ(n番目から(n + 1)番目の位置まで)移動します。次に、踏んだキャラクターに応じて、結果は異なります。各文字の機能は次のとおりです。 *-何もない。普通に踏むだけです。 x-踏んだら、ラインを切り替えますが、最初から同じ水平距離を保ちます。たとえば、上の行の3番目の位置に足を踏み、xここで小文字に遭遇しました。次に、すぐに下の行に移動しますが、再び3番目の位置に移動します。 X-行を切り替えて、次の位置に移動します。この例は同じですが、3番目から4番目の位置に移動します(したがって、2番目の行の4番目の位置にいます)。 1 -ちょうど別の位置で前進します。 各キャラクターが仕事をすると、スペースに置き換えられ、「機能」しなくなります。 次に例を示します。 入力: x * 前述のように、最初の行の最初のシンボルの前から開始します。最初のステップでは、文字に移動しx、この文字は、2行目に切り替えます。文字xはもはや機能しませんxが、で置き換えられ*ます。これは、後者の例でより関連します。あなたは今、下の行のアスタリスクにいて、それはあなたに何もしませんでした。 2番目のステップは前方への移動であり、ストリングを終了するため、ラビリンスは完了し、2ステップかかりました。 出力 2。 入力: xX* x1* 最初のステップ:xに進みますx。これにより、下の行に移動します。ここに、使用された文字がアスタリスクに置き換えられるというルールがあります。その後、最初の行に戻りますxが、使用されてアスタリスクになったため、もう行はありません。したがって、このアスタリスク上を安全に移動し、ステップが完了しました(最初の行の最初の位置にいます)。 2番目のステップ:上に移動Xすると、下の行に移動し、次に前方に移動します。2行目の3番目の位置(アスタリスク)に常駐し、2番目の位置(を含む1)には一度もアクセスしたことがありません。 3番目のステップ:前方に移動して、文字列を終了します。 出力:3。 テストケース: 入力: *1* xxx 出力:3。(13番目の位置にジャンプするため)。ここでは、2行目にアクセスすることはありませんが、入力の必須部分です。 入力: *X*1*x x*1xx* 出力:4。 入力: 1x1x ***X 出力:3。 入力: 1*x1xxx1*x x*x1*11X1x 出力:6。 入力: xXXXxxx111* **xxx11*xxx …

3
トランプゲーム「Oorlog」で「戦闘」をシミュレートする
私が個人的にオランダ語で「Oorlog」(「戦争」に翻訳されます)という名前で知っているカードゲームのある局面のシミュレーションを構築しましょう。 「Oorlog」はどのように機能しますか? 2組のカード(それぞれ2人のジョーカーを含む)は、プレイするプレイヤーの数に等しく分割されます。各プレイヤーは自分のストックをシャッフルし、自分の前に上下逆さまに置き、すべてのプレイヤーが同時にストックの最初のカードを開きます。 その「戦い」の勝者は、これらのルールに従うカードの価値によって決定されます。ジョーカー/エースがキングを破ります。キングはクイーンを破る。女王はジャックを破る。ジャックは10を破ります。10敗北9; ....さらに、2と3の両方がエース/ジョーカーを破ります。最後のルールは、2または3がエースまたはジョーカーを打ち、エースまたはジョーカーが他のカードを打ち、順番に2または3を打ち負かすサイクルにつながる可能性があります。この場合、2または3が勝ちます。 (このカードゲームではスーツは無関係です。) 2人以上のプレイヤーが同じ最高のカードを持っている場合、それらは「戦争」を持っています。これは、彼らが1枚のカードを上下逆さまに置き、それぞれがストックから新しいカードを開き、再び最高のカードを持っている人を探すことを意味します。これは、一人のプレイヤーが戦闘全体に勝つまで続きます。 (そのバトルのすべてのカードは、バトルに勝ったプレイヤーの捨て札パイルに行きます。その後、全員が新しいカードを開きます。プレイヤーの在庫がカードからなくなると、彼らは捨て札パイルをひっくり返し、この新しい在庫を続けます。これは、プレーヤーがすべてのカードを使い果たすまで続き、カードの量が最も多いプレーヤーが勝ちます。) 3人のプレイヤーとの「戦闘」の例: 4、8、ジャック: ジャックが勝ちます。 7、エース、クイーン: エースが勝ちます。 10、10、King: キングが勝ちます。 3、ジョーカー、2: 3勝。 エース、ジョーカー、2: 2勝。 3、クイーン、エース: 3勝。 女王、女王、9: 女王と女王は「戦争」をしているので、2枚の新しいカードが続きます:4、8; 8勝。 4、4、4: すべてが「戦争」を抱えているため、3つの新しいカードが続きます。8、エース、2。 2勝。 ジャック、5、ジャック: ジャックとジャックは「戦争」をしているので、2枚の新しいカードが続きます。 5と5も等しいので、「戦争」は2つの新しいカードで再び続きます。 キングが勝ちます。 ジョーカー、ジョーカー、エース: すべてが「戦争」をしているので、3枚の新しいカードで続行します。9、7、9。 9と9も等しいので、「戦争」は2枚の新しいカードで続きます。ジャック、3。 ジャックが勝ちます。 だから、コードの挑戦に: 入力: STDIN配列、または配列をシミュレートする文字列(呼び出し-言語が配列をサポートしている場合でも)。この配列には、時系列で戦闘のカードが含まれています(これについてのより明確な理解については、テストケースを参照してください)。 出力: STDOUTバトルに勝ったプレイヤーのインデックス。 あなたはゼロインデックス(すなわちかどうかを選択することができ0、1または2(IE)または1インデックス付きの出力を1、2、3)。 チャレンジルール: 入力は、配列を表す単一の配列/文字列になります。したがって、単純化するために配列の配列を持つことはできません。また、戦争に参加していないカードの代理アイテムを持つことはできません。 フェイスカードには、文字表記ではなく数字表記を使用します。だからエース/ジョーカー=1 ; ジャック= 11; クイーン= 12; とキング= …


14
指数生成関数がタンジェントであるシーケンスをゴルフ
ほとんどすべての関数は、無限の項を持つ多項式として表現できます。 例えば、 e^x = 1 + x + x^2/2! + x^3/3! + x^4/4! + ... 例えば、 sin(x) = x - x^3/3! + x^5/5! - x^7/7! + ... n-番目の項の係数はシーケンスを形成し、対応する関数は生成関数と呼ばれますシーケンスのます。 n-th項の係数はシーケンスを形成します。 多くの場合、n-th項にはの分母がありn!ます。したがって、係数を乗算してn!、指数生成関数が元の関数になる別のシーケンスを取得します。 たとえば、指数関数を生成するシーケンスは次のe^xようになります。1,1,1,1,...。 たとえば、指数関数を生成するシーケンスは次のsin(x)ようになります。0,1,0,-1,0,1,0,-1,...。 仕事 あなたの仕事はn、指数生成関数がtan(x)。 テストケース n result 0 0 1 1 2 0 3 2 4 0 5 16 6 …

12
同じ最初のフィールドを持つ行をマージするためのOneliner
これは私の最初のcodegolfの質問なので、適切でない場合は事前に謝罪し、フィードバックを歓迎します。 次の形式のファイルがあります。 a | rest of first line b | rest of second line b | rest of third line c | rest of fourth line d | rest of fifth line d | rest of sixth line 実際の内容は、区切り文字と同様に異なります。内容は単なるテキストです。区切り文字は1行に1回だけ表示されます。このパズルでは、区切り文字を自由に変更してください。たとえば、「%」を区切り文字として使用します。 望ましい出力: a | rest of first line b | rest of …

2
画像のかくれんぼ
この課題では、写真(実際のカメラで撮影)内の特定のピクセルを見つける必要があります。 (R、G、B)タプルと画像が渡され、指定されたRGBカラーに一致する画像内のポイント(x、y)を返す必要があります。画像には、色と一致する複数のポイントがある場合があります。あなただけを見つける必要があります1。 課題は、あなたがそれを行う必要があるということですできるだけ少数の画素として読みながら。スコアは、すべてのテストケースで読み取られたピクセルの総数になります。 必要に応じて、ピクセルで処理を行わない限り、画像全体をRGB値の配列に読み込むことができます。これは純粋に効率化の目的で許可しています。たとえば、Pythonではlist(Image.open("image_name+".jpg").convert("RGB").getdata())大丈夫です。 場所のハードコーディングは許可されていません。アルゴリズムは、以下にリストされているテストケース以外にも機能するはずです。テストケース間でデータを保存することはできません。<10画像にまれにしか表示されないRGB値()を選択しました(アルゴリズムに違いがある場合)。アルゴリズムでランダム性を使用している場合、スコアが一定になるようにシードを設定してください。 画像はGithubにあります テストケース: image_name: (r, g, b) [all possible answers] barn: (143,91,33) [(887,1096),(2226,1397),(2007,1402),(2161,1508),(1187,1702)] (53,35,59) [(1999,1260)] (20,24,27) [(1328,1087),(154,1271)] (167,148,176) [(1748,1204)] (137,50,7) [(596,1498)] (116,95,94) [(1340,1123)] (72,49,59) [(1344,857),(1345,858),(1380,926),(1405,974),(1480,1117)] (211,163,175) [(1963,745)] (30,20,0) [(1609,1462),(1133,1477),(1908,1632)] (88,36,23) [(543,1494),(431,1575)] daisy: (21,57,91) [(1440,1935),(2832,2090),(2232,2130),(1877,2131),(1890,2132)] (201,175,140) [(1537,1749),(2319,1757)] (169,160,0) [(2124,759)] (113,123,114) [(1012,994),(2134,1060),(1803,1183),(1119,1335)] (225,226,231) [(3207,829),(3256,889),(3257,889),(1434,981),(2599,1118),(2656,1348),(2656,1351)] (17,62,117) [(2514,3874),(2336,3885)] (226,225,204) [(3209,812)] …

4
除数グラフの最短経路
前書き この課題では、特定の無限の無向グラフを扱います。これを高除数グラフと呼びます。そのノードは、2つのノード間のエッジがある2から始まる整数である<Bであれば分割のB及び2 ≥bは。2〜18の範囲で形成されるサブグラフは次のようになります。 16-8 12 18 \|/ |/| 4 6 9 10 15 14 | |/ |/ | 2 3 5 7 11 13 17 無限大除数グラフが接続されていることを示すことができるため、2つのノード間の最短経路について尋ねることができます。 入出力 入力は2つの整数aとbです。2≤a≤b <1000と仮定できます。あなたの出力との間の最短経路の長さであり、そしてB無限高い除数のグラフです。これは、パス内のエッジの数を意味します。 あなたは次のことが役立つことがあります。常にから最適なパスが存在するB最初に増加し、その後減少し、かつ厳密に未満のみの訪問ノードだ2bの2。特に、b <1000なので、2 000 000未満のノードのみを考慮する必要があります。 例 入力3とを考慮してください32。ノード3と32の間の1つの可能なパスは 3 -- 6 -- 12 -- 96 -- 32 このパスには4つのエッジがあり、短いパスはないため、正しい出力は4です。 別の例として、のための最適な経路2と25なります 2 -- 4 -- …

30
別のアルファベットと数字
テキストの段落には、数字とアルファベットが混在しています。あなたの仕事は、各行の同じ順序で、左側に数字を、右側にアルファベット文字を分けることです。 ルール: 数値は単純な整数です。そのため、小数点も負符号も正符号もありません。 番号は連続していても連続していなくてもかまいませんが、ケースが何であれ、同じ順序で左側にプッシュする必要があります。 数字は単語の間に現れる場合があります。 テキストには、スペース、アンダースコア、コンマ、ドットに加えて、ASCIIアルファベット文字と数字のみが含まれます。 最小限のキーストローク(vimマクロなど)またはスクリプト作成の場合の最小バイト数でこれを行う人が勝者です。 テキスト例: A word can have any number of text like 433884, but all the numb89ers has to be moved left side but alph6abetical va9lues has to be pas46ted on right side. The text might con4tain chara29cters s2huffled like hlep or dfeintino or even …

10
最短パングラマティックウィンドウ
このコードゴルフチャレンジで示されているように、パングラムはアルファベットの26文字すべてを含む文または抜粋です。ただし、パングラマティックウィンドウは、テキストの一部の形をしたパングラムであり、単語の途中で終了または開始する場合があり、大きな作品のどこかにあります。これらはどこでも自然に発生し、真のパングラムの適切なサブセットであるため、パングラマティックウィンドウが含まれているかどうかを確認するだけでは退屈になりますが、それも以前に行われました。 そのため、文字の長さに基づいて、特定のテキストにある最小のものを見つけることに興味があります!もちろん、可能な限り短いバイト単位のコードで、テーマに合わせます。 ルールとガイドライン 文字列を入力として受け取り、入力に最小のパングラマティックウィンドウがある場合はそのウィンドウの文字列を返します。存在しない場合は、ブール値のFalseまたは空の文字列を返します。 文字列がパングラマティックウィンドウであるかどうかは大文字と小文字を区別せず、26文字のみに依存し、句読点や数字、その他の奇数記号には依存しません。 同様に、パングラマティックウィンドウの文字の長さは、単にすべての文字の数ではなく、文字の出現回数の合計だけです。返される値は、このカウントに基づいて最小でなければなりません。結局のところ、私たちは言語学者であり、プログラマーではありません。 ただし、パングラマティックウィンドウの出力は、同じ大文字と句読点などを含む、入力の正確な部分文字列である必要があります。 同じ文字長の複数の最短パングラマティックウィンドウがある場合は、いずれかを返します。 テストケース 'This isn't a pangram.' ==> False 'Everyone knows about that infamous Quick-Brown-Fox (the one who jumped over some lazy ignoramus of a dog so many years ago).' ==> 'Quick-Brown-Fox (the one who jumped over some lazy ig' '"The five boxing wizards …
15 code-golf  string 

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