覆面算 9をかけるとひっくり返る4ケタの数  甲陽学院中(改)

youtubeのレコメンドで出てきたので飲酒の暇つぶしで

abcd*9=dcba

www.youtube.com

for n in range(10000):
    val=n*9
    x=list(str(val))
    x=list(map(int,x))

    n2=list(str(n))
    n2=list(map(int,n2))

    if x[::-1]==n2:
        print(x,n2) 

n=1089 らしくatcoderもこういうのが多いが(B問題くらい?)パズル以上の数理的、情報工学的な価値があるのかは疑問な割に「試験」だと執拗に出る傾向

M1MacminiのSSDに対する異常書き込み

各所で報告されてるが、12月末から半年で70TBとかなりやられていたのでサポートに連絡するも、 今の所補償などは無いとの事。

気になっていたので、記録

docs.google.com

f:id:biones:20210627183026p:plain

すると、6/7の寝ている間に20TBもの書き込みがあって、予想原因1の1つとされているspotlightを外付けHDDに対してのみ止めたら元に戻った

極端なので6/7以降の別グラフ。 f:id:biones:20210627183040p:plain

140GB/day程度で、これなら問題ないかなと。

300TB程度が"限度"だとしたら辛いけど Percentage Used: 2% となっていて、実際は5000TB以上読み書きできるというのなら(速度劣化はあるだろうけど)、そんなに問題無い気も。 ただ、spotlightの問題はあると思うので、当分停止したいと思う。

macのSSDの異常書き込み

意見フォームに送信しました。

サポートからこちらで提案するように言われました。

一部のM1 MacSSD寿命を激しく消耗している可能性が報告 https://japanese.engadget.com/m1-mac-excessive-ssd-wear-044017137.html

youtubeの動画などで知り https://sourceforge.net/projects/smartmontools/

のツールで読み書き容量を調べたら

Data Units Read: 138,108,623 [70.7 TB] Data Units Written: 130,730,949 [66.9 TB]

と、半年弱で一応限界の目安と言われている300TBの25%程度になっている事がわかりました。無償修理は1年との事で、2-3年で壊れてしまう可能性があり、しかも特性上SSDのみの交換は難しいです。サポートプログラムなどの検討をお願いします。

卓球で1セットとる確率

pを1点取る確率として、数学弱者的に数値計算してプロットすると

prob_win_1set=function(p){
  q=1-p
  s=0
  for(i in 0:10){
    s=s+(p^11)*choose(11+i-1,i)*(q^i)
  }
  s
}

x=seq(0,1,0.01)
y=prob_win_1set(x)
qplot(x,y)

f:id:biones:20200901234852p:plain

x=yの直線より上下にいくので、pが少しでも高い(強い)方はより勝ちやすくなるという当然の結果になる。 y>0.9、つまり勝率9割となるxは64%程度。

leetcode Trapping Rain Water

座標hから貯められる水は、右に進んだときの一番高い所と左に進んだ時の一番高い所の小さい方。 これでhardなので平和・・・。

class Solution:
    def trap(self, height: List[int]) -> int:
        if len(height)<=1:
            return 0
        N=len(height)
        maxleft=[0]*N
        maxright=[0]*N
        maxleft[0]=height[0]
        maxright[-1]=height[-1]
        
        for h in range(1,N):
            maxleft[h]=max(maxleft[h-1],height[h])
        for h in reversed(range(N-1)):
            print(h)
            maxright[h]=max(maxright[h+1],height[h])
        
        print(maxleft,maxright)
        res=0
        for h in range(len(height)):
            res+=min(max(maxleft[h]-height[h],0),max(maxright[h]-height[h],0))
        return res
                

ダブルスだけの結果から個人のレーティングとペアの相性を推定する

前回の続きで、卓球などで試合はダブルスばかりだったり、シングルと統合したい場合に使えると思う。 核はペアの場合のrateを rate[x]+rate[y]+rate_two[x,y] と分けて、rate_two(x<yの順序集合)はプラスマイナス200程度になる希望を事前分布に押し込んだ事。 使わない(x,x)や(3,1)などをゼロにする事前分布はなぜか全くうまくいかなかった。つねにx側が勝つ(=inv_logit[p]もほぼ1)なのに、何故か五分五分になりたがるみたいな。

library(rstan)

scode="
data{
  int N;
  int M;
  int x[N,2];
  int y[N,2];
  int one[N];
}

parameters {
  real rate[M];
  real rate_two[M,M];
}

transformed parameters {
    real p[N];
    real tmp1;
    real tmp2;
    real b=0.00575364;
    for(i in 1:N){
      tmp1=rate[x[i,1]]+rate[x[i,2]]+rate_two[x[i,1],x[i,2]];
      tmp2=rate[y[i,1]]+rate[y[i,2]]+rate_two[y[i,1],y[i,2]];
      p[i]=inv_logit(b*(tmp1-tmp2));
      //print(rate_two[1,1])
      print(p[i])
    }
}

model{
  
  rate~normal(1500,500);
  //rate~normal(0,0.0001);
  //b=0.00575364;
  for(i in 1:M){
    for(j in 1:M){
      if(i<j){
        rate_two[i,j]~normal(0,500);
      }else{
        //rate_two[i,j]~normal(1500,500);
        rate_two[i,j]~normal(0,500);
      }
    }
  }
      
  //rate_two~normal(0,100);
  //one~berounulli(p);
  
  for(i in 1:N){
    one[i]~bernoulli(inv_logit(p[i]));
  }
  
}

"

#b=Solve[1/(1 + Exp[-x*100]) == 0.64, x]

d=c(1,2,3,4,
    1,4,2,3,
    2,3,4,5,
    2,3,1,5,
    1,3,2,5,
    2,3,1,4,
    1,5,2,4
    )

d2=c(1,2,3,4,
    1,4,2,3,
    2,3,4,5,
    2,3,1,5,
    1,3,2,5,
    1,2,4,5,
    1,3,4,5
)

#12が強いが14だと弱くなるペア
d3=c(1,2,3,4,
     1,2,3,4,
     1,3,2,4,
     1,3,2,5,
     1,2,3,5,
     1,2,3,4,
     2,3,4,5,
     2,3,1,4
     )
#あえてシングル
dsingle=c(1,1,2,2,
          1,1,3,3,
          2,2,3,3,
          2,2,4,4,
          3,3,4,4,
          1,1,2,2,
          1,1,3,3,
          2,2,3,3,
          2,2,4,4,
          3,3,4,4
          )

df=matrix(d3,ncol=4,byrow = T)

x=df[,1:2]
y=df[,3:4]
M=max(df)
#rtinit=matrix(1500,M,M)

lst=list(N=nrow(x),x=x,y=y,M=max(df),one=rep(1,nrow(x)))
fit=stan(model_code = scode,data=lst,
         #init = function(){list(rate_two=rtinit,rate=rep(1500,M))},
         chain=1,iter=500,warmup = 80)

la=extract(fit)

rate=apply(la$rate,2,mean)
M=max(df)
rate_two=matrix(0,M,M)
for(i in 1:M){
  for(j in 1:M){
    rate_two[i,j]=mean(la$rate_two[,i,j])
  }
}

print(rate_two)
   [,1]       [,2]       [,3]       [,4]      [,5]
[1,] -12.471779 113.325409  84.967680 -35.935146  30.57404
[2,] -15.944763  28.629781  33.380074  -8.663292 -28.67175
[3,] -28.933494 -57.394162 -31.988833 -91.035994 -41.68916
[4,]  11.050791  -9.301574  -6.932745  17.611705 -14.15838
[5,]   6.273119   3.523987  32.405800  -8.521642 -32.16282

print(rate)
[1] 1629.242 1578.852 1507.623 1329.176 1386.851

基本的に1が1番強いようにつくり、d3は(1,2)のペアが最強だが1は4と組んだときに弱くなるのが出ていると思う。

同じノリで対戦相手の相性はaisho[xa,xb,ya,yb]とすれば良いと思う。