Liebestraume

Piano Lover

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.

How to download videos from Nicovideo

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.

Read More

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.

Read More

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
Vladimir Horowitz
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

trumpetangst:

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

(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

http://www.ioi2013.org/wp-content/uploads/tasks/day1/artclass/artclass.pdf

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
}

Putnam 1965 B3

Prove that there are exactly three right-angled triangles whose sides are integers while the area is numerically equal to twice the perimeter.

Read More

0 Plays
Nobuo Uematsu, Motoki Matsuoka & Angela Aki
Kiss Me Good-Bye -featured in FINAL FANTASY XII-

One of the newest addition to my favorite game music :)

Final Fantasy 12 - Kiss me goodbye