1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SATySFiでドドスコ(ラブ注入)してみた話

Last updated at Posted at 2022-12-02

これは「SATySFi Advent Caleandar 2022」の3日目の記事です。
(2日目は bd_gfngfn さん、4日目は yozu さんです。)

先日「TeX言語でドドスコ」のネタを披露したわけですが、その当然の帰結として​「SATySFiでドドスコ」​のネタを披露する強い必要性に迫られた気がする(えっ)ので、やってみました:smiley:

※前提とするSATySFiのバージョンは0.0.7~0.0.8です。

※「ドドスコ問題」の詳細についてはTeX言語の方の記事を参照してください。ここでは、問題の定義を書いたツイートを載せておきます。

SATySFiでドドスコしてみた話

というわけで、「ドドスコ問題」を実行するためのSATySFiパッケージ「ddsk」をつくりました。

ddskパッケージの実装コードは以下の通りです。

ddsk.satyg
let_=`888888888888888888888888888888888888888888888888888888888888888888888
~#;}-\$"@`let([(-*);(-/)],nj,(^/)::(&/+-'+.>.*:/),(&-),(!))=((*)::[(/)],(!)
,[`@.]='}#*?;@=#\:<\=$<"|&^?"}~{?;ve;;`;`).':_,,`],[],8)let(*)o(*/)=((o))::
(*/)let([(//);(/-)],[_;(^-);(&/.''<);rec-;(^--)],(/<+->),(/),_::(^*-)::_)=(
[(!)-(!);(!)-/(!)],(^/)*`ドド`*`スコ`*`スコ`*`スコ`*(&-),(!)-*8,(let-rec(>)
`@`i=i|(-)r=(-)^(r)in(>)),(^/)*`ラブ注入♡`*[`\-,::]${'<@,_>:~}"#_#"(`])let
(-:)(*<*+-)(*>-)=(*<*+-)-((*<*+-)-/(*>-)-*(*>-))let-rec(!->)|8=(^-)|_=(^--)
let((/--)::[(/->);(/.>);(/.-)],ov)=([(/-)+(/-);(!)>>(/-);(!)-(/-);(/<+->)-*
(/<+->)],{,'=~[__]:?(})let((!),(/.--)::[(/.*-);(/.->)],_)=(nj,[(/.>)-*(/.>)
-*(/.>)-*(/.>)-*(/.>);((/-)<<((/->)-*(!)-(/-)))-(/-);(!)-*((/--)-*8+(/-))<<
(/->)],`,);[,=$!{vi}{_}/?@~(`)let-rec(&--)|j(*/)8=(*/)^(^*-)|(*-)(*--)(**-)
=let(*/)=((*-)>>((/.>)+(/.>)))-:((/--))in(&--)((*-)-*(/.--)-:(/.*-))((*--)/
!->((*/)-*8))((((**-)+(/.->))-*(/--)+(*/))-:(/.-)-(/.->))let(&*-)(*-)%__._~
=(&--)((*-)-*(/.--)-:(/.*-)-*(/.--)-:(/.*-))`@`((//)-(/.->))let((*),(%./|_>
((/))),(&/'~-:'?.-**>+!<),([love-injector]),_)=((-*),(-/),(),[(&*-)],%/_|.\
.8888888888888888888888888888888888888888888888888888888888888888888888888)

……やっぱり:upside_down::upside_down::upside_down:

エッ、もしかしたら「TeX言語のドドスコ実装に比べると全然フツーに読めるじゃん:slight_smile:」ですか? そうですね……。思い切り努力はしたのですが、これが限界でした……やっぱりSATySFiムズカシイ:cry:(えっ)

英文字を全く使わないのは無理なので「love-injectorに含まれる文字だけを使う」という制限規則にしています。SATySFiの英文字名の予約語・プリミティヴのうち実際に使っているのはinletlet-recの3つだけです(それ以外は実質的に有意義に使えない)。数字も完全に除くのは無理なので8だけ使っています。

このddskパッケージを読み込むと、次の函数が(トップレベルに)定義されます。

  • love-injector: int → string
    love-injectorseed は、乱数種1を seed としたときの「ドドスコ問題」の出力の文字列。

love-injector函数の値は文字列(string型)なので、テキスト出力モードでも利用できます。例として「乱数種を80000としてドドスコ問題を実行」するテキスト出力のSATySFI文書を作ってみましょう。

sample.saty
@import: ddsk
love-injector 80000

このsample.satyとddsk.satygの2つのファイルを同一のディレクトリに置いた上で、そこで次のコマンドを実行します。

satysfi --text-mode plain -o out.txt sample.saty

出力されたout.txtを見ると……2

out.txt(出力)
ドドドドドドドドドドスコドドスコスコスコドドドドドドスコドド
ドドドドスコスコドドスコスコスコドドスコスコスコスコドドドド
スコスコドドスコスコドドドドドドドドドドドドスコスコスコドド
ドドスコドドスコスコスコドドドドドドドドスコドドドドドドドド
スコスコドドスコスコスコドドドドスコスコスコスコスコスコドド
スコドドドドスコスコスコドドドドスコドドドドスコドドドドスコ
ドドドドスコドドドドスコスコスコスコスコドドスコスコスコドド
ドドドドスコドドスコドドスコスコドドドドドドスコスコドドスコ
スコドドスコドドスコスコスコスコスコドドスコスコスコドドスコ
スコスコドドスコスコスコラブ注入♡

ちゃんとドドスコできてますね!​:smiley:

まとめ

​「SATySFi Advent Calendar 2022」ではまだまだ参加者を募集しています! SATySFiに関するくだらないネタを思いついたら、カレンダーに登録してどんどん披露していきましょう!:information_desk_person:

アッ、くだらなくない記事ももちろん大歓迎です:upside_down:

  1. 現状のSATySFiには「コンパイルする度に変わる」ような値を得る方法がおそらく存在しないため、乱数種を入力する形式にしています。ちなみに、擬似乱数発生器は単純な線形合同法で実装しました。

  2. ここでは見やすさのため適宜改行を入れた形で掲載します。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?