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

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

7
1Dホッピング配列迷路
触発さ我々の塔は、ホッピングんとに関連した2D迷路マイナス1D 前書き あなたの仕事は、指定されたルールに従って配列迷路から抜け出すための最短経路を見つけることです。 チャレンジ n個の要素を持つ1D配列aは、n 個の点で構成される迷路と見なすことができます。インデックスkの点は、一方向にk + a [ k ]およびk - a [ k ] の点に接続されます。つまり、インデックスkのポイントからa [ k ]ステップだけ正確に前後にジャンプできます。配列の境界外のインデックスを持つポイントは、迷路外と見なされます。 これを説明するために、次の配列を検討してください。 [0,8,5,9,4,1,1,1,2,1,2] 現在5番目の要素にいる場合、要素は4であるため、9番目の要素まで4ステップ進むか、1番目の要素まで4ステップ戻ることができます。後者の場合、要素0になります。これは、それ以上移動できないことを示します。前者を実行すると、9番目の要素が2であるため、11番目の要素(再び2)にホップすることを選択できます。その後、「13番目の要素」に再びホップできます。配列し、迷路への出口と見なされます。 したがって、真ん中の要素から開始する場合、迷路から抜け出すための1つの方法は、1ステップ戻る、4ステップ進む、2ステップ進む、そして再び2ステップ進むこと[-1,4,2,2]です。これは配列として表すことができます。または[4,8,10,12]、すべての中間点と最終点のゼロベースのインデックスを記録する配列(1ベースのインデックスでも問題ありません)、または単に記号で表現できます[-1,1,1,1]。 低指数の端から迷路を脱出することも大丈夫です。 最初の表記を使用して同じ要素から開始すること[1,1,1,2,2]も解決策ですが、4つではなく5つのステップがあるため最適ではありません。 タスクは、配列の迷路から抜け出すための最短パスを見つけ出し、パスを出力することです。最適なパスが複数ある場合は、それらの一部またはすべてを出力できます。解決策がない場合は、有効なパスから識別可能な偽の値を選択して出力する必要があります(出力をまったく生成しなくてもかまいません)。 簡単にするために、配列内の要素の数は常に奇数であり、常に真ん中の要素から始めます。 テストケース テストケースはさまざまな形式の出力を示していますが、これらに限定されません。 Input Output [0,8,5,9,4,1,1,1,2,1,2] [-1,4,2,2] [2,3,7,1,2,0,2,8,9] [2,9] (or [2,-5] or [[2,9],[2,-5]]) [0,1,2,2,3,4,4,4,3,2,2,3,0] [1,-1,1,1] [0,1,2,2,4,4,6,6,6,6,6,4,2,1,2,2,0] [] スペック 関数または完全なプログラムを作成できます。 配列には非負の整数のみが含まれます。 任意の標準フォームを介して入力と出力を行うことができますが、使用するフォームを回答で指定してください。 これはcode-golfであり、最小バイト数が勝ちます。 いつものように、デフォルトの抜け穴がここに適用されます。

14
タワーホッピングをします
仕事 負でない整数aの配列を指定すると、位置0から開始して配列の「外側」にジャンプするために必要な右方向ジャンプの最小数を決定します。そうしない場合はゼロ/ nullを返します。 インデックスからのジャンプiは、配列インデックスの最大増加分であると定義されていますa[i]。 外部へのジャンプは、ジャンプの結果のインデックスiが配列の範囲外であるジャンプです。そのため、1ベースのインデックス付けi>length(a)では、0ベースのインデックス付けでは、i>=length(a)。 例1 考慮してくださいArray = [4,0,2,0,2,0]: Array[0] = 4 -> You can jump 4 field Array[1] = 0 -> You can jump 0 field Array[2] = 2 -> You can jump 2 field Array[3] = 0 -> You can jump 0 field Array[4] = 2 -> You …

8
共役順列
サイズnの順列は、最初のn個の正の整数の並べ替えです。(各整数が一度だけ表示されることを意味します)。順列は、サイズnのアイテムのリストの順序を変更する関数のように扱うことができます。例えば (4 1 2 3) ["a", "b", "c", "d"] = ["d", "a", "b", "c"] したがって、順列は関数のように構成できます。 (4 1 2 3)(2 1 3 4) = (4 2 1 3) これは多くの興味深い特性をもたらします。今日私たちは共役に焦点を合わせています。置換yとx(両方ともサイズn)は、置換gとg -1(サイズnも)がある場合に限り共役です x = gyg-1 そしてGGは-1恒等置換(最初に等しいn個の適切な順序で番号)。 あなたのタスクは、標準入力メソッドを介して同じサイズの2つの順列を取得し、それらが共役かどうかを判断することです。2つの一貫した値の1つを出力する必要があります。1つは共役で、もう1つは共役ではありません。 これはコードゴルフであるため、回答はバイト単位でスコアリングされ、バイト数は少ない方が良いでしょう。 共役順列については多くの定理があり、自由に使用できます。幸運と幸せなゴルフです。 入力は、上記のような順列を表す値の順序付けされたコンテナ(1-nまたは0-n)として、または順序付けされたコンテナを使用して順列を実行する関数として受け取ることができます。関数を使用することを選択した場合、事前定義された名前ではなく、引数として使用する必要があります。 テストケース (1) (1) -> True (1 2) (2 1) -> False (2 1) …

23
文字列から重複を削除する
この控えめなStackOverflow質問に触発されました。 アイデアはシンプルです。文字列と文字列の配列を指定すると、最初の文字列以外の入力文字列から、配列内の単語のインスタンスをすべて削除します(大文字と小文字は無視します)。単語は、単語の一部ではなく、入力文字列内の単語全体と一致する必要があります。 たとえば、"A cat called matt sat on a mat and wore a hat A cat called matt sat on a mat and wore a hat", ["cat", "mat"]出力する必要があります"A cat called matt sat on a mat and wore a hat A called matt sat on a and wore a hat" 入力 …
17 code-golf  string 

23
バイナリ部分文字列
BMO2 2009の 4番目の問題に触発されました。 入力またはパラメータとして正の整数nを指定すると、nのバイナリ展開でブロックとしてバイナリ表現が発生する正の整数の数を返します。 たとえば、13-> 6は、バイナリの13が1101であり、サブストリングがあるため1101, 110, 101, 11, 10, 1です。ゼロで始まる2進数はカウントせず、ゼロ自体もカウントしません。 テストケース 13 -> 6 2008 -> 39 63 -> 6 65 -> 7 850 -> 24 459 -> 23 716 -> 22 425 -> 20 327 -> 16 あなたにはかかりますnは、次のいずれかのよう: 整数 バイナリ表現の真偽値のリスト バイナリ表現の文字列 10を基数とする文字列(なぜこれを行うのかはわかりませんが) コードをできるだけ短くしてください。
17 code-golf  binary 

9
Cleanでのゴルフのヒント
クリーンでゴルフをするための一般的なヒントは何ですか?一般的なゴルフの問題をコード化するのに適用でき、少なくともCleanに特定のアイデアのみを投稿してください。 クリーンについて聞いたことがない場合は、こちらで詳細を確認できます。 または、チャットルームに参加できます。
17 code-golf  tips 

1
Moufangループのカウント
ループは非常に単純な代数構造です。タプル(G、+)で、Gは集合で、+は二項演算子G×G→Gです。つまり、+はGから2つの要素を取得し、新しい要素を返します。また、オペレーターは2つの特性を満たす必要があります キャンセル:すべての場合、AとBにGのユニークな存在のxとyとにGよう a + x = b y + a = b アイデンティティ:ある電子でGのすべてのためのように、AでGは、 e + a = a a + e = a グループの概念に精通している場合、ループは連想プロパティを持たない単なるグループであることに気付くかもしれません。 ループは非常に単純なので、人々はより多くのルールを追加して、より興味深い新しい構造を作成することを好みます。そのような構造はMoufangループもことFORALL満たす次の4人のアイデンティティをループであり、X、Y及びZでG z + (x + (z + y)) = ((z + x) + z) + y ((y + z) + x) + z = y + …

15
息子が手紙を見つけるのを手伝ってください
バックグラウンド 私の4歳の彼のラビから得たゲームに基づいています。 「目標」は、特定の順序で文字を「見つける」ことaecdbです。レターカードのスタックが与えられますdaceb。周期的ではありますが、指定された順序でのみスタックを検索できます。必要な手紙に出会ったら、それをスタックから取り出します。 目的 順序とスタック(相互の重複のない順列)を指定すると、ゲームのプレイ中に表示される一連の最上位スタック文字(すべて印刷可能なASCII)を見つけます。 ステップバイステップの例 aecdbスタックを指定して順序を見つける必要がありますdaceb。 スタックのトップd:探しているもの(a)ではないため、シーケンスに追加しd、スタックを取得するために回転します:acebd。 スタックのトップa:はい!したがって、シーケンスに追加daし、スタックから削除します:cebd。 スタックのトップc:探しているもの(e)ではないため、シーケンスに追加しdac、スタックを取得するために回転します:ebdc。 スタックのトップe:はい!したがって、シーケンスに追加daceし、スタックから削除します:bdc。 スタックのトップb:探しているもの(c)ではないため、シーケンスに追加しdaceb、スタックを取得するために回転します:dcb。 スタックのトップd:探しているもの(c)ではないため、シーケンスに追加しdacebd、スタックを取得するために回転します:cbd。 スタックのトップc:はい!したがって、シーケンスに追加dacebdcし、スタックから削除します:bd。 スタックのトップb:探しているもの(d)ではないため、シーケンスに追加しdacebdcb、スタックを取得するために回転します:db。 スタックのトップd:はい!したがって、シーケンスに追加dacebdcbdし、スタックから削除します:b。 スタックのトップb:はい!したがって、シーケンスに追加dacebdcbdbし、スタックから削除します:。 これで完了です。結果はdacebdcbdbです。 リファレンス実装 def letters(target, stack): string = '' while stack: string += stack[0] if stack[0] == target[0]: stack.pop(0) target = target[1:] else: stack.append(stack.pop(0)) return string print letters('aecdb', list('daceb')) オンラインでお試しください! テストケース try、yrt→yrtyry 1234、4321→4321432434 ABCDEFGHIJKLMNOPQRSTUVWXYZ、RUAHYKCLQZXEMPBWGDIOTVJNSF→RUAHYKCLQZXEMPBWGDIOTVJNSFRUHYKCLQZXEMPWGDIOTVJNSFRUHYKLQZXEMPWGIOTVJNSFRUHYKLQZXMPWGIOTVJNSRUHYKLQZXMPWIOTVJNSRUYKLQZXMPWOTVNSRUYQZXPWOTVSRUYQZXPWTVSRUYQZXWTVSRUYZXWTVSUYZXWTVUYZXWVYZXWYZXYZ …

6
最初の定期的な数字を削除する
有理数が10進数で書かれているときはいつでも、結果は終了するか(最終的に)周期的であることを知っています。たとえば、41/42が10進数で記述されている場合、結果は次のようになります。 0.9 761904 761904 761904 761904 761904 761904 761904 ... 最初の数字のシーケンスと0.9それに続くシーケンスが761904繰り返し繰り返されます。(これの便利な表記法は0.9(761904)、括弧が繰り返し数字のブロックを囲む場所です。) この課題の目標は、正の有理数を取得し、繰り返しシーケンスの一部である最初の数字を削除して、結果の有理数を返すことです。たとえば、これを41/42にすると、次のようになります 0.9 61904 761904 761904 761904 761904 761904 761904 ... または0.9(619047)略して101/105です。 1/4 =のように、有理数の末尾に10進数の展開がある場合0.25、何も起こりません。あなたはどちらかと1/4の考えることができる0.250000000...かのように0.249999999...番号が変わらず、繰り返し部分の葉の最初の数字を削除するが、いずれの場合も。 詳細 入力は、分子と分母を表す正の整数のペアとして、または(選択する言語で許可され、必要な場合)何らかの種類の有理数オブジェクトとしての正の有理数です。 出力も有理数であり、どちらの形式でもあります。結果が整数の場合、有理数の代わりに整数を返します。 入力として数値のペアを使用する場合、それらは比較的素数であると想定できます。出力として数値のペアを生成する場合、それらを比較的素数にする必要があります。 繰り返しブロックを開始する最初の数字を見つけることに注意してください。たとえば、41/42と書くこともできます0.97(619047)が、これは2041/2100(10進数展開0.97(190476))を有効な答えにしません。 あなたは、あなたが得る入力で、第1の周期の数字であると仮定してもよいの後になって、小数点120/11= 10.909090909...(その最初の定期的な数字が考えられる:無効な入力0で10)。あなたはそのような入力であなたが好きなことをするかもしれません。 これがコードゴルフです。最短のソリューションが勝ちです。 テストケース 41/42 => 101/105 101/105 => 193/210 193/210 => 104/105 104/105 => 19/21 1/3 => 1/3 1/4 => …

7
電子配置
原子物理学および量子化学、電子構成は、分布された電子の原子における原子軌道。たとえば、ネオン原子の電子配置は1s 2 2s 2 2p 6です。(ウィキペディアから) チャレンジ あなたの挑戦は、元素の原子番号を表す数を取り、Aufbau原理によって定義されるその元素の電子配置を出力することです。 鉄(26)には電子配置があります。ただし、上付き文字は不要です。26の出力はの線に沿っているはずです。1s2 2s2 2p6 3s2 3p6 3d6 4s21s2 2s2 2p6 3s2 3p6 3d6 4s2 仕様 範囲外の入力を処理する必要はありません1 <= n <= 118。 あなたの出力は、テストケースのようになるはずですが、あなたは(脇から任意の数字以外の文字/文字を使用することができs、p、d、とf)異なる軌道を区切るために。 軌道名/値/削除者を含む文字列を返す/印刷する必要があります。単純に配列を返す/印刷することはできません。 Aufbau原則の例外を処理する必要はありません。例外がある場合は、「誤った」構成を印刷しても問題ありません。 例: Input -> Valid output -> Invalid output 16 -> 1s2 2s2 2p6 3s2 3p4 -> 1s22s22p63s23p4 16 -> 1s2, …

30
言語名に文字数を掛けて出力する[終了]
閉じた。この質問には詳細または明確さが必要です。現在、回答を受け付けていません。 この質問を改善したいですか?詳細を追加し、この投稿を編集して問題を明確にします。 昨年は閉店しました。 チャレンジ: あなたの仕事は、任意の言語を使用して、その言語の名前にその名前の文字数を掛けたものを出力することです。 言語の共通名または頭字語を使用します。 言語に複数のバージョンがある場合、バージョン番号を含める必要はありません。 大文字は重要です。 例: PHP -> PHPPHPPHP Java -> JavaJavaJavaJava C++ -> C++C++C++ Python 3 -> PythonPythonPythonPythonPythonPython JavaScript -> JavaScriptJavaScriptJavaScriptJavaScriptJavaScriptJavaScriptJavaScriptJavaScriptJavaScriptJavaScript

11
一般化されたFiveThirtyEightシーケンス
このFiveThirtyEightのなぞなぞから適応。 バックグラウンド 次の無限シーケンスを調べます。 3 3 3 2 3 3 3 2 3 3 3 2 3 3 2 3 3 3 2 ... シーケンスに1インデックスが付けられているとします。iシーケンスの番目の数はどのように多くの決定3の前にあるS i番目2と以前の次2秒。したがって、シーケンスはで始まるため、シーケンスを開始する3必要が3 3 3 2あり3、シーケンスの先頭に3 があるため、サブシーケンスは3 3 3 23回繰り返す必要があります。3 3 2シーケンスの4番目の数字はであるため、その後に到達します2。 FiveThirtyEightのなぞなぞは、3対2の比率の制限を求めます(ここでは損しません)が、indexの後に累積比率が何であるかを尋ねることもできますi。たとえば、の比率はでi=4あり3/1 = 3、でi=15ある11/4 = 2.75。 一般的になりましょう 数字を考えるnとk、私たちはで始まる類似の配列にすることができn、元の配列は、インデックスの数が記述と同じようにi多くの方法を決定するnのは、前に現れi番目kと以前の次k秒。 例: n=2, k=5 シーケンスを与える 2 2 5 2 2 …

10
HSLからRGB値
RGB(赤緑青)カラーモデルの主な目的は、テレビやコンピューターなどの電子システムでの画像の検知、表現、および表示です。 HSL(Hue Saturation Lightness)は、1970年代にコンピューターグラフィックスの研究者によって設計された代替のカラーモデルであり、人間の視覚が色を作り出す属性を知覚する方法により密接に整合します。 RGBとHSLの wiki記事は次のとおりです。グラフィックプログラムでは、HSLで計算を行い、後でほとんどの画面に適した形式(RGB)に変換するのが一般的です。 タスクは、HSLを入力として取り、RGBを出力する関数/プログラムを作成することです。 それらの間で一貫性がある限り、I / Oの好みの表現を選択できます。 例えば、それらは3つの要素を持つ配列/タプルまたは名前3つの特性を持つオブジェクトであることができるh、sとl、私は整数(失う精度)としてHSLを受信し、RGB整数を出力するように、他の巧妙な変化を受け入れるだろう。 入力は範囲と形式が安全であると見なすことができ、どちらも決定できます。範囲0-1 0-1 0-1または0-360 0-100 0-100hsl 0-1 0-1 0-1または0-255 0-255 0-255rgbのいずれかを強くお勧めします。 上記の両方を指定するために各回答が必要であり、他のバリエーションよりもキャラクターが少ない場合でも、特に誇りに思っている場合は、さまざまなバリエーションを回答に入れてください。一番小さいものを上に置きます。 0-360 0-100 0-100→の擬似テストケース0-255 0-255 0-255 h s l → r g b 0 0 0 → 0 0 0 90 56 17 → 43 68 19 202 19 …

10
制約付きで可能なすべての整数のグリッドを列挙する
問題 非負整数の3 x 3の正方形グリッドを考えてください。各行iの整数の合計はに設定されますr_i。同様に、各列jの整数の合計はに設定されますc_j。 タスクは、行と列の合計の制約が与えられた場合の、グリッドへの可能なすべての整数の割り当てを列挙するコードを記述することです。コードは一度に1つの割り当てを出力する必要があります。 入力 コードは、行制約を指定する3つの非負整数と、列制約を指定する3つの非負整数を取る必要があります。これらは有効であると仮定できます。つまり、合計または行の制約が列の制約の合計に等しいと仮定できます。コードはこれを便利な方法で実行できます。 出力 コードは、計算したさまざまな2Dグリッドを、人間が読める形式で選択して出力する必要があります。もちろん、きれいなほうがいい。出力に重複したグリッドを含めることはできません。 例 すべての行と列の制約が正確で1ある場合、6異なる可能性のみがあります。最初の行について1は、最初の3つの列のいずれかに入力できます。2番目の行については2選択肢があり、最後の行は前の2つによって完全に決定されます。グリッド内の他のすべてはに設定する必要があります0。 入力が2 1 0行および列1 1 1用であるとします。APLの美しい出力形式を使用すると、可能な整数グリッドは次のとおりです。 ┌─────┬─────┬─────┐ │0 1 1│1 0 1│1 1 0│ │1 0 0│0 1 0│0 0 1│ │0 0 0│0 0 0│0 0 0│ └─────┴─────┴─────┘ ここで、入力1 2 3は行と列3 2 1に対するものであるとします。可能な整数グリッドは次のとおりです。 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ │0 0 1│0 0 1│0 …

29
ピボットの周りの文字列の2つのセクションを反転します
バックグラウンド 私は現在、AP Comp Sci A:Javaクラスに参加しており、コードゴルフの友達を何人か始めたいと思っています。コースからの挑戦がありますが、この挑戦​​をコミュニティが何バイトできるかを知りたいと思います。 チャレンジの詳細: メイン文字列とピボット文字列の2つの入力文字列が与えられた場合、次の操作を行います。 ピボットストリングがメインストリングのサブストリングとして1回だけである場合、ピボットストリングの前に来るメインストリングの部分は、交換されるサブストリング内の順序を維持しながら、後に来る部分と交換されます。 例えば: ピボット文字列が空であるか、メイン文字列内にピボット文字列が見つからない場合、プログラムは動作を定義する必要はありません。 ピボット文字列のインスタンスが複数ある場合、分割はピボットの最初のインスタンスでのみ発生します。 例:メイン文字列OneTwoThreeTwoOneとピボット文字列を指定するTwoと、出力はになりますThreeTwoOneTwoOne。 メインストリング1Two2Two3Two4とピボットTwoを考えて、出力はあるべきです2Two3Two4Two1。 メイン文字列OneTwoThreeとピボット文字列「Two」を指定すると、出力はになりますThreeTwoOne。メイン文字列the rabbit is faster than the turtleとピボット文字列が与えられた is faster than (末尾の前後のスペースに注意してください)、出力はである必要がありますthe turtle is faster than the rabbit。 メインストリング1-2-3-4-5-6とピボット-を考えて、出力はあるべきです2-3-4-5-6-1。 あとがき: これはコードゴルフに関する私の最初の質問です。そのため、提案や建設的な批判がある場合は、お気軽にお申し付けください。 さらに、このプロジェクトの私のコード(コースはこれに焦点を当てているためJavaで記述されています)は以下にあります。ヒントがあれば、ぜひご覧ください。現在は363バイトですが、もっと優れた、より小さなソリューションを思いつくことができると思います。 import java.util.Scanner;interface Main{static<T>void D(T f){System.out.println(f);}static void main(String[]A){Scanner s=new Scanner(System.in);D("Enter the first String:");String a=s.nextLine();D("Enter the pivot String:");String …
17 code-golf  string 

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