Skip to content

Instantly share code, notes, and snippets.

@tkych
Created November 28, 2013 12:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tkych/7691226 to your computer and use it in GitHub Desktop.
Save tkych/7691226 to your computer and use it in GitHub Desktop.
;;;; Last modified: 2013-11-28 21:34:45 tkych
;;====================================================================
;; 円周上のCrossing
;;====================================================================
;; - [円周上のCrossing 〜 横へな 2013.9.28 参考問題](http://nabetani.sakura.ne.jp/hena/ord14crosscircle/)
;; - [第14回オフラインリアルタイムどう書くの参考問題](http://qiita.com/Nabetani/items/66806c9dc14a96f2fd42)
;;--------------------------------------------------------------------
(in-package :cl-user)
(defpackage :crossing-points (:use :cl))
(in-package :crossing-points)
;;--------------------------------------------------------------------
;; Main
;;--------------------------------------------------------------------
(defun main (input)
(let ((count 0)
(len (length input)))
(loop :for start0 :from 0 :below len
:for label0 := (char input start0)
:do (loop :for end0 := (position label0 input :start (min len (+ start0 2)))
:then (position label0 input :start (1+ end0))
:while end0
:do (loop :for start1 :from (1+ start0) :below end0
:for label1 := (char input start1)
:do (loop :for end1 := (position label1 input :start (min len (1+ end0)))
:then (position label1 input :start (1+ end1))
:while end1
;; for DBG
;; :do (format t "~%line0(~A): ~D - ~D, line1(~A): ~D - ~D"
;; label0 start0 end0 label1 start1 end1)
:do (incf count)))))
(write-to-string count)))
;;--------------------------------------------------------------------
;; Tests
;;--------------------------------------------------------------------
(defun =>? (got expected)
(assert (string= got expected)))
(progn
(=>? (main "aabbca1bcb") "14")
(=>? (main "111ZZZ") "0")
(=>? (main "v") "0")
(=>? (main "ww") "0")
(=>? (main "xxx") "0")
(=>? (main "yyyy") "1")
(=>? (main "zzzzz") "5")
(=>? (main "abcdef") "0")
(=>? (main "abcaef") "0")
(=>? (main "abbaee") "0")
(=>? (main "abcacb") "2")
(=>? (main "abcabc") "3")
(=>? (main "abcdabcd") "6")
(=>? (main "abcadeabcade") "23")
(=>? (main "abcdeedcba") "0")
(=>? (main "abcdeaedcba") "8")
(=>? (main "abcdeaedcbad") "16")
(=>? (main "QQQQXXXX") "2")
(=>? (main "QwQQmQXmXXwX") "14")
(=>? (main "111222333") "0")
(=>? (main "aaAAaA") "4")
(=>? (main "121232313") "12")
(=>? (main "1ab1b") "1")
(=>? (main "abcdefbadcfe") "12")
(=>? (main "abxcdefbadcfex") "14")
(=>? (main "dtnwtkt") "0")
(=>? (main "mvubvpp") "0")
(=>? (main "moggscd") "0")
(=>? (main "kzkjzpkw") "2")
(=>? (main "fbifybre") "1")
(=>? (main "rrrfjryki") "1")
(=>? (main "wrbbdwsdwtx") "2")
(=>? (main "vvucugvxbvgx") "9")
(=>? (main "ojkjzyasjwbfjj") "5")
(=>? (main "ggffyuxnkyypifff") "5")
(=>? (main "vcgtcqlwrepwvkkogl") "4")
(=>? (main "xeqtmmgppwcjpcisogxbs") "4")
(=>? (main "lukltpeucrqfvcupnpxwmoj") "6")
(=>? (main "zpzswlkkoqwwndwpfdpkhtzgtn") "31")
(=>? (main "bkfeflagfvluelududqjcvfyvytfw") "45")
(=>? (main "rvqbhfmcjjqlpqzulzerxgyowiwrfkmhw") "26")
(=>? (main "qyxvpdtoeexbqsethwjwmqszcxxjnsdoeaet") "144")
(=>? (main "rjmsgmswhcolmpbhmpncziymydyalrcnevsrespj") "133")
(=>? (main "oxetnyjzjbysnwktfwzndlejfndsqeetsnjvsicyjehd") "395")
(=>? (main "wzvddnddzogywcqxbyvagbzmsmtcmrrlbnebmvhaemjouaqim") "219")
(=>? (main "karhphxcxqgsyorhusbumbqzocuzvnwzwcpxgsksrviihxrgsrhji") "461")
(=>? (main "oxgbononhqdxzmkysgijwvxljpaazmgkurkpffeuwywwuyxhyfkicgyzyc") "441")
(=>? (main "sdgsrddwsrwqthhdvhrjhgtxwgurgyiygtktgtughtogzaqmcafkljgpniddsvb") "1077")
(=>? (main "qemhecchkgzhxmdcsltwhpoyhkapckkkzosmklcvzkiiucrvzzznmhjfcdumuflavxik") "1711")
(=>? (main "ffqmsirwpxrzfkbvmmfeptkbhnrvfcywthkwkbycmayhhkgvuyecbwwofwthlmzruphrcujwhr") "2440")
)
;;====================================================================
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment