(defun sample (sequence n &optional (random-state *random-state*))
(check-type n (integer 0 *))
(let* ((*random-state* random-state)
(v (make-array (length sequence) :fill-pointer t
:initial-contents sequence))
(s (loop repeat n
for i = (random (fill-pointer v))
collect (aref v i)
do (rotatef (aref v i)
(aref v (1- (fill-pointer v))))
(setf (fill-pointer v)
(1- (fill-pointer v))))))
(cond ((stringp sequence)
(coerce s 'string))
((vectorp sequence)
(coerce s 'vector))
(t
s))))
(loop with *random-state* = (make-random-state t)
repeat 5
for s = (loop for i from 1 upto 37 collect i)
do (format t "~:A~%" (sort (sample s 7) #'<)))
KGRlZnVuIHNhbXBsZSAoc2VxdWVuY2UgbiAmb3B0aW9uYWwgKHJhbmRvbS1zdGF0ZSAqcmFuZG9tLXN0YXRlKikpCiAgKGNoZWNrLXR5cGUgbiAoaW50ZWdlciAwICopKQogIChsZXQqICgoKnJhbmRvbS1zdGF0ZSogcmFuZG9tLXN0YXRlKQogICAgICAgICAodiAobWFrZS1hcnJheSAobGVuZ3RoIHNlcXVlbmNlKSA6ZmlsbC1wb2ludGVyIHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmluaXRpYWwtY29udGVudHMgc2VxdWVuY2UpKQogICAgICAgICAocyAobG9vcCByZXBlYXQgbgogICAgICAgICAgICAgICAgICBmb3IgaSA9IChyYW5kb20gKGZpbGwtcG9pbnRlciB2KSkKICAgICAgICAgICAgICAgICAgY29sbGVjdCAoYXJlZiB2IGkpCiAgICAgICAgICAgICAgICAgIGRvIChyb3RhdGVmIChhcmVmIHYgaSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFyZWYgdiAoMS0gKGZpbGwtcG9pbnRlciB2KSkpKQogICAgICAgICAgICAgICAgICAgICAoc2V0ZiAoZmlsbC1wb2ludGVyIHYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgxLSAoZmlsbC1wb2ludGVyIHYpKSkpKSkKICAgIChjb25kICgoc3RyaW5ncCBzZXF1ZW5jZSkKICAgICAgICAgICAoY29lcmNlIHMgJ3N0cmluZykpCiAgICAgICAgICAoKHZlY3RvcnAgc2VxdWVuY2UpCiAgICAgICAgICAgKGNvZXJjZSBzICd2ZWN0b3IpKQogICAgICAgICAgKHQKICAgICAgICAgICBzKSkpKQoKKGxvb3Agd2l0aCAqcmFuZG9tLXN0YXRlKiA9IChtYWtlLXJhbmRvbS1zdGF0ZSB0KQogICAgICByZXBlYXQgNQogICAgICBmb3IgcyA9IChsb29wIGZvciBpIGZyb20gMSB1cHRvIDM3IGNvbGxlY3QgaSkKICAgICAgZG8gKGZvcm1hdCB0ICJ+OkF+JSIgKHNvcnQgKHNhbXBsZSBzIDcpICMnPCkpKQo=