Page 5 of 11

Re: Rosetta Code

Posted: 02 Feb 2014, 18:29
"Twelve Statements" done. Will upload it to Rosetta Code later.

Code: Select all

``````; Note: the original puzzle provides 12 statements and starts with
; "Given the following twelve statements...", so the first statement
; should ignore the F[1] flag and always be true (see "( N == 1 )").

S := 12 ; number of statements
Output := ""
Loop, % 2**S {
;;If !Mod(A_Index,100) ;; optional 'if' to show the loop progress
;;    ToolTip, Index: %A_Index%
SetFlags(A_Index-1), Current := "", Count := 0
Loop, %S%
R := TestStatement(A_Index), Current .= R, Count += (R == F[%A_Index%])
If ( Count >= S-1 )
Output .= "`n[" Count "] -> " Current
}
ToolTip
MsgBox, % SubStr(Output,2)
Return

;-------------------------------------------------------------------------------------

SetFlags(D) {
Global
Local I
Loop, %S%
I := S-A_Index+1 , F[%I%] := (D >> (S-A_Index)) & 1
}

;-------------------------------------------------------------------------------------

TestStatement(N) {
Global
Local I, C := 0
If ( N == 1 ) ; This is a numbered list of twelve statements.
Return ( S == 12 ) ; should always be true
If ( N == 2 ) { ; Exactly 3 of the last 6 statements are true.
Loop, 6
I := S-A_Index+1 , C += F[%I%]
Return ( C == 3 )
}
If ( N == 3 ) { ; Exactly 2 of the even-numbered statements are true.
Loop, %S%
C += ( !Mod(A_Index,2) & F[%A_Index%] )
Return ( C == 2 )
}
If ( N == 4 ) ; If statement 5 is true, then statements 6 and 7 are both true.
Return ( F[5] ? F[6] & F[7] : 1 )
If ( N == 5 ) { ; The 3 preceding statements are all false.
Loop, 3
I := N-A_Index , C += F[%I%]
Return ( C == 0 )
}
If ( N == 6 ) { ; Exactly 4 of the odd-numbered statements are true.
Loop, %S%
C += ( !!Mod(A_Index,2) & F[%A_Index%] )
Return ( C == 4 )
}
If ( N == 7 ) ; Either statement 2 or 3 is true, but not both.
Return ( F[2] ^ F[3] )
If ( N == 8 ) ; If statement 7 is true, then 5 and 6 are both true.
Return ( F[7] ? F[5] & F[6] : 1 )
If ( N == 9 ) { ; Exactly 3 of the first 6 statements are true.
Loop, 6
C += F[%A_Index%]
Return ( C == 3 )
}
If ( N == 10 ) ; The next two statements are both true.
Return ( F[11] & F[12] )
If ( N == 11 ) ; Exactly 1 of statements 7, 8 and 9 are true
Return ( F[7]+F[8]+F[9] == 1 )
If ( N == 12 ) { ; Exactly 4 of the preceding statements are true
Loop, % N-1
C += F[%A_Index%]
Return ( C == 4 )
}
}``````
I adapted the Python code, using bruteforce (4096 iterations) to set 12 flags and test all statements on each iteration.
If the proposed flags match the results after validating each statement, we have the solution.
I show all cases where we have at least S-1 matches (being S := 12 statements).

Bonus:
Also, the puzzle can be easily modified without much additional coding.
And it works for AHK 1.0 as well! haha

Re: Rosetta Code

Posted: 02 Feb 2014, 20:16
@MasterFocus You beat me to it
I based mine on the Java version.

Code: Select all

``````global S
S := {1: 1}
Recurse(2)
ExitApp

Check2() {
return (S[2] = (S[7]+S[8]+S[9]+S[10]+S[11]+S[12] = 3))
}

Check3() {
return (S[3] = (S[2]+S[4]+S[6]+S[8]+S[10]+S[12] = 2))
}

Check4() {
if (S[5])
return (S[4] = (S[6]+S[7] = 2))
else
return (S[4] = 1)
}

Check5() {
return (S[5] = (S[2]+S[3]+S[4] = 0))
}

Check6() {
return (S[6] = (S[1]+S[3]+S[5]+S[7]+S[9]+S[11] = 4))
}

Check7() {
return (S[7] = (S[2]+S[3] = 1))
}

Check8() {
if (S[7])
return (S[8] = (S[5]+S[6] = 2))
else
return
}

Check9() {
return (S[9] = (S[1]+S[2]+S[3]+S[4]+S[5]+S[6] = 3))
}

Check10() {
return (S[10] = (S[11]+S[12] = 2))
}

Check11() {
return (S[11] = (S[7]+S[8]+S[9] = 1))
}

Check12(t=0) {
Loop 11
if (S[A_Index])
t++
return (S[12] = (t = 4))
}

Check() {
if (Check2() && Check3() && Check4() && Check5() && Check6() Check7() && Check8() && Check9() && Check10() && Check11() && Check12()) {
for k, v in S
if (v)
Out .= k " "
MsgBox, % "True statements: " Out
}
}

Recurse(k) {
if (k = 13)
Check()
else {
S[k] := 0
Recurse(k+1)
S[k] := 1
Recurse(k+1)
}
}``````

Re: Rosetta Code

Posted: 02 Feb 2014, 20:58
I was trying to fix Anonymous Recursion, but that's the best I could do:

Code: Select all

``````/*
Fib(x) {
t := -1
If ( x >= 0 )
GoSub, Fib_Label
Else
MsgBox, Oops!
Return t
Fib_Label:
i := 0, j := 1
Loop, % x-1
t := i+j, i := j, j := t
Return
}

MsgBox, % "Calling Fib(5) ..."
MsgBox, % "Result: " Fib(5)
MsgBox, % "Calling Fib(-3) ..."
MsgBox, % "Result: " Fib(-3)
ListVars
MsgBox, % "ListVars shows the variables are not global."
;GoSub, Fib_Label ; <--- this yields an error
*/``````
This currently works, but doesn't fulfill the task, as the calculation itself should be done recursively.
I'm not used to AHK Objects, so maybe someone can figure this out.

On a related note (fixing stuff), can this task actually be completed by AutoHotkey, obeying all four items?

Re: Rosetta Code

Posted: 02 Feb 2014, 23:20
Anyone look at 100 Doors yet?

Re: Rosetta Code

Posted: 03 Feb 2014, 00:07
That should be relatively easy.
I'm putting here 4 versions I came up with. I suppose it's pretty self-explanatory.
Spoiler
Once again, here's everything I'll upload later (hopefully until wednesday):
[list][*]Kaprekar Numbers
[*]Twelve Statements
[*]100 Doors (was actually already solved)[/list]

Re: Rosetta Code

Posted: 03 Feb 2014, 00:48
Nice!

Re: Rosetta Code

Posted: 03 Feb 2014, 02:32
fischgeek wrote:Anyone look at 100 Doors yet?
any perfect sq. like 1,4,9,...100 has odd no. of factors.
rest have even no. of factors.

Re: Rosetta Code

Posted: 03 Feb 2014, 22:34
@fischgeek

Code: Select all

``````m := 1, k := 1
loop, 100{
gosub, label
MsgBox  % !mod((sqrt(k)), 1 ) ? k " Open" . "`nFactors-" . list . "`nOdd number of factors" : k " Closed " . "`nFactors-" . list . "`nEven number of factors"
list := "", 	m := 1, k := k + 1
}
exitapp
esc::exitapp
label:
loop, % k/2{
list .= !mod(k, m) ? m "," : ""
m++
}
list := list . k
return
``````
May Be.

Re: Rosetta Code

Posted: 03 Feb 2014, 23:50
Fibonacci word/fractal

Looks like @sinkfaze solved it and @tinku99 submitted it. Link

Re: Rosetta Code

Posted: 04 Feb 2014, 22:49
Does anyone know how to upload an image file like the other examples on that page have done?

I made this animated 3d version just for fun. The dimensions can be changed with hotkeys (Up/Down/Left/Right/PgUp/PgDn/Home/End).
I think this version is more interesting, but it doesn't fit the requirements of the Rosetta Code task.

Code: Select all

``````#SingleInstance, Force
#NoEnv
SetBatchLines, -1

C1 := 0xff0000aa, C2 := 0xff00aa00, C3 := 0xffaa0000

; Uncomment if Gdip.ahk is not in your standard library
;#Include, Gdip.ahk

If !pToken := Gdip_Startup()
{
MsgBox, 48, gdiplus error!, Gdiplus failed to start. Please ensure you have gdiplus on your system
ExitApp
}
OnExit, Exit

Width := A_ScreenWidth, WC := Width//2 , Height := A_ScreenHeight, HC := Height//2
, TopLeftX := (A_ScreenWidth - Width)//2, TopLeftY := (A_ScreenHeight - Height)//2

Gui, 1: -Caption +E0x80000 +LastFound +AlwaysOnTop +ToolWindow +OwnDialogs
Gui, 1: Show, NA

hwnd1 := WinExist(), hbm := CreateDIBSection(Width, Height), hdc := CreateCompatibleDC()
, obm := SelectObject(hdc, hbm), G := Gdip_GraphicsFromHDC(hdc), Gdip_SetSmoothingMode(G, 4)
, speed := 1, s := 120, d := 20, h := 120, 2h := h + h

Loop {
mcx := (mc := Cos(a := Mod(A_Index, 90)* 0.01745329252)) * s
, mcy := mc * d
, msx := (ms := Sin(a)) * s
, msy := ms * d

; Points
x1 := WC - mcx,  y1 := HC - msy - h
, x2  := WC + msx, y2 := HC - mcy - h
, x3  := WC + mcx, y3 := HC + msy - h
, x4  := WC - msx, y4 := HC + mcy - h
, yb1 := y1 + 2h, yb2 := y2 + 2h
, yb3 := y3 + 2h, yb4 := y4 + 2h

; Fill Top
P1 := x1 "," y1 "|" x2 "," y2 "|" x3 "," y3 "|" x4 "," y4
, DrawFace(P1, C3, G)

; Fill Vertical Faces
P1 := x1 "," y1 "|" x4 "," y4 "|" x4 "," yb4 "|" x1 "," yb1
, P2 := x4 "," y4 "|" x3 "," y3 "|" x3 "," yb3 "|" x4 "," yb4
, P3 := x2 "," y2 "|" x2 "," yb2 "|" x3 "," yb3 "|" x3 "," y3
, i :=Mod(A_Index, 360)
if (i < 90 || (i < 270 && i >= 180))
DrawFace(x1 < x4 ? P1 : P3, C1, G)
, DrawFace(P2, C2, G)
else {
if (x1 < x4)
DrawFace(P1, C2, G)
, DrawFace(P2, C1, G)
else
DrawFace(P2, C1, G)
, DrawFace(P3, C2, G)
}

UpdateLayeredWindow(hwnd1, hdc, TopLeftX, TopLeftY, Width, Height)
if (!Mod(A_Index, speed))
Sleep, 30
Gdip_GraphicsClear(G)
}

DrawFace(Points, Color, G) {
pBrush := Gdip_BrushCreateSolid(Color)
, Gdip_FillPolygon(G, pBrush, Points, 1)
, Gdip_DeleteBrush(pBrush)
return
}

p::Pause

Right::
s++
Set_TT("s", s)
return

Left::
s--
Set_TT("s", s)
return

Up::
d++
Set_TT("d", d)
return

Down::
if (d > 0)
d--
Set_TT("d", d)
return

PGUP::
h++
2h := h + h
Set_TT("h", h)
return

PGDN::
if (h > 0)
h--
2h := h + h
Set_TT("h", h)
return

Home::
If (Speed < 3)
Speed++
Set_TT("Speed", Speed)
return

End::
If (Speed > 1)
Speed--
Set_TT("Speed", Speed)
return

Set_TT(s, v) {
ToolTip, % s ": " v
SetTimer, TT, -1500
return
}

TT:
ToolTip
return

Esc::
Exit:
SelectObject(hdc, obm), DeleteObject(hbm), DeleteDC(hdc)
, Gdip_DeleteGraphics(G), Gdip_Shutdown(pToken)
ExitApp
Return``````

Re: Rosetta Code

Posted: 05 Feb 2014, 00:22
As soon as I find Bentschis OpenGL library somewhere i will rewrite that one.

Re: Rosetta Code

Posted: 05 Feb 2014, 01:18
I'd be very interested to see that.

Re: Rosetta Code

Posted: 05 Feb 2014, 15:34
off the charts, thanks kon

Re: Rosetta Code

Posted: 05 Feb 2014, 15:46
AlphaBravo wrote:off the charts, thanks kon
Thanks
If I wasn't clear in my post above, the version I posted to Rosetta code just shows a static image. The animated version I posted above (just for fun) doesn't fit the task requirements of a 2x3x4 cuboid. It will always have a square top for the sake of simplicity. I may be able to change it eventually to allow for 2x3x4 in dimensions, but I think that will involve some fairly extensive changes to how the points are calculated.

Re: Rosetta Code

Posted: 05 Feb 2014, 16:48
With OpenGL that would be the easy part.
Bentschi PMd me something like this.

Re: Rosetta Code

Posted: 06 Feb 2014, 10:00
9 billion names of God the integer
http://rosettacode.org/wiki/9_billion_n ... AutoHotKey
Other parts are easy, shall upload them later.
At least i solved one!

Re: Rosetta Code

Posted: 06 Feb 2014, 20:51

Re: Rosetta Code

Posted: 06 Feb 2014, 22:30
nice!

Re: Rosetta Code

Posted: 07 Feb 2014, 22:28

Re: Rosetta Code

Posted: 08 Feb 2014, 16:38