1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | import std.stdio; import std.conv; import std.string; struct lref(T) { T * değer; this(ref T değer) { ayarla(&değer); } void ayarla(T * değer) { this.değer = değer; } string toString() { return (değer is null) ? "null" : format("%s", *değer); } } unittest { lref!int l; int i = 42; l.ayarla(&i); auto l2 = lref!int(i); // assert(*l.değer == 42); } struct relation(T) { lref!T * referans; T * değer; this(ref lref!T referans, ref T değer) { this.referans = &referans; this.değer = &değer; } bool uydu() { if (referans.değer is null) { referans.ayarla(değer); return true; } else { return (*referans.değer == *değer); } } string toString() const { return format("%s?=%s", *referans, *değer); } } relation!T eq(T)(ref lref!T referans, T değer) { return relation!T(referans, değer); } unittest { int i = 42; auto l = lref!int(i); assert( eq(l, 42).uydu); assert(!eq(l, 43).uydu); } struct Bileşim(Sol, Sağ) { relation!Sol sol; relation!Sağ sağ; bool uydu() { writefln("uydu %s %s", sol, sağ); return sol.uydu || sağ.uydu; } } Bileşim!(Sol, Sağ) bileşim(Sol, Sağ)(ref relation!Sol sol, ref relation!Sağ sağ) { return Bileşim!(Sol, Sağ)(sol, sağ); } unittest { int i = 10; auto l_10 = lref!int(i); int j = 20; auto l_20 = lref!int(j); assert( bileşim(eq(l_10, 10), eq(l_20, 20)).uydu); assert( bileşim(eq(l_10, 10), eq(l_20, 22)).uydu); assert( bileşim(eq(l_10, 11), eq(l_20, 20)).uydu); assert(!bileşim(eq(l_10, 11), eq(l_20, 22)).uydu); } void main() {} |
aW1wb3J0IHN0ZC5zdGRpbzsKaW1wb3J0IHN0ZC5jb252OwppbXBvcnQgc3RkLnN0cmluZzsKCnN0cnVjdCBscmVmKFQpCnsKICAgIFQgKiBkZcSfZXI7CgogICAgdGhpcyhyZWYgVCBkZcSfZXIpCiAgICB7CiAgICAgICAgYXlhcmxhKCZkZcSfZXIpOwogICAgfQoKICAgIHZvaWQgYXlhcmxhKFQgKiBkZcSfZXIpCiAgICB7CiAgICAgICAgdGhpcy5kZcSfZXIgPSBkZcSfZXI7CiAgICB9CiAgICAKICAgIHN0cmluZyB0b1N0cmluZygpCiAgICB7CiAgICAgICAgcmV0dXJuIChkZcSfZXIgaXMgbnVsbCkgPyAibnVsbCIgOiBmb3JtYXQoIiVzIiwgKmRlxJ9lcik7CiAgICB9Cn0KCnVuaXR0ZXN0CnsKICAgIGxyZWYhaW50IGw7CiAgICBpbnQgaSA9IDQyOwogICAgbC5heWFybGEoJmkpOwoKICAgIGF1dG8gbDIgPSBscmVmIWludChpKTsKCi8vICAgICBhc3NlcnQoKmwuZGXEn2VyID09IDQyKTsKfQoKc3RydWN0IHJlbGF0aW9uKFQpCnsKICAgIGxyZWYhVCAqIHJlZmVyYW5zOwogICAgVCAqIGRlxJ9lcjsKCiAgICB0aGlzKHJlZiBscmVmIVQgcmVmZXJhbnMsIHJlZiBUIGRlxJ9lcikKICAgIHsKICAgICAgICB0aGlzLnJlZmVyYW5zID0gJnJlZmVyYW5zOwogICAgICAgIHRoaXMuZGXEn2VyID0gJmRlxJ9lcjsKICAgIH0KCiAgICBib29sIHV5ZHUoKQogICAgewogICAgICAgIGlmIChyZWZlcmFucy5kZcSfZXIgaXMgbnVsbCkgewogICAgICAgICAgICByZWZlcmFucy5heWFybGEoZGXEn2VyKTsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CgogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAoKnJlZmVyYW5zLmRlxJ9lciA9PSAqZGXEn2VyKTsKICAgICAgICB9CiAgICB9CgogICAgc3RyaW5nIHRvU3RyaW5nKCkgY29uc3QKICAgIHsKICAgICAgICByZXR1cm4gZm9ybWF0KCIlcz89JXMiLCAqcmVmZXJhbnMsICpkZcSfZXIpOwogICAgfQp9CgpyZWxhdGlvbiFUIGVxKFQpKHJlZiBscmVmIVQgcmVmZXJhbnMsIFQgZGXEn2VyKQp7CiAgICByZXR1cm4gcmVsYXRpb24hVChyZWZlcmFucywgZGXEn2VyKTsKfQoKdW5pdHRlc3QKewogICAgaW50IGkgPSA0MjsKICAgIGF1dG8gbCA9IGxyZWYhaW50KGkpOwoKICAgIGFzc2VydCggZXEobCwgNDIpLnV5ZHUpOwogICAgYXNzZXJ0KCFlcShsLCA0MykudXlkdSk7Cn0KCnN0cnVjdCBCaWxlxZ9pbShTb2wsIFNhxJ8pCnsKICAgIHJlbGF0aW9uIVNvbCBzb2w7CiAgICByZWxhdGlvbiFTYcSfIHNhxJ87CgogICAgYm9vbCB1eWR1KCkKICAgIHsKICAgICAgICB3cml0ZWZsbigidXlkdSAlcyAlcyIsIHNvbCwgc2HEnyk7CiAgICAgICAgcmV0dXJuIHNvbC51eWR1IHx8IHNhxJ8udXlkdTsKICAgIH0KfQoKQmlsZcWfaW0hKFNvbCwgU2HEnykgYmlsZcWfaW0oU29sLCBTYcSfKShyZWYgcmVsYXRpb24hU29sIHNvbCwgcmVmIHJlbGF0aW9uIVNhxJ8gc2HEnykKewogICAgcmV0dXJuIEJpbGXFn2ltIShTb2wsIFNhxJ8pKHNvbCwgc2HEnyk7Cn0KCnVuaXR0ZXN0CnsKICAgIGludCBpID0gMTA7CiAgICBhdXRvIGxfMTAgPSBscmVmIWludChpKTsKCiAgICBpbnQgaiA9IDIwOwogICAgYXV0byBsXzIwID0gbHJlZiFpbnQoaik7CgogICAgYXNzZXJ0KCBiaWxlxZ9pbShlcShsXzEwLCAxMCksIGVxKGxfMjAsIDIwKSkudXlkdSk7CiAgICBhc3NlcnQoIGJpbGXFn2ltKGVxKGxfMTAsIDEwKSwgZXEobF8yMCwgMjIpKS51eWR1KTsKICAgIGFzc2VydCggYmlsZcWfaW0oZXEobF8xMCwgMTEpLCBlcShsXzIwLCAyMCkpLnV5ZHUpOwogICAgYXNzZXJ0KCFiaWxlxZ9pbShlcShsXzEwLCAxMSksIGVxKGxfMjAsIDIyKSkudXlkdSk7Cn0KCnZvaWQgbWFpbigpCnt9CgoK
-
upload with new input
-
result: Success time: 0s memory: 2100 kB returned value: 0



