多言語に言語を追加する


239

これは、各回答が前の回答に基づいて作成される回答課題です。投稿が行われる順序を確認するために、スレッドを「最も古い」順にソートすることをお勧めします。

:これは非常に長期にわたる課題になっており、新しい回答を投稿することはかなり困難です。そのため、潜在的な回答の特定の部分に関するアドバイスが必要な場合、追加できる言語のアイデアがある場合などに、このチャレンジに利用できるチャットルームが用意されています。質問や発言があれば気軽に立ち寄ってください!

タスク

Nで実行する必要があります提出するプログラム番目のn個の異なる言語を。具体的には、提出する以前のプログラムで追加されたすべての言語と、さらに1つ。プログラムは、この質問への回答で使用される最初の言語で実行される場合は1、2番目の言語で実行される場合は2などを出力する必要があります。たとえば、最初の答えはPython 3で実行すると1を出力し、2番目の答えはPython 3で実行すると1を出力し、JavaScriptで実行すると2を出力します。この場合、3番目の答えは、Python 3で実行すると1、JavaScriptで実行すると2、他の言語で実行すると3を出力する必要があります。

追加のルール

  • プログラムはエラーまたはクラッシュなしで実行する必要があります。警告(および他のstderr出力)は受け入れられますが、プログラムは正常に終了する必要があります(たとえば、プログラムの最後から実行するか、exit通常のプログラム終了を実行するようなコマンドを使用して)。

  • 出力は整数のみでなければなりませんが、末尾の改行は問題ありません。他の避けられない標準出力も許可されます。例:Befunge-93の インタープリター名とバージョン、Zephyrの印刷文字列の後のスペース。一部の言語では、2つの印刷方法が提供されます。末尾のスペースがある場合とない場合です。この場合、末尾スペースのないメソッドを使用する必要があります。

  • 各回答は、前の回答よりも20%または20バイト(大きい方)を超えてはなりません。(これは、Lenguageのような言語がスレッドをスパムするのを防ぎ、少なくとも少量のゴルフを奨励するためです。)

  • 同じ言語の異なるバージョンを使用することは許可されています(ただし、明らかに異なる番号を印刷する必要があるため、バージョンチェックをポリグロットに合わせる必要があります)。ただし、言語のバージョン番号を返す言語機能を使用することはできません。まったく同じ言語を繰り返すことは、明らかに不可能です(プログラムは2つの異なる数値の1つを決定論的に出力する必要があるため)。
  • いくつかの多言語コンテストで禁止されているにもかかわらず、過度のコメントの乱用のようなトリックはここでうまくいきます。
  • 独自の記述のガイドとして以前の回答を使用する必要はありません(仕様に準拠している限り、必要に応じてプログラム全体を書き換えることができます)。ただし、主に以前の回答に基づいて回答を作成することは許可されており、おそらく最も簡単な解決策です。
  • 2つの回答を連続して送信することはできません。間に誰か他の人が投稿できるようにします。このルールは、勝利条件が満たされるまで適用されます。
  • この課題では、他の競合他社が同じ言語で投稿する必要があるため、無料実装の言語のみを使用できます(これはコンテストであるかのように)。
  • 言語に複数のインタープリターがある場合、その言語で正常に実行されるすべてのプログラムがそのインタープリターで実行する限り、任意の言語のインタープリターを選択できます。(つまり、プログラムが複数のインタープリターで動作する場合、将来の投稿は、言語の特定の選択を「ロック」する投稿ではなく、これらのインタープリターのいずれかを選択できます。)
  • この課題では、言語の選択に関する新しいPPCGルールが使用されるようになりました。質問よりも新しい言語でも、言語または言語インタープリターを使用できます。ただし、a)言語がポリグロット用に設計されている場合、またはb)言語がこの質問に触発された場合、質問より新しい言語/通訳を使用することはできません。(したがって、新しく設計された実用的なプログラミング言語は、無関係のエソランと同様に、ほぼ間違いなく大丈夫ですが、この質問に触発されたA Pear Treeのようなものは禁止されています。)これは設計された言語の有効性を変更しないことに注意してくださいこの質問よりも古いポリグロットに対して。
  • 勝利条件(以下を参照)は、連鎖を断ち切るように設計されていることに注意してください(つまり、他の言語ではポリグロットしにくい言語を使用して他の誰かがあなたの後に答えることができないようにする)。目標は、できる限り長く続けることであり、勝ちたい場合はそれを尊重する必要があります。

回答形式

すべての回答は相互に依存しているため、一貫した回答形式を使用すると便利です。回答を次のようにフォーマットすることをお勧めします(これはチェーンの2番目のリンクの例です)。

2. JavaScript、40バイト

(program goes here)

このプログラムは、Python 3で1、JavaScript で2を出力します。

(プログラム、ポリグロット手法などを説明したい場合は、ここに配置してください)

勝利条件

14日間新しい回答がない場合、勝者は2番目に新しい回答、つまりチェーンを壊していないことが証明された最大のポリグロットを投稿した人になります。ただし、その後のチェーンの延長は大歓迎です!

勝者はチャンスです。回答194(TemplAt)を参照してください。

言語リスト


3
削除された投稿を見ることができる人向け:Sandboxの投稿はこちらです。

5
以前のプログラムをコピーする必要はありませんが、もちろんガイドとして使用できます。プログラムを最初からやり直すには時間がかかる可能性があります!回答にパーマリンクする必要はありません。最も古いものでソートすると、すべての回答が順番に表示されます。

3
@ ais523新しい答えに新しいコードとのリンクを試してみるべきだということだったのでしょうか?
ブルー

5
私たちは...コードの進ダンプを取り、自動的にすべての言語でそれを実行するスクリプトが必要だと思う
mbomb007

3
これは、さまざまな種類のチャレンジとして投稿された多用途の整数プリンターです。(インスピレーション?)最終的な回答(現在)は0.0127、Sp3000の30の言語の提出によってのみscore られます... :)
Stewie Griffin

回答:


80

注:これが最初に表示される場合は、最も古い順並べ替えることができます。

17.ジュリア(128バイト)

#v`16 "<" 6/b0\ .q@#;n4"14""
#>3N9@15o|R"12"*^
#=|
print((1/2and 9 or 13)-(0and+4)^1<<65>>62);# =#;print(17)
#gg99ddi2` |1|1+6

最後の行には2つのESCがあります。1つは最初の行の前に、もう1つは行のg後にあり2ます。これはもっとゴルフできるかもしれませんが、物事はVとPythのおかげで面倒になりませんでした。

Python 3に1、Vに2、Minkolangに3、> <>に4、Python 2に5、Japtに7、Retinaに8、Perlに9、Befunge-93に10、Befungeに11を印刷します-98、Fissionで12、Rubyで13、Turtlédで14、Haystackで15、Pythで16、Juliaで17


ヒント:

  • 4行目の最初は、Python 2/3、Perl、Rubyです。最後は#=複数行コメントのおかげでジュリアです(ジュリアにはがありませんand/or)。
  • Vは<ESC>gg99ddi2<ESC>、間違いなくゴルフ可能ですが、Vを試してみるのは面倒ですオンライン試してみてください!インタープリターはかなり遅いためです。
  • MinkolangとHaystackは最初はダウンしvます。Befunge-93と-98はそうではなく、に依存していbます。
  • Retinaは4行目のスペースと1の数をカウントし、VはRetinaの設定(バックティックの前)で非表示にします。
  • @ETHproductionのヒントによると、Japtはバックティックを使用して、文字列内のコードの大部分を隠します。
  • 核分裂ですR"12"*
  • SMBFは<.、最初の行に加えて、最後の行に追加されました6

24
しかし、他の人のコードはどこに行ったのですか
-Alfie Goodacre

13
159バイトから128バイト?うわー、それはいくつかの素晴らしいゴルフです!
牛は

6
ニース、2 ^ 7バイト
16

7
わあ...信じられない!すべてのことを言って完了し
たら

4
@AlfieGoodacre「以前の回答を独自の記述ガイドとして使用する必要はありません(仕様に準拠している限り、プログラム全体を書き換えることができます)」
mbomb007

52

23. 六角形、186バイト

これが計画を台無しにしたらごめんなさい...

#v`16/"<"6/b.q@"(::):::  (22)S#;n4"14"
#>3N6@15o|> ^*ttt*~++~~~%
#=~nJ<R"12";
#[

print((1/2and 9 or 13)-(0and+4)^1<<65>>62)#46(89999+++++!)=#print(17)#0\32=""<0]#echo 21
#8␛dggi2␛` |1|6

literalは、リテラルESC文字を表すために使用されます。

プリント:

六角形で23、アンダーロードで22、ニムで21、プレリュードで20、レンで19(ここでテスト可能)、カーディナルで18、ジュリアで17、パイスで16、ヘイスタックで15、タートルードで14、ルビーで13、ルビーで12 Fission、Befunge-98で11、Befunge-93で10、Perlで9、Retinaで8、Japtで7、SMBFで6、Pythonで5、> <>で3、Minkolangで3、Vim / Vで2 、Python 3では1です。

リンクされていない言語にchange languageアクセスするには、Hexagonyリンクの右上にあるボタンをクリックします。


この形式では、六角形は(すべてで)読み取れません。六角形で見る必要があります。
2つのESC文字がsに置き換えられているので、それらを見ることができることに注意してください-それらは無視されるため、プログラムには他のものはありません。

        # v 1 6 / " < " 6
       / b . q @ " ( : : )      A lot more readable, right?? No?
      : : : ( 2 2 ) S # ; n
     4 " 1 4 " # > 3 N 6 @ 1
    5 o | > ^ * t t t * ~ + +
   ~ ~ ~ % # = ~ n J < R " 1 2
  " ; # [ p r i n t ( ( 1 / 2 a
 n d 9 o r 1 3 ) - ( 0 a n d + 4
) ^ 1 < < 6 5 > > 6 2 ) # 4 6 ( 8   | Note that the 0s below can be replaced
 9 9 9 9 + + + + + ! ) = # p r i    | With anything (except "`" or " "), 
  n t ( 1 7 ) # 0 \ 3 2 = " " <     V as far as Hexagony is concerned
   0 ] # e c h o 2 1 # 8 ␛ d g
    g i 2 ␛ | 1 | 6 . . . . .    <-- the ␛ represents an esc
     . . . . . . . . . . . .         character
      . . . . . . . . . . .
       . . . . . . . . . .       A "." is a no-op
        . . . . . . . . .
                ^
                | Mirror wraps to here, going NW

Hexagonyに慣れていない人のために、6つのコーナーから始まる6つのIPがあります。一度に1つだけがアクティブで、を使用して切り替えられ#][ます。メモリモデルはこのプログラムにとってそれほど重要ではありませんが、将来的に理解するために必要になる可能性があります。知っておく必要があるのは、1つのintが「メモリエッジ」(略してME)に格納され、'"}{アクティブなMEを変更することだけです。

\/|_>< プログラムフローを制御するミラーです。

これがどのように機能するかです:

実行された最初の行:

#       A no-op (sets active IP to 0, the currently active one)
 v      letter chars set the ME to their ASCII value - so ME is now 118
  16    Like Labyrinth, 0-9 multiplies ME by 10 and is added - ME now 11816
    /   A mirror that sends IP going NW by wrapping to the bottom

下部(スニペットは上下に反転しているため、上下に読むことができます):

    .   
   .    A series of no-ops. The IP is going NW now,
  .     because of the mirror on the top.
 .
|       Another mirror. This one sends the IP NE, into the h
 h      sets the ME to 104, the ASCII value for h
  #     104 % 6 == 2, so IP 2 is now active instead of 0

右端:

        8  IP #2 is moving SW, starting in the right corner 
       i   Sets the ME to 105
      <    Mirror. Sends the IP going due West
    ""     These change the Active ME - just know that the new edge is 0
   =       Changes the MP (more in specs) - effectively a no-op used to fill space
\32        pushes 23, and mirrors up NE to the !

関連コードの最後のビット:

!          Prints the current value of the ME as an int. Success!
 20(R~     Does things to the ME - irrelevant now
      @    Ends the program!

注意事項:

  • Hexagonyは実行前にすべてのsをドロップ`するため、これらの変更はHexagonyに影響しません
  • コードを8番目ではなく9の長さの六角形として解釈するようにコードをパディングする必要がありました-169未満または関連する217を超える文字に注意してゴルフしてください
  • このため、最後の~~~andと2 0はコードに害を与えずに変更できます
  • =""ちょうど私が修正することができ、新たなように、以前のものから離れてMEを移動します。これらは、hexagonyプログラムに害を与えずに同じことを行う他のキャラクターに置き換えることができます('たとえば、)
  • これは、Befunge 93仕様に技術的に準拠していません。コードのバウンディングボックスを80 x 25クラクターに制限するためです。ただし、ほとんどのインタプリタはこの仕様を無視します(TIOなど)。したがって、私は個人的にそれがそれほど大きな問題だとは思いません。もしそうなら、気軽にコメントを残してください。(本当に変更したい場合は、試してみます)
  • それほど難しくないことを願っています。

1
これを正しく行うと、簡単に最もクレイジーなプログラムフローになる可能性があります。クレイジーな@ ##メソッドを使用してサイズ8の六角形を作成することに近づいていましたが、一度試してみると9の方がずっと簡単でした。また、TIO v1は非常に高速に動作しますが、言語を簡単に切り替えることはできません。
MildlyMilquetoast 16

次に迷宮を提案しますが、それをやりたいです。
MildlyMilquetoast 16

私はこのようなものを自分で書くのに十分なスキルはありませんが、その間、Cubixがポップアップするのを待っています。
パベル

@pavel私はその言語に精通していません。3Dだと思います。かっこいいね。3Dいくつかfungesは面白い加えかもしれない、もあります
MildlyMilquetoast

私たちがまだこの辺の長さである限り、このフローのようなものを維持し、次のサイズに進むときにHexagonyコードを書き換えるのが最も簡単だと思います。3D言語に関しては、既存の言語がフォームフィードを見てもパニックしないと仮定すると、Trefungeはかなり簡単に適合するはずです。(また、Cubixは以前に投稿されましたが、ポスターが難しすぎると考えたため削除されました。HexagonyとCubixを一度に維持するとかなり混乱する可能性があります…)

52

50. bash、1024バイト

#16  "(}23!@)" 3//v\D(@;'[af2.qc]GkGGZ'#)"14";n4
#/*` "[!PPP(22)SP(>7 7*,;68*,@;'1,@ ␉␉␉␉ q
#>␉
# >36!@␉
#`<`
#<]+<[.>-]>[
#{
#z}
#
#=<xR+++++[D>+++++++L+++<-][pPLEASE,2<-#2DO,2SUB#1<-#52PLEASE,2SUB#2<-#32DOREADOUT,2DOGIVEUPDOiiipsddsdoh@O6O4/]>+.-- -. >][
#Rx%>~~~+ +~*ttt*.x
#D>xU/-<+++L
#R+.----\).>]|
#[#[/v/v(/0l0v01k1kx0l0ix0jor0h0h1d111x0eU0bx0b0o1d0b0e0e00m1d0i0fx0g0n0n11x0o0n0cx0c0o0f0c0gx0g0f0h0j0j0i0001k10vx0v0l111111^_)  0046(8+9+9+9+9+=!)
###|
'\';echo 50;exit;';print((eval("1\x2f2")and(9)or(13))-(0and 4)^1<<(65)>>(62))or"'x"or'({({1})({1}[(0)])}{1}\{1})'#}#(prin 45)(bye)|/=1/24=x<$+@+-@@@@=>+<@@@=>+<?#d>+.--./
__DATA__=1#"'x"//
#.\."12"__*'
###;console.log 39
""""#//
=begin //
#ssseemeePaeueewuuweeeeeeeeeeCisajjapppp/*/
#define z sizeof'c'-1?"38":"37"
#include<stdio.h>
main(  )/*/
#()`#`\'*/{puts(z );}/*'``
<>{# }//
#}
disp 49#//
#{
1}<>//
$'main'//
#-3o4o#$$$
#< >"3"O.
=end #//
"""#"#//
#}
#|o51~nJ;#:p'34'\
#ss8␛dggi2␛ `|1|6$//''25  =#print(17)#>27.say#]#print(47)#]#echo 21#ss*///nd^_^_Z222999"26

もっと知りたいですか?polygot chatをお試しください!

オンラインで試してみてください!

いつものように、Stack Exchangeの制限により、リテラルタブを、リテラルESC文字をに置き換えました。上記のTIOリンクの「入力」ボックスから、簡単にコピー可能なバージョンのプログラムを入手できます。

流れ落ちる

このプログラムは、印刷し50は、bashで49、オクターブで48を Deadfish〜、で47リリーでは、46 Cubixで、45 PicoLispで、44 alphuckで、43網状で、42悪で、41 ***、brainfで40最小に-2D、39のCoffeeScriptで、38 Cは、37 C ++で36ラビリンスにおいて、35 INTERCALで、34レールで、33事件で、32ワールにおいて、31モジュラーSNUSPにおいて、30空白で29トリガーで、28脳フラックで、27のPerl 6で26 05AB1Eで、25ピップで、24 Thutuで、23 Hexagonyで、22過少で、21ニムで、20プレリュードで、19 Rengで、枢機inの18、ジュリアの17、パイスの16、ヘイスタックの15、タートルードの14、ルビーの13、核分裂の12、ベフンゲ98の11、ベフンジュ93の109のPerl 5に、8網膜において、7 JAPTにおいて、6 SMBFで、5のPython 2で、4 > <>で、3 Minkolangで、2 V / Vimの中に、及び1 Pythonの3インチ

検証

ほとんどの言語は、上記のテストドライバーによってテストされています。通常の4人の犯人は個別にテストする必要があります。

  • インシデントは、公式の通訳を使用してオフラインでテストされました。

  • Deadfish〜は、公式のインタープリターを使用してオフラインでもテストされました。

  • モジュラーSNUSPここでオンラインテストされまし

  • Rengここでオンラインテストされまし

説明

追加する言語のさまざまなリードを探していました。可能性の1つは#、「スクリプト言語」行(Perl、Python 2および3、およびRubyを処理する)に追加できる行コメントのある言語を見つけることでした。ただし、既存の言語と構文互換性のある適切な言語を考えるのに少し時間がかかりました。

答えは何年も前から顔を凝視していたことが判明しました。上記のTIOリンクをクリックすると、bashで記述されたポリグロットテストドライバーが開きます。そのため、今回は「Bash — TIO Nexus」というタブがありました。あなたはそれがヒントになると思っていただろうが、どうやらそれを見逃したようだ。おまけとして、bashはスクリプト言語でもあるため、「スクリプト言語行」という用語は依然として適切です。

bashプログラムは、他のスクリプト言語と同じ場所で開始します。ただし、それらから分割するかなり簡単な方法があります。一重引用符で囲まれた文字列で\は、ほとんどの言語のエスケープ文字ですが、bashでは使用できません。したがって'\'…';、を介して他の言語からbashコードを非表示にできます。これは、Perl、Python、およびRubyの縮退ステートメント(効果なし)ですが、bashで実行されます。echo 50;exitbashプログラムを終了するかなり簡単な方法です。よくほとんど。

ここでの最大の問題は、bashを実行するexitと、現在の行の終わりまで解析を続けることです(問題のコードを実行しなくても)ので、残りの部分に構文エラーがないことを確認する必要がありますこの線。私たちは持っている'だけで後にexit;すぐにマッチしたものではありません(とすることはできません)。後の行で'…'、スクリプト言語からいくつかのBrain-Flakコードを非表示にするために使用されますが、bashから非表示になります。そのため、コードを非表示にするために使用する文字列リテラルの種類を、一重引用符から二重引用符に変更する必要があります。or"'"Perl、Python、またはRubyを邪魔することなくトリックを行います(左側の引数はすべての場合に真実であるため)。

これで、将来の行にまで及ぶ二重引用符があります。少なくとも1つの他の言語を妨げることなく閉じることはかなり困難でした。実際に行うことは、bashからのコードを非表示にする方法を二重引用符から次の行のPython / Rubyコメント内の一致しない単一引用符に変更し、最後にその行の最後で単一引用符を閉じることです。

Pythおよび05AB1E

二重引用符をいじると、二重引用符で囲まれた文字列を使用してコード、Pythおよび05AB1Eを非表示にしている言語も妨害されます。ここで使用する主なトリックは、できるだけ少ないコードを公開するために、追加するすべての二重引用符がその後すぐに別の二重引用符を持つようにすることです。(これは、__DATA__bashには必要ない行の余分な二重引用符を説明しています。)Pythは\エスケープ文字として使用します。これの主な結果は、スクリプト言語の文字列をいじる範囲が制限され、上記のかなり複雑な方法を使用することを余儀なくされることです(\bashとすべての動作の違いを簡単に利用できなかったため)その他)。05AB1Eでは、外部の'エスケープ文字として機能します文字列、および先頭からエスケープする"ことはできません。そのため、bashの引用スタイルを変更するために使用されるコンストラクトx内に、役に立たないパディング文字を配置する必要がありました(デフォルトはいつものように、読みやすくなります!)"'"

プレリュード

ここで修正するのがはるかに難しい言語です。問題は、すべての括弧を含むスクリプト行が横に移動したため、Prelude制御フロー(括弧の垂直方向の配置に注意を払う)が完全に破壊されたことです。そのため、機能するものを再構築する必要がありました。

さらに悪いことに、現在の最初の行(私は本当に書き直したくありませんでした)は、かっこを表示できる場所に厳しい制限を設けています。ゼロ以外の数字(実際にはそのうちの2つ)で始まり、すぐに開き括弧が続きます。これはPreludeのループであり、Preludeの制御フローの初期のループは、多くの異なる問題を引き起こします(主に、より少ないコードではなく、より多くのコードを実行するためです)。そのため、そのコードをスキップするために、他の行で0反復ループを開く必要がありました。mainCプログラムの行は非常に適していますが、対応する右大括弧がどこにあるかに非常に注意する必要があります。あまりにも右と上のマッチしないブラケット#R+行は問題を引き起こし、左端にあり、十分なコードをコメントアウトしません。(1行の開き括弧が別の行の閉じ括弧と一致する可能性があることに注意してください。)

これが完了すると、Incident行の最初の括弧に収まるだけの十分なスペースがあり、プログラムの最初の数文字を無事に過ぎました。ただし、括弧の配置の違いは、インシデント/旋回コードの一部が実際にPreludeで実行され、スタックが破損することを意味します。これを防ごうとする代わりに、私は渦巻きのゼロのいくつかをさらに右に移動し、彼らが再び機能するプレリュードプログラムを提供できるようにしました。

もう1つの小さな変更は、プログラムの最初の行にありました。行の最後の括弧は、避けるのが非常に難しい位置にありました。cPythコードの直後に追加して、右にシフトします。(多くの言語がプログラムのそのポイントを解析しているため、少なくとも1つの言語を壊さないパディング文字を見つけるには驚くほどの試行錯誤が必要でした!)

インシデント

プレリュードはそれ自体で十分に困難でしたが、プレリュードとインシデントを同時に機能させることは悪夢でした。Preludeはコードに多くの制約を課していたので、自由に動き回ることができなかったため、偶発的なトークンの構築が難しくなりました。たとえば、Preludeは実際に1つだけ0右に移動する必要がありますが、それが00失敗したトークンになり、インシデントプログラムの一部として必要なトークンの一部を壊しました(2つのトークンが重複している場合、両方とも拒否され、これ00は、自分自身と重複することに加えて、必要なトークンと重複していました)。4番目のコピーを作成し、それがトークンと見なされることを防ぐために、両方を移動する必要がありました。

より微妙なのはトークン;'␠␠(つまり2つのスペース文字)です。問題は、これらの両方がプログラムの先頭にジャンプするに表示kGされるため、(プログラムの中心点を壊すことに加えて)インシデントの制御フローを壊すことです。

コピーを␠␠分割して削除することは現実的ではないようです。重複して削除することは可能かもしれませんが(␠=有望な重複の可能性があります)、4番目のコピーを追加するだけでほぼ確実に冗長になります。

一方、には別のトリックを使用できます;'。それを分割することは私が試してみたいものではありません。かなりスペースに敏感な状況で使用されることを考えると。しかし、そうではありませんこと(最初の行に表示されるにもかかわらず)プログラムの開始に近いので、我々はむしろそれが存在しないために必要よりも(したがって、それは制御フローに影響を与えないために原因)、それを飛び越えることができるともっともらしいのです。他の言語を台無しにしないジャンプに使用する適切なトークンを探しました。/v最初の行の少し前に表示され、何も壊さないため、私はそれを使用しました。

1キブのコードで50言語

@MistahFigginsは、1024バイトであれば、1025バイトのサブミットがかなりきれいになると指摘しました(特に、50番目の言語はそれ自体がマイルストーンであるため)。これには、どこかで1バイトの節約を見つける必要がありました。この場合、Deadfish〜に3バイトを保存しましたが、インシデントトークンを正しく整列させるために余分な2バイトを使用し、プログラムを正確に1024バイトに落としました。

以前は、Deadfish〜コードで使用されていた式は(2²+ 2)²+ 10×1 + 2 = 48でした。新しい式は(3²-2)²-1で、48も生成されます。驚くことに、そうではありませんDeadfish〜で書くのはかなり簡単ですが、かなり短いです。

これにより、VIPスコアが.008192になります。これは新しいレコードであるだけでなく、それ自体が適切なラウンド数でもあります(これは明らかに、式への入力として適切なラウンド数を持つことの結果です)。


2
TIOがないためごめんなさい> _>(誠に、Rengの作成者)
コナーオブライエン

@ ConorO'Brien Ping Dennis?また、ais523、シングルバイトをオフにゴルフしようとする必要があります;)
MildlyMilquetoast

1
puts(z )スワップする(P2行目でスペースをカットできます。作成したプレリュードの余裕があります。この答えについてブラボー。#50in1k
チャンス

1
偶然にも、私は別のバイトでゴルフをしました。今では1024になっているので、実際には変更したくありません。より多くの可能性があります(たとえば、古いインシデントパディング/デトケン化がその周りにある可能性があります)。

6
@ ais523は同意しました。この答えは、常に1024バイトにすることを意味していました。
チャンス

38

37. C ++(gcc)、776バイト

#  1"16" 2//v\(;@#/;n4"14"
#/*`3 auaaZ<>16/"<"6/b.q@")(22)S#  ␉␉␉␉ 
#yy␉;36!@
# ␉
#=␉>
#[#yy#yy0l0mx01k1k0l0ix0jx0h0h1d111P0eU0bx0b0o1d0b0e0e00x1d0i0fx0g0n0n11x0o0n0cx0c0o0f0c0gx0g0f0h0j0j0i0001k10mx0m0l11111100(^_)
#`<`␉|
print((eval("1\x2f2")and( 9 )or(13 ))-(0and 4)^1<<(65)>>(62))or'(\{(\{})(\{}[()])}\{}\{}\{})'#46(8+9+9+9+9+=!)#1|=/=1/24=x=9[<$+@+-@@@@=>+<@@@=>+<?#>+.--.]/
__DATA__=1#//
#.\."12"*␉
""""#//
=begin␉//
#*/
#include<iostream>␉
int main()  /*/
#()"`#"\'*/{std::cout<<37;}/*'"`"
$'main'␉//
#-3o4o#$$$
<>3N.<>␉//
#xx
#x%~~~+␉+~*ttt*.x
#xx
=end   #//
"""#"#//
#0]#echo 21#/(\[FAC,1<-#2FAC,1SUB#1<-#52FAC,1SUB#2<-#32FACLEGEREEX,1PLEASEGIVEUPPLEASE)  ap
#_~nJ|#o51\   
#0␛dggi2␛`␉|1|6$//''25  >>>>>#>27.say# =#print(17)#^_^_7LEintndus({})!<>+]/*///Z222999/3!@"26

リテラルタブ、リテラルESC文字。それ以外の場合、Stack Exchangeはプログラムを破壊します。作業したい場合は、下のTIOリンクの「入力」ボックスからプログラムをコピーすることをお勧めします。

オンラインで試してみてください!

流れ落ちる

このプログラムプリント37 C ++で36ラビリンスにおいて、35 INTERCALで、34レールで、33事件で、32ワールにおいて、31モジュラーSNUSPで、30空白で、29トリガーで、28脳フラックで、27のPerl 6で、26 05AB1Eで25ピップで、24 Thutuで、23 Hexagonyで、22過少で、21ニムで、20プレリュードで、19 Rengで、18カーディナルにおいて、ジュリアの17人、ピュイスの16人、ヘイスタックの15人、タートルードの14人、ルビーの13人、フィッションの12人、ベファンジ98の11人、ベファンジ93の10人、Perl 5の9人、レティナの8人、ジャプトの7人、6人 SMBFで5、Python 2で5、> <>で4、Minkolangで3、V / Vimで2、Python 3で1

検証

ほとんどの言語は、上記のテストドライバーによってテストされます。ここでRengを、ここでModular SNUSPをテストできます。必要に応じて、それぞれ19と31を出力します。

テストドライバーの出力に、二重引用符をエスケープするだけでなく、ラインフィードの置換を行う別の形式を追加しました。これは、@ feersum hereによって作成された関数をラップしたac(gcc)プログラムに1行の文字列を入力できるようにするためです。うまくいけば、他の人がそれをそのまま利用できるようになります。

これがインシデントトークンプログラムです。トークンは読みにくく、「中央」のトークンを示し、テストドライバーに含めるので、トークンを削除するのが理想的です。しかし、さまざまなプログラムに連続した整数を出力させる以外に、どうすればよいかわからないので、これは私が得た限りです。

開始ジャンプトークンと終了ジャンプトークンの後のトークンや無関係に見えるものなど、明らかなインシデントの問題を解決しようとしましたが0o、中央に配置するトークンのバランスが取れていません。中心を決定するための論理が正確に何であるかは本当にわかりません。@ ais523が役立つことを期待しています。7LEintndus({})!<>+コードにこの4番目のインクルードがない場合、最後に近いこの文字列はすべてトークンになります。.中央のトークンを調整するために、これらはすべて削除することができます(そして、六角形の配置に置き換えられます)。

私は、この投稿を1日か2日かけてコードを追って更新します(バイトカウントを超えずにインシデントを検証/修正できると仮定します)。しかし、今はとても遅いので、別のラビリンスのような問題を解決しなければならない前に、私は主にそこに行きたいと思っていました。:P

説明

C ++コードの仕組み。

ほとんどの人はC ++に精通していると思うので、あまり詳しく説明しません。ブロックコメントはの形式で提供され/* comment */ます。行コメントはの形式で提供され//commentます。C ++が回答を作成するために利用する実際のコードはint main() {std::cout<<37;}です。そして、STDOUTとのインターフェースに使用されるライブラリーは、このステートメントによって参照されます#include<iostream>

/ *コメントの乱用* /

私にとって、C ++の話はBrain-Flakの答えに戻ります。

最終的に#28を見つけた後、PPCGに投稿された他のポリグロットの研究に着手しましたが、その研究のおかげでいくつかの簡単な答えが得られました(他の誰かがあまりにも傾いている場合、それらのほとんどはまだ見つかります)。しかし、もっと重要なことは、ポリグロット全般に関する結論に達しました。大きなポリグロットは、#コメントの乱用または/*コメントの乱用という2つの広いカテゴリのいずれかに分類される傾向があります。

これはとにかく事実や制限ではなく、私の次のいくつかの答えを導いた個人的な精神的枠組みによるものです。

ここから、これが世界最大の多言語になるとしたら、それを現在のように推測すると、両方のコメントファミリーからのコメントの悪用を活用できれば最高だと考えました。そこで、私は/*コメント言語を組み込む方法を見つけるために着手し、主に個人的な親しみやすさのためにCファミリーに向かってプッシュしました。

C ++初期テスト

このための私の最初の思考プロセスが主な原因私の馴染みのc#を使用していたとC#のための最初のハードルは、それがで起動しなかったライン受け入れることができる状態にポリグロットを得ていた#そうでない場合はスクリプト言語によってコードとして扱われずに。Railの回答と、それに至るまでのいくつかのバイトを膨らませる回答が、この部分を解決しました。

次は、最初の/*コメントブロックを開始する方法の問題です。#Perl、Ruby、Pythonから見えないようにするには、行をaで始める必要があることはわかっていましたが/*、C#で読み込まれる前にあったものは何でもです。#region最初はC#タグを試しましたが、2D言語にはあまりにもうっとりしていることがわかりました。C ++と入力します。

C ++には、すべてがで始まるいくつかのプリプロセッサディレクティブ#があり、2D言語が横断するための多くのオプションがあります。しかし、それらのすべてが少なくとも1つの言語と互換性がなく、C ++で公開されたコードスペースにあるため、回避策は限られていました。欲求不満と絶望から、私はC ++が#コメントブロックの前に1つだけを受け入れるという事実につまずきました。さて、何でも、それは実行可能です。それで#/*、ポリグロットの最初の3文字として機能するという推定を進めました。

基本的な検証の2番目の部分は、実際の印刷ステートメントが他のコードとうまく共存できるようにすることでした。私はBrain-Flakの回答から、Japtはエスケープされていないものが好きではなく{、C ++が言うのに必要でint main() {std::cout<<37;}あり、C ++はコードの途中でJaptのエスケープ文字を許可しないことを知っていました。今回は、このステートメントのためだけにJaptのリテラル文字列を削除しても、Japtが同じ結果を喜んで生成することを発見できたのは幸運でした。

一方、Brain-Flakは{}どちらも好きではありませんでしたが、C ++がand ステートメントの#間に問題がないことを発見できて幸運でした。int main(){std::cout<<37;}

したがって、C ++の主要な問題が理論的に解決可能であることが証明されたため、私は導入したすべてのエラーを解決するという困難なプロセスを開始しました。

2D風景

この答えの最も難しい部分は、ポリグロットの上位2行の再構成でした。そして、最も重要な問題はでした*。アンダーロードでは*(。これは空のスタックでの数学演算と見なされ、エラーだと感じます。そのため、ポリグロットは(前に必要でした/*が、C ++はこれを許可できませんでした。そのため//、最初の行にC ++行コメントを追加してaを非表示にして(から、2行目を#/*

次に、Befungeは、/何も分割されないというaのアイデアが本当に好きではありませんでしたが、既存のBegungeの答えを研究した後16/"<"6/b.q@、数字と文字列が前に一緒に破壊されるというアイデアにつまずきました//。それはうまくいき、なぜこれでC ++が大丈夫なのか分かりませんが、# 1"16" 2オープニングステートメントとして受け入れます。質問するつもりはありませんが、機能するにはスペースが必要であることは知っています。

行1

Japtはかなりスペースに敏感であることが判明し、トップラインのバックティックベースの文字列には入りたくなかったため、それとPipのバックティックは2行目に移動し、1行目に多くの言語体操を余儀なくされました。

  • Pipは1行目のほとんどを気に入らなかったため#、コメントを示すために2番目のスペースを最初のスペースの後に配置しました。
  • (アンダーロードのためには、先行してJAPTの外に脱出しなければなりませんでした\
  • #Turtlèdのジャンプターミネータであるため、必須でしたが、Pythはこれをエラー終了ループと見なしているため、Pyth /#
  • 私は@最初の行で何をしているのかもうわかりませんが、@Pythのドキュメントによると意味のあるキャラクターではありませんが、PythとJaptはそれが存在することを好むようです。
  • そして;、この時点で最初のものは結果なしで削除できるように見えるので、Pythに関連していると思われますが、そこで何が解決されたかはわかりません。しかし、将来のソリューションでは、バイトを省略することでバイトを節約できるようです。
  • <> <とTurtlèdはどちらも基本的に以前と同じように機能します。<> <は最初のもの#を反映し、1 行目の最後まで折り返します。そして、Turtlèdは#私が述べたようにジャンプし、"14"それが印刷する文字列で終わります。

2Dルーティング

これらの問題が解決されたため、次の段階は2D言語のルーティングでした。以前は、前のイニシャルvはBefungesによって無視されました#が、HaystackとMinkolangを送信しました。現在、初期スペースは、Minkolangを3次元に沿って送信しようとします。このドキュメントでは、これを時間次元と呼びます。

Minolangの3次元についてはさておき、私にとってこれを時間次元と呼ぶのは間違っているように思えます。概念を説明するこのリンクを見つけるまで、私は本当にそれを得ませんでした、そして、それは3Dチェス盤の複数の層のようです。私の考えでは、これが3D言語の一般的な動作方法です。しかし、これは私にとって新しい概念だったので、他の人にはこの情報を捨てると思いました。

したがって、Minkolangの複数のレイヤーは$$$、ここでRailコードの最後に投げた行で区切られています#-3o4o#$$$。Minkolangはスペースにヒットし、最初>に落ちて<>3N.<> ␉//右に3を出力します#>。Perl6コメントブロックを終了しようとするため、この行を開始できませんでした。SMBFとBrainのバランスを取る<代わりに使用されます#-ほら ただし、これはBrain-Flakスタックスワップ手順であるため、<>Minkolangが終了した後、Brain-Flakの正しい答えに戻るために2番目のセットが使用されます。

Labrynthは同様にスペースにぶつかりますが、Labrynthは列1で下に移動します。次に、行2を下って3別の壁;に到達し、再び南に曲がり、a を押すと3がポップされます。 。その後、プログラムは右に進み、そこで36が保存および印刷され、最終的に@出口を見つけます。このパスは必要以上に長くなっていますが、表示される行に関係なく、Prelude !が現在よりも左にある場合、通常の出力の前にヌルバイトを出力することがわかりました。だから私はそれをもっと正確にした。そうするためのスペースがあったからだ。

次に、Haystackのルーティングが変更されました。/これは、v1行目より前に来て、Rengのようにそのパスを反映しているためです。幸いなことに、レンは穏やかに同居しています。1つの問題は、Haystackの針|がRengのリフレクターであったため、Rengは#Rを正しく終了するために、針の上にジャンプ()のようなBefungeを使用していることです。

Befungesは、1行目まで続きv、2行目で下に向けられ、次に右に向けられて、前と同じコードで終了します。私の感覚では、コードを有意義にトラバースしようとしている言語が少なくなったので、この作品を少し掘り下げることができますが、頭を叩くのにこれ以上壁は必要ないので、そのままにしました。

最後に、Cardinalの出発点は%、既に密集した上位2行に集中する必要は特にありませんでした。そこで、Pythonの文字列に移動しました。複数のコードパスもx'で区切られ、ポインターの移動が終了します。

ライン2&3

ここでの唯一の重要な変更点は、:何らかの理由ですべての人がゴルフをしたことです。プレリュードの(ニーズかもしれませんし、単純なバイトカウントの問題かもしれません。おそらく両方でしょう。もう1つは、トリガーのジャンプコードが元に戻り、としてブランド変更されたことauaaZです。Befungeのコードパスを満た​​すためのスペースがありましたが、これが最適と思われました。また、<次のこの部分は、SMBFのフォローのバランスをとることです>最後に、2行目の終わり近くにある唯一の人は、05AB1Eの文字列を維持することです。また、yy3行目は、迷宮の単なるフィラー文字です。

ビッグストリングエソランズ

上の2行が解決されたので、完全に構文解析されたエゾランを掘り始める時が来たので、Pipに問題があることが判明しました。覚えているのであれば{std::cout<<37;}、Japtがこれをコードとして扱うようにするために、Japtストリングをドロップアウトすることで中括弧を処理しました。さて、Pipは同じ文字列構文を使用しており、コードとしてこの行を好まなかったため、PipにはJaptと非常に似た文字列宣言オプションがあります。どちらも単一の'文字列を宣言するために単一を使用し、両方とも同じエスケープ宣言を使用し、両方とも文字列識別子として\受け入れ"ます。そのため、Japtに同じことを信じさせずに、これを文字列だとPipに信じ込ませることは困難でした。

しかし、Japtには悪用可能な違いが1つあることが判明しました#。次のキャラクターのASCII値を使用します。そのため#"`、Japt / pip文字列を終了し、Jipにasci値を取得するように指示する"と同時に、Pipに新しい文字列を開始するように指示します。"おそらく代わりにバッククォートされている可能性があり、おそらくもっと良かっただろうが、思考の私のラインは、文字列操作の別の点として内側に異なる文字列識別子を使用することでした。そのため、今後数バイトを節約できる別の場所があります。

次に、Pipを文字列に残したまま、中括弧の後にJapt文字列を開始する必要がありました。これは'"`、単一引用符、二重引用符、およびバックティックで行いました。Japtの場合、これ'は文字列に含まれないため、次の文字を単一の文字列としてとるインジケータです。Pipはを'文字列の一部として認識し、文字列をで終了します"。そして最後に、`PipとJaptの両方に、別の文字列が始まり、ポリグロット全体で、両方の言語が正常に完了する最後の行まで続くことを示します。

現在、JaptとPipの両方がこの時点で機能していましたが、使用"するとコード露出を引き起こすエラーが発生したため、05AB1Eは失敗しました。幸いなことに、これは"、文字列操作のセットをそのままにして、別のもののセットを全体の周りに置くことで解決するのに十分簡単でした"`#"\\'*/{std::cout<<37;}/*'"`"

最後に、現在の行はこのようint main() #/*"`#"\'*/{std::cout<<37;}/*'"`"に見えますが、Underloadに問題がありました。連続した*のは別の構文エラーだったので、私はそれをなだめるためにの()真ん中に投げました*

壊れやすいエソラン

今の大きなハードルはホワイトスペースでした。ホワイトスペースソリューションの大部分はすでに説明されている説明に組み込まれているため、ここでは詳細に説明しません。ホワイトスペースがいくつかの決定を余儀なくされた事例については、単に説明しました。迷宮を見ています。ただし、大きな変更点は、Whitespaceの回答を出力する実際のコードが、1-3ではなく2-4行にあることです。これは、主に1行目のJaptのコード公開によるものです。

Thutuはもともと、この行が何であったかという問題を抱えていましたint main() #/*()"`#"\'*/{std::cout<<37;}/*'"`"。そこで、#コメントインジケーターの背後にあるすべての問題を隠すために、最初の直前に改行を投げて、/コードが公開された他のすべての場所に大量の後続のをスパム送信しました。

この時点で、Hexagonyを調整し、新しい問題を発見しました。当初のコードは、スタックをクリアしなくなったために開始さ# 1"16" 1れました。だから、私はちょうど削除され、今、出力123これはに開口部の策略を変更することで解決するのは簡単だったとまでHexagonyピースをゴルフ。 +/+23!@+# 1"16" 2/3!@

Whirlにはいくつかの変更がありましたが、ほとんどの場合、Whirl-Incidentラインの前に適切な数の先行1が現れることを確認する問題でした。ただし、インシデントには特に困難なトークンが1つありました。とのコピーがちょうど3つ/*ありました*/

最初*//*は、コード内の古い場所を投げてそれぞれの4番目のコピーを作成したかったのですが、Underloadは連続したを*再び見ました。最終的に私が投げた/この行の最後にint main() /*それがで終わらせるために/*/、私はトークンが重なって作るだろうと思って、私は唯一の2つのトークンの1の4つのコピーを作成することに成功しました。そうそう。それがその仕組みです。まあ、私は/決勝戦で同様のものを投げて、*/そこに4位を作ります。この後、最終的な行のこの文字列に含まれるいくつかのインシデントトークンの4番目のコピーで、多数の六角形のノーオペレーションを置き換えました7LEintndus({})!<>+

結論

わかりました、それは私がこの大規模なリファクタリングのために持っているすべての詳細です。次回についてはあまり書かないことを約束します。C ++がこのポリグロットの良い選択か悪い選択かは実際にはわかりませんが、いくつかのオプションが開かれていると感じています。これが良いことになることを願っています。

ハッピーコーディング。


2
以下のように見えるg++が必要です.cppので、私は、そのファイルの拡張子に特定のセクションを追加しました。その後、それrun-wrapper.shを処理するために使用する必要がありました。編集します。
SnoringFrog17年

1
私は追加したいシンボリックbrainfuckを -それは簡単に追加だとしてこれに、しかし、Unicode文字のクラッシュpython2 - _
SnoringFrog

1
@SnoringFrog 絵文字
チャンス

1
また、**Underloadの構文エラーではありません。それは多くのスタックを消費するだけで、その時点では利用できなかったと思われます(おそらくコロンをゴルフアウトしたため)。スタックの前または間に括弧で括られたグループまたはコロンをスタックに追加するか、場合によっては括弧で括ってアンダーロードからコードを隠すことができます。

2
@ ais523 Cのごく初期の段階では、不要な場合に時間を節約するために、最初の行が#で始まっていない限り、プリプロセッサは実行されませんでした。ただし、最初の行をプリプロセッサステートメントにしたくない場合、実際には何もせずに#で始まる最初の行を持つ方法が必要になるため、nullディレクティブがあります。これを使用したコードとの後方互換性が、標準に含まれる理由であると強く考えています。
ミューザー

34

3. Minkolang v0.15(26バイト)

#>>>>>>>>v
print(1)#>3N.i2

このプログラム印刷1のPython 3において、2はVimで、そして3 Minkolang v0.15で

2D言語を導入することで物事を混乱させないことを願っています

オンラインでお試しください!

説明

#                     stops program from moving through time (really does nothing)
 >>>>>>>>             I can't use a space because then the program will move through time
         v            go down
         >            go right
          3N.         Outputs 3 and end program
                      Anything afterward is ignored since program has ended

VimはどういうわけかMinkolangを無視するので、それは良いことです

Pythonはコメントを無視するため、Pythonには実際には問題はありませんでした。 #

次...

次の言語では#、リフレクターとして機能するため(> <>のようなものを推奨します(そのため、方向が左に変わり、右に完全に折り返されます)。他の言語で無視できるコードを追加できます。


16
「時間を移動する」ワット?
TuxCrafting 16

5
@TùxCräftîñgMinkolangには3つの次元があります(2d =通常、3番目は時間です)。TBH、私はそれを理解していない、それだけでTIOリンク上の説明であることを述べて
牛いんちき

@ mbomb007正確に何を指しているのですか?
牛は

1
@TùxCräftîñg私はそれができないと思う
-dkudriavtsev

1
@wat Hmこれは理解するのに時間がかかりすぎた
-TuxCrafting

34

5. Python 2(35バイト)

#3N.;n4
print('1'if 1/2else'5')
#i2

このプログラムは、印刷物1のPython 3において、2はVimで、3 Minkolangのv0.15で、4 > <>および5のPython 2インチ

オンラインベータ版をお試しください!

Python 2では、1/2は0です。これは偽の値であり、Python 5を印刷します。Python3では、1/2は0.5であり、Pythonは1を印刷する真理値です。


1
私はそれがMinkolangで動作を確認することができます
牛はいんちき

1
print('1'if 1/2else'5')1/2と他の間にスペースなしで私のシステムを中断します
タソスパパスティリアーノ

まあ、TIOの両方のバージョンで動作します。
betseg

28

4.> <>(29バイト)

#>>>>>>>>v;n4
print(1)#>3N.i2

このプログラム印刷1のPython 3では2のVimで3 Minkolangのv0.15とで4 >で<>

オンラインでお試しください!

コード実行

#             - change direction to left
            4 - add 4 to stack
           n  - print as a number
          ;   - end the program

さらに別の2D言語。

方向が変更された後に文字が追加され、何らかの理由でVimによって無視されるため、Minkolangには影響しません。#Pythonでのコメントなので、変更はありません。


28

28. Brain-Flak、280バイト

#v`16/"<"6/b.q@"(::):::   (22)S#;n4"14"
#>3N6@15o|> ^*ttt*~++~~~%
#=~nJ<R"12";
#[
#`<`|
print((eval("1\x2f2")and (9) or (13))-(0and 4)^(1)<<(65)>>62)or'(\{(\{})(\{}\/^23!@[()])}\{})(\{}\{})'#@46(8+9+9+9+9+=!)=#print(17)#]#echo 21#|/=1/24=x=90/
#8␛dggi2␛` |1|6$//''25  #>say 27#"26

␛は、通常どおり、リテラルESC文字を表します。

このプログラムは、印刷28脳フラックに27のPerl 6において26 05AB1Eで25ピップで24 Thutuで23 Hexagonyで22過少で21ニムで20プレリュードで19(試験Rengにここに、)18カーディナルで17ジュリアに16 Pythで15干し草で14 Turtlèdにおいて13ルビーで 12核分裂で 11 Befunge-98で 10 Befunge-93において 9はPerl 5において 8網膜において 7 JAPTにおいて 6 SMBFで 5のPython 2で 4 > <>で 3でMinkolang 2のVim / Vで 1のPython 3で

まず、この課題に貢献できることは何という特権かを言いたいと思います。私は数週間前にコードゴルフについて聞いただけで、それ以来絶対に夢中になっています。この課題を見つけたときに最初にしたことは、作業できるものを見つけることができるかどうかを確認するために、さまざまな言語でコードをそのまま実行することでした。これは、#6のようになっていたときに戻ってきました。私は正直、この挑戦​​は不可能だと思っていましたが、ここにあります(#28わあ!)。当時私が見つけたのは、Brain-Flakが値2を出力したことです。そこで、私はそれを学ぶことを始めました。

Brain-Flakは、この種のチャレンジにとって非常に優れていることが判明しました。なぜなら、それはかなり簡単に学ぶことができ、を除くほとんどのキャラクターを無視するから(){}[]<>です。#同じ行でそれ以降のコメントも発生するため、Brain-Flakで検討された最後のサブミッションの唯一の部分は、print((eval("1\x2f2")and 9 or 13)-(0and 4)^1<<65>>62)次にペアになった部分のみでした((())()<<>>)。だから、計画は私がPythonコードと考えるようになったものに余分な括弧を追加するようになりました。

pythonビットを変更してBrain-Flakで解析します。((() () ())()()<<()>>)これは2スタックに相当し、最初は5、2番目は3です。その後、5 with ({({})({}[()])}{})を2乗し、3 withに結果を追加し({}{})ます。この二乗と追加は、Pythonの観点から文字列で行われます。ここでPythonの理由を理解できるとは言えませんが、この文字列は他の言語では意味のある方法で評価されていないと確信しています。ただし、いくつかの例外があります。

Japtは、文字列内の中括弧をコードを含むものとして解釈しますが、これらはこの文字列の\それぞれの前でエスケープするのに十分簡単でした{。しかし、これによりバイト数が増大しました。それが人生だ。

プレリュードは、すべての括弧でかなり寛容でした。以前のコメントでは、Preludeには垂直に配置された括弧があり、たまたま1つしか作成できなかったことが指摘されました。甘い!(一番上の行では、とと並んで(9大きなラインで。その(ため、一番上の行の前にスペースを追加する必要がありました。ここでの私の仮定は、ダブルスペースが何かのコメントインジケータであったため、スペースを追加するのは簡単なように見え、それが機能したことです。(9)代わりにスペースを追加しようとしましたが、枢機 'は協力しなかったことを指摘する必要があります。

05AB1Eは、二重引用符でカプセル化されたPython文字列に対する私の最初の試みを好まなかったが、一重引用符を使用することに誰もが満足しているように見えた。大した問題ではありません。

この時点で残っている言語は六角形のみであり、明らかに次の六角サイズのしきい値をかなり超えていたので、汚れる時間でした。これ/^23!@はHexagonyのコードであり、今後の追加がはるかに簡単になると思うので、とても興奮しています。この小さなピースは、基本的にコードを破壊することなく、Python文字列内のどこにでも移動できます。これは完全な文字列であるため、全員が同じページにいます'(\{(\{})(\{}\/^23!@[()])}\{})(\{}\{})'/NWは、私たちがして余裕の多くを持って、この文字列を、> EをダウンW-する> -ここにSEからHexagonyのパスを設定します。(上記\はエスケープすることです/thutu BTWの場合)。ここでの私の考えは、変更を加えると、ある時点でこの文字列を通過する可能性があり、文字列内で六角形の部分をスライドさせてコードパスをキャッチし、適切な結論に送ることができるということです。Japtとの間に来ないように注意\してください{。これに問題がある場合@は、文字列の右側が別のHexagonyソリューションから残っているだけで、他の言語に影響を与えることなく削除できます。もちろん、Hexagonyのコードパスを逆方向にキャッチする場合は、もちろんの@!32^\代わりに使用できます/^23!@。また、あなたは私のソリューションが===2コードを使用して、バイト制限を超えないようにします。ここで誰かがこれは六角形の整列のためであり、私はもうそれを必要としなかったと述べました。

最後に、ここでは、デバッグできるようにテキスト行を六角形の読み取り可能な六角形に変換するcodegolfを調査中に見つけたコードの一部を示します。多くの人がこれについて知っていると確信していますが、ここに投稿されたのを見たことがないので、他の人にも役立つかもしれません。公正な警告です。入力を変更してバックティックとキャリッジリターンを削除し、通常のスペースを占有するものにリテラルエスケープをスワップして、コードをきれいな六角形に整列させる必要があります。

PS私がこれを書いている間、私は間違いがあることに気づきました。私はHexagonyのメモリエッジをでクリアすると信じていました^が、どうやらそれをノーオペレーションで結果に置き換えることができるようです。それは^おそらくAである必要があり+ますが、このセクションを操作しようとした場合。私は明らか+にこれに先立って通過していましたが、将来のポリグロッターはそれほど幸運ではないかもしれません。

幸運を!


投票の前にランダウンと説明を待っていましたが、ランダウンはよさそうなので、説明を待っている間に投票します:-)。余分なバックスラッシュはすべて、Thutuの構文エラーを回避するためのものだと思いますか?また、コードを追加した場所に対する興味深いアプローチは、Hexagonyと関係があると推測しています。完全な説明を見るといいでしょう。(また、PPCGへようこそ!)

そして今、私は説明を見ます。私はそれを読んで楽しんだ。「Pythonコードは、」実際には、いくつかのスクリプト言語(PythonやPerl 5の、ルビー)で使用されるが、それらはすべて解釈されるandor脳高射砲は仕事に何が起こるのスクリプト言語で実行コードをコメントあなたの方法ようではなく、同じようにそれらのすべてで。

1
ありがとう@ ais523。あなたは私のコードの配置に言及しました。だから、私はスクリプト言語に見えるどこかにブレインフランク演算子を配置する必要があることを知っていました。これはRetinaでは機能せず、Retinaを修正しようとして作成した2D言語の問題と、可能であれば対処したくありませんでした。私は幸運にも現在の配置につまずきました。
チャンス

2
素晴らしい答え、そして非常に徹底的な説明!あなたがブレインフラックを楽しんでいると聞いて本当にうれしいです。:D
DJMcMayhem

25

38. C、804バイト

#  1"16" 3//v\(@#/;n4"14"
#/*`3 auaaZ<>16/"<"6/b.q@")(22)S#  ␉␉␉␉ 
#yy␉;36!@
# ␉
#=␉>
#[#yy#yy0l0mx01k1k0l0ix0jx0h0h1d111P0eU0bx0b0o1d0b0e0e00x1d0i0fx0g0n0n11x0o0n0cx0c0o0f0c0gx0g0f0h0j0j0i0001k10mx0m0l11111100(^_)
#`<`␉|
print((eval("1\x2f2")and( 9 )or(13 ))-(0and 4)^1<<(65)>>(62))or'(\{(\{})(\{}[()])}\{}\{}\{})'#46(8+9+9+9+9+=!)#1|=/=1/24=x=9[<$+@+-@@@@=>+<@@@=>+<?#>+.--.]/
__DATA__=1#//
#.\."12"*␉
""""#//
=begin␉//
#
#*/␉
#define␉z  sizeof 'c'-1?"38":"37"
#include␉<stdio.h>
int main()  /*/
#()`#`\'*/{puts(z);;}/*'``
$'main'␉//
#-3o4o#$$$
<>3N.<>␉//
#xx
#x%~~~+␉+~*ttt*.x
#xx
=end   #//
"""#"#//
#0]#echo 21#/(\[FAC,1<-#2FAC,1SUB#1<-#52FAC,1SUB#2<-#32FACLEGEREEX,1PLEASEGIVEUPPLEASE)  ap
#_~nJ|#o51\   
#0␛dggi2␛`␉|1|6$//''25  >>>#>27.say# =#print(17)#^_^_7LEintndus({})!<>+]/*///Z222999/(3!@)"26

リテラルタブ、リテラルESC文字。それ以外の場合、Stack Exchangeはプログラムを破壊します。作業したい場合は、下のTIOリンクの「入力」ボックスからプログラムをコピーすることをお勧めします。

オンラインで試してみてください!

流れ落ちる

このプログラムプリント38 Cで37 C ++で36ラビリンスにおいて、35 INTERCALで、34レールで、33事件で、32ワールにおいて、31モジュラーSNUSPで、30空白で、29トリガーで、28脳フラックで、27 Perl 6の、中26 05AB1Eで、25ピップで、24 Thutuで、23 Hexagonyで、22過少で、21ニムで、20プレリュードで、19 Rengで、18カーディナルで、17ジュリアに、16 Pythで、15干し草で、14 Turtlèdで、13ルビーで、12核分裂で、11 Befunge-98で、10 Befunge-93において、9はPerl 5における8網膜において、7でJAPT、6 SMBFで、5のPython 2で4 > <>で、3 Minkolangで、2 V / Vimの中に、及び1 Pythonの3インチ

検証

ほとんどの言語は、上記のテストドライバーによってテストされます。ここでRengを、ここでModular SNUSPをテストできます。必要に応じて、それぞれ19と31を出力します。

これは、少しゴルファーが少なくなるように設計されていますが、もう少し便利になるように設計された、Incident tokeniserの私の微調整バージョンです。

説明

私はいつも小さなポリグロットを作るのが大好きでしたが、これほど大きなものはありませんでした。おそらく試してみるべきだと思いました!

@Chanceの素晴らしいC ++の答えの後、Cは次の論理的な選択肢のように見え、(以前のいくつかの答えと比較して)比較的簡単に追加できるので、チャンスがあったときにそれを選ぶことにしました!

CとC ++の違いを伝えるために、非常によく知られたトリックを使用しました。C ++では文字定数のsizeofは1バイトですが、Cではint(少なくとも16ビットであることが保証されています)。私は愚かな間違いを犯しました。

最初にprintfすべてをインラインで実行しようとしましたが、複数のブラケットがJaptの問題を引き起こしているようでしたので、それを修正するように見えたラインをよりシンプルにしました。

次に、Cardinalが気に入らなかったの%は、printfのせいだったので、文字列の操作に切り替えることでそれを解決する必要がありました。

文字列を割り当ててからCの動作の2番目のバイトを変更しようとする次の試みは、非常に長くなりすぎて、Hexagonyを次のサイズに押し上げることになりました。それをやり直さなければならない余分なキャラクターの中に保持することで、やり直しを避けたいと思いました!このために取得できるすべてのバイトが必要だったため、@ Chanceによって提案されたバイト節約の変更を実装しました。

だから私はCコードを少し下puts(sizeof'c'-1?"38":"37");に置いて、アンダーロードがセグメンテーション違反であったことを除いて、ほとんど機能するものを思いついた。おそらく括弧内の複雑な表現のためだ。

Perl6での>>マッチングに必要だった余分なものを削除した後でも、その<<複雑な部分をchar配列の割り当てに分割するための簡潔な方法を得ることができませんでした。そのため、代わりにプリプロセッサを使用することにしました。

多くの試行錯誤の後、Retinaが好むと思われる解決策を見つけました。ずっと前から最後まで問題を引き起こしていたプレリュードは、なぜ壊れているのかを見て回る前に自分自身を修正することになりました(ブラケットまたはある!段階で三元にいたと思います以前の回答)。

その間ずっと、ホワイトスペースにパッチを当てて、ホワイトスペースが欲しいものを手に入れていました。かなり簡単だと思いました。具体的にtab space space spaceは、非常に便利な組み合わせでした(スタックの上位2つのアイテムを追加する命令)。これは、すべてが同期しなくなることなく、他の空白なしで行に空白を追加できることを意味したためです(私はその位置を推測しています)プログラムは実際には実行されないことを意味するため、ここではスタックアンダーフローについて心配していません)。

インシデントをテストしましたが、機能します!@Chanceと@LliwTelracsに感謝します。ウェールズの名前ではないことに気付いたのは、それを理解するのを助けてくれたからです。この構文の強調表示を参照してください。;トークンの前に表示されていたトークンを削除しました#yy。私は単純に、余分なを追加することによって、これをした;後にgets(私の以前の試みは、置き換え関与声明sで「detokenising」の文字列で、今では以前のものにしたよりCプログラムでははるかに表示される() ;、それは私があったが、実際、Hexagonyの短い文字(@Chanceに感謝)であるため、この最後の行に余分な文字を追加しようとして失敗した後、元に戻し、余分なセミコロンを別の場所に追加しました)。

また、空白を少し調整して、他のいくつかのトークンを変更して、センタリングを試行し、タブの改行を再トークン化して(行末のタブを中央に移動して、#include3つのトークンを作成します)、行内の1つのスペースを移動することにより、トリプルスペーストークンをトークン化解除しますdefine

最後に、最初の投稿から1日後、gccが生成した(そしてClangが失敗した)恐ろしいプリプロセッサ警告の最下部に到達することにしました。最初の行がまったく機能した理由は、元のファイル名や行番号などのデバッグ情報を提供するプリプロセッサからの出力だからだと判断しました。彼らは最初の行の最初の "2"が好きではありませんでした。これは「インクルードファイルから指定されたファイルに戻る」ことを意味し、インクルードファイルがない場合は明らかに不可能です。"1"(通常のヘッダーを開始)に変更した後、いくつかの言語にチョークがかかりすぎたため、 "2"に依存していたため、 "3"(内部コンポーネントヘッダーを開始)に変更しました。そのため、六角形コードの開始時に、オープンブラケットを追加しました(3を2にデクリメントし、六角形コードの)終わり(@)の後の閉じ括弧で、Retina、Prelude、Underloadを満たし、すべて一致する括弧を期待します。RengとModular SNUSPを再テストしても問題は発生せず、インシデントトークンは正しく見えたので、修正しました。さまざまなエキゾチックなアーキテクチャでテストしましたが、動作するようです。コードゴルフにとって重要ではないことはわかっています。将来の提出者がバイトカウントなどを維持するためにこれを再度解除する必要があるかどうか(または、このソリューションに基づいて既に開始していて、変更したくない場合)しかし、私がこれを行った理由は1つあります。TIOのObjective-CコンパイラはClangのみをサポートしているため、これを追加したい場合は非常に便利です。

私はこれらの言語のほとんどを使用したことがないことを覚えておいてください。私の成功がこれを試してみることをより多くの新参者に奨励することを望みます!


@LliwTelracs Huh、彼の答えでチャンスによってリンクされたCプログラムは、トークンのリストに対して異なる出力をしていました:^ _ ^ _
ミューザー

エラーは、タブまたはエスケープを認識できなかったため、値をコピーしてプログラムに貼り付けていたことでした
-f –nɛtɪk

@LliwTelracsトークン化を自分で理解しようとすると、セミコロンが3回表示されるようになりました。六角形の位置がずれてしまうので、バイトをspareしまないとは思わないことを除いて、余分なものを追加できます。うーん
...-ミューザー

1
インシデントは機能します!
ミューザー

1
@Chance私はちょうどその最初の行がCプリプロセッサでどのように有効であるかを見てきました、それはデバッグ情報などに使用されるプリプロセッサからの出力のように見えます。ライン1"。そもそもファイルにアクセスしたことがないため、Clangがチョークする(およびgccに警告する)のは2であると思うので、戻るものは何もありません。機会があれば、他の言語に変更してClangでもコンパイルできるようにする実験をするかもしれません。参照してくださいgcc.gnu.org/onlinedocs/cpp/...
Muzer

25

65. ALGOL 68(Genie)、1634バイト

#16  "(}+?23!@)-("//*\Dv;'[af2.q]PkPPX'#CO)"14";n4
#/*0|7//```"`   [-'][!(>77*,;68*,@;'1,@10␉␉11)(22)S␉␉(1 P''53'S^'q
#>␉
# 36!@␉`
#
#_>++++.>.}+?
#`<`
#<]}} +<[<.>>-]>[
#{
#z}
#
#=x<R+++++[D>+++++++59L+++<-][pPLEASE,2<-#2DO,2SUB#1<-#52DO,2SUB#2<-#32DOREADOUT,2PLEASEGIVEUPFACiiipsddsd4O6O@oh]>@@+.---@.>][
#x%+>+=ttt Z_*.
#D>xU/-<+++L
#R+.----\).>]|
#[#[(?2?20l0v0x1k1kMoOMoOMoOMoOMOO0l0ix0jor0h0h1d111x0eU0yx0y0moO1d0y0e0e00m1d0i0fx0g0n0n11MoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOmOoMOo0moo0n0tx0t0moO0f0t0gOOM0g0f0h0j0j0i0001k1x0vx0v0l111111^_00)
[ "]56p26q[puts 59][exit]" ,'\[' ];#/s\\/;print"24";exit}}__DATA__/
#
###x<$+@+-@@@@=>+<@@@=>+<?#d>+.--.

#
'(((p\';a=a;case $argv[1]+${a:u} in *1*)echo 50;;*A)echo 54;;*)echo 58;;esac;exit;';print((eval("1\x2f2")and 9or 13)-(0and 4)^1<<(65)>>62)or"'x"or'{}{}{}{}({}<(((((()()())){}{})){}{})>){(<{}(({}){})>)}{}({}())wWWWwWWWWwvwWWwWWWwvwWWWwWWWWWWWWwWWWWwWWWWWWWwWWWWWWWW li ha '#}#(prin 45)(bye)46(8+9+9+9+9+=!)((("'3)3)3)"'
__DATA__=1#"'x"
#.;R"12"'
###;console.log 39
""""
=begin
<>{nd
#sseeeemPaeueewuuweeeeeeeeeeCis:ajjap*///;.int 2298589328,898451655,12,178790,1018168591,84934449,12597/*
#define p sizeof'p'-1?"38":"37"
#include<stdio.h>
main ( ){puts(p);}/*
print 61
#}
disp 49;
#{
}<>
$'main'3
#-3o4o#$$$
#<T>"3"O.s
=end
"""#"
#}
#s|o51~nJ;#:p'34'3\=#print (17)#>27.say#]#print(47)#]#echo 21# xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi ax fwwvwWWWwWWWWwvwWWwWWWwvwWWwWWWwvwWWwWWWwvwWWwwwwwwwwwwwWWWwWWWWWwWWWWWWWwWWWWWWWWWwWWWWWWWWWWWWWWWwWWWWWWWWWWWWwvm 
# sss8␛dggi2␛`|$// ''25  16*///~-<~-<~-<<<~-XCOprint("65")#s^_^_2229996#

VIPスコア(Versatile Integer Printer):.005949(改善のため、次のエントリは1710バイト以下にする必要があります)

オンラインでお試しください!

流れ落ちる

このプログラムは、印刷65、ALGOL 68内を64苦悶において、63ブライアン・チャックにおいて、62草で、61サイロ、60 Moorhens 2.0で、59のTclで、58 Kshをで、57ワイズで、56 DCで、55脳内-Flakクラシック、54 Zshの中に、53ショーブで、52 COWで、51のアセンブリにおいて、50 bashで、49オクターブで、48 Deadfish〜で47リリーで、46 Cubixで、45PicoLispで44 alphuckで、43網状で、42悪に、41 brainfuckで、40最小-2Dで、39のCoffeeScriptで、38 Cは、37 C ++では、36ラビリンスにおいて、35 INTERCALで、34レールで、33入射で32ワールにおいて、31モジュラーSNUSPで30空白で、29トリガーで、28脳フラックで、27のPerl 6において、26 05AB1Eで、25ピップで、24 Thutuで23 Hexagonyで、22過少で、21ニムで、20プレリュードで、19 Rengで、18カーディナルで、17ジュリアに、16 Pythで、15干し草で、14 Turtlèdで、13ルビーで、12で核分裂、11 Befunge-98で、10 Befunge-93において、9はPerl 5において、8網膜において、7 JAPTにおいて、6 SMBFで、5のPython 2で4 > <>で、3Minkolangで2、V / Vim で2、Python 3で1

検証

ほとんどの言語は上記のテストドライバーでテストできますが、6つの言語をローカルでテストする必要があります。

  • ここで出力19にRengをテストできます

  • ここで 31を出力するためにモジュラーSNUSPをテストできます

  • トークンの手動バランス調整により、インシデントがテスト33で検証されました。

  • Deadfish〜は、このインタープリターを使用して、ローカルで48を出力するようにテストできます。Deadfish〜は標準入力に与えられるポリグロットを取得しますが、いくつかの>>プロンプトを標準出力に出力します。これは、Deadfish〜プログラムを実行することで避けられない結果です。

  • Moorhens 2.0は、このインタープリターを使用して出力60でテストできます。

アルゴル68

ALGOLは、おそらくプログラミングの初期の4つの高レベルプログラミング言語の中で最も知られていません。このあいまいな区別の残りの言語は、COBOL、FORTRAN、およびLispです。ALGOLは当時、学界や数学界でよく知られていましたが、今日では現代言語への大きな影響力で最もよく知られています。実際、最も現代的で実用的な言語は「アルゴルに似た」と表現できますが、少なくともCはもちろん、影響と派生物の独自の系統を持っています。

ALGOLを含めることは非常に興奮しています。これは、コンピューターの歴史におけるもう1つの大きな足がかりであり、ポリグロットと呼ばれるこのモニュメントに追加できるものです。それはクールなものです。

ALGOL68は、3つの主要なALGOL仕様のうち最新のものであり、その他はALGOL60およびALGOL58です。興味深いことに、仕様には固定の構文がありません。つまり、トークンは定義されていますが、スペルは定義されていません。これにより、特定のインタープリターが別のシンボルを使用してコメントブロックを開始する場合があるため、言語はインタープリターに大きく依存します。仕様では、¢コメントブロックの開始として説明しています。しかし¢、ベース127のASCIIコードではないため、使用可能なインタープリターの中でコメントインジケーターとしての使用はあまり見られません。さて、Genieインタープリターはとして綴り¢ます#。これは、キャラクター1を超えてポリグロットを作成するために必要なすべての始まりです。

実際、Genieには3つのコメント構文オプションがあり、他の2つはとcocomment、両方とも太字で書かれていると指定されています。ええ、大胆です。斜体を使用する場合、それは変数です。魔神は、すべての大文字で太字をスペルすることにより、私たちのためにそれを再び解決しました。そしてCO、ポリグロットにはどこにもないので、パーサーからポリグロットを隠す簡単な方法があります。将来CO、言語に必要な場合は、より詳細なCOMMENT構文に切り替えることができます。

ALGOLには行コメントはありません-それらはすべてブロックスタイルであるため、終了する必要があります。ポリグロットの初期状態が与えられると、タートルードが同様に#ジャンプトークンとして使用しているため、ALGOLブロックコメントがすぐに開き、1行目の終わり近くで終了します。Turtlèdは、幸いなことにCand O文字をウォークするのに問題がないので、1行CO目では、2番目の直後に挿入#してALGOL68のファットブロックコメントを開始できます。

ここから、COprint("65")どこかに配置するだけです。最後の行を選択したのは、別の#コメントで行を終了することを好み#、最後の行の先頭でコメントを終了させたくないためです。したがって、ポリグロットの最後の文字としてと#sを使用し#て、ALGOL印刷ステートメントをフォローアップします。s中には、#sバランスを取るためにalphuckためであるpプリントで。

回答59でポリグロットの終わりを開き、これをすべて可能にしてくれた@ ais523に感謝します。

SMBF

ポリグロットの最後に別の文字を追加して、ALGOLの最終コメントを終了しましたが、SMBFは以前にその答えのために最後の文字を読み取っていました。この問題を解決するために、私は8行目にこのコードを変更することにより、最後の文字に2番目を読み取るためにSMBFを変更しなければならなかった[.>-]これまで[<.>>-]。ループの開始時にBFのMPは0であるため、これはSMBFプライベートコードブロックです。

引き金

この時点で、SMBFの奇妙な動作に気づき、これらのコードセグメントとポリグロットの終わりとの関係に関係していました。

•インシデントのジャンプ先: ^_^_

•トリガーのジャンプ先と回答: X222999

•ALGOL68の答え: COprint("65")#s

ALGOLの回答では、コードセグメント内のいくつかのインシデントトークンがトークン化されたため、ALGOLのコードは、インシデントのコードセグメントの前に移動する必要がありました。また、ALGOLは、順序で最初に行った場合、プレリュードのアライメントの問題を引き起こしたため、2番目または3番目に行かなければなりませんでした。一方、SMBFは、インシデントのコードが最後になったときに不可解な障害が発生したため、インシデントを最初または2番目に行かなければなりませんでした。まあ、これは解決できないように見えた入門的な論理問題であることに気づいたので、私は不可解なものをもっと…複製可能にすることに着手しました。

SMBFを歩いた後、^ _ ^ _を最後に持つことの問題はワイズが原因であることがわかりました。ワイズのコード(~-<~-<~-<<<~-)は、ほとんどの多言語とは異なり、非実行ループの後ろに隠れていません。しかし、WiseのコードにはSMBF印刷コードは含まれていません。メモリ値を変更するだけでした。無害に見えた。では、問題は何でしたか?それはBFの前のあのSMだ。

ワイズのコードは実行されようとしているコードの文字を変更しているので、隣接するアスキー値が何かを推測できますか^?です]。Wiseは、SMBFループターミネーターをポリグロットの最後に配置していたため、SMBFは無限ループに陥っていました。それは悪いモジョです。

いくつか考えた後、問題の0バイトの解決策を講じ、トリガーのジャンプ先(X)をその答え(222999)から分離し、ポリグロットを終了しました~-<~-<~-<<<~-XCOprint("65")#s^_^_2229996#。これは、トリガーの答えではないトリガーのジャンプに続いてキャラクターが連続して表示されないためにのみ機能します。

まとめ

これが今回のすべての大きな変更です。1 c行目で説明した部分をカットするために小さな変更を加えましたが、それは純粋にゴルフの変更の場合です。

幸運を!

事故報告書

#<q>"3"O.sなりました#<T>"3"O.sdetokenizingためTの代わりにqバランスで、より効率的でした

<>{<>{ndデトケン化するようになり nd{␊

間のスペースに置く}}+内を#<]}} +<[<.>>-]>[detokenizeに}}+、より安く。


25

2. V(11バイト)

print(1)#i2

このプログラムは、Python 3では1、V では2を出力します。

ボールを転がし、好きな言語を早い段階でミックスに取り入れるためです。:)

それは非常に簡単な答えです。

print(1)#

たまたまVでNOPになっています(幸運なことに)次にi2挿入モードに入り、「2」を挿入します。ここでオンライン Vを試すことができます

もちろん、Pythonで

print(1)

「1」を印刷し、

#i2

コメントです。


2
これはVまたはVimですか?リンクしたインタープリターは技術的には「V」です。
mbomb007 16

@ mbomb007まあ、Vはほぼ完全に後方互換性があるため、意図はvimでした。技術的にはVだと思います。変更するには遅すぎますか?
DJMcMayhem

2
実際には、答えのタイトルを編集するだけです。
mbomb007 16

1
@ mbomb007文字通りのESCキャラクターがそれを行います(これが私が提出物でそれを使用しなければならなかった理由です)。

1
これをテストする際の注意:前のVimセッションから引き継がれたクリップボードがないことを確認する必要があります。
ライキング

24

20.プレリュード、167バイト

#v`16 "<" 6/b0\ .q@#;n4"14""
#>3N9@15o|R"12"*^*ttt*~++%
#=|
print((1/2and 9 or 13)-(0and+4)^1<<65>>62);#35(99999+++++!) =#;print(17)
#       ~nJ<
#
#gg99ddi2` |1|1+6

(間の前回提出の場合と同じ場所にリテラルESCの文字#g、との間2`、最後の行に)、あなたは、印刷可能な文字を挿入モードのうち、Vimを取ることができないので。

このプログラムは、印刷20プレリュードでは19 Reng(テスト可能でここ)、18カーディナルで17ジュリアに16 Pythで15干し草で14 Turtlèdで13ルビーで12核分裂で11 Befunge-98で10 Befunge-93で9 Perlで8網膜において7 JAPTにおいて6 SMBFにおいて5のPython 2で 4 > <>で 3 Minkolangにおいて 2のVim / Vで 1のPython 3で、及びa partridgeナシの木

既存のコードはPreludeでほとんどキャンセルされます。偽の引数を持つwhileループと、気にしないスタックでのスタック操作のみで構成されています。さらに良いことに、(間にそれらを持っているすべての言語でのコメントのコードのスポットがあります#し、=#以前の提出が)。Preludeをこれに当てはめることの難しい部分は、1つのスタックのみで、バイトカウントを増やすことなく数値を生成することでした。このプログラムは、すべてのスタック要素に45を追加し、ASCIIとして出力するループを使用します。したがって、スタックの3の上に5を配置すると20、出力として取得されます。(20は、プレリュードにある19よりも出力しやすい数字です。そのため、回答19を投稿することで、少し助けになりました。)


プレリュードは、将来のプログラムに組み込むのがかなり簡単でなければなりません。トラブルを引き起こす可能性のある人へのアドバイス:括弧を縦に並べないでください。括弧の外側の感嘆符を許可しないようにしてください。また、括弧の外側に数字を配置したら、同じ行にさらに括弧を追加しないでください。私がPreludeプログラムに入れたギャップはまだ開いており、他の1D言語にとって有益な場所であるように見えます(Preludeの一種の1½D、このプログラムでは1D言語のように機能します)。

ニース、プレリュードとパンチに私を打つ:)私は実際にはASCIIのみのVが持つ可能かもしれないと思う:%s置き換え、それでもそれは少しトリッキーだ(とVはテストするために迷惑です)
SP3000

:vimでコマンドを開始するためにa を使用する場合、キャリッジリターンが必要になりますが、これも印刷できないことがあります。:/
ツヴァイ

4
a partridgeA Pear Treeの場合は+10000000000 。しかし、それ5 GOLDはRINGS で印刷されますか?
イミビス16

23

30. 空白、296バイト

#v`16/"<"6/b.q@"(: ::T):  ␉␉␉␉ :(22)S#;n4"14"
#>3N6@15o|>␉^*ttt*~++~~~%
#=~nJ<R"12"; ␉
#[␉
#`<`|
print((eval("1\x2f2")and (9)or(13))-(0and 4)^(1)<<(65)>>62)or'(\{(\{})(\{\/+23!@}[()])}\{})(\{}\{})'#46(8+9+9+9+9+=!)=#print(17)#]#echo 21#|/=1/24=x=90/
#8␛dggi2␛␉` |1|6$//''25  #>say␉␉ 27#T222999"26

␛はリテラルエスケープを表します。

literalはリテラルタブを表します。

このプログラムは、印刷30を空白に29トリガーで28脳フラックに27のPerl 6において26 05AB1Eで25ピップで24 Thutuで23 Hexagonyで22過少で21ニムで20プレリュードにおいて19レン(ここでテスト済み)、18枢機in17ジュリア16パイス 15干し草で 14 Turtlèdで 13ルビーで 12核分裂で 11 Befunge-98で 10 Befunge-93において 9はPerl 5において 8網膜において 7 JAPTにおいて 6 SMBFで 5のPython 2で 4 > <>で 3 Minkolangで 2 V / Vimの中に、及び 1のPythonで3

空白は、文字セットが制限された別のエソランです。これは、タブ、スペース、および改行のみを読み取ります。

したがって、Whitespaceが読み取らないすべてのものを取り出すと、次のコードが残ります。

[space][space][space][LF]
[space][LF]
[LF]
[LF]
[LF]
[space][space][space][space][space][LF]
[space][space][space][space]

そして、30を出力するコードは次のとおりです。

[space][space][space][tab][tab][tab][tab][space][LF]
[tab][LF]
[space][tab]

そのため、既存のコードの上位3行には、要件を満たすために行末に余分なスペースが与えられました。行1のタブと末尾のスペースは、行の中央にあり、> <>のニーズに対応していることに注意してください。

ここでは、行2のスペースがタブに変更されました。これは2D言語のスペースと同じように機能するように見えますが、視覚的にはもう整列していません。¯\ _(ツ)_ /¯

出力30の指示の後、ゲームは無意味なことを行い、正しくコンパイルするために必要なスペースとラインフィードの残りを取得するようになりました。

空白には、任意の数のタブとスペースを許可するラベルを使用してコードの場所をマーク/ジャンプする指示があり、長い行のスペースを埋めるのに役立ちました。また、ラインフィードで始まり、ラインフィードで終了するため、3〜6行目のラインフィードの一部を支援しました。

Retinaを壊さずに最後の行に改行を入れることはできなかったため、その指示は任意の計算とスタック操作を行うことです。

スペース、タブ、および改行を表記に置き換えた完全なコードを次に示します。

#v`16/"<"6/b.q@"(:[Space]::T):[Space][Space][Tab][Tab][Tab][Tab][Space]:(22)S#;n4"14"[LF]
#>3N6@15o|>[Tab]^*ttt*~++~~~%[LF]
#=~nJ<R"12";[Space][Tab][LF]
#[[Tab][LF]
#`<`|[LF]
print((eval("1\x2f2")and[Space](9)or(13))-(0and[Space]4)^(1)<<(65)>>62)or'(\{(\{})(\{\/+23!@}[()])}\{})(\{}\{})'#46(8+9+9+9+9+=!)=#print(17)#]#echo[Space]21#|/=1/24=x=90/[LF]
#8␛dggi2␛[Tab]`[Space]|1|6$//''25[Space][Space]#>say[Tab][Tab][Space]27#T222999"26[LF]

そして、ここにホワイトスペースだけのコメント版があります:

Push 30 onto the stack
[space][space][space][tab][tab][tab][tab][space][LF]

Output the number at the top of the stack
[tab][LF][space][tab] 

Jump to label null if the top of the stack is negative. (it's not)
[LF][Tab][LF]

Label this location as [Space]
[LF][Space][Space][Space][LF]

Add the top two items on the stack and replace them with the result. 
[Tab][Space][Space][Space]

Store the stack.
[Tab][Tab][Space]

編集:以前の主張に反して、六角形はスペースのようにタブをスキップすることが判明しました。@ ais523は、@ KenneyのHexagonizerを更新してリテラルエスケープとタブを説明するのに十分なほど親切でした。タブをノーオペレーションとして読み取るという以前の主張を修正し、文字が他の文字よりも広く、16進数がわずかにずれている.ため、リテラルエスケープを置き換えるためにそれを修正する必要がありましたここにリンク

そして、これは修正された現在の16進数です。

          # v 1 6 / " < " 6 /
         b . q @ " ( : : : T )
        : : ( 2 2 ) S # ; n 4 "
       1 4 " # > 3 N 6 @ 1 5 o |
      > ^ * t t t * ~ + + ~ ~ ~ %
     # = ~ n J < R " 1 2 " ; # [ #
    < | p r i n t ( ( e v a l ( " 1
   \ x 2 f 2 " ) a n d ( 9 ) o r ( 1
  3 ) ) - ( 0 a n d 4 ) ^ ( 1 ) < < (
 6 5 ) > > 6 2 ) o r ' ( \ { ( \ { } )
  ( \ { \ / + 2 3 ! @ } [ ( ) ] ) } \
   { } ) ( \ { } \ { } ) ' # 4 6 ( 8
    + 9 + 9 + 9 + 9 + = ! ) = # p r
     i n t ( 1 7 ) # ] # e c h o 2
      1 # | / = 1 / 2 4 = x = 9 0
       / # 8 . d g g i 2 . | 1 |
        6 $ / / ' ' 2 5 # > s a
         y 2 7 # T 2 2 2 9 9 9
          " 2 6 . . . . . . .

最後に、プレリュードの括弧と六角形の六角形を揃えるために以前に追加されたいくつかの不必要なキャラクターをゴルフアウトしました。

Nimのコードはecho 21fromに戻りますecho 5+5+11

六角形#@46は今#46

Hexagonyのコードは背中にある/+23!@=から/+23!@

プレリュードの括弧のアライメント(9) or (13)になりました(9)and(13)

まあ、それは私が得たすべてです。幸運を祈ります!


1
すべてのリンクを修正し、コピーペーストの結果生じたスペースの場所にaddedを追加したと思います。タブをSEのタブにする方法がわからない場合は、Tioのコードを明確にする必要があります。また、この回答の指示からソリューションを再作成する必要がありましたが、どういうわけか2ビット少なくなりました...おっと?
チャンス

1
説明に間違いがあることに気付きました。キャリッジリターン(ASCII 13)は、ラインフィード(ASCII 10)とは異なる文字です。大部分の言語(ホワイトスペースを含む)は、13ではなく10を気にします(また、特に断りのない限り、PPCG送信の改行は単一のASCII 10であると想定されています。利益)。

1
あなたの六角形の説明画像は、最初の反射の後にNWを表示するe の後のために間違っています(印刷しますe23;。上記のリンクは...?
MildlyMilquetoast

1
私は、HexagonyのTIOがタブ文字をスペース/改行として扱うという結論に達しました。hexagonyプログラムの提供するイメージは、それに従う(またはタブを.s に置き換えてTIOに入れる)と終了するだけです。ただし、トレーニング.のs(実際のコードの一部ではない)とすべてのremove を削除することを除いて、イメージ内のコードをTIOにコピーします。23を印刷します
。– MildlyMilquetoast

1
@MistahFigginsに感謝します!私はいくつかの演errors的な誤りを犯し、それを私の説明に広めたようです。Hexagonyの説明、16進図、およびHexagonoizer Perlスクリプトを修正し、Hexagonyに対して結果を直接確認しました。これですべてがうまくいくはずです。良い発見!
チャンス

23

100. brainbool、2953バイト

#16  "?63(o?23!*# #@"/*\DZZCv;'[af2.q]PkPPX)\('#CO"14"; */
#/*0|7//```"`  [>.>.])[-'][(>77*;,68*,@,1',;# l1011)(22)S\4n;iiipsddpsdoh coding:utf8ââââ(1P''53'S^'????!?!??!??!!!!???!?!??!!?!?!!!!!?!!!!?????!????????????????????!) (qx
#>â
# 36!@â`  e++++++::@ 
#~
#y
#`<`
#<<<#>>]}}+-[.+..]+-+<[<<.>>x>-]>[
#{
#x}
#2""/*\*
#=x<R+++++[D>+++++++q   L+++<-][pPLEASE,2<-#2FAC,2SUB#1<-#52FAC,2SUB#2<-#32FACREADOUT,2PLEASEGIVEUPFACs]>@@+.---@.>][
#x%+>+=ttt Z_*.
#D>xU/-<+++L
#R+.----\   \).>]4O6O@|
#[#[(?2?20l0v01k1kMoOMoOMoOMoO MOO0l0ix0jor0h0h1d111x0eU0y0yx0moO1d0y0e0e00m1d0i0fx0g0n0n11MoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOmOoMOo0moo0n0tx0t0moO0f0t0gOOM0g0f0h0j0j0i0001k1x0vx0v0l111111^_0 )0\\
[  "]56p26q[puts 59][exit]" ,'\[999'];#/s\\/;print"24";exit}}__DATA__/
###x<$+@+-@@@@=>+<@@@=>+<?#d>+.--.<!\
'(wWWWwWWWWwvwWWwWWWwvwWWWw WWWWWWWWwWW/"78"oo@WWwWWWWWWWwWWWWWWWWwwwwvwWWWwWWWWwvwWWwWWWwvwWWwWWWwvwWWwWWWw              (([5]{})))â\';';print((eval("1\x2f 2")and 9or 13<< (65)>>65or 68)-(0and 4)^1<<(65)>>62)or"'x"or' {}{}{}{}({}<(((((()()())){}{})){}{})>)(({})5){}x{(x<(<()>)({})({}<{}>({}){})>){({}[()])}}({}){}({}()<()()()>)wWW no no no no no no no no no no no no no no no no no no no no no no no no no no no no no no os sp '#}#(prin 45)(bye)46(8+9+9+9+9+=!)((("3'3)))"'a'[[@*3*74[?]*]*(<*.*\>]xxxxxxxxxxxxx)'# \\
__DATA__=1#"'x"
#.;R"12"'
###;console.log 39;'(******* **********819+*+@[*99[?]*]***|!)'
#\\
""""#\
' ( <><        (          )>  ){ ({}[()]  )}{\';      a=$(printf \\x00    );b=${#a};#\\
" }"';           ((   ( (';case "{"$ar[1]"}"${b} in *1)echo 54;;*4)echo 78;; *1*)echo 50;;*)echo 58;;esac;exit;# (((('))))#\
=begin
#p             +555/2+55x%6E2x
;set print "-";print 89;exit#ss 9
utpb now 70 dollar off!
utpb has been selling out worldwide!
#9999 9 seeeemPaeueewuuweeeeeeeeeeCis:ajjappppppp😆😨😒😨💬95💬👥➡
👋🔢🌚🌝🌝🌚🌚🌚🌚🌚

set ! 57
set ! 51
More 91 of thiset of re9
How much is it*/
#if 0
.int 2298589328,898451655,12,178790,1018168591,84934449, 12597
#endif//*
#1"" //*
#include<stdio.h> 
#defineâ x(d)â#d
#define u8 "38\0 "
main ( ) {puts( sizeof (0,u8)-5?u8"67":*u8""?"37":     x( 0'0  "'\"")[9]?"75":'??-'&1? "79":"77");"eg5""6 27""e ' Zing  ";}//*/
#if 0
#endif//* --... ...--
/*/
p=sizeof("9( 999 99\"    ); print'(''72'')';end!"            );main( ){puts(  "92");return(9-9+9 -9);}
#if 0â
#endif//* rk:start | print: "69" rk:end<(9    >5b*:,1-,@
print 61
#}
disp 49 ;9;
#{
}{}<>
$'main'3
#-3o4o#$$$
#<T>"3"O.</+++++++>/+++<-\>+++.---.
#<<<#>>> /
reg end="";print(85);reg s#++++++++++++++++++++++++++++++++++++++++++++++++++++++++.-.
=end
;"""#"#xxxxxxxy"78"\++++>/<~#class P{        function:Main(a:String[] )~Nil{83->Print();} }
#}pS9^7^8^MUOUOF@:8:8\\
#s|)o51~nJ;#:p'34'3  \=#print(17)#>27.say#]# print(47) #]#echo 21#fwwwwwWWWwWWWWWwWWWWWWWwWWWWWWWWWwWWWWWWWWWWWWWWWwWWWWWWWWWWWWwvm>++++
#s8âdggi2âM`|$//''  1$6~-<~-<~-<<<~-COprint ("65")#asss^_^_#
#9 "25"  +/ *///X222999686#

VIPスコア(Versatile Integer Printer):.002953(改善のため、次のエントリは3042バイト以下にする必要があります)

流れ落ちる

このプログラム印刷 1のPython 3で 2 V / Vimは、中 3 Minkolangにおいて、 4 > <>で、 5のPython 2で、 6 SMBFにおいて、 7 JAPTにおいて、 8網膜において、 9はPerl 5において、 10 Befunge-で93、 11 Befunge-98で 12核分裂で、 13ルビーで、 14 Turtlèdで、 15干し草で、 16 Pythで、 17ジュリアに、 18カーディナルで、 19 Rengで、 20プレリュードで、 21ニムで 22過少で、 23 Hexagonyで、 24 Thutuで、 25ピップで、 26 05AB1Eにおいて、 27のPerl 6において、 28脳フラックで、 29トリガーで、 30空白で、 31モジュラーSNUSPで、 32ワールで、 33事件で、 34レールで、 35 INTERCALで、 36ラビリンスにおいて、 37 C ++ 03で、 38 C99で、 39のCoffeeScriptで、 40最小-2Dで 41 brainfuckにおいて、 42悪に、 43網状で、 44 alphuckで、 45 PicoLispで、 46 Cubixに、 47リリーで、 48 Deadfish〜で 49オクターブで、 50 bashで、 51のアセンブリにおいて、 52 COWで、 53ショーブで、 54 Zshの、中 55脳フラッククラシックで、 56 DCで、 57ワイズで、 58 Kshをで、 59のTclで、 60 Moorhensで、 61サイロ、 62草で、 63ブライアン・チャックで 64苦悶で、 65 ALGOL 68における 66面には、 67 C11で、 68パイソン1における 69 RK-ラングで、 70コマーシャルで、 71どうしで、 72 Fortranで、 73モールスで、 74アーチで、 75 C ++で11、 76 Trefunge-98で、 77 C ++ 14で、 78ダッシュで、 79 C ++ 17で、 80クライン201、中 81クライン100、中 82脳Flueueにおいて、 Objeckの8384クライン001、中 85 ZKLで、 86 Miniflakで、 87アリスに、 88ピンポンにおいて、 89はgnuplotに、 90 RunRで、 91 COODで、 92 C89で、 93セットで、 94 Emotinomiconで、 95絵文字で、 96 EmojiCoder、中に 97立方で、 98 Archway2では、 9999。 Brainboolで100

検証

オンラインでお試しください! TIOで利用できない言語:

説明

100か国語に対応したとは信じられません。このプロセスに携わったすべての人に感謝したい。それは楽しいライドでしたし、皆さんと一緒にさらに100を追加したいと思っています。

Brainboolはしばらくの間私の目にありました。しかしbrainboolは出力のみ二つの数字ができ、以来10私が今までそれを追加することができていない(私は10と11の周りではなかったです)。

Brainboolは、2でラップする256でラップするのを除いて、brainfuckに似-てい+ます。100を出力するための頭脳コードは非常に簡単です。

+.+..

brainfuckの出力をマスクするために、ループとマイナスを追加します。

+-[.+..]

ここで必要なのは、コードを配置する場所を見つけることです。選択の私の場所は初めてだった+に置き換えるためにライン8上のbrainfuckコードのトップレベルに加えて、我々は我々のコードと追加+-+として働き+brainfuckとbrainboolでNOOPでは。

+-[.+..]+-+

キュービックス

私は、コードをCubixカプセルの前に置いて、ミラーをポインターのパスに移動させました。これを修正するために、問題のある鏡の前でカプセルを数歩前進させましたが、すべてうまくいきました。

驚くべきことに、悪名高い事件さえも破ることはありませんでした。


実際、brainboolはaribtraryテキストを出力できます。-b引数を渡すと、1と0をバイトに構築し、文字として出力します。
パベル

1
@WheatWizard Archway2で動作することを確認します。
スタソイド

1
おめでとうございます!VIPスコアも0.003未満に低下しました。
Ørjanヨハンセン

1
告白する必要があります。100/ 11でこれを追加することについて最初に投稿したとき、私は実際にここに来るとは思いませんでした。これはかなりクールです。
SnoringFrog

1
@stasoid TIOでArchwayを入手することに取り組んでいます。参考までに。
MD XF

21

27. Perl 6、235バイト

#v`16/"<"6/b.q@"(::):::  (22)S#;n4"14"
#>3N6@15o|> ^*ttt*~++~~~%
#=~nJ<R"12";
#[
#`<`|
print((eval("1\x2f2")and 9 or 13)-(0and 4)^1<<65>>62)#@46(8+9+9+9+9+=!)=#print(17)#3]#echo 21#===2|/=1/24=x=90/
#8␛dggi2␛` |1|6$//''25  #>say 27#"26

␛は、通常どおり、リテラルESC文字を表します。

このプログラムは、印刷27のPerl 6に26 05AB1Eで25ピップで24 Thutuで23 Hexagonyで22過少で21ニムで20プレリュードで19(試験Rengにここ)、18カーディナルに17でジュリア16 Pythで15干し草で14 Turtlèdで13ルビーで12核分裂で 11 Befunge-98で 10 Befunge-93において 9はPerl 5において 8網膜において 7 JAPTにおいて 6 SMBFで 5のPython 2で 4 > <>で 3 Minkolangに 2でVimの/ V 1のPython 3であり、(それはクリスマスだとして)a partridgeにおけるピアツリー

Stack Exchangeがこの答えに対して生成する構文の強調表示は、完全に間違っています。#`<は、Perl 6の多数の複数行コメントマーカーの1つであり、末尾がで#>あるため、実際にPerl 6で実行されるコードは非常に単純say 27です。<>ほとんどの言語では一致するペアではないため、この特定のコメントマーカーを選択しました。したがって、一致しないもの<は、解析しようとするRetinaなどの言語を壊しません。

六角形がどのように機能するのか、私には完全にはわかりません。壊れたとき、使用していた文字の1つ+をa からaに変更して、0ヒットしているかどうかを確認しました。それが判明し、これでプログラムが修正されたことがわかりましたが、なぜかはわかりません(#実行ラインが原因で壊れたことがわかりますが、+修正物を削除する理由は不明です)。(問題の文字はThutuによっても解析されますが、幸いなことに、Thutuプログラムの機能に違いはありません。プログラムのその時点では、前にないものはすべて=文字通り作業にコピーされます。文字列。)0and+4前の行から0and 4、Hexagonyの観点から1文字短くするため(Hexagonyはスペースを認識しません)。これは#|、前の行がになることを補うためです#`<`|。これは、ヘキサゴニズムの観点から1文字長くなります(バッククォートも表示されないため)。コードは、Hexagonyの辺の長さを拡張し、現在のHexagonyコードに関するすべてを壊すことから5バイトしか離れていないことに注意してください。とにかくこれを行い、コードの六角形セクションをやり直すことをお勧めします。おそらく、拡張後にすべてを収めることが難しくなるのではなく、容易になるでしょう。

他のいくつかの言語も変更されましたが、そのほとんどは、最終行に任意のコードを収めることができる十分な堅牢性を追加するためです。$//Japtのコメントマーカーで、行の後のスペースを許可し、追加されたプログラムのJaptの脆弱性を軽減します(一方、行の後ろに//閉じ括弧があれば中断し、スペースはJaptの閉じ括弧の一種です)。1組のスペースはPipのコメントマーカーです。つまり、ここではPipコードを大幅に簡略化できます。これはまた、05AB1Eを簡単に単純化できることを意味し"26ます。Retinaは、5番目の行が、一致するものに適した法的な正規表現である必要があります(末尾|したがって、網膜用です); 前のエントリの対応する行とは異なる方法で解析されますが、適切な方法で解析されます。Cardinalも以前のエントリよりもわずかに単純ですが、これはすべてが垂直に並んでいるのとまったく同じ偶然であり、変更は何もしないコードへの変更です。

あなたは(あなたはおそらくする必要があります)Hexagonyをやり直すと仮定すると、そこに最後の3行のすべてのコードを追加するための安全な場所は、次のとおり3では#3]#唯一Hexagonyのためである(そして簡単に変更)。最後の行#との間のスペースは、"ほとんどの言語で無視されます。Retina以外の5行目の終わりを実際に解析するものはありません。(コードを追加できる場所は他にもたくさんありますが、おそらく最も便利な場所です。)


1
誤ってこの回答をダウンボットし、担当者が1減ったことに気付いたときにダウンボットしたことに気づきました。:D
betseg 16

4
@betseg:あなたのために、六角形についてもう少し議論を追加しました。

2
賞金おめでとうございます!P:私はこのポストが再び移動を取得したい
FlipTack

私はずっとそれを続けることを計画していた、それは時間を見つけることを試みることのちょうど例だった。(実際には、チェーンの初期の段階でPerl 6で失敗しましたが、機能しなかったため投稿しませんでした。幸いなことに、私は間違いから学び、今回は機能します。)

21

31. モジュラーSNUSP、326バイト

プログラム

#v`16/"<"6/b.q@"(: ::T):  ␉␉␉␉ :(22)S#;n4"14"
#>3N6@15o|>␉^*ttt*~++~~~%
#=~nJ<R"12"; ␉
#[␉
#`<`|
print((eval("1\x2f2")and (9)or(13))-(0and 4)^(1)<<(65)>>62)or'(\{(\{})(\{}[()])}\{})(\{}\{})'#46(8+9+9+9+9+=!)=#print(17)#]#echo 21#|/=1/24=x=9[<$+@+-@@@@=>+<@@@=>+<?#>+.--.]/
#8␛dggi2␛␉` |1|6$//''25  #>say␉␉ 27#T222999+/+23!@"26

通常どおり、リテラルESC文字であり、リテラルタブです。

流れ落ちる

このプログラムは、印刷31をモジュラSNUSPに30空白で、29トリガーで、28脳フラックで、27のPerl 6に26 05AB1Eで、25ピップで、24 Thutuで、23 Hexagonyで、22過少で、21ニムに、プレリュード20、レン19、カーディナル18、ジュリア17、パイス16、ヘイスタック15、タートルード14、ルビー13、フィッション1211 Befunge-98で10 Befunge-93、内9のPerl 5に、8網膜において、7 JAPTにおいて、6 SMBFで、5のPython 2で4 > <>で、3 Minkolangで、2 V IN / Vimは、そして1 Pythonの3インチ

検証

ランダウンにリンクがないのはなぜですか?テストをはるかに簡単にするために何かに取り組んでいるので、ここにリストされているほとんどの言語でプログラムを実行し、結果を出力するテストドライバー。これにより、多言語への将来の言語の追加がはるかに簡単になるはずです。次のTIOリンク(Bash、Perl、A Pear Treeを組み合わせて作成されたテストドライバー)を実行すると、31言語のうち28言語でこのプログラムの結果を取得できます。

オンラインで試してみてください!

リンクは、上記の/ 形式のコードブロックも生成し、コードを六角形にフォーマットします。

          # v 1 6 / " < " 6 / b
         . q @ " ( : : : T ) : :
        ( 2 2 ) S # ; n 4 " 1 4 "
       # > 3 N 6 @ 1 5 o | > ^ * t
      t t * ~ + + ~ ~ ~ % # = ~ n J
     < R " 1 2 " ; # [ # < | p r i n
    t ( ( e v a l ( " 1 \ x 2 f 2 " )
   a n d ( 9 ) o r ( 1 3 ) ) - ( 0 a n
  d 4 ) ^ ( 1 ) < < ( 6 5 ) > > 6 2 ) o
 r ' ( \ { ( \ { } ) ( \ { } [ ( ) ] ) }
\ { } ) ( \ { } \ { } ) ' # 4 6 ( 8 + 9 +
 9 + 9 + 9 + = ! ) = # p r i n t ( 1 7 )
  # ] # e c h o 2 1 # | / = 1 / 2 4 = x
   = 9 [ < $ + @ + - @ @ @ @ = > + < @
    @ @ = > + < ? # > + . - - . ] / #
     8 . d g g i 2 . | 1 | 6 $ / / '
      ' 2 5 # > s a y 2 7 # T 2 2 2
       9 9 9 + / + 2 3 ! @ " 2 6 .
        . . . . . . . . . . . . .
         . . . . . . . . . . . .
          . . . . . . . . . . .

3つの言語が欠落しています。Vが遅すぎ、RengとModular SNUSPがTIOにインストールされていません。幸いなことに、3人全員にオンライン通訳者がいます。

  • TIOのV / Vim(意図した出力:2)プログラムをテストできます。
  • :オンラインRengインタプリタ(19意図した出力)がありますここでは
  • オンラインのModular SNUSPインタプリタ(目的の出力:31)がここにあります。(これは単なるSNUSPインタープリターとして宣伝されていますが、Modular SNUSPは実際に実装されている方言であり@、ページ全体に表示されるようになっています。)

3つすべてが目的の出力を生成するため、31のプログラムすべてが適切にテストされます。(私が少し心配していることの1つは、ホワイトスペースプログラムが正しく終了しているかどうかということです。ただし、ここのホワイトスペースは以前の送信と同じであるため、両方とも正しいか、両方とも間違っています。間違って、両方のプログラムは同じ方法で修正可能です。)

説明

まず、六角形は、常に変更する必要があるようです。実際には以前よりもはるかに簡単です。HexagonyコードをTriggerコードの直後に移動しました。つまり、プログラムの終了間近であり、23を出力して終了するHexagonyの「カプセル」はほとんどすぐに実行されます。最後の行は通常、カプセルを置くのに適した場所のように見えます。これは、Hexagonyの実行を中断する可能性のあるコマンドが少ないことを意味するためです。

他のすべての変更は、モジュラーSNUSPコードの追加に関連しています。最初に注意することは、SNUSP $はプログラムの最初の文字で実行を開始し、プログラムの端から出た後に終了する2D言語であり、そのためSNUSPプログラムを長い行の最後に配置することです(内側Thutuのコード(Thutuがほとんど何でも受け入れるポイント)で、SNUSPが他の言語のコードを見ないようにし、他のほとんどの言語はSNUSPを気にしません。一つの言語でしたケアは、角括弧を解析しているPerl 6の、ありました。<SNUSPコードの直前にコードを配置して、それを満足させています(とにかく、括弧が自然にほぼ一致したため)。気にする他の言語はSMBFです。.SMBFとSNUSPの両方で出力されるため、追加の出力を作成する必要はありません。幸いなことに、SMBFからわかるように、このプログラムの<.>>[…]後にSNUSPコードが続きます。つまり、現在のテープ要素は0です。したがって、SMNUの観点から角括弧でSNUSPコードを「コメントアウト」します。

コード自体については、モジュラーSNUSPで定数を記述するためのよく知られたトリックを使用します。この場合、多数の「プロシージャの開始」コマンドを連続して記述し、フィボナッチ数のベースを効果的に作成します。基本的な考え方は+、番号1 をエンコードすることです。@コードの後に​​続くコードで表される数値と、コードの最初の文字を引いた後のコードで表される数値を加算します。そして=、何もしません(したがって@=、右側の数が2倍になります)。このシステムで@@@@=+@@@=+#は、数48の表現として選択しました。

ただし、ここには問題があります。SNUSPで定数を記述する標準的な方法では、プログラムの開始後に制御フローが残ります。また、1つのライナー(明確な理由でここに記述したかった)を使用すると、IPを任意の方向を指すように変更する方法はありません。これは、プログラムが終了することなく、#通常の方法でIPが定数定義全体を通過し、右に進む必要があることを意味します(通常は終了します)。これを解決するために、+常に前に番号が付いている番号の定義を慎重に使用しました=。これは私が設定するためのコードを記述することができることを意味を経由して48へのセルを@@@@=>+<@@@=>+<#のどれという知識で安全に、>コマンドがでスキップされません@コマンド(したがって、テープポインターの制御を維持します)。さらに、最終段階#では、最初のテープセルには初期値が残っていることがわかります。したがって、最初のテープセルをマーカーとして使用して、プロシージャ定義から戻るか、右に進むかを判断できます(それを行うと、多数のプロシージャの内部にいますが、それが重要ではないようにエッジ)。

したがって、最終的なSNUSPコードは$+@+-@@@@=>+<@@@=>+<?#>+.--.です。$マークプログラムの開始。+@+-最初のテープ要素を1(++-に設定し@ますが、プロシージャが戻ると、コードの実行を開始し-、テープ要素を0に戻し?#ます。最初のテープ要素がゼロ以外の場合のみプロシージャを終了します。したがって、最終的に#、2番目のテープ要素を50に設定した後(定数定義から48、>+<その後に右に移動するときに出会う2つから2 )、その後、>+.--.ASCIIコード51(3)を出力するだけです。49(1)、およびプログラムの端から外れます(]SNUSPではノーオペレーションです。 /制御フローを垂直方向に反映して、プログラムの上端から流れます); このビットはBrainfuckと同じように機能します。


20

11. Befunge 98、102バイト

#v;2^0;7||"<+0+0+0+<;n4
#v0#_q@
#>3N.
#|\w*
#8  ^1b0<
#|
#M`
print(None and 9or 1/2and 1or 5)
#jd5ki2

プリント:

正直に言うと、Vimコードの出力に1分かかる理由はわかりません。また、Retinaの仕組みもわかりません。

説明:

#v          Skips the v, which would send the IP down
  ;         Unlike '93, where ; is a no-op, '98 skips to the next ;
            and doesn't execute anything in between
   2^0;     Not executed, unlike Befunge 93
       7|   Pushes 7 onto the stack, and then sends the IP up, because 7 is not 0
n0b1        n clears the stack, and #s are pushed until the stack is [0, 11, 1
    *.      multiplies the top 2 values of the stack to give 11, and prints it (yay!)
      _     Sends the IP right, because the top value of the stack is 0
       q    Ends the program (no-op for '93, which continues to @)

注意事項:

  • コードの現在の状態ではの0bは厳密には必要ではなく、スタックはクリアされています。必要に応じて削除できますが、将来のプログラムの一部として他のスタック操作を事前に許可します。
  • これ_q@はRetinaの一部としてあります(それなしでは機能しません。理由を聞かないでください)。を追加qすると、'98コードでt操作が実行され、IPが分割されます(Retinaプログラムで7ではなく8が印刷されます)。
  • これ_は単純ではありません>。SMBFの一部が台無しになるからです。

編集:将来的にプログラムをより柔軟にするために、_q@おそらく@00(0が〜任意の文字になる可能性がある)であることを認識しました。しかし、今はすべてのリンクを変更するのが面倒です(そして疲れています)。最終的にそれを回避します...

編集2:これ以上すぐに6つの答えを期待していませんでした。そのまま残っていると思います。みなさん、素晴らしい仕事です!


ふむ、私はそれが既に投稿されていたことを実現するために、私の11番目の答えを書いて、今私は12日の答え:)にそれを変更する
牛いんちき

Vimの実行に時間がかかる理由は何ですか?
MildlyMilquetoast

@MistahFiggins私はコードがキーストロークに変換する必要があり、それ以外ので、それがあると思い、私は何の手掛かりもない
牛いんちき

そのvimインタープリターを書いたのですが、なぜそんなに時間がかかるのか分かりません。これまでパフォーマンスの問題に多く気づいていませんでしたが、それは私のV / Vimの回答のほとんどが40バイト未満だからです。何が原因であるのかは確かではありませんが、多くの人々がこのスレッドでそれについて不満を言っています。
DJMcMayhem

20

35. INTERCAL(C-INTERCAL)、631バイト

#v`16/"<"6/b.q@"(: ::Q):  ␉␉␉␉ :(22)S#;n4"14"
#>3N6@15o|>␉^*ttt*~++~~~%
#= >␉1#v#v0l0mx01k1k0l0ix0jx0h0h1d111P0eU0bx0b0o1d0b0e0e00x1d0i0fx0g0n0n11x0o0n0cx0c0o0f0c0gx0g0f0h0j0j0i0001k10mx0m0l11111100(^_)
#[␉
#`<`|
print((eval(" 1\x2f2")and(9)or(13))-(0and 4)^1<<(65)>>(62))or' (\{(\{})(\{}[()])}\{}\{}\{})'#46(8+9+9+9+9+=!)#1111|=/=1/24=x=9[<$+@+-@@@@=>+<@@@=>+<?#>+.--.]/
__DATA__=1#//
#.\."12"␉*
""""#//
=begin␉//
$'main'//
#-3o4o#␉
=end   #//
"""#"#//
#0]#echo 21#/ (\[FAC,1<-#2FAC,1SUB#1<-#52FAC,1SUB#2<-#32FACLEGEREEX,1PLEASEGIVEUPPLEASE) a
#   +/Jn~
#8␛dggi2␛`␉|1|6$//''25  >>>#>27.say# =#print(17)#$nd^_^_.]Q222999/+23!@1#"26

リテラルタブ、リテラルESC文字。それ以外の場合、Stack Exchangeはプログラムを破壊します。作業したい場合は、下のTIOリンクの「入力」ボックスからプログラムをコピーすることをお勧めします。

オンラインで試してみてください!

流れ落ちる

このプログラムは、印刷35 INTERCALで、34レールで、33事件で、32ワールにおいて、31モジュラーSNUSPで30空白で、29 トリガーで、28脳フラックで、27のPerl 6に26 05AB1Eで、25ピップに、24 Thutuで23 Hexagonyで、22過少で、21ニムで、20プレリュードで、19 Rengで、18カーディナルで、17ジュリアに、16 Pythにおいて、15干し草で、14 Turtlèdで、13ルビーでは、 12核分裂で、11 Befunge-98で、10 Befunge-93、内9のPerl 5に、8網膜において、7 JAPTにおいて、6 SMBF、内5のPython 2で、4 > <>で、3 Minkolangで、2 V / Vimの中に、及び1 Pythonの3インチ

検証

ほとんどの言語は、上記のテストドライバーによってテストされます。ここでRengを、ここでModular SNUSPをテストできます。必要に応じて、それぞれ19と31を出力します。公式の通訳を使用して、自分のシステムでインシデントをローカルでテストしました。

非表示の文字を見つけやすくするために、テストドライバーにいくつかの変更を追加したことに注意してください。さまざまなNULバイトが特定の言語でプログラムの出力に忍び込んできました。私はこれがおそらく問題ではないと判断しました。なぜなら、a)幅広いサブミッションがそれを行っているからです。b)Befungeインタープリターは、プログラムに何も含まれていないにもかかわらず( 「何かを見逃してしまった」ので、それは何年も続いていたに違いありませんし、おそらく通訳の仕組みの一部です。(まだNULバイトを出力している言語(BefungesとMinkolang)は、この提出のためにコードが変更されていないことに注意してください。)

以前のRailのサブミットはクラッシュにより終了しますが、これは許可されませんが、これは簡単に#修正できます(Railプログラムの最後にa を追加し、Hexagonyを一致するように調整することにより)。このソリューションのRailは正常に終了します。

説明

INTERCALコードの仕組み

INTERCALはプログラム全体を解析します。ただし、構文エラーはコンパイル時ではなくINTERCALの実行時の問題であり、コメントの作成によく使用されます。(構文エラーが実行しようとすると、Wikipediaの誤った主張に反して、エラーICL000Iでプログラムがクラッシュします。しかし、何らかの方法で実行を防ぐことができれば– INTERCALにはコマンドの実行を防ぐ方法がたくさんあります–幸いなことに、問題を引き起こすことなく実行されません。)

そのため、プログラムを最初に明示的に終了するだけで、実行中のファイルの最後でゴミが発生するのを防ぐことができます(明示的な終了コマンドなしでプログラムの最後に到達するとINTERCALがクラッシュするため、とにかく必要なもの)。プログラムの開始を処理することはより興味深いものであり、パーサーのバグを悪用します。20%の確率でDO %20 READ OUT #8出力VIIIするようなものを書くことができます(そうでなければ何もしません)。私の知る限り、C-INTERCALは2番目の行の単独の%を解析して、最初のコマンドが実行される確率が0%であることを示しているため、常に毎回実行されません。(なぜそのように解析するのか分かりませんが、コンパイルされたコードを見ると、乱数を生成して0と比較していることがわかります。)

以下は、INTERCALプログラムがポリグロットの残りの部分に合わせる前の様子です。

DO,1<-#2
DO,1SUB#1<-#52
DO,1SUB#2<-#32
DOREADOUT,1
PLEASEGIVEUP

これは非常に簡単です。2要素の配列をインスタンス化します。要素をそれぞれ52と32(10進数)に設定します(INTERCALの文字列エンコーディングは言及せずに残しておきます。どのように機能するかを忘れており、これらの数値がエンコードする理由を理解するためにさまざまな実験を行う必要がありました35)。それを標準出力に読み上げます。そしてプログラムを終了します。GIVE UPステートメントを終了するために最後に追加のPLEASEを追加し、プログラムの最後にゴミの新しいステートメントを開始し、丁寧な会話の許容範囲内に保ちます。もちろん、INTERCALは完成品ではあまり似ていません。その理由を説明します。

負荷の下に埋もれSES

INTERCALプログラムの最も明らかな問題は、レターが含まれていることSです。問題の文字を使用せずに配列のインデックスを作成する方法はないため、これはほとんど避けられません。ただし、SUnderloadの出力コマンドであり、プログラム全体を解析することを防ぐ方法はありません。唯一の解決策は、Underloadの文字列リテラルに相当する括弧内にINTERCALコードを配置して、すぐに実行されないようにすることです。

ただし、2つあります ^プログラムの最後にはアンダーロードコードを実行する文字があります。したがって、これらのSesは、何もしなければ実行されます。別の文字に変更することもできましたが、無意味になるようにコードを保護する方が簡単だと判断しました。aUnderloadで文字列をエスケープします(つまり^、文字列を実行すると、有害な副作用を引き起こすのではなく、単に文字列を再びエスケープします)。Perl 6コードで使用されているものaがすでにありsayます(このコードの配置では、無関係な変更のために実際に十分です)。しかし、人々がそれに依存する必要がないように、私は別のものを追加しましたa行末に別の議論が必要です)。したがって、Underloadコードは、以前よりも脆弱性がやや少なくなります。

多くの仕事と混乱の前奏曲

ああ、プレリュード。通常、最も難しい言語ではありませんが、今回は間違いなくそうでした。2つの本当の問題があります。1つは、非常に長い行に余分な括弧を追加すると、Preludeプログラムの制御フローを妨害するリスクが生じることです(whileループに)。垂直方向(行の空白のほとんどのランダムな動きの原因です)。ホワイトスペースにも問題がありましたが、このプログラムはホワイトスペースの観点からは前のプログラムと同等であるため、「ホワイトスペースを壊さずにプレリュードを修正する」というケースがほとんどでした。

この時点でプレリュードが実際にどのように機能するのかはあまりわかりません。左下隅にある0など、いくつかの修正がありますが、意図したとおりに機能しないことは明らかです。(Juliaのコードも、print文の括弧が扱いにくかったため、最終的に行の最後に移動しました。)おそらく謎のままにしておかなければなりません。

核分裂炉の故障

上記の変更は修正が難しいかなり微妙な問題のためのものでしたが、はるかに明白な問題があります。DOREADOUTは正規表現R...Oに一致するため、Fissionは4番目のサイクルで不要な出力を生成します。これは、の意図した出力を出力するのに十分な時間ではありません12。INTERCALには、出力を生成する命令が1つしかありません(クラッシュが出力としてカウントされない限り)。これに対する1つの修正は、間に空白を追加しようとすることですREADOUT、私たちの出力を傍受する時間を与えるために、それは空白が怒ります。そのため、しばらくの間、このプログラムは不可能だと思っていました。RLU、及びD核分裂内のすべてのエントリポイント、およびすべての潜在的に問題のあるコードを実行することができる、及びINTERCALキーワードは、大文字でなければなりませんです。

ただし、修正があり、かなり驚くべきものです。国際化の取り組みの一環として、C-INTERCALは実際に複数の言語のキーワードを受け入れ、英語とラテン語の両方をサポートしています。我々は避けることができませんでしたS。このように、我々はできる避けますOFACはの完全に良い代用でDOあり、同様にLEGERE EXはと同じことを意味しREAD OUTます。(したがって、プログラムは英語とラテン語の混合になりましたが、それで問題ありません。読みにくくなることはほとんどありません。)そのため、Fissionを右下隅で喜んで狂わせ、何も生成させないようにすることができます。出力。最後に実際の核分裂コードを変更できます*ではなく、;、1つのスレッドではなくプログラム全体を終了します。このコードはかなり高速に実行されるため、すべての浮遊エントリポイントが損傷する前にプログラムを終了します。

ニット6、Perl 6

次の問題:照合することにより、Perl 6のコメント仕事<>。INTERCALの代入演算子は<-です。幸いなことに、追加の開始ブラケットが追加されるので、プログラム内の未解析の場所(この場合はPipコードの直後)でそれらをキャンセルするために、いくつかの終了ブラケットを追加できます。

ただし、プログラムの空白の予算を変更したくありませんでしたが、Juliaコード(Preludeの場合)を移動すると、最終行に余分なスペースが追加されてしまいました。どこかから削除しなければなりませんでした。ダブルスペースはPipのコメントマーカーなので、ほとんど変更できません。残っている唯一のオプションは、のスペースですsay 27。Perl 5のゴルファーはすぐに「say+27それなら大丈夫」と考えるでしょう(+驚くほど頻繁に単項関数が便利になります!)が、残念ながらこれは有効なPerl 6構文ではありません。

私たちが何をすることができません、しかし、変更することであるsayメソッドの構文に関数の構文から。整数リテラルには、印刷するものを含む多数のメソッド27.sayがあるため、同じ長さの完全に有効なプログラムです。

正方形になりますか?そこにいません

したがって、次の問題は.、プログラムに余分なものを追加したことです。SMBFユーザーは、それが明らかにその言語の問題であり、浮遊出力(この場合はNULバイト)を生成することを知っています。前回のプログラムで既に.出力が生成されていましたが、それを修正する機会をとるべきではないという意味ではありません。

ここでの基本的な考え方は、問題のある命令をコメント化するSMBFループを作成することです。これは、角括弧を移動することを意味します。私はそれらをSNUSPコードの周りから取りました(彼らはインシデントのためだけにそこにいたので、インシデントはプログラムのどこにいるかは気しません)、そしてINTERCALコードの先頭に開き括弧を配置し、トリガーの直前の閉じ括弧(両方.のs をきちんと非表示にします)。

残念ながら、角括弧はRetinaにとって意味があります。[…<-#…「それは意味があり<ません、前に来ないのでその範囲を作成することはできません」と見て、言います#。幸いなことに、これは戦略的に配置されたバックスラッシュで簡単に修正できます。

プログラム中心の事件

これは最後の答えであり、おそらくこれから繰り返し起こるでしょう。さまざまな文字列が偶然3回ランダムに発生し、インシデントの観点からプログラムの中心を移動しました。

処理する最も緊急のトークンはでした1#。これらの変更を単純に行うと、3回表示されます#= >␉1#。3行目の先頭、、__DATA__=1#およびecho 21#です。なぜこれが問題なのですか?ので1#3行目が重なって#vその直後、および2つの重複するトークンは、それらのどちらもカウントされます。そして#v、インシデントプログラムが出る前にコードをコメントするために使用したトークンです!1#プログラムの終わり近くに余分なものを忍び込ませることでこれを修正しました(それに続くのは3文字だけです)。プログラムのその部分を解析する言語はどれもそれで何もしません。

対処すべき他のさまざまな問題のあるトークンがありました。カップルは、単一の手紙だった、PU。インシデントコード内のいくつかのフィラーno-opsをからに変更xするPか、Uそれぞれに変更することでこれらを処理し、4番目のコピーを提供しました。Fissionコードへの変更*はトークンとして残りますが、特に、これは通常とは異なって分割され、インシデントコードの前に2回、その後に1回だけ表示されます。したがって、削除する代わりに、新しいバランスを部分的に調整するために使用しましたLEに、INTERCALコードに表示されたトークンのしました。それは、プログラムの中心を運転するのに十分です0oトークン。もちろん、プログラムの変更はこれを妨げる可能性が非常に高いです。(インシデントをTIOにしようとする試みは、libdivsufsortが利用できないため失敗しました。そのため、特にJavaScriptでオンラインで実行できるように、新しいインタープリターの恩恵を受けるようです。興味がある場合は、これを見てください質問。)


1
うわー、この挑戦​​は驚くほど長い道のりを歩んできました。よくやった!
MildlyMilquetoast

ラテン?!うわー、なんて素晴らしい解決でしょう!コードが「あきらめてください」と言っているのが大好きです。それは私がやめることを敢えてしているようなものです。
チャンス

19

1. Python 3(8バイト)

print(1)

このプログラムは、Python 3で1を出力します。

Python 3でこれを開始するのは、ポリグロットに適していることと、さまざまな方向に進むことができることを知っているからです(また、最初の答えは、ポリグロットが難しい不条理なエランではなく、比較的普通の言語であるようにしたかったのです)と)。


> <>は、2番目の言語に適していますか(2次元空間を開始するため)?
牛は

つまり、次の回答は9バイトを超えることはできませんか?別のものを思い付くのは本当に難しいです。
DJMcMayhem

1
@DJMcMayhem 各回答は、20%または20バイト(いずれか大きい方)より長くない必要があります
牛は

19

10. Befunge、95バイト

#v02^0;7||"<+0+0+0+<;n4
#v0#@00
#>3N.
#|\w*
#8
#|
#M`
print(None and 9or 1/2and 1or 5)
#jd5ki2

最後の行jd最後の行(grr、@ ais523)の間にはリテラルのESC文字があります。このコードには含まれていません。実際のコードを取得するには、Try it onlineリンクにアクセスしてください。

これは、印刷1、Pythonの3の2のVimで、3 Minkolangにおいて、4 > <<において、5のPython 2で、6 SMBFにおいて、7 JAPTにおいて、8網膜において、9 Perlで、そして10 Befungeです。

このコードは*、Retinaおよび.MinkolangおよびSMBFと共有しています。

オンラインで試す

説明

実際のプログラム

#v02^
    @
    .
    *



    t
    5
#v02^

最後の行はわかりやすくするために書かれています(Befungeのプレイグラウンドは周期的です。)

#

トランポリン、スキップ v

02^

プッシュ0してから2スタックして、上に移動します。

5t*.@

push 5、no-op、スタック内の2つの要素の乗算(2および5)、印刷、プログラムの終了。


1
これにより、SMBFは最初にnullバイトを出力し.ます。
PurkkaKoodari

@ Pietu1998修正済み!
ジョンファンミン

ねえ、最も重要なコマンドの多くが印刷できない文字である言語を使用することを選んだのは私ではありません…他の言語。私はあなたがそれをした方法が好きですが、それはもっと合うように変更する必要があるかもしれません。)

@ ais523このコードの変更は難しいかもしれないことに同意します。これを軽減するために0、これらの文字は何でも("<+0+0+0+<;n4一部を除く)であり、Befungeコードの一部は移動できることを示すためにs を入れました。そして、次の人へのヒント:Befungeではほとんどのキャラクターがノーオペレーションなので、行を追加してもBefungeコードに影響を与えることはないでしょう。
ジョンファンミン

befunge-98(または他の同様の菌類)を提出することを考えてください。これは、定期的な'93では無操作であるかなりの量の操作が追加されるためです。しかしフィットするのは難しいかもしれない、と私は他のすべての言語は、私は...それらを回避することができるように働いたかを把握する必要があるだろう
MildlyMilquetoastを

19

21. Nim(161バイト)

#v`16/"<"6/b.q@#;n4"14""
#>3N6@15o|> ^*ttt*~++ %
#=~nJ<R"12";
#[

print((1/2and 9 or 13)-(0and+4)^1<<65>>62)#46(89999+++++!)=#print(17)#]#echo 21
#8dggi2` |1|6

最後の行の間にある2つ<ESC>のs 。今朝目が覚めたので、以前のものは急いでゴルフをしたことがわかります。私は152バイトを持っていましたが、それはPerl 5.24.0でのみ動作するようですので、TIOとの互換性のために、私は今のところ元の表現を保持しました。8d2`

Python 3に1、Vに2、Minkolangに3、> <>に4、Python 2に5、Japtに7、Retinaに8、Perlに9、Befunge-93に10、Befungeに11を印刷します-98、Fissionの12、Rubyの13、Turtlédの14、Haystackの15、Pythの16、Juliaの17、Cardinalの18、Rengの19、Preludeの20 、Nimの21

ideone.comのNimはバージョン0.11.2を使用していることに注意してください。このプログラムは#[ ... ]#2016年前半に追加された複数行のコメントに依存しているため、少々古すぎます。

CardinalのWindowsインタープリターのおかげで、私のワークフローは2つのラップトップとhttp.serverその間のPython で構成されています。


編集-その他のヒント:

  • 8最後の行の先頭には、網膜の出力だろうそれなしでそれ以外の場合は、最初の8試合に網膜の制限を設定することです2。これは、最後の行の正規表現が正確に8つではなく、2番目の最後の行で少なくとも8回一致する必要があることを意味することに注意してください-干渉の間にPreludeを修正してRetinaを正しくしましたが、最終的には不要であることが判明しました。
  • 最初の行の最後の引用符の不一致は、Pythが残りのコードの無効な構文について文句を言わないようにするためです。
  • 2行目を変更する場合、6@for Minkolang を変更する必要があります。これにより、ポインターが6スペース移動してに着陸します^
  • ペアが存在する[]ため、SMBFはに到達する前に0セル上に存在する必要があります[。あるいは、内部がセルをクリアする必要がある場合もあります。

たぶんゴルフにはもっとあります(今でも%Cardinalの前に漂遊スペースが見えます)が、私は早朝にゴルフをやめるべきです。


1
TIOがCardinal
MildlyMilquetoastを

19

51. アセンブリ(x64、Linux、AS)、1086バイト

#16  "(}23!@)(" 3//*v\D@;'[af2.qc]'#)"14";n4
#/*` PkPPZ (22)S"[!(>7 7*,;68*,@;'1,@␉␉␉␉ q
#>␉
# >36!@␉
#`<`
#<]+<[.>-]>[
#{
#z}
#
#=x<R+++++[D>+++++++EAL+++<-][pPLEASE,2<-#2DO,2SUB#1<-#52PLEASE,2SUB#2<-#32DOREADOUT,2DOGIVEUPDOiiipsddsdoh]>+.-- -. >][
#x%+>+=+~tt .
#D>xU/-<+++L
#R+.----\).>]|
#[#[(}2}20l0v01k1kx0l0ix0jor0h0h1d111x0eU0bx0b0o1d0b0e0e0@O6O4/0m1d0i0fx0g0n0n11x0o0n0cx0c0o0f0c0gx0g0f0h0j0j0i0001k10vx0v0l111111^_)  0046(8+9+9+9+9+=!)
###|
'\';echo 50;exit;';print((eval("1\x2f2")and(9)or(13))-(0and 4)^1<<(65)>>(62))or"'x"or'({({1})({1}[(0)])}{1}\{1})'#}#(prin 45)(bye)|/=1/24=x<$+@+-@@@@=>+<@@@=>+<?#d>+.--./
__DATA__=1#"'x"//
#.\."12"__*'
###;console.log 39
""""#//
=begin //
#sseemeePaeueewuuweeeeeeeeeeCisajjap*///;.int 2298589328,898451655,12,178790,1018168591,84934449,12597/*
#define p sizeof'p'-1?"38":"37"
#include<stdio.h>
main ( )/*/
#
#"`#"\'*/{puts (p);}/*'"`"
/*
<>{#65}//
#}
disp 49#//
#{
1}<>//
$'main'//
#-3o4o#$$$
#<R>"3"O.
=end #//
"""#"#//
#}
#s|o51~nJ;#:p'34'\=#print (17)#>27.say#]#print(47)#]#echo  21
#sss8␛dggi2␛ `|1|6$//''25  16*///89^_^_Z222999"26

リテラルタブ、リテラルESC文字。それ以外の場合、Stack Exchangeはプログラムを破壊します。作業したい場合は、下のTIOリンクの「入力」ボックスからプログラムをコピーすることをお勧めします。

もっと知りたいですか?polygot chatをお試しください!

オンラインでお試しください!

VIPスコア(Versatile Integer Printer):.008186(改善のため、次のエントリは1151バイト以下にする必要があります)

このプログラムは、印刷さ51議会で、50バッシュで、49オクターブで、48 Deadfish〜、で47リリーでは、46 Cubixで、45 PicoLispで、44 alphuckで、43網状で、42悪で、41 brainfで***を、40最小-2Dに39のCoffeeScriptで、38 Cは、37 C ++で36ラビリンスにおいて、35 INTERCALで、34レールで、33事件で、32 ワールにおいて、31モジュラーSNUSPで30空白で、29トリガーで、28脳フラックで、27のPerl 6において、26 05AB1Eで、25ピップで、24 Thutuで、23 Hexagonyで、22過少で、21ニムで、20プレリュードで、レンの19、枢機inの18、ジュリアの17、ピュースの16、ヘイスタックの15、タートルードの14、ルビーの13、フィッションの12、ベファンジュ93の11 Befunge-98において、109のPerl 5に、8網膜において、7 JAPTにおいて、6 SMBFで、5のPython 2で、4 > <>で、3 Minkolangで、2 V / Vimの中に、及び1 Pythonの3インチ

検証

ほとんどの言語は、上記のテストドライバーによってテストされます。

  • ここで出力19にRengをテストできます

  • ここで 31を出力するためにモジュラーSNUSPをテストできます

  • ここで見たキュービックスの立方体形状

  • インシデントは、前の回答で説明したようにトークンのバランスを保つことで確認されます。

  • Deadfish〜の場合、これで 48を出力するようにテストできます。Deadfish〜は標準入力に与えられるポリグロットを取得しますが、いくつかの>>プロンプトを標準出力に出力します。これは、Deadfish〜プログラムを実行することの避けられない結果です。

  • ここで出力51へのアセンブリをテストできます

感謝とお祝いの言葉

@ ais523の50-in-1-kの回答が2週間前に落ちたとき、涙が私の頬を転げ落ちました。美しすぎた。そして、それはバッシュにありました。完璧すぎました。

私は妻に目を向け、「多言語ができたと思う」と言って、大きな誇りを感じました。

彼女は私を見て、一瞬立ち止まり、「いい。ゴミを取り出してください。」

彼女が意味したことは、彼女が私と私のインターネットの友人に深い喜びを感じたということでした。皆さんに感謝とお祝いを申し上げます。

組立説明

その後の数日間、私の心は、Bashを投稿する少し前に@ ais523がポリグロットチャットで言ったことにさまよい続けました。彼は、アセンブリのいくつかのフレーバーは、#行コメントと/*ブロックコメントに基づいていることを指摘しました。それで、次の2週間、ゆっくりと頭を悩ますのに十分でした。

ポリグロットには、合法的な言語を含めるという暗黙の課題があります。ここでは正当な用語を非常に大まかに使用していますが、私はすべて、私が得ているものを理解することができると思います。Brainf ***を含めることは1つのことですが、MathlabやRのようなものを完全に含めることは別のことです。アセンブリは確かに後者のカテゴリに該当し、私はそれを手放せませんでした。しかし、私は議会のことを何も知らなかったので、これは困難な戦いでした。

AssemblyとC / C ++が共存する方法を探してしばらく問題に頭を突っ込んだ後、これがGNUアセンブラーのドキュメントであることがわかりました。

過去のアセンブラとの互換性を保つため、「#」で始まる行には特別な解釈があります。「#」に続くものは絶対式である必要があります(式を参照):次の行の論理行番号。次に、文字列(文字列を参照)が許可されます:存在する場合、それは新しい論理ファイル名です。残りの行がある場合は、空白にする必要があります。

これは、ポリグロットの1行目のC / C ++のプリプロセッサディレクティブと非常によく似ていることがわかりました。試行錯誤を重ねた結果#1 “bla” 1//*、アセンブリのみにブロックコメントが入力されることがわかりました。

そして、ポリグロットが作成されました。

最大のブロッキング問題が解決されたので、私はこのハローワールドの例でゴルフを始めました。

.intel_syntax noprefix
.section .data
     msg: .asciz "51"
.section .text
.global _start
_start:
    # write syscall
    mov     rax, 1
    # file descriptor, standard output
    mov     rdi, 1
    # message address
    mov     rsi, OFFSET FLAT:msg
    # length of message
    mov     rdx, 14
    # call write syscall
    syscall
    #End the Program
    mov    rax, 60
    mov    rdi, 0
    syscall

主著者のクレジット

実際、私は1分前に​​嘘をつきました。使用したアセンブリコードの最初のバージョンはAT&T構文でした。これは、アセンブリの2つの構文分岐の1つです。AT&T構文の主な要素の1つは、レジスタ参照が%プレフィックスを使用することであり、これはポリグロットの問題です。Cardinalは%ポインターの起点として使用するため、大量のゴミを散らかす%と、2番目のFission反応のようになります。

%レジスタプレフィックスとして使用しないもう1つの構文分岐は、Intel構文と呼ばれます。ポリグロットで最初の行を通過してブロックコメントを入力するために使用しているエクスプロイトは、GNUアセンブラー(略してGASまたはAS)にあります。ASには、両方の構文分岐を許可するという嬉しい機能があります。アセンブリコードの1行目で行われているIntel構文を使用することを宣言する必要があります。

アセンブリはレジスタを使用します。レジスタは、アクセス速度を上げるために文字通りCPUに配置された少数のメモリロケーションです。これは、その使用が開発者の懸念から抽象化されていないという事実以外、アセンブリに固有のものではありません。

さまざまな目的に使用されるさまざまな種類のレジスタがあります。ウィキペディアから:

•AX乗算/除算、文字列のロードとストア

•文字列操作とシフトのCXカウント

•INおよびOUTのDXポートアドレス

•MOVEのBXインデックスレジスタ

•SPはスタックの先頭を指します

•BPはスタックフレームのベースを指します

•SIはストリーム操作のソースを指します

•DIはストリーム操作で宛先をポイントします

AXは、次の_start関数の行で使用されますmov rax, 1。メモリが64ビットであることを示しています。これをに交換した場合、32ビットメモリを示し、64ビットプロセッサで完全に有効です。使用可能なメモリの上半分は使用しません。16ビットメモリを示すには、を使用します。これは、整数を出力しているだけなので問題ありません。したがって、すべてのレジスタ参照を16ビットに変更することにより、数バイトをゴルフできます。rraxeax

さて、すべてのレジスタ参照がをドロップできるわけではありませんrmov rsi, OFFSET FLAT:msg。アセンブリに精通しているが、この声明に精通していない場合、これはASに半固有であるためです。少なくとも、これから私が収集したことは、私が声明をちょうどに下げるのに役立ちましたlea rsi,m

この後、私は経験的に、ただ警告を発するだけで完全にノック_start:ダウンし_p.global _start完全にカットできることを発見しました。第二に、msg:単一の文字変数に縮小されましたp:。Alphuckの利点のために追加されpsアセンブリの一部を相殺するために、文字列変数と開始関数の両方を選択しました。

次に、;すべての命令を1行に収めるために、命令を区切るために入力しました。これは主に#//、Thutuの利益のために各行で過度の後続s を避けるためです。また、アセンブラーでは大文字と小文字が区別されないように見えたため、インシデントの不均衡を避けるために、さまざまな文字を大文字または小文字で区別しました。

このゴルフは私たちを次のようにしました:

.intel_syntax noprefix;.text;mov ax,1;mov di,1;lea rsi,m;mov dx,2;syscall;mov ax,60;mov di,0;syscall;m:.asciz "51"

このすべての後、JaptとUnderloadがこの回答の唯一の問題の子供でした。Japtには*1行目に追加されたビーフがいくつかありましたがputs(p);、C ++の回答の行に戻ることで修正されたようです。私(もこの行にa を投げて、そしてOctiveの行でそれを閉じました。これは、アンダーロードがセフォールトを停止するためでした。同様の処理が1行目にあり、*そこに追加されました。

これは、このチャレンジのバイト要件を満たすのに十分でした。実際、このバージョンのポリグロットを作成することでこれを検証しました。しかし、可能であればVIPスコアも改善したいと考えました。そして、私はチャレンジのすべての要件を満たしていたので、コードを下にゴルフするために協力することについては大丈夫だと感じました。そこで、私は多声チャットに立ち寄って、ゴルフの助けを求めました。

もっと深くしなければならない

@ ais523は、このステートメントを使用して、マシンコードとして命令をアセンブラに渡す手法を示しました。

.text;.long 2298589328,898451655,12,178790,1018168591,84934449,12597 マシンコードは、CPUによって直接実行される一連の数値命令であり、10進数、16進数、または8進数で表すことができます。私たちの目的では、10進数が最も短いのです(16進数0xを表すにはリードが必要です)。.longここでのステートメントは、続くものが一連の10進マシンコード命令であるという宣言をしています。

まあ、私はアセンブラーが許可するものを見るためにこの声明を少し突いて、いくつかの変更を加えました。最初に、.text;警告の問題のみですべてを一緒に削除できることがわかりました。それからしばらくして、私はまた、AS仕様ドキュメントのこのステートメントを見つけました

.longは.intと同じです

クール。そのため、クイックバイトのスワップを作成できます。これで、アセンブリですが、実際にはマシンコードが次のように削減されました。

.int 2298589328,898451655,12,178790,1018168591,84934449,12597

これはすべてうまくいきますが、マシンコードを直接操作するのは非常に難しく、少なくともすべての翻訳を行う方法を知りたいと思いました。理想的には、マシンコードをアセンブリに戻したいと思います。これを行う最も簡単な方法は、オブジェクトダンプを取得することです。@ ais523は、このコードスニペットを使用してこれを示しました。

これがコードスニペットです。

そして、ここにちょうどアセンブリがあります。

nop
mov    $0x1,%al
mov    %eax,%edi
lea    0xc(%rip),%rsi
mov    $0x2,%dx
syscall 
mov    $0x3c,%al
xor    %edi,%edi
syscall 
.byte 0x35
xor    %eax,(%rax)

このリンクには、アセンブリの各行に沿って2文字の16進数も表示されます。これらは10進命令に対応しています。あなたが入れた場合たとえば、2298589328この HEXコンバータへ進、あなたが得る8901B090バック。よく見ると、これらはオブジェクトダンプからの最初の4つの16進命令です(逆順)。

私が知ることができることから、4つの16進数のセットは常に10進数に変換するために使用され、ここで使用されている主なバイト節約のトリックは、4セットの最後のいくつかの16進数が00になるようにアセンブリを構築することです.int省略されたステートメントにそれらを入れると、先行ゼロになります。

これは12声明で起こっていることです。オブジェクトダンプの16進数部分では、これは0c 00 00 00です。

これは、アセンブリに関する私の理解が2週間で得られた限りです。なんとクラッシュコース!

インシデント

インシデントは、ポリグロットトークンに最も重い重みを付けたため、短いアセンブリ実装ではより困難な解決策でした。これがインシデントレポートです。

  • ! 行2でdetokenizes !

  • EAINTERCAL行の最初の行は、それ自体を非トークン化します

  • 2行目から2行目までの最後のスペースは、スペーススペーストークンをトークン化解除します。

  • 85 最後の行でdetokenizes

  • R#<R>"3"O.detokenizesR

  • 65<>{#65 }//トークン化65

  • 16 最後の行でそれ自体をdetokenizesし​​ます

  • 89 最後の行では、それ自体をトークン化します

枢機卿

記録するのを忘れていたCardinalに変更を加えたことがわかりました。私はバイトを節約する方法を探すためにいろいろと時間を費やし、Cardinalを学ぶことにしました。ドキュメントを少し読んだ後、この行を見ました。

= ポインターのアクティブな値を非アクティブな値にコピーします。

これはポリグロットで使用されているトリックではありませんでした。古いソリューションには次のインストゥルメントが含まれていました: `++〜* t

++ 2までの増加。

~ アクティブなスタックを変更します

* スタックを追加します。

命令~*だけで実現できることに気づいた=ので、ソリューションを作り直して、無駄なスタックスワッピングを取り除き、この小さなバイトの節約を追加しました。


3
この素晴らしいステージでポリグロットを維持する方法についても興味があります。どうやって???
Qwerp-Derp

3
これは本当に純粋な美しさのものです。
ミューザー

次は単項式である必要があります
クリストファー

いいえ、それは(コードが3バイト以下であった場合を除く)VIPスコアを殺害う
CalculatorFeline

19

6. SMBF、45バイト

#v<++++<;n4
#>3N.
print('1'if 1/2else'5')
#i2

オンラインで試す

このプログラムは、印刷物1のPython 3において、2 Vで、3 Minkolangのv0.15で、4 > <>で、5のPython 2、及び6 SMBFです。

SMBF(別名Self-modifying Brainfuck)はを使用してい<++++<>.ます。ポインターを左(ソースコードの最後の文字)に移動し、セルを4回インクリメントしてから印刷します。


17

13.ルビー(129バイト)

#v;2^0;7||"<+0+0+0+<*!2'!1'L;n4
#v0#_q@
#>3N.
#|\w*
#8  ^1b0<
#|
#M`
print ((0 and'13')or(None and 9 or 1/2 and 1 or 5))
#jd5ki2

ais523のPerlの回答に従ってEscjとの間の最後の行のリテラル文字に注意してください。d

オンラインでお試しください!

これは、印刷1、Pythonの3の2のVimで、3 Minkolangにおいて、4 > <<において、5のPython 2で、6 SMBFにおいて、7 JAPTにおいて、8網膜において、9 Perlで、10 Befungeで、11 Befunge-で98、Fission で12、Ruby で13

Rubyで真実でprintあるという事実を悪用するために、既存のステートメントを少し変更するだけ0です。正しく解析するために、他のステートメントにスペースを追加する必要がありました。


17

15. Haystack(141バイト)

#v;2^0;7||"<+0+0+0+<*!2'!1'L#'1r'4;n4
#v0#_q@
#>3N.15o|1
#|\w*
#8  ^1b0<
#|
#M`
print ((0 and'13')or(None and 9 or 1/2 and 1 or 5))
#jd5ki2

注:存在しESCた後は、o3行目以降j最後の行に

これは、プリント1を Pythonで32のVimで、3 Minkolangにおいて、4に、<> < 5 Pythonで26 SMBFにおいて、7 JAPTにおいて、8網膜において、9 Perlで、10 Befungeで、11 Befunge-に98、Fission で12、Ruby で13、turtlèdで14、Haystackで15

オンラインでお試しください!

説明

#v                           go down
 v
 >                           go right
  3N.                        does nothing important
     15o|                    outputs 15 and ends program
                             there is an <ESC> after 'o' since 'o' in Vim enters insert mode
         1                   I added this to satisfy Retina

素晴らしい、Haystackをチェックしてくれてありがとう!:)
Kade

@Kade素敵な2D言語です。オンラインインタープリターの方が便利です(既にPythonインタープリターをダウンロードしていますが):)
Cows quack

@Kade haystackのTIOリンクがあります!
牛は

@MistahFigginsリンクは私のために動作し、15を出力します
牛は

@MistahFigginsキャッシュ?何の問題もなく、エラーメッセージもなく動作するため
Cows quack

17

9. Perl、84バイト

#v;7||"<+0+0+0+<;n4
#>3N.
#|\w*
#8
#|

#M`
print(None and 9or 1/2and 1or 5)
#j␛d5ki2

jとの間の実際のコードには、リテラルESC文字がありdます。ここでは、見やすくするためにwithに置き換えられています。

これは、印刷1のPython 3において2はVimに(局所的に試験されたが、ここの非常によく似た言語Vのリンク)、3 Minkolangにおいて4 <> <において5のPython 2で6 SMBFにおいて7 JAPTで8 RetinaでPerl9

異なる言語で異なる動作をする不正な算術演算を使用して、より多くの特殊言語を取得しましょう。(NonePerlでPythonでfalseyしかしtruthyあり、およびand/ orチェーンは、両方の言語で同じように動作します。)

Pythonとは別に、vimコードを変更する必要がありました。一連のノーオペレーションにする代わりに、ジャンクを挿入させ、最後にジャンクを再び削除しました。


4
マジ?文字通りのESCを入力すると、他の誰かが答えを作成するのを非常に難しくします。コードをテストできる必要があります。
mbomb007 16

1
回答にリテラルのESCを含める必要はありません。これを書く最も簡単な方法であることがわかりました。(さらに、Firefoxとローカルテストで正常に機能します。投稿に投稿できないようにする唯一の理由は、私がSEに使用しているChromiumは入力ボックスに配置したくないということです。)

1
また、Vimをローカルでテストすることはできません。言語は、使用されるインタープリターによって定義されます。それで、私たちがこれまでずっと持っていたのは本当にVです。
mbomb007 16

1
エラー、vimVimのインタープリターではありませんか?(vimただし、VとVの両方で動作します。)

4
@ ais523 maybeを入力して0x1Bバイトを表すことができますか?
betseg 16

17

36. ラビリンス、647バイト

#v`16/"<"6/b.q@"(: ::Q):  ␉␉␉␉ :(22)S#;n4"14"
#>3N36!@@15o|>␉^?.*ttt*~++~~~%
#= >␉1#v#v0l0mx01k1k0l0ix0jx0h0h1d111P0eU0bx0b0o1d0b0e0e00x1d0i0fx0g0n0n11x0o0n0cx0c0o0f0c0gx0g0f0h0j0j0i0001k10mx0m0l11111100(^_)
#[␉
#`<`|
print((eval(" 1\x2f2")and(9)or(13))-(0and 4)^1<<(65)>>(62))or' (\{(\{})(\{}[()])}\{}\{}\{})'#46(8+9+9+9+9+=!)#1111|=/=1/24=x=9[<$+@+-@@@@=>+<@@@=>+<?#>+.--.]/
__DATA__=1#//
#.\."12"␉*
""""#//
=begin␉//
$'main'//
#-3o4o#␉
=end   #//
"""#"#//
#0]#echo 21#/ (\[FAC,1<-#2FAC,1SUB#1<-#52FAC,1SUB#2<-#32FACLEGEREEX,1PLEASEGIVEUPPLEASE) a
#   +/Jn~
#0␛dggi2␛`␉|1|6$//''25  >>>#>27.say# =#print(17)#$nd^_^_.]Q2229991#;abcd!fghij/+23!@"26

リテラルタブ、リテラルESC文字。それ以外の場合、Stack Exchangeはプログラムを破壊します。作業したい場合は、下のTIOリンクの「入力」ボックスからプログラムをコピーすることをお勧めします。

オンラインで試してみてください!

流れ落ちる

このプログラムは、ラビリンスで36、INTERCALで35、Railで34、Incidentで33、Whirlで32、Modular SNUSPで31、Whitespaceで30、Triggerで29、Brain-Flakで28、Perl 6で27、05AB1で26を印刷します、ピップで25、トトゥで24、六角形で23、アンダーロードで22、ニムで21、プレリュードで20、レンで19、カーディナルで18、ジュリアで17、ピュイスで16、ヘイスタックで15、タートルードで14、13 Rubyで12、Fissionで12、Befunge-98で11、Befunge-93で10、Perl 5で9、Retinaで8、Japtで7、SMBFで6、Pythonで5、> <>で3、Minkolangで3 、V / Vimに2つ、Python 3に1つ。

検証

ほとんどの言語は、上記のテストドライバーによってテストされます。ここでRengを、ここでModular SNUSPをテストできます。それらはそれぞれ19と31を出力します。@ ais523はインシデントコードのデバッグと修正に役立ち、現在は機能しています。

ラビリンスの仕組み

ラビリンスは、ソースの列の一部を少しシフトすることから始まりますが、数ステップ後、ポインターはN2行目の位置に移動します(最初は、ポインターがそこに到達するまでに、もうNそこにありません)。 、スタックの最上部に0が付きます。次に、単に36をプッシュして印刷し、次で終了します。36!@

私がやったこと

Labyrinthを追加したいと思っていました。これは、私が少し知っている数少ないエゾランの1つだからです。デバッガーでは、最後の行の8を0に変更することで、ラビリンスが無限ループに陥ることがなく、奇妙なことに、他に何も壊れていないように見えました。そこから、必要なraw 36と出力コマンドをダンプしましたが、これらは都合のよい@ことに終了しました。

それから、私が壊したもの、ミンコラン、枢機inal、および六角形の修復に取りかかりました。

これ!により、Minkoは次の文字をスキップすることになり、終了する必要があったため、余分なを追加しました@。ここまでは順調ですね。

2行目の長さの変更により、Cardinalはその出力ステートメントをミスしました。.最初の行に余分なものを追加しようとすると、プレリュードは気を失いました(理由はわかりませんが、正直なところ)、別の方法で2行目にドロップしました。それが誤って3番目のCardinalポインターを生成したので、?(必要な選択ではなく、FissionとCardinalの両方を修正した最初に見つけたものだけで)ものを埋め込みました。

幸いなことに、六角形は比較的単純な修正でした。ポインターがコードを見つけられるように、文字列を投げました。私はアルファベットが以前に現れるべきではなく、インシデントで問題を引き起こさないと考えました。これは、インシデントをテストしていないことに気付いたときでもあります。@ ai523のおかげで、余分な感嘆符が必要であることがわかったためe、アルファベット文字列のがに変更されました!

汎用整数プリンターのスコア

質問に対する@Stewie Griffinのコメントをキックオフするために、「The Verstatile Integer Printer」に入力された場合に各回答がどのように採点されたかを示すスニペットを以下に示します。


1
わかりました、これはインシデントに関する問題をほんの少しだけ引き起こすように見えます。感嘆符がちょうど3つあるため、プログラムの中心がずれていますが、フィラー文字を4番目の感嘆符に変更することで簡単に修正できます。e感嘆符に追加したアルファベットを変更しました。それはうまくいくようです。

1
いいね!私は密かに迷宮を待っていました、あなたにとても良い。別の注意として、これまでのコードの最良の部分(私にとって)は、「PLEASEGIVEUPPLEASE」メッセージであり、試してみるのをやめるように言っています。;)
MildlyMilquetoast

17

41. brainf ***、916バイト

#  4"16" 3//v\(@#/;\D"14"<;n4
#/*`3 afaaZ">;[77*,68*,@;'1,'1,q)(22)S#   ␉␉␉␉ (
#yy␉;36!@
#`<` ␉
#=␉x
#<]+<[.>-]>[
#␉<
###xR+++++[D>+++++++L+++<-][<<<]>+.---.>][
#px%>~~~+␉+~*ttt*.x
#D>xU/-<+++L)
#R+.----.R␉>]|
#[#yy#yy0l0mx01k1k0l0ix0jx0h0h1d111P0eU0bx0b0o1d0b0e0e00x1d0i0fx0g0n0n11x0o0n0cx0c0o0f0c0gx0g0f0h0j0j0i0001k10mx0m0l11111100(^_)
#|␉
print((eval("1\x2f2")and(9)or(13   ) )-(0and 4)^1<<(65)>>(62))or'(\{(\{})(\{}[()])}\{}\{}\{})'#46(8+9+9+9+9+=!)#1111|=/=1/24=x=9[<$+@+-@@@@=>+<@@@=>+<?#>+.--.]/
__DATA__=1#//
#.\."12"␉*
###; console.log  39
""""#//
=begin␉//
#*/
#define␉z  sizeof 'c'-1?"38":"37"
#include<stdio.h>
int main()  /*/
#()`#`\'*/{puts(z);}/*'``
$'main'␉//
#-3o4o#$$$
<>"3"O.<␉>//
#
=end   #//
"""#"#//
#0]#echo 21#/(\[FAC,1<-#2FAC,1SUB#1<-#52FAC,1SUB#2<-#32FACLEGEREEX,1PLEASEGIVEUPPLEASE)  a>>>
#>27.say# /7Jn~15o|  
#8␛dggi2␛`␉|1|6$//''25  =#print(17) ###^_^_LEintnd"3"z!]/}23!@/*///Z222999"26

リテラルタブ、リテラルESC文字。それ以外の場合、Stack Exchangeはプログラムを破壊します。作業したい場合は、下のTIOリンクの「入力」ボックスからプログラムをコピーすることをお勧めします。

オンラインでお試しください!

VIPスコア(汎用整数プリンター):0.01329

流れ落ちる

このプログラムは、印刷物41 brainfで***、40最小-2Dに39のCoffeeScriptで、38 Cは、37 C ++で36ラビリンスにおいて、35 INTERCALで、34レールで、33事件で、32ワールにおいて、31でモジュラーSNUSP、30空白で、29トリガーで、28脳フラックで、27のPerl 6において、26 05AB1Eで、25ピップで、24 Thutuで、23 Hexagonyにおいて、22 過少で、21ニムで20プレリュードで、19 Rengで、18カーディナルで、17ジュリアに、16 Pythで、15干し草で、14 Turtlèdで、13ルビーで、12核分裂で、11 Befunge-98で、10 Befunge-93で、Perl 5の9、Retinaの8、Japtの7、SMBFの6、Python 2の5、> <>の4、Minkolangの3、V / Vimの2、Python 3の1

検証

ほとんどの言語は、上記のテストドライバーによってテストされます。ここでRengを、ここでModular SNUSPをテストできます。必要に応じて、それぞれ19と31を出力します。

最後に、テストドライバーが更新され、トークナイザーが含まれるようになりました。すべてのCコードは、Bashスクリプトの観点からの引数として保存されます。また、出力を変更して、垂直に出力するのではなく、各トークンの後に水平に折り返すようにしました。これは、ホワイトスペースの出力に一致させるための私の好みでした。しかし、混乱しすぎていると感じた場合、他の人はそれを変更できます。

また、ランダウンでTurtlèdのUFT8文字の列間隔を処理するためにテストドライバーを調整しました。そのズレが原因で気が狂いました!「修正」はかなりハックっぽいです。なぜなら、それはèを探し、その場合に列幅を変更するだけであるからです。

説明

まず最初に、前回の投稿の@SnoringFrogの多目的整数プリンタースコアランダウンコードスニペットがどれほど素晴らしかったかを言いたいと思い ます。私はしばらく投稿する前に答えを計算してきましたが、これは私がそれを小さく保つことを再刺激しました。最終的に@ sp3000の答えを打ち負かすことができると思います。

それで、私はこの答えに取り組み始めました。できることをゴルフダウンしようとすることで、かなり成功しました。合計バイトカウントが#40未満の別の言語で答えさえしました。しかし、Minimal-2Dでゴルフをしようとすると、BFを学ばなければならなかったので、その派生物で作業しやすくなり、その過程で@Primoの記録破りのHello、World!を見つけました。私は優雅さに恋をした。

Minimal-2Dは、@ Primoで使用されているテープ初期化手法を利用するのに十分なほど効率的ではなかったことが判明しましたが、とにかくバイトが多すぎると思うので、私は意見を持っています。結局のところ、整数を出力しようとしているだけです。しかし、@ PrimoはBFで乗算する方法を学ぶ道を教えてくれました。これをMinimal-2Dのコードに持ち込みました。

その後、すべての後に、BFを含める方法についての@SnoringFrogのコメントを読み直し、それを実行できるだけでなく、BFの回答で使用したMinimal-2Dコードの多くを使用できることに気付きました。それで私はBFで答えるために掘り下げました、そして、ここにいます。

詳細に入る前にもう1つ。ゴルフ以外の理由でいくつか変更を加えました。最初に、@ SnoringFrogの追加されたコードの大部分を2D言語のすぐ下のいくつかの行に移動しました。私にとっては、将来のバグを可能な限り防ぐために、2D-langがポリグロットの中心を横断するのを防ぐことは、長期的な戦略的な動きです。この動きのバイトヒットは低かったので、私はそれに行きました。

第二に、さまざまなリファクタリング中に、BegungesとMinkolangが数値出力の後に後続スペースを出力し、これがこれらの言語のテストドライバーで見られたnullバイトの原因であることがわかりました。値を直接ではなく、スタックの値をASCIIコード(末尾スペース機能を含まない)として出力することで、これらを修正しました。この変更でも小さなバイトヒットがありましたが、テストドライバーの出力は非常に均一です。どうしてできないの?

SM / BF

簡単に基本を確認しましょう。これらは、SMBFおよびBFの唯一の有効なコマンドです。

>   Move the pointer to the right
<   Move the pointer to the left
+   Increment the memory cell under the pointer
-   Decrement the memory cell under the pointer
.   Output the character signified by the cell at the pointer
,   Input a character and store it in the cell at the pointer
[   Jump past the matching ] if the cell under the pointer is 0
]   Jump back to the matching [ if the cell under the pointer is nonzero

どちらの言語にも、値が保存および変更されるメモリテープがあります。SMBFの唯一の違いは、実行されているコードはすべて、開始点の左側のメモリテープにも保存されることです。@SnoringFrogが指摘したように、SMBFとBFに異なる結果を生成させるには、メモリポインターを原点の左側に移動することが必要です。TioのBFインタープリターでは、メモリポインターは原点の左に移動でき、SMBFが認識するポリグロットのASCIIコードの代わりに0を検出します。次に、SMBFとBFの両方で実行して、違いを例示できる例を示します。

ポリグロットの開始時に、Befunges >は2行目が完了するまで実行する必要があり、Perl6ではすべての>前にが必要です<。したがって、SM / BF <>はメモリポインターを原点に置いて[から、両方の言語の攻撃的な文字を]6行目にジャンプします。

次に、両方の言語の元のメモリセルをインクリメントし、でメモリポインタを左に移動します+<。(会話の慣習では、起点メモリセルをセル0、起点の右側のセル1、2、...、および左側のセル-1、-2、…と呼びます)。セル-1には、SMBFのポリグロットの最後の文字のASCIIコードとBFの0が含まれているため、次[が検出されると、]SMFがコードに渡される間はBFのみがジャンプします。

SMBFがトラバースする[.>-]と、ポリグロットの最後にある6を出力し、メモリポインターをセル0に戻し、その値をゼロに戻してを終了し]ます。確認すると、このパイントのテープは次のとおりです。SMBFの負のセルはポリグロットを保持し、0で正のセルはゼロを保持しています。BFの負および正のセルはゼロを保持しますが、元のセルは1を保持します。

次に、>SMBFをセル1に移動し、BFをセル0に戻し、BFがプライベートコードブロックに入ることを許可します[<+++++[>++++++++++<-][<<<]>+.---.>](これからBF以外の文字を削除しました)。ここで、セル-1に戻り、ループ制御変数(セル-1)を値5に初期化します。次に、ループに入り、セル0に10を追加し、セル-1を5回デクリメントしてからループを終了します。値0のセル-1を指します。

次に[<<<]、ゼロを指しているときに遭遇するため、BFはこれを通過しません。ここでの目的は、Perl6がエラーにならないように、いくつかの>'と先行する<'のバランスをとることです。

この時点で、セル0の値は51です。4のASCII値は52です。したがって、ポインターをセル0に移動して1を追加し、値を出力します。そして最後に、セル0をASCII文字1までデクリメントし、メモリポインタをセル1(値0)に設定してからを通過して終了し]ます。

SMBFとBFは、両方とも[0の値で休んでいる間に、両方とも8行目で最後にヒットします。したがって、両方とも]、行11で遭遇するまで残りのMinimal-2Dコードを飛び越えます。しかし、これは短命[です。

リファクタリング

最小2D

Minimal-2Dの再書き込みは、主にBFの乗算トリックと同様の方法でいくつかのバイトを保存することでした。ただし、Minimal-2Dには、ループ制御用の[および]文字がありません。代わりに、次のコマンドがあります。

/   Skips next instruction if the data pointer is set to 0.
U   Tells the program to switch to the up direction of processing instructions.
D   Tells the program to switch to the down direction of processing instructions.
L   Tells the program to switch to the left direction of processing instructions.
R   Tells the program to switch to the right direction of processing instructions.

これらは、2Dマナーではあるが、BFと同じ論理構造を生成するために使用できます。たとえば、BF ++++++[>++++++<-]>.はMinimal-2Dのこれと同等です。

以下は、ポリグロット内のMinimal-2Dのコードの簡易バージョンです。余分なコードはすべて削除され、文字を保持しているすべての場所はに置き換えられてい#ます。

###################D
###R+++++[D>+++++++L
###>
D>#U/-<+++L)
R+.----.R

Dライン1に命令ポインタをダウン送信L左にポインタを送信ポリグロットのライン8。ここでは、ループ制御変数(セル0)を7に設定し、メモリポインターをセル1に移動して、ループに入ります。ループでは、セル1に3を追加し、セル0をデクリメントしてから、セル0の値がまだゼロかどうかを確認します。そうでない場合は、セル1にさらに8を追加し、デクリメントして再度確認します。このループの結果は、セル1の値がループの終わりに51(6 * 8 + 3)に設定されることです。

をホッピングしてループを終了しU、メモリポインターをセル1に移動してから、ポリグロットの行11で右に移動します。最後に、4のascii値まで増分し、0のascii値まで減分してから、プログラムを終了するために右に実行します。

網膜

Retinaには、すべてのBFデリバティブを扱うのが難しい多くの要件がありました。それは連続したもの+やミスマッチしたもの()や好きではありません[]。しかし、これらは実際には他のすべての行の要件であるため、BF、SMBF、Minimal-2Dの多くの作業は、偶数行に大量のコードを配置することを中心に展開されました。

ただし、Retina専用にコミットされた1バイトは|11行目の最後にあります。@ ais523を引用すると、「| 何にでもマッチします」。これがないと、Retinaは0を返します。これで修正される理由はわかりません。おそらく長蛇の列を避けてきたので、あまりRetinaを掘り下げる必要はありませんでした。しかし、プレリュードのように、デバッグ方法を理解する必要がある限り、それを理解する必要はないことがわかりました。それが原因で壊れています。@ ais523のコメントに基づいてこの修正を推測し、報われました。私は学校にはあまりにもクールだと思います。

枢機卿

@SnoringFrogのCardinalのコードに対するMinimal-2Dの配置が好きになりました。CardinalがRetinaを混乱させないことを考えると、これは良い場所であり、Minimal-2Dと織り交ぜることができるように見えました。そのため、Minimal-2Dを2Dの土地に移植しようとしたときに、Cardinalを乗せました。ただし、Cardinalには外観上の変更がいくつかありました。最初に、ループ内のメモリポインターを変更するためにMinimal-2Dの>ステートメントの冒頭近くに投げました#p x%>~~~+ +~*ttt*.x/次に、Minimal-2Dがループを正常に終了する余地を与えるためにすべてを1文字右にシフトしました。pこの刺し傷では、この文字のパディングのためです。

Befunge / 98

実際、Befungesは、C ++リファクタリングがこのコードを除く他のすべての2D langコードを変更したため、私が多言語を駆使して始めた場所です。このコードでWTFを学習しようとすると、Begungeのドキュメントでこれを見つけました。

この.コマンドは、スタックから値をポップし、10進整数として出力し、その後に Forthのようなスペースが続きます。,値をポップし、それを文字のASCII値として解釈し、その文字を出力します(その後にスペースは続きません

ほらほら!出力のnullバイトをクリーンアップできます。この後は、より大きなasci値を入力する方法を考え出し、コードを分離するだけでした。Befunge-98には;[77*,68*,@in をスキップするように指示するジャンプコードがあり;[77*,68*,@;'1,'1,q、分離が行われました。

Befunge-98に'は、次の文字のASCIIコードを取得するコマンド()もありました。したがって、'1,文字のコードasciコードを1取得し、スタックに配置してから、スタックの一番上の値のascii文字をで出力し,ます。これを2回実行して11を印刷し、a qをドロップして正常に終了する必要があります。

適切なBefungeは少し便利ではありませんが、ただだけです。ここで、スタックに目的のコードを配置する計算を実行する必要があります。幸いなことに、同じ出力コマンドの前に、コードに7 * 7と6 * 8を簡単に掛けることができました,。その後@、兄のコードが出力を汚染する前に、Befungeを終了しました。

ミンコラン

Befungeの末尾のスペースの修正を見つけた後、Minkolangの修正も見つけるというアイデアにかなり夢中になり、Minkolangのドキュメントには、この時点までに使用されていた出力コマンドがBefungeインタープリターと同じように機能することが記載されていました。OたまたまこのBegungeネスを共有しているとは記述されていなかった別の出力コマンドとして文書化されたので、暗闇の中でショットを撮り、文字列を出力しようとしました"3"。完璧な勝利。

> <>

Minimal-2Dコードを移動するときに最初に確認したことの1つは、それと一緒に移動できることを確認することでした。2Dポリグロット横断現象に対処する場合、すべての違反に対処します。基本的に、;n4 1行目の終わりに配置し、\Dさらに1 行目に戻すという解決策に道を譲りました。 。これは、後で別の類似言語から分岐するために使用できると思います。

Perl6

<>この回答では、Perl6のバランスの問題について他の場所で説明しましたので、もう一度説明するつもりはありません。しかし#>27.say#、最後から2番目の行に移動したことを指摘したいと思います。この回答には機能的な目的はありません。このラウンドを使用しなかったという別の答えを満たすために、実際にこの動きをしました。私は次の機会にその答えを投稿する予定があるので、そのままにしておくことにしました。元に戻したりやり直したりするのは面倒です。

バグの修正

05as1e

05as1eは、古いバージョンほど新しいBegungeコードを好まなかったのは間違いありません。それ,が唯一の革命的なキャラクターだからだと思う。いずれにせよ"、攻撃的なコマンドを隠すために2行目に戻る必要があり、両方の言語でyes-opであった"ため、Befungeコードパスの前に行かなければならないことがわかりました"。(yes-opのような用語を作成できますか?)行2の2次元性はかなり厳格ですが<、Begungeのコードパスの前をで置き換えることができました"。の<しかし、Perl6のの要件でした。(<先行するすべてを持っている必要があり>ます。)<05ab1eとPerl6の意見の不一致を解決する本能と予知によって占領された場所にインライン1 をドロップすることができました。

行2のBefungeの変更により1、インシデント/旋回行の前にポリグロットに余分な行が追加されました。この追加1により、Whirlはホイールの間違った指示を指し始めました。1C / C ++のプリプロセッサディレクティブの最初は、コード内の行番号参照のみでした。これは他の行番号と同じくらい簡単にできる4ため、Whirlを満たすように任意に変更しました。

インシデント

ポリグロットの最後にあるdetokenizing文字列はこの時点ではよく知られているので、ここでは説明しません。文字列からできることを削除し、必要な新しいトークンを追加しました。この文字列に含まれていない2つのdetokenizing文字がありますが、指摘する必要があります。まず、第二Rでは #R+.----.R >]|、それは核融合の出発点だ、と同じ方向に融合出発点の見出しがすでにあったので、それは、このライン上のより安全だったので、ここでは必要とされています。第二に、x中には#= xに関与トークン削除することです␉␊#より一般的になってきたパターンを、。

その他

六角形、空白、およびプレリュードにはすべて通常のマイナーな調整がありましたが、特別な話はありませんでした。

最終的な考え

この答えはこれで全部です。次の答えの出発点を探している人には、悪をお勧めします。私はあまり詳しく見ていないが、うまくいくように思えるが、統合するのはそれほど難しくないだろうと思う。ポリグロットの大部分をスキップするのに役立つジャンプコマンドがあることは知っています。幸運を。


インシデントで失敗します(印刷して3333から入力を待機します)が、おそらく簡単に修正できます。問題は、以前にプログラムの最後にジャンプするために使用されたトークンの後にトークン(-])を配置したことです。の他の2つの使用法は連続しているため、…xx…x…パターンを形成します。これは後方ジャンプです。ただし、最後に少し早く(または少し遅れて、またはその両方に)移動することは、かなり簡単です。^--]-]^_

@ ais523ありがとう。これは、執筆中にゴルフで得たものです。常にインシデントキッズをチェックすることを忘れないでください。幸いなことに、私はこれを減算による加算で修正することができたので、全体的な勝利だと思う。
チャンス

1
Vを-v(冗長)で実行する場合、リテラルエスケープ文字をで置き換えることができます。これにより<esc>、将来のコードの操作が少し簡単になる可能性があります。(私は思う)
パベル

うわー!賞金をありがとう@ ais523。月曜日の朝を始めるのになんて素晴らしい方法でしょう!
チャンス

Befunge-98はBefunge-93よりも古いですか?
CalculatorFeline

17

183. Intel 8080ブートイメージ(ZEMU)、9870バイト

オンラインでお試しください!

説明

マシンコードを追加するアイデアをくれたPotato44に感謝します。この答えを出すのはとても楽しかったです。

CP / M COMファイルを実行しませんでした。ポリグロットのサイズが約60KBに制限されているためです。ZEMUはデフォルトで6番目のセクター(1ベース、128バイトの論理セクター)からブートセクターをロードするため、ブートイメージはCOMよりも簡単に実行でき、ポリグロットの開始を実行する必要はありません。ブートコードは、ポリグロットのオフセット0x280((6-1)* 128)にある必要があります。

このページからリンクされているZEMUエミュレータを使用しています。ZEMUでポリグロットを実行するには:

  • ディスク> A:ポリグロットファイルを選択
  • オプション>命令セットI8080
  • 起動ボタンを押す

1文字をコンソールに出力する機能(cns$ot)は、ZEMUディストリビューションのBIOS22Dv221.ASMからコピーされました。2つの変更を行いました。パラメーターを制御するため、文字は7ビットASCIIにマスクされず、(ゼロの場合は相対ジャンプ)Zilog Z80命令がIntel 8080に存在しないためにjrz cns$ot置き換えられます。jz cns$otjrz

初期プログラム(Intel構文ここからリンクされているアセンブラー):

    org 3120h    ; chosen so that cns$ot == 0x3131, easier to generate
                 ; this program will be generated at this offset
                 ; to run it directly specify org 0100h

    mvi c,31h    ; '1'
    call cns$ot
    mvi c,38h    ; '8'
    call cns$ot
    db 38h       ; for answer 188, NOP in I8080
    mvi c,33h    ; '3'
    call cns$ot
    hlt          ; halt processor

;;;;;;;;; copied from BIOS22Dv221.ASM
cno$sp equ 7dh
cno$sb equ 01h
cno$si equ 00h
cno$dp equ 7ch

; print char to console, receives char in c register
cns$ot:
    in cno$sp    ; in status
    xri cno$si   ; adjust polarity
    ani cno$sb   ; mask status bit
    jz cns$ot    ; repeat until ready
    mov a,c      ; get character in a
    out cno$dp   ; out character
    ret

このプログラムには、ポリグロットで直接使用できない文字が含まれています。ほとんどのASCII制御文字(コード<0x20)はSimulaでは禁止されています。非ASCII文字(コード> = 0x80)は、ファイルが有効なUTF-8でなければならないため、単独では表示できません。したがって、上記のプログラムは、有効なUTF-8である別のプログラムによって生成されます。

次のプログラムは必要なコードを生成し、そこにジャンプします。 ld (hl),aGrass('w'==0x77)のため使用できません。sub h(0x94)およびxor a(0xAF)はUTF-8継続バイトであり、UTF-8リードバイトを先頭に追加する必要があります。命令ret nc(= 0xD0、キャリーでなければ戻り)がUTF-8リードバイトとして使用されます。何も実行しないようにするには、scf命令を実行します(キャリーフラグを設定します)。また',''.'DOBELAの(0x2C)および(0x2E)も回避されました。org 0100h使用されたアセンブラーがそれを理解しないため、ディレクティブは使用されません(組織はGUIで設定されます)。とにかく、このプログラムは位置に依存しません。Zilogニーモニックの方が好きなので、より長いプログラムに使用しました。

Zilog構文アセンブラここからリンクされています

  ; generate: 0E 31 CD 31 31 0E 38 CD 31 31 38 0E 33 CD 31 31 76 DB 7D EE 00 E6 01 CA 31 31 79 D3 7C C9

  ld hl,3120h

  ld a,3Fh
  scf       ; set carry flag so that ret nc does nothing
  ret nc    ; utf8 lead byte for next insn
  sub h     ; a -= h; a = 0Eh;  utf8 cont byte (opcode 0x94)
  ld c,a

  ld (hl),c ; 0Eh    ; not using ld (hl),a because it is 'w'
  inc hl

  ld (hl),h ; 31h
  inc hl

  ld a,32h
  cpl       ; a = ~a; a = 0xCD
  ld d,a
  ld (hl),d ; CDh
  inc hl

  ld (hl),h ; 31h
  inc hl
  ld (hl),h ; 31h
  inc hl

  ld (hl),c ; 0Eh
  inc hl
  ld (hl),38h ; 38h
  inc hl

  ld (hl),d ; CDh
  inc hl
  ld (hl),h ; 31h
  inc hl
  ld (hl),h ; 31h
  inc hl

  ld (hl),38h ; 38h
  inc hl

  ld (hl),c ; 0Eh
  inc hl
  ld (hl),33h ; 33h
  inc hl

  ld (hl),d ; CDh
  inc hl
  ld (hl),h ; 31h
  inc hl
  ld (hl),h ; 31h
  inc hl

  ld (hl),76h ; 76h
  inc hl

  ld a,23h  ; not using ld a,24h because it has '$' (breaks SNUSP)
  inc a
  cpl       ; a = ~a; a = 0xDB
  ld d,a
  ld (hl),d ; DBh
  inc hl

  ld (hl),7Dh ; 7Dh
  inc hl

  ld a,c    ; a = 0Eh
  cpl       ; a = F1h
  dec a
  dec a
  dec a     ; a = EEh
  ld d,a
  ld (hl),d ; EEh
  inc hl

  scf
  ret nc
  xor a     ; a ^= a; a = 0; utf8 cont byte
  ld c,a
  ld (hl),c ; 00h
  inc hl

  ld a,4Ah
  scf
  ret nc
  sub h     ; a -= h; a = 0x19;  utf8 cont byte
  cpl       ; a = ~a; a = 0xE6
  ld d,a
  ld (hl),d ; E6h
  inc hl

  ld a,c
  inc a
  ld d,a
  ld (hl),d ; 01h
  inc hl

  ld a,35h
  cpl       ; a = 0xCA
  ld d,a
  ld (hl),d ; CAh
  inc hl
  ld (hl),h ; 31h
  inc hl
  ld (hl),h ; 31h
  inc hl

  ld (hl),79h ; 79h
  inc hl

  ld a,2Dh  ; not using ld a,2Ch because it has ','
  dec a
  cpl       ; a = 0xD3
  ld d,a
  ld (hl),d ; D3h
  inc hl

  ld (hl),7Ch ; 7Ch
  inc hl

  ld a,36h
  cpl       ; a = 0xC9
  ld d,a
  ld (hl),d ; C9h

  ld sp,3232h  ; set up stack for generated program

  ld hl,3120h  ; not using ld l,20h because it has '.'
  jp (hl)      ; go to generated program 
               ; confusing mnemonic - actually it is jp hl, ie. PC = HL
               ; opcode 0xE9, utf8 lead byte (0xE9 = 0b11101001), must be followed by 2 cont bytes
  db 80h,80h

このプログラムは次のものに組み込まれています。

! 1>?7ДOq#t#>2/Wr#t#t#q#68#r#t#t#68#q#63#r#t#t#6v#>#</Wr#6}#y/===Wr#7ЯOq#>J7Д/Wr#y<Wr#>5/Wr#t#t#6y#>-=/Wr#6|#>6/Wr122! 1退

ポリグロットのオフセット0x280になければなりません(2行目を参照)。テストドライバーの抽象化テストはそれをチェックします。

リファクタリング

シェルを最長行に戻しました。括弧は他の言語と整合しないため、このレイアウトがより気に入っています。MoorhensesとFlaksをシェルの前に移動したため、シェルが変更されても壊れません。現在、最も長い行には次のレイアウトがあります。

Grass  Moorhenses  Flaks  Shells  Rubies/Pythons/Perl5  PicoLisp  Prelude  Klein001

新しいシェルコード:

a=$(printf \\x00)
b=$(echo -n $a | wc -c)
case $b[1] in 1*)echo 54;; 4*)echo 78;; 8*)echo 166;; *1*)echo 50;; *)echo 58;; esac
exit

古いシェルコード:

a=$(printf \\x00)
b=${#a}
case "{"$ar[1]"}"${b} in *1)echo 54;; *4)echo $((19629227668178112600/ 118248359446856100));; *1*)echo 50;; *)echo 58;; esac
exit

の長さは今までに$a計算されてい$(echo -n $a | wc -c)ます(ここから)。最初はこれを使用してを取り除きましたが#、現在はコードが短いために使用されています。#Flaksはシェルの前にあるため、シェルを含めることができます。

Yash(166)はデフォルトでオプションをサポートしない組み込みechoコマンドを使用するため、「-n」と改行は出力の一部となり、追加の4バイトを与えます。設定されていない場合、ECHO_STYLEデフォルトはSYSV-nオプションは受け入れられません)。

このTIOリンクは、すべてのシェルでコードをテストします。

(((((シェルがUnderloadとRetinaを修正する前に追加。58プレリュード(#)afterで閉じられている)から隠すために、もう1つのペアのペアが追加されexitます。 {((((((はJapt用で、それなしではJaptがハングします。

フラク

Flaksの再配置により、開始コードを簡素化できます。([])残りは次のとおりです。

     line 21      (Grass(([5]{})))    scripting langs                  clear stack     Flaks main code                                                                                      begin skip code      the rest of polyglot   end skip code   print(85)
old: []{}[][][]   ((([]{})))          ((()()<<()>>)((()([])))<<()>>)   {}{}{}{}{}{}{}  ({}<(((((()()())){}{})){}{})>)(({})){}{(<(<()>)({})({}<{}>({}){})>){({}[()])}}({}){}({}()<()()()>)   (<><()>){({}[()])}{           ...           }{}<>              ()
new: []{}[][][]     ([]  )                                                             ({}<(((((()()())){}{})){}{})>)(({})){}{(<(<()>)({})({}<{}>({}){})>){({}[()])}}({}){}({}()<()()()>)   (<><()>){({}[()])}{           ...           }{}<>              ()

このTIOリンクは、すべてのFlaksでコードをテストします。

分裂と枢機inal

核分裂はLNUSPに移動しました:R"12"R _*。2番目のポインターは、Fissionをできるだけ早く終了するために使用されます。3番目のステップで、詳細については回答54を参照してください。

CardinalはLNUSPに移動しました:@ %"18"。Fissionの場合と同様に、3番目のステップで、2番目のポインターを使用してCardinalをできるだけ早く終了します。

マリオLANG

プラットフォームとしてでは####...なく使用====...します:

ここに画像の説明を入力してください

最小2D

MarioLANGによるポリグロット:

ここに画像の説明を入力してください

ウィアード&1L_a

奇妙な:行10列79のスペースを使用してIPを反映します。
1L_a、Wierd:行9、列79のスペースが重要です。

ここに画像の説明を入力してください

キュビック

新しいコード: :1*23!/5x%6E0

:1*23!/5x%6E0
! - skip over / in Klein 201
x - destroy Cardinal pointer before it hits /

pure:
:1*23/5%6E0

faceval:
0 0
1 9
2 18
3 27
4 36
5 45

program:
:1   mem = 9
*23  mem *= 18; mem *= 27
/5   mem /= 45
%6   print mem
E0   exit

9*18*27/45 == 97 (integer division)

6 in %6 is used to print mem because 0-5 are used to print faceval (eg. %3 prints 27)
0 in E0 is not an exit code, it is present just to trigger E instruction

クライン201/100

新しいコード: !|*****[[[828+*+@+*99]]]*****|!

空のスタックからポップするとゼロになるため、すべての乗算スタックには単一のゼロが含まれます。このゼロは、+次のでメイン番号に追加され@ます。以前は破棄されていました。Klein001の回答を?参照してください。

クラインのドアの仕組み:

ここに画像の説明を入力してください

旋回コードは基本的に同じですが、唯一の変更点は、メインコードが現在の操作がops.load(4)ではなくops.one(2)であると想定することです。

事実上、Whirlは3つの操作があると考えることができます。

  • 1 1ステップ回転する
  • 0 回転方向を切り替える
  • 00 現在の命令を実行し、リングを切り替えます

プログラムに関する推論を簡素化するための操作の組み合わせ:

  • 0000 非アクティブリングの現在のopがnoopの場合、副作用なしでアクティブリングの現在のopを実行します。
  • 11..11 nステップ回転
  • 011..11 方向を切り替えてnステップ回転

0000アクティブリングの現在の命令を実行しますが、副作用として非アクティブリングの現在の命令も実行します。非アクティブリングの現在の指示が無害な場合、非アクティブリングで何が起こっているかを考えることなく、アクティブリングでの操作に集中できます。これは明確な分離があるため、このプログラムで特に役立ちます。最初に数値リングのみを使用して数値32が作成され、次にopsリングに切り替えてそこで2つの命令を実行します(印刷と終了)。

最初に、メインコードの実行開始時にopsリングで現在の操作をnoopにしたかったのです。これには2つの利点があります。1)メインのWhirlコードをスタンドアロンで実行できること、2)数値リングで32番を作成するときにopsリングを完全に忘れることができること ただし、コードは以前よりも長くなるため、代わりにメインコードは現在の操作がops.one(2)であると想定します。これは、演算の副作用としてops.valueが1に設定され、印刷に使用されることを意味します。古いコードはops.load命令でも同じ効果を達成しましたが、ops.oneを使用すると、ops.valueをゼロ以外に設定するという意図がより明確に表現されます。

at this point current ring is ops, dir = clockwise, cur op = ops.one
00    switch to math ring
011   rotate to math.not
0000  math.not (math.val = 1)
01111 rotate to math.store
0000  math.store (mem[0] = 1)
1     rotate to math.add
0000  math.add (math.val = 2)
01    rotate to math.store
0000  math.store (mem[0] = 2)
011   rotate to math.mult
0000  math.mult (math.val = 4)
0000  math.mult (math.val = 8)
0000  math.mult (math.val = 16)
0000  math.mult (math.val = 32)
011   rotate to math.store
00    math.store (mem[0] = 32), switch to ops ring
up to this point the program is the same as before

01111 rotate to ops.intio
0000  ops.intio - print mem[0] as number
0111  rotate to ops.exit
00    ops.exit

古いコードには、新しい仮定ではなく、プログラムの2番目の部分にいくつかの冗長な方向切り替えがあるため、新しいコードは短くなります。

old: (1111) 00011000001111000010000010000011000000000000000001100 01111110000011100
new: (11)   00011000001111000010000010000011000000000000000001100   011110000011100

インシデント/ワール行の前に何かを変更するときにワールを正しく保つ方法:

  • 0メインWhirlコードの前に偶数のs があることを確認してください
  • 何の二つの連続が存在しないことを確認0sが
  • 1Whirlが再び機能するまで十分なsを追加/削除します。nを追加1することは、12-nを削除すること1と同じです。

Ropyを追加すると、知らないうちに最初のルールを破りました。奇数の0s がある場合、メインコードは、終了命令を中断するopsリングの誤った方向で実行を開始します。その0ため0、1 行目で補正する3行目があります。

その他

CoffeeScript:(ここconsole.log a&&39||180から)

INTERCAL:37行に移動しました
BrainfuckAgony:10行目で他のBrainfuck派生物に移動しました

xEec:1L_a(h#115# o#)に移動しました

CSL:行80に移動
Trefunge:行120に移動
Gaot ++Stones:別の行に配置


4
ニース、それはゴルフをするのにたくさんのバイトです。
ポテト44

16

16. Pyth(159バイト)

#v\;2^0\;7||"<+0+0+0+<*!2'!1'L#'1r'4;n4
#v0#_q@
#>3N.15o|1
#|\w*
#8  ^<1b0 <
#|
#M`
print ((0 and'13')or(None and 9 or 1/2 and 1 or 5))
#"07|5//00;16 "jd5ki2

注: 3行目と最後の行の後にESCバイト(0x1B)があります。oj

これはとても楽しい経験でした。JaptとPythはどちらもゴルフ言語ですが、Japtは中置で、Pythはプレフィックスであり、Pythは入力が自動要求され、引数が欠落していると失敗します。

Haystackの回答の前に、#Japtでcharコードを取得し、Pythでloop-until-errorを取得するを使用して、ほぼ機能するソリューションがありました。Pythは、一般的なコメント文字が#基本的にエラーサイレンサーとして機能するため、ポリグロットで非常に便利です。

家に帰ると//、を使用して、Japtではコメントとして機能し、Pythでは2つの部門で機能するこのコードを見つけることができました。それから、Befungesに正しくルーティングさせるだけでした。

これは最適とは言えませんが、今のところは十分です。私はそれらをすべてテストしようとしましたが、出力が一致することを二重にチェックする人を高く評価します。

プリントパイソン3 1V 2Minkolang 34> <> 5パイソン2で自己書き換えBrainfuck 6JAPT 7網膜における8Perlで9Befunge(10 -93 )Befunge-98 11核分裂12ルビー13Turtléd14ヘイスタック15、及び

16 Pythで

説明

Pythがここで見ているのは:

#v\;2^0\;7||"string
multiline
string"07|5//00;16 "string

これは、次の擬似コードに変換されます。

while no errors occur:
    evaluate ";"
    print 2
    print 0 to the power ";"
    print 7
    print "string\nmultiline\nstring" or 0 or 7
    print 5 or 0 divided by 0 divided by (missing)
print 16
do nothing with "string"

最初のループ;は、有効な式ではないものを評価しようとすると終了します。その後、Pythは印刷するだけ16です。


どのように拡張しますか?私はまだ私の答えのために利用可能な別の5バイトかそこらが必要です;)
アルフィー・グッドエーカー

@AlfieGoodacre残りの詳細を投稿に追加する。私は正気を保ちたいと思ったので、誰かが私の場所を盗む前にコードを投稿しました。:D
PurkkaKoodari 16
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.