Computer Science Canada

23 Line Pong

Author:  copthesaint [ Wed Jan 19, 2011 10:34 pm ]
Post subject:  23 Line Pong

Tony @ Mon Jan 10, 2011 wrote:
copthesaint @ Mon Jan 10, 2011 3:31 am wrote:
Lol I dont want to know how complex it would be to minipulate the values for a 3 dimensional array doing this... lol

You weren't around for this, but things very quickly get out of hand... http://compsci.ca/blog/your-computer-science-isu-in-20-lines/


Turing:
View.Set ("Graphics,Offscreenonly,nobuttonbar")
fcn cnd (exps : boolean, var x : int, y : int) : boolean
    if exps then
        x := y
    end if
    result false
end cnd
var pFTString : array 0..1 of string := init ("","Paused")
var pB,pI,pT,pFTI, pX, pY, pX2, pY2, bX, bY, bXV,bYV,pW,pW2, pF, pWid, pLen, pFLocX1, pFLocX2,pFLocX3, pFLocY3,pFLocY1,pFLocY2: int := -5
var chars : array char of boolean
loop
    Input.KeyDown (chars)
    exit when /*Initalization Conditions*/cnd ((pI = -5), pF, Font.New ("Arial:24")) or cnd ((pI = -5), pFTI, 0) or cnd ((pI = -5), pB, -1) or cnd ((pI = -5), pFLocY1, maxy - 40)or cnd ((pI = -5), pFLocY3, (maxy div 4) * 3) or cnd ((pI = -5), pFLocX3, maxx div 2) or cnd ((pI = -5), pFLocY2, maxy - 40) or cnd ((pI = -5), pFLocX1, 10)or cnd ((pI = -5), pFLocX2, maxx-30)or cnd ((pI = -5), pWid, 15)or cnd ((pI = -5), pLen, 40)or cnd ((pI = -5), pW, 0) or cnd ((pI = -5), pW2, 0) or cnd ((pI = -5), pI, 0) or cnd ((pI = 0), pX, 10)or cnd ((pI = 0), bXV, ((Rand.Int (0,1)*2) -1)*100* Rand.Int (3,6)) or cnd ((pI = 0), bYV, ((Rand.Int (0,1)*2) -1)*100* Rand.Int (3,5)) or cnd ((pI = 0), pY, (maxy div 2)*1000) or cnd ((pI = 0), pX2, (maxx - 10)*1000) or cnd ((pI = 0), pY2, (maxy div 2)*1000)or cnd ((pI = 0),bX, (maxx div 2)*1000) or cnd ((pI = 0),bY, (maxy div 2)*1000) or cnd ((pI = 2), pT, Time.ElapsedCPU) or cnd ((pI = 2), pI, 0) or cnd ((pT + 3000 <= Time.ElapsedCPU) and pI = 0, pI, -1) /*Collision Conditions*/or cnd ((bX < 5000) and (pI = -1),pW2, pW2+1) or cnd ((bX < 5000) and (pI = -1),pI, 2) or cnd ((bX > (maxx - 5)*1000)and (pI = -1),pW, pW + 1) or cnd ((bX > (maxx - 5)*1000)and (pI = -1),pI, 2) or cnd ((pI = -1),bX, bX + bXV) or cnd ((pI = -1),bY, bY + bYV) or cnd ((bY < 5000) and (bYV < 0),bYV, bYV * -1) or cnd ((bY > (maxy - 5)*1000)and (bYV > 0),bYV, bYV * -1) or cnd ( (bX >= pX and bX <= pX + 19000) and (bY >= pY -40000 and bY <= pY + 40000)and (bXV < 0) or (bX <= pX2 and bX >= pX2 - 19000)and (bY >= pY2 -40000 and bY <= pY2 + 40000) and (bXV > 0),bXV, round (bXV * -1.045)) /*User Controls*/or cnd (chars ('w') and (pY < (maxy - 40)*1000),pY, pY + 1000) or cnd (chars ('s')and (pY > 40000),pY, pY - 1000) or cnd (chars (KEY_UP_ARROW)and(pY2 < (maxy - 40)*1000),pY2, pY2 + 1000) or cnd (chars (KEY_DOWN_ARROW) and (pY2 > 40000),pY2, pY2 - 1000) or cnd (chars ('p') and pB = -1 ,pB, 1)or cnd (pB = 1 and chars ('p') = false ,pI, pI * -1)  or cnd (pB = 1 and chars ('p') = false ,pB, -1) or cnd ((pI = 1) or (pI = -1), pFTI, (pI + 1) div 2)
    drawfillbox (-1,-1,maxx+1,maxy+1, black)
    drawfilloval (round (bX / 1000),round(bY / 1000),5,5,white)
    drawfillbox (round (pX / 1000),round (pY / 1000)-pLen,round(pX / 1000)+pWid,round(pY / 1000)+pLen,white)
    drawfillbox (round (pX2 / 1000),round (pY2 / 1000)-pLen,round(pX2 / 1000)-pWid,round(pY2 / 1000)+pLen,white)
    Font.Draw (pFTString (pFTI),pFLocX3 - (Font.Width (pFTString (pFTI),pF) div 2),pFLocY3, pF,white)
    Font.Draw (intstr (pW),pFLocX1,pFLocY1, pF,white)
    Font.Draw (intstr (pW2),pFLocX2,pFLocY2, pF,white)
    View.Update
end loop
%Line 23 here


So no this isn't original, but it is funny having a 23 line pong program...
If you press p you will pause the game
'w' and 's' are the keys for player one, up arrow and down arrow are keys for player two.

Author:  Insectoid [ Wed Jan 19, 2011 11:22 pm ]
Post subject:  RE:23 Line Pong

This is likely just because I'm running it through Wine, but it's incredibly slow (4-5 spf -not fps, spf)on my computer. I'm far too lazy to figure out the conditional atm.

I find a lot of programs can be simplified if you just look up patterns in the code. Many conditionals, loops, etc. can be collapsed into very few lines, or by reading possible outputs of functions you can generate truth tables and write them mathematically in far fewer lines.

I've had fun going through assignments and collapsing them into very few lines or single complex statements that might not appear to work at first but do with explanation.

Good job on this- If I have access to a Windows machine with Turing anytime in the near future I'll try it out for real.

Author:  TheGuardian001 [ Thu Jan 20, 2011 1:35 am ]
Post subject:  Re: 23 Line Pong

It's seems to run quite well on a Windows machine.
That's one hell of a conditional though.

Author:  Zren [ Thu Jan 20, 2011 10:17 am ]
Post subject:  RE:23 Line Pong

That one line is why normal people judge length in characters . . . >.<
Haven't played long enough by myslef but is there a win condition?

Author:  Tony [ Thu Jan 20, 2011 10:36 am ]
Post subject:  RE:23 Line Pong

No, there is no win condition. The loop will never exit.

Author:  2goto1 [ Thu Jan 20, 2011 11:29 am ]
Post subject:  Re: RE:23 Line Pong

Zren @ Thu Jan 20, 2011 10:17 am wrote:
That one line is why normal people judge length in characters . . . >.<


Good point. The motivation for "least number of lines / characters" has always been one of algorithmic efficiency, above all else

Author:  Tony [ Thu Jan 20, 2011 11:52 am ]
Post subject:  RE:23 Line Pong

/sarcasm, right?

Author:  Sur_real [ Thu Jan 20, 2011 1:36 pm ]
Post subject:  Re: RE:23 Line Pong

Zren @ Thu Jan 20, 2011 10:17 am wrote:
That one line is why normal people judge length in characters . . . >.<
Haven't played long enough by myslef but is there a win condition?


I agree...
on a similar note then you should check you fishtastic's Turing TD http://compsci.ca/v3/viewtopic.php?t=20247

Author:  mirhagk [ Thu Jan 20, 2011 2:19 pm ]
Post subject:  RE:23 Line Pong

I know something more impressive. I didn't find this, but this kid in my compsci class did, so I insta-conscripted him to me ecoo team found it.

There's this coconut problem

http://ecoo.org/cs/ECOO_08_Board/brd2008p2.html

There solution is that big, but it's decently complex.

his solution (works for every answer they have) (also note the input is wrong... 144, 120 and 17 are 44, 20 and 7 respectively, they even say so lol)
is one variable declaration, a for loop (to get all 5 answers), an input, and an output (with non-complex math)

Turing:

var num : int
for i : 1 .. 5
    get num
    put "For ",num," men, the smallest number of coconuts is ",num ** 5 - num + 1
end for

Author:  Insectoid [ Thu Jan 20, 2011 4:12 pm ]
Post subject:  RE:23 Line Pong

Things like that are what I love about programing contests. There's always an 'obvious' answer that most of the participants will use. Then there are a number of 'obscure' solutions that require you to look at the problem sideways. Anyone can figure these out given time, but it takes a different kind of thinker to figure these out within the time constraints of a contest. Imo these are the true gods of programing contests.

Author:  copthesaint [ Thu Jan 20, 2011 11:53 pm ]
Post subject:  RE:23 Line Pong

Very Happy I love programing contests, I didnt win for our contest last year on the count that I forgot to copy the java installers onto my labtop and couldn't test anything -_- but! I did get third previous year! lol


: