Get Time
long_comps_topcoder  Problem Statement
Contest: ISS Longeron Challenge
Problem: ISS

Problem Statement


Last modified: 10:00 AM, January 25, 2013.

The goal of the challenge is to position the solar collectors on the International Space Station to generate as much power as possible during the most difficult orbital configurations. The solar collectors are arranged in two groups, one on the port side of the station and one on the starboard side. Each of these two groups is rotated by a "Solar Alpha Rotary Joint" (SARJ). Thus there is a port-SARJ and a starboard-SARJ. On each of the two sides, there are 4 "Solar Array Wings" (SAW) which consist of 2 solar blankets (which collect the solar energy) and supporting structures. Each of the SAWs is rotated by its own "Beta Gimbal Assembly" (BGA). Your solution must provide the angular position and velocity of these 10 rotary joints at each of 92 time steps. In addition, you are allowed to adjust the orientation of the entire station by a small amount (yaw of 0 to 7 degrees, inclusive), which is constant for the entire orbit. In addition to maximizing the total power output there are some constraints on the possible movements. See the constraints section below for the full list.

Figure 1. International Space Station Rotating Parts.

You are provided with a tester/visualizer for running your solutions locally (on your own computer). In addition to running solutions, the tester/visualizer can be called from your code to evaluate shadowing and power generation for arbitrary configurations. The tester/visualizer can also produce images and animations of our ISS model, with shadows, to help you understand how the orientation angles work and to show how the shadows affect the performance of your solution.


1 Competition Overview

Please note that this event is being run for a TopCoder customer. By winning a prize in this event you agree to transfer ownership of your submission to TopCoder.

This is a summary with highlights of the contest details. Please make sure to read all of the rules carefully before competing.

You must be eligible to compete in the match as defined in the rules.

This Marathon Match is a money match that has a $30,000 prize purse! The top ten highest scorers will receive prizes with the first place winner receiving $10,000!

In TopCoder Marathon Match events, the system will be testing submissions for optimization according to the scoring criteria outlined in the problem statement that is associated with this event (this document). Each event may have a different scoring mechanism. Competitors will have to understand the scoring mechanism in order to effectively compete. Participants may submit code written in one of the following languages: Java, C++, C#.NET, VB.NET, or Python.

Once the submission phase of a Marathon Match has ended, final testing will run and may take several days to complete. Upon completion of final testing, the final results will become available in the Marathon Match Archive on the web site. Competitors will be able to see the test case details, other competitors' submissions, and all final results. For rated events, the ratings will be adjusted once results are final.

For more details on the Marathon Match format, click here.


2 Prizes

There is a total $30,000 USD cash prize purse for this contest, 100 T-shirts, 5 stickers that have flown in space and 5 letters of recommendation. $25,000 USD is allocated for the final prizes and $5,000 are allocated for milestone prizes. The contestants with the 10 highest final scores will be awarded the following prizes.

Final Prizes
1st place $10,000 USD
2nd place  $5,000 USD
3rd place  $3,000 USD
4th place  $1,750 USD
5th place  $1,500 USD
6th place  $1,250 USD
7th place  $1,000 USD
8th place    $750 USD
9th place    $500 USD
10th place   $250 USD

One week after the start of the contests the first set of milestone prizes will be selected. The contestants with the top 4 highest provisional scores (on the leader board) at that time will receive the prizes listed below. Then two weeks after the start of the contest, the second set of milestone prizes will be selected for the contestants with the 4 highest provisional scores at that time.

Milestone Prizes
Week 1 (Jan 23, 13:00 EST)   Week 2 (Jan 30, 13:00EST)
1st place    $1000 USD       1st place    $1000 USD
2nd place     $750 USD       2nd place     $750 USD
3rd place     $500 USD       3rd place     $500 USD
4th place     $250 USD       4th place     $250 USD

Each of the contestants with one of the top 100 final non-zero scores will win an NTL ISS Longeron T-shirt.

There will also be final bonus prizes for the top 5 finishers. They will receive stickers from NASA which have actually orbited the Earth. These stickers were flown on Space Shuttle Endeavour, on mission STS-134, May 16, 2011. TopCoder will also provide letters of recommendation for the contestants with the top 5 highest final scores describing their achievement. These could be used to aid your job search, for applying for entry into a school or even for your astronaut application.

If there are ties for any of the non-cash prizes, the tie will be broken by selecting the earliest submissions. In the event of a tie for a cash prize, the associated prize money will be divided evenly between the tied contestants.

Before the contest, this problem was extensively tested by an experienced marathon competitor (but for a shorter time period than the actual contest). The tester's pre-contest solution will be submitted at the start of the contest (using the handle "mm_tester") and will not be modified throughout the contest. This will make the tester's provisional score visible throughout the match. The tester will be eligible for the final prizes based on his initial submission, but the tester is not eligible for the milestone prizes. The tester's identity will not be revealed until the contest is over.

Registration and Submissions Opens:  January 16, 2013 13:00 EST
1st Milestone:                       January 23, 2013 13:00 EST
2nd Milestone:                       January 30, 2013 13:00 EST
Registration and Submissions Closes: February 6, 2013 13:00 EST


3 ISS Details

3.1 ISS Model

The ISS local coordinate system has the y axis along the longest dimension of the station. +y is starboard and -y is port. The x-axis is along the second longest dimension, with +x and -x as shown in the figure below. The +x direction is the direction of motion. The narrowest dimension of the station is in the z direction, with +z being the side of the station that usually faces the Earth. This is a right handed coordinate system. This orientation of the ISS with +z down and +x forward is called +xvv (+x velocity vector).

The units in the ISS local coordinate system are millimeters. The dimensions and positions of the various components in our simplified CAD model of the ISS are speified in this coordinate system. Two versions of the CAD model are available. The file ISS_simple.model contains the actual model used by the tester which consists of cylinders and polygons (this format is not directly compatible with any known CAD system, but is in plain text and reasonably readable if you want to look up any specific coordinates). This file is necessary to run the local tester. The file ISS_simple.stl contains an all-triangle version of the same data which can be read by most CAD systems.

Figure 2 below shows the ISS local coordinate system, the names of each rotary joint and SAW, the directions of positive rotation, the angular values at the given positions, the rotatable radiators, port and starboard directions, the direction of motion and the approximate position of the sun at positive and negative beta angles. All axes of rotation and rectangular components are aligned with the coordinate axes in this configuration and the side of each SAW that collects solar energy is facing up.

Figure 2. ISS Rotation Detail

You specify the movement of each SARJ and BGA axis independently. There are limits to the maximum velocity and acceleration of each type of joint (see the constraints section). The acceleration required to transition from one minute to the next does not have to be constant over the minute, as long as there exists a way to make the transition while the maximum acceleration and velocity limits are not exceeded at any time throughout the minute.


3.2 Orbit and Apparent Sun Position

For this problem, we will assume a simplified orbital model. The Sun and Earth do not move, the ISS orbits at a constant altitude and constant speed and the period of the orbit is exactly 92 minutes. At the orbital inclinations and altitudes we are using, the ISS never enters the shadow of the Earth.

Rather than floating freely in space, the orientation of the ISS is carefully controlled throughout each orbit. The "bottom" side of the ISS is kept facing toward the center of the Earth (much like an aircraft flying around a great circle keeps its bottom towards the Earth). What could be called the "front" side of the ISS is always kept facing in the direction of motion (much like the nose of the aircraft). If you looked out of a side window of the aircraft for a whole orbit, the sun would appear to move in a circle, relative to the aircraft. We can thus set up a (rotating) coordinate system in which the ISS remains fixed, and all coordinates and directions are specified in the reference frame of a viewer on the ISS. This is the ISS local coordinate system described above.

Figure 3. Sun Angles from the ISS

In this coordinate system, the apparent position of the sun, as viewed from the ISS, is illustrated above in figure 3. Imagining a large sphere around the ISS, the apparent path of the Sun will be on a circle on this sphere. The size and location of the circle are determined by the beta angle (the beta angle is the angle between the plane of the orbit and a vector to the Sun). Positive beta angles put the circle centered somewhere on the negative y axis. Negative beta angles put the circle centered somewhere on the positive y axis. The angular radius of this circle is 90-abs(beta). The alpha angle determines the apparent position of the Sun on this circle, starting from the -z axis. The alpha angle measures how far the ISS is through its orbit (0 degrees = 0 minutes, 90 degrees = 23 minutes, etc.)

The above description is complete when the yaw angle is zero. When the yaw angle is small and positive, the ISS is rotated a small amount about the z axis, in the direction of the arrow. From the perspective of the ISS, the center of the circle is then rotated a small amount about the z axis, in the opposite direction.

Combing all the angles to provide a unit vector in the direction of the sun (in the ISS local coordinate system) gives:

to_sunx = cos(beta)sin(alpha)cos(yaw) - sin(beta)sin(yaw)

to_suny = -cos(beta)sin(alpha)sin(yaw) - sin(beta)cos(yaw)

to_sunz = -cos(beta) cos(alpha)


3.3 SAWs

When the rotation axes of the SAWs are set to the values shown the the figure above, the sides of the SAWs which generate power are facing up (in the -z direction). For the purposes of this problem, when the opposite sides of the SAWs face the sun, no power is generated.

Each SAW consists of a central mast with four longerons (see longeron section below), two lower arms, two upper arms and two solar blankets. The solar blankets are held between an upper arm and a lower arm. The cross section diagram through the middle of a SAW is shown below. From that we can see that the plane of the solar blankets is offset from the axis of rotation, and that the mast containing the longerons is turned about 10 degrees from the plane of the solar blankets. The solar blanket is actually modeled by two polygons. The slightly smaller polygon representing the strings (the colored polygons in the tester/visualizer) is at an offset from the rotation axis of -285mm. A larger polygon representing entire shadow casting surface is at an offset of -282mm from the rotation axis. The offsets are in the upward (-z) direction when the panels are facing up.

Figure 4. SAW Cross Section (not to scale)

Figure 4 shows a cross section of the middle of a SAW. The positions solar blankets are shown by the black lines. The solar collecting side of the SAW faces upward. The blue dots represent the longerons (not to scale, the longerons are actually very small). The black cross is the location of the axis of rotation which is offset from the plane of the solar blankets in the direction away from the sun.

Although it is not obvious from the images, the SAWs are not perfectly aligned in a 2x4 grid. Some pairs of SAWs that look symmetric have small deviations in their y and z coordinates (when SARJ angles are 0). The table below specifies the inter-SAW spacings.

          Y(mm)     Z(mm)
1A to 3B  15063      0
2A to 4B -15069    -67
3A to 1B  15072      5
4A to 2B -15070    -67

The width of the opening between the blankets on a SAW is 1927.51mm.


3.3.1 Solar Blankets and Power Generation

The solar energy collecting part of the solar blankets consists of 41 sections called "strings". Each of the 82 strings (41 per blanket) in a SAW collects power from the sun independently. The power collected by the SAW is the sum of the power collected by each string. The amount of power collected by a string is given below:

Power = (1371.3 watts/meter2) * cos(theta) * (0.1) * (2.56 meter2) * (ShadowFactor)


  • 1371.3 watts/meter2 is the average power available from the sun at our distance from the sun (this is called the solar constant).
  • Theta is the angle between a vector normal to the plane of the string and the vector to the sun.
  • 0.1 is the overall conversion efficiency.
  • 2.56 meters2 is the total area of the cells in one string.
  • ShadowFactor is defined as MAX(0.0 , 1.0 - 5.0 * ShadowFraction) where ShadowFraction is the fraction of the string that is shadowed (1.0 = totally shadowed, 0.0 = totally illuminated). If the angle theta is greater than 90 degrees, then the shadow fraction is 1.0 (note that the shadow fraction is calculated separately for each string). If a string is shadowed 20% or more, it produces no power.

A diagram of a solar blanket is shown below in figure 5. The solar blanket is divided into 43 sections. The two uppermost and lowermost sections (gray-green) are not used for solar energy collection. The middle 41 sections each contain one string. Each string consists of a 2 by 5 array of blocks of solar cells (one string at the top is shown outlined in black and shaded slightly gray). Each block of solar cells is shown as a bright green rectangle. There are gaps between each block of solar cells to accommodate wiring and to allow the solar blankets to be folded. There are also opaque Flexible Cable Connectors (FCC) on both sides of each blanket (yellow-green). The FCCs are modeled as rectangles for this problem. The inner FCC (closest to the mast) is somewhat smaller than the outer FCC on each blanket.

Figure 5. Solar Blanket Plan (not to scale)

Blanket Dimensions:

A: Blanket length 32512.195mm

B: Inner FCC width 133.75mm

C: Outer FCC width 148.5mm

D: Blanket width 4752.25mm

E: Vertical gap width 58.05mm

F: Horizontal gap width 78.33mm

G: String width 756.098mm

H: Block length 800mm

I: Block width 320mm


3.3.2 Longerons

The four long, thin members in each mast are called longerons. When the longerons are exposed to the sun they absorb heat and start to expand, when they are in shadow they lose heat and start to contract. When there are are an odd number of hot longerons and an odd number of cold longerons in the same mast, the forces caused by expansion and contraction are unbalanced. This unbalance causes the structure to be stressed and would eventually lead to failure of the mast. This must be avoided at all cost.

A longeron is considered shadowed if at least 10% of the length of the longeron is shadowed. It is considered illuminated if less than 10% of the length is shadowed. The amount of unbalance in each mast (four longerons) is calculated by the following procedure:

Each mast has a "danger counter," initially set to zero.

For each minute of 21 full orbits:
   If the mast has an odd number of longerons (1 or 3) shadowed, then the counter is incremented.
   Otherwise when an even number of longerons (0, 2 or 4) are shadowed, then the counter is decremented.
   If the counter becomes negative, then it is set to zero.

The maximum allowable value for each danger counter is 20. If any danger counter reaches 21, then your score for that test case will be zero.

As shown in the cross section diagram above (figure 4), the mast containing the longerons is rotated somewhat from the plane of the solar blankets. The exact spacing of the longerons, relative to the axis of rotation varies slightly for each mast. The coordinates of each longeron, relative to its axis of rotation are shown below.

       1A         2A         3A         4A
     Y    Z     Y    Z     Y    Z     Y    Z
1  -181 -502   386 -637   183 -622  -322 -542
2   580 -367  -375 -503  -578 -489   439 -407
3   444  394  -241  258  -446  272   305  354
4  -316  258   520  124   316  139  -456  219
       1B         2B         3B         4B
     Y    Z     Y    Z     Y    Z     Y    Z
1   296 -607  -243 -558  -248 -562   246 -566
2  -464 -473   517 -422   513 -430  -515 -434
3  -330  288   381  339   380  332  -383  327
4   431  154  -379  202  -381  199   378  195


3.4 Radiators

Also visible in figure 2 above are two large rotatable heat radiators (labeled loop A and loop B). The radiators are shown in the zero degrees orientation. When the beta angle is positive the port radiator will be positioned at 45 degrees and the starboard radiator will be positioned at 25 degrees. For negative beta angles the port radiator will, again, be positioned at 45 degrees but the starboard radiator will be positioned at 60 degrees.


4 Implementation

You will need to implement a (public) class ISS that has two (public) methods: getInitialOrientation and getStateAtMinute.

getInitialOrientation takes a single double beta and returns a double. This method will be called once at the beginning of each test case. The parameter beta will contain the beta angle for this test case. Your program should return the yaw angle which you would like to set.

getStateAtMinute will be called 92 times for each test case, with the parameter minute set to the values 0, 1, 2, ..., 91. The alpha angle for that minute will be (360 degrees / 92) * minute. The return value of this method should be a double[] with exactly 20 elements that describe the angular position and the angular velocity of each of the 10 rotation axes of the station at that minute:

  • Element 0 should contain the angular position (in degrees) of the starboard SARJ.
  • Element 1 should contain the angular velocity (in degrees per second) of the starboard SARJ.
  • Element 2 should contain the angular position (in degrees) of the port SARJ.
  • Element 3 should contain the angular velocity (in degrees per second) of the port SARJ.
  • Element 4 should contain the angular position (in degrees) of BGA 1A.
  • Element 5 should contain the angular velocity (in degrees per second) of BGA 1A.
  • Element 6 should contain the angular position (in degrees) of BGA 2A.
  • Element 7 should contain the angular velocity (in degrees per second) of BGA 2A.
  • Element 8 should contain the angular position (in degrees) of BGA 3A.
  • Element 9 should contain the angular velocity (in degrees per second) of BGA 3A.
  • Element 10 should contain the angular position (in degrees) of BGA 4A.
  • Element 11 should contain the angular velocity (in degrees per second) of BGA 4A.
  • Element 12 should contain the angular position (in degrees) of BGA 1B.
  • Element 13 should contain the angular velocity (in degrees per second) of BGA 1B.
  • Element 14 should contain the angular position (in degrees) of BGA 2B.
  • Element 15 should contain the angular velocity (in degrees per second) of BGA 2B.
  • Element 16 should contain the angular position (in degrees) of BGA 3B.
  • Element 17 should contain the angular velocity (in degrees per second) of BGA 3B.
  • Element 18 should contain the angular position (in degrees) of BGA 4B.
  • Element 19 should contain the angular velocity (in degrees per second) of BGA 4B.

You will only specify the positions and velocities at each minute. The tester will evaluate if it is possible to transition to the next minute without violating the maximum velocity and maximum acceleration constraints (see the canMakeTransition method in the tester for details). At minute 0 you can start with any valid position and any valid velocity for each of the 10 joints. But since your answer must be cyclic, you must be able to transition back to your minute 0 state from your minute 91 state without violating any hard constraints.

All velocities are signed numbers. Positive velocity denotes a movement that increases the current angular position. This direction is shown by red arrows at Figure 2 above. Negative velocity denotes a movement that decreases the current angular position.


5 Testing and Scoring

There are two kinds of constraints for your solution, hard constraints and soft constraints. Violating a hard constraint will cause your score to be 0. Violating a soft constraint will reduce your score. For each test case a raw score is calculated. If your solution does not violate any of the hard constrains, crash, exceed the time or memory limits, etc. then your raw score for that test case will be:

raw score = P * min{1.0, 2.0((80.0 - R)/300.0)} / (2M)


P is the sum of the power output of the 8 SAWs, averaged over the entire 92 minute orbit.

R is the maximum of the total amount of rotation applied to each BGA over the entire orbit, in degrees. Note that the amount of rotation in one minute may be larger than the absolute difference of the positions at the start and end of that minute. Note also that in almost all cases there are infinitely many ways to rotate a BGA so that it matches the necessary positions and speeds at the end of each minute. The scoring program will choose the best out of these ways, i.e., the way that minimizes the total amount of rotation.

M is the number of SAWs that did not produce at least their required minimum average power.

Thus your raw score will be your average total power output, possibly reduced by the soft constraints on BGA movement and SAW minimum average power requirement.

All the values of beta that will be used in this contest are listed below to facilitate off-line pre-calculation.

Example test cases: 70, -72

Provisional test cases: 72, 74, -70, -74

System test cases: 71, 73, 75, -71, -73, -75

The example test cases will be evaluated when you do an "example submission". You will be able to see your score and other information for each example test case. You will not be able to see the example scores of any other competitors and you are not allowed to discuss any of your scores while the contest is running.

The provisional test cases will be used to calculate a provisional score which is displayed on the leader board during the contest. The provisional score will be the arithmetic average of the raw scores of each of the provisional test cases. You will not be able to see the individual raw scores of the provisional test cases on the server. The provisional score will also be used to determine the winners of the milestone prizes.

The system test cases will be used to calculate the actual final scores and determine the winners. The final scores are calculated by taking the arithmetic average of the raw scores of each system test case. The final scores will not be known until after the contest is over.


6 Local Tester/Visualizer

A local tester/visualizer is provided to help you produce your solutions. In addition to calling your solution, calculating your score and possibly producing a visualization, the local tester also provides an additional (unnamed) library method that you can use to evaluate arbitrary positions. This method takes 13 angles as input parameters (alpha, beta, yaw, 2 SARJs and 8 BGAs) and calculates the following 696 values as output (in this order):

  • The cosine of angle between the blanket normal and the vector to the sun for each SAW (8 values)
  • The shadow fraction of each string (8 SAWs x 2 blankets x 41 strings = 656 values)
  • The shadow fraction of each longeron (8 SAWs x 4 longerons = 32 values)

See the Tester/Visualizer documentation for more details.

You can call this library method with any angles, in any sequence, any number of times, while local testing. Constraints will not be checked. This method will not be available to submitted solutions running on the TopCoder servers. Submitted solutions must produce answers based only on beta and minute.


7 Additional Rules

A more complete description of the rules is contained in the agreement you accepted to participate in this contest. Here we summarize some important points.

  • A forum is provided for questions about the problem statement, rules and the mechanics of participating in a marathon match (e.g. how to register and submit, etc.). It is not to be used to discuss or ask about any aspects of solutions while the contest is running. READ ALL THE FORUM POSTS BEFORE POSTING.
  • This is a competition between individuals. No form of cooperation is allowed, neither between competitors nor between competitors and non-competitors, while the contest is running.
  • Discussion of any possible solution techniques (even to say they do not apply) are not allowed while the contest is running.
  • Any discussion about some analysis or observations, etc. about the problem, no matter how trivial, are not allowed while the contest is running.
  • Any discussion of scores or run-times, etc. are not allowed during the contest.
  • Posting any source code is not allowed during the contest, no matter how trivial.
  • Making any such information publicly available (e.g. blogging, etc.) during the contest is not allowed.
  • Asking questions in the forum which might give hints to competitors are not allowed while the contest is running (e.g. "can I use this software package or algorithm or programming technique?").
  • Asking for debugging help or programming help (e.g. "how do I do this in java?", "why does my solution crash here?" etc.) is not allowed during the contest. If you think you have discovered a bug in the tester/visualizer or the TopCoder system, email

If you must ask any question that is potentially a rule violation when posted in the forum, then instead, email the question to

Violation of these rules can result in your disqualification in this contest and possible suspension of TopCoder membership.


You can completely solve the task online at our testing servers, although the above mentioned library method will not be available. However, since the task has completely known input data, it is also possible to solve the task offline, at your home computer, and then plug in the result into the code submitted for evaluation at our servers.

Any code that you use in this contest must be written entirely by you, with the following exceptions and qualifications:

1, You can include source code that is open source licensed in your submission provided that it is clearly identified in your code. Any OSI-approved licenses are allowed as listed here. However, your submission will consist of one file. No non-standard include files or libraries will be available to code compiled and run on the TopCoder servers.

2, In any off-line code you write, you can use any source code that is open source licensed as described above. You can also use any non-modified complete programs, such as compilers or application programs (writing plug-ins for programs that support then is allowed). Your off-line code can be in any programming language and you can use any computer hardware for your off-line calculations. You can use off-line code to generate data (e.g., algorithm parameters or complete solutions) used or included in your submission, but you must provide any code that you used to generate the data along with an explanation of how you generated the data if you are selected as the winner.

3, The version of open source code or non-modified complete programs used must have been available before the start of the contest.

4, All off-line code used by the competitors must be a) released under a license which is compatible with it to being used in this competition, or b) specifically licensed to the competitor in a manner that is consistent with it being used in this competition.

5, You can use any parts of the code in the supplied tester visualizer (


8 Special conditions

In order to receive the prize money, you will need to submit a document explaining how your solution works. If you solved the task offline, meaning that your submission includes parameters, constants, or data generated off-line or prior to running your program, you will need to document the entire process you used to find the answers you submitted. That should include all code, scripts, and data you used in this process. Note that this information should not be submitted anywhere during the coding phase. Instead, if you win a prize, a TopCoder representative will contact you directly in order to collect this data. You will need to submit all the required information within 7 days after the contest results are published. Questions sent by email from TopCoder requesting clarification to this document must be answered within 3 days. If the document or a response to a clarification request is not received, TopCoder reserves the right to disqualify the submission.



Method signature:double getInitialOrientation(double beta)
Method signature:double[] getStateAtMinute(int minute)
(be sure your methods are public)


-The time limit is 60 seconds per test case, this includes only the time spent within your methods. The memory limit is 1024MB.
-All angles are expressed in degrees.
-Although return values specifying angles are constrainted to be 0 <= X < 360 degrees, a rotation from 359.5 degrees to 0.5 degrees is a positive rotation of 1.0 degrees, etc.


-Violation of hard constraints results in a score of 0. Violation of soft constraints results in a smaller score.
-(Hard) Each of the SARJ and BGA angles, a, in your return must satisfy 0 <= a < 360
-(Hard) The maximum absolute value of SARJ velocity = 0.15 degrees/second
-(Hard)The maximum absolute value of SARJ acceleration = 0.005 degrees/second^2
-(Hard)The maximum absolute value of BGA velocity = 0.25 degrees/second
-(Hard)The maximum absolute value of BGA acceleration = 0.01 degrees/second^2
-(Hard)The positions and velocities at time step t must be achievable from time step t-1 without violating the above constraints (for t in 1 to 91, inclusive)
-(Hard) The positions and velocities at time step 0 must be achievable from time step 91 without violating the above constrains
-(Soft) The minimum unpenalized average power for SAW 1A = 6.3 kilowatts
-(Soft) The minimum unpenalized average power for SAW 2A = 6.4 kilowatts
-(Soft) The minimum unpenalized average power for SAW 3A = 6.7 kilowatts
-(Soft) The minimum unpenalized average power for SAW 4A = 8.9 kilowatts
-(Soft) The minimum unpenalized average power for SAW 1B = 5.5 kilowatts
-(Soft) The minimum unpenalized average power for SAW 2B = 8.1 kilowatts
-(Soft) The minimum unpenalized average power for SAW 3B = 4.4 kilowatts
-(Soft) The minimum unpenalized average power for SAW 4B = 4.3 kilowatts
-(Hard) The maximum allowable longeron "danger count" = 20 minutes (over repeated orbits)
-(Hard) The yaw angle must be between 0.0 and 7.0, inclusive.
-(Soft) The maximum unpenalized amount of rotation for each BGA is 80 degrees per orbit.
-beta will be one of 70,71,72,73,74,75,-70,-71,-72,-73,-74 or -75
-minute will be from 0 to 91, inclusive.


Beta angle = 70 degrees
Beta angle = 71 degrees
Beta angle = 73 degrees
Beta angle = 75 degrees
Beta angle = -71 degrees
Beta angle = -72 degrees
Beta angle = -73 degrees
Beta angle = -75 degrees

This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c)2010, TopCoder, Inc. All rights reserved.