Posts for Tub


Tub
Experienced Forum User
Joined: 6/25/2005
Posts: 1377
In any case, keep the 12x2 together. An older standard only required 10x2, which was extended by 2x2 more. All current computers I know require 12x2, not sure why new PSUs still have those splittable. If you look at the mobo-page, those 2x2 deliver +12, +5, +3.3 and ground. If you jam them into the CPU power connector, baaad things will happen. About the CPU connector: each 12V line can only supply a defined amount of power. If you have a hungry CPU, you will need 4 lines. Low-end CPUs will be happy with just two (both my 65W Athlon and my fusion box only have a 2x2 connector). Conversely, only high-wattage-PSUs will provide a 4-line connector, because a low-end-PSU couldn't supply enough power to satisfy the standards. My guess is that your motherboard supports a wide range of CPUs and must provide a 4-line connector for the highend-ones. Low- to midrange-CPUs should work fine with a 2-line connector. But I can't tell you whether your mobo actually handles that case gracefully (i.e. whether it's a supported configuration), so don't blame me if your fridge blows up.
m00
Tub
Experienced Forum User
Joined: 6/25/2005
Posts: 1377
I do like how the votes only add up to 99%. The other 1% of votes are afraid of Nach and don't dare to show their faces. With Shinryuu's helmet, you can see the inside of the helmet at the lower left. With Bisqwit's helmet you can't, even though the shadow suggests a position of the light source that would clearly illuminate the inside of the helmet. The only explanation is that the helmet is not just an empty helmet, but it contains a dark shadow within. Every time I view that helmet, I expect a pair of red eyes to show up. I've never seen them, but I know there's something dark inside. Lurking. Watching. Probably humming the Tetris music. Bisqwit wins!
m00
Tub
Experienced Forum User
Joined: 6/25/2005
Posts: 1377
Ahh, nice. The immediate improvement is that the new algorithm will prefer low-contrast screenshots to fill in unicolor-areas, removing a lot of noise from the mosaic. Didn't think of that :) There seem to be a few places where the algorithm picked structured screenshots to emulate image structure, but that's barely visible in this example.
m00
Tub
Experienced Forum User
Joined: 6/25/2005
Posts: 1377
You will get much better results if you don't just compare the average color of "mosaic window" & tile screenshot, but consider image structure. A mosaic window that looks like
######
#####.
####..
###...
##....
#.....
is better approximated by a screenshot with diagonal features than something that averages to gray. You can simply scale the screenshots to match the resolution of the mosaic window, then compare differences for each pixel. Sum up the errors (or squared errors) of each pixel and pick the best tile. Since this is computationally expensive, it may be wise to use your averaging method as a first step to filter out any screenshots that are way off, then use pixel-perfect matching on the best fits to determine the winner. Further improvements can be made by disallowing repeating screenshots. That's easy to code, but obviously needs a larger library of screenshots to work. (of course there are plenty of pre-made programs that can already do this, but where's the fun in that? ;))
m00
Tub
Experienced Forum User
Joined: 6/25/2005
Posts: 1377
Is that supposed to manipulate the enemy's card deck in a card battle, i.e. force them to play their rare cards at the earliest frame possible? /edit: ok, let me ask a slightly less stupid question: are you just using it to manipulate the earliest frame where your rare card is available, or do you think you can speed up the battle by forcing a different pattern? Minimizing the amount of card-flip-animations, minimizing CPU's thinking time, minimizing cursor movements for your own move? Is any of that going to help?
m00
Tub
Experienced Forum User
Joined: 6/25/2005
Posts: 1377
y-cables are nonstandard, if your motherboard supports them you could expect a) that the feature is documented / advertised b) that a suitable y-cable is either included or available directly from the mobo-vendor, because they aren't standardized either. You could check whether Pin 6 carries any voltage (if you have the equipment). Otherwise you just may have to buy the cable and try.
m00
Tub
Experienced Forum User
Joined: 6/25/2005
Posts: 1377
The End saves 30 seconds against Diablo. Should it be used anywhere else? Any other limit break executes faster, so it's only useful if you'd need several attacks otherwise. Remaining Bosses on Disc 1 that can be fought with Selphie: - President Deling -> Elixir (The End doesn't work against the undead, anyway) Disc two: - Robot after the missile base -> Irvine is fast enough - Raijin, then Fujin and Raijin -> wimps. - Seifer, again -> on par with his groupies. - Edea -> should be treated like a lady: renzo. Disc three: - undead something -> elixir - Doc Odine -> Ze doctor iz not your enemy. Bummer. - Fujin and Raijin -> still wimps. - security robot -> scrap metal. no dumbass, that was a renzo! Disc four: - Adel with Rinoa-Breastplate: surprisingly, Rinoa would survive that (remember, The End doesn't work against the undead!). It's slower though. - Several Adel-forms: unless you can skip some forms with The End, it's way too slow. - Ultimecia's guard dog: no limits available - Ultimecia: hmm.. maybe against the second or the last form? That would be somewhat anticlimactic..
m00
Tub
Experienced Forum User
Joined: 6/25/2005
Posts: 1377
Though I would have preferred a 100% run, this one is awesome enough as is. Yes vote.
m00
Tub
Experienced Forum User
Joined: 6/25/2005
Posts: 1377
Just deploying a hard drive image is not an option, right? Quick googling suggest that all you need to do is: - create an additional windows partition on the USB stick - copy contents of installation CD over there - add grub entry to your boot partition to boot from windows partition have you tried that?
m00
Tub
Experienced Forum User
Joined: 6/25/2005
Posts: 1377
I remember watching my dad play this game back in the amiga days. The amiga version is much more beautiful, featuring colors AND filled polygons: Though of course there's a slight lack of an emulator for that. Maybe the PC Elite Plus version is worth looking at? Would an "Elite Rank" TAS really be interesting? AFAIK your rank is based entirely on kill count..
m00
Tub
Experienced Forum User
Joined: 6/25/2005
Posts: 1377
so it's just a slight variation of the game henke just linked? Color me unimpressed.
m00
Tub
Experienced Forum User
Joined: 6/25/2005
Posts: 1377
Watch Section 2 part 2 closely. Around the middle, he's entering the menu for a while. What he's doing: - refine Curagas from Tents and Cottages - Card Mod Gayla -> Mystery Fluid -> currently unused, probably for Meltdowns later - Card Mod Forbidden -> Betrayal Sword -> needed later to get a weapon for Squall - Card Mod Diablos -> 100 Black Holes -> 300x Demi -> +36 Mag for everyone - Card Mod Quistis -> 3 Samantha Souls -> 180x Triple -> +70 Str for one char, +56 Str for another - Card Mod Zell -> 3 Hyper Wrists -> 3x STR+60% Thus, Laguna goes from 42 str to 124, Kiros from 51 to 160. Compare the previous battle against a soldier: Laguna does 386 damage. In the battles on the cliff, it's ~1200 while Kiros hits above 2000.
m00
Tub
Experienced Forum User
Joined: 6/25/2005
Posts: 1377
Nice WIP! I like the little things you manage to sneak in when they don't waste time. A few questions though: - it looks like you're setting battle speed to ~75% instead of max. Why is that? - why do you enter the cafe at the end of the X-ATM092 sequence? Is it to avoid the FMV of quistis blasting the tin can? - During the dancing scene, couldn't you manipulate a critical hit when Squall steps on Rhino's feet?
m00
Tub
Experienced Forum User
Joined: 6/25/2005
Posts: 1377
Warp wrote:
However, what happens if x is infinite? How do you create a one-to-one mapping then?
As you noted, it's not going to work by "evenly stretching" the interval. You might intuitively expect that you need an even mapping to preserve densitiy, but since both sets are infinitely dense, that's not required. A simple bijection from ]0;1] to [1;\infty[ is given by f(x) = 1/x. Add a few shift tricks (similar to p4wn3r's) to get a bijection from [0;1] to [0;\infty[. For easy to understand mappings from the unit line to the unit square, see Space filling curves. These are pretty useful in databases when working with multi-dimensional data. For example, you can map your data to the unit line and insert them into a B+-tree - when choosing a good curve, this will preserve most of your data locality. Area queries can thus be answered efficiently by answering a small number of range queries.
m00
Tub
Experienced Forum User
Joined: 6/25/2005
Posts: 1377
ahh, your yearly iteration to claim yet another GBx Award. Voting yes and waiting for 2012.
m00
Tub
Experienced Forum User
Joined: 6/25/2005
Posts: 1377
So far, there seems to be an agreement that this run is very well done. If there was already a category for it, it would certainly be published. We also agree that this run doesn't fit into an existing category and would need it's own. So is the "GT Code" category unique and entertaining enough to replace an existing category? I don't think so. Certainly not the any% or 100% runs. I wouldn't have it obsolete the glitched low% run, either - although it has a long xray sequence, it features a pretty ingenious solution that looks a lot better than a cheat code that's easy to confuse with blatant video editing. So should we allow an additional category for Super Metroid? Why, I love Super Metroid, so don't let me stop you. But there's more valid categories not featured here: RBO, unglitched 14% low%, GT Code, maybe GT Code 100% (ugh) .. if given the choice to add only one of these, I'd say RBO. Second choice would be 14% low%. (AFAIR neither of those has a publishable run at this point, but that's a different matter) FWIW, I think this site needs a good RBO and a good SM Redesign run to suitably cover everything SM related. Still hoping Saturn would submit his redesign run instead of countless runs on questionable categories ;)
m00
Tub
Experienced Forum User
Joined: 6/25/2005
Posts: 1377
I almost suggested getting fire boomerang drops from the skelerangs. Then I remembered you didn't meet any. Sweet run, looks very polished!
m00
Tub
Experienced Forum User
Joined: 6/25/2005
Posts: 1377
It looks bad, it sounds bad and it makes that battle look cheap. Pwning bosses with actual battle tactics looks much better. Please don't reduce the game to cutscenes and pause screens ;)
m00
Tub
Experienced Forum User
Joined: 6/25/2005
Posts: 1377
The big game sites / magazines have some specific hardware to capture video from those consoles. It's very expensive and not easily obtainable for regular consumers, though.
m00
Tub
Experienced Forum User
Joined: 6/25/2005
Posts: 1377
3) Let P(n) be the amount of pretty sequences of length n. P(n,x) is the amount of pretty sequences of length n that end in x (thus a_n = x). P(n) = P(n,1) + P(n,2) + P(n,3) + P(n,4) + P(n,5) P(1,x) = 1 P(1) = 5 recursive definition: P(n+1, 1) = P(n,1) + P(n,2) P(n+1, 2) = P(n,1) + P(n,2) + P(n,3) P(n+1, 3) = P(n,2) + P(n,3) + P(n,4) P(n+1, 4) = P(n,3) + P(n,4) + P(n,5) P(n+1, 5) = P(n,4) + P(n,5) Use symmetry to optimize: P(n, 1) = P(n, 5) P(n, 2) = P(n, 4) (simple proof by induction) P(n+1, 1) = P(n,1) + P(n,2) P(n+1, 2) = P(n,1) + P(n,2) + P(n,3) P(n+1, 3) = 2*P(n,2) + P(n,3) Calculate everything using dynamic programming, switch to GMP so it doesn't overflow at n=22 (32 bit) or n=43 (64 bit), and 0.24 seconds later, here it is:
P(2011) = 1021420932136305081810031779199090711895
92259287764089297406165570982039827891335159785572
92346408308710779610033085964448614414729625165733
46144553745081010297545330329827697744770973245663
56543176068598095084607263476767293412894065986064
18242902895908125295717743205930506133969214879318
16524878788782126447913676966029023293885637855261
53708062023088684945834099640006154484006626629861
05948889349011243747084867047485502759150668187720
65067707873865127925269106650593581274362963201771
67856318955824181057919003577052156323521858023584
85492722739018447710186594392453509063386878447782
32375218553245536754653631997341567967730551817373
92569618510357396581322841116532666953707473634919
71651382532377139583728325087337236784612636096763
76360123190663093806390018106281632150328463557634
19064142326804081876701793865340812129253615845010
608302937481502582905166807037570099883 ~ 10 ^ 878
calculated using: [code pretty_sequence.cpp]// g++ -lgmpxx -lgmp pretty_sequence.cpp #include <iostream> #include <gmpxx.h> using namespace std; const int n = 2011; int main() { mpz_class p[n+1][3]; // p[n] = P(n,i+1) for (int i=0;i<3;i++) p[1] = 1; for (int i=2;i<=n;i++) { p[0] = p[i-1][0] + p[i-1][1]; p[1] = p[0] + p[i-1][2]; p[2] = 2*p[i-1][1] + p[i-1][2]; mpz_class total = 2*p[0] + 2*p[1] + p[2]; cout << total << " pretty sequences of length " << i << endl; } return 0; }[/code] (There's no need to keep the whole array in memory; two rows would be enough. But there's no point in optimizing for memory when it runs without swapping.) You choose n = 2011, so I guess you have some specific use of this sequence in mind. Which is it?
m00
Tub
Experienced Forum User
Joined: 6/25/2005
Posts: 1377
So you've actually used the same recursion I've suggested, you just looked at it from a different perspective ) You've implemented it top-down using recursion+memoization, while I implemented it bottom-up. You've also skipped the sorting, thus calling the inner loop n^2 times instead of ~(n^2)/2. But it's basically the same recursion! What I called sequence[i] is exactly your caminho(x), with prev/length being prox/numCaminho! Your code is indeed O(n^2), which I strongly suspect to be optimal. But there's still plenty of room for minor optimization in your code - sort the boxes first - memoization is a good choice when you don't need all values. Since all of them are needed anyway (lines 53f), the bottom-up approach should be easier for the compiler to optimize since it avoids function calls. - you've precalculated all nestings into a matrix. Since no value is used more than once (but some aren't used at all) and you didn't apply any tricks to speed it up, calculating a nesting when needed should be faster. On line 27, try replacing "if (g[x][i])" with "if (encaixa(i,j))" and remove g[][]. - On that note, you'll test encaixa(i,j) before checking if (caminho(i)>maior). When you remove g[][], the second check should be faster, thus it's better to switch the tests. - if you've sorted the boxes, it's more efficient to check the highest boxes first. This improves the chances to find the largest sequence early, saving further encaixa() checks. In your code, you'd change the loop in line 27 to "for (int i=x-1; i>0; i--)". (i=x-1, not i=n-1, since the boxes are sorted) But that's not important unless there are bonus points for speed ) Good catch on your edit2!
m00
Tub
Experienced Forum User
Joined: 6/25/2005
Posts: 1377
p4wn3r wrote:
If I messed up something, the idea is that knowing the best sequence for k boxes doesn't provide enough information to extend to k+1 boxes.
the secret of dynamic programming is to find a good invariant that can be extended. The "best solution to k boxes" doesn't work, but that's not what I've been doing. length[ i] contains the best sequence of the boxes 1..i that MUST contain (thus end in) box i! e.g. length[5] could contain the sequences (5), (1,5) or (1,3,5), but never (1,2,3,4) or (3,5,7) because neither ends with box #5. Let's try your example, ordered already:
100 50
200 60
300 70
400 10
500 20
600 30
700 40
instead of length / prev, I'll just note the respective sequence. First box: only one option sequence[1] = (1) Second box: Either (2) or box 2 appended to a known sequence, which would be (1, 2), which is valid. Keep the longest one. sequence[2] = (1,2) Third box: Either (3), or 3 appended to one of the two already known optimal sequences. The new options are (1, 3) or (1,2,3), both valid, pick the longest. sequence[3] = (1,2,3) Fourth box: Must be (4) because the other combinations are not valid sequence[4] = (4) Fifth box: Either (5) or (4, 5), because (1,5), (1,2,5) and (1,2,3,5) are not valid sequence[5] = (4,5) Sixth box: Either (6) or (4,5) or (4,5,6), because (1,6), (1,2,6) and (1,2,3,6) are not valid sequence[6] = (4,5,6) Seventh box: sequence[7] = (4,5,6,7) Now we have 7 sequences, each being an optimal solution to a restricted version of the problem. But our globally optimal solution has to end with one of our boxes, so one of our local solutions has to be the global solution. In this case, the longest sequence found is in sequence[7] with length 4: 4,5,6,7 I cannot vouch for the correctness of the pseudo-code above (it's untested), but the general idea does work. I'm curious, how did you solve it without dynamic programming (or an equal recursion), and what's your upper bound on runtime complexity?
m00
Tub
Experienced Forum User
Joined: 6/25/2005
Posts: 1377
Sort the boxes by their largest dimension. That way you have the order of the longest sequence, you "just" need to find a subset that works. Instead of checking 2^n subsets for length and validity. try dynamic programming to do it in n^2:
int length[n]; // length of the longest sequence ending on (and including) box number n
int prev[n]; // previous box in said longest sequence, -1 if sequence starts here
for (int i=0;i<n;i++)
{
  // initial guess: the sequence containing only this box
  length[i] = 1;
  prev[i] = -1;
  // find a better sequence if one exists
  for (int j=0;j<i;j++)
  {
    if (length[j] + 1 > length[i] && nests(i, j))
    {
      length[i] = length[j] + 1;
      prev[i] = j;
    }
  }
}
Now find the largest entry in the length array and follow the prev-pointers to get the sequence. (you might get a speed-up by precalculating nests(i,j) - even though you won't ever need all of these combinations, using transitivity could avoid some nesting checks. I suppose this is only faster when using lots of dimensions.)
m00
Tub
Experienced Forum User
Joined: 6/25/2005
Posts: 1377
Luck manipulation in this game is horrible. Including enemy drops in a rupee route is a recipe for insanity, unless it's preceeded by a lot of RNG research and a LUA script. :/
m00
Tub
Experienced Forum User
Joined: 6/25/2005
Posts: 1377
Bisqwit wrote:
[..]remind Him[..]
Is it even possible to remind an omniscient being?
Bisqwit wrote:
Again, he is a jealous God, as the scriptures tell from the beginning.
wait, jealous? Wasn't there something about that in the tenth commandment or the sixth cardinal sin or somewhere? btw, if I happen to offend my girlfriend by some well-meant deed, there's a simple solution in a working relationship: she tells me. Then again, she could just sulk and expect me to read that one book amongst thousands that claims to solve all relationship trouble, without ever telling me which one is the correct book. I'm not sure if I'm to blame for the resulting problems. If god is interested in a relationship with us, his communication and courtship skills sure seem sub-par.
m00