Archives

用脚本解决C语言问题

vvoodyxiyoulinux上提出了一个C语言的问题,这个问题我之前见过,所以不想自己想了,想让计算机帮我完成。于是费了一番功夫写了个脚本帮我完成。(哎,老了,写代码慢了~~)

先贴“答案”,应该是总共8个结果(下面的9个中有两个明显是等价的):

int i,n=99;main(){for(i=0;i<n;i—){printf(“#”);}}
int i,
n=99;main(){for(i=0;i<n;i—){printf(“#”);}}
int i,n=99;main(){for(i=0;-i<n;i—){printf(“#”);}}
int i,n=99;main(){for(i=0;~i<n;i—){printf(“#”);}}
int i,n=99;main(){for(i=0;i<&n;i—){printf(“#”);}}
int i,n=99;main(){for(i=0;i<n;i—);{printf(“#”);}}
int*i,n=99;main(){for(i=0;i<n;i—){printf(“#”);}}
int i,n=99;main(){for(i=0;i+n;i—){printf(“#”);}}
int i,n=99;main(){for(i=0;i<n;n—){printf(“#”);}}

用时:

real 1m3.881s
user 0m44.097s
sys 0m17.436s

最让我吃惊的结果是那个溢出的,很巧妙,脚本运行到那里停了大约4,5秒钟的样子。

最后放脚本,包括两部分,一部分用bash完成,另一部分用Perl完成。其实完全用bash或者完全用Perl都是可行的,而且完全用Perl应该是最快的。

[bash]

!/bin/bash

TEST_VAR=’int i,n=99;main(){for(i=0;i<n;i—){printf("#");}}'

Generated by Python with

''.join(map(lambda x: '' if chr(x).isupper() else chr(x), range(32, 127)))

except '$','(',')', '{','}', '[', ']', '@', "`", """, "#", "'", "\", ' '

possible_chars='!'"%&*+,-./0123456789:;?^_abcdefghijklmnopqrstuvwxyz|~”
len=${#TEST_VAR}
num_chars=${#possible_chars}
tmpfile=$(mktemp /tmp/test-$$.XXXXXXX)
outfile=”/tmp/test_sh.out”

function is_valid_and_ok()
{
echo $1 > $tmpfile
if gcc -xc -c -o $outfile.o $tmpfile &>/dev/null;
then
gcc -o $outfile $outfile.o &>/dev/null
if [[ $? -ne 0 ]]; then
return 0
fi

    #nohup $outfile &gt; $resultfile 2&gt; /dev/null &amp;
    #sleep 1 &amp;&amp; killall $outfile 2&gt; /dev/null
    n=$(./get_run_result.pl $outfile)
    echo $n
    if [[ $n -eq 99 ]] || [[ $n -eq 100 ]] || [[ $n -eq 1 ]]
    then
        return 1
    fi
fi
return 0

}

main

i=8
while(($i $tmp” 1>&2
fi
i=$(($i+1))
done;

i=4
while (($i < $len - 14));
do
j=0
while(($j $tmp” 1>&2
fi
j=$(($j+1))
done
i=$(($i+1))
if (($i == 11)) ; then
i=17
fi
done;

i=0
while(($i<$len - 16));
do
j=0
while(($j $tmp” 1>&2
fi
j=$(($j+1))
done
i=$(($i+1))
if (($i == 11)) ; then
i=17
fi
done;
[/bash]
[perl]

!/usr/bin/perl -w

use strict;
use warnings;

my $n;
my $chars;

open(my $in_file, “$ARGV[0]|”) or exit 1;
$n = read($in_file, $chars, 101);
print “$nn”;
close $in_file;
[/perl]

发工资了

今天是发工资的日子(pay day),比较兴奋,毕竟这是自己的第一份工资。上周就和公司的人力资源同事谈这事了,因为公司发工资不给现金,她还专门带我去银行办了信用卡,顺道带我去中餐馆吃了一顿。:-)

下午快下班时才收到银行发来的确认邮件,说多少多少钱已经转到你的帐户上。比较囧的是还差点把它当成垃圾邮件处理了,因为它的正文是放到html格式的附件中的。虽然说没有拿到实实在在的钞票,可心里还是很高兴的。

今天还有比较高兴的事是自己做的“项目”有了大的进展,开始进行下一步了,终于有机会写代码了!T_T 严重感谢公司里的一个老同事,每次当我遇到问题时总是不厌其烦的帮我,哪怕我的问题有多么地弱智。。。他有一点很让我佩服,就是,遇到一个问题,我还没反应问题是什么时他就已经找到答案了!可见他对Linux是多么熟悉!更关键的是,他知识相当渊博,编程他懂得多,很擅长C++;服务器管理他也懂,公司CVS和DHCP服务器就是他管理;硬件他还懂,给我说设计CPU多么多么简单……Orz!上次聚会时我正好坐他旁边,和他聊了很久,给我印象最深的是他的口头语,有两句,是“Oh, shit!”和“…fucking xxxx.” 还有一点让我吃惊的是他居然会4,5种语言(不是计算机编程语言,是人们说的自然语言),而上星期Fatima也告诉我她也会不下4种……Orz。难道这里的人都这么牛?

厄,还有一件事,就是skype终于可以打电话了。。。T_T 感谢ZC Miao帮我充了skype!刚刚给老妈打了个电话,那边是早上,她还没起床。

总之今天很高兴,不写了,睡觉去了。

放一些照片

我没相机,所以直接借用George拍的照片。我自己也拍了几张,也是借用的他的相机。Thanks, George!

Coimbra市中心:

http://picasaweb.google.com/george.milescu/20080403_CoimbraCentru

公寓旁边的大桥:

http://picasaweb.google.com/george.milescu/20080331_CoimbraPlimbarePePonteDaRainhaSantaIsabel

Forum:

http://picasaweb.google.com/george.milescu/20080315_CoimbraForumSiDolceVita

所住公寓附近:

http://picasaweb.google.com/george.milescu/20080309_CoimbraPrimelePoze

最后是前天晚上公司的人一起聚会时我拍的照片:

http://picasaweb.google.com/xiyou.wangcong/CriticalBeerParty

奇怪的无线问题

很奇怪,前几天一直都不能正常使用NetworkManager,今天居然可以了。。。无缘无故!

难道是我人品的问题??

终于可以摆脱有线了。严重感谢George,帮了我很多忙,起码我现在知道在Linux上怎么使用无线了(以前从来没用过)。

恩,简单总结一下,基本用iwconfig和iwlist就可以了:

/sbin/iwconfig wlan0 essid “YOUR_ID” key s:YOUR_PASS mode Managed channel 6 rate auto

然后再dhclient就完了。这边的网络都是用DHCP的,在公司也是,不过公司用的是有线。

图形界面直接用NetworkManager就可以了,要开启NetworkManager和NetworkManagerDispatcher两项服务。其中遇到的一个问题是提示输入密钥环密码,不知所云为何,我简单尝试了一下,安装gnome-keyring-manager之后把login那个密钥环删掉就行了。

现在比较郁闷的另一个问题是内核。在公司得用vmware,需要内核模块,于是又下了个新内核编译完装上,但是无线和声卡驱动似乎没弄好,不能用。而在Fedora自带的内核中,又不能用vmware。这是个问题,得想办法解决掉~!

初到葡萄牙

到Coimbra好几天了,一直没能上来写blog,因为我从国内带来的插头在这里都用不了,还好,公司的人发现这个问题后马上帮我换了一个。再加上公寓里用的是无线网络,又折腾了半天,最后还是用有线上来的。

到这里有很多感受,真不知道从何说起。

Coimbra风景很美,有不少山,虽然都不高,但都覆盖着树木。而且University of Coimbra就坐落在一个山头上。还有一条很长的河,纵贯整个城市。离我住的公寓不远的地方还有一座桥,很漂亮,到晚上还有彩灯,桥的另一头有一个小公园,公园里的河边有几个餐馆,我在那里吃了两次,感觉很爽,尤其是晚上。

Coimbra几乎就没有什么高楼大厦,都是比较矮的房子,很多房子看起来都是一个风格,具有典型的欧洲味。附近很多房子都是依山而建,很紧凑。这里有个很大的购物的地方,叫forum,里面几乎可以买到各种东西,所以如果你来Coimbra的话,千万记住这个地方。里面有个很大的超市,可以买一些吃的用的东西,而且比较便宜。在葡萄牙,餐馆里的饭通常都比较贵,一顿饭平均在6~7欧元左右,所以如果有条件最好自己做着吃。公寓的厨房里做饭的东西(当然是做西餐的)很全,可惜我连中餐都不会做。幸运的是,刚才出去吃晚饭时发现一家很便宜的餐馆,我吃了很饱的一顿居然才花了2.20欧元!

说到花钱,葡萄牙人似乎比我们中国人还会过,他们经常告诉我什么什么很贵,你应该怎么怎么才能便宜。公司门口的女接待Maria甚至花了一番力气帮我去弄一张公司bus的车票,还给司机说让我第二天早上坐那趟bus时免费,为的就是帮我省钱!这也说明葡萄牙人民很善良。:-)

确实,来到这里可以深刻感受到这里的人们很友好。在我来之前和我联系的Fatima就是本地人,她还用自己的车接送我去宾馆和公寓,对我照顾很周到。她有个非常可爱的儿子,名字叫劳伦斯,小家伙从小就喜欢踢球,很招人喜欢。他还太小,葡语都说得不熟练,英语根本就不会,但他爸爸还让我教他了几个汉语单词。听他们说汉语很有意思,感觉不管你怎么教他们都总是发音不准。

周围不光葡萄牙人,还有罗马尼亚人,我现在就和两个罗马尼亚人住在一起,一个叫George,另一个叫Ciprian,只知道他们的名字是这么念,不知道怎么拼写。他们也很友好,经常见了面就嘘寒问暖,而且很乐于助人。在我到这里前,还住着一个刚从大学毕业的罗马尼亚女孩,我到这里时她正好搬出去,就和她一起吃了顿饭。从她口中我头一次知道,罗马尼亚居然曾经也是个共产主义国家!她还问我中国的情况。我告诉她中国现在开放了,不像从前了,而且今年中国举办奥运会!而她居然连北京奥运会都不知道!其实我还跟好几个人说欢迎他们八月份去北京看奥运会,他们都说去不了,因为中国太远啦!

故事还有很多,而且还在继续!暂时就写到这里。时间不早了,明天还得去上班。有时间继续写。

漫长的旅途

在Google Map上胡乱画了一下这次的行程,从空间上来看也很漫长。

希望我的好运还没用完。;-) 但愿一切顺利!

再见,中国!

P.S. 在西安时买了一件“I Love China”的T恤,正好可以穿上。

Programming and Sex

[郑重警告:未满18岁的请自觉离开!]

有这么一句甚出名的话:”Software is like sex: It’s better when it’s free.” 今天才知道,原来是Linus说的。。。于是,solidot上有人由此推出:使用盗版像是被诱奸

在编程这方面,其实和sex相关的“名言”还挺多,整理如下:

Programming is like sex: one mistake and you’re providing support for a lifetime.”
(Michael Sinz)

“Documentation is like sex; when it’s good, it’s very, very good, and when it’s bad, it’s better than nothing.” (Dick Brandon)

“Saying that Java is nice because it works on all OSes is like saying that anal sex is nice because it works on all genders.”
(Alanna)

“How C++ is like teenage sex:
It is on everyone’s mind all the time.
Everyone talks about it all the time.
Everyone thinks everyone else is doing it.
Almost no one is really doing it.
The few who are doing it are: A. Doing it poorly. B. Sure it will be better next time. C. Not practising it safely.”

“UNIX is sexist
Type ‘man’ and help is given
woman is not found

[…]

UNIX is like sex
After it goes down on you
You have to ‘fsck’ it

[…]

UNIX is like sex
Root privleges are needed
To use lower ports” (Unix Haiku)

“Photoshop is like sex, you can actually tell who’s a professional!”

“Software is like sex; if you feel the need to pay for it you can always find someone willing to take your money.”

“Reading computer manuals without the hardware is as frustrating as reading sex manuals without the software.” — Arthur C. Clarke.

“Overclocking is like sex: if you smell burning, just slow down.”

参考:

101 Great Computer Programming Quotes
Programming Quotations
Computer programming quotes
Your Favorite Programming Quote
Quotations about Computer Programming
Famous and not so famous programming quotes

git-bisect 使用体会

今天试着使用了一下git-bisect,收获颇多。总结一下教训:

1. 不要做git-reset( —hard),它可能会带来一些很严重的错误,比如:

fatal: Untracked working tree file ‘drivers/char/hw_random/virtio-rng.c’ would be overwritten by merge.

这时你只能无奈的重新clone。

2. 一定要找准good的起点,可以通过git-checkout -b来一个个测试寻找。

3. 多利用branch,不仅仅是针对bisect,其它场合也适用。

David Miller用的方法不错,推荐一下。

UTF-8版的strlen

这里看到这么一个计算UTF-8字符串长度的程序:

[c]
int my_strlen_utf8_c(char *s) {
int i = 0, j = 0;
while (s[i]) {
if ((s[i] & 0xc0) != 0x80) j++;
i++;
}
return j;
}
[/c]

不解。查wikipedia,得一表:
00000000 00000000 0zzzzzzz 0zzzzzzz
00000000 00000yyy yyzzzzzz 110yyyyy 10zzzzzz
00000000 xxxxyyyy yyzzzzzz 1110xxxx 10yyyyyy 10zzzzzz
000wwwxx xxxxyyyy yyzzzzzz 11110www 10xxxxxx 10yyyyyy 10zzzzzz

顿悟。

儿童节快乐!

哎,一个饱受教育的人难以找回失去的童真。。。

寻人启事(张晓风)

妈妈在客厅贴起一张大红纸
上面写着黑黑的几行字:
兹有小男孩一名不知何时走失
谁把他拾去了啊,仁人君子
他身穿小小的蓝色水手服
他睡觉以前一定要念故事
他重得像铅球又快活得像天使
满街去指认金龟子是他的专职
当电扇修理匠是他的大志
他把刚出生的妹妹看了又看露出诡笑:
“妈妈呀,如果你要亲她就只准亲她的牙齿。”
那个小男孩到哪里去了,谁肯给我明示?
听说有位名叫时间的老人把他带了去
却换给我一个比妈妈还高的少年
正坐在那里愁眉苦脸地背历史
那昔日的小男孩啊不知何时走失
谁把他带还给我啊,仁人君子。

P.S. 刘若英生日快乐!