試してみたい人は下記リンクを参照してね。
ハンズオン ラボ: グラフィックス 〜 DirectWrite 〜
一応、どの程度マシになるかというと、Osaka−等幅の16px(たぶん)でレンダリング設定をいい具合にすると
このくらい。
英語、16px(ターミナルを想定)
英語、14px(ターミナルを想定)
まぁ、それぞれチューニングしたけれども実用レベルに達してるんじゃないかな。特に英語だけのときはパフォーマンスがいいよね。
typedef struct node{
int value;
struct node *next;
} node, *list;

list catenate(list p1, list p2){
if(p1==0){
return p2;
}
else if(p2==0){
return p1;
}
node *tmp;
tmp = p2->next;
p2->next = p1->next;
p1->next = tmp;
return p2;
}list sort1(list p,int d){
list pp[10], q; int i, k;
for(i=0;i<10;i++) pp[i] = 0;
while(p!=0){
q = p->next;//(1)
k = q->value/d%10;
if(p == p->next) p = 0;//(2)ここから4行
else p->next = p->next->next;
q->next = q;
pp[k] = catenate(q,pp[k]);
}
for(i=0;i<10;i++) p = catenate(p,pp[i]);//(3)
return p;
}list sort(list p){
list q; int max, d;
max = p->value;
q = p->next;
while(q!=p){
if(max<q->value) max = q->value;
q = q->next;
}
for(d=1;max;d*=10,max/=10) p = sort1(p,d);
return p;
}#include <stdio.h>
#include <stdlib.h>
#define BUFF 100
typedef struct _expr{
char element;
struct _expr *left,*right;
}expr;
void set_opr(expr *ex,char c){
expr *opr;
opr = (expr*)malloc(sizeof(expr));
opr->left = ex->right;
opr->right = 0;
ex->right = opr;
opr->element = c;
}
void set_mul(expr *ex,char c){
switch(ex->right->element){
case '+':
case '-': set_mul(ex->right,c);break;
default : set_opr(ex,c);break;
}
}
void set_int(expr *ex,char c){
if(ex->right){
set_int(ex->right,c);
} else {
expr *integer;
integer = (expr*)malloc(sizeof(expr));
integer->element = c;
integer->left = integer->right = 0;
ex->right = integer;
}
}
void build_expr(expr *ex,char *string){
while(*string){
switch(*string){
case '+':
case '-': set_opr(ex,*string);break;
case '*': set_mul(ex,*string);break;
default : set_int(ex,*string);break;
}
string++;
}
}
int calc(expr *ex){
switch(ex->element){
case '+': return calc(ex->left) + calc(ex->right);
case '-': return calc(ex->left) - calc(ex->right);
case '*': return calc(ex->left) * calc(ex->right);
default : return (int)(ex->element-'0');
}
}
int main(){
char string[BUFF];
expr *head;
head = (expr*)malloc(sizeof(expr));
head->left = head->right = 0;
scanf("%s",&string);
build_expr(head,string);
printf("%d\n",calc(head->right));
return 0;
}
この広告は90日以上新しい記事の投稿がないブログに表示されております。