Das Board ist doch dazu da, dass man dem anderen hilft. Die Smileys waren ja auch nur dekoration.

Code: Alles auswählen
; -- beliebig anpassbar ----------------------------
#Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
#PassLength = 3
; --------------------------------------------------
Define i.l, PassPos.l
Define OutputString.s{#PassLength}
Dim CharPos.l(#PassLength - 1)
For i = 0 To #PassLength - 1
CharPos(i) = 1
Next
; -- Beispiel für andere Startzeichen --------------
; CharPos(0) = 3 ; <= setzt die erste Stelle auf "C"
; CharPos(1) = 2 ; <= setzt die zweite Stelle auf "B"
; --------------------------------------------------
Repeat
OutputString = ""
For i = 0 To #PassLength - 1
OutputString + Mid(#Chars,CharPos(i),1)
Next
Debug OutputString
PassPos = 0
Repeat
If CharPos(PassPos) < Len(#Chars)
CharPos(PassPos) + 1
Break
ElseIf PassPos < #PassLength - 1
PassPos + 1
Else
Break 2
EndIf
ForEver
For i = 0 To PassPos - 1
CharPos(i) = 1
Next
ForEver
in einem Projekt sinnvolle Kommentare und aussagekräftige VariablennamenPureBasic4.0 hat geschrieben:Ein neues Projekt möchte ich nicht anfangen, weil wenn dann eure antwort da
ist, weiß man nicht mehr, welche Variable, welche LinkedList für was gedacht
war...
Das kannst du doch ganz einfach erweitern, in dem du die Konstante "PassLength" in eine Variable umänderst, den gesamten Code in eine Prozedur packst, die Prozedur in einer Schleife aufrufst und bei jedem Schleifendurchlauf die PassLength-Variable - die als Parameter der Prozedur übergeben wird - immer um eins erhöhst.PureBasic4.0 hat geschrieben:Das Problem ist aber ,dass die Länge des Strings variabel sein soll.
Auch dies hättest du einfach lösen können, in dem du die ZeilePureBasic4.0 hat geschrieben: Und da dein Code den String von vorne her aufbaut (nicht wie der Code von Stargate) kann ich ihn leider nicht benutzen.
Code: Alles auswählen
For i = 0 To #PassLength - 1
Code: Alles auswählen
For i = #PassLength - 1 To 0 Step -1
Code: Alles auswählen
OutputString$ + Mid(MyAlphabet$,CharPos(i),1)
Code: Alles auswählen
OutputString$ + PeekS(@MyAlphabet$+CharPos(i),1)
Code: Alles auswählen
#MaxPassLength = 3
#Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
#FirstChar = 'A'
#LastChar = '9'
Define *PassPointer = AllocateMemory((#MaxPassLength + 2) * SizeOf(Character))
Define *CharsPointer = AllocateMemory((Len(#Chars) + 1) * SizeOf(Character))
Define *CharsPos = AllocateMemory(#MaxPassLength)
Define *Pass.Character, *Chars.Character
Define PlacePos.l, i.l, z.l, Output.s, StringLength.l, StartTime.l
If Not *PassPointer Or Not *CharsPointer Or Not *CharsPos
If *PassPointer: FreeMemory(*PassPointer): EndIf
If *CharsPointer: FreeMemory(*CharsPointer): EndIf
If *CharsPos: FreeMemory(*CharsPos): EndIf
End
EndIf
PokeS(*CharsPointer,#Chars)
; ===================================
; Starte an beliebiger Zeichenfolge
; 1. Stelle: g
PokeB(*CharsPos + 2,32)
PokeC(*PassPointer + 2,'g')
; 2. Stelle: B
PokeB(*CharsPos + 1,1)
PokeC(*PassPointer + 1,'B')
; 3. Stelle: C
PokeB(*CharsPos,2)
; ====================================
;StartTime.l = ElapsedMilliseconds()
Repeat
PlacePos = 0
Repeat
*Pass = *PassPointer + PlacePos
If *Pass\c <> #LastChar
PokeB(*CharsPos + PlacePos,PeekB(*CharsPos + PlacePos) + 1)
*Chars = *CharsPointer + PeekB(*CharsPos + PlacePos) - 1
*Pass\c = *Chars\c
Break
Else
For i = 0 To PlacePos
PokeB(*CharsPos + i,1)
*Pass = *PassPointer + i
*Pass\c = #FirstChar
Next
PlacePos + 1
If PlacePos = #MaxPassLength
Break 2
EndIf
EndIf
ForEver
;Debug PeekS(*PassPointer)
Output = ""
StringLength = MemoryStringLength(*Pass)
For z = StringLength - 1 To 0 Step -1
*Pass = *PassPointer + z
Output + Chr(*Pass\c)
Next
Debug Output
ForEver
;MessageRequester("RunTime",Str(ElapsedMilliseconds() - StartTime) + " ms")
FreeMemory(*PassPointer)
FreeMemory(*CharsPointer)
FreeMemory(*CharsPos)