C++红旗之最短形式:500多字符且无法遵守原题规则

已经尽力了。继续深入压缩代码的方法肯定很诡异了。

参考了基于高级一些的Mathematica下的办法:

list=Table[Manipulate[With[{[email protected],[email protected]},Graphics[{If[testpoint[p,pt],Pink,Cyan],[email protected]},PlotRange->3 {{-1,1},{-1,1}},ImageSize->{380,415},PlotLabel->Text[Style[If[testpoint[p,pt],"在其中","已出局"],FontFamily->"Arial",If[testpoint[p,pt],Red,Blue],30]]]],{{pts,{{0,0},{x,1/2},{-1,-1},{2,-3/2},{1,2},{0,1}}},Sequence@@(3 {{-1,-1},{1,1}}),Locator,LocatorAutoCreate->{4,Infinity}},SaveDefinitions->True,Initialization:>((*test if point pt inside polygon poly*)testpoint[poly_,pt_]:=Round[(Total@Mod[(#-RotateRight[#])&@(ArcTan@@(pt-#)&/@poly),2 Pi,-Pi]/2/Pi)]!=0)],{x,-2,2.55,.1}];
Export["testWinding.gif",list]

输出这样的图片为了好看:

可能达到的最短C++代码(再短小于500字符基于当前方法也难)

// NOTE: compile with g++ filename.cpp -std=c++11
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <vector>
//#include <functional>
#define DIM1 600
#define DIM2 400
//#define DM1 (DIM1-1)
//#define DM2 (DIM2-1)
//#define _sq(x) ((x)*(x)) // square
//#define _cb(x) abs((x)*(x)*(x)) // absolute value of cube
//#define _cr(x) (unsigned char)(pow((x),1.0/3.0)) // cube root

unsigned char GR(int,int);
unsigned char BL(int,int);

#define F float
F e=1.e-7,p=3.14;
unsigned char RD(int i,int j){
// YOUR CODE HERE
#define E for(int k=0;k<5;k++){
#define at(x,y)  abs(x)>e?x>e?atan(y/x):y>0?atan(y/x)+p:atan(y/x)-p:y>0?p/2:-p/2
return 255;
}

bool Q(int i,int j,int* x){
    F t[5],o;
    E
        t[k]=at((F)(x[k]-i),(F)(x[k+5]-j));
    }
    F tl=0.;
    E
    o=t[(k+1)%5]-t[k];
        o+=o<-p?p:o>p?-p:0;
    tl+=o;
    }
    return abs(tl)>.5;
    };

unsigned char GR(int i,int j){
// YOUR CODE HERE
    int q[10]={100, 135, 43, 157, 65, 40, 149, 81, 81, 149},
        r[10]={184, 220, 183, 207, 205, 168, 181, 191, 161, 199},
        s[10]={183, 208, 204, 185, 220, 50, 22, 59, 27, 42},
        t[10]={221, 259, 229, 239, 252, 135, 133, 157, 120, 156},
        u[10]={220, 254, 237, 231, 258,83, 66, 100, 62, 89};
    return Q(i,j,q)||Q(i,j,r)||Q(i,j,s)||Q(i,j,t)||Q(i,j,u)?255:0;
}
unsigned char BL(int i,int j){
// YOUR CODE HERE
    return 0;
}

void pixel_write(int,int);
FILE *fp;
int main(){
fp = fopen("MathPic.ppm","wb");
fprintf(fp, "P6\n%d %d\n255\n", DIM1, DIM2);
for(int j=0;j<DIM2;j++)
for(int i=0;i<DIM1;i++)
pixel_write(i,j);
fclose(fp);
system("pause");
return 0;
}
void pixel_write(int i, int j){
static unsigned char color[3];
color[0] = RD(i,j)&255;
color[1] = GR(i,j)&255;
color[2] = BL(i,j)&255;
fwrite(color, 1, 3, fp);
}
  1. 优点,代码已经进一步压缩到500多字符,大大缩短;
  2. 缺点,没有严格安装特定地方写代码,以及140x3的要求。

输出虽然近似,也是正常的红旗:

时间: 2024-11-12 03:21:49

C++红旗之最短形式:500多字符且无法遵守原题规则的相关文章

一个用 C 语言写的迷你版 2048 游戏,只有 500个字符

Jay Chan 用 C 语言写的一个迷你版 2048 游戏,只有 487 个字符.来围观吧 M[16],X=16,W,k;main(){T(system("stty cbreak") );puts(W&1?"WIN":"LOSE");}K[]={2,3,1};s(f,d,i ,j,l,P){for(i=4;i--;)for(j=k=l=0;k<4;)j<4?P=M [w(d,i,j++)],W|=P>>11,l*

杭电oj1860:统计字符(字符串hash / 水题)

统计字符 题目链接 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description 统计一个给定字符串中指定的字符出现的次数 Input 测试输入包含若干测试用例,每个测试用例包含2行,第1行为一个长度不超过5的字符串,第2行为一个长度不超过80的字符串.注意这里的字符串包含空格,即空格也可能是要求被统计的字符之一.当读到'#'时输入结束,相应的结果不要输出.

谷歌不靠谱,还是国内的网站都不靠谱?

老早就注意到文章有转载, 不过大多数规规矩矩写了原始博客链接, 也没在意. 不过, 今天我尝试用谷歌搜索了下主题词,对应于我的这篇博客的标题: " C++红旗之更短形式:500多字符且无法遵守原题 结果前三位的网页都是转发我的帖子而且不带原始链接和出处的(这帮人估计作了搜索引擎优化): 不过无耻的是,转帖注明出处这个最起码的规则也不遵守. 我这不是替这些不良网站无偿提供内容,连个名字和出处都不给挂吗? 算了,以后不写了.

【转】移动前端手机输入法自带emoji表情字符处理

http://blog.csdn.net/binjly/article/details/47321043 今天,测试给我提了一个BUG,说移动端输入emoji表情无法提交.很早以前就有思考过,手机输入法里自带的emoji表情,应该是某些特殊字符.既然是字符,那应该都能提交才对,可是为啥会被卡住呢?搜了一下,才发现,原来emoji用到的字符是4字节的utf-16(utf-16有2字节和4字节两种编码),而我们的数据库是采用的utf-8,并且最大只允许3字节的字符.这样冲突就产生了,表单因为这些em

【转载】字符,字节和编码

转自:http://www.regexlab.com/zh/encoding.htm 引言 "字符与编码"是一个被经常讨论的话题.即使这样,时常出现的乱码仍然困扰着大家.虽然我们有很多的办法可以用来消除乱码,但我们并不一定理解这些办法的内在原理.而有的乱码产生的原因,实际上由于底层代码本身有问题所导致的.因此,不仅是初学者会对字符编码感到模糊,有的底层开发人员同样对字符编码缺乏准确的理解.     1. 编码问题的由来,相关概念的理解 1.1 字符与编码的发展 从计算机对多国语言的支持

字符,字节和编码

摘要:本文介绍了字符与编码的发展过程,相关概念的正确理解.举例说明了一些实际应用中,编码的实现方法.然后,本文讲述了通常对字符与编码的几种误解,由于这些误解而导致乱码产生的原因,以及消除乱码的办法.本文的内容涵盖了“中文问题”,“乱码问题”. 掌握编码问题的关键是正确地理解相关概念,编码所涉及的技术其实是很简单的.因此,阅读本文时需要慢读多想,多思考. 引言 “字符与编码”是一个被经常讨论的话题.即使这样,时常出现的乱码仍然困扰着大家.虽然我们有很多的办法可以用来消除乱码,但我们并不一定理解这些

移动前端手机输入法自带emoji表情字符处理

今天,测试给我提了一个BUG,说移动端输入emoji表情无法提交.很早以前就有思考过,手机输入法里自带的emoji表情,应该是某些特殊字符.既然是字符,那应该都能提交才对,可是为啥会被卡住呢?搜了一下,才发现,原来emoji用到的字符是4字节的utf-16(utf-16有2字节和4字节两种编码),而我们的数据库是采用的utf-8,并且最大只允许3字节的字符.这样冲突就产生了,表单因为这些emoji字符的存在无法提交. 找到原因之后,接下来就要考虑解决方案了.目前考虑到的两种方案,一是让后台处理,

HTML的字符实体

HTML的字符实体: 在HTML中有些字符是预留字符,也就是说这些字符可以构成HTML的语法结构部分.例如大于号(>)和小于号(<). 预留字符不能够直接在HTML源码中使用,因为它们有可能被浏览器误认为是HTML标签.例如: <td><td>是一个HTML标签</td> 例如以上代码我们想表述的是: <td>是一个HTML标签但是很有可能被浏览器误读导致第一个<td>标签作废,并连锁导致其他布局问题.所以这些字符需要使用HTML字符

字符、字节和编码

摘要:介绍了字符与编码的发展过程,相关概念.举例Java实际应用中,编码的实现方法.最后,讲述了通常对字符与编码的几种误解,由于这些误解而导致乱码产生的原因,以及消除乱码的方法. 1.编码问题的由来及相关概念 1.1字符与编码的发展 从计算机对多国语言的支持角度看,大致可以分为三个阶段:   系统内码 说明 系统 阶段一 ASCII 计算机刚开始只支持英语,其它语言不能够在计算机上存储和显示 英文DOS 阶段二 ANSI编码(本地化) 为使计算机支持更多语言,通常使用0x80~0xFF范围的2个