summary refs log tree commit diff homepage
path: root/src/bin
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin')
-rw-r--r--src/bin/day07.rs59
1 files changed, 22 insertions, 37 deletions
diff --git a/src/bin/day07.rs b/src/bin/day07.rs
index b2289f0..305fd8f 100644
--- a/src/bin/day07.rs
+++ b/src/bin/day07.rs
@@ -1,58 +1,43 @@
 use std::io::{self, Read};
 use std::str::FromStr;
 
-struct Sequence {
-    sequence: String,
-    hypernet: bool,
+fn has_abba(s: &str) -> bool {
+    s.as_bytes()
+        .windows(4)
+        .any(|window| {
+            window[0] == window[3]
+                && window[1] == window[2]
+                && window[0] != window[1]
+        })
 }
 
-impl Sequence {
-    fn has_abba(&self) -> bool {
-        self.sequence
-            .as_bytes()
-            .windows(4)
-            .any(|window| {
-                window[0] == window[3]
-                    && window[1] == window[2]
-                    && window[0] != window[1]
-            })
-    }
+#[derive(Default)]
+struct Ip {
+    supernet: Vec<String>,
+    hypernet: Vec<String>,
 }
 
-struct Ip(Vec<Sequence>);
-
 impl Ip {
     fn supports_tls(&self) -> bool {
-        let any_abbas = self.0
-            .iter()
-            .any(Sequence::has_abba);
-
-        let any_hypernet_abbas = self.0
-            .iter()
-            .filter(|sequence| sequence.hypernet)
-            .any(Sequence::has_abba);
-
-        any_abbas && !any_hypernet_abbas
+        self.supernet.iter().any(|s| has_abba(s))
+            && !self.hypernet.iter().any(|s| has_abba(s))
     }
 }
 
 impl FromStr for Ip {
     type Err = ();
     fn from_str(s: &str) -> Result<Ip, ()> {
-        let mut sequences = Vec::new();
-        let mut hypernet = false;
+        let mut ip = Ip::default();
 
-        for sequence in s.split(|ch| ch == '[' || ch == ']') {
-            sequences.push(
-                Sequence {
-                    sequence: sequence.to_owned(),
-                    hypernet: hypernet
-                }
-            );
-            hypernet = !hypernet;
+        for (i, seq) in s.split(|ch| ch == '[' || ch == ']').enumerate() {
+            if i % 2 == 0 {
+                ip.supernet.push(seq.to_owned());
+            } else {
+                ip.hypernet.push(seq.to_owned());
+            }
         }
 
-        Ok(Ip(sequences))
+        Ok(ip)
     }
 }
 
r'>2020-03-09Import /usr/src/bin/kill from FreeBSD 12.1-RELEASEJune McEnroe 2020-03-09Remove extraneous files from sh sourcesJune McEnroe 2020-03-09Import /usr/src/bin/sh from FreeBSD 12.1-RELEASEJune McEnroe 2020-03-09Remove 1sh sourcesJune McEnroe I'm going to recreate it from fresh sh sources for clean git history. 2020-03-08Add The Stone SkyJune McEnroe 2020-03-08Publish "How I Relay Chat"June McEnroe 2020-03-03Don't use $ inside $(())June McEnroe 2020-03-03Remove setoptJune McEnroe 2020-03-03Use getopts in shell scriptsJune McEnroe WTF why did no one tell me about this? 2020-02-27Style %T outside of Rs in italicJune McEnroe 2020-02-26Add Fierce Femmes and Notorious LiarsJune McEnroe 2020-02-23Add This Is How You Lose the Time WarJune McEnroe 2020-02-22Add See Ya LaterJune McEnroe 2020-02-20Remove wiki scriptJune McEnroe Wikipedia seems to have removed the one-sentence extracts from the opensearch results. Too bad. It's not a wiki script, what we need is a command that fetches single-sentence summaries of articles on Wikipedia. 2020-02-19Add The Obelisk GateJune McEnroe 2020-02-17Add Four Tet — HandsJune McEnroe One from the cafe that caught my attention. 2020-02-12Simplify macOS notify-sendJune McEnroe 2020-02-12Add imbox and notemap to pageJune McEnroe 2020-02-12Collapse simple linksJune McEnroe 2020-02-12Move catgirl up the pageJune McEnroe 2020-02-12Update catgirl pty grabJune McEnroe 2020-02-12Link to cgit /about pages where appropriateJune McEnroe 2020-02-11Separate LINKS from BINS for html to workJune McEnroe 2020-02-11Add margin to Bl-bullet itemsJune McEnroe 2020-02-10Match URLs inside parens or with paired parens insideJune McEnroe 2020-02-10Duplicate effective URL before passing it back to curlJune McEnroe Apparently sometimes it didn't like receiving its own internal storage to parse again. Understandable. 2020-02-09Add To Be Taught, If FortunateJune McEnroe 2020-02-04Add The Future of Another TimelineJune McEnroe Wow. One of the best I've read. 2020-01-31Reorganize the Makefile for the umpteenth timeJune McEnroe Broke out LDLIBS for each bin, and made everything more uniform. 2020-01-28Change scout sensitivity to 1.4June McEnroe idk it seems to work. 2020-01-28Import shows.txtJune McEnroe