From: Neil Smith Date: Tue, 2 Oct 2018 09:14:14 +0000 (+0100) Subject: Task 6 done X-Git-Url: https://git.njae.me.uk/?a=commitdiff_plain;h=983623d7817d92f06b43fce07c51781df9c11ac2;hp=8df06839ba3dc64b556e964e5e04d65c0a01cf8e;p=summerofcode2018soln.git Task 6 done --- diff --git a/data/06-friendships.txt b/data/06-friendships.txt new file mode 100644 index 0000000..ef26e76 --- /dev/null +++ b/data/06-friendships.txt @@ -0,0 +1,1140 @@ +Fatimah Rhiannon +Stan Akeel +Edgar Ace +Inayah Iona +Talitha Halima +Troy Lindsay +Stacie Maciej +Elvis Muhammed +Fiza Ralphy +Jacqueline Elliott +Kendrick Macauley +Miller Michalina +Cerys Riaz +Toyah Leonard +Stan Adyan +Rogan Darcie +Rory Chay +Sachin Jordyn +Mark Demi +Elisabeth Nadeem +Kain Sulaiman +Jordyn Jorden +Letitia Sanjay +Riaz Reid +Neil Haya +Darrell Abby +Anabella Ella-Louise +Ellenor Tamanna +Jasmine Izabelle +Derek Reid +Nathalie Kaan +Jordan Harvie +Amos Emile +Ebonie Evie +Ned Rosanna +Muhammed Nelson +Cara Ameera +Ellisha Darrell +Theia Ameera +Jacqueline Summer +Jaimee Caspian +Nabil Zishan +Alvin Ethan +Lani Maariyah +Kristian Devan +Maira Halima +Terri Bertram +Fiza Woody +Anabelle Bryn +Clara Ismael +Hallie Sulaiman +Eren Keelan +Maciej Ellisha +Bryn Holli +Sultan Jez +Danyaal Dafydd +Harrison Killian +Shaan Baxter +Anita Vinnie +Jaeden Maira +Bert Maja +Corben Nadeem +Jamelia Alvin +Mehreen Fiza +Izabelle Kellie +Caspar Emile +Holly Annie +Nelson Maddie +Ophelia Adrienne +Zoey Marjorie +Amos Cody +Zackery Leja +Shaquille Sanjay +Nyla Clara +Allegra Kaitlyn +Jaeden Micheal +Rohit Josephine +Zishan Bruno +Tamika Oliver +August Kajus +Annabell Alessio +Billie Jevan +Bert Nyla +Kaycee Darcie +Cyrus Suman +Mariah Anabella +Chloe-Louise Sebastian +Caspian Alys +Kaycee Shanai +Natasha Daria +Ralphy Kajus +Aryan Jaeden +Rhiannon Alfie-Lee +Poppy-Mae Bruno +Christos Avery +Sameera Holly +Lilah Sanaa +Cerys Eryk +Prisha Zachariah +Caspian Ishaan +Sulaiman Phillipa +Cayden Freddy +Maja Kier +Grayson Emerson +Emerson Isabella +Isaak Zarah +Gregg Prisha +Kain Ayaz +Christos Angel +Lorelai Herbie +Mahdi Rohit +Asim Mariah +Zishan Kaycee +Jorge Devonte +Haya Valentino +Demi Chloe-Louise +Zarah Lilian +Misbah Ophelia +Cayden Frida +Harlow Vivian +Rehan Emanuel +Fallon Jordan +Roberta Tyler-Jay +Mary Cadence +Aryaan Liberty +Stacie Zachariah +Savanna Haidar +Camilla Leja +Roberta Kendrick +Eamonn Marley +Valentino Allegra +Ophelia Vinnie +Oran Isla-Mae +Inayah Cayden +Ralphy Ophelia +Rueben Jaimee +Poppy-Mae Osman +Alina Rueben +Aarron Preston +Ellisha Elle +Brogan Ismael +Izabelle Baxter +Ralphy Zachariah +Kaydan Kacper +Rehan Madeleine +Emerson Ocean +Lillie-Rose Rohan +Roberta Ishaan +Cadence Annaliese +Fallon Reyansh +Erika Camilla +Darcie Ace +Ameera Joanna +Irfan Darsh +Lani Can +Kobe Fathima +Kendal Lacey +Manisha Ayaan +Toyah Hudson +Tessa Sulaiman +Nabil Michaela +Isha Amos +Fatema Luka +Lindsay Menaal +Ibraheem Jevan +Asmaa Mahir +Rudra Devonte +Muhammed Avni +Rahma Mohammod +Jessica Shaan +Umer Valentino +Natasha Kye +Marlene Hassan +Liberty Avery +Ishaan Veronica +Shaquille Alys +Mckenzie Kerri +Tanisha Haya +Mariyam Lilly-Rose +Gerald Natan +Madison Herbie +Ainsley Madeleine +Jevan Annabell +Ebonie Emma-Louise +Jorden Victoria +Marissa Maddie +Ayaan Reid +Mahek Niall +Evie-Mai Zoey +Nadeem Elyas +Lani Tessa +Ira Emile +Ibraheem Mohammod +Leonard Jevon +Gerald Naeem +Dustin Isla-Mae +Maira Aryan +Derek Zaara +Lillie-Rose Jennie +Shanai Siena +Saira Vivien +Terri Cloe +Reyansh Nicholas +Harvie Kenan +Keelan Xena +Bronwyn Tonya +Skye Zacharias +Marjorie Aditya +Shuaib Kaitlyn +Ebonie Bertram +Poppy-Mae Asim +Kristian Rosemary +Milla Evie-Mai +Darrell Rogan +Ross Olli +Killian Naima +Aryan Sebastian +Amos Salma +Letitia Nadia +Stan Abdul +Sameera Zander +Stan Rory +Skye Camilla +Kerri Ishaan +Kaydan Prisha +Jayden Sophie-Louise +Maryam Viola +Emerson Kai +Huma Javier +Alejandro Elle +Ayaz Nicholas +Leena Fathima +Holli Anabelle +Preston Naeem +Rudra Preston +Madison Katya +Maja Jez +Alfie-Lee Eilidh +Amos Bertha +Tanisha Sameera +Jordan Miller +Angel Emily +Zachariah Woody +Bruno Letitia +Ross Avery +Laurie Bruno +Saira Aryan +Poppy-Mae Tonya +Killian Carlie +Bob Dustin +Cerys Anastasia +Hector Usama +Talha Sonya +Hassan Ayaan +Heath Zunaira +Nyla Kiefer +Toby Jacqueline +Corben Marissa +Mustafa Keelan +Talha Cassia +Haya Holly +Poppy-Mae Kendal +Reanne Elliott +Alastair Whitney +Mariyam Shaan +Reyansh Freddy +Christos Liberty +Theo Anabella +Harlow Nabil +Winifred Fearne +Kain Fallon +Arham Ronald +Jez Nyla +Jayden Zac +Fenton Ace +Cadence Fearne +Indie Alessio +Nadeem Tillie +Mylie Jordan +Kristopher Anastasia +Ross Liberty +Sebastian Salman +Kennedy Ebonie +Micheal Halima +Jacqueline Nahla +Jordyn Bert +Ophelia Anabella +Zarah Rogan +Javier Anabia +Dolores Talitha +Liya Aryaan +Summer Leena +Elle Stacie +Rory Harper +Kuba Amos +Connar Theo +Rosina Cory +Josie Elisabeth +Lilah Emile +Leyla Akeel +Can Kieron +Shaan Viola +Michaela Shaquille +Mustafa Aisling +Fiza Kaydan +Mysha Anabella +Nojus Lillie-Rose +Milla Aditya +Otis Anabella +Jez Victoria +Marlene Eryk +Madison Theo +Tre Fiza +Annabell Ibraheem +Zander Shuaib +Aminah Cosmo +Phillipa Haidar +Momina Crystal +Kobe Mariana +Isaak Rachelle +Keelan Anastasia +Jimi Hal +Amanah Yaseen +Mohammod Jennie +Iman Amira +Avery Fannie +Stacey Ayaz +Sonya Irfan +Reyansh Abdi +Tanisha Allegra +Reanne Danyaal +Jessica Finlay +Zaara Jayden +Karina Ronald +Kiefer Mahir +Maddie Alastair +Hector Ned +Halima Sebastian +Leyla Harper +Bertram Gerard +Salman Halima +Kai Ann-Marie +Jayden Zackery +Ronan Lani +Jaeden Mark +Herbie Veronica +Rachelle Madeleine +Vinnie Shaan +Josephine Adem +Otis Letitia +Laurie Vinnie +Eamonn Alfred +Dustin Winifred +Leja Eryk +Avery Emile +Kristopher Leja +Maciej Fiza +Mariah Stacie +Shuaib Tamar +Isla-Mae Ronald +Marissa Rea +Jordan Luka +Whitney Josie +Shanai Rehan +Shuaib Annie +Gregg Sanjay +Prisha Woody +Kier Asmaa +Holly Ozan +Kai Faizah +Yusef Pollyanna +Mustafa Jayden +Zakk Nahla +Sophie-Louise Leona +Harvie Freddy +Annie Otto +Shanai Caspian +Merlin Aarron +Vienna Fearne +Mariana Rogan +Anabella Lilli +Anabella Raj +Rosina Bryn +Mahdi Mariah +Jasleen Dustin +Liana Rosina +Lilian Mckenzie +Ariana Nahla +Stacie Lorelai +Talha Darsh +Alexandros Kai +Evie Sid +Vivian Fathima +Grayson Lilah +Madison Leonie +Nabil Javier +Caiden Gregg +Faizah Amos +Jo Ellisha +Ronan Luka +Milla Marjorie +Kaydan Lilian +Theia Charli +Luci Leonard +Maisy Ella-Louise +Kaitlyn Millie +Jaime Karina +Maisy Lilli +Osman Alina +Liberty Liya +Ellisha Zishan +Reagan Momina +Emanuel Kelly +August Mariah +Ammaar Amira +Cerys Eren +Ann-Marie Salma +Benito Aizah +Avni Macauly +Storm Eilidh +Shuaib Neil +Sila Jasleen +Angel Lucille +Leja Anastasia +Erika Kristopher +Bertha Sidney +Sabiha Prisha +Allegra Ozan +Dylan Tamanna +Phillipa Kain +Rhodri Crystal +Kellie Nabil +Aarron Leonardo +Deniz Mika +Camilla Humzah +Reyansh Austen +Otis Aizah +Iram Victoria +Cosmo Manisha +Kier Mahek +Halima Jaeden +Miller Beck +Kiefer Ismael +Demi Ethan +Rogan Shanai +Eren Zacharias +Marley Naima +Colleen Tori +Tillie Alastair +Aleah Yaqub +Leonardo Devan +Jaimee Sanjay +Rachelle Kellie +Manav Reid +Saira Mark +Amira Mahdi +Arjun Reagan +Nyla Mahir +Umer Cyrus +Fannie Pollyanna +Corben Elyas +Ira Emerson +Abby Kajus +Tre Finlay +Abdulrahman Nazifa +August Zakk +Dafydd Rohit +Talitha Ethan +Ethan Connagh +Hal Tamika +Tahir Aditya +Annalise Diego +Sila Leonardo +Rea Corben +Cyrus Tamar +Beck Ronan +Maira Salman +Maciej Ophelia +Mark Talitha +Cara Amanah +Nadia Rohit +Adem Caiden +Stacey Savanna +Osman Aizah +Ira Ocean +Connagh Demi +Billie Zakariah +Aminah Troy +Iman Fiza +Emanuel Mehreen +Perry Kaan +Isaak Asim +Rosina Anabelle +Salma Ira +Fenton Mariana +Laurie Adem +Joanna Eilidh +Finlay Rohit +Fenton Ainsley +Tre Rehan +Zakk Stacie +Zachariah Alejandro +Fatema Sulaiman +Kendal Bronwyn +Shaan Darrell +Rosemary Isla-Mae +Shanai Ophelia +Yaqub Nabil +Bryn Ellesse +Alessandra Leena +Suman Otto +Marjorie Evie-Mai +Horace Evie-Mai +Gerard Evie +Whitney Tillie +Mikolaj Momina +Jessica Raj +Sophie-Louise Abdulrahman +Ammaar Fenton +Fallon Michalina +Winifred Leonardo +Shania Frida +Rhiannon Amanah +Salma Grayson +Roberta Izabelle +Maciej Finlay +Jacqueline Otis +Ralphy Rogan +Naeem Ronald +Heath Gia +Mysha Emanuel +Samson Jacqueline +Cerys Xena +Madison Jacqueline +Liana Astrid +Chante Jo +Fearne Devonte +Caspian Toby +Abdul Vinay +Allegra Marek +Iman Gregg +Mohammod Lynsey +Umer Shuaib +Lilian Danyaal +Zishan Rueben +Emanuel Fiza +Rohan Rosa +Mehreen Vivian +Adyan Akeel +Riaz Reanna +Lacey Woody +Alessio Nojus +Aizah Samson +Victoria Sachin +Abdulrahman Keelan +Tamar Allegra +Niall Mahir +Charli Rhiannon +Annalise Mysha +Otis Ellisha +Mylee Cyrus +Osman Vinnie +Marek Mylee +Gary Kaycee +Evie-Mai Hal +Jennie Jevan +Jez Kier +Holly Allegra +Liya Tilly +Cara Rhiannon +Kacper Fenton +Menaal Ayaan +Ned Usama +Marlene Reanna +Marek Sameera +Ella-Louise Zachariah +Sachin Clara +Salman Chloe-Louise +Sanjay Chante +Zakk Rachelle +Kobe Ella-Louise +Maira Mark +Elisabeth Nelson +Tahir Hal +Nabil Anita +Asim Connar +Jordyn Iram +Ayaz Shania +Ella-Louise Elliott +Lani Kenan +Toyah Bertram +Sid Luci +Mylie Luka +Merlin Rudra +Kelly Luqman +Aleah Ariana +Baxter Benito +Neil Ozan +Iona Beck +Letitia Diego +Mariah Herbie +Lilly-Rose Fiza +Rohit Viola +Liya Emily +Lynsey Ibraheem +Dafydd Darcie +Rueben Emanuel +Eren Hassan +Kellie Bronwyn +Brogan Jorden +Micheal Chloe-Louise +Glyn Billie +Zackery Hassan +Akbar Lacey +Ralphy Kellie +Zac Humzah +Viola Edgar +Woody Mariana +Ebonie Hudson +Ethan Chloe-Louise +Kieron Jordan +Alessandra Summer +Deniz Dante +Talha Ellenor +Laurie Rehan +Luqman Zakk +Millie Zander +Shakira Ella-Louise +Huma August +Shania Miller +Kerri Daisy-May +Preston Annaliese +Leyla Adyan +Leona Abdulrahman +Cadence Kristian +Shaan Alys +Avni Corben +Troy Abdulrahman +Finlay Izabelle +Baxter Jasmine +Mustafa Eren +Brogan Sultan +Alessio Lillie-Rose +Zakk Kelly +Kier Ismael +Tori Hector +Zakariah Mohammod +Elvis Elisabeth +Jarvis Ellesse +Troy Maisie +Nadeem Elvis +Ismael Jordyn +Lucille Dionne +Rochelle Menaal +Cyrus Shuaib +Akbar Zakk +Alvin Salman +Bronwyn Zarah +Kennedy Gerard +Elle Misbah +Mylie Cayden +Vivien Aryan +Poppy-Mae Mikayla +Iman Kendrick +Osman Herbie +Dustin Ella-Mae +Tilly Liberty +Micheal Demi +Anabia Mckenzie +Baxter Tre +Eryk Maisie +Isaak Nadia +Amanah Charli +Haidar Beck +Liya Olli +Iona Hallie +Viola Josephine +Shuaib Holly +Rosanna Usama +Tilly Lucille +Anabella Lilly-Rose +Jordyn Mahek +Natan Isla-Mae +Can Miller +Ocean Tommy +Grayson Ann-Marie +Manav Marlene +Maariyah Nicholas +Javier Zakk +Rohan Alessio +Lacey Isma +Lacey Kajus +Prisha Stacie +Phillipa Shania +Sidney Tilly +Devonte Aarron +Lucille Ross +Caspar Salma +Ammaar Lorelai +Demi Maira +Rohit Kelly +Cara Charli +Ira Liya +Raj Chante +Tanisha Kaitlyn +Tyrell Harvie +Summer Isaak +Sid Jevon +Maja Mahir +Aarron Monica +Finlay Adrienne +Maariyah Can +Samson Laurie +Nyla Mahek +Lynsey Rohan +Kobe Kelly +Lilly-Rose Mariana +Eren Jayden +Josie Marissa +Letitia Danyaal +Sid Toyah +Maja Iram +Vinay Akeel +Cloe Evie +Zarah Mysha +Angel Ann-Marie +Rosanna Hector +Niall Keaton +Michalina Jordan +Asmaa Sachin +Nahla Izabelle +Vinnie Aizah +Liana Emmie +Billie Alessio +Jessica Connar +Jorden Bert +Kieron Freddy +Rhiannon Ameera +Maisie Keelan +Gia Maisy +Deniz Cassia +Alessandra Isaak +Millie Mylee +Emile Isha +Rhydian Alfie-Lee +Tyrell Luka +Kellie Amira +Maariyah Jordan +Kellie Fathima +Zachariah Isaak +Maciej Ammaar +Liberty Grayson +Leyla Stan +Tyler-Jay Bruno +Mark Halima +Lani Luka +Horace Oliver +Tyrell Shania +Daria Kye +Elisabeth Marissa +Shanai Lorelai +Kieron Kain +Poppy Vinnie +Cory Liana +Sameera Shuaib +Diego Luqman +Roberta Elle +Reyansh Can +Yusef Lucille +Harlow Tyler-Jay +Alvin Connagh +Laurie Stacie +Summer Adrienne +Prisha Leena +Ozan Tamar +Fatema Cayden +Madeleine Mariah +Poppy Shanai +Madeleine Darrell +Nazifa Mustafa +Kai Pollyanna +Oliver Milla +Clara Jez +Keaton Iram +Ira Dionne +Tommy Ross +Kier Sachin +Sanaa Emerson +Maisie Kristopher +Rahma Rohan +Baxter Otis +Gary Raj +Sonya Darsh +Rehan Lilly-Rose +Anabia Lilian +Manisha Maisie +Glyn Rahma +Michal Marissa +Amira Kaycee +Shanai Alina +Leja Aisling +Marjorie Hal +Bernadette Amira +Mehreen Bernadette +Lacey Baxter +Devan Rudra +Anita August +Leona Leja +Kuba Lucille +Millie Holly +Christos Caspar +Kuba Liya +Corben Elvis +Leonie Bruno +Laurie Veronica +Tanisha Millie +Stan Vinay +Maja Nyla +Annie Haya +Mckenzie Jaimee +Tamanna Darsh +Leonie Lilian +Stacey Jordan +Karson Akeel +Mahir Victoria +Maja Keaton +Alessandra Fathima +Sanaa Alexandros +Michaela Yaqub +Mariah Ammaar +Laurie Michaela +Mikolaj Rhodri +Halima Demi +Jasmine Connar +Ronald Jaime +Astrid Holli +Leonardo Merlin +Aryaan Dionne +Gia Javier +Sanaa Ann-Marie +Austen Shania +Otto Shuaib +Macauley Herbie +Hudson Jevon +Maja Niall +Manisha Zaara +Ellesse Anabelle +Kier Nyla +Alina Gregg +Elliott Leena +Tyrell Maariyah +Rohit Lilian +Arham Mary +Terri Jevon +Vivien Jamelia +Alexandros Liya +Caprice Zaara +Riaz Muhamed +Kaycee Katya +Stan Chay +Zander Umer +Yusef Tilly +Rueben Leena +Isabella Tilly +Ocean Yusef +Troy Jayden +Ronan Jordan +Sameera Allegra +Winifred Gerald +Jessica Viola +Osman Ariana +Leona Caprice +Tommy Ann-Marie +Faizah Ira +Ellenor Dante +Danyaal Veronica +Liya Sidney +Viola Elle +Chay Akeel +Ella-Mae Fearne +Emmie Bryn +Leyla Abdul +Heath Edgar +Harlow Lilian +Kennedy Jevon +Frida Kain +Isma Ralphy +Ella-Mae Naeem +Freddy Can +Toby Madison +Harlow Poppy-Mae +Tommy Isabella +Elif Colleen +Nelson Macauly +Kenan Stacey +Rahma Zakariah +Sachin Keaton +Veronica Bernadette +Dustin Devonte +Tanisha Umer +Rosemary Annaliese +Camilla Leona +Lindsay Eren +Alvin Talitha +Rahma Billie +Harvie Kain +Alastair Macauly +Ismael Mahek +Rhodri Momina +Avni Elisabeth +Sabiha Bronwyn +Toyah Gerard +Zackery Reanna +Osman Bronwyn +Izabelle Sabiha +Connagh Salman +Ariana Rueben +Valentino Annie +Rea Muhammed +Fathima Luqman +Keaton Nyla +Iona Ronan +Vienna Preston +Bronwyn Fenton +Alessandra Asim +Jevan Zakariah +Izabelle Asim +Marlene Zacharias +Lindsay Jamel +Annabell Lillie-Rose +Abdul Chay +Sommer Fatimah +Reid Lindsay +Glyn Jevan +Devonte Vienna +Erika Humzah +Macauley Bronwyn +Kai Isabella +Mika Tamanna +Javier Gregg +Ibraheem Rahma +Aditya Zoey +Siena Rachelle +Macauley Toby +Rosina Jarvis +Demi Salman +Inayah Abdi +Isaak Yaqub +Raj Summer +Anabella Aizah +Oran Natan +Ned Colleen +Cayden Stacey +Nicholas Miller +Freddy Michalina +Ozan Suman +Mikayla Darcie +Kain Fatema +Toby Lilian +Michalina Kenan +Camilla Marlene +Ibraheem Lillie-Rose +Fiza Raj +Akbar Kacper +Amira Dafydd +Zakk Lilian +Xena Derek +August Jo +Lucille Lilah +Zackery Eren +Tyler-Jay Kendrick +Jacqueline Aizah +Jordyn Victoria +Sebastian Talitha +Samson Jo +Javier Kacper +Rohit Aizah +Adyan Vinay +Connar Danyaal +Fatema Freddy +Mahdi Josephine +Jaime Jasleen +Ella-Mae Jorge +Naeem Devonte +Reid Keelan +Aminah Ayaan +Joanna Yaseen +Charli Joanna +Mckenzie Rehan +Lilah Yusef +Indie Jevan +Eren Erika +Saira Connagh +Jo Lilian +Eryk Menaal +Eilidh Rhiannon +Zackery Caprice +Dafydd Izabelle +Lorelai Sanjay +Holli Emmie +Faizah Aryaan +Vinnie Zishan +Summer August +Kerri Mariah +Heath Rueben +Kendrick Lilly-Rose +Marek Ozan +Micheal Maira +Emanuel Woody +Misbah Siena +Karson Stan +Otis Aleah +Lani Fallon +Adyan Rory +Danyaal Misbah +Shania Hallie +Steffan Fatema +Fannie Lucille +Daisy-May Kellie +Abby Michaela +Crystal Arjun +Amira Nahla +Kelly Aizah +Baxter Asim +Michal Muhammed +Bronwyn Anabia +Eren Nazifa +Ellisha Alys +Vinnie Maciej +Rhydian Charli +Menaal Eren +Marissa Nelson +Yaseen Storm +Adrienne Bernadette +Zacharias Caprice +Fatema Miller +Alastair Muhammed +Ainsley Kendal +Anabella Summer +Jessica Kendal +Cory Jarvis +Javier Kerri +Yusef Angel +Ace Woody +Rehan Gary +Asmaa Clara +Kain Haidar +Talitha Salman +Mehreen Kajus +Demi Saira +Muhammed Corben +Izabelle Amira +Ella-Louise Kajus +Chloe-Louise Vivien +Lilian Kellie +Rea Macauly +Mckenzie Jo +Theia Fatimah +Cadence Oran +Otis Danyaal +Maryam Luqman +Jamelia Ethan +Iman Gia +Rogan Mahdi +Rogan Ace +Akeel Rory +Elif Ned +Mark Salman +Christos Kai +Jevan Rahma +Mariah Huma +Hassan Cerys +Faizah Lucille +Jez Brogan +Beck Mylie +Dionne Sidney +Menaal Cerys +Liya Lucille +Reyansh Luka +Cristian Marley +Luka Kain +Perry Nathalie +Zishan Heath +Karina Cadence +Indie Jennie +Edgar Ralphy +Yusef Tommy +Nicholas Kieron +Corben Nelson +Otis Annabel +Nazifa Jamel +Nabil Annabel +Woody Madison +Danyaal Emanuel +Valentino Areeba +Gerard Ebonie +Micheal Alvin +Elyas Avni +Daisy-May Mariyam +Maisy Ainsley +Oran Ronald +Austen Abdi +Caiden Alejandro +Zakariah Jennie +Keaton Mahir +Inayah Kain +Leonie Aizah +Aleah Mysha +Caiden Madison +Mckenzie Poppy +Lani Michalina +Rachelle Benito +Izabelle Kendrick +Caiden Connar +Luqman Caspian +Akeel Harper +Anabelle Emmie +Indie Annabell +Tillie Maddie +Jo Benito +Charli Eilidh +Prisha Zarah +Alastair Michal +Vienna Bob +Vivien Micheal +Fatema Inayah +Macauley Rehan +Shakira Theo +Billie Nojus +Jaime Natan +Iman Nadia +Shaquille Mikayla +Otto Umer +Rhodri Reagan +Alessio Zakariah +Tilly Olli +Reyansh Haidar +Zunaira Anita +Lilly-Rose Kacper +Umer Sameera \ No newline at end of file diff --git a/data/06-small.txt b/data/06-small.txt new file mode 100644 index 0000000..0356e24 --- /dev/null +++ b/data/06-small.txt @@ -0,0 +1,15 @@ +Jacqueline Edgar +Abby Edgar +Anita Harlow +Raj Edgar +Bronwyn Sanjay +Caiden Anita +Raj Finlay +Raj Jacqueline +Ella-Louise Abby +Samson Sanjay +Samson Alessandra +Ella-Louise Raj +Edgar Finlay +Finlay Jacqueline +Bronwyn Samson diff --git a/data/06-smaller.txt b/data/06-smaller.txt new file mode 100644 index 0000000..b2d9067 --- /dev/null +++ b/data/06-smaller.txt @@ -0,0 +1,2 @@ +Jacqueline Edgar +Abby Edgar diff --git a/src/task6/task6-monad.hs b/src/task6/task6-monad.hs new file mode 100644 index 0000000..df52ed1 --- /dev/null +++ b/src/task6/task6-monad.hs @@ -0,0 +1,122 @@ +{-# LANGUAGE OverloadedStrings #-} + +import Control.Monad (foldM_, ap, liftM) + +import Data.Text (Text) +import qualified Data.Text as T +import qualified Data.Text.IO as TIO + +import qualified Data.HashMap.Strict as M +import Data.HashMap.Strict ((!)) + +type Name = Text + +data Group = Group { parent :: Name + , size :: Int + } deriving (Show, Eq) + + +type FriendGroups = M.HashMap Name Group + +newtype State a = State (FriendGroups -> (FriendGroups, a)) + +instance Monad State where + return x = State (\groups -> (groups, x)) + (State st) >>= f + = State (\groups -> let + (newGroups, y) = st groups + (State trans) = f y + in + trans newGroups + ) + +instance Applicative State where + pure = return + (<*>) = ap + +instance Functor State where + fmap = liftM + + + + +main :: IO () +main = do + friendship_text <- TIO.readFile "data/06-friendships.txt" + let friendships = map enpair $ T.lines friendship_text + let groups = execGroups $ mergeFriendships friendships + print $ part1 groups + print $ part2 groups + + +part1 :: FriendGroups -> Int +part1 = M.size . M.filterWithKey (\k a -> k == parent a) + +part2 :: FriendGroups -> Int +part2 = maximum . (map size) . M.elems + + +enpair friendText = (this, that) + where (this:that:[]) = T.words friendText + + +-- run a state monad, extract the groups +execGroups :: State a -> FriendGroups +execGroups (State st) = fst $ st M.empty + +-- including all the friendships is just a monadic fold +mergeFriendships :: [(Name, Name)] -> State () +mergeFriendships pairs = foldM_ includeFriendshipM () pairs + +includeFriendshipM :: () -> (Name, Name) -> State () +includeFriendshipM _ (thisPerson, thatPerson) = do + include thisPerson + include thatPerson + thisExemplar <- exemplar thisPerson + thatExemplar <- exemplar thatPerson + if thisExemplar /= thatExemplar + then do + let thisSize = size thisExemplar + let thatSize = size thatExemplar + let (absorber, absorbed) = if thisSize > thatSize + then (thisExemplar, thatExemplar) + else (thatExemplar, thisExemplar) + absorb absorber absorbed + updateSize absorber (thisSize + thatSize) + else + return () + + +exemplar :: Name -> State Group +exemplar name = State (exemplar' name) + where exemplar' person groups = + let person' = parent (groups!person) + in if person' == person + then (groups, groups!person) + else exemplar' person' groups + +include :: Name -> State () +include name = State (\groups -> + if name `M.member` groups + then (groups, () ) + else (M.insert name (Group {parent = name, size = 1}) groups, ()) + ) + +absorb :: Group -> Group -> State () +absorb absorberG absorbedG = + let absorber = parent absorberG + absorbed = parent absorbedG + in State (\groups -> + ( M.insert absorbed ((groups!absorbed) {parent = absorber}) groups + , () + ) + ) + +updateSize :: Group -> Int -> State () +updateSize exemplarG newSize = + let name = parent exemplarG + in State (\groups -> + ( M.insert name ((groups!name) {size = newSize}) groups, + () + ) + ) \ No newline at end of file diff --git a/src/task6/task6.hs b/src/task6/task6.hs new file mode 100644 index 0000000..355bd96 --- /dev/null +++ b/src/task6/task6.hs @@ -0,0 +1,75 @@ +{-# LANGUAGE OverloadedStrings #-} + +import Data.List (foldl') -- import the strict fold +-- import Data.List + +import Data.Text (Text) +import qualified Data.Text as T +import qualified Data.Text.IO as TIO + +import qualified Data.HashMap.Strict as M +import Data.HashMap.Strict ((!)) + +type Name = Text + +data Group = Group { parent :: Name + , size :: Int + } deriving (Show, Eq) + + +type FriendGroups = M.HashMap Name Group + +main :: IO () +main = do + friendship_text <- TIO.readFile "data/06-friendships.txt" + let friendships = map enpair $ T.lines friendship_text + let groups = mergeFriendships friendships + print $ part1 groups + print $ part2 groups + + +part1 :: FriendGroups -> Int +part1 = M.size . M.filterWithKey (\k a -> k == parent a) + +part2 :: FriendGroups -> Int +part2 = maximum . (map size) . M.elems + + +enpair friendText = (this, that) + where (this:that:[]) = T.words friendText + + +mergeFriendships :: [(Name, Name)] -> FriendGroups +mergeFriendships = foldl' includeFriendship M.empty + +exemplar :: FriendGroups -> Name -> Name +exemplar groups person + | person' == person = person + | otherwise = exemplar groups person' + where person' = parent (groups!person) + + +include :: FriendGroups -> Name -> FriendGroups +include groups person = + if person `M.member` groups + then groups + else M.insert person (Group {parent = person, size = 1}) groups + + +includeFriendship :: FriendGroups -> (Name, Name) -> FriendGroups +includeFriendship groups0 (thisPerson, thatPerson) = + if thisExemplar == thatExemplar + then groups + else groups'' + where groups1 = include groups0 thisPerson + groups = include groups1 thatPerson + thisExemplar = exemplar groups thisPerson + thatExemplar = exemplar groups thatPerson + thisSize = size $ groups!thisExemplar + thatSize = size $ groups!thatExemplar + (absorber, absorbed) = if thisSize > thatSize + then (thisExemplar, thatExemplar) + else (thatExemplar, thisExemplar) + groups' = M.insert absorbed ((groups!absorbed) {parent = absorber}) groups + groups'' = M.insert absorber ((groups!absorber) {size = thisSize + thatSize}) groups' +