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

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

25
はしご上のロボット
バックグラウンド 壁にはしごがあり、それを登ることができる遠隔操作ロボットがあります。ロボットに3つの異なるコマンドを送信できます。 UP:ロボットは1ステップ上に移動します。それが最高のステップにあった場合、それはつまずき、倒れ、爆発します。 DOWN:ロボットは下に1歩進みます。それが最下段にあった場合、何も起こりません。 RESET:ロボットは最下段に戻ります。 一連のコマンドを送信することもでき、ロボットはそれらを1つずつ実行します。あなたの仕事は、その動きを予測することです。 入力 あなたの入力は正の整数であるN梯子のステップの数を表すと、非空の文字列Cの上にUDR私がロボットに送信したコマンドを表します、。あなたはそれを仮定することができN < 1000ます。ロボットは、はしごの最下段で初期化されます。 出力 ある時点で、ロボットが最高のステップを乗り越えて爆発することが保証されています。出力は、これが発生する前に実行するコマンドの数です。 例 入力N = 4を考慮し、C = "UDDUURUUUUUUUDDDD" で示されるロボットは、@次のように4ステップの梯子に沿って移動します。 |-| |-| |-| |-| |-| |-| |-| |-| |-| |@| |-|| |-| |-| |-| |-| |-| |@| |-| |-| |@| |-| |-|| |-| |@| |-| |-| |@| |-| |-| |@| |-| …

28
バイナリを交互のサブシーケンスに分解します
これは、触発された問題13 -非繰り返しバイナリのHP CodeWarsの最近の競争を。 ランダムな10進数を考えてみましょう。 727429805944311 そしてそのバイナリ表現を見てください: 10100101011001011111110011001011101010110111110111 次に、そのバイナリ表現を、数字0と1交互のサブシーケンスに分割します。 1010 010101 10 0101 1 1 1 1 1 10 01 10 0101 1 1010101 101 1 1 1 101 1 1 そして、各サブシーケンスを10進数に変換します。 10 21 2 5 1 1 1 1 1 2 1 2 5 1 85 5 1 1 1 …

30
サブシーケンス置換
ほとんどの言語には、指定された部分文字列のすべての出現を文字列で検索し、それらを別の部分文字列に置き換える組み込み機能が付属しています。この概念を(必ずしも連続的ではない)サブシーケンスに一般化する言語は知りません。それがこの挑戦におけるあなたの仕事です。 入力は3つの文字列A、BおよびCで構成されます。ここでBおよびCは同じ長さであることが保証されています。のBサブシーケンスとして表示される場合は、Aに置き換える必要がありCます。以下に簡単な例を示します。 A: abcdefghijklmnopqrstuvwxyz B: ghost C: 12345 次のように処理されます。 abcdefghijklmnopqrstuvwxyz || | || abcdef12ijklmn3pqr45uvwxyz Bサブシーケンスとして検索する方法がいくつかある場合は、左端のものを貪欲に置き換える必要があります。 A: abcdeedcba B: ada C: BOB Result: BbcOeedcbB and NOT: BbcdeeOcbB B複数のばらばらの場所で見つかった場合も同様です。 A: abcdeedcbaabcde B: ed C: 12 Result: abcd1e2cbaabcde and NOT: abcd112cbaabc2e (or similar) Bがに表示されない場合はA、Aそのまま出力する必要があります。 ルール 上述したように、3つの文字列を取りA、BそしてC入力などとの一番左の発生を置き換えるBにサブシーケンスとしてA持つCいかなるがある場合は、。 プログラムまたは関数を作成し、STDIN(または最も近い代替)、コマンドライン引数または関数引数を介して入力を取得し、STDOUT(または最も近い代替)、関数の戻り値または関数(out)パラメーターを介して結果を出力できます。 3つの文字列は、回答で指定する必要がある一貫した順序で取得できます。あなたはそれを仮定し、同じ長さBをC持つことができます。すべての文字列には英数字のみが含まれます。 標準のコードゴルフ規則が適用されます。 テストケース 各テストケースは4行AでB、:C、、その後に結果が続きます。 abcdefghijklmnopqrstuvwxyz ghost …

24
あなたが見るものを言う
「Look and say」または「Say what you see」シーケンスは、それぞれが最後を説明する一連の数字です。 1 11 (one one) 21 (two ones) 1211 (one two, one one) 111221 (one one, one two, two ones) 312211 (three ones, two twos, one one) など... https://oeis.org/A005150 とにかく、これは2つの引数、初期数と反復回数を取るプログラムを作成するための通常のコードゴルフチャレンジ(最小バイト数が勝つ)です。たとえば、「1」と「2」を接続すると、結果は「21」になります。「2」と「4」を接続すると、結果は「132112」になります。楽しむ!

24
RATSシーケンス
あなたの仕事は、RATSシーケンスのn番目の項を生成することです。ここで、nは入力です。RATSシーケンスは、Reverse Add Then Sortシーケンスとも呼ばれます。このシーケンスは、http://oeis.org/A004000にもあります。 テストケース: 0 > 1 1 > 2 2 > 4 3 > 8 4 > 16 5 > 77 6 > 145 7 > 668 たとえば、16 + 61 = 77であるため、5の出力は77です。この後、77がソートされます。 最短の提出が勝ちです。これは私の最初の挑戦ですので、これが重複や何かではないことを願っています。

17
モッツキン数
n番目のMotzkin番号は、(0、0)から(n、0)へのパスの数です。各ステップは(1、-1)、(1、0)、または(1、1)の形式で、パスはy = 0未満になることはありません。 上記のリンクからのn = 1、2、3、4のこれらのパスの例を次に示します。 望ましいシーケンスはOEIS A001006です。OEISには、シーケンスの他のいくつかの特性があります。 入力として正の整数nが与えられます。n番目のMotzkin番号を出力する必要があります。 Motzkinの番号は1〜10です。 1, 2, 4, 9, 21, 51, 127, 323, 835, 2188 すべての標準入出力メソッドが許可されています。標準の抜け穴が適用されます。 これはコードゴルフです。最少バイトが勝ちます。

3
助けて!電卓が壊れた!(整数式を電卓のキーストロークに変換します)
前書き 助けて!誤ってTI-84計算機を窓から落とし(方法は聞かないでください)、壊れました。明日は数学のテストがありますが、見つけることができるのはこれらのボタンを備えた計算機だけです。 7 8 9 + 4 5 6 - 1 2 3 * 0 = / 私の数学のテストは、式の評価に関するレビューテストです。などの式を取得1+(5*4)/7し、予備の計算機でそれを解決するために必要なキーストロークに変換するプログラムが必要です。(そして、あなたが疑問に思っている場合、これは実際に私に起こりました)。 チャレンジ 含有する非空の入力文字列が与えられた唯一の文字0-9、(、)、+、-、*、および/、出力スペースで区切られた文字列内のキーストローク(例えば。1 + 3 / 3 =)。出力の最後には常に等号が必要です。標準の抜け穴は許可されていません。 例: 入力:1+(5*4)/7、出力:5 * 4 / 7 + 1 = 入力:6*(2/3)、出力:2 / 3 * 6 = 入力:(7-3)/2、出力:7 - 3 / 2 = この課題を簡単にするには: 入力には、計算機をクリアする必要のない一連のキーストロークが入力されていると想定1-(7*3)できます(計算する必要があるため無効です。7 * 3実行するには計算機をクリアします1 …

9
連動ブラケット
()[]{}<>4つのそれぞれのブラケットタイプが一致するように配置された各文字の1つを含む8バイト文字列を取り込むプログラムまたは関数を記述します。たとえば]<([){}>、角括弧が一致しないため、入力は無効です(ただし、他のすべては一致します)。 から整数を出力0する6か、4つのブラケットタイプの6つの可能な組み合わせのどれだけがインターロックされるかを示します。ブラケットタイプペアは、1つのタイプのブラケットがもう1つのタイプのブラケットの間にちょうど1つある場合、インターロックされていると見なされます。そう([)]と[(])連動しているが()[]、[]()、([])、と[()]ではありません。 バイト単位の最短コードが優先されます。 入出力の例 ()[]{}<> : 0 ([{<>}]) : 0 <>{[]}() : 0 {<>([])} : 0 <(>)[{}] : 1 <[({)}]> : 1 [{<}]>() : 2 {<>([}]) : 2 <{(>})[] : 3 [(]<){>} : 3 <([>{)}] : 4 (<{[>})] : 4 (<[{)>}] : 5 <{[(>})] : 5 [{<(]}>) : 6 (<{[)>}] …

1
非環状炭素鎖の命名
(私は化学者ではありません!私はいくつかの点で間違っているかもしれません、私は高校で学んだことを書いています) 炭素原子には特別な属性があります:他の4つの原子(これは特別ではありません)に結合でき、非常にユニークな長い鎖であっても安定しています。これらはさまざまな方法で連鎖および結合できるため、それらに名前を付けるには何らかの命名規則が必要です。 これは、作成可能な最小の分子です。 CH4 メタンと呼ばれます。1つの炭素と4つの水素原子のみで構成されています。次は: CH3 - CH3 これはエタンと呼ばれます。2つの炭素と6つの水素原子で構成されています。 次の2つは: CH3 - CH2 - CH3 CH3 - CH2 - CH2 - CH3 それらはプロパンとブタンです。問題は2つの異なる方法で構築できるため、4つの炭素原子を持つ鎖から始まります。1つは上に示し、もう1つは次のとおりです。 CH3 - CH - CH3 | CH3 これは明らかに他のものと同じではありません。原子の数と結合は異なります。もちろん、結合を折り畳んで分子を回転させるだけでは、別のものになりません!したがって、この: CH3 - CH2 - CH2 - CH3 この: CH3 - CH2 | CH3 - CH2 同じです(グラフ理論に興味があるなら、2つの分子の間に同型があると言うかもしれません;それらは同じです)。水素原子はこの挑戦に不可欠ではないので、今後は書きません。 有機化学が嫌いで、名前を付ける炭素原子がたくさんあるので、これを行うプログラムを作成することにします。ハードドライブの空き容量があまりないため、プログラムはできるだけ小さくする必要があります。 チャレンジ 複数行のテキストを入力(カーボンチェーン)として取り込み、カーボンチェーンの名前を出力するプログラムを作成します。入力には、スペース、大文字の「c」文字、および「|」のみが含まれます。および「-」はバインディングを表します。入力チェーンにサイクルが含まれることはありません!例: …

30
九九で一意の数字を並べ替える
今日の非常に簡単な課題: 正の整数Nを取り、行と列の被乗数の両方が1からNまでの範囲の乗法テーブルに現れる一意の数字のソートされたリストを出力または返すプログラムまたは関数を記述します。 リストは、昇順(最小から最大)または降順(最大から最小)でソートでき、適切な形式で出力できます。 バイト単位の最短コードが勝ちです! 例 N = 4の場合、乗算表は次のようになります。 1 2 3 4 ----------- 1| 1 2 3 4 | 2| 2 4 6 8 | 3| 3 6 9 12 | 4| 4 8 12 16 テーブル内の一意の番号は1, 2, 3, 4, 6, 8, 9, 12, 16です。これらはすでにソートされているため、 1, 2, 3, 4, 6, …

7
すべてのコードとアダプターを一緒につなげることはできますか?
ある日、未使用のコンピューターコードとアダプター(USBからUSB mini、VGAからDVIなど)の大きな箱を掘っていると仮定します。絡み合ったコードがいたるところに散らかっているので、すべてのコードを1本の長いストランドにまとめて、それを巻き上げるだけで物事を単純化できるかどうか疑問に思います。 問題は、すべてのコードとアダプターをこのように1本の長いラインで接続することは可能ですか?明らかに、常に可能なわけではありません。たとえば、プラグがまったく異なる2本のコードしかない場合、それらを接続できませんでした。しかし、両方に接続できる3つ目のコードがあれば、すべてのコードをつなぎ合わせることができます。 全コードより線の端にあるプラグの種類は気にしません。ループを形成するために互いに接続する必要はありません。あなたは、すべてのコードのストランドを作ることが可能かどうか、可能であれば、それをどのように行うかを知りたいだけです。 チャレンジ すべての行が所有するコードの1つを表す複数行の文字列を取り込むプログラムまたは関数を作成します。コードは、1つ以上のダッシュ(-)で構成され、両端にプラグが付いています。プラグは常に8文字の1つです()[]{}<>。 これらはいくつかの有効なコードです: >-> (--[ }-{ <-----] (---) しかし、これらはそうではありません: --> (-- )-- [{ --- コードを接続する場合、まったく同じブラケットタイプのプラグのみを接続できます。 したがって、これらは有効なコード接続です。 ...---((---... ...---))---... ...---]]---... ...---{{---... ...---<<---... そして、これらは無効です。 ...---()---... ...---)(---... ...---{]---... ...---{[---... ...---><---... ...--->)---... 入力内のすべてのコードを並べ替えて1つの長いストランドにまとめて接続できる場合は、そのストランドを1行のstdoutに出力します(オプションの末尾の改行を使用)。複数のソリューションがある場合、それらのいずれかを選択して出力できます。単一のストランドを作成できない場合は、何も出力しません(または、オプションの末尾の改行を含む空の文字列を出力します)。 たとえば、入力が [--> {---] >----{ 出力は [-->>----{{---] すべてのコードが一緒に張られています。 ただし、入力が [--> {---] コードは接続できないため、出力はありません。 接続に必要なだけコードをひっくり返すことができることに注意してください。例えば[-->とは<--]、彼らが接続の同じ種類を作ることができるので、効果的に同じコードです。一部の出力は、入力コードの反転に依存する場合があります。 例えば (-[ }--] 出力できる (-[[--{ …
30 code-golf  string 

1
マジック:ザギャザリングコンバットゴルフ
マジック:ザギャザリングはトレーディングカードゲームで、特にプレイヤーはクリーチャーを表すカードをプレイします。クリーチャーは他のプレイヤーを攻撃したり、ブロックして他のプレイヤーの攻撃から防御したりできます。 このコードゴルフチャレンジでは、戦闘でブロックする方法を決定するマジックプレーヤーの代わりにプログラムを作成します。 各クリーチャーには、パワーとタフネスという2つの関連する属性があります。クリーチャーのパワーは、戦闘で与えることができるダメージの量であり、そのタフネスはそれを破壊するのに必要なダメージの量です。パワーは常に少なくとも0で、タフネスは常に少なくとも1です。 マジックでの戦闘中、自分の順番が変わるプレイヤーは、自分のクリーチャーの一部が対戦相手を攻撃していると宣言します。次に、防御プレイヤーとして知られる他のプレイヤーは、クリーチャーをブロッカーとして割り当てることができます。クリーチャーは戦闘ごとに1つのクリーチャーのみをブロックできますが、複数のクリーチャーはすべて同じクリーチャーをブロックできます。 ブロッカーが宣言された後、攻撃プレイヤーは、ブロックされた攻撃クリーチャーごとに、そのクリーチャーがそれをブロックしているクリーチャーに与えるダメージ(そのパワーに等しい)をどのように分配するかを決定します。 その後、ダメージが与えられます。各クリーチャーは、その力に等しいダメージを与えます。ブロックされた攻撃クリーチャーは、上記のようにダメージを与えます。ブロックされていない攻撃クリーチャーは、防御プレイヤーにダメージを与えます。ブロックしているクリーチャーは、ブロックしたクリーチャーにダメージを与えます。ブロックしなかった防御プレイヤーに属するクリーチャーはダメージを与えません。(ブロックするのにクリーチャーは必要ありません。) 最後に、そのタフネス以上のダメージを与えられたクリーチャーは破壊され、戦場から取り除かれます。クリーチャーのタフネス未満のダメージは効果がありません。 このプロセスの例を次に示します。 パワーPとタフネスTを持つクリーチャーは、 P/T Attacking: 2/2, 3/3 Defending player's creatures: 1/4, 1/1, 0/1 Defending player declares blockers: 1/4 and 1/1 block 2/2, 0/1 does not block. Attacking player distributes damage: 2/2 deals 1 damage to 1/4 and 1 damage to 1/1 Damage is dealt: …

17
SE投稿で上位5つのコメントスコアを表示する
Stack Exchangeスクリプトは、サイトのメインページに最初に表示される質問または回答に関する5つのコメントを、それらへの賛成票の数によって決定します。投票数が最も多い5つのコメントが表示されます。あなたの仕事は、この動作を再現することです。 STDIN、コマンドライン引数、または関数の引数を使用して入力を取得する完全なプログラムまたは関数を作成し、上位5つのコメントスコアを出力または返します。入力は、ある投稿のコメントに対する賛成票の数を表す整数の配列になります。たとえば、の入力 0, 2, 5, 4, 0, 1, 0 は、最初のコメントには投票がなく、2番目のコメントには2票、3番目には5票、4番目には4票、というようになります。 入力に含まれるコメントスコアが5つ以下の場合、出力には指定されたもののみが含まれます。2つ以上のコメントスコアが同じ場合、最初のスコアが表示されます。入力配列には、少なくとも1つのコメントスコアが含まれると想定できます。 出力内の番号は簡単に区別できるはずです(したがって、ケース1の02541は無効です)。それ以外の場合、出力形式に制限はありません。数字はスペースまたは改行で区切られているか、リスト形式などになっている場合があります。 テストケース: [0, 2, 5, 4, 0, 1, 0] -> [0, 2, 5, 4, 1] [2, 1, 1, 5, 3, 6] -> [2, 1, 5, 3, 6] [0, 4, 5] -> [0, 4, 5] [1, 1, 5, 1, …

1
回転する風車を描く
あなたが吹くそれらの楽しい風車を覚えており、それらはくるくると回転しますか?1つコーディングしましょう! 風車には、\ | / _中心と腕を描くキャラクターのセットがあります。1つの可能な風車は次のようになります。 | | |_ ___ ___|_| | | | しかし、回転しない風車とは何ですか?楽しくない!シンボルを再配置することでスピンさせることができます: / \ / \ / \/\ \/\ / \ / \ / 課題は、3つの整数を取り、以下に指定するように風車を出力するプログラムを作成することです。これらの1つ目はアームの数、2つ目は風車のアームの長さ、3つ目は時計回りに1/8回転する回数です。 次のことを想定できます。 アームの数は常に0、1、2、4、または8です。 すべてのアームは互いに等間隔に配置されます。 風車の初期位置の中心は次のようになります。 _ |_| 腕の数が1の場合、腕が指す方向を決定できます。 腕の数が2の場合、腕を垂直または水平に向けることができます。 STDINまたはコマンドライン引数を介して入力を受け取る完全なプログラム、または関数引数を介して入力を受け取る関数を作成できます。プログラムは、風車の回転を示す一連の出力を表示する必要があります。各出力は、少なくとも1つの空行で区切られています。風車の中心は、1スペース以上移動しないでください。必要なだけ先頭および末尾のスペースを出力できます。 ここではいくつかの例を示します。 0 2 1 _ |_| /\ \/ 1 3 2 | | |_ …

7
どのフレンドのキャラクターが本当に親友でしたか?
アメリカのシットコムフレンズの6人の主なキャストメンバーは全員、シリーズの実行中(少なくともシーズン2以降)に同じ給料が支払われることに同意しました。しかし、だからといって、全員が同じ時間の放送時間を持っているわけでも、画面上ですべて同じ時間対話したというわけでもありません。 この課題では、どのフレンドの友達が本当に最高かを判断するのに役立つプログラムを作成します。 セットアップ 友人のエピソードやシーンを見て、各カメラショット中に誰がどのくらいの時間画面にいるかを正確に書き留めてください。 各キャラクターの名前を短縮します: C以下のためであるチャンドラー Jジョーイ用です M以下のためであるモニカ P以下のためであるフィービー Rレイチェルのためです Sロスのためです 次に、カメラショットごとに(またはキャラクターがショットを入力/終了するたびに)、誰が画面にいたかをリストします。例えば: 504 CRS 200 J 345 MP 980 2000 CJMPRS これは言っている: 504msの間、チャンドラー、レイチェル、ロスがスクリーンに映りました。 その後、200msの間、ジョーイはそうでした。 それから345msの間、モニカとフィービーはそうでした。 その後、980msの間、6人の主人公のいずれも画面に表示されませんでした。 その後、2秒間、すべてがそうでした。 (これは実際のクリップからではありません、私はそれを作りました。) 以下は同等であることに注意してください。 504 CRS 1 J 199 J 345 MP 980 2000 CJMPRS どのキャラクターの組み合わせが最もスクリーンタイムが長かったかを分析するために、6キャラクターの64個の可能なサブセットすべてを見て、それらが持っていたスクリーンタイムを合計しました。カメラショット中にサブセット内の全員が画面に表示される場合、サブセット内の文字よりも多くの文字がある場合でも、そのカメラショットの時間がそのサブセットの合計画面時間に追加されます。 空のサブセットには例外があります-6つのメインキャラクターが含まれていないシーンのみがカウントされます。 したがって、上記の例の分析は次のようになります。 980 2504 C 2200 J 2345 M …

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