Project Euler 103
@see http://projecteuler.net/index.php?section=problems&id=103
♥0 |
Line 142 |
Modified 2009-07-11 18:20:42 |
MIT License
archived:2017-03-30 04:55:38
ActionScript3 source code
/**
* Copyright uwi ( http://wonderfl.net/user/uwi )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/dIhn
*/
package {
import flash.display.Sprite;
import flash.text.TextField;
import flash.utils.getTimer;
// @see http://projecteuler.net/index.php?section=problems&id=103
public class Euler103 extends Sprite {
private var _tf : TextField;
public function Euler103() {
_tf = new TextField();
_tf.width = 465;
_tf.height = 465;
addChild(_tf);
var s : int = getTimer();
_tf.appendText(solve().toString() + "\n");
var g : int = getTimer();
_tf.appendText((g - s).toString() + " ms\n");
}
private function choose3() : Array
{
var ret : Array = [];
var a : Array = new Array(3)
var b : Array = new Array(3);
var used : int = 0;
for(a[0] = 0;a[0] <= 6;a[0]++){
used |= 1 << a[0];
for(a[1] = 0;a[1] <= 6;a[1]++){
if((used & (1 << a[1])) != 0)continue;
if(a[0] > a[1])continue;
used |= 1 << a[1];
for(a[2] = 0;a[2] <= 6;a[2]++){
if((used & (1 << a[2])) != 0)continue;
if(a[1] > a[2])continue;
used |= 1 << a[2];
for(b[0] = 0;b[0] <= 6;b[0]++){
if((used & (1 << b[0])) != 0)continue;
if(a[0] > b[0])continue;
used |= 1 << b[0];
for(b[1] = 0;b[1] <= 6;b[1]++){
if((used & (1 << b[1])) != 0)continue;
if(b[0] > b[1])continue;
used |= 1 << b[1];
for(b[2] = 0;b[2] <= 6;b[2]++){
if((used & (1 << b[2])) != 0)continue;
if(b[1] > b[2])continue;
if(a[0] < b[0] && a[1] < b[1] && a[2] < b[2])continue;
ret.push([a[0], a[1], a[2], b[0], b[1], b[2]]);
// _tf.appendText(a + "\t" + b + "\n");
}
used ^= 1 << b[1];
}
used ^= 1 << b[0];
}
used ^= 1 << a[2];
}
used ^= 1 << a[1];
}
used ^= 1 << a[0];
}
return ret;
}
private function choose2() : Array
{
var ret : Array = [];
var a : Array = new Array(2);
var b : Array = new Array(2);
var used : int = 0;
for(a[0] = 0;a[0] <= 6;a[0]++){
used |= 1 << a[0];
for(a[1] = 0;a[1] <= 6;a[1]++){
if((used & (1 << a[1])) != 0)continue;
if(a[0] > a[1])continue;
used |= 1 << a[1];
for(b[0] = 0;b[0] <= 6;b[0]++){
if((used & (1 << b[0])) != 0)continue;
if(a[0] > b[0])continue;
used |= 1 << b[0];
for(b[1] = 0;b[1] <= 6;b[1]++){
if((used & (1 << b[1])) != 0)continue;
if(b[0] > b[1])continue;
if(a[0] < b[0] && a[1] < b[1])continue;
ret.push([a[0], a[1], b[0], b[1]]);
// _tf.appendText(a + "\t" + b + "\n");
}
used ^= 1 << b[0];
}
used ^= 1 << a[1];
}
used ^= 1 << a[0];
}
return ret;
}
private function solve() : int
{
var c2s : Array = choose2();
var c3s : Array = choose3();
var min : int = 999;
var a : Array = new Array(7);
var s : int = 0;
for(a[0] = 11;a[0] <= 35;a[0]++){ s+= a[0];
for(a[1] = a[0] + 1;a[1] < 50;a[1]++){ s += a[1];
for(a[2] = a[1] + 1;a[2] < a[0] + a[1];a[2]++){ s += a[2];
for(a[3] = a[2] + 1;a[3] < a[0] + a[1];a[3]++){ s += a[3];
for(a[4] = a[3] + 1;a[4] < a[0] + a[1];a[4]++){ s += a[4]; if(s >= min){s -= a[4]; break;}
for(a[5] = a[4] + 1;a[5] < a[0] + a[1];a[5]++){ s += a[5]; if(s >= min){s -= a[5]; break;}
for(a[6] = a[5] + 1;a[6] < a[0] + a[1];a[6]++){ s += a[6]; if(s >= min){s -= a[6]; break;}
var invalid : Boolean = false;
for each(var c2 : Array in c2s){
if(a[c2[0]] + a[c2[1]] == a[c2[2]] + a[c2[3]]){
invalid = true;
break;
}
}
if(invalid){
s -= a[6];
continue;
}
for each(var c3 : Array in c3s){
if(a[c3[0]] + a[c3[1]] + a[c3[2]] == a[c3[3]] + a[c3[4]] + a[c3[5]]){
invalid = true;
break;
}
}
if(invalid){
s -= a[6];
continue;
}
/*
if(a[0] + a[1] + a[2] <= a[5] + a[6]){
s -= a[6];
continue;
}
*/
if(a[0] + a[1] + a[2] + a[3] <= a[4] + a[5] + a[6]){
s -= a[6];
break;
}
_tf.appendText("" + a + "\t" + s + "\n");
if(min > s)min = s;
s -= a[6]; }
s -= a[5]; }
s -= a[4]; }
s -= a[3]; }
s -= a[2]; }
s -= a[1]; }
s -= a[0];
if(s != 0){_tf.appendText("(ノ∀`)"); break;}
}
return min;
}
}
}