what#700
Da hab ich beim Kopieren wohl etwas vergessen
what#700
Da hab ich beim Kopieren wohl etwas vergessen
Art: Neu-Implementierung
Task: http://rosettacode.org/wiki/Greatest_common_divisor
Beteiligte: TheLuBu
Skript:
_GCD(18, 12)
_GCD(1071, 1029)
_GCD(3528, 3780)
Func _GCD($ia, $ib)
Local $ret = "GCD of " & $ia & " : " & $ib & " = "
Local $imod
While True
$imod = Mod($ia, $ib)
If $imod = 0 Then Return ConsoleWrite($ret & $ib & @CRLF)
$ia = $ib
$ib = $imod
WEnd
EndFunc ;==>_GCD
Art: Neu-Implementierung
Task: http://rosettacode.org/wiki/Letter_frequency
Beteiligte: TheLuBu
Skript:
_Letter_frequency(FileOpenDialog("Open Text File", @DesktopDir, "Textfiles (*.txt)"), True, False)
[/autoit] [autoit][/autoit] [autoit]Func _Letter_frequency($Path, $fcase = True, $fspecial_chars = True)
Local $hFile, $sRead, $iupto, $iStart, $iCount
If Not $fcase Then $fcase = False
If Not $fspecial_chars Then
$iStart = 64
If Not $fcase Then
$iupto = 26
Else
$iupto = 58
EndIf
Else
$iStart = 31
$iupto = 224
EndIf
$hFile = FileOpen($Path, 0)
$sRead = FileRead($hFile)
FileClose($hFile)
For $i = 1 To $iupto
If Not $fspecial_chars Then
If $iStart + $i > 90 And $iStart + $i < 97 Then ContinueLoop
EndIf
$sRead = StringReplace($sRead, Chr($iStart + $i), "", 0, $fcase)
$iCount = @extended
If $iCount > 0 Then ConsoleWrite(Chr($iStart + $i) & " : " & $iCount & @CRLF)
Next
EndFunc ;==>_Letter_frequency
Art: Neu-Implementierung
Task: http://rosettacode.org/wiki/Reduced_row_echelon_form
Beteiligte: TheLuBu
Skript:
Global $ivMatrix[3][4] = [[1, 2, -1, -4],[2, 3, -1, -11],[-2, 0, -3, 22]]
ToReducedRowEchelonForm($ivMatrix)
Func ToReducedRowEchelonForm($matrix)
Local $clonematrix, $i
Local $lead = 0
Local $rowCount = UBound($matrix) - 1
Local $columnCount = UBound($matrix, 2) - 1
For $r = 0 To $rowCount
If $columnCount = $lead Then ExitLoop
$i = $r
While $matrix[$i][$lead] = 0
$i += 1
If $rowCount = $i Then
$i = $r
$lead += 1
If $columnCount = $lead Then ExitLoop
EndIf
WEnd
; There´s no built in Function to swap Rows of a 2-Dimensional Array
; We need to clone our matrix to swap complete lines
$clonematrix = $matrix ; Swap Lines, no
For $s = 0 To $columnCount
$matrix[$r][$s] = $clonematrix[$i][$s]
$matrix[$i][$s] = $clonematrix[$r][$s]
Next
Local $m = $matrix[$r][$lead]
For $k = 0 To $columnCount
$matrix[$r][$k] = $matrix[$r][$k] / $m
Next
For $i = 0 To $rowCount
If $i <> $r Then
Local $m = $matrix[$i][$lead]
For $k = 0 To $columnCount
$matrix[$i][$k] -= $m * $matrix[$r][$k]
Next
EndIf
Next
$lead += 1
Next
;##########################################################
;###################CONSOLE OUTPUT#########################
;##########################################################
For $i = 0 To $rowCount
ConsoleWrite("[")
For $k = 0 To $columnCount
ConsoleWrite($matrix[$i][$k])
If $k <> $columnCount Then ConsoleWrite(",")
Next
ConsoleWrite("]" & @CRLF)
Next
;##########################################################
;##########################################################
;##########################################################
Return $matrix
EndFunc ;==>ToReducedRowEchelonForm
Art: Neu-Implementierung
Task: http://rosettacode.org/wiki/Luhn_test_of_credit_card_numbers
Beteiligte: TheLuBu
Skript:
Global $avarray[4] = [49927398716, 49927398717, 1234567812345678, 1234567812345670]
For $i = 0 To 3
checkLuhn($avarray[$i])
Next
Func checkLuhn($number)
$sum = 0
$numDigits = StringSplit($number, "")
For $i = $numDigits[0] - 1 To 1 Step -2
$numDigits[$i] = $numDigits[$i] * 2
If $numDigits[$i] >= 10 Then $numDigits[$i] -= 9
Next
For $i = 1 To $numDigits[0]
$sum += $numDigits[$i]
Next
If StringRight($sum, 1) = "0" Then
ConsoleWrite("Luhn-Check (" & $number & ") : True" & @CRLF)
Return True
Else
ConsoleWrite("Luhn-Check (" & $number & ") : False" & @CRLF)
Return False
EndIf
EndFunc ;==>checkLuhn
Art: Neu-Implementierung
Task: http://rosettacode.org/wiki/Box_the_compass
Beteiligte: TheLuBu
Skript:
Local $avArray[33] = [0.0, 16.87, 16.88, 33.75, 50.62, 50.63, 67.5, 84.37, 84.38, 101.25, 118.12, 118.13, 135.0, _
151.87, 151.88, 168.75, 185.62, 185.63, 202.5, 219.37, 219.38, 236.25, 253.12, 253.13, 270.0, 286.87, 286.88, _
303.75, 320.62, 320.63, 337.5, 354.37, 354.38]
For $i = 0 To UBound($avArray) - 1
Boxing_the_compass($avArray[$i])
Next
Func Boxing_the_compass($Degree)
Local $namearray[33] = ["North", "North by east", "North-northeast", "Northeast by north", "Northeast", _
"Northeast by east", "East-northeast", "East by north", "East", "East by south", "East-southeast", _
"Southeast by east", "Southeast", "Southeast by south", "South-southeast", "South by east", "South", _
"South by west", "South-southwest", "Southwest by south", "Southwest", "Southwest by west", "West-southwest", _
"West by south", "West", "West by north", "West-northwest", "Northwest by west", "Northwest", "Northwest by north", _
"North-northwest", "North by west", "North"]
ConsoleWrite(StringFormat("%-2s", Mod(Floor($Degree / 11.25 + 0.5), 32)) & " : " & _
StringFormat("%-20s", $namearray[Mod(Floor($Degree / 11.25 + 0.5), 32)]) & " : " & $Degree & @CRLF)
EndFunc ;==>Boxing_the_compass
Zitat von James1337Das Problem ist, dass bei Q(30) der Rekursionslevel selbst auch so ungefähr bei 30 liegt, also noch sehr niedrig. Daraus folgt, dass man wahrscheinlich mehrere Stunden auf das Ergebnis warten könnte, nur um dann einen Rekursionsfehler zu erhalten...
HA! Mit rekursiven Arrays statt Funktionen kann man blitzschnell eine Zuordnungstabelle errechnen. Nicht mal ne Sekunde und alles ist fertig ^^. Für 100.000 Ergebnisse!
main()
[/autoit] [autoit][/autoit] [autoit]Func main()
Local $hofstadters[100000]
$hofstadters[0] = 1
$hofstadters[1] = 1
For $i = 3 To 99999
$hofstadters[$i-1] = $hofstadters[$i-1-$hofstadters[$i-1-1]]+$hofstadters[$i-1-$hofstadters[$i-2-1]]
Next
ConsoleWrite("!> The first 10 numbers are:"&@LF)
For $i = 0 To 9
ConsoleWrite($hofstadters[$i] & " ")
Next
ConsoleWrite(@LF & "!> The 1000'th term is " & $hofstadters[999] & @LF)
Local $less_than_preceding = 0
For $i = 0 To 99998
If $hofstadters[$i+1] < $hofstadters[$i] Then $less_than_preceding += 1
Next
ConsoleWrite("!> " & $less_than_preceding & " times a number was preceded by a greater number!" & @LF)
Return 0
EndFunc
HA! Mit rekursiven Arrays statt Funktionen kann man blitzschnell eine Zuordnungstabelle errechnen. Nicht mal ne Sekunde und alles ist fertig ^^. Für 100.000 Ergebnisse!
Wow, sehr gute Idee!
Art: Neu-Implementierung
Task: http://rosettacode.org/wiki/Luhn_test_of_credit_card_numbers
Beteiligte: TheLuBu
James Sorry, das habe ich nicht gesehen
Aber warum werden die Beispiele von hier nicht bei Rosettacode veröffentlicht?
Hier muss man sich durch minimum 4 Seiten klicken und schauen, ob das Projekt, was man sich auf Rosettacode ausgesucht hat, nicht schon bearbeitet wurde.
Postet doch die Beispiele hier und bei Rosetta Code, wenn es Unstimmigkeiten gibt, kann man die ja besprechen bzw. eine bessere / aktualisierte Version auch bei Rosettacode hochladen
Ja wir werden mal demnächst durchfegen
Art: Neu-Implementierung
Task: http://rosettacode.org/wiki/URL_encoding
Beteiligte: Nakroma
Skript:
#include <String.au3>
[/autoit] [autoit][/autoit] [autoit]$sUrl = "http://foo bar/"
$aEncode = StringRegExp($sUrl, '\W', 3)
If IsArray($aEncode) Then
For $i = 0 To UBound($aEncode) - 1
$sUrl = StringReplace($sUrl, $aEncode[$i], "%" & _StringToHex($aEncode[$i]))
Next
ConsoleWrite($sUrl)
EndIf
Art: Neu-Implementierung
Task: http://rosettacode.org/wiki/URL_decoding
Beteiligte: Nakroma, James1337
Skript:
$sUrl = "http%3A%2F%2Ffoo%20bar%2F"
$aDecode = StringRegExp($sUrl, '(?i)%[0-9A-F]{2}', 3)
If IsArray($aDecode) Then
For $i = 0 To UBound($aDecode) - 1
$sTrim = StringTrimLeft($aDecode[$i], 1)
$sUrl = StringReplace($sUrl, $aDecode[$i], BinaryToString("0x" & $sTrim))
Next
ConsoleWrite($sUrl)
EndIf
Art: Neu-Implementierung
Task: http://rosettacode.org/wiki/Variables
Beteiligte: Nakroma
Skript:
Local $bBoolean = True ; Local boolean
Global $sString = "RosettaCode" ; Global string
$iInteger = 42 ; Integer
$hGui = GuiCreate("RosettaCode") ; Handle
$aArray[2] = ["code 1", "code 2"] ; Array
Bin mir hierbei nicht so ganz sicher ob ich das erfüllt habe was verlangt wurde, aber naja.
Die Links solltest du vielleicht noch mal überarbeiten...
Art: Neu-Implementierung
Task: http://rosettacode.org/wiki/Guess_the_number/With_Feedback
Beteiligte: Nakroma
Skript:
$iMin = 1
$iMax = 100
$iAnswer = Random(1, 100, 1)
MsgBox(0, "RosettaCode: Guess the number/With feedback", "You have to find out a number beetwen " & $iMin & " and " & $iMax & ".")
While 1
$hInput = InputBox("RossetaCode: Guess the number", "Guess the number", "")
If @error Then Exit
If ($hInput < $iMax) AND ($hInput > $iMin) Then
If $hInput < $iAnswer Then
MsgBox(0, "Wrong", "Your guess was less than the target number.")
ElseIf $hInput > $iAnswer Then
MsgBox(0, "Wrong", "Your guess was higher than the target number.")
ElseIf $hInput = $iAnswer Then
MsgBox(0, "Right", "The guess was right. Congratulations!")
Exit
EndIf
Else
MsgBox(0, "Error", "Invalid input")
EndIf
WEnd
Ups... klar, Sekunde.
€: So, Links gefixt