Purpose and Scope

研究五星红旗C++代码生成问题的代码压缩方法。

没有最短,仅仅有更短.

已经尽力了。爱因斯坦的三个小板凳里,我这是第四个。

继续深入压缩代码的方法肯定非常诡异了。

Algorithms and Experiments

參考了: 基于Mathematica下的办法,原始的

list=Table[#,{x,1,6,.2}]&@Manipulate[With[{p=Rest@pts,pt=First@pts},Graphics[{If[testpoint[p,pt],Cyan,Red],Polygon@p},PlotRange->2{{15,80},{-1,90}},ImageSize->{400,375},PlotLabel->Text[Style[If[testpoint[p,pt],"在当中","已出局"],FontFamily->"Arial",If[testpoint[p,pt],Red,Blue],30]]]],{ {pts,{3x{10,10},(*{-2,1/2},{-1,-1},{2,-3/2},{1,2},{0,1}*){100,160},{65,51},{157,119},{43,119},{135,51}}},Sequence@@(2 {{10,10},{100,100}}),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)];
Export["testWindingy.gif",Flatten@{list,Reverse@(Rest@list)}]

输出这种图片为了好看:

The Latest C++ Code

// 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);
}

Brief Summary

  1. 长处。代码已经进一步压缩到500多字符。大大缩短;
  2. 缺点,没有严格在特定地方写代码,为满足140x3段字符的要求。

输出尽管近似。也是正常的红旗:

从这里easy看出,Vietnam的flag就非常easy画,仅仅有一个五角星!



但是美帝的星条旗,据说50个州“每周一星”,难度似乎应该更高? 长处是它的50星仅仅有相对平移木有相对旋转,或者也easy?

1.


  1. 【宽:A=1.0;长:B=1.9,C=0.5385(7/13,7条间纹的阔度)D=0.76(1.9×2/5,B的2/5)E=F=0.0538(C/10)G=H=0.0633(D/12)星的直径:K=0.0616条纹的宽度:L=0.0769(1/13)】

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

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

    Jay Chan 用 C 语言写的一个迷你版 2048 游戏,仅仅有 487 个字符. 来围观吧 M[16],X=16,W,k;main(){T(system("stty cbreak&qu ...

  2. Java中文字符处理的四大迷题

    虽然计算机对英文字符的支持非常不错,我们也恨不得写的程序只会处理英文的数据,但是昨为中国人,无可避免地要处理一些中文字符.当很简单的一件事情,遇到了中文,一切就不同了!本文就会讲述实际生产环境中遇到的 ...

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

    统计字符 题目链接 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem D ...

  4. bfs初学

    BFS: ** 当知道初始和目标状态的,用双向BFS: 无权图最好用BFS 不用重复如队** 实现框架: 抄来的(来源:https://www.luogu.org/blog/stephen2333/s ...

  5. [No0000137]字符编码详解

    摘要 本文主要介绍了字符编码的基础知识,以及常见的字符编码类型,比如ASCII,Unicode,UTF-8,ISO 8859等,以及各种编码之间的关系,同时专门解释了中文字符相关的编码标准,包括GB2 ...

  6. 1 byte 8 bit 1 sh 1 bit 2. 字符与编码在程序中的实现

    https://en.wikipedia.org/wiki/Shannon_(unit) 1字节(英语:Byte)=8比特(英语:bit) The shannon (symbol Sh), also ...

  7. java中的字符,字节和编码

    1. 编码问题的由来,相关概念的理解 1.1 字符与编码的发展 从计算机对多国语言的支持角度看,大致可以分为三个阶段:   系统内码 说明 系统 阶段一 ASCII 计算机刚开始只支持英语,其它语言不 ...

  8. 【VS开发】字符,字节和编码

    字符,字节和编码 [原创文章,转载请保留或注明出处:http://www.regexlab.com/zh/encoding.htm] 级别:中级 摘要:本文介绍了字符与编码的发展过程,相关概念的正确理 ...

  9. 编码占用的字节数 1 byte 8 bit 1 sh 1 bit 中文字符编码 2. 字符与编码在程序中的实现 变长编码 Unicode UTF-8 转换 在网络上传输 保存到磁盘上 bytes

    小结: 1.UNICODE 字符集编码的标准有很多种,比如:UTF-8, UTF-7, UTF-16, UnicodeLittle, UnicodeBig 等: 2 服务器->网页 utf-8 ...

随机推荐

  1. CRF模型

    CRF的全称是Conditional Random Fields,由CMU教授John Lafferty 提出,原文标题:Conditional R andom Fields: Probabilist ...

  2. Determining IP information for eth0... failed; no link present. Check cable?

    在RedHat下重启网络,service network restart之后,出现问题 Determining IP information for eth0... failed; no link p ...

  3. Python 批量创建同文件名的特定后缀文件

    看了很多批量创建文件和文件批量格式转换的code,感觉杀鸡焉用牛刀,自己写了几行轻量级的拿来给大家参考: 在out_dir目录下批量创建与in_dir目录下同文件名但后缀不同的文件. in_dir = ...

  4. IE 兼容性写法

    1. 条件注释语句 <!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]--> <!--[if IE]> 所有的IE ...

  5. 正整数N是否是素数

    来自:[数据结构与算法分析——C语言描述]练习2.13 问题描述: a. 编写一个程序来确定正整数N是否是素数. b. 你的程序在最坏的情形下的运行时间是多少(用N表示)? c. 令B等于N的二进制表 ...

  6. uber优步提高成单率,轻松拿奖励!

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  7. 杭电ACM减花布条

    这是原题的地址 http://acm.hdu.edu.cn/showproblem.php?pid=2087 Problem Description 一块花布条,里面有些图案,另有一块直接可用的小饰条 ...

  8. C++ 中vector的基本用法

    //在网上看了好久,自己总结了一下下,第一篇博客,呼呼,学到不少 基本概念 vector容器是一个模板类,可以存放任何类型的对象).vector对象可以在运行时高效地添加元素,并且vector中元素是 ...

  9. java 常用concurrent类

    1.CountDownLatch 它的作用主要是当多个(数量等于初始化CountDownLatch时count参数的值)线程到达了预期状态或完成预期工作时触发事件,其他线程可以等待这个事件来触发自己后 ...

  10. 对比AMD 890、AMD 880、 AMD 790、AMD 785、 AMD 780、AMD 7

    770无集显.中低端独显主流. 780G带集显.现在可以无视. 785G现在是带集显的主流. 790GX高端带集显. 790FX专高端,无集显. 790X带集显.基本无视. 870 大板,无集显 88 ...