
Wolfram言語では、小さなコードで多くのことができます。 これを使用して、私たちはあなたがそれを楽しむことができるサービスを作りました、今日私たちはそれを開く-Tweet-a-Program 。
このサービスは、Wolfram言語プログラムと長さ1つのtwitterメッセージとそれらを@WolframTaPに自動的に送信する機能を組み合わせています。 Twitterボットは、 Wolfram Cloudでプログラムを起動し、結果を公開します。
![Tweet-a-ProgramのHello World:GeoGraphics [テキスト[スタイル[" Hello!&Quot ;, 150]]、GeoRange->" World"] Hello World from Tweet-a-Program: GeoGraphics[Text[Style["Hello!",150]],GeoRange->"World"]](https://habrastorage.org/getpro/habr/post_images/c5e/7bf/fdb/c5e7bffdbc4f3002eed6dafcd79197af.png)
誰もがWolfram言語でそれを行うことができます。これは1回のツイートにすぎません。 以下に、色付きの球体でキューブを埋める78文字のプログラムがあります。
![Graphics3D [テーブル[{RGBColor [{i、j、k} / 5]、スフィア[{i、j、k}、1/2]}、{i、5}、{j、5}、{k、5 }]] Graphics3D[Table[{RGBColor[{i,j,k}/5],Sphere[{i,j,k},1/2]},{i,5},{j,5},{k,5}]]](https://habrastorage.org/getpro/habr/post_images/378/222/fff/378222fffd80747e5420fb623a39d7fc.png)
面白い装飾品を簡単に作成できます。
![グラフィックス[Riffle [NestList [Scale [Rotate [#、。1] ,. 9]&amp ;, Rectangle []、40]、{Black、White}]] Graphics[Riffle[NestList[Scale[Rotate[#,.1],.9]&,Rectangle[],40],{Black,White}]]](https://habrastorage.org/getpro/habr/post_images/25e/36e/9da/25e36e9da25dc541ff679c819b6cba8c.png)
以下に、計算された小さな詩のように見える44文字のプログラムを示します。
![Graphics3D @ Point @ Tuples @ Table [範囲[20]、{3}] Graphics3D@Point@Tuples@Table[Range[20],{3}]](https://habrastorage.org/getpro/habr/post_images/18c/1da/57a/18c1da57a5aa18424f7e7e60c802da09.png)
プログラムをさらに短くすることができます。たとえば、この36文字のプログラムはフラクタルのように見えます。
![NestList [下付き文字[#、#、#]&amp ;, o、6] NestList[Subsuperscript[#,#,#]&,o,6]](https://habrastorage.org/getpro/habr/post_images/783/ae5/ed1/783ae5ed1d9ed0f16c819647717e77c7.png)
少し数学を追加することで、複雑な3次元構造を取得できます。
![ContourPlot3D [Cos [{x、y、z} /ノルム[{x、y、z}] ^ 2] == 0、{x、-0.5,0}、{y、0,0.5}、{z、- 0.5.0}] ContourPlot3D[Cos[{x,y,z}/Norm[{x,y,z}]^2]==0,{x,-0.5,0},{y,0,0.5},{z,-0.5,0}]](https://habrastorage.org/getpro/habr/post_images/26a/738/900/26a7389005ce324c96b72d60402a09b6.png)
![ReliefPlot [Arg [Fourier [テーブル[1 / LCM [i、j]、{i、512}、{j、512}]]]] ReliefPlot[Arg[Fourier[Table[1/LCM[i,j],{i,512},{j,512}]]]]](https://habrastorage.org/getpro/habr/post_images/b6d/2da/e1a/b6d2dae1a8525aa1667556c542458946.png)
写真を撮る必要はありません。 以下では、番号πの最初の1000文字が表示されているとしましょう。サイズは、モジュールのサイズに応じて選択されます(9が次々にどのように実行されるかを確認してください)。
![行[スタイル[#、5#+ 1]& / @ First [RealDigits [Pi、10,1000]]] Row[Style[#,5#+1]& / @ First[RealDigits[Pi,10,1000]]]](https://habrastorage.org/getpro/habr/post_images/3ca/0f0/106/3ca0f0106b9febc80c620cf6014fffb8.png)
Wolfram言語は、数πの計算方法だけでなく、 他の膨大なアルゴリズムも知っています 。 現実世界に関する膨大な知識も組み込まれています。 だから、直接言語で、 映画 、 国 、 化学物質などについて尋ねることができます。 以下に、ヨーロッパの国旗のコラージュを作成する78文字のプログラムを示します。国旗のサイズは、国の人口によって異なります。
![ImageCollage [CountryData [" Europe"" Population"]-> CountryData [" Europe&quot ;," Flag"]] ImageCollage[CountryData["Europe","Population"]->CountryData["Europe","Flag"]]](https://habrastorage.org/getpro/habr/post_images/80b/965/3ad/80b9653ad3ed99f5c7fafbfa356e493d.png)
プログラム内で何らかの形式の自然言語表記を直接使用すれば、このプログラムをさらに短くすることができます。 Mathematicaで知っているWolframドキュメントの通常のインターフェースでは、キーボードショートカットを使用してこれを行うことができます

![ImageCollage [= [ヨーロッパの人口]-> = [ヨーロッパのフラグ]] ImageCollage[=[Europe populations]->=[Europe flags]]](https://habrastorage.org/getpro/habr/post_images/dc0/3bf/987/dc03bf98773c16fd03008fc638a811f5.png)
![ImageCollage [= [ヨーロッパの人口]-> = [ヨーロッパのフラグ]] ImageCollage[=[Europe populations]->=[Europe flags]]](https://habrastorage.org/getpro/habr/post_images/5a4/f06/1ca/5a4f061ca8d0fa8c2f09265f87e67941.png)
Wolfram Languageは地理についても知っています。 以下は、異なる半径(10度のシーケンス)の円をメートル単位で表示するプログラムです。各ディスクの中心はエッフェル塔です。
![テーブル[GeoGraphics [GeoDisk [= [エッフェル塔]、数量[10 ^(n + 1)、"メーター"]]、GeoProjection->" Bonne"]、{n、6}] Table[GeoGraphics[GeoDisk[=[Eiffel Tower],Quantity[10^(n+1),"Meters"]],GeoProjection->"Bonne"],{n,6}]](https://habrastorage.org/getpro/habr/post_images/09e/1d7/154/09e1d7154e92ec07ea3cba13ad47107b.png)
![テーブル[GeoGraphics [GeoDisk [= [エッフェル塔]、数量[10 ^(n + 1)、"メーター"]]、GeoProjection->" Bonne"]、{n、6}] Table[GeoGraphics[GeoDisk[=[Eiffel Tower],Quantity[10^(n+1),"Meters"]],GeoProjection->"Bonne"],{n,6}]](https://habrastorage.org/getpro/habr/post_images/2cf/82d/95f/2cf82d95f956e0ec4bda53c654a86765.png)
Wolfram言語には多くの種類の実世界の知識が組み込まれており、驚くかもしれません。 以下は、大西洋の難破船の地図です。
![GeoListPlot [GeoEntities [= [Atlantic Ocean]、" Shipwreck"]] GeoListPlot[GeoEntities[=[Atlantic Ocean],"Shipwreck"]]](https://habrastorage.org/getpro/habr/post_images/f97/798/011/f97798011138b73da6e85862ff405ccc.png)
![GeoListPlot [GeoEntities [= [Atlantic Ocean]、" Shipwreck"]] GeoListPlot[GeoEntities[=[Atlantic Ocean],"Shipwreck"]]](https://habrastorage.org/getpro/habr/post_images/86f/6f4/4b9/86f6f44b966e34f623a7e9eb33dd92ec.png)
Wolfram言語は画像を扱うこともできます。 以下に、太陽系の惑星の画像を撮影し、R、G、Bチャンネルを混合して、非常にエキゾチックな写真を出力するプログラムを示します。
![ColorCombine [RandomSample [ColorSeparate [#]]]& / @ EntityValue [= [planets]、" Image"] ColorCombine[RandomSample[ColorSeparate[#]]]&/@EntityValue[=[planets],"Image"]](https://habrastorage.org/getpro/habr/post_images/db2/38a/6be/db238a6bea2cb8349b10ae7396aa1fdd.png)
![ColorCombine [RandomSample [ColorSeparate [#]]]& / @ EntityValue [= [planets]、" Image"] ColorCombine[RandomSample[ColorSeparate[#]]]&/@EntityValue[=[planets],"Image"]](https://habrastorage.org/getpro/habr/post_images/66e/c1a/ce0/66ec1ace036c02728a904e787800bd97.png)
以下に、画像上の境界線を検索するアルゴリズムが数回適用されている私の画像を示します。
![NestList [EdgeDetect、= [Stephen Wolfram image]、5] NestList[EdgeDetect,=[Stephen Wolfram image],5]](https://habrastorage.org/getpro/habr/post_images/4d1/065/912/4d10659125cdaf45dc3cc9e5222978da.png)
![NestList [EdgeDetect、= [Stephen Wolfram image]、5] NestList[EdgeDetect,=[Stephen Wolfram image],5]](https://habrastorage.org/getpro/habr/post_images/014/c29/2bd/014c292bdd07870eed293cf956ec5de7.png)
または、「ポップカルチャー」に関連した何かを行うことができます(これらの画像にあらゆる種類の処理および分析アルゴリズムを適用して使用することもできます)。 以下に、ランダムに選択された映画のポスターの表を示します。
![Grid [Partition [DeleteMissing [EntityValue [RandomSample [MovieData []、50]、" Image"]]、6]] Grid[Partition[DeleteMissing[EntityValue[RandomSample[MovieData[],50],"Image"]],6]]](https://habrastorage.org/getpro/habr/post_images/531/566/c47/531566c4715426c13e85f1f2a6ae0c64.png)
Wolfram言語は単語やテキストを扱うのにも非常に優れています 。 以下のプログラムが、英語とスペイン語の単語の最初の文字の相対的な頻度を示す「インフォグラフィック」を生成するとしましょう:
![行[スタイル[#、#2/70]& @ @ @ Tally [ToUpperCase [StringTake [DictionaryLookup [{#、All}]、1]]]]& / @ {"英語""スペイン語"} Row[Style[#,#2/70]& @ @ @ Tally[ToUpperCase[StringTake[DictionaryLookup[{#,All}],1]]]]&/ @ {"English","Spanish"}](https://habrastorage.org/getpro/habr/post_images/692/e50/7a5/692e507a5d52780d50427862aaf80a54.png)
以下は、 不思議の国のアリスのオリジナルテキスト内の単語「アリス」と「クイーン」 の頻度分布の平滑化されたヒストグラムを計算するツイートとサイズがまったく同じプログラムです。
![SmoothHistogram [Legended [First / @ StringPosition [ExampleData @ {" Text"" AliceInWonderland"}、#]、#]& / @ {" Alice"" Queen"}、Filling-> Axis] SmoothHistogram[Legended[First/ @ StringPosition[ExampleData @ {"Text","AliceInWonderland"},#],#]&/ @ {"Alice","Queen"},Filling->Axis]](https://habrastorage.org/getpro/habr/post_images/1b2/ce6/d53/1b2ce6d535fe628a983129ac742f8c9d.png)
グラフとネットワークも、Tweet-a-Programに使用するのに適しています。 グラフのシーケンスを作成するプログラムは次のとおりです。
![テーブル[グラフ[テーブル[i-> Mod [i ^ 2、n]、{i、n}]]、{n、105,110}] Table[Graph[Table[i->Mod[i^2,n],{i,n}]],{n,105,110}]](https://habrastorage.org/getpro/habr/post_images/f0b/617/7f8/f0b6177f8fd41a141a2ae726ff68b317.png)
そして、ここで-そして再び、プログラムの長さはTwitterメッセージの文字制限を超えていません-ランダムな多面体のクラウドを作成するプログラム:
![Graphics3D [テーブル[{RandomColor []、翻訳[PolyhedronData [RandomChoice [PolyhedronData []]] [[1]]、RandomReal [20.3]]}、{100}]] Graphics3D[Table[{RandomColor[],Translate[PolyhedronData[RandomChoice[PolyhedronData[]]][[1]],RandomReal[20,3]]},{100}]]](https://habrastorage.org/getpro/habr/post_images/71d/7b2/50a/71d7b250a99c1c6b2c449234dcfaea9f.png)
Wolfram言語で最も短い「興味深いプログラム」は何ですか?
一部の言語では、独自のコードを出力するプログラムQuineがあります。 しかし、Wolfram言語では、クインは非常に簡単に見えます。 すべての式はシンボリック形式で表されるため、クインを作成するには、任意の文字を入力するだけです。

Wolfram言語に組み込まれた知識を使用すると、何か面白いことをする非常に短いプログラムを作成できます。 ノード理論のノードに埋め込まれたデータベースのフラグメントのイメージを作成するこの15文字のプログラムのように:
![KnotData [{8,4}] KnotData[{8,4}]](https://habrastorage.org/getpro/habr/post_images/b88/abe/6d2/b88abe6d23bd313181e0221207806d43.png)
いくつかの短いプログラムは非常に理解しやすいです:
![グリッド[配列[時間、{12,12}]] Grid[Array[Times,{12,12}]]](https://habrastorage.org/getpro/habr/post_images/854/d8b/f03/854d8bf03cffb99a0fb74b0ee6cd72ad.png)
「暗号」プログラムを作成するのは面白いです。 これは何をするのでしょうか?
![NestList [#^#&amp ;, x、5] NestList[#^#&,x,5]](https://habrastorage.org/getpro/habr/post_images/c05/8d4/513/c058d4513e0717a6f8930d207dae65e4.png)
それともこれ ?
![FixedPointList [#/。{S [x _] [y _] [z _]-> x [z] [y [z]]、k [x _] [y _]-> x}&amp ;, s [s [s]] [s] [s] [s] [k]、10] //列 FixedPointList[#/.{s[x_][y_][z_]->x[z][y[z]],k[x_][y_]->x}&,s[s[s]][s][s][s][k],10]//Column](https://habrastorage.org/getpro/habr/post_images/ab4/ac9/b4b/ab4ac9b4b282e84e27b1af8b757f8423.png)
または、次のようにもう少し複雑です:
![スタイル[\ [FilledCircle]、5#]& / @(If [#1> 2.2#0 [#1-#0 [#1-2]]、1]& / @ Range [50]) Style[\[FilledCircle],5#]&/@(If[#1>2,2#0[#1-#0[#1-2]],1]&/ @ Range[50])](https://habrastorage.org/getpro/habr/post_images/98e/497/5d2/98e4975d251d39ead5f222add35936f8.png)
私は実際に長年、短いプログラムとそのプログラムの研究に費やし、コンピューティングの宇宙に関する科学全体を作成しました。これは私の新しい科学の種類に記載されています。 それはすべて30年以上前に、1回のツイートでできるコンピューター実験から始まりました。
![GraphicsGrid [Partition [Table [ArrayPlot [CellularAutomaton [n、{{1}、0}、{40、All}]]、{n、0.255}]、16]] GraphicsGrid[Partition[Table[ArrayPlot[CellularAutomaton[n,{{1},0},{40,All}]],{n,0,255}],16]]](https://habrastorage.org/getpro/habr/post_images/fd8/1d0/028/fd81d0028ed0e2de4e0841624a437583.png)
私のお気に入りの発見は、1つのツイートで公開することもできます。
![ArrayPlot [CellularAutomaton [30、{{1}、0}、100]] ArrayPlot[CellularAutomaton[30,{{1},0},100]]](https://habrastorage.org/getpro/habr/post_images/a3f/6be/e16/a3f6bee16c5814f6c6aa5fd0decb7976.png)
コンピューティングの世界を探検し始めると、その中の多くの驚くべきものを簡単に発見できます。
![ArrayPlot [CellularAutomaton [{1635、{3,1}}、{{1}、0}、500]、ColorFunction->(Hue [#/ 3]&)] ArrayPlot[CellularAutomaton[{1635,{3,1}},{{1},0},500],ColorFunction->(Hue[#/3]&)]](https://habrastorage.org/getpro/habr/post_images/621/cb3/f6e/621cb3f6e3bff64a8bb9c07286c9612e.png)
主な疑問が生じます -私たちの物理的宇宙全体を表示するプログラムを計算する宇宙のどこか深いところにあります。 そして、このプログラムは、Wolfram言語の1つのツイートにそれを記録するのに十分短いですか?
しかし、これに関係なく、Wolfram言語を使用すると信じられないほどの量の素晴らしいプログラムを書くことができることをすでに知っています。 Wolfram言語に存在する知識と自動化の巨大な「建物」を構築するのに四半世紀以上かかった。 しかし、まさにこの「言語の豊かさ」が、「Twitterの世界」でさえも多くのことを可能にしたのです。
過去には、普通の人間の言語だけが同じTwitterを介して意味のある情報を送信するのに十分なほど豊かでした。 しかし、今日目を引くのは、Wolfram言語が「表現力」の限界を超えたように見えることです。これにより、Twitterの制限があっても、面白くて複雑なものを簡単に作成できます。 通常の人間の言語と同様に、あらゆる種類のことを話し、あらゆる種類のアイデアを表現できます。 しかし、そこには他にも何かがあります。通常の人間の言語とは異なり、その中のすべては正確に定義された意味を持ち、私たちが書くものは読みやすいだけでなく計算されます。
普通の人間の言語でのツイートは(おそらく)それを読む人の心に何らかの影響を及ぼします。 しかし、結果は精神的能力によって異なる場合があり、通常、この効果が何であるかを正確に知ることは困難です。 しかし、Wolfram言語のツイートには、プログラムを起動したときに見られる明確な効果があります。
Wolfram言語を普通の人間の言語と比較するのは興味深い。 英語などの普通の言語には、適切な名前などを除いて、数万のかなり一般的な埋め込み単語があります。Wolfram言語言語には、約5,000の名前付き埋め込みオブジェクトがあり 、エンティティベースの構造(データベースアクセスキー)を除きます固有名詞として。
Wolfram言語についての1つの重要なことは-そしてそれが普通の人間の言語と共有する-それは人々によって書かれているだけでなく、彼らによっても読まれるということです。 覚えておく必要のある辞書と覚えておく必要のあるいくつかの原則があります-人はそれらを勉強してWolfram言語の典型的なプログラムを理解し始めるのに少しの時間しか必要としません。
Wolfram言語プログラムの通常の人間の言語への少なくとも大まかな翻訳(または「説明」)を与えることは時々非常に簡単です。 しかし、非常に多くの場合、Wolfram言語プログラムは、普通の人間の言語では話すのがかなり難しい何かを表現します-少なくとも簡単に-。 そしてこれは必然的に、Wolfram言語では考えやすいが通常の言語では難しいことがあることを意味します。
通常の言語と同様に、Wolfram言語には思考を表現し書き留める一種の技術があります。 読解と読解があります。 文章を書いたり書いたりしています。 いつでもさまざまな方法で何かを言うことができますが、同時に絶対に確実に言うことができます。また、文の最適性の尺度、つまり計算の速度もあります。
通常の人間の言葉のように、優雅さの概念があります。 意味とその外部の認識の両方を考えることができます。 また、その言語の「コード詩」のようなものを考えるかもしれません。
Tweet-a-Programに初めて出会ったとき、それは当たり前のことのように思えました。 しかし、私が見て理解したことは、それは実際には新しい種類の表現の世界への窓であり、人間とコンピューターの間の新しい形式の相互作用であるということでした。
もちろん、このサービスは娯楽を目的としています。 驚くべき何かを作成する短く簡潔なプログラムを作成することは本当に大きな喜びです。
そして今、私はあなたがこのサービスで何ができるかを楽しみにしています。 どのようなものが作成されますか? どのタイプのショートコードが一般的になりますか? 誰がこれらの短いプログラムに触発されますか? どのタスクが提案および解決されますか? どのコンテストが開かれ、どの賞が授与されますか? そして、このコードの世界にはどんな偉大な「俳優」と「詩人」が登場するのでしょうか?
これで、たった1つのツイートに収まるプログラムができました。何ができるのか見てみましょう...
Tweet-a-Programのプログラムを開発およびテストするには、 Wolfram Programming Cloud ( Wolfram Programming Cloud )で無料のアカウントを作成するか、デスクトップとクラウドの両方で他のWolframベースのシステムを使用できます。 Tweet-a-Programの詳細については、 こちらをご覧ください 。