and day 6 is much easier.
using fset library, yay. thank you "awesome common lisp" list. and the DO loop.
This commit is contained in:
parent
25709d2a43
commit
0ad5b9d435
|
@ -0,0 +1 @@
|
|||
llqnqffqsqttfffbcfcbcbdcczccfssvwswrwddzlddpdhdwwlvlffjllnjjwjqwjjttwbwcwfccdmmnddgvvpwvvgsshnshsgglljfjzjpjfpfjpplddjcchdhvhlhvllvflfbllsdllgppwjjprjpjrrdwrdrggjvjppgbgttdppwhhcshsvvgpvggsllstsggdjdmjjrvjjszjsjbbsffjwjnwwzjjjvqvfftbffbpffndfdzfdfvdfdggmpmbbwgbgnnbtnnnhggdmdffrqrlrhrzzrmzzmbzzcdcwwzffsrrnfnvfnnvppwjjndjnndtdppgcppsmppljlpjjmlldlsltlglwgwcwnwvwddzrrllwjjnvjvwvppjssncnfcnfcfcczfccpjphjphjjjsgszzhthghjhrjrbrtrjrhrsrfftfzftfmmwmpmgghbggjrrsdswddtjjvnnrwrzrpzzlglwggrnrgrfftnffwwgllrqqzbqbbtltbbgdgpgphggspggplggmcmscsffzcfzzbggdrgrqgrrnlrnrbnnzsnnzcctvvnvwvnwnhhwpwtptllpflfcfttwtjjhwjhhbwhbbtppwhwvhvghvhphpwwcgwwhbbfvbffzpzlllrzlrrbnnrngrnrpnnsszbbqffpsffhfshfhzzqhhcgcgfggzmmdllthhrhnrrwggdqdsstccqllflmflfddjwjzjffvjjfgjgdgbdgdngnpgpnpffsnsjnnbbjdbjbtbmmbrrlbbqmqpqrprjjrbbvnbbzvvcwwlfwfggmhhdhsdhsdhshhqfhfrhhqlqttffpmmjzjqjggqzzdfzflfsllshhvjvfvbfvbbjljhhzrzqqszqzsqqswswbsbzszgzdgzzhjzhhvffhthvtthltthghzhvvjttczttlssvvgjjmsjstjjrfjjhbjbnjbjddqrddnbdnbnwbnbqbmqqgtgqtttcmmqbqrrgrrsrszssvpsvvjqjttjpjwwmwfwttczttgccwhcwwrzwzbwwqbqmqnmqqnfnmmmzdmzmpmssdpsslbbmgmbmlmnlldlccvzzlrzzqbqfqlflwlvlhhtrtcttgnnqhnqqtjjphjhwjhwhpwwvdvfddmndncnppcffhllfvfdfllhgslvtsqhtlfdflcjfmqbnctnfnwqrlqbzrcbvldrffcptsgslqcszqcfdvtpggvdqblwcgmdjqrpjdhtrmvrfrzznspqlfhnjsppbpjdggcwjwprpnlnntgfgmflctqphdmzfvpzzmbzmvrqdgchzmdvjdzmfsslpqvhpgznmpspjpdmlfwwjbbwqbfthghclldpmnsbcwlzswrsnfzbdzpcnrrpspdpfqhvmtfjlppqtphvzzqrwhzccnrgrtgfbfgtwvlwsmcvzmqmhsvztmmvpjzfwzgfwntbrsfthdgrcmgtdsvzcllmcshrlqldrvrnmdgbwttmhczvscrdvfgdvrhfvlghhsfbmrptbwmpnvtsrjlpjlbmmjzwwzbdtjlqqdczqgpzfjslccrcrblhplndblghchczbjjfzlsvvrqhvgdsncgpjhjlprhfhswwbmrnszqzhhlrbqpphvgtfsgmdpjwgcmqnvfdhrqmbspjpdrtdbqnbmbpgqwgmltqwrjprvsfjsmpldcqqbvmfhgzltzfvhlnfdqrphzzjrbdvnnjspvnlnnsdzvgqsqztndjpmnbqtwnpzmmfhsswwnnwwlbnpgbrhzchbnsrwwpprhntngsjzvssttqwfvjrdddtfpgtqqzcwljzmdjtgzdqjjvbqgdttdgvqvlfdsgcjhsmdmwrwdcqdflpfjbfzsvjrzrhhcnvcjblwcdvtbgfhfgcwrcjsrzcdrfwtvdqrghdtrjgdmhrfcsnwwwdpvjtpzdqfgrlmrqscjbfgdbgvflhvdjmnmslvsbcbgwplgqljmlzpgrfjwmvqfwmwrhnmdjhdwgjrngvccrbzmhcqthvvtdtmfqvfczhqbfgzgrmdtprznfzjtrcwqgztchtdmzmnwbfbnbttbvzsflcpsjshgphfdlvhdrcpsqnhjjggbnsqrfpwsdznzcwjbcswwndzbpdnfcbdrfgrmqzvtjttltbntznmqfsmqlgqvlqnrvgrnggslqhbplmgpzwlfzbvwdvrchsnhrnvgmzjdprvvspltcdzmdnlgtmrwnwpdndpdqjltcnmsggrvbprslqhfgmzqtppdpsjcmmbvfgmbpdnwdcgnssfgjhzhrjljdwhrzznscndgbscdmbbtbrnzbqzvcjgjgljbjlrrvdhjdllsnjzhwlmjslghrqplwjwssbzzpdzdfhhsqctlcddnfnnvbcwpdvzdcsgcqpctsjtdtnzpggpzsrrhfjtthqcqhtvwzltbdvdnbgwlppblwzjsqqbcpcrthhrhdnzhdnflqlvbzmcjfcrbmgdgqptfqfbmlfbblqdfmnwgvbdhmcmtmvtggqstjpwhvzjhbgpblmdrnggvrvphbglqgfcphmrgfmrwcdchtwfllqwsnbqttwdcvrwgzjfztmcffppqtmnwpgcrgwtjbdtjlmnpmvlzndljglzblwdrggqvbbfvqcbcbpqttrmqlcqnqvrfqsnlpmwlcgfwfcqpgmszfccbqtcqfwlwqrjjhrdbjqvdmfzjgncjqgqbthpgjgbfdvltbhpnbjqqwrsczrthfhmlzjjjgsjtsvgmwfsjngzfqdqzfhvwjrswvnqvsvvsjdbwlwdcsszdngmmhnnqsgvsrvpnndghrwgzztqczvhcrzdpqtrmrnfsfrlpdnbbtshfhplzqvdvzdvwhwsbpnbzlvcbgptdszjlcgfdzchjcsvhzdljvgpwstzwnssvhztcptnhslggnrschvfnmhcnjvldthtfpqzdvltfgnmtgvlrljhwqdzqfmfblstvfnpfcdsqslrqbztrbfzmsfjtjwhlzfnhrvpfqfqvtdllrvchmqphgljwcspgpwsdwqfdhsqhsflpbcbjjmjrfjrqrqfqcqzqsqcnqhfgsclfnfzblfdhphrvqdpvcqmllrcdnrlwqbrgqsbfqqllcvmglntjwcsjljgntmmldscndfdjcqpwbqpbmfjsgwfwcqbqbbhhgprlbzmvdfjcsmsqvhfhmgrhnwpslztmwbhdgrfzfcmwjswpbpzwstfbfmgwtprmptzjwtrqthrqwgslnmtlfgnvgpwvsfwthtrgwfbnnnwmdcfrpqqztplscvfnfpfwwdnfnzjccnhswwlcrrdqfhvsrnvcdrwmjswzggscplggbwgndsbntqvtrjbmbzrnbbmdjvwrmmtrmfjjhnvrcjcbqlhlthbvtjjczddblbbttmmzgdqmtdqswjdwbjhsrjbvdtqzqdbhhgbttgmgwfgfpczpqpfsddgslltwsvngwbwfbfcdzlqghwdbfzzldjpwpmpjmslwnwbrjjvwcsjgdzjwrrwnvgvrqlgjhwvrgnczspfplhfbtdpbpfqmhbvmcqdgrrjfslzgsqfpwrrrmjdtgbslddwvddrbmrdsdhhnlwsncrmnglrrpvtbrfvjbdmcpgphcdfwnfcglvmlbslttpmjnspqhnmbcqgmncfjjpdfjqhggnswbgppjhllscrvtmtmmbwbpgddtzblscntrmccdpzdnllqpvfdpfpwwvnnbjlzphvqwffwsjmbtllctrjmllwscmldcdrpfrzrqlpwbjwfgmnshzqzgdjqhcwtsqlsjffvzcpnrzmvtlzlgwvrrjtdbcnddbhjgqqzrvhplrbsrwgscjnfmhbcnpdcjqrltgdzzzzbqtsspbcdssbjrzfqdgvhmgdzsjdsqcfwbgrnhrlzgpjmhctqdccmvqzddmcptsjgtfshprqmslvtmtrprfsngrnnpnrccrvnrvcwzrbbnbghlwvcncgzglnqthchhsnzlfrcggdptvwlrbnfwgjpflgrcfzhhgffwcbhwlsdmvmsvvzvdcrlvlnstgz
|
|
@ -0,0 +1,97 @@
|
|||
|
||||
(defparameter *test-input-1* "mjqjpqmgbljsphdztnvjfqwrcgsmlb")
|
||||
(defparameter *test-input-2* "bvwbjplbgvbhsrlpgdmjqwftvncz")
|
||||
(defparameter *test-input-3* "nppdvjthqldpwncqszvftbrmjlhg")
|
||||
(defparameter *test-input-4* "nznrnfrfntjfmvfwmzdfjlvtqnbhcprsg")
|
||||
(defparameter *test-input-5* "zcfzfwzzqfrljwzlrfnpqdbhtmscgvjw")
|
||||
|
||||
(defun all-char-different-p (str)
|
||||
)
|
||||
;; (set-difference (list 1 2 3 1 1) (list 3))
|
||||
|
||||
(ql:quickload "fset")
|
||||
|
||||
(defparameter *test-set* (fset:empty-set))
|
||||
(fset:with *test-set* 4)
|
||||
(fset:set 'a 'ab 'c)
|
||||
(fset:set '(a b c ))
|
||||
(apply #'fset:set '(a b c))
|
||||
|
||||
(eval (macroexpand `(fset:set ,@'(1 2 3))))
|
||||
|
||||
(fset:size (coerce "hello" 'list))
|
||||
|
||||
(subseq (coerce *test-input-1* 'list) 0 4)
|
||||
(let
|
||||
((str *test-input-5*))
|
||||
(do*
|
||||
((line (coerce str 'list) (cdr line))
|
||||
(checked-suf (subseq line 0 4) (subseq line 0 4))
|
||||
(suf-set (eval (macroexpand `(fset:set ,@(coerce checked-suf 'list)))) (eval (macroexpand `(fset:set ,@(coerce checked-suf 'list)))))
|
||||
(ind 4 (1+ ind)))
|
||||
((= 4 (fset:size suf-set)) ind)
|
||||
(format t "another step with ~A~%" checked-suf)))
|
||||
|
||||
(subseq '(a b c d s e t d) 0 5)
|
||||
|
||||
(defun get-index-after-first-quad-unique (str)
|
||||
(do*
|
||||
((line (coerce str 'list)
|
||||
(cdr line))
|
||||
(checked-suf (subseq line 0 4)
|
||||
(subseq line 0 4))
|
||||
(suf-set (eval (macroexpand `(fset:set ,@(coerce checked-suf 'list))))
|
||||
(eval (macroexpand `(fset:set ,@(coerce checked-suf 'list)))))
|
||||
(ind 4 (1+ ind)))
|
||||
((= 4 (fset:size suf-set))
|
||||
ind)))
|
||||
|
||||
(with-open-file (in "day6-input.txt")
|
||||
(let ((line (read-line in)))
|
||||
(get-index-after-first-quad-unique line)))
|
||||
|
||||
(defun get-index-after-first-14-unique (str)
|
||||
(do*
|
||||
((line (coerce str 'list)
|
||||
(cdr line))
|
||||
(checked-suf (subseq line 0 14)
|
||||
(subseq line 0 14))
|
||||
(suf-set (eval (macroexpand `(fset:set ,@(coerce checked-suf 'list))))
|
||||
(eval (macroexpand `(fset:set ,@(coerce checked-suf 'list)))))
|
||||
(ind 14 (1+ ind)))
|
||||
((= 14 (fset:size suf-set))
|
||||
ind)))
|
||||
|
||||
(get-index-after-first-14-unique *test-input-1*)
|
||||
(get-index-after-first-14-unique *test-input-2*)
|
||||
(get-index-after-first-14-unique *test-input-3*)
|
||||
(get-index-after-first-14-unique *test-input-4*)
|
||||
(get-index-after-first-14-unique *test-input-5*)
|
||||
|
||||
(with-open-file (in "day6-input.txt")
|
||||
(let ((line (read-line in)))
|
||||
(get-index-after-first-14-unique line)))
|
||||
|
||||
;;; but in Scala it would be something like this:
|
||||
|
||||
;; "mjqjpqmgbljsphdztnvjfqwrcgsmlb".toList
|
||||
;; .sliding(4)
|
||||
;; .map(_.toSet)
|
||||
;; .zipWithIndex
|
||||
;; .find(_._1.size == 4)
|
||||
;; .map(_._2 + 4)
|
||||
|
||||
;; def findIndexAfterNUnique(str: String, n: Int): Option[Int] = {
|
||||
;; str.toList
|
||||
;; .sliding(n)
|
||||
;; .map(_.toSet)
|
||||
;; .zipWithIndex
|
||||
;; .find(_._1.size == n)
|
||||
;; .map(_._2 + n)
|
||||
;; }
|
||||
|
||||
;; findIndexAfterNUnique("mjqjpqmgbljsphdztnvjfqwrcgsmlb", 4)
|
||||
;; findIndexAfterNUnique("bvwbjplbgvbhsrlpgdmjqwftvncz", 4)
|
||||
;; findIndexAfterNUnique("nppdvjthqldpwncqszvftbrmjlhg", 4)
|
||||
;; findIndexAfterNUnique("nznrnfrfntjfmvfwmzdfjlvtqnbhcprsg", 4)
|
||||
;; findIndexAfterNUnique("zcfzfwzzqfrljwzlrfnpqdbhtmscgvjw", 4)
|
Loading…
Reference in New Issue