タグ付けされた質問 「stack」

スタックベースのプログラミング言語のインタープリターや、特にコールスタックに関する課題など、スタックのようなデータ構造に関連する課題(詳細はタグwikiを参照)。

30
スタックオーバーフローを生成する最も奇妙な方法[終了]
プログラマーとして、明らかな再帰によるスタックオーバーフローのエラーを確実に知っています。しかし、間違いなく、お気に入りの言語にそのエラーを吐き出す奇妙で珍しい方法がたくさんあります。 目的: エラー出力にはっきりと見えるスタックオーバーフローを引き起こす必要があります。 明らかな再帰を使用することはできません。 無効なプログラムの例: // Invalid, direct obvious recursion. methodA(){ methodA(); } // Invalid, indirect, but obvious recursion. methodA(){ methodB(); } methodB(){ methodA(); } これは人気コンテストとして最も創造的な方法が最適です。つまり、次のような明白な答えを退屈させないでください。 throw new StackOverflowError(); // Valid, but very boring and downvote-deserving. 今は回答を受け入れましたが、さらに回答を追加しても大丈夫です:)

30
スタックの実装
まだこれがないとは信じられません。これはプログラミングで最も重要なデータ構造の1つですが、コードゴルフで実装するのに十分なほどシンプルです。 チャレンジ あなたの仕事は、数字をプッシュしたりポップしたりできるスタックを実装することです。実装をテストし、I / Oをシンプルに保つために、次のセットアップを使用します。 入力は、負でない整数のリストになります 正の整数はすべてを示し、はすべて示し -最上部の要素を破棄します。push( n ) 0 pop()nnnpush( n)push(n)\texttt{push(}n\texttt{)}000ポップ()pop()\texttt{pop()} 出力は結果のスタックになります 例 たとえば、が与えられた場合:[ 12 、3 、0 、101 、11 、1 、0 、0 、14 、0 、28 ][12,3,0,101,11,1,0,0,14,0,28][12,3,0,101,11,1,0,0,14,0,28] 12301011110014028[ 12 ][ 3 、12 ][ 12 ][ 101 、12 ][ 11 、101 、12 ][ 1 、11 、101 、12 ][ 11 、101 …

30
この数値は-2の整数乗ですか?
数値が2のべき乗かどうかを判断する賢い方法があります。これはもはや興味深い問題ではないので、与えられた整数が-2の整数のべき乗かどうかを判断しましょう。例えば: -2 => yes: (-2)¹ -1 => no 0 => no 1 => yes: (-2)⁰ 2 => no 3 => no 4 => yes: (-2)² ルール プログラムまたは関数を作成し、入力を受け取って出力を提供する標準的な方法を使用できます。 入力は単一の整数であり、整数が-2の整数乗である場合は出力が真実の値であり、それ以外の場合は偽の値である必要があります。他の出力(警告メッセージなど)は許可されません。 通常の整数オーバーフロールールが適用されます。ソリューションは、すべての整数がデフォルトで制限されていない仮想バージョン(または実際のバージョン)の任意の大きな整数で動作できる必要がありますが、実装によりプログラムが実際に失敗する場合それほど大きな整数をサポートしていなくても、ソリューションは無効になりません。 任意のプログラミング言語を使用できますが、これらの抜け穴はデフォルトでは禁止されています。 勝利条件 これは、コードとゴルフのコンテストです。(選択したエンコーディングで)バイト数が最も少ない答えが勝者です。

8
すべてのパンケーキをコーティング
プレートの上にパンケーキの山があり、その上にシロップの塊があり、厚すぎて側面を下ることができません。各パンケーキの両方の面が少なくともシロップに触れるまでは食べられませんが、今は一番上のパンケーキの片方の面だけが触れています。 シロップは1つのパンケーキにも染み込むことはありませんが、2つのパンケーキの間で直接接触することで無期限に転送できます。パンケーキの表面がシロップに触れると、シロップで永久にコーティングされたとみなされ、シロップでコーティングされた非シロップでコーティングされた面も同様にコーティングされます。シロップをプレートの上面との間で転送することもできます。 パンケーキの選別と同様に、1つ以上のパンケーキの下にヘラを挿入し、全体をひっくり返すことにより、すべてのパンケーキの表面をシロップでコーティングします。(残念ながら、このヘラはシロップ耐性があり、パンケーキの表面に触れることでシロップを配布するのに役立ちません。)悲しいことに、どのパンケーキの表面がシロップに触れたのかわからなくなりますが、あなたが作ったフリップを覚えています。 あなたの過去のフリップを考えると、あなたのパンケーキがすべてシロップでまだコーティングされているかどうかを判断できますか? チャレンジ パンケーキの数に正の整数Nを取り込み、これまでに行ったフリップの正の整数のリスト(すべて<= N)を取り込むプログラムを作成します。リスト内の各数字は、反転したパンケーキの数を表します。パンケーキがコーティングされている場合は真実の値を出力し、そうでない場合は偽の値を出力します。(真実/虚偽の定義) 入力はstdinまたはコマンドラインから取得し、出力はstdout(または最も近い代替)に送信する必要があります。入力に少し余分な書式設定が必要な場合は問題ありません。たとえば、リストの[1, 1, 2, 2]代わりに1 1 2 2。 例 N = 2と仮定すると、プレート上に2つのパンケーキのスタックがあり、上からシロップが始まります。 リストがの場合1 1 2 2、これは... 上部のパンケーキを反転-下部のパンケーキの上面をコーティング 再びトップを反転-トップパンケーキの元の底面をコーティング 両方を裏返す-プレートをコーティングする 両方を再び反転-ボトムパンケーキの元の底面をコーティング すべての4つの面がコーティングされているので、出力は次のようなものになるだろうTrueか1。 リストがの場合1 2 2 1、これは... 上部のパンケーキを反転-下部のパンケーキの上面をコーティング 両方を反転-何もコーティングしない 両方を再び反転-何もコーティングしない 再びトップを反転-トップパンケーキの元の底面をコーティング プレートに触れ顔がまだシロップフリーですので、出力は次のようなものになるだろうFalseか、と0。 ノート フリップリストは任意に大きく、空にすることができます。その場合、出力は偽になります。 プレートはシロップキャリアとして機能しますが、コーティングされているかどうかは関係ありません。(実際、フリップソリューションがプレートをコーティングするのは、接触するパンケーキフェースをコーティングする必要があるためですが、それは関係ありません。) プレートは反転できません。 これらのパンケーキは、側面がなく、向かい合った2つの面のみを持つ単位ディスクであると想定できます。 得点 これはコードゴルフです。バイト単位の最短ソリューションが勝ちです。
35 code-golf  stack 

8
ハノイの塔ソリューションを検証する
ハノイの塔が何であるかわからない場合は、簡単に説明します。3本のロッドと、サイズの異なるディスクがいくつかあります。最初は、すべてのディスクが最初のタワーに並べられています。最大のものは一番下にあり、一番小さいものは一番上にあります。目標は、すべてのディスクを3番目のロッドに持ち込むことです。簡単に聞こえますか?キャッチは次のとおりです。他のディスクより小さいディスクの上にディスクを配置することはできません。一度に1枚のディスクを手に持って別のロッドに移動することができ、ディスクをロッドに置くことはできますが、テーブルではなく、卑劣な野郎です。 asciiのサンプルソリューション: A B C | | | _|_ | | __|__ | | A B C | | | | | | __|__ _|_ | A B C | | | | | | | _|_ __|__ A B C | | | | | _|_ | | __|__ …
29 code-golf  stack 

5
Take It or Leave It:コンピューター向けゲームショー
コンテキスト: 世捨て人の億万長者がゲーム番組を作成し、世界で最も優秀で優秀なプログラマーを引き付けました。月曜日の真夜中のストロークで、彼は応募者のプールから1人をその週の出場者として選び、彼らにゲームを提供します。あなたは今週の幸運な出場者です! 今週のゲーム: ホストは、10,000個のデジタルエンベロープのスタックへのAPIアクセスを提供します。これらのエンベロープはランダムにソートされ、その中に1ドルから10,000ドルの間のドル値が含まれます(同じドル値を含むエンベロープは2つありません)。 次の3つのコマンドを自由に使用できます。 Read():スタックの一番上にある封筒のドルの数字を読み取ります。 Take():封筒にドル記号をゲームショーウォレットに追加し、封筒をスタックから取り出します。 Pass():スタックの一番上のエンベロープからポップします。 ルール: 封筒でPass()を使用すると、内部のお金は永久に失われます。 $ Xを含むエンベロープでTake()を使用する場合、それ以降、$ Xを含むエンベロープでTake()を使用することはできません。これらの封筒の1つでTake()を実行すると、ウォレットに0ドルが追加されます。 最大限の金額でゲームを終了するアルゴリズムを作成します。 Pythonでソリューションを作成している場合は、@ Maltysenの好意により、このコントローラーを使用してアルゴリズムをテストしてください。https://gist.github.com/Maltysen/5a4a33691cd603e9aeca コントローラを使用する場合、グローバルにアクセスできず、提供されている3つのAPIコマンドとローカルスコープ変数のみを使用できます。(@Beta Decay) 注:この場合の「最大」とは、N> 50が実行された後のウォレットの中央値を意味します。Nが無限大になると、特定のアルゴリズムの中央値が収束することが間違っていると証明されたいと思います。代わりに平均値を最大化することをお気軽に行ってください。しかし、平均値は中央値よりも小さなNによって放り出される可能性が高いと感じています。 編集:エンベロープの数を10kに変更して処理を容易にし、Take()をより明確にしました。 編集2:メタに関するこの投稿を考慮して、賞品の条件は削除されました。 現在のハイスコア: PhiNotPi-$ 805,479 レトコラディ-$ 803,960 デニス-$ 770,272(改訂版) アレックスL.-714,962ドル(改訂)

8
Brain-Flak整数のゴルフ
整数はBrain-Flakで表すのが面倒です。8つの演算子があります。 () Evaluates to 1, but does not push anything on any stack [] Evaluates to an indeterminate value for the purposes of this question {} Removes the top of the stack and evaluates to it <> Switches to or back from the alternate stack and evaluates to zero (foo) …

12
パンケーキの反転
でパンケーキソートのみ許可される操作をシーケンスの一部の接頭辞の要素を逆にすることです。または、パンケーキのスタックを考えます。スタックのどこかにヘラを挿入し、スパチュラの上にすべてのパンケーキをひっくり返します。 たとえば6 5 4 1 2 3、最初の6要素(シーケンス全体)を最初に反転し、中間結果を生成して3 2 1 4 5 6から最初の3要素を反転してに到達することにより、シーケンスをソートできます1 2 3 4 5 6。 操作が1つしかないため、ソートプロセス全体を整数のシーケンスで記述できます。各整数は、pr flipを含める要素/パンケーキの数です。上記の例では、ソート順序はになります6 3。 別の例:4 2 3 1でソートできます4 2 3 2。中間結果は次のとおりです。 4 2 3 1 flip 4: 1 3 2 4 flip 2: 3 1 2 4 flip 3: 2 1 3 4 flip …

3
星空のメタゴルフ
Starryは、難解なプログラミング言語です。コードは+*.,`'、各文字が表す実際のコマンドがその前のスペースの数によって決定される場所のみで構成されます。さまざまなコマンドが非常にさまざまなバイト数に対応できるため、ゴルフの固定出力の課題であっても難しいことです。特に、数値リテラルには単項表現があるため、小さい数字を操作して大きい数字を作成する必要があります。 したがって、この課題は、そのような星空プログラムをゴルフできるプログラムを書くことです。 Starryはどのように機能しますか? (いくつかの詳細はエソランで未指定のままになっているため、Rubyインタープリターの動作について説明します。) Starryはスタックベースの言語であり、任意の精度の整数値の単一スタック(最初は空です)を備えています。 意味のある文字は次のとおりです。 +*.,`' およびスペース。他のすべての文字は無視されます。これらのスペース以外の文字のいずれかが続くスペースの各シーケンスは、単一の命令を表します。命令のタイプは、スペース以外の文字とスペースの数によって異なります。 手順は次のとおりです。 Spaces Symbol Meaning 0 + Invalid opcode. 1 + Duplicate top of stack. 2 + Swap top 2 stack elements. 3 + Rotate top 3 stack elements. That is, send the top stack element two positions down. [... 1 2 3] …
25 metagolf  stack  starry 

19
Dotty文字列の評価
文字.とのみを含む奇数長の文字列を取り込むプログラムを作成し:ます。最初は空のstackを使用して、次のようにこの文字列から数値を生成します。 文字列内のすべての文字cについて(左から右へ)... 場合cがあり.、スタックが2つの未満の要素を有し、スタックに1を押してください。 場合cがあり.、スタックは、2つの以上の要素を有し、スタックから2つのトップの値をポップし、スタックにその和を押します。 場合cがあり:、スタックが2つの未満の要素を有し、スタックに2を押してください。 場合cがあり:、スタックは、2つの以上の要素を有し、スタックから2つのトップの値をポップし、スタックにそれらの製品を押し出します。 結果の数値は、スタックの一番上の値です。プログラムは、この番号を標準出力に出力する必要があります(オプションの末尾の改行を使用)。 (少しの分析では、文字列の長さが偶数でない限り、残っている数字は1つだけであることが示されています。そのため、これらは無視されます。実際、スタックには2つ以上の要素がありません。) たとえば、の番号::...:.:.は9です。 2 1 2 2 /______ stack just after the character below is handled 2 2 4 4 5 5 7 7 9 \ : : . . . : . : . <-- string, one character at a time 健全性チェックとして、長さ1、3、および5のすべての文字列の数値を次に示します。 . …

3
焦げたパンケーキの問題
この課題は、パンケーキの反転に関連しています。 パンケーキの並べ替えを聞いたことがあるかもしれません。パンケーキがプレート上で最小から最大に並べ替えられるまで、スパチュラをスタックに挿入し、スパチュラの上にあるすべてのパンケーキをひっくり返すことで、サイズによってパンケーキのスタックが並べ替えられます。焦げたパンケーキの問題は少し異なります。これで、すべてのパンケーキの片面が焼かれ、並べ替えが完了すると、各パンケーキの焼いた面がプレートに面する必要があります。 たとえば、次のスタックがある場合(左側のパンケーキのサイズ。右側が焼けた側を、右側が焼かれた側0を1意味します): 1 0 3 1 2 1 スタック全体を反転して取得し20 30 11、トップ2を31 21 11反転して取得し10 20 30、スタック全体を反転して取得します。焦げたパンケーキのソートされたスタックです。この一連の動き、フリップ3、フリップ2、フリップ3は、として表すことができます3 2 3。 チャレンジ パンケーキのサイズ(必ずしも一意ではない)の配列とその向きを指定して、有効な焼きパンケーキの並べ替え順序、つまり、焼き菓子の側面を下にしてパンケーキのスタックを最小から最大に並べ替える一連のフリップを出力します。 入力と出力は、区切り文字を含む任意の健全な形式である場合がありますが、使用する形式を指定し、入力形式のどちらの端がスタックの最上部(TOS)であるかを指定してください。 ゼロのパンケーキの反転は許可されています。 入出力でセパレーターを混在させることができます。 テストケース 以下のすべてのテストケースでは、入力はリストであり、出力はスペースで区切られた文字列であり、TOSは左側にあります。 [[1, 0], [3, 1], [2, 1]] "3 2 3" [[5, 1], [3, 0], [4, 1], [2, 1], [1, 0]] "5 3 4 1 3 2 …

5
StickStack番号
StickStackは、2つの命令のみを持つ非常にシンプルなスタックベースのプログラミング言語です。 | スタックの長さをスタックにプッシュします -スタックから上位2つの要素をポップし、それらの差を押し戻します(second topmost - topmost) 言語の詳細 スタックは、プログラムの開始時には空です。 すべての命令は、左から右に順番に実行されます。 スタックの数が2未満の場合、-命令は無効です。 実行の終了時に、スタックには正確に1つの数値が含まれている必要があります。 StickStackプログラムで任意の整数を生成できます。例えば: |||--||-- generates the number 2 through the following stack states: [] [0] [0, 1] [0, 1, 2] [0, -1] [1] [1, 1] [1, 1, 2] [1, -1] [2] StickStackコードを評価するには、このオンライン(CJam)エバリュエーターを使用できます。(コードの@Martinに感謝します。) タスク 入力または出力として整数を指定するか、指定された数値を出力するStickStackプログラムを表す文字列を返すプログラムまたは関数を作成する必要があります。 得点 主なスコアは、以下のテストケースのStickStackプログラムの合計の長さです。スコアが低いほど優れています。 すべてのテストケースでプログラムを実行し、スコアをカウントした場合にのみ、提出は有効です。 2次(タイブレーカー)スコアは、生成するプログラムまたは関数の長さです。 入力テストケース (各番号は異なるテストケースです。) …

6
ハノイの塔
ハノイの塔スタイルの整数のリストをソートする関数/サブルーチンを記述します。 整数のスタックが与えられます。これがメインスタックです。 また、さらに2つのヘルパースタックが提供されます。ただし、これらのヘルパースタックには固有のプロパティがあります。すべての要素は、その下の要素よりも小さいか、同じサイズでなければなりません。メインスタックにはこのような制限はありません。 メインスタックを所定の位置に並べ替え、最大の整数をその下に配置する必要があります。関数/サブルーチンは、スタックのソートで行われた移動の数(または同等の)を返します。 注:メインスタックを所定の場所に並べ替える必要があります。別のスタックに並べ替えて、その答えを呼び出す必要はありません。ただし、何らかの理由でそうできない場合は、可変スタックをシミュレートできますが、これはハノイの塔の並べ替えであることに注意してください。ペグは3つのみで、順序付けられていないペグは1つだけです。 関数/サブルーチンはいつでもスタックを検査できますが、ポップとプッシュによってのみ移動できます。シングルムーブとは、あるスタックから別のスタックにプッシュされるポップです。 最初の6つの自然数の順列ごとに関数/サブルーチンをテストします。言い換えれば、関数/サブルーチンをテストします{1},{2},...,{6},{1,1},{1,2},...,{1,6},{2,1},...(これは合計または可能性があるはずです(数学を修正してくれたハワードに感謝します))。要素を最小の回数だけ移動する関数/サブルーチンが勝ちます。61+62+...+6655986

7
解釈> <>(魚)
&gt; &lt;&gt;は人気のある言語ではありませんが、ゴルフに適している可能性があり、このWebサイトで使用されています。Befungeに触発され、その指示にいくつかの類似点があります。 必要なコマンド: &gt; &lt; ^ v 指示ポインターの方向を変更します(右、左、上、下) / \ | _ # ミラー。ポインターは、すでに持っている方向に応じて方向を変えます。 x ランダムな方向。 + - * , % それぞれ、加算、減算、乗算、除算、モジュロ。AとBをスタックからポップし、B演算子Aをプッシュします。0で除算するとエラーが発生します。 0-9 a-f 対応する値をスタックにプッシュします。a = 10、...、f = 15 = スタックからAとBをポップし、B = Aの場合は1をプッシュし、そうでない場合は0をプッシュします。 ) より大きい。AとBをスタックからポップし、B &lt;A ( より小さい場合は1をプッシュします。AとBをスタックからポップし、B&gt; Aの場合は1をプッシュし ' " ます。文字列解析を有効にします。文字列解析は、閉じ引用符が見つかるまで、見つかったすべての文字をスタックにプッシュします。 ! 次の命令をスキップします。 ? スタックのトップがゼロの場合、またはスタックが空の場合、次の命令をスキップします。(注:これはスタックから何もポップしません!)スタック : の一番上の値を複製します。 ~ スタックから一番上の値を削除します。 …

7
Take It or Leave It II:コンピューター向けゲームショー
これは、毎週月曜日のPSTのMidnightに投稿する一連のパズルの2番目です。最初のパズルはここにあります。 コンテキスト: 世捨て人の億万長者がゲーム番組を作成し、世界で最も優秀で優秀なプログラマーを引き付けました。月曜日の真夜中のストロークで、彼は志願者のプールから1人をその週の出場者として選び、彼らにゲームを提供します。あなたは今週の幸運な出場者です! 今週のゲーム: ホストは、10,000個のデジタルエンベロープのスタックへのAPIアクセスを提供します。これらのエンベロープはランダムにソートされ、その中に1ドルから10,000ドルの間のドル値が含まれています(同じドル値を含むエンベロープは2つありません)。 次の4つのコマンドを自由に使用できます。 Read():スタックの一番上にある封筒のドルの数字を読み取ります。 Take():封筒にドルの数字をゲームショーウォレットに追加し、封筒をスタックから取り出します。 Pass():スタックの一番上のエンベロープからポップします。 Oracle(M):スタック内の次のMエンベロープの平均値を返します。現在読み取り可能なエンベロープは含まれません。 ルール: 封筒でPass()を使用すると、内部のお金は永久に失われます。 $ Xを含むエンベロープでTake()を使用する場合、それ以降、$ Xを含むエンベロープでTake()を使用することはできません。これらの封筒の1つでTake()を実行すると、ウォレットに0ドルが追加されます。 ターンTでOracle(M)を使用すると、エンベロープT + 1からT + Mの平均が返されます。Oracle()は、T + Mを回すまで無効です。 最大限の金額でゲームを終了するアルゴリズムを作成します。 Pythonでアルゴリズムを作成している場合は、@ Maltysenが提供するこのコントローラーを自由に使用してください:https ://gist.github.com/livinginformation/70ae3f2a57ecba4387b5 注1:この場合の「最大」とは、N&gt; = 1000実行後のウォレットの中央値を意味します。Nが無限大に増加すると、特定のアルゴリズムの中央値が収束することが間違っていることを証明したいと思います。代わりに平均値を最大化してみてください。しかし、平均値は中央値よりも小さなNによって放り出される可能性が高いと感じています。 注2:このパズルの前の部分に対するすべての解決策はここで有効なので、それらを再投稿することはほとんど価値がありません。パートIIでは、以前のパズルのアルゴリズムの改善のみが考慮されます。 編集:メタに関するこの投稿を考慮して、賞品の条件は削除されました。

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