Moin,
der Thread hier ist absichtlich im Offtopic, weil er einfach nur zum Spaß ist
Anbei meine Interpretation von "Welche Expression ergibt eigentlich 27" und "Welche Expression ergibt eigentlich -5"
Motiviert durch Musashi (Zitat: "$x = 11 ------ 2^4 ; -5") ist hierbei ein Skript entstanden
AutoIt
For $i = 0 To 4 Step 1
; Zahl = 27
; Länge = 12 Zeichen
; Versuche = 10
$s = ExpressionThatEqualsWithLessDigits(27, 12, 10)
ConsoleWrite($s & ' = ' & Execute($s) & @CRLF)
Next
For $i = 0 To 4 Step 1
; Zahl = -5
; Länge = 12 Zeichen
; Versuche = 10
$s = ExpressionThatEqualsWithLessDigits(-5, 12, 10)
ConsoleWrite($s & ' = ' & Execute($s) & @CRLF)
Next
; $i - Zahl (muss kein integer sein, aber "einfache" Zahlen aus der Menge der Quotienten sind besser)
; $iLen - Länge der Expression die herauskommen soll
; $n - Anzahl Versuche von denen der genommen wird der die "wenigsten Zahlen" enthält.
Func ExpressionThatEqualsWithLessDigits($i, $iLen = 15, $n = 10)
Local $a[$n][2], $j = $iLen, $k = -1
For $h = 0 To $n - 1 Step 1
$a[$h][0] = ExperssionThatEquals($i, $iLen)
If $a[$h][0] = '' Then
$a[$h][1] = $iLen
Else
$a[$h][1] = CountDigits($a[$h][0])
EndIf
If $j > $a[$h][1] Then
$j = $a[$h][1]
$k = $h
EndIf
Next
If $k = -1 Then Return 'NOT FOUND'
Return $a[$k][0]
EndFunc
Func CountDigits($s)
Return StringLen(StringReplace(StringReplace(StringReplace(StringReplace(StringReplace($s, '+', '', 0, 1), '-', '', 0, 1), '*', '', 0, 1), '/', '', 0, 1), '^', '', 0, 1))
EndFunc
Func ExperssionThatEquals($i, $l = 20)
Local $s = ''
For $_ = 0 To 99999 Step 1
$s = RandomExpression($l)
If Execute($s) = $i Then Return $s
Next
Return ''
EndFunc
Func RandomExpression($l)
Local $s = '', $a = ['1', '2', '3', '4', '5', '+', '-', '*', '/', '^'], $x = ''
For $i = 0 To $l - 1 Step 1
$x = $a[Random(0, UBound($a) - 1, 1)]
If StringIsDigit($x) Then
If StringIsDigit(StringRight($s, 1)) Then
$i -= 1
Else
$s &= $x
EndIf
Else
$s &= $x
EndIf
Next
Return (StringIsDigit(StringRight($s, 1)) And StringIsDigit(StringLeft($s, 1))) ? $s : RandomExpression($l)
EndFunc
Alles anzeigen
Beispieloutput:
Code
1/+5/5^-3--2 = 27
3/++3-5^+2+1 = 27
3-2^+3*+-3^1 = 27
4-+5*-4++--3 = 27
3+-4^1*+3*-2 = 27
1+-+1*2-2+-2 = -5
1^4---4+-4/2 = -5
2+3+-5/2*++4 = -5
5/-3*++3/++1 = -5
3/-1-++3+2/2 = -5
5^3----5^--2 = 100
4^1-3*+-2^+5 = 100
4*1^+4*--5*5 = 100
Alles anzeigen
M