<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=Slurpys%2F%EB%B0%95%EC%9D%91%EC%9A%A9</id>
	<title>Slurpys/박응용 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=Slurpys%2F%EB%B0%95%EC%9D%91%EC%9A%A9"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=Slurpys/%EB%B0%95%EC%9D%91%EC%9A%A9&amp;action=history"/>
	<updated>2026-05-15T09:28:03Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=Slurpys/%EB%B0%95%EC%9D%91%EC%9A%A9&amp;diff=39222&amp;oldid=prev</id>
		<title>imported&gt;Unknown at 05:28, 7 February 2021</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=Slurpys/%EB%B0%95%EC%9D%91%EC%9A%A9&amp;diff=39222&amp;oldid=prev"/>
		<updated>2021-02-07T05:28:02Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;김창준씨의 코드를 보고 느끼는 점이 많아 흉내를 내 보았습니다.&lt;br /&gt;
&lt;br /&gt;
재밌는 시간이었구요. ^^&lt;br /&gt;
&lt;br /&gt;
 # -*- coding: euc-kr -*-&lt;br /&gt;
 &lt;br /&gt;
 &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
  &lt;br /&gt;
 * slurpy (slimp and slump)&lt;br /&gt;
 &lt;br /&gt;
 * slump - (D or E) and F+ and (slump or G)&lt;br /&gt;
 * slimp - A and (H or ((B and slimp and C) or (slump and C))&lt;br /&gt;
 &lt;br /&gt;
 ** find slurpy!&lt;br /&gt;
 &lt;br /&gt;
 [example]&lt;br /&gt;
 Slumps : DFG, EFG, DFFFFFG, DFDFDFDFG, DFEFFFFFG &lt;br /&gt;
 Not Slumps: DFEFF, EFAHG, DEFG, DG, EFFFFDG &lt;br /&gt;
 Slimps: AH, ABAHC, ABABAHCC, ADFGC, ADFFFFGC, ABAEFGCC, ADFDFGC &lt;br /&gt;
 Not Slimps: ABC, ABAH, DFGC, ABABAHC, SLIMP, ADGC &lt;br /&gt;
 Slurpys: AHDFG, ADFGCDFFFFFG, ABAEFGCCDFEFFFFFG &lt;br /&gt;
 Not Slurpys: AHDFGA, DFGAH, ABABCC &lt;br /&gt;
 &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 &lt;br /&gt;
 import unittest&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 class UnitPattern:&lt;br /&gt;
     def __init__(self, *args):&lt;br /&gt;
         self.args = args&lt;br /&gt;
         self._remain = &amp;#039;&amp;#039;&lt;br /&gt;
 &lt;br /&gt;
     def match(self, target):&lt;br /&gt;
         raise NotImplementedError &lt;br /&gt;
 &lt;br /&gt;
     def remain(self):&lt;br /&gt;
         return self._remain&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 class Word(UnitPattern):&lt;br /&gt;
     def match(self, target):&lt;br /&gt;
         if not target: return False&lt;br /&gt;
         self._remain = target[1:]&lt;br /&gt;
         return self.args[0][0] == target[0]&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 class And(UnitPattern):&lt;br /&gt;
     def match(self, target):&lt;br /&gt;
         for arg in self.args:&lt;br /&gt;
             if not arg.match(target):&lt;br /&gt;
                 return False&lt;br /&gt;
             target = arg.remain()&lt;br /&gt;
         self._remain = target&lt;br /&gt;
         return True&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 class Or(UnitPattern):&lt;br /&gt;
     def match(self, target):&lt;br /&gt;
         for arg in self.args:&lt;br /&gt;
             if arg.match(target): &lt;br /&gt;
                 self._remain = arg.remain()&lt;br /&gt;
                 return True&lt;br /&gt;
         return False&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 class More(UnitPattern):&lt;br /&gt;
     def match(self, target):&lt;br /&gt;
         if not target: return False&lt;br /&gt;
         moreword = self.args[0][0]&lt;br /&gt;
         for count, t in enumerate(target):&lt;br /&gt;
             if t != moreword:&lt;br /&gt;
                 if count == 0 : return False&lt;br /&gt;
                 break&lt;br /&gt;
         self._remain = target[count:]&lt;br /&gt;
         return True&lt;br /&gt;
         &lt;br /&gt;
 &lt;br /&gt;
 class MultiPattern:&lt;br /&gt;
     def match(self, target):&lt;br /&gt;
         return self.pat.match(target)&lt;br /&gt;
 &lt;br /&gt;
     def remain(self):&lt;br /&gt;
         return self.pat.remain()&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 class Slump(MultiPattern):&lt;br /&gt;
     &amp;#039;&amp;#039;&amp;#039; slump - (D or E) and F+ and (slump or G) &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 &lt;br /&gt;
     def __init__(self):&lt;br /&gt;
         self.pat = And(&lt;br /&gt;
                 Or(Word(&amp;#039;D&amp;#039;), Word(&amp;#039;E&amp;#039;)),&lt;br /&gt;
                 More(&amp;#039;F&amp;#039;),&lt;br /&gt;
                 Or(self, Word(&amp;#039;G&amp;#039;))&lt;br /&gt;
             )&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 class Slimp(MultiPattern):&lt;br /&gt;
     &amp;#039;&amp;#039;&amp;#039; slimp - A and (H or ((B and slimp and C) or (slump and C)) &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 &lt;br /&gt;
     def __init__(self):&lt;br /&gt;
         self.pat = And(&lt;br /&gt;
                 Word(&amp;#039;A&amp;#039;),&lt;br /&gt;
                 Or(&lt;br /&gt;
                     Word(&amp;#039;H&amp;#039;),&lt;br /&gt;
                     Or(&lt;br /&gt;
                         And(Word(&amp;#039;B&amp;#039;), self, Word(&amp;#039;C&amp;#039;)),&lt;br /&gt;
                         And(Slump(), Word(&amp;#039;C&amp;#039;))&lt;br /&gt;
                     )&lt;br /&gt;
                 )&lt;br /&gt;
             )&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def isSlurpy(target):&lt;br /&gt;
     &amp;#039;&amp;#039;&amp;#039; slurpy (slimp and slump) &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
     pat = And(Slimp(), Slump())&lt;br /&gt;
     result = pat.match(target)&lt;br /&gt;
     if pat.remain(): return False&lt;br /&gt;
     return result&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 ### test code   ##########################################################&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 class SlurpyTest(unittest.TestCase):    &lt;br /&gt;
     def testWord(self):&lt;br /&gt;
         word = Word(&amp;#039;D&amp;#039;)&lt;br /&gt;
         self.assertEquals(True, word.match(&amp;#039;DEF&amp;#039;))&lt;br /&gt;
         self.assertEquals(&amp;#039;EF&amp;#039;, word.remain())&lt;br /&gt;
         &lt;br /&gt;
     def testAnd(self):&lt;br /&gt;
         D = Word(&amp;#039;D&amp;#039;)&lt;br /&gt;
         E = Word(&amp;#039;E&amp;#039;)&lt;br /&gt;
         andDE = And(D,E)&lt;br /&gt;
         self.assertEquals(True, andDE.match(&amp;#039;DE&amp;#039;))&lt;br /&gt;
 &lt;br /&gt;
     def testMore(self):&lt;br /&gt;
         self.assertEquals(True, More(&amp;#039;F&amp;#039;).match(&amp;#039;FFFF&amp;#039;))&lt;br /&gt;
         self.assertEquals(True, And(Word(&amp;#039;D&amp;#039;), More(&amp;#039;F&amp;#039;)).match(&amp;#039;DFFF&amp;#039;))&lt;br /&gt;
         more = More(&amp;#039;F&amp;#039;)&lt;br /&gt;
         more.match(&amp;#039;FGHG&amp;#039;)&lt;br /&gt;
         self.assertEquals(&amp;#039;GHG&amp;#039;, more.remain())&lt;br /&gt;
 &lt;br /&gt;
     def testOr(self):&lt;br /&gt;
         self.assertEquals(True, Or(Word(&amp;#039;F&amp;#039;), Word(&amp;#039;E&amp;#039;)).match(&amp;#039;F&amp;#039;))&lt;br /&gt;
         self.assertEquals(True, Or(Word(&amp;#039;F&amp;#039;), Word(&amp;#039;E&amp;#039;)).match(&amp;#039;E&amp;#039;))&lt;br /&gt;
         self.assertEquals(True, &lt;br /&gt;
             And(More(&amp;#039;K&amp;#039;), Or(Word(&amp;#039;F&amp;#039;), Word(&amp;#039;E&amp;#039;))).match(&amp;#039;KKKKE&amp;#039;))&lt;br /&gt;
 &lt;br /&gt;
     def testSlump(self):&lt;br /&gt;
         #Slumps : DFG, EFG, DFFFFFG, DFDFDFDFG, DFEFFFFFG &lt;br /&gt;
         self.assertEquals(True, Slump().match(&amp;#039;DFG&amp;#039;))&lt;br /&gt;
         self.assertEquals(True, Slump().match(&amp;#039;EFG&amp;#039;))&lt;br /&gt;
         self.assertEquals(True, Slump().match(&amp;#039;DFFFFFG&amp;#039;))&lt;br /&gt;
         self.assertEquals(True, Slump().match(&amp;#039;DFDFDFDFG&amp;#039;))&lt;br /&gt;
         self.assertEquals(True, Slump().match(&amp;#039;DFEFFFFFG&amp;#039;))&lt;br /&gt;
         #Not Slumps : DFEFF, EFAHG, DEFG, DG, EFFFFDG &lt;br /&gt;
         self.assertEquals(False, Slump().match(&amp;#039;DFEFF&amp;#039;))&lt;br /&gt;
         self.assertEquals(False, Slump().match(&amp;#039;EFAHG&amp;#039;))&lt;br /&gt;
         self.assertEquals(False, Slump().match(&amp;#039;DEFG&amp;#039;))&lt;br /&gt;
         self.assertEquals(False, Slump().match(&amp;#039;DG&amp;#039;))&lt;br /&gt;
         self.assertEquals(False, Slump().match(&amp;#039;EFFFFDG&amp;#039;))&lt;br /&gt;
 &lt;br /&gt;
     def testSlimp(self):&lt;br /&gt;
         #Slimps: AH, ABAHC, ABABAHCC, ADFGC, ADFFFFGC, ABAEFGCC, ADFDFGC &lt;br /&gt;
         self.assertEquals(True, Slimp().match(&amp;#039;AH&amp;#039;))&lt;br /&gt;
         self.assertEquals(True, Slimp().match(&amp;#039;ABAHC&amp;#039;))&lt;br /&gt;
         self.assertEquals(True, Slimp().match(&amp;#039;ABABAHCC&amp;#039;))&lt;br /&gt;
         self.assertEquals(True, Slimp().match(&amp;#039;ADFGC&amp;#039;))&lt;br /&gt;
         self.assertEquals(True, Slimp().match(&amp;#039;ADFFFFGC&amp;#039;))&lt;br /&gt;
         self.assertEquals(True, Slimp().match(&amp;#039;ABAEFGCC&amp;#039;))&lt;br /&gt;
         self.assertEquals(True, Slimp().match(&amp;#039;ADFDFGC&amp;#039;))&lt;br /&gt;
         #Not Slimps: ABC, ABAH, DFGC, ABABAHC, SLIMP, ADGC &lt;br /&gt;
         self.assertEquals(False, Slimp().match(&amp;#039;ABC&amp;#039;))&lt;br /&gt;
         self.assertEquals(False, Slimp().match(&amp;#039;ABAH&amp;#039;))&lt;br /&gt;
         self.assertEquals(False, Slimp().match(&amp;#039;DFGC&amp;#039;))&lt;br /&gt;
         self.assertEquals(False, Slimp().match(&amp;#039;ABABAHC&amp;#039;))&lt;br /&gt;
         self.assertEquals(False, Slimp().match(&amp;#039;SLIMP&amp;#039;))&lt;br /&gt;
         self.assertEquals(False, Slimp().match(&amp;#039;ADGC&amp;#039;))&lt;br /&gt;
         &lt;br /&gt;
     def testSlurpy(self):&lt;br /&gt;
         #Slurpys: AHDFG, ADFGCDFFFFFG, ABAEFGCCDFEFFFFFG &lt;br /&gt;
         self.assertEquals(True, isSlurpy(&amp;#039;AHDFG&amp;#039;))&lt;br /&gt;
         self.assertEquals(True, isSlurpy(&amp;#039;ADFGCDFFFFFG&amp;#039;))&lt;br /&gt;
         self.assertEquals(True, isSlurpy(&amp;#039;ABAEFGCCDFEFFFFFG&amp;#039;))&lt;br /&gt;
         #Not Slurpys: AHDFGA, DFGAH, ABABCC&lt;br /&gt;
         self.assertEquals(False, isSlurpy(&amp;#039;AHDFGA&amp;#039;))&lt;br /&gt;
         self.assertEquals(False, isSlurpy(&amp;#039;DFGAH&amp;#039;))&lt;br /&gt;
         self.assertEquals(False, isSlurpy(&amp;#039;ABABCC&amp;#039;))&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 if __name__ == &amp;#039;__main__&amp;#039;:&lt;br /&gt;
     unittest.main(argv=(&amp;#039;&amp;#039;, &amp;#039;-v&amp;#039;))&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Unknown</name></author>
	</entry>
</feed>