CCC 2004 Answers to J5
Author 
Message 
kythoon

Posted: Mon Mar 01, 2004 2:06 pm Post subject: CCC 2004 Answers to J5 


Hey, wonder if any of you remember me?
But that is beside the point, does anyone have the answer to the J5 for this year?
Thanks






Sponsor Sponsor



zylum

Posted: Mon Mar 01, 2004 3:53 pm Post subject: (No subject) 


i did the denior one but can you post the question? i want to see if i could solve it...






kythoon

Posted: Mon Mar 01, 2004 7:07 pm Post subject: (No subject) 


sorry, i dont have the question sheet any more, and it is not on the internet.
It was about factals though, it was just hard understanding was was being asked






Brightguy

Posted: Tue Mar 02, 2004 9:28 pm Post subject: Re: CCC 2004 Answers to J5 


I wrote the senior portion, but I decided to take a look at this question because there were a lot of people talking about it and nobody had posted a solution.
It sure was an interesting problem... It actually took me a while to understand what they meant. I think they could have worded it a lot better...
Anyway, I have a working solution, which I wrote in Visual Basic. In the attachment I'll include the basic source code which will load the data from a file (should be in same directory). As well, I'll include a compiled .exe where you can just input the variables into text boxes, and it'll even output a simple picture of the fractal.
Sorry, but I didn't comment the source... if you have any questions you'll have to ask me. Basically, the main code is the Fractal procedure, which takes a line and splits it into five new smaller lines, each 1/3 of the original line's length.
Remember when testing inputs the width of the fractal should always be a power of 3 (27 and 81 work best).
Description: 

Download 
Filename: 
J5  2004.zip 
Filesize: 
5.5 KB 
Downloaded: 
238 Time(s) 






zylum

Posted: Tue Mar 02, 2004 9:31 pm Post subject: (No subject) 


can someone please post the questoin for J5??? i dont have access to the junior questions and its not online...
zylum






Brightguy

Posted: Tue Mar 02, 2004 9:48 pm Post subject: Re: CCC 2004 Answers to J5 


Problem J5: Fractals
A fractal is a geometric shape where the pattern of the whole shape is selfreplicating at each subsection of the shape. A simple "block fractal" is shown below. At each stage of the fractal growth, every straight line in the fractal is divided into three parts. The first and last sections stay straight; the middle section contains a square "bump" which has the same height as the width of the middle section. (You will want to consider the four orientations of a line segment within the fractal. Depending upon which line segment is currently being generated, the bump may protrude up, down, left, or right.)
Write a program that will keep track of the integer points of the lines in a similar "block fractal" with its bottom left corner at (0,1). The program will accept three integers as input: the level of the fractal, the width of the fractal, and an xcoordinate. You may assume that the width of the fractal will be some power of three, and that it will be large enough so that every corner of the fractal will fall on an integer intersection in the Cartesian plane. The width will never be more than 81. The xcoordinate, x, will be in the range of 0  width (inclusive). Your program should output the ycoordinate value(s), y, where the lines of the fractal intersect the point (x,y).
That's the main important stuff...






zylum

Posted: Tue Mar 02, 2004 10:03 pm Post subject: (No subject) 


thanks






TheZsterBunny

Posted: Sat Mar 06, 2004 6:44 pm Post subject: (No subject) 


I was one of the people marking the CCCs at school, and I have a statistic for you:
of the 40 people writing the Junior CCC this year, one person got 3 marks on the fifth question by hardcoding the answers into the source.
Scary.
bunny
edit
In Turing. sorry, forgot to say that.
bunny






bugzpodder

Posted: Mon Mar 08, 2004 9:46 am Post subject: (No subject) 


code:  #include<iostream>
#include<vector>
using namespace std;
struct Point{
public:
Point (int _x=0, int _y=0){x=_x;y=_y;}
int x,y;
bool operator <(Point p){
return (x<p.x(x==p.x && y<p.y));
}
};
struct Segment{
public:
Segment(Point _p1=Point(0,0),Point _p2=Point(0,0),int _dir=1){if (_p2<_p1) swap(_p1,_p2);p1=_p1;p2=_p2;dir=_dir;}
int d(){if(p1.y==p2.y) return 1; return 1;}
int len(){ if (d()==1) return p2.xp1.x; return p2.yp1.y;}
Point p1,p2;
int dir;
};
bool ret[100];
int main(){
int lvl,wid,x,i,ii;
cin>>lvl>>wid>>x;
vector<Segment> arr(1,Segment(Point(0,1),Point(wid,1),1));
Segment s;
Point p1,p2,p3,p4;
for (ii=1;ii<=lvl;ii++){
for (i=arr.size()1;i>=0;i){
s=arr[i];
arr.erase(arr.begin()+i,arr.begin()+i+1);
if (s.d()==1){
p1=Point(s.p1.x+s.len()/3,s.p1.y);
p2=Point(s.p1.x+s.len()/3,s.p1.y+s.dir*s.len()/3);
p3=Point(s.p1.x+2*s.len()/3,s.p1.y+s.dir*s.len()/3);
p4=Point(s.p1.x+2*s.len()/3,s.p1.y);
}
else{
p1=Point(s.p1.x,s.p1.y+s.len()/3);
p2=Point(s.p1.x+s.dir*s.len()/3,s.p1.y+s.len()/3);
p3=Point(s.p1.x+s.dir*s.len()/3,s.p1.y+2*s.len()/3);
p4=Point(s.p1.x,s.p1.y+2*s.len()/3);
}
arr.push_back(Segment(s.p1,p1,s.dir));
arr.push_back(Segment(p1,p2,1));
arr.push_back(Segment(p2,p3,s.dir));
arr.push_back(Segment(p3,p4,1));
arr.push_back(Segment(p4,s.p2,s.dir));
}
}
for (ii=0;ii<arr.size();ii++){
if (arr[ii].p1.x==arr[ii].p2.x && arr[ii].p1.x==x)
for (i=arr[ii].p1.y;i<=arr[ii].p2.y;i++)
ret[i]=true;
else if (arr[ii].p1.x<=x && x<=arr[ii].p2.x)
ret[arr[ii].p1.y]=true;
}
for (i=0;i<=81;i++)
if (ret[i])
cout<<i<<" ";
cout<<endl;
return 0;
}








