Jan 31

比如,下面这几个可以输出自己的程序: 

class S{public static void main(String[]a){String s="class S{public static void main(String[]a){String s=;char c=34;System.out.println(s.substring(0,52)+c+s+c+s.substring(52));}}";char c=34;System.out.println(s.substring(0,52)+c+s+c+s.substring(52));}}
char*s="char*s=%c%s%c;main(){printf(s,34,s,34);}";main(){printf(s,34,s,34);}
#define q(k)main(){return!puts(#k"\nq("#k")");}
q(#define q(k)main(){return!puts(#k"\nq("#k")");})

还有用gcc编译输出C,g++编译输出C++的程序: 

#include <stdio.h>
int main() {
   putchar('C');
   #ifdef __cplusplus
   putchar('+'); putchar('+');
   #endif
   return 0;
}

下面的程序输出一个雪花曲线,看起来很像Java,但是却是C: 

/*
 * Sun's Java is often touted as being "portable", even though my code won't
 * suddenly become uber-portable if it's in Java. Truth is, Java's one of
 * the most ugly, slow, and straitjacketed languages ever. It's popular
 * mainly because people hear the word "portable" and go "ewww".
 *
 * This program, then, is dedicated to bringing about the death of Java. We
 * good coders have been oppressed for too long by the lame language
 * decisions of pointy-haired bosses and academics who should know better. 
 * It's time we stand up against this junk, and bring back the fun in
 * programming! Viva La Revolution!
 */

#define aSet c
#define BufferedReader(x)1
#define byte Y[I][_^1]?do(:):_&1?do(.):do(`):8;++y;}
#define class int N=0,_,O=328,l=192,y=4,Y[80][64]={0},I;struct
#define do(c)a(#c "\b")
#define err c,c
#define getAllStrings(x));q()
#define if(x)b(#x)
#define IOException
#define line c
#define main(a)b(char*x){write(1,"\033[",2),null}main()
#define new
#define null a(x);}a(char*x){write(1,x,strlen(x));try;try;try;try;
#define out c,c
#define println(x)c
#define private int d(int
#define public short c;}c;typedef int BufferedReader;char*F="JF>:>FB;;BII";
#define return {return
#define static f(x){N=(N+x)%6,y--?f(0),f(1),f(4),f(1):++Y[(I=O+N[F]-66)
#define String
#define System c
#define this if(D):1,O=I,I/=16,l<_/32?if(B):l>_/32?if(A):2,l=_,_/=16,byte
#define throws
#define toArray(x)c
#define try for(;--c.c;)
#define void /16][(_=l+N[6+F]-66)/16]?O/=16,l/=32,O<I/16?if(C):O>I/16?this
#define while(k)if(2J),if(7;21H),f(0),f(4),f(4),if(H),/*

import java.io.*;
import java.util.*;

/**
 * A lame Java program.
 * @author J. Random Worker
 */
class LameJavaApp
{

   /** The infamous Long-Winded Signature From Hell. */
   public static void main(String[] args)
     throws IOException
   {
     /* Don't get me started on this. */
     BufferedReader reader =
        new BufferedReader(new FileReader(args[0]));

     /* What, this long incantation just to print a string? */
       System.err.println("Hello world!");

     /* At least this is sane. */
     String line;
     while ((line = reader.readLine()) != null)
      System.out.println(line.length());
   }

   /**
    * Method with a needlessly long name.
    * @param aSet  a set (!)
    */
   private String[] getAllStrings(Set<String> aSet)
   {
     /*
      * This dance is needed even in J2SE 5, which has type
      * templates. It was worse before that.
      */
     return aSet.toArray(new String[0]);
   }

}
Jan 31

骑士周游是指在一个N×M的棋盘上,从某一点出发,按照国际象棋的跳法,不重复地经过每一个格子。其实本质上是求一个Hamilton回路。我们有时候需要对给定的一个棋盘,输出一个骑士周游的方案。往往首先想到的是搜索。但是搜索对于N,M较大的时候并不可取,这时候就会想到构造。我所了解的构造方法有两种,一种是在小棋盘的基础上每次增加宽度为2的路径,一种是把4个小棋盘合并起来。这里所要介绍的是后一种方法。而且这两种构造方法都对N,M有$|N-M|\leq 2$且均为偶数的要求。

首先,考虑N×N的棋盘。对棋盘进行黑白染色,得出马的路径必然是黑白相间的这一结论。又由于一条Hamilton回路上的黑白格子的数量应当相等,所以在N×N为奇数的时候问题无解。也就是在N为奇数的时候无解。反之,在N为偶数的情况下,一定存在Hamilton回路。

首先观察一下最基本的棋盘。由于4×4的棋盘无解,所以在这里我们只考虑6×6、6×8、8×8、 8×10、10×10、10×12的棋盘。据有关资料说,对于这些棋盘用回溯法可以在O(1)的时间内找到Hamilton回路,但是具体情况我不清楚。对于4个角上的格子,由于它们的度仅为2,而且观察有解的情况,必定是下面的情况。

而如果要得到8×6、10×8、12×10,只需要将6×8、8×10、10×12的棋盘旋转90度。对于$N,M\geq 12$的情形,我们就需要采用分治策略。方法如下:

  1. 分治:将棋盘尽可能平均的分割成4块;
  2. 合并:将4个子棋盘拼接。如下图:

这时,为了合并4个子棋盘,对于原有的边A-B、C-D、E-F、G-H,我们将它们变为A-G、B-D、C-F、E-H,这样就合并了4个子棋盘。至此,分治的过程结束。

上面的解法只是求得一个Hamilton回路,但是对于条件更弱的Hamilton通路,我们并没有类似的算法。

Jan 31

用blkid命令就可以了,不过要有root的权限(在debian/ubuntu下面sudo就可以了)。

下面是使用情况:

rchard@rchardx:~$ sudo blkid
/dev/sda1: UUID="42D48160D4815757" LABEL="System" TYPE="ntfs"
/dev/sda3: UUID="6cd307c9-0a2d-4bb1-9cd1-7e5a5e8b491e" TYPE="ext3"
/dev/sda5: UUID="45936577-c54b-463b-9807-6d3e14ac5907" TYPE="ext3"
/dev/sda6: TYPE="swap" UUID="a33b070c-a73c-44b7-bfde-8f284bf070b5"
Jan 31

期末考试考完了。当然,由于各种诸如怨念之类的原因,我肯定考得非常不好。先自我反省一下。

其实有些学科本可以不会考得太差的,但是出于各种各样的原因,我决定裸考一次,来看看自己在各个学科的天赋怎么样。事实证明,我对现在的这种数学和物理考试不是很适应。短时间内要求完成大量的题目对我来说是一个不可能的任务。

我这个人本来就不擅长数学推导。我对各种数学式子缺少一种灵敏的感觉。所以我只能进行一些理论或者概念的探讨,而不是对一些具体的东西得出一些结论。说到这里我自己都觉得自己有点臭美。不过我这个人其实挺道貌岸然的,所以见谅一下,就当成是扯淡好了。

马上就要寒假了,我最近实在是很忙,只能更新这种扯嘴皮子的东西,没有什么实际的内容。不过这也是我舒缓情绪的一种方式吧。

最近突然有点喜欢一些低沉而又充满爆发力的音乐,可能和我这一段时间的心态有关系。我最近由于看了不少比较抑郁的东西,所以心态有点失衡,总是比较压抑。希望以后能通过和别人的交往变得好一点。

Jan 28

明天就期末考试了,虽然对于我来说它并不是那么重要,但是我觉得这对我是一个有一点价值的标记:我的高三上学期快结束了。

不知不觉一个学期就过去了,我觉得自己好像一无所获。虽然不排除有点堕落的可能,但是从内心来讲,坐在教室里面认真上课已经不能给我带来新的感受和知识了。虽然我现在也勉为其难地在教室里面上课,但是每天都听到的是怎样考试,怎样解题。我完全听不到“如何去思考”这样的说法。明天就要期末考试了,我还是一如既往的没有充足的准备。我的内心是排除这些考试的,但是我现在不能摆脱它们。

所以我看上去非常纠结。纠结的不仅仅是考试,更重要的是,我现在找不到可以交流的人。周围的人好像都是以实干居多,至少我很少能够找到善于思考的人。没有人一起前行是很痛苦的事。特别是在思考的过程中。我现在整个人变得非常压抑和阴暗,开始喜欢一些以前不可能喜欢的东西。这样时间不长我的情绪就要偏激了。

这一个学期里面也没有确定什么目标,只是完成了当初要完成的大部分任务。《Concrete Math》后面的部分暂时不能很好地理解,先放在一边了;《初等数论》有几个章节的内容也是如此;《C++ Primer》也是差不多的情况,而且很多东西也需要慢慢积累。看起来这个学期也并不是那么白忙碌了。但是我很清楚地知道我浪费了很多时间,不得不承认我的意志力实在是不好。

学期就要结束了,我除了写了这么一些牢骚的话,好像也没有什么好说的。对于未来,我只能说,人生就像在雾中行走。昆德拉也说过和这个差不多的话,我知道的时候还颇有一点满足。人毕竟不会真的太孤独。对于过去,我没什么好说的。这个学期我倒是想明白了很多东西,以前都没有时间,以后会慢慢写出来的。

有时候我在想为什么我不去学哲学,可能是因为害怕不被理解。