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

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

6
仕様から長方形を生成する
前書き この課題は、2Dパターンマッチング言語であるGrimeに触発されました。基本的に、文字の2次元グリッドを記述する「グラマー」が与えられ、あなたの仕事はグラマーに従ってグリッドを生成することです。さらに、グリッドは特定の弱い意味で可能な限り小さくする必要があります。 入力 入力は、小文字のASCII文字と記号|およびを含む文字列-です。簡単にするために、入力には繰り返し小文字が含まれていません。文字列は、文字の長方形グリッドのクラスの仕様であり、次のようにスタックを使用して左から右に解析されます。 小文字の文字を考えるとc、スタックにプッシュしm×nた文字のグリッドをc任意のため、m, n ≥ 1。 パイプが与えられたら、|2つのグリッドAをポップBし、スタックから(B一番上にありました)、AB連結Bして得られたグリッドをの右側にプッシュしAます。これには、AそれBが必要で、同じ高さがあります。 ハイフンを指定すると-、2つのグリッドAをBスタックから(上にBあった)ポップし、A/B連結Bして得られたグリッドをの一番下にプッシュしAます。これは、ことが必要AとB等しい幅を持っています。 解析プロセス(文字ごとに異なる場合があります)の一部の選択mおよびn作成中に、入力仕様がスタックの最後に残っている長方形を正しく記述することが保証されます。 出力 出力は、入力で指定された文字の長方形のグリッドです。行または列を削除するとグリッドが無効になるという意味で、グリッドは最小限でなければなりません。改行で区切られた文字列(末尾の改行の有無にかかわらず)、2Dの文字配列、または文字列の配列のうち、最も便利な形式を返すことができます。 上記のとおりに入力を処理する必要はありません。唯一重要なことは、出力が正しいことです。 例 仕様を検討する par-s||e- まず、プッシュすることを選択した1×2の矩形をp、と1×1の長方形aとr(この理由は、後に明らかであろう)。その後、我々はポップaやr長方形を、その垂直連結を押します a r 次に、の1×2長方形をプッシュし、sそれと上の長方形をポップし、それらの水平連結をプッシュします as rs 次に、その四角形と四角形をポップしp、それらの連結をプッシュします pas prs 最後に、の3×1長方形をプッシュし、eそれと上の長方形をポップし、垂直連結をプッシュします pas prs eee これは、プログラムの出力、または少なくとも1つの可能性です。ただし、 ppas ppas pprs eeee また、仕様によって生成されます。多くの行と列を削除できるため、有効な出力ではありません。 より微妙な例として、考慮してください co|m|p|il|e|r|- この仕様は長方形を生成します comp iler これは有効な出力です。ただし、それはまた生成します commp iiler 無効にすることなく単一の行または列を削除することはできないため、これも有効です。 ルール 完全なプログラムまたは機能を提供できます。最小のバイトカウントが優先され、標準の抜け穴は許可されません。 追加のテストケース これらを使用してプログラムをテストできます。 Input: …

1
ビル・ゲイツをアウトゴルフできますか?
パンケーキソーティングは、スパチュラをスタックの任意の位置に挿入して、その上にあるすべてのパンケーキを裏返すことができるときに、サイズの乱れたパンケーキのスタックをソートする数学的問題の口語的な用語です。パンケーキ番号P(n)は、n個のパンケーキに必要なフリップの最小数です。1 1979年、若いBill GatesとChristos Papadimitriouは、P(n)=(5n + 5)/ 3の上限を証明する論文を書きました。2 Gates(および/またはPapadimitriou)が開発したアルゴリズム(おそらく1979年以降)を使用してパンケーキソートを実行するプログラムを作成したと想定するのは安全だと思います。ゲイツは熟練したプログラマーだったので、おそらくこのコードをできる限りゴルフしようとしましたが、ソースコードのサイズは公開されていません(AFAIK)。 チャレンジ: パンケーキのソートを実行する関数/プログラムを作成します。ここで、フリップの最大数は、GatesとPapadimitriouによって検出された境界を超えません。3リストが一貫している限り、リストを昇順または降順で選択できます。 n <50と仮定することができます。したがって、フリップの数を(ランダムに選択されたn値)に制限する必要があります。 n P(n) 38 65 49 83 50 85 出力は、各フリップの前のヘラの位置になります。出力は0または1のインデックスが付けられ、上からカウントするか下からカウントするかを選択できます。 追加のルール: ランタイムは確定的でなければなりません 固定の時間制限はありませんが、50要素のリストの出力を提供できる必要があります テストリスト: 私は最も難しいリストを提供することはできません(もしそうなら、私は挑戦ではなく論文を書きます)、関数/プログラムをテストできる数のランダムなリストを提供します。これらのリストが「簡単」であることが判明した場合、他の人を追加できます。 9, 63, 62, 75, 45, 78, 59, 75, 69, 3, 28, 94, 51, 10, 45, 93, 97, 80, 72, 36, 80, 88, 30, 93, …

13
フィボナッチ製品
正のフィボナッチ数の一意の合計として、0より大きい数を分解できます。この質問では、可能な最大の正のフィボナッチ数を繰り返し減算することでこれを行います。例えば: 1 = 1 2 = 2 3 = 3 4 = 3 + 1 12 = 8 + 3 + 1 13 = 13 100 = 89 + 8 + 3 ここで、フィボナッチ積を上記と同じリストと呼びますが、加算は乗算に置き換えられます。たとえば、f(100) = 89 * 8 * 3 = 2136。 正の整数nを指定して、その数のフィボナッチ積を返すプログラムまたは関数を作成します。 テストケース: 1: 1 2: 2 3: 3 4: …
13 code-golf  math  sequence  fibonacci  code-golf  word  code-golf  cipher  code-golf  string  math  subsequence  code-golf  regular-expression  code-golf  brainfuck  assembly  machine-code  x86-family  code-golf  math  factorial  code-golf  math  geometry  code-golf  math  arithmetic  array-manipulation  math  number  optimization  stack  metagolf  code-golf  tips  assembly  code-golf  tips  lisp  code-golf  number-theory  path-finding  code-golf  number  sequence  generation  code-golf  math  geometry  code-golf  grid  permutations  code-golf  code-golf  graphical-output  geometry  fractal  knot-theory  code-golf  math  arithmetic  code-golf  interpreter  balanced-string  stack  brain-flak  code-golf  math  set-theory  code-golf  math  array-manipulation  code-golf  code-golf  string  natural-language  code-golf  code-golf  math  linear-algebra  matrix  code-golf  string  encode 

8
アンダーロード番号の最短表現
フレーバーテキスト スタックベースのesolang Underloadは、関数型プログラミングといくつかの興味深い結びつきを持っています。それらの1つは、数値データ型の処理です。ラムダ計算のように、アクションをN回実行する関数によって自然数Nを表します。 物事を簡単にするために、Underloadコマンドの次のサブセットのみを考慮します。 : -このコマンドは、スタックの一番上のアイテムを複製します。 * - このコマンドは、単一の項目にスタックの一番上の二つのアイテムを連結します。 私たちは、定義過少数字Nを文字列として:と*、実行した、スタックの一番上の項目を消費し、そのアイテムが一緒に連結さのn個のコピーを生成します。いくつかの例: アンダーロードの数字0、-1、1 / 2、πはありません。 空の文字列 は、スタックに手を付けないため、Underloadの数字1です。 :*それはトップ・アイテムを複製し、次に単一の項目にまとめ、それらの2つのコピーを連結しているため、不足負荷数字2:(A):*= (A)(A)*=(AA)。 ::**アンダーロードの数字3です。(A)::**= (A)(A):**= (A)(AA)*= (AAA)です。 :::*** アンダーロードの数字4です。 :*:*また、アンダーロード数字4:(A):*:*= (AA):*= (AA)(AA)*= (AAAA)です。 一般に、MおよびNがアンダーロードの数字MおよびNである場合:N*、数字N + 1でありMN、数字M×N であることがわかります。 チャレンジ あなたの仕事は、文字列としての入力に対してアンダーロード数値の最短表現を生成する最短プログラム(STDINで入力を取得する)または関数(引数で入力を取得する)を記述することです。つまり、入力が正の自然数N> 1である場合、文字の長さが他のすべてのアンダーロード数字N以下であるアンダーロード数字Nを生成する必要があります。 サンプルの入力と出力:( "Input- OUTPUT。") 1- 。 2- :*。 5- ::*:**(2×2 + 1)。 7- ::*::***(2×3 + 1)または:::**:**(3×2 + …

2
Xが3より大きく、XとYの間に少なくとも2つの差がある
私はいくつかのC ++をゴルフしようとしています。この条件を短くすることは可能ですか? X > 3 & X - Y > 1 (もちろん、空白の削除は別として。) だから、X少なくともです4がX >= Y + 2。 XおよびYは、[0,5]間隔の整数です。 ビット単位の数式を見つけようとしましたが、失敗しました。
11 code-golf  number  tips  c++  code-golf  popularity-contest  obfuscation  code-golf  c  code-golf  board-game  hexagonal-grid  code-golf  game  grid  code-golf  number  permutations  popularity-contest  math  graphical-output  number-theory  king-of-the-hill  code-challenge  compression  code-challenge  fastest-code  code-golf  math  ascii-art  animation  code-golf  popularity-contest  generation  counting  fastest-code  fastest-code  popularity-contest  image-processing  king-of-the-hill  code-golf  conversion  binary-tree  code-golf  math  number  rational-numbers  division  code-golf  restricted-source  hashing  atomic-code-golf  logic-gates  code-golf  function  code-challenge  puzzle-solver  ai-player  test-battery  popularity-contest  music  compression  code-golf  number  stack  atomic-code-golf  logic-gates  ascii-art  popularity-contest  code-golf  date  grid  code-challenge  game  code-golf  parsing  code-golf  math  geometry  sequence  popularity-contest  code-trolling  code-golf  string  restricted-source  code-golf  quine  king-of-the-hill  code-golf  math  code-golf  simulation  code-golf  ascii-art  code-challenge  sorting  optimization 

3
クレム通訳を書く
Clemは、ファーストクラスの機能を備えた最小のスタックベースのプログラミング言語です。あなたの目的はクレム言語のインタプリタを書くことです。ここにあるリファレンス実装に含まれるすべての例を適切に実行する必要があります。 いつものように、標準の抜け穴が適用されます。 バイトカウントによる最小のエントリが優先されます。 クレム語 Clemは、ファーストクラスの機能を備えたスタックベースのプログラミング言語です。クレムを学ぶ最良の方法はclem、引数なしでインタプリタを実行することです。インタラクティブモードで起動し、使用可能なコマンドで遊ぶことができます。サンプルプログラムを実行するには、「example」がプログラムclem example.clmの名前であると入力します。この簡単なチュートリアルは、始めるのに十分なはずです。 関数には2つの主要なクラスがあります。原子関数と複合関数。複合関数は、他の複合関数とアトミック関数で構成されるリストです。複合関数にそれ自体を含めることはできません。 原子関数 アトミック関数の最初のタイプは定数です。定数は、単に整数値です。たとえば、-10。インタープリターが定数を検出すると、それをスタックにプッシュします。clem今すぐ実行します。入力-10プロンプトで。君は見るべきだ > -10 001: (-10) > 値001はスタック内の関数の位置を表し、入力し(-10) た定数です。+11プロンプトで入力してください。君は見るべきだ > +11 002: (-10) 001: (11) > (-10)がスタックの2番目の位置に移動し(11)、最初の位置を占めていることに注意してください。これがスタックの性質です!これが-減分コマンドでもあることに気づくでしょう。たび-または+番号の前に、彼らはその数ではなく、対応するコマンドの兆候を示しています。他のすべてのアトミック関数はコマンドです。合計14あります。 @ Rotate the top three functions on the stack # Pop the function on top of the stack and push it twice $ Swap the top …

9
はいの通訳を作ろう!
はい、いくつかのスペースで区切られた命令を持つスタックベースの言語です: yes: Push 1 to the stack no: Push 0 to the stack what: Push the input to the stack (input is taken at the start of program execution and is the same for the whole execution) sure: Increment the last item in the stack nah: Decrement the last item …

4
シフト通訳を書く
編集:あなたの一部が疑ったように、公式インタープリターにバグがありました:の構成の順序.が逆になりました。私は2つのバージョンのインタープリターを持っていて、ここでは間違ったバージョンを使用しました。例は、この誤ったバージョン用にも書かれています。リポジトリのインタープリターと以下の例を修正しました。の説明>も少しあいまいだったので修正しました。また、時間がかかることをお詫びし、実生活に巻き込まれました。 EDIT2:私のインタプリタの実装にはバグがあり.、例に反映されていました(未定義の動作に依存していました)。この問題は修正されました。 前書き Shiftは、数年前に作成した難解な関数型プログラミング言語ですが、今日公開されました。スタックベースですが、Haskellのような自動カレーも備えています。 仕様 Shiftには2つのデータ型があります。 任意の正のアリティ(入力数)を持ち、出力のリストを返す関数。たとえば、唯一の入力を複製する関数にはアリティ1があり、2つの入力を交換する関数にはアリティ2があります。 ブランクはすべて同一であり、機能以外の目的はありません。 シフトプログラムは0個以上のコマンドで構成され、各コマンドは単一のASCII文字です。合計で8つのコマンドがあります。 !(適用)スタックから関数fと値をポップしx、に適用fしxます。場合はfアリティ1を持って、リストにはf(x)、スタックの先頭に追加されます。アリティがあるn > 1場合、新しい(n-1)-ary関数gがスタックにプッシュされます。入力を受け取り、戻ります。x1,x2,...,xn-1f(x,x1,x2,...,xn-1) ?(blank)スタックに空白をプッシュします。 +(clone)は、入力を複製する単項関数をスタックにプッシュします。任意の値xがにマップされ[x,x]ます。 >(shift)はn-ary関数を受け取る単項関数をスタックにプッシュし、最初の引数を無視し、残りの引数を呼び出し、結果の前にタックfする(n+1)-ary関数gを返します。たとえば、は入力を受け取ってを返すバイナリ関数です。xfxshift(clone)a,b[a,b,b] /(fork)は、3つの入力を受け取る3項関数をスタックにプッシュし、が空白の場合はそれ以外a,b,cを返します。[b]a[c] $(呼び出し)は、関数fと値をポップするバイナリ関数をスタックにプッシュし、そうxするのfとxまったく同じように適用され!ます。 .(鎖)スタックにプッシュ二つの機能をポップバイナリ関数fとgし、その組成を返す:関数hと同じアリティを有しf、通常はその入力をとるには、適用されるfそれらにし、次いで完全適用g結果に(コールそのアリティが指示する回数だけ)、の出力からの未使用のアイテムはの結果にf残りhます。たとえば、それfが2番目の引数を複製するバイナリ関数で、gがcallであるとします。スタックが含まれている場合は[f,g,a,b,c]、私たちが行う.!!、それが含まれています[chain(f,g),a,b,c]。!!次に行う場合、f最初にに適用されa,b、[a,b,b]、それからgその最初の2つの要素に適用され[a(b),b]ます[a(b),b,c]。そのアリティは2であるため、生成し、スタックは最終的にになります。 @(言う)単純に入力を返す単項関数をプッシュし、0それが空白1か、関数かを出力します。 !値をスタックにプッシュする以外のすべてのコマンドは、入力を実行する方法がなく、何かを出力する唯一の方法はを使用すること@です。プログラムは、コマンドを1つずつ評価し、「say」が呼び出されるたびに0sまたは1sを出力して終了することによって解釈されます。ここで説明されていない動作(空白の適用、長さ0または1のスタックの適用、空白での「チェーン」の呼び出しなど)は定義されていません。インタープリターがクラッシュしたり、警告なしに失敗したり、入力を要求したりする場合があります。 タスク あなたの仕事はシフトの通訳を書くことです。STDIN、コマンドライン、または関数の引数から解釈されるShiftプログラムを取得し、STDOUTに出力するか、0sおよび1sの結果の出力(おそらく無限)を返す必要があります。関数を作成する場合、何らかの方法(Pythonのジェネレーター、Haskellの遅延リストなど)で無限長の出力にアクセスできる必要があります。または、別の入力である数値を受け取り、それよりも長い場合はn少なくともn出力の文字を返すことができますn。 最も低いバイト数が優先され、標準の抜け穴は許可されません。 テストケース このシフトプログラムは次のように出力します01。 ?@!@@! 左から:空白を押し、「発言」を押してから、発言を空白に適用します。これは出力します0。次に、sayを 2回押して、2番目の発言を最初の発言に適用します。これは出力します1。 このプログラムは永久にループし、出力を生成しません。 $+.!!+!! プッシュ呼び出しとクローンを作成し、それらにチェーンを適用します(チェーンはバイナリ関数である!ため、2つのが必要です)。これで、スタックには1つの引数を取り、それを複製して、2番目の最初のコピーを呼び出す関数が含まれています。では、この関数を複製してそれ自体を呼び出します。+!! このプログラムは印刷します0010: ?@$.++>!.!!.!!.!!!!+?/!!!@!@>!!! 空白を押して言ってください。次に、2番目の引数をコピーするバイナリ関数を作成してからb、最初の引数をコピーしaてそれ自体で作成し、次にそのコピーをのコピーに適用してb、を返し[a(a(b)),b]ます。適用言うと、ブランク、その後、適用発言権をスタック上に残りの二つの要素に。 このプログラムは印刷し0ます。!!!追加したそれぞれについて、追加のを出力し0ます。 ?@+$>!>!+>!///!!>!>!.!!.!!.!!+!!!! 空白を押して言ってください。次に、f,g,x入力としてを返す3項関数を作成します[f,f,g,g(x)]。その関数のクローンを作成し、それ自体、たとえば、および空白に適用します。このアプリケーションはスタックを変更しないため、必要な回数だけ関数を再度適用できます。 このプログラムは無限シーケンスを出力します。s 001011011101111...の数は1常に1ずつ増加します。 @?/!@>!??/!!>!+.!!.!!.!!.+>!.!!$$$$+$>!>!$>!>!+>!$>!>!>!+>!>!///!!>!>!>!.!!.!!.!!.!!.!!.!!.!!.!!.!!.!!+!!!!! リポジトリには注釈付きのバージョンが含まれています。

17
ハノイの塔ソルバー
ハノイの塔とは何かを参照するには、グーグルで見るか、ウィキペディアのページをご覧ください。 あなたのコードは2つのことをすることができるはずであり、それらは次のとおりです: ハノイタワーの始点にあるディスクの数を指定するユーザー入力を受け入れる タワーパズルの解決策を示すために、(何らかの形で論理的である限り)選択した方法で出力を作成します。 論理出力の例は次のようになります(4ディスクの開始を使用)。 L1L2C1L1R-2R-1L1L2C1C-1R-2C1L1L2C1 Lは、左のペグ、C中央のペグR、右のペグを表し、数字は、そのペグ上でディスクをどれだけの距離、どの方向に動かすかを示します。正の数は、右端のペグに向かって移動するペグの数を表します(ディスクが左端のペグから始まるため)。 ハノイの塔へのルールは簡単です: 一度に移動できるディスクは1つだけです。 各移動は、ペグの1つから上部ディスクを取り出し、それを別のペグに、そのペグに既に存在する可能性がある他のディスクの上にスライドさせることで構成されます。 小さいディスクの上にディスクを配置することはできません。 ディスクは、左端のペグから始まり、一番下が最大、一番上が最小です。
10 code-golf  stack 

7
コードゴルフ:フェイリーシーケンス(I)
チャレンジ このタスクでは、整数N(10 ^ 5未満)が与えられ、次数NのFareyシーケンスが出力されます。 入力Nは1行で指定され、入力はEOFで終了します。 入力 4 3 1 2 出力 F4 = {0/1, 1/4, 1/3, 1/2, 2/3, 3/4, 1/1} F3 = {0/1, 1/3, 1/2, 2/3, 1/1} F1 = {0/1, 1/1} F2 = {0/1, 1/2, 1/1} 制約 入力数は10 ^ 6の値を超えません 任意の言語を使用できます 最短のソリューションが勝ちます!
10 code-golf  math  code-golf  math  code-golf  number  number-theory  code-golf  math  arithmetic  repeated-transformation  code-golf  geometry  popularity-contest  code-golf  code-golf  tips  haskell  math  fastest-algorithm  code-golf  combinatorics  code-golf  math  polynomials  rational-numbers  code-golf  code-golf  popularity-contest  javascript  code-golf  kolmogorov-complexity  code-golf  code-golf  math  combinatorics  permutations  code-challenge  restricted-source  random  array-manipulation  code-challenge  generation  code-golf  code-golf  ascii-art  arithmetic  division  code-challenge  number  code-golf  math  number  binary  code-golf  ascii-art  code-golf  interpreter  stack  code-golf  internet  networking  code-golf  math  code-golf  ascii-art  code-golf  math  sequence  code-golf  hello-world  restricted-source  code-golf  ascii-art  code-golf  geometry  code-golf  kolmogorov-complexity  pi  code-golf  math  combinatorics  permutations  code-golf  math  code-challenge  ascii-art  code-golf  string  code-golf  quine  code-golf  math  floating-point  golfscript  code-golf  string  code-golf  sliding-puzzle  code-challenge  arithmetic  code-golf  math  code-golf  geometry  optimized-output 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.