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

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

1
GoogleのHopping Bunny
2017年12月4日、Google Doodleはバニーをフィーチャーしたグラフィカルプログラミングゲームでした。後のレベルは非常に重要であり、アトミックゴルフの挑戦の素晴らしい候補のように見えました。 詳細 ゲーム 次の4つの動きがあります:前方にホップ、左折、右折、ループ。これらの動きのそれぞれが1つのトークンであり、それぞれがゲーム内の1つのタイルであることに対応しています。 バニーは直交する4つの方向(北、南、東、西)に直面できます。 バニーは前に飛び出して(正面を向く方向に1マス移動)、左または右に曲がります。 ループには、他のループを含む他の動きがいくつもあり、それらの反復カウントは正の整数です(ただし、ゲームでは技術的に反復カウント0を許可しています)。 ボードはグリッドに合わせた正方形のセットで、バニーは隣接する正方形の間を飛び回ることができます。 バニーはボイドに飛び込むことができません。ボードから飛び降りようとしても何もしないという意味です。(これは明らかに一部の人々にとっては驚きであり、他の人々にとっては失望でした。) 四角はマーク付きまたはマークなしのいずれかです。バニーが正方形の上にあるとき、それはマークされます。 すべての正方形がマークされると、レベルが完了します。 ソリューションが存在すると仮定することができます。 あなたのコード 目的:ボードを指定して、1つ以上の最短の解決策を見つけます。 入力はボードを形成する正方形の位置のリスト(マークされた正方形とマークされていない正方形を区別する)であり、出力は動きのリストです。入力形式と出力形式は、人間が判読できて理解できるものである限り重要ではありません。 勝利基準:各ボードで1分以内に見つかった最短のソリューションの移動数の合計。プログラムが特定のボードのソリューションを見つけられない場合、そのボードのスコアは(5 *正方形の数)です。 ソリューションをハードコードしないでください。あなたのコードは、以下の例として与えられたものだけでなく、入力としてどんなボードでも取ることができるはずです。 例 最初にゲームをプレイし、これらのいくつかを自分で試す機会を与えるために、ソリューションはネタバレに隠されています。また、それぞれについて以下のソリューションが1つだけ提供されます。 Sはバニーの開始広場(東向き)、#マークのない広場、Oマークのある広場です。動きの場合、私の表記はF=前方へのホップ、L=左折、R=右折であり、時間LOOP(<num>){<moves>}を反復<num>して<moves>毎回行うループを示します。ループが最小数を超えて何度でも実行できる場合は、<num>省略できます(つまり、無限大が機能します)。 レベル1: S## FF レベル2: S## # # ループ(2){FFR} レベル3: S## # # ### ループ{FFR} レベル4: ### # # ##S## # # ### LOOP {F LOOP(7){FL}}(DJMcMayhemにより発見) レベル5: ##### # …

6
マイナスとチルダの式を評価する
正規表現に一致する式が与えられた場合、/^[-~]*x$/それを評価し、正規表現に一致xする文字列を出力します/^-?x[+-]\d+$/。 たとえば、文字列はに-~x評価されx+1、文字列はに-~-x評価され-x+1、文字列はに-~-~--x評価されx+2ます。 私たちは、から始めるxと左にある文字列を右に評価します。-項を否定し、に~変換yし-y-1ます。 テストケース: x x+0 ~x -x-1 -~x x+1 ~-~x -x-2 -~-~x x+2 --~~x x+0 ~-x x-1 -~-x -x+1 これはcode-golfです。バイト単位の最短回答が優先されます。 入出力形式は厳密です。"x"必須です。
16 code-golf  string 

30
国境のない完璧な正方形
与えられたn=m^2、m x mからの整数のグリッドに隣接しない整数のリストを返します1 to n。 例 n = 1(m = 1) グリッド: [1] 戻り値: [] n = 4(m = 2) グリッド: [1,2] [3,4] 戻り値: [] n = 9(m = 3) グリッド: [1,2,3] [4,5,6] [7,8,9] 戻り値: [5] n = 16(m = 4) グリッド: [ 1, 2, 3, 4] [ 5, 6, …
16 code-golf  matrix 

7
ログの山を測定する
前書き これは長さ5のログです。 ##### 私はこれらのログの束を互いに積み重ねたいです。これを行うには、新しいログを右から一番上のログにスライドさせ、左または右の端が揃うとスライドを停止します(理由は聞かないでください)。新しいログの方が長い場合、一番上のログの左端までスライドします。 ######## <- ##### 短い場合、右端が揃うまでスライドします。 ###### <- ######## ##### より多くのログをパイルにスライドさせると、それらの位置は現在の一番上のログによって決まります。 ## ###### ### #### ## ###### ######## ##### これは物理的に不可能に見えますが、動作するふりをしましょう。 タスク あなたの入力は、ログの長さを表す正の整数の空でないリストでなければなりません。左端の数字は、私が最初に山に置いたログなので、一番下になります。上記の例では、入力はになります[5,8,6,2,4,3,6,2]。出力は、結果の山の各列について、その列を通過するログの数になります。上記の例では、正しい出力はになります[2,2,3,3,3,2,4,6,3,3,1,2,2]。 ルールとスコアリング 入力および出力は、任意の合理的な形式にすることができます。出力には正の整数のみを含めることができます。つまり、先頭または末尾0のsを含めることはできません。通常のコードとゴルフのルールが適用されます。完全なプログラムまたは関数を記述でき、最小バイト数が優先され、標準の抜け穴は禁止されます。 テストケース [1] -> [1] [4] -> [1,1,1,1] [3,2] -> [1,2,2] [2,3] -> [2,2,1] [2,2,2] -> [3,3] [2,3,2] -> [2,3,2] [3,2,3] -> [1,3,3,1] [1,3,2,2,1,3,1] -> …

17
ラムダ紋章を描く
紀元前480年のサラミスでのギリシャの勝利の2497周年を祝うため。ラムダ紋章を描きます。 ラムダブラゾンは、ギリシャの盾に描かれたラムダです。 パズル:正の奇数の整数nが与えられると、上記の盾のアスキーアートイメージを生成します。 仕様: n = 1: ( /\ ) n = 3: ( /\ ) | / \ | ( / \ ) n = 5 ( /\ ) | / \ | | / \ | | / \ | ( / \ ) グラフ: n = 3 …

10
三角数字
(いいえ、それらではありません) チャレンジ 2つの入力が与えられます。最初の数値は正の整数で、数値の直角三角形n > 0を出力するために使用されます。この三角形は角から始まり、水平方向と垂直方向に1つ、対角線方向に2つ増加します。詳細については、以下の例を参照してください。列の間に1つのスペースを置き、特定の列ですべての数値を右揃えにします。(これは結局アスキーアートです)。n x n1, 2, 3, ... n 2番目の入力はx、三角形の開始コーナー(および方向)を決定する、選択した4つの異なる単一ASCII文字の1つです。たとえば、1,2,3,4またはa,b,c,dまたは#,*,!,)などを使用できます。オリエンテーションの動作方法を回答で指定してください。 この課題の明確化のために、左上に1,2,3,4対応するものを使用し1、2時計回りに使用します。 例 たとえばn = 5、のx = 1場合、次を出力します。 1 2 3 4 5 2 3 4 5 3 4 5 4 5 5 入力の場合n = 11、x = 1出力は(一桁が右詰めされているので、余分なスペースに注意してください)以下: 1 2 3 4 5 6 7 8 9 10 11 …

15
レーベンシュタイン距離とOEIS(警官)
これは警官の投稿です。強盗ポストはここにあります。 あなたの仕事は整数入力Nを取り、シーケンスOEIS A002942のN番目の数字を出力することです。 シーケンスは、逆向きに書かれた平方数で構成されます。 1, 4, 9, 61, 52, 63, 94, 46, 18, 1, 121, 441, ... 先行ゼロは削除されることに注意してください(100は001ではなく1になります)。これを文字列に連結します(または1つの長い数値が与えられます): 1496152639446181121441 この文字列/番号のN番目の数字を出力します。Nを0インデックスまたは1インデックスとして選択することができます(どちらを選択するかを明記してください)。 テストケース(1-indexed): N = 1, ==> 1 N = 5, ==> 1 N = 17, ==> 1 <- Important test case! It's not zero. N = 20, ==> 4 N = …

23
範囲累乗整数のシーケンス
三角形検討N行目(1-インデックス付き)が最初の配列であるNの正の整数パワーNを。最初の数行は次のとおりです。 N | 三角形 1 | 1 2 | 2 4 3 | 3 9 27 4 | 4 16 64 256 5 | 5 25125625 3125 ... これらのパワーを1つのシーケンスに連結すると、OEIS A075363が得られます。 1, 2, 4, 3, 9, 27, 4, 16, 64, 256, 5, 25, 125, 625, 3125, 6, 36, 216, 1296, 7776, …

16
プライムの力
この課題のために、素数の素数(PPP)は、素数の素数に対する素数として定義できる数として定義されます。例えば、9は3 ^ 2として表現できるため、PPPです。一方、81はPPPではありません。これは、3 ^ 4としてしか表現できず、4が素数ではないためです。最初のいくつかのPPPは次のとおりです:4、8、9、25、27、32、49、121、125、128、169、243、289、343 ...これはOEISシーケンスA053810です あなたのタスク: 入力整数nに対して、n番目のPPP(1インデックス付きまたは0インデックス付き)のどちらか好きな方を返す/出力するプログラムまたは関数を作成します。 入力: 合理的な方法で受け取った0〜1,000の整数。 出力: 入力によって示されるインデックスのPPP。 テストケース: これらは1インデックスであるため、プログラムが0インデックスの入力を受け取る場合、指定された入力-1に対して同じ出力に到達する必要があります。 3 -> 9 6 -> 32 9 -> 125 得点: このコードゴルフは、バイト単位の最低スコアが勝ちです!

15
符号付き単項数のリストを解析します
単項数は通常、非負の整数のみを表しますが、次のようにすべての整数を表すように拡張できます。 正の整数NはNとして表されます 1ます。5 -> 11111 負の整数-Nは、aの0後にNが続くことで表されます1ます。-5 -> 011111 ゼロは次のように表されます 0 0セパレータとして使用すると、これらの数値のリストを明確に表すことができます。 3,-2,0,1 111,011,0,1 111 0 011 0 0 0 1 11100110001 あなたの仕事:符号付き単項数のリストを表す文字列を取得し、それを10進数のリストに変換します。 詳細 入力は、符号付き単項数の完全なリストであると想定できます。特に、プログラムは1)空の入力または2)区切り文字で終わる入力を処理する必要はありません。 各数値の大きさは127を超えないと想定することができます。文字列またはリストの最大サイズを持つ言語では、入力と出力が言語のデータ構造に適合すると想定できますが、アルゴリズムは理論的には任意のサイズ。 プログラムまたは関数は、標準的な方法でI / Oを実行できます。入力は、文字列または文字のリスト、単一文字の文字列、整数、またはブール値です。1およびを表すために任意の2文字を使用でき0ます。あなたが使用していない場合1や0、使用しているどの文字を指定してください。 出力は、妥当なリスト形式の10進数でなければなりません(特に、数字の間に何らかの区切り文字が必要です)。負の数値はマイナス記号で示す必要がありますが、言語の負の整数の形式が異なる場合はそれも受け入れます。ゼロは、出力で0またはとして表される場合があります-0。 テストケース 1 -> 1 0 -> 0 (or -0, and similarly for the other test cases) 011 -> -2 1101 -> …

30
一連の課題#3:移動平均
注:これは、一連のアレイ操作の課題の3 番目です。前のチャレンジについては、ここをクリックしてください。 リストの移動平均 リストの移動平均は、元の小さな重複サブリストを平均化することによって作成された、新しい平滑化されたリストを生成する計算です。 移動平均を作成するとき、特定の「ウィンドウサイズ」を使用して重複するサブリストのリストを最初に生成し、このウィンドウを毎回右にシフトします。 たとえば、リスト[8, 4, 6, 2, 2, 4]とウィンドウサイズを指定する3と、サブリストは次のようになります。 [8, 4, 6, 2, 2, 4] Sublists: ( ) <- [8, 4, 6] ( ) <- [4, 6, 2] ( ) <- [6, 2, 2] ( ) <- [2, 2, 4] 次に、各サブリストの平均値を計算して結果を取得します[6.0, 4.0, 3.3, 2.7](各値は小数点以下1桁に丸められます)。 チャレンジ あなたの仕事は、リストLおよび整数1≤n≤length(L)が与えられ、ウィンドウサイズnを使用してLの移動平均を計算するプログラムまたは関数を書くことです。 ルール: プログラムでは、整数除算または浮動小数点除算を使用できます。浮動小数点除算の場合、値がそれ以外の場合に正しい限り、データ型の制限によるわずかな不正確さが許可されます。 …

6
Anyfix表記を実装してください!
プレフィックス表記では、演算子は引数の前に来るため、演算子next()が再帰的に呼び出されることを想像できます。中置記法では、演算子は引数の間を行き来するので、単純に構文解析ツリーと考えることができます。後置記法では、演算子は引数の後に来るため、スタックベースと考えることができます。 anyfix表記では、演算子はどこにでも行くことができます*。演算子が表示され、十分な引数がない場合、演算子は十分な引数があるまで待機します。この課題のために、非常に基本的なanyfix評価器を実装することになります。(anyfixは、ここで遊んだり、ここでチェックしたりできるように放棄したレクリエーション言語であることに注意してください) 次のコマンドをサポートする必要があります。 (アリティ1) 複製する 負 (アリティ2) 添加 乗算 等式:0またはを返します1。 これらのコマンドには、任意の5つの非空白記号を使用できます。デモンストレーションのために、"複製、×乗算、加算として使用し+ます。 リテラルについては、負でない整数のみをサポートする必要がありますが、インタープリターはすべての整数(言語の(合理的な)整数範囲内)を含めることができる必要があります。 例を見てみましょう10+5。ストレージは、キューではなくスタックとして動作する必要があります。最初に、スタックはから始まり[]、キューに入れられた演算子リストはから始まり[]ます。次に、リテラル10が評価され、スタックが作成されます[10]。次に、演算子+が評価されます。これには2つの引数が必要です。ただし、スタックには引数が1つしかないため、キュー演算子リストはになり['+']ます。次に、リテラル5が評価され、スタックが作成されます[10, 5]。この時点で、演算子'+'を評価して、スタック[15]とキューを作成できます[]。 最終的な結果は、あるべき[15]ために+ 10 5、10 + 5と10 5 +。 より難しい例を見てみましょう10+"。スタックとキューは[]andで始まります[]。10最初に評価され、スタックが作成されます[10]。次に、+が評価されますが、これはスタックを変更せず(十分な引数がないため)、queueを作成します['+']。次に、"評価されます。これはすぐに実行できるため、スタックが作成されます[10, 10]。+これで、スタックが[20]キューになるように評価できます[]。最終結果は[20]です。 操作の順序はどうですか? を見てみましょう×+"10 10。スタックとキューは両方とも次のように開始します[]。 ×:スタックは変更されず、キューは ['×']ます。 +:スタックは変更されず、キューは ['×', '+']ます。 ":スタックは変更されず、キューは ['×', '+', '"']ます。 10:スタックはになり[10]ます。にもかかわらず×、それが最初に表示されますので、最初の演算子が評価されるようにする必要があり、"それが評価されるので、すぐに実行しないと演算子のどれもそれができる前にすることができます。スタックがに[10, 10]なり、キューになります['×', '+']。×これで評価できるようになり、スタック[100]とキューが作成されます['+']。 10:スタックはになり[100, 10]、+評価できるようになります。スタックがに[110]なり、キューになります[]。 最終結果は [110]です。 これらのデモで使用されるコマンドは、anyfix言語のコマンドと一致しています。ただし、最後の例は、インタープリターのバグが原因で機能しません。(免責事項:あなたの提出物はanyfixインタープリターでは使用されません) チャレンジ 5つの空白以外の数字以外の文字のセットを選択し、上記の仕様に従ってanyfixインタープリターを作成します。プログラムは、特異配列またはそれに含まれる値を出力できます。値のスタックには実行の終了時に単一の値のみが含まれ、演算子のキューは実行の終了時に空になることが保証されています。 これはコードゴルフなので、バイト単位の最短コードが勝ちです。 テストケース これらのテストケースでは、duplicate is "、negative …

11
逆正接の合計の正接を見つける
バックグラウンド 任意の整数に対してk >= 0、f(k) = tan(atan(0) + atan(1) + atan(2) + ... + atan(k))有理数であることを示すことができます。 ゴール 与えられたときに単一の簡約された分数としてk >= 0出力する完全なプログラムまたは関数を書きますf(k)(分子と分母は互いに素です)。 テストケース 最初のいくつかの値は f(0) = (0,1) f(1) = (1,1) f(2) = (-3,1) f(3) = (0,1) f(4) = (4,1) f(5) = (-9,19) f(6) = (105,73) ルール 標準的な抜け穴は禁止されています。 入力および出力は、任意の便利な形式にできます。あなたは、出力してもよいf(k)文字列としてnumerator/denominator2つの整数のタプル、分数や合理的なオブジェクト、などあなたは、出力文字列は、唯一の2つの整数を与えると、として、出力3/2の代わりに1 1/2。 これはコードゴルフで、最短の回答(バイト単位)が勝ちです。

7
私のPPCG IDとは何ですか?
チャレンジ PPCGメンバーの名前を指定して、PPCG ID番号を出力します。ユーザーが存在しない場合は、エラーを報告するか、正でない数を返すことがあります。この名前のメンバーが複数ある場合、1つのIDのみを出力するか、すべてのIDを出力するかを選択できます。 テストケース "musicman523"-> 69054 「デニス」-> 12012 「xnor」-> 20260 「漏れた修道女」-> 48934 「fəˈnɛtɪk」-> 64505 「ヨルクヒュルサーマン」-> 59107 「コミュニティ」-> -1 「存在しないユーザー」-> 0 「Alex」-> 69198(これは考えられる結果の1つです) 「漏れやすいN」-> 0 「ホルヘ」-> 3716

15
1000003で割り切れますか?簡単です。最後の桁に300001を掛けて加算するだけです!
Pより大きい素数が与えられた場合10、プログラムまたは関数xは、素数の最後の桁を乗算して元の残りに加算したときに元の素数の倍数を生成する最小絶対値を持つ整数として定義されるその分割可能性ルールを把握する必要がありますプライム。 例 入力が与えられる31と、最後の数字はで1あり、残りの数字は3です。したがって、プログラムは、の倍数であるxような最小絶対値を持つ整数を見つける必要があります。この場合、機能するため、プログラムまたは関数はを返します。1*x + 331x=-3-3 入力が与えられる1000003と、最後の数字はで3あり、残りの数字は100000です。したがって、プログラムはの倍数であるx=300001ため3*300001+100000 = 1000003、見つけるでしょう1000003。 数学的背景 の値はx、可分性テストとして使用できます。数がいる場合Nで割り切れるP、その後、追加xの回の最後の桁Nの残りの部分にはN、複数の得られますPし、場合にのみがあればNで割り切れるP最初の場所でします。 ためにP=11、我々が得るx=-1ために、よく知られた整除ルールに相当する、11数はで割り切れる:11その桁の交互の違いで割り切れます11。 ルール 出力は、出力の符号と値の両方を明確にエンコードする任意の形式にすることができます。 入力素数は10〜2 ^ 30の間です。 入力が素数でない場合や範囲内にない場合は処理する必要はありません。 あなたは、両方の場合はハンドルに必要としないxと-x有効な出力(起こるべきではありません)です。 ブルートフォースは許可されますが、より創造的なソリューションが評価されます。 これはcode-golfなので、各言語で最も短いコードが勝ちです!ゴルフ言語での回答が他の言語での投稿を妨げないようにしてください。 テストケース Input Output 11 -1 13 4 17 -5 19 2 23 7 29 3 31 -3 37 -11 41 -4 43 13 47 -14 53 16 59 6 61 …

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