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 | (defun generate-products (n product m k a b c d &optional (accum nil)) (if (= n 0) accum (generate-products (- n 1) (list (+ (mod (+ (* a (first product)) B) M) 1) (+ (mod (+ (* c (second product)) D) K) 1)) m k a b c d (cons product accum)))) (defun all-x-such-that (lst func) (remove-if-not func lst)) (defun there-exists (lst func) (> (length (remove-if-not func lst)) 0)) (defun there-does-not-exist (lst func) (not (there-exists lst func))) (defun preferred-over (A B) "A is cheaper or equal in price to B, A weighs less or the same as B, and A =/= B" (and (<= (first A) (first B)) (<= (second A) (second B)) (not (equalp A B)))) (defun count-bargains+deals (line-stream) ;;Generate all of the products. (let ((products (apply #'generate-products (append (list (read line-stream));;N (list (list (read line-stream) (read line-stream)));;Product (loop for i from 1 to 6 do T collect (read line-stream))))));;Other ;;Good deal: ;;All X from products such that there does not exist a Y such that Y is preferred over X. ;;Terrible deal: ;;All X from products such that there does not exist a Y such that X is preferred over Y. (list (length (all-x-such-that products (lambda (x) (there-does-not-exist products (lambda (product) (preferred-over x product)))))) (length (all-x-such-that products (lambda (x) (there-does-not-exist products (lambda (product) (preferred-over product x))))))))) (defun foreach-line/stream (file-stream func &optional (n 0)) "Foreach line, (func string-stream-for-line line-number). Line numbers are zero-indexed" (let ((line (read-line file-stream nil))) (if line (progn (with-input-from-string (sstr line) (funcall func sstr n)) (foreach-line/stream file-stream func (+ n 1))) nil))) (defun main () (with-open-file (stream "hackercup-3-input.txt" :direction :input :if-does-not-exist nil) (if (null stream) (error "could not open file") (progn (read-line stream);;Discard the first line (foreach-line/stream stream (lambda (line-stream n) (let ((result (count-bargains+deals line-stream))) (format T "Case #~A: ~A ~A~%" n (first result) (second result))))))))) |
KGRlZnVuIGdlbmVyYXRlLXByb2R1Y3RzIChuIHByb2R1Y3QgbSBrIGEgYiBjIGQgJm9wdGlvbmFsIChhY2N1bSBuaWwpKQogIChpZiAoPSBuIDApCiAgICAgIGFjY3VtCiAgICAgIChnZW5lcmF0ZS1wcm9kdWN0cwogICAgICAgKC0gbiAxKQogICAgICAgKGxpc3QgKCsgKG1vZCAoKyAoKiBhIChmaXJzdCBwcm9kdWN0KSkgQikgTSkgMSkKCSAgICAgKCsgKG1vZCAoKyAoKiBjIChzZWNvbmQgcHJvZHVjdCkpIEQpIEspIDEpKQogICAgICAgbSBrIGEgYiBjIGQKICAgICAgIChjb25zIHByb2R1Y3QgYWNjdW0pKSkpCgooZGVmdW4gYWxsLXgtc3VjaC10aGF0IChsc3QgZnVuYykKICAocmVtb3ZlLWlmLW5vdCBmdW5jIGxzdCkpCihkZWZ1biB0aGVyZS1leGlzdHMgKGxzdCBmdW5jKQogICg+IChsZW5ndGggKHJlbW92ZS1pZi1ub3QgZnVuYyBsc3QpKSAwKSkKKGRlZnVuIHRoZXJlLWRvZXMtbm90LWV4aXN0IChsc3QgZnVuYykKICAobm90ICh0aGVyZS1leGlzdHMgbHN0IGZ1bmMpKSkKCihkZWZ1biBwcmVmZXJyZWQtb3ZlciAoQSBCKQogICJBIGlzIGNoZWFwZXIgb3IgZXF1YWwgaW4gcHJpY2UgdG8gQiwgQSB3ZWlnaHMgbGVzcyBvciB0aGUgc2FtZSBhcyBCLCBhbmQgQSA9Lz0gQiIKICAoYW5kICg8PSAoZmlyc3QgQSkgKGZpcnN0IEIpKQogICAgICAgKDw9IChzZWNvbmQgQSkgKHNlY29uZCBCKSkKICAgICAgIChub3QgKGVxdWFscCBBIEIpKSkpCgooZGVmdW4gY291bnQtYmFyZ2FpbnMrZGVhbHMgKGxpbmUtc3RyZWFtKQogIDs7R2VuZXJhdGUgYWxsIG9mIHRoZSBwcm9kdWN0cy4KICAobGV0ICgocHJvZHVjdHMgKGFwcGx5ICMnZ2VuZXJhdGUtcHJvZHVjdHMgCgkJCSAoYXBwZW5kIAoJCQkgIChsaXN0IChyZWFkIGxpbmUtc3RyZWFtKSk7O04KCQkJICAobGlzdCAobGlzdCAocmVhZCBsaW5lLXN0cmVhbSkgKHJlYWQgbGluZS1zdHJlYW0pKSk7O1Byb2R1Y3QKCQkJICAobG9vcCBmb3IgaSBmcm9tIDEgdG8gNiBkbyBUIGNvbGxlY3QgKHJlYWQgbGluZS1zdHJlYW0pKSkpKSk7O090aGVyCiAgICA7O0dvb2QgZGVhbDoKICAgIDs7QWxsIFggZnJvbSBwcm9kdWN0cyBzdWNoIHRoYXQgdGhlcmUgZG9lcyBub3QgZXhpc3QgYSBZIHN1Y2ggdGhhdCBZIGlzIHByZWZlcnJlZCBvdmVyIFguCiAgICA7O1RlcnJpYmxlIGRlYWw6CiAgICA7O0FsbCBYIGZyb20gcHJvZHVjdHMgc3VjaCB0aGF0IHRoZXJlIGRvZXMgbm90IGV4aXN0IGEgWSBzdWNoIHRoYXQgWCBpcyBwcmVmZXJyZWQgb3ZlciBZLgogICAgKGxpc3QgKGxlbmd0aCAoYWxsLXgtc3VjaC10aGF0CgkJICAgcHJvZHVjdHMKCQkgICAobGFtYmRhICh4KQoJCSAgICAgKHRoZXJlLWRvZXMtbm90LWV4aXN0CgkJICAgICAgcHJvZHVjdHMKCQkgICAgICAobGFtYmRhIChwcm9kdWN0KQoJCQkocHJlZmVycmVkLW92ZXIgeCBwcm9kdWN0KSkpKSkpCgkgIChsZW5ndGggKGFsbC14LXN1Y2gtdGhhdCAKCQkgICBwcm9kdWN0cyAKCQkgICAobGFtYmRhICh4KSAKCQkgICAgICh0aGVyZS1kb2VzLW5vdC1leGlzdCAKCQkgICAgICBwcm9kdWN0cwoJCSAgICAgIChsYW1iZGEgKHByb2R1Y3QpCgkJCShwcmVmZXJyZWQtb3ZlciBwcm9kdWN0IHgpKSkpKSkpKSkKCihkZWZ1biBmb3JlYWNoLWxpbmUvc3RyZWFtIChmaWxlLXN0cmVhbSBmdW5jICZvcHRpb25hbCAobiAwKSkKICAiRm9yZWFjaCBsaW5lLCAoZnVuYyBzdHJpbmctc3RyZWFtLWZvci1saW5lIGxpbmUtbnVtYmVyKS4KICAgTGluZSBudW1iZXJzIGFyZSB6ZXJvLWluZGV4ZWQiCiAgKGxldCAoKGxpbmUgKHJlYWQtbGluZSBmaWxlLXN0cmVhbSBuaWwpKSkKICAgIChpZiBsaW5lIAoJKHByb2duCgkgICh3aXRoLWlucHV0LWZyb20tc3RyaW5nIChzc3RyIGxpbmUpCgkgICAgKGZ1bmNhbGwgZnVuYyBzc3RyIG4pKQoJICAoZm9yZWFjaC1saW5lL3N0cmVhbSBmaWxlLXN0cmVhbSBmdW5jICgrIG4gMSkpKQoJbmlsKSkpCgooZGVmdW4gbWFpbiAoKQogICh3aXRoLW9wZW4tZmlsZSAoc3RyZWFtICJoYWNrZXJjdXAtMy1pbnB1dC50eHQiIDpkaXJlY3Rpb24gOmlucHV0IDppZi1kb2VzLW5vdC1leGlzdCBuaWwpCiAgICAoaWYgKG51bGwgc3RyZWFtKQoJKGVycm9yICJjb3VsZCBub3Qgb3BlbiBmaWxlIikKCShwcm9nbgoJICAocmVhZC1saW5lIHN0cmVhbSk7O0Rpc2NhcmQgdGhlIGZpcnN0IGxpbmUKCSAgKGZvcmVhY2gtbGluZS9zdHJlYW0KCSAgIHN0cmVhbQoJICAgKGxhbWJkYSAobGluZS1zdHJlYW0gbikKCSAgICAgKGxldCAoKHJlc3VsdCAoY291bnQtYmFyZ2FpbnMrZGVhbHMgbGluZS1zdHJlYW0pKSkKCSAgICAgICAoZm9ybWF0IFQgIkNhc2UgI35BOiB+QSB+QX4lIiBuIChmaXJzdCByZXN1bHQpIChzZWNvbmQgcmVzdWx0KSkpKSkpKSkp
-
upload with new input
-
result: Success time: 0.03s memory: 10608 kB returned value: 0
1 1000 1000 1000 1000 1000 1000 1000 1000 1000
-
result: Success time: 0.02s memory: 10608 kB returned value: 0
5 5 1 4 5 7 1 0 1 2 3 1 3 3 3 1 0 1 1 8 1 3 3 3 1 0 1 2 13 5 7 5 9 1 3 2 5 11 2 3 5 7 11 13 17 19
-
result: Success time: 0.02s memory: 10608 kB returned value: 0
5 5 1 4 5 7 1 0 1 2 3 1 3 3 3 1 0 1 1 8 1 3 3 3 1 0 1 2 13 5 7 5 9 1 3 2 5 11 2 3 5 7 11 13 17 19



