점수 : 37 43
+>-,->,+-><->-[>---+-+<[--->>+><,+>>>++<><<<+<[>--]]><><+-+>+<<+<><+++<[[<[---->-<-]>++>],>,]<,]<+-.
편집 : 이제 내 프로그램은 대괄호를 허용합니다. 그것으로 어떤 상도 얻지 않을 것이지만, 그것은 일부 가중치 RNG가 나를 위해 바쁜 일을하도록 만드는 것입니다.
이것은 내가 C로 작성한 프로그램에 의해 생성되었습니다.
모든 N
문자가 제거 될 때마다 출력은 다음과 같습니다.
N = 0 => 158
N = 1 => 158
N = 2 => 158
N = 3 => 187
N = 4 => 129
N = 5 => 100
N = 6 => 158
N = 7 => 13
N = 8 => 1
N = 9 => 211
N = 10 => 129
N = 11 => 1
N = 12 => 57
N = 13 => 255
N = 14 => Mismatched Braces
N = 15 => 59
N = 16 => 11
N = 17 => 11
N = 18 => 11
N = 19 => 117
N = 20 => 11
N = 21 => 117
N = 22 => 166
N = 23 => Mismatched Braces
N = 24 => 206
N = 25 => 206
N = 26 => 206
N = 27 => 147
N = 28 => 147
N = 29 => 158
N = 30 => 148
N = 31 => 188
N = 32 => 51
N = 33 => 17
N = 34 => 84
N = 35 => 84
N = 36 => 84
N = 37 => 158
N = 38 => 158
N = 39 => 94
N = 40 => 46
N = 41 => 94
N = 42 => 94
N = 43 => 94
N = 44 => 17
N = 45 => 196
N = 46 => Mismatched Braces
N = 47 => 149
N = 48 => No Termination
N = 49 => No Termination
N = 50 => Mismatched Braces
N = 51 => Mismatched Braces
N = 52 => 45
N = 53 => 77
N = 54 => 45
N = 55 => 77
N = 56 => 50
N = 57 => 209
N = 58 => 50
N = 59 => 251
N = 60 => 249
N = 61 => 99
N = 62 => 99
N = 63 => 117
N = 64 => 89
N = 65 => 207
N = 66 => 89
N = 67 => 115
N = 68 => 115
N = 69 => 115
N = 70 => 95
N = 71 => Mismatched Braces
N = 72 => Mismatched Braces
N = 73 => 104
N = 74 => Mismatched Braces
N = 75 => No Termination
N = 76 => No Termination
N = 77 => No Termination
N = 78 => No Termination
N = 79 => Left Overflow
N = 80 => 3
N = 81 => 2
N = 82 => No Termination
N = 83 => Mismatched Braces
N = 84 => No Termination
N = 85 => 133
N = 86 => 133
N = 87 => 0
N = 88 => Mismatched Braces
N = 89 => 158
N = 90 => 0
N = 91 => 4
N = 92 => Mismatched Braces
N = 93 => 0
N = 94 => 158
N = 95 => Mismatched Braces
N = 96 => 0
N = 97 => 157
N = 98 => 159
N = 99 => None
총 37 개의 고유 출력이 있습니다 (숫자 순서).
0, 1, 2, 3, 4, 11, 13, 17, 45, 46, 50, 51, 57, 59, 77, 84, 89, 94, 95, 99,
100, 104, 115, 117, 129, 133, 147, 148, 149, 157, 158, 159, 166, 187, 188,
196, 206, 207, 209, 211, 249, 251, 255
나는 이 솔루션이 최적이 아니라고 90 % 100 % 확신 하지만 그것이 매우 어려울 수 있음을 증명한다 . 분명한 몇 가지가 있습니다. 더없는 .
마지막 문자까지 상징하는 것 같다 이동하는 방법으로 하고, 대괄호 ( []
) 오히려 쓸모없는 것 같다 . 나는 여기에 약간의 생각을했다.
하자 L
(도전, 바이트의 코드의 길이를 수 100
), 및 n
서브 프로그램의 고유 한 출력의 숫자.
들면 L=3
, 여러 형태의 최적의 솔루션이있다 +-.
, n=2
(이 경우, 출력은 1과 255이다 +.
및 -.
각각이.)이 풋위한 최선의 비율 L = 3
로 n/L = 66.67%
. 이 비율은 적어도 이길 수 없습니다 L<10
.
의 경우 L=10
, 솔루션은 그것을 무차별하게하기에 충분히 간단합니다. 최고의 솔루션은 다음과 같습니다 n = 6
.
++>-->+<+. => 6
++>-->+<+. => 6
+++>->+<+. => 6
--->->+<+. => 6
++>---><+. => 6
+++>--><+. => 6
-->++>-<-. => 6
+++>+>-<-. => 6
--->+>-<-. => 6
-->+++><-. => 6
--->++><-. => 6
점수 비율은 n/L = 60%
입니다.
마찬가지로 L->infinity
, 잠재적으로 무한한 경우 255 개의 가능한 출력 만 있기 때문에 비율이 0에 가까워 야합니다 L
.
그러나 비율은 균일하게 감소하지 않습니다. 에 대한 솔루션을 구성 할 수 없으므로 가능한 n=6, L=9
가장 좋은 비율은 L=9
입니다 5/9 = 55.56% < 60%
.
이것은 질문을 얼마나 빨리 그리고 어떤 문제에서 비율을 낮추는가? 위해 L = 100
, 그리고에서 10^9 checks/second
, 그것은 최적의 솔루션을 bruteforce하는 데 시간이 더 우주의 수명보다 몇 배를 취할 것입니다. 이것에 대해 갈 우아한 방법이 있습니까? 그 아래로는 것을 나는 매우 의심 37%
에 대한 L = 100
.
비율은 실제로 최대로 증가합니다 L=100
. 다른 답변을 확인하십시오.
위의 평가를 듣고 싶습니다. 결국 나는 끔찍하게 잘못되었을 수 있습니다 .