突然ですが、次のM3柄のソースコードをPython(>=3.8)で実行し、実行結果を入力に何度か繰り返し実行してみてください!
結果はどうなるでしょうか?
exec("""m=lambda_x:"".join(x.split()).replace("~"+"~",chr(32))""".replace("_",chr(32)),globals());exec(s:=
m('''s="""exec(\\"\\"\\"m=lambda_x:"".join(x.split()).replace("~"+"~",chr(32))\\"\\"\\".replace("_",chr(32
)),globals());exec(s:=m(\'\'%r\'\'))"""%s;import~~base64~~as~~b6;import~~zlib;import~~re;from~~datetime~~i
mport~~datetime;tr=lambda~~x,y,z:~~(y~~if~~x~~else~~z);lme=lambda~~x:list(map(lambda~~x:tr(x=="1",1,0),x))
;di=zlib .decompress(b6.b64decode("7Z ZdcsMwCITfc5r4/pdr O9PUAnYX9Oe0U/PQ
qQTig5Xk 6HFcZo8btQj1/DEVrqKezjahPAZF AZSC4Ri/FufqQr EY1edilIqmKF
xhNeJGPV FIzf82FDo8AMUPL/e26U+z/iIq KySion8bqihg zwgb gm1CtbgLUD
6SoNTh/s so+yHiCRaieAk10IWocyxQ+E vG9o6VuQWFrF 1XQB1HNptjDGq/ 3agblaFqX4
HFKHUtm4 KyMLPg/aii1Ra0KFy17AfJ4D 3OtwrlYcADDnuLwh6aED8VGYprkqC+RrJD hwIS5yis9K
k4R1lsYa 9G ULHvEkrPIBRMpm0M5SvX mo TEaIPRvbIvnHwDJlAWEqVk/w+iVMqFKJZy y14tQPHACq
pLwAtRB7 Vf hurYK2XbUWFJSUAWM4Ha az fq/6A6frQtCh1efU0HUPCGdqDUjW/ulcek i1agKssyAW
OME7D6AW QC bkTxElhRn6hcIlTlIlRm uV hwBRJwDNX6y6i6KVSIsVeYSxA78rvSQl5/ BSo/gwj1Ss
mABhWTIT k5yv dw4ps1FuWDVFcngK NMeS 9UC+lFsb1yfT2O6K6gbGF+57w23yjvHkf5 jl0TDzftg1
uzKA9A4p rM7A pnXSFAXGdc+1A+Un 6YkG AZShhHtbXlXTEVmpX6pzGiR98WBEW0 Bp0PCrjdbtRf
RfW/LgZR 7IhX/d OocBWll1xfjhIL kkImUU oV3CccZwLauTxxiooN vwIuRJGH1jgqBv
Wgpo5FO8 JSbkGx MZvtFtAGo9lp VNNwUs DvR/ktLGzyPMr3V0Hl 5lD6OCsBu1BMDPkwJm
tQ3wXUiW GwRSgL 4fJOo2I/TOBJ 1Lk/eB aPu1E2QUyuehq4Vzpd BUUOuzrSPQc9
+gNq1Lre hVc+pD8A "),-15). decode() ;r=0;r=(r+1)if(r+1<4)else(0);d ii=di[r*32
10:(r+1) *3210];s s=s.repl ace("r=0 ;r=","r=%s;r="%r)+"#"*sum(lme(dii) );print(
"".join( [tr(c==" 1",ss.re place(ch r(32),"~"+"~")[sum(lme(dii)[:j])],tr (c=="0",
chr(32), c))for(j,c )in( enumerate( dii))]));'''))###################### ########
######## ########## #### ########## #################################### ########
######## ############ ## ############ #################################### ########
######## ############ ############ ################################## ########
######## ############ ############ ################################## ##########
######## ############## ############## ########## ############ ##########
######## ############## ############## ########## ############
######## ############## ################ ############ ################
##########################################################################################################
##########################################################################################################
タイトルで若干ネタバレしていますが、次のgifのように、「M3」→「福岡」→「積極」→「採用」→「M3」→ ... のように出力が変わっていったと思います。
そう! 私が所属するエムスリー福岡オフィスではソフトウェアエンジニアを積極採用中です!
- はじめに
- Quineとは
- 実際にクロスクワインを作ってみよう
- まずは普通のQuineを作る(赤パート)
- 圧縮したアスキーアートを展開 (青パート)
- アスキーアートの遷移状態を保持し、実行のたびに遷移させる(ピンクパート)
- 整形して出力する( 橙パート)
- まとめ
- We are hiring !!
- エンジニア採用ページはこちら
- カジュアル面談もお気軽にどうぞ
- インターンも常時募集しています
はじめに
というわけで、こんにちは。AI・機械学習チームの氏家(@mowmow1259)です。
エムスリー福岡オフィスで1人目のエンジニアとして働いています。
この記事はサテライトオフィスブログリレーの2日目福岡担当です。
1日目は京都オフィスの北川さんによるgokartに型を導入する話でした。そちらも面白いので是非ご覧ください!
www.m3tech.blog
さて、冒頭でも紹介した通り、エムスリーでは京都・大阪、福岡でサテライトオフィスを開設しており、私が所属する福岡オフィスでも積極採用中です。
福岡オフィスでは、エムスリーとしての採用活動はもちろんのこと、福岡のソフトウェアエンジニア、MLエンジニア界隈も積極的に盛り上げていくべく、福岡でのイベントの参加はもちろん、主催もしていけたらなと思っております。
そんな折、先日もPython Meetup FukuokaがLINEヤフーさん主催で開かれ、私も聴講で参加させていただきました。
発表はもちろん、懇親会でも様々な方が熱量を持って交流していて、福岡の盛り上がりを感じました。
主催のLINEヤフーさん、素晴らしいイベントをありがとうございました。
lycorptech-jp.connpass.com
さて、Pythonといえば、AI・機械学習チームでもバッチの多くをPythonで書いている他、業務以外でもm3公式Xアカウント(@m3_engineering)で難読クイズを出していたり、Quine*1のような遊びもしていたりします。
www.m3tech.blog
この記事はとても面白く、私もこれをみてQuineで遊んでみたいなーと思っていたところにPython Meetup Fukuokaでモチベーションも上がったので、これを機に福岡にちなんだQuineを作ってみるか! から冒頭のQuineが出来上がりました。
とはいえ前回と同じQuineだと芸がないので、冒頭の通りアスキーアートを遷移させるように作って見ました。
ということで、この記事では、福岡は一ミリも関係なくなってしまいますが、せっかく作ったこのQuineの技術的な話をご紹介します!
脱線: エムスリールーレットQuine
本編に入る前に、ついでに作ったエムスリールーレットQuineもここにおいて供養しておきます。
形は先ほどのQuineとほぼ同じですが、こちらは実行のたびにエムスリーの3の文字がランダムに1-9の数字に切り替わります。
是非実行の結果をコメントで教えてください!
exec("""m=lambda_x:"".join(x.split()).replace("~"+"~",chr(32))""".replace("_",chr(32)),globals());exec(s:=
m('''s="""exec(\\"\\"\\"m=lambda_x:"".join(x.split()).replace("~"+"~",chr(32))\\"\\"\\".replace("_",chr(32
)),globa ls());exec(s:=m(\'\'%r\'\')) """%s;import~~base 64~~as~~b6;impor
t~~zlib; import~~random;from~~datetim e~~import~~dat etime;random
.seed(da tetime.now().timestamp()); tr=lambda~~x ,y,z :~~(y~~if~
~x~~else ~~z);lme=lambda~~x:list( map(lambda~~ x:tr(x=="1",1, 0),x));di=
zlib.dec ompress(b6.b64decode("7Z tRcuQgDET/cxr2/pdLpSobg1BLArew8Vhf CWp44MFTLT
P++rcsvi 5A lb+w5COqBSikUFCRYZDG Gm UI5WlKWYQ6MiEUkvmKegrJqJ92qUxD9UoH ZV8gnL87Sp
faWSLKm8 gO qJH/XhRIH//jzH6o9ovI H4 iAwlPYE4VcwjNQsYEGUPnxojZE6berDKwq IpJQEhO6rz
yYppE90T gE z6710UaiViK91kBxjPRH ox ie/Y6o8+WBrkn07AtQOijBSCNQGkrLkFFW jurZ7fUSUd
52oZUHHo jm2X 0QCRUBUTx7MeOuKH khTq Py40VtiNL2TB+WCu89Ksrf6qTTA9nXua8i KKSx1klGWW
qI4hnpj0 WxPP sylLZ5iOVB6aLNEz 27hU lFBS/gGc8usemoGrcAJZUpj/Tvixot DwgoPIUYaCHq
+J/o2fVp pqC0qP tRTg98TIPKjxe1 IQrvnD piKn3vJv6OKYAaLw9i Grpnx5rrUGeNtK
Whoo7M3V Dznr1u T0W1rUHUXHnQ tp1ARS ayBBVpoRjpyCp3Q+FN EkTFPXtx406oaHlARO
EpWKFp7o GKevY9 UZFhhlD58aI2 ROm3qw yk6r+O3M0+h9JBUkU/ PSChkMa/Gtei
5oz0i2rk ekcrfwHK 3laU8qCo MYmKZD1Y yu+Y9EuZ9py9h6WfHtwJFffse6Gi5Q ERhacQAZFR
9pdzCBX1 7FKFpph6 etD2Szs9 kL0e725f 1EmUtXeO8FV4J1JR9qYnnh54I9Ae6fvTJK MwiPac3Q
d9DGqT8u D4WxuBWB 5ot/AEKp Kth9dgZJ TWaqJGjTT6dNJQEnQB6n+G4tkRqs2kokIXsG 7xByahYg
PrsETU1H 2FB7BX0BcJ h4J4 elCUqPPU0w ML9Hh3+6JOotC+aQOqtJ0uxByUDfqVc8qDAC j1hYCqyw
KUtapZI+ 2v6TEoIUx8 92Ad qpMR3z0gob yJ+KDrUaNGGoAWokRjBkpdU84jfSDgo8CaMk 4PYJp/er
AMZSTZv/ hZhoJbIogamL i5 4Ie72xd1EqXf rjJcVWkiDVXUsFAT5YGW6qQ8z641p6D05qaV ZaRRt71R
458VnqCX Vz4t0cIsD9qh OzS3PChdVEm2 Z4cgNmp8VZNGeuazmkKhS2HtwCkUWmrVzv Lsm6AGyw
MGCk/hXq imO8+z92LRwk fJ+BNklAfgyj /c3b6okyj9dpXhqMDeY6PMewqgpsqDNmHf VxGUoekbOy
EHpXezUZ NGGnVq2j8ENeXZ N0BNlAdMlDORUt Ds6KgeVqqw UCc8e4tIQklY J0189yCIGv
bsF6OEMP Hdg2EUnkIItACl dGSfHrRzbJpZqK KEkLDKAwfT oPLjoahv"),-
15).deco de();r=random. randint(0,8);dii =di[r*3103:( r+1)*3103];ss=s.
replace(chr(32),"~"+"~")+"#"*sum(lme(dii));print("".join([tr(c=="1",ss[sum(lme(dii)[:j])],tr(c=="0","@"+"@
",c))for(j,c)in(enumerate(dii))]).replace("@"+"@",chr(32)));'''))#########################################
##########################################################################################################
続きを読む