# Liebestraume

## Piano Lover

9 Plays
Yuhki Kuramoto
13 Memory Of Love (New Recording)
9 Plays
Yuhki Kuramoto
02 Lake Louise I

Lake Louise I - Yuhki Kuramoto

Yuhki Kuramoto composed this tune and made a number of different versions out of it. I’ve played like 3 different versions, but somehow I have never played this particular version. I was listening to all YK albums and now it really caught my attention. I’ll record it myself some time soon.

## Persona 4 Arena Printable Command List

Since I love this game so much but couldn’t find any usable command list, I just created this printable list myself. I started writing it in MS Word, but I hated the result, so I ended up working in LaTeX. It’s pretty much the only scalable way of writing documents like this anyway.

When the 3rd Topanga League was ongoing, I bought a ticket but I was so busy during those days and couldn’t possibly finish watching everything before the timeshift deadline. I also didn’t like to have lags while watching the videos that are not even live broadcast, so I was poking around to find a way to enjoy the videos offline. There were a bunch of flash video downloaders, but not a single one of them worked on Nicovideo. In the end, I did find a few methods that were specific to Nicovideo, but I had to go through a lot of trial and error to get the right settings and make it work.

Since the Topanga World League is happening right now, I thought this would benefit not only me but other people who are experiencing the same frustration I had before. There are probably easier methods for non-paid broadcasts or non-Nicovideo VODs. The method I describe below assumes that you have paid for a show, and for some reason want to watch it offline.

## Putnam 2013 A1

Recall that a regular icosahedron is a convex polyhedron having 12 vertices and 20 faces; the faces are congruent equilateral triangles. On each face of a regular icosahedron is written a nonnegative integer such that the sum of all 20 integers is 39. Show that there are two faces that share a vertex and have the same integer written on them.

Schumann-Liszt Widmung, played in the 2013-14 Fall end-quarter evening concert.

40 Plays
Devil May Cry 3
Total result screen

Devil May Cry 3 - total result screen theme. I found this old recording of mine while cleaning my hard drive. All the recordings that I made before started taking lessons at Stanford sound quite terrible, but I thought this one was okay. Listening to these old recordings reveal how I played piano before and in which ways did I improve over the past few years… Pretty cool.

9 Plays
23 Op. 42, No. 5 in C-Sharp Minor

Horowitz playing Scriabin etude Op. 42-5. I already uploaded the Kissin version, but I like Horowitz’s playing better. Amazing voicing and rubato… How do you play like this Howoritz T____T

## MUSICAL NOTATION, AS DESCRIBED BY CATS

(I would have liked to crop some of these gifs (like the accent ones) to make them more accurate but alas, I lack the skills.)

## IOI 2013 #2 Art Class

A classification problem, like the ones you see in the machine learning and vision area. Fortunately, you don’t need any fancy machine learning trick. Some ad-hoc criteria (hand-crafted features) are enough to pass the problem, because the four given classes of paintings are very distinctive in style.

```#include "artclass.h"
#include<cstdio>
#include<queue>
using namespace std;

struct col
{
double r, g, b;
col(){}
col(double r, double g, double b): r(r), g(g), b(b) {}
};

inline double dist2(col &c1, col &c2)
{
return (c1.r-c2.r)*(c1.r-c2.r)+(c1.g-c2.g)*(c1.g-c2.g)+(c1.b-c2.b)*(c1.b-c2.b);
}

int n, m;

col a[500][500];
bool chk[500][500];

int dx[8]={-1, -1, -1, 0, 1, 1, 1, 0};
int dy[8]={-1, 0, 1, 1, 1, 0, -1, -1};

int flood(int x, int y)
{
int ret=0;
queue<pair<int, int> > q;
q.push(make_pair(x, y)); chk[x][y]=true;
while(!q.empty())
{
ret++;
pair<int, int> cur=q.front(); q.pop();
int cx=cur.first, cy=cur.second;
for(int k=0;k<8;k++)
{
int nx=cx+dx[k], ny=cy+dy[k];
if(nx<0 || ny<0 || nx>=n || ny>=m) continue;
if(chk[nx][ny]) continue;
if(dist2(a[cx][cy], a[nx][ny])<=300)
{
chk[nx][ny]=true;
q.push(make_pair(nx, ny));
}
}
}
return ret;
}

int style(int H, int W, int R[500][500], int G[500][500], int B[500][500]) {
n=H; m=W;
int i, j, k;
for(i=0;i<n;i++) for(j=0;j<m;j++) a[i][j]=col(R[i][j],G[i][j],B[i][j]);

// criterion for style 3: measure noise
int cnt=0;
double vartot=0.0;
for(i=1;i<n-1;i++) for(j=1;j<m-1;j++) for(k=0;k<8;k++)
{
int nx=i+dx[k], ny=j+dy[k];
vartot+=dist2(a[i][j], a[nx][ny]);
cnt++;
}
double crit3=vartot/cnt;
if(crit3>3000) return 3;

// style 4: measure noise for x and y direction and compare magnitude
double xntot=0.0, yntot=0.0;
int xncnt=0, yncnt=0;
for(i=n/10;i<n*9/10;i++) for(j=m/10;j<m*9/10;j++)
{
if(i<n-1){xntot+=dist2(a[i][j], a[i+1][j]); xncnt++;}
if(j<m-1){yntot+=dist2(a[i][j], a[i][j+1]); yncnt++;}
}
xntot/=xncnt; yntot/=yncnt;
double crit4=max(xntot, yntot)/min(xntot, yntot);
if(crit4>2.0) return 4;

// style 2: measure how "green" the picture is
cnt=0;
double ngtot=0.0;
for(i=0;i<n;i++) for(j=0;j<m;j++)
{
double penalty;
if(a[i][j].g>=60) penalty=0;
else penalty=(60-a[i][j].g)*(60-a[i][j].g);
ngtot+=(a[i][j].r*a[i][j].r+a[i][j].b*a[i][j].b)+penalty;
cnt++;
}
double crit2=ngtot/cnt;
if(10000<crit2 && crit2<33000) return 2;

// style 4 again: number of "areas" is small
cnt=0;
for(i=0;i<n;i++) for(j=0;j<m;j++)
{
if(chk[i][j]) continue;
int area=flood(i, j);
if(area>10) cnt++;
}
if(cnt<10) return 4;

// style 1 (can be improved): colors consist of white, black, red, blue, yellow,
//                            and two misc. colors observed from the samples
const int r=7;
col vib[r];
vib[0]=col(255,0,0);
vib[1]=col(255,255,255);
vib[2]=col(0,0,0);
vib[3]=col(0,0,255);
vib[4]=col(255,255,0);
vib[5]=col(190,190,190);
vib[6]=col(180,180,210);
cnt=0;
for(i=0;i<n;i++) for(j=0;j<m;j++)
{
double mdist=dist2(vib[0], a[i][j]);
for(k=1;k<r;k++) mdist=min(mdist, dist2(vib[k], a[i][j]));
if(mdist<=2500) cnt++;
}
double crit1=(double)(cnt)/(n*m);
if(crit1>0.3) return 1;

// misc. criteria
if(crit3>2000) return 3; // not that noisy but fairly so
if(crit1<0.05) return 4; // more likely to be of type 4 than 1
return 1; // give up and return 1, for which the criterion wasn't good enough anyway
}```