Chiffrierung zur Dechiffrierung
#11
Hi

auch wenn der TE kein Interesse mehr zeigt  19  evtl. Hilfreich für die welche sich mit rekursive LAMBDAs auseinander setzen. Dabei kommt man doch recht schnell an die Grenze der möglichen Tiefe der Aufrufe.
Hier mal eine Variante wo die äußere Schleife mit Reduce gelöst ist und die innere mit einer rekursiven LAMBDA. Dadurch das die innere rekursive dann für jeden Wert beendet wird ist die Tiefe der rekursive LAMBDA kein Problem mehr.

Code:
=REDUCE("11111111111111";SEQUENZ(3135);LAMBDA(acc;x; VSTAPELN(acc;  LET(FRec;LAMBDA(self;x;yL;z;str;    WENN((z<yL)*(TEIL(x;yL-z;1)="3"); self(self;x;yL;z+1;str&WAHL(--TEIL(x;yL-z+1;1);"1";"11";"111"));  ERSETZEN(x;yL-z;40;"")&(--TEIL(x;yL-z;1)+1)&WAHL(--TEIL(x;yL-z+1;1);"";"1";"11")&str));   FRec(FRec;INDEX(acc;x;1);LÄNGE(INDEX(acc;x;1));1;"")))))

Gruß Elex
Antworten Top
#12
Doch, doch, Interesse besteht! Wink
Ich bin halt momentan damit beschäftigt, einen Haushalt aufzulösen, der seit 56 Jahren besteht, wobei der Hausstand umgekehrt proportional zur Anzahl der Bewohner zunahm.
Ernsthaft: Nicht vergnügungssteuerpflichtig!
Letzter Stand war, die Matrizen einmalig per Makro zu erstellen und auf sie mittels „Zufall" zuzugreifen.
Code:
Sub Kombis()
  Dim ZielSumme&
  Dim Kombination&()
  Dim Start#
  Start = Timer
  ReDim Kombination&(0)
  Dim Zeile&
  With Application
    .ScreenUpdating = False
    .Calculation = xlCalculationManual
  End With
  For ZielSumme = 2 To 15
    Zeile = 2
    Worksheets.Add After:=Worksheets(Worksheets.Count)
    With ActiveSheet
      .Name = ZielSumme
      .Rows(1).NumberFormat = "0;;;"
      .Cells(1, 1).Value = ZielSumme
      Call RekursivSuche(0, Kombination, ZielSumme, Zeile)
      .Range("A1") = ZielSumme
      .Range("C1").Formula2 = "=INDEX(OFFSET(B:B,,,,A1),RANDBETWEEN(2,COUNT(B:B)+1),)"
      .Columns.AutoFit
    End With
  Next ZielSumme
  With Application
    .ScreenUpdating = True
    .Calculation = xlCalculationAutomatic
  End With
  Debug.Print Timer - Start
End Sub

Sub RekursivSuche(Summe&, Kombination&(), Ziel&, ByRef Zeile As Long)
  Dim i As Integer
  If Summe = Ziel Then
    For i = 1 To UBound(Kombination)
      ActiveSheet.Cells(Zeile, i + 1).Value = Kombination(i)
    Next i
    Zeile = Zeile + 1
  ElseIf Summe < Ziel Then
    For i = 1 To 3
      ReDim Preserve Kombination(UBound(Kombination) + 1)
      Kombination(UBound(Kombination)) = i
      Call RekursivSuche(Summe + i, Kombination, Ziel, Zeile)
      ReDim Preserve Kombination(UBound(Kombination) - 1)
    Next i
  End If
End Sub

Ich bleibe dran bzw aktualisiere, wenn ich den Kopf etwas freier habe …
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#13
(06.02.2026, 16:46)RPP63 schrieb: Ich bin halt momentan damit beschäftigt, einen Haushalt aufzulösen, der seit 56 Jahren besteht, wobei der Hausstand umgekehrt proportional zur Anzahl der Bewohner zunahm.
Ernsthaft: Nicht vergnügungssteuerpflichtig!

Oh, das hatten wir (Geschwister) auch gerade in 2025. Viele Eltern sterben mit so um die 90 - mit gelegentlichen Ausreißern.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste