Springen naar inhoud


- - - - -
Solved

Opdracht 028



  • Log in a.u.b. om te beantwoorden
Er zijn 2 reacties in dit onderwerp

#1 Xymtrix

Xymtrix

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 533 berichten
    Laatst bezocht 13 aug 2012 15:48
  • LocatieNederland

Geplaatst op 14 oktober 2010 - 13:52

Citeren

Starting with the number 1 and moving to the right in a clockwise direction a 5 by 5 spiral is formed as follows:

21 22 23 24 25
20  7  8  9 10
19  6  1  2 11
18  5  4  3 12
17 16 15 14 13

It can be verified that the sum of the numbers on the diagonals is 101.

What is the sum of the numbers on the diagonals in a 1001 by 1001 spiral formed in the same way?


#2 Xymtrix

Xymtrix

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 533 berichten
    Laatst bezocht 13 aug 2012 15:48
  • LocatieNederland

Geplaatst op 14 oktober 2010 - 13:54

Ik heb hiervoor de hele spiral gevuld, waardoor het iets langer duurt.

Visual Basic Code:
	Function Problem28() As Long

		Dim Spiral(1000, 1000) As Integer
		Dim Answer As Integer = 0
		Dim Counter As Integer = 3
		Dim DirFrom As Integer = 1
		Dim X, Y As Integer
		X = (UBound(Spiral) / 2) + 1
		Y = (UBound(Spiral) / 2)
		Spiral(Y, Y) = 1
		Spiral(Y, X) = 2

		Do Until Counter = ((UBound(Spiral) + 1) ^ 2) + 1
			TextBox2.Text = DirFrom
			Select Case DirFrom
				Case 1 ' From left
					If Spiral(Y + 1, X) < 1 Then
						Spiral(Y + 1, X) = Counter
						Counter += 1
						DirFrom = 2
						Y += 1
					ElseIf Spiral(Y, X + 1) < 1 Then
						Spiral(Y, X + 1) = Counter
						Counter += 1
						X += 1
					End If
				Case 2 ' From top
					If Spiral(Y, X - 1) < 1 Then
						Spiral(Y, X - 1) = Counter
						Counter += 1
						DirFrom = 3
						X -= 1
					ElseIf Spiral(Y + 1, X) < 1 Then
						Spiral(Y + 1, X) = Counter
						Counter += 1
						Y += 1
					End If
				Case 3 ' From right
					If Spiral(Y - 1, X) < 1 Then
						Spiral(Y - 1, X) = Counter
						Counter += 1
						DirFrom = 4
						Y -= 1
					ElseIf Spiral(Y, X - 1) < 1 Then
						Spiral(Y, X - 1) = Counter
						Counter += 1
						X -= 1
					End If
				Case 4 ' From Bottom
					If Spiral(Y, X + 1) < 1 Then
						Spiral(Y, X + 1) = Counter
						Counter += 1
						DirFrom = 1
						X += 1
					ElseIf Spiral(Y - 1, X) < 1 Then
						Spiral(Y - 1, X) = Counter
						Counter += 1
						Y -= 1
					End If
			End Select
		Loop

		For I As Integer = 0 To UBound(Spiral)
			Answer += Spiral(I, I)
		Next
		Dim Z As Integer = 0
		For I = UBound(Spiral) To 0 Step -1
			Answer += Spiral(I, Z)
			Z += 1
		Next

		Return Answer - 1

	End Function


#3 josk79

josk79

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 614 berichten
    Laatst bezocht 30 jan 2017 23:38

Geplaatst op 15 oktober 2010 - 22:53

Mijn versie. Komt in grote lijnen op hetzelfde neer, alleen heb ik iets compactere code:

Visual Basic Code:
		Public Function Solve() As Long
			Const size As Integer = 1001 ' We willen een grid van 1001 x 1001 posities
			Dim grid(size - 1, size - 1) As Integer

			' Ik gebruik een kernel om iedere positie in het grid te vullen
			Dim kx As Integer = size \ 2, ky As Integer = size \ 2
			Dim kvalue As Integer = 1

			Dim kaddorsubstract As Integer = 1 ' Tellen we op of trekken we af?
			Dim kdelta As Integer = 1	' Het aantal posities dat in deze richting moet worden verplaatst
			Dim kmovex As Boolean = True ' We verplaatsen de kernel in x-richting

			Do
				For c As Integer = 1 To kdelta
					grid(kx, ky) = kvalue
					If kmovex Then
						kx += kaddorsubstract
					Else
						ky += kaddorsubstract
					End If
					If kvalue = size ^ 2 Then Exit Do ' Laatste positie bereikt
					kvalue += 1
				Next

				' Verander de richting van de kernel
				kmovex = Not kmovex
				If kmovex Then
					kdelta += 1
					kaddorsubstract = -kaddorsubstract
				End If
			Loop

			' Totaal van de diagonalen berekenen
			' Middelste cel ervan aftrekken anders wordt deze dubbel geteld
			Dim total As Long = -grid(size \ 2, size \ 2)
			For c As Integer = 0 To size - 1
				total += grid(c, c)
				total += grid(size - c - 1, c)
			Next
			Return total
		End Function







Ook met taq Solved voorzien

0 gebruiker(s) lezen dit onderwerp

0 lid(leden), 0 bezoeker(s), 0 anonieme gebruikers

Inloggen


[Solved] Untitled 1

Met dank aan Jürgen voor de jarenlange inzet van visualbasic.be (anno dec 2000)
Met dank aan Mike en Ronneke voor de jarenlange inzet van vbib.be (anno dec 2010)
Met dank aan PascalBianca voor de jarenlange inzet van vbib.be (anno dec 2016)