10 eShop Games Worth Buying. This is my series where I dive into the eShop, I play a bunch of games, I find the ones that are actually worth buying and I show them to you. It's usually a bunch of games that you could have easily missed and I know that because this is my job. Half of the games in this list I didn't even know existed a month ago. But now I've got to play them, really enjoy them and hopefully that's gonna happen for you too. Like the video, subscribe if you want. This is episode 32 in a series of hundreds of games that I've reviewed so you can go back and watch all of those. Alright, I know you came here to look at some cool games, so let me show you them. Shout out to my Twitch chat for this first one. Balotro? I think I'm pronouncing that correctly. I've been addicted to it recently and it's a game created by a team of one person. I think a large reason why I enjoy this game other than my general obsession with roguelites lately is because the worst part about poker is building a cool hand showing it off just to find out the other player has smoked you with an even better hand. In Balotro, Balotro, I feel like I'm saying it wrong, there is no other hand. You're playing for blinds or rather to beat the ever-increasing score goal each round. You do that by not only building the best hand you can by discarding cards until you get the typical, you know, pairs, four-of-a-kind flushes, straights and so on. Maybe you've played poker and you know all of that? Doesn't matter if you have or you haven't because this is where it gets wacky. Like utilizing a large array of unique Joker cards that alter the gameplay by increasing score multipliers, giving you extra abilities like being able to discard more cards and after each round you visit a shop to spend your money. Here you can buy more Joker cards to stack those crazy effects one-time use cards that have their own unique effects like changing a hand to be all hearts or upgrading certain cards in your deck to a higher quality. You can also enhance cards with bonuses like turning a card into a wild card which is considered to be every suit simultaneously or a glass card which is a two times multiplayer when used but has a one and four chance of breaking each time and for me it seems to break every time. All of that is before we even get to cards that have seals attached to them. I'll leave the seals for you to discover on your own but at the shops you can also buy deck packs and then add all of those cards and more into your current deck.  Crazy how simple of an idea it is but how good it works in practice. Speaking of eShop games on the and I am in the kitchen. Hey kitchen boy you want some coffee just got some new beans in fresh from trade these ones were locally roasted in philly. Well I'm here so sure. Great you want it like regular or I can make it a little fancy. Just regular is fine. Okay watch this. Trade sources the best coffee across the country and brings it to your doorstep. They've built relationships with over 55 roasters nationwide so you can enjoy fresh roasted when you order coffee from the comfort of your own home. You know it really seems like you're making it fancy. Trade is a subscription service that allows you to experience tailored for you coffee delivered straight to your door. Really you don't know I had a friend once that brought beans to my house that came from a grocery store. I throw them down the stairs the beans I mean. No longer will you have to throw your friends down the stairs for bringing crappy quality coffee to your house. Oh this is the good bit. Coffee you deserve today at drinktrade.com forward slash beat em ups. Thank you I highly doubt it was worth all that work. It was worth all that work. Wow that's really good and you're saying you got these beans by going to drinktrade.com forward slash eat em ups and getting $15 off select plans and a free bag of coffee. You said that with trade I'm like the Willy Wonka of coffee. I'm making the best coffee in the world. All right well now I have the energy to finish the video so let's go talk about some more e-shop games. I still don't know how I ended up in the kitchen. Next we have Risk of Rain Returns. My first experience with Risk of Rain was with the sequel Risk of Rain 2. I loved that game. Four player co-op waves of enemies with a giant boss battle at the end of each world literally over a hundred unique items to attach to your body and stack abilities and traits boosting your godlike power into another dimension throughout the run as the difficulty spikes all the way up to maniacal laughter mode. However I never played the original game. It released in 2013. It was made by two university students and a dream but thankfully I don't gotta go back and play that. That's old now. Ew stinky. I can play the remake which is called Risk of Rain Returns. It released recently and fun fact it's actually a switch console exclusive right now with no word on when it's making its way to PlayStation or Xbox. We're winning these console wars boys. If you played the original the remake includes higher resolution graphics, new music, better networking for four player online co-op and new characters monsters and items that were introduced in Risk of Rain 2. And if you never played any Risk of Rain I would say you could either start on this one or Risk of Rain 2. They essentially are the same game with the same gameplay loop just two very different styles of game.  Destroying monsters leveling up and hopefully not losing to the same boss for the fifth time in a row and having to start again. My favorite part is just all the items. They're not just stat increases each item offers a legitimate upgrade like an extra jump exploiting rounds extra lives chain lightning I mean it just goes on and on and on there's over a hundred of them and you can stack all of those too so if you wanted to pick up five extra jumps you can do that. The game seemingly has no limits on what you can combine and I love that it's so much fun. Swigger games seem to take the internet by storm a few months ago and I would honestly be surprised if anybody watching this hasn't at least heard of the watermelon game but I'm pretty sure many of you like me at one point looked at this gameplay footage and went really but yeah I hate to admit it but it's pretty fun for only $2.99 this might be the cheapest game ever in my e-shop series and it's one that Kim and I spent countless hours playing together. It was actually really sweet we would just play on one console and pass it back and forward in between rounds whatever one of us would lose we'd hand it off and we'd just try and compete for the highest score and get so excited for each other if one of us got a watermelon. It's obviously a puzzle game you drop fruits into a container and you can't have them overflow out or it's game over and that is much easier than it sounds because when you combine these fruits they often come together in a big sudden pop and because it's all momentum and physics-based it can blow some of the fruits out of the container. It's shockingly addictive trying to manage the placement of fruit and organizing where everything is put to more efficiently build towards hopefully maybe getting that watermelon which by the way getting the watermelon is not the end goal it's just a very hard to do the actual end goal is just to get the largest score possible there isn't even a way to wipe the screen or get rid of any of the fruit so eventually you will just run out of space but it always feels like you can do better if you just try one more time there's an online leaderboard which is the reason why the game demands to always be online makes no sense and recently they even added paid DLC which introduces competitive modes as well as time limit and attack multiplayer mode some people were really upset that it was paid DLC the base games three dollars and the paid DLC is two dollars and then come on you want to you want them to work for free well that's weaker game how about we talk about penny and her big breakaway developed by evening star the same creators of the arguably best sonic game ever sonic mania and here i believe the story is that they wanted to make a 3d sonic game and they were even being considered by sega to do just that but plans fell through so instead they shifted gears and created penny the whole game does feel and look like something that sonic team would have created for the sega satan back in the day and even more special penny's big breakaway was first revealed during a nintendo direct and later released during that recent nintendo partner showcase we just had and that's despite it releasing on all platforms by the way they just decided to give this to nintendo to show off i think it's because they knew that we would really appreciate something like this all the past 3d sonic and gotta go fast inspiration is clearly here to see but for me this game actually reminds me more of mario odyssey than anything sonic related purely due to its controls and movement it's so flowy with you being able to jump dash yo yo swing through the air and move all in combo succession stringing together crazy moves to essentially fly around the levels utilizing your speed and momentum and i love that kind of freedom it's similar to the feeling of mario odyssey and how you use capi also pennies yo yo is not just for platforming you can also use it to beat things up around all that fun movement there's also a classic 3d platformer flare here with collectibles to be found around the world making you feel like you didn't really beat a level if you're missing half of the stuff there's also npcs with side quests that i didn't expect also angry penguins many levels have these emperor penguins that will chase you down and trigger a game over if they catch you so you just gotta go fast to avoid them these developers clearly have that nostalgic love for a different time in video gaming and they are nailing recreating these classics for us you want to talk about nostalgia i had nintendo systems growing up i never really talk about the fact that i did have a playstation one but i had a very small handful of games i had the die hard game and then we had the tomb raider trilogy but i spent countless hours playing those tomb raider games mostly just roaming around lara's mansion and diving into the swimming pool but now just like metroid prime they're calling this a remaster i would like to argue once again that this is almost a one for one remake whenever i hear remaster i think you've just thrown it into hd but no there was serious effort here every single asset texture model enemy has been remade from scratch they wanted the game to look how you remembered it looking because honestly when i first saw this remaster i was like oh it doesn't look that different but then you see the original and you're like ah that's not how i remembered it lara's character model being the most obviously improved the way that i said that sounds like i'm referring to something in particular no i just mean because that's what you're looking at the whole time that doesn't help there's new shadows and lighting you can even switch between the old and new graphical style instantly they added camera lock on even health bars for the boss battles they even added lip syncing and it all runs at 60 fps on the switch and if you're thinking man i'd love to play these games again but i can't handle those old tank controls they actually improved those too taking inspiration from the future tomb raider games that came later they implemented that style in here but if you're thinking i really wanted those old tank controls they even added those in as an option in the menu you can just toggle them back on hopefully this set of remasters does well because the developers aspire have already expressed interest in remastering more tomb raider games in the future like last revelation and chronicles and they did such a good job i think they deserve to do that big water bottle recently xbox decided to take all their games and release them on all the other consoles because you know i don't really know i don't really know what's happening over there on that sinking ship but good news for us we're getting a couple of great games grounded and pentamin grounded doesn't come out for another month so we're talking about pentamin i've been putting off playing this one for a while i heard about it when it dropped on xbox and not just because it's one of the very few exclusive games the series s and x actually had but because it received essentially perfect scores across the board but i've got to be honest every time i looked at it it was kind of like looking at swiker games really pentamin is all about the narrative which shouldn't be a surprise since it was directed by josh soya who previously worked on fallout new vegas and pillars of eternity it's a role playing game in a 2d perspective where you play as a journeyman artist who becomes entangled in a series of murder mysteries it's very point and clicky and style which i'm known to love so i find it weird it took me so long to try it out pentamin aims to be incredibly historically accurate from its setting plot environments even the in-game dialogue which at some points i did have to double read just to make sure i'm understanding the old yee english at the start of the game you pick your background you can be a craftsman bookworm businessman each one will affect the conversations you have later in the game and how you can navigate situations moving forward and i can't really say much else without spoiling the game again it's mostly just very narrative driven so if you just want to try out something new or maybe this style of game is for you check it out backpack hero man if they didn't do marketing with jukebox hero that would be a waste backpack hero i am constantly impressed with how creative indie games can be with backpack hero literally taking one of the worst and most frustrating parts of video games in general and making that the entire game but somehow making that fun the game is described as an inventory management roguelike and it's all about how well you can organize your bag based on a grid system similar to resident evil 4 you pick your character at the start of the run then you start moving through crypt locations and the locations might have an enemy to fight a shop to buy things at or other surprises then the fights are turn based and play out depending on how you packed your bag and how much energy you have weapons or shields you're carrying the special items that carry bonuses or synergies depending on where they're positioned in your backpack for example an item might give your sword an attack boost if it's placed next to it but that item might not be able to get placed next to a magical item or something or else it nullifies it so you have to make sure you put everything in the right place certain armor might even be stronger if the space above it is empty so now you have spaces you can't use you have items that will fall to the bottom of the backpack no matter where you put them there's a lot you have to consider there are so many ways to build out your character based on what you find in the dungeon and depending on how you organize it can completely change up your build it pays well to battle every enemy on a level explore every area and collect as much as you can before visiting the final boss on the floor as these fights are very hard and if you aren't well prepared or organized probably not going to go well in between runs you can use things you find in the crypts to build homes shops towns and more for the NPCs around the world and that's satisfying in itself but of course doing all of that builds up your strength for the next run down in the crypt the game is so creative and really rewards you for trying and experimenting with new ideas and it's all about inventory management it's like some people hear boring and take that as a challenge all right this next one has a huge caveat caveat caveat i can't talk today caveat yeah that's it i'm sure and that's that the game isn't out yet now i'd love to say that i received an early copy so i've played it but that that would be lying pepper grinder releases in just a few days but there is a demo out right now and man it's awesome so yeah obviously the caveat here is that i haven't actually bought this game and i'm recommending it's worth but you have to remember at this point i've bought and played like 350 e-shop games i'd like to think i have a good barometer of when something is going to be good and this is absolutely that when this was first revealed at a nintendo direct it was a total head turner and stole the limelight of the whole showcase another fantastic game brought to us by devolver digital pepper grinder is an action adventure side scroller that plays pretty similar to something like celeste where you use a drill to traverse through various obstacles puzzles and even as a weapon to defeat enemies and lord even though this is a short demo the controls felt buttery smooth it's as fun to control as it looks being able to swim through the environments and use the momentum to shoot out the other side and land back in somewhere else the levels are also filled with secret areas you can find containing extra rewards or optional pads collecting all of the golden gems really feels nostalgic like an old school super nintendo game so too does the art style and bright colors the level is just in the demo got pretty complex too with you needing to flip these switches in order to open different paths but then that would close other paths creating a puzzle to solve the final climb upwards towards the end of that demo was so satisfying to pull off and felt really epic i've never done this before so i hope you can forgive me for recommending a game i haven't fully played but i gotta tell you i was so upset when that demo finished because i was so ready to play more if for some reason it ends up being really bad i'll make an apology i don't see that happening another reason why i put it in the video there were two other games i thought of putting in this list and i wrote full reviews for them and i just wasn't convinced myself they were worth the money and that was star wars battlefront and far-changing tides star wars battlefront i thought it was so cool that it released with 64 players online like that was awesome to replay those games but the more i looked into it and the more i looked at the $35 price tag and all the bugs and issues that came along with the game i just could put it in the video for 35 even for the nostalgia and then far-changing tides i love far-loan sales it's one of my favorite games i've talked about in my eshop videos and i really wanted to feature the sequel in one of these videos and funny enough it's been in my last few videos list it's always just getting edged out because of how short it is and it's just not as good as the first one so i thought rather than recommending either of those games when i'm not sure they're a hundred percent worth the price i would take a gamble on one that's not even out yet because i loved the demo anyway next cue the beautiful music because we have a highland song that's the name of the game not just the song you're hearing a highland song is a beautiful art piece turned into a magical adventure you play as moira a teenage girl running away from home to visit her uncle hamish who lives in a lighthouse on the coast the gameplay may present itself at first glance like a flat standard 2d left to right adventure but it's anything but it becomes almost a fight for survival at times with you needing to find warm and dry places to rest when you become tired or when the weather takes a turn for the worse the visuals aren't the only gorgeous stand out here as the music also exceeds itself with certain areas even kicking up the volume allowing you to sprint alongside the beat of the Celtic soundtrack as you explore you also find items that you can pick up and hold on to none of these are really needed but it's worth exploring and finding them because they might come in handy later to create a shortcut or open a barn for you to spend the night in or many other secrets you can uncover along the way the voice acting is really well done and carries most of the story as you explore there are tons of optional branching paths with no set way of moving through the game which not only adds to replayability but really makes it your specific adventure as you move towards the lighthouse each person exploring is going to have their own unique adventure and then you can play it again if you want to see what you missed the animations are all hand drawn and very studio ghibli there's a lot to appreciate here I will say though it's not super video gamey kind of similar to pentamin you're not really playing an action game you're experiencing an adventure you're going on a magical adventure in this one it was short but it was sweet okay but forget all the other games because now it's Dave the freaking diver time this game combines an action adventure with restaurant management it's like two games in one the main bulk of the game has you diving into an ever-changing ever-expanding ocean gathering ingredients catching fish and discovering mysteries drowned deep beneath the sea then by evenings you run a busy ever-changing ever-expanding sushi restaurant serving up your fresh catches and trying to turn the biggest profit possible to continue funding your deep sea adventures it's such an interesting concept with such an addictive gameplay look the deep sea diving has you equipped with a harpoon gun for attacking and reeling in fish there's an array of other weapons you can find as well as melee weapons and other wacky items you can find to pommel sharks with you have a limited amount of oxygen and if you run out before returning you'll lose everything you found on your dive so you use that money that you earn in the sushi restaurant to improve your equipment where you find new fish materials and even other secrets the sushi restaurant part has you select the evening menu according to what you caught the sushi chef will start creating the mills people order it's your job to bring them their food and serve them drinks this is manageable at first but as the restaurant grows you'll need to hire people to help out serving or in the kitchen occasionally VIP customers will request specific dishes or ingredients which will require you to go and hunt in the ocean but doing so will give big rewards and then further into the game you even get a farm to grow rice and vegetables extra mini games and all throughout there are multiple side characters each with side quests like there's a whole side plot with an outer shape ash ketchup who rewards you if you catch them all the fish i mean not like you know pokemon the pixel art style speaks for itself here but it's beautiful and full of vibrant color and charm there's been so much cool doc for this game already i don't think we ever talked about dredge another sea base game on the switch but they did a doc collaboration with dredge which is really cool to see there's also godzilla doc dave the diver is an unbelievable gem in fact i can tell you now if we do another 300 of these games and i make another shirt dave would probably be right here in the middle right now he's winning that spot and that is another 10 e-shop games worth buying actually i think it's 12 if you want to count star wars and uh i've already forgotten oh loan changing time we'll say nine and a half because one was a demo but hey that's just a theory no that's what it sounded like i was about to say what am i doing i've been sick for like a week now i am delirious man i'm surprised i even got through this video but i will say one last thing at the end here every time i make one of these videos it's usually really easy to find 10 games especially when i hadn't made one in half a year but i can see that the e-shop is clearly slowing down and i think at some point this year we're gonna see the switch to get revealed and apparently it's coming next year i'm very excited for that and i can't wait to start making these videos for a whole new console mysterious times almost as mysterious as the ocean dave the diver i'm gonna get out of here subscribe maybe do what you want i love you bye


Hello, good morning and welcome to day 84 of the Mindfulness Challenge. My name is Julian Jenkins, if you don't know that. You probably do by now if you followed me from day 1. Day 83 was all about reflection. Day 84 is all about midweek Wednesday joy. We've talked many times before now about how happiness is a level that we're born with and that we can use mindfulness to recreate and change the neuroplasticity that's going on within our minds and to be able to raise our happiness levels. So, as I've said before, people are born happy. Some people are born not so happy and those happy bars really sit here and if we can work on them and help to build them, then we can bring more happiness to our lives. I said before as well, when we get to this level, this bar, we might have ups and downs so we might have a flux so we might win the lottery, as I've said before. You see it, 12 months in, they're back down to where they were. I wish I had won this money and I'd have split up and divorced him from my wife and all of these things. Maybe not a bad thing, that one. But you know what I'm saying, OK? But also then, conversely somebody passes away and you drop down a level but 12 months time, you start to come back to that level. So how can we cultivate and build our level of happiness in a way that allows us to be more happy? Well, you know the answer and you know what's coming. It's called meditation and by now on day 84, you might be quite well aware of meditation. OK, and to be able to enjoy joy, to be able to be there with no other feelings because sometimes you know, and I've done it, I remember when this coronavirus started. I remember sitting at my garden at a barbecue on, I had a beer in my hand and I was thinking to myself, I feel terrible. I feel like a fraud, I feel like I should be doing more. But what we've got to remember is, is that as my brother quite rightly told me, I'm actually doing what the government has asked me to do, which is to stay at home. And I'm playing my part by social distancing, not going out. I'm not a doctor and unfortunately my knee doesn't allow me to go and do a lot of frontline work like I did in the snow of this year and the floods. But you know, it's hard and I felt really guilty. I felt guilty of my joy and how many of us can say that, you know, we have felt guilty over the years for the pleasure that we've had.  And is that the same thing? I don't know. I think we all like our guilty pleasures. But coming back to it, we don't need the feeling of question in our happiness. Question whether we're worthy of the joy that life can bring. We're worthy of all of these things that love and life brings you. And just bathe in that happiness, bathe in the joy and those moments of pure elation. Those moments of pure happiness, of moments of, you know, all the things that we talk about. So how can we do that? So first of all, I want you to understand innately that, and I was talking to someone this morning, our karmic energies, our karmic energies, and if you understand karma, what energies you send out, we will get back. So if we send out happy positive energies, happy positive energies come back, if we send out negative energies, negative energies come back. And I believe, I really do believe in the karmic system. But I believe in the karmic system on a long game. So somebody says, yeah, but he's not very nice. He's got many on a long game, OK? It doesn't mean that next day or the day after it. But I always believe what goes around comes around and that will be justified in what we do. So when you get happiness and you've been given happiness and you feel that joy, bathe in the fact that that karmic energy at that time is giving it to you because you deserve it. And you're worthy of it. And you should enjoy it and breathe it moment by moment, breath by breath.  And I'm not saying be selfish because that's not what we're talking about. We talk about more compassion, more love, more empathy, more everything else. But just allow yourself to enjoy that moment. Why not? You know? And not question it and not beat yourself up and think, oh, I've got to go this now. No, enjoy it. Enjoy that moment. We all deserve these moments of joy, love, and everything else. So today we're going to do a meditation about joy.  I'm going to put a picture up. And all I want you to do is just to take three very deep breaths in and just hold them for two seconds and let them out.  So breathe in relaxation, breathe out calm. Breathe in relaxation, breathe out calm. Breathe in relaxation and breathe out calm. And like with all of these things, really, when we start a mindfulness practice, it's always good to check in with yourself. Just drop your awareness now to your heart, to the centre of your chest. And just breathe in relaxation and breathe out calm.  And just see how it feels and just give it a little wiggle. And just you may hear a crack or you may feel, oh, that feels better. Releasing some of the tension in the builds. We carry a lot of karmic, cosmic aura, energy on our shoulders.  Drop it backwards so you just get comfortable in your chair.  And just bring that to mind and just notice how it feels. And bring it to mind with some very vivid detail. So if this joy was with somebody, look at all the details, look at their contours of their face and how they're smiling and their energy and how beautiful it is with happiness surrounding you. Or if it's something you've done in the garden or just bring it to vivid awareness.  Just bubble up inside you. And I just want you to say a mantra is as you're feeling all of this and you're seeing the awareness and you're not attaching yourself to it too much but you have the ability to separate yourself from this memory, this awareness and to be able to bathe in the beautiful energy that surrounds it. And I want you to say, I am happy, I am worthy, I am love. I am happy, I am worthy, I am happy, I am worthy, I am love. I am love. And just keep saying that mantra now for a few moments. I am happy, I am worthy, I am love.  And see how it feels to watch somebody else be happy and that you now can be happy for them unconditionally with no aspirations, no jealousy. Just watch them and join in their happiness whilst they're being happy, you can be happy too. And even if things aren't going well for you you can still bathe in the happiness of others without jealousy, without resentment, but just with pure happiness, worthiness and love. And as you watch this person being happy it makes you happy unconditionally and say to yourself, we are happy, we are worthy, we are love and again. We are happy, we are worthy, we are love. And when you keep repeating this mantra you feel the happiness energy, the energy of self and the energy of love build all around you. Which allows us to increase our happiness bar within our own mental function creating through neuroplasticity a new level of happiness. We are happy, we are worthy, we are love.  Them having joy, them having laughter and although this may feel uncomfortable at the beginning we realise that we are all happy, that we are all worthy and that deep down we are all love and for you to be able to bathe in the joy for them will give you unconditional forgiveness and will allow you to heal and will allow acceptance and love and as you see them being happy you feel your happiness growing because we are all happy we are all worthy, we are all love and even forgiveness and acceptance it may not be for them it may not allow you to be happy to feel more worthy and to truly love yourself the ability to be love and give love and finally I would like you to bring to mind to your awareness somebody who's passed over who you really loved and think of a fond happy memory of the two of you together feel that historical love feel the unconditional worthiness and feel the abundance of happiness and joy we were so happy we are so worthy and we are so in love and feel that happiness and the memories may bring an emotion to the tear to the eye but those tears are tears of joy tears of happiness tears of unconditional love kiss that person goodbye and take three very deep breaths in and breathe out when you're ready just slowly wiggle your fingers and come back into the room so I sort of went down with it there what's interesting about happiness and joy is that it sort of wears many different coats and the ability to have unconditional happiness and joy for others who may not be our friends or in our best books is loving kindness which that loving kindness will allow us to have that level of loving kindness for ourselves which is beautiful and extremely powerful Day 84 of the mindfulness challenge good morning Julian I love you be love and give love and remember that unconditionality is key for us to live a world that we want to live in unconditional love unconditional compassion unconditional empathy it is in its purest form there are no conditions there are no conditions whatsoever which means there's equality and with unconditional equality you have true equality and I pray for that every day thank you for being with me on Day 64 it's all about joy and happiness so go and have a joyful and very happy day and I'll see you tomorrow take care, bye bye


Okay, so in the first video about dynamic pigeon, I covered really almost all the language. I left out a handful of operators. We'll get to some of those in this video, but this video is mainly going to be about just showing some practical examples of some very simple programming exercises using dynamic pigeon. Out of the gate though, I need to make some corrections because in the first video, I forgot I'd actually changed the language where instead of the append operator, it's called push. This is to avoid confusion down the line when you learn go because in go append is like push somewhat, but it's different. So instead we're going to call it push. That's how you tack things on to the end of a list in pigeon. And then the foredeck loop I explained incorrectly because it counts down through the end. It doesn't stop at the last, the end value it goes through it. So here's what that means. It means if we have foredeck i5-0, well, the first value is not five. It's actually one less than five. And then the last iteration, the value is going to be zero. So it's actually doing the test of whether i is less than or equal to this end value. I'm sorry, greater than or equal to this last value and it keeps iterating while that's true. So only once we get to negative one in this case is the loop going to end. So just want to make that clear. So our first practical example is there's a famous programming exercise called FizzBuzz. It's just a little test of very basic programming knowledge, very basic logic. And what we do in this exercise is we want to print all the numbers from one through 100, including 100, except for the special cases where numbers are evenly divisible by three, instead we'll print fizz. For numbers that are evenly divisible by five, we'll print buzz. And for the case where numbers are evenly divisible by both three and five, we're going to print fizzbuzz. So say 15 is evenly divisible by three and five. So instead we'll print fizzbuzz instead of 15. So first thing we need to do is obviously we need to iterate through the numbers from one to 100. So how do we do that? Well, okay, so here's just a main function, a program where we're iterating from one up through 100. We could write it like this where we have a local variable i to counter variable for a loop, initialize it to one, because that's the first value we want it to have through the loop. And then the last, to make sure this keeps going, while we're incrementing i here at the end, right? And to make sure this keeps going through 100, we make the condition less than or equal, not less than. For a less than, it would stop at 99. The last iteration would be 99, but we want it to print 100. So we want it to be less than or equal. So that's one way we could write the loop. A bit more compact though, is if we could use four ink, and just the important thing to keep in mind here is that for four ink, it starts with this value, i will have the value one, but then the condition is keep iterating while i is less than this value. So we actually have to make it 101 so that it will include, it's gonna be one greater than the last value that we wanted the i to half, right? So this is how we're gonna write our loop. Question is, okay, so how can I test if a number is evenly divisible by another number? Well, one way to do that is if you could get the remainder of division, if you could perform division and what you get back is not the result of division, but the remainder, then you could test if that remainder is zero. So if I divide three by three, the remainder should be zero, right? If I divide six by three, the remainder should be zero. So numbers that are evenly divisible by three, there's a remainder of zero when we do division. Well, the way the division operator works, the div operator works in Pigeon is that it always, it just gives you a single number, it doesn't give you the remainder. There's no remainder, it just gives you a fractional value. So if you divide, let's see, three by four, you get 0.75, right? So if you wanna get remainder though, there's an operator called mod, which stands for modulus, which is an operation in mathematics that's defined. It's basically, it's like giving you the remainder of division. It's a little more complicated than that, but for our purposes, that's close enough. So if we do mod n, these two variables, n and divisor here, whatever n is divided by divisor and we get back from this, the remainder, not the result of division, but the remainder. Anyway, so we've defined this function is evenly divisible and we're gonna pass in some number we wanna test for what is, if it's evenly divisible by something and whatever number we want to be evenly divisible by, we'll call the divisor. And so we do mod n divisor and test if the result is equal to zero. That's what this expression is doing and that's what we return. So this function will return either true or false. So here in main, for example, if we test is evenly divisible with seven for n and three for the divisor, well, let's see, seven divided by three is two with remainder one. So in here, this would return one and one is not equal to zero. So the function call would return false. So you should see this printed out. You should see seven is, oops, sorry. The condition will be false. So we're gonna skip down here to the else and this is what you're gonna see printed out. Seven is not evenly divisible by three. Okay, we don't really need, well, the question is, do we need this function? We'll come back to that in a second. But for now just, we'll have that function that we've defined here. And now we're going to go back to our loop, which is four inking from i starting at one up two, but not including one on one. And we're gonna need two local variables, by three and by five. And we're gonna test is, as we, each time we go through the loop, we test if i is evenly divisible by three and store the result in by three. And we test if i is evenly divisible by five, store the result in by five. And now we need to do our printing of like fizz, buzz and fizz, buzz. There's actually four possible cases. It's a mutual exclusive choice between four possibilities, print fuzz, print buzz, print fizz, buzz, or print the number itself, whatever i is currently. So this is the case where the number i is evenly divisible by both three and five and we're gonna print out fizz, buzz. Otherwise, if just by three is true, then we print out fizz. And if otherwise, if by five is true, then we print out buzz. And if none of the other things are true for number like two, which is not evenly divisible by three or five, then we're gonna print it out. So this is actually a working solution for fizz, buzz. There's a debatable point of style here of do we really need this function here? Do we, should we have this function or just take this expression and plug it in place? Is this really all that complicated? Well, they're competing schools with a lot about this question. In many cases, it'll seem useful to define functions even if they do something very simple because instead of having maybe a confusing expression where you scratch your head and look at it and say, well, what is that about? Instead, it'll have a more descriptive name.  So, arguably, you might just wanna write the code this way where you directly put these expressions. Instead of having a separate function, we just plug this expression and just manually plug in the different values. This would be just totally equivalent. That's a stylistic question. But also here, we've changed something where this code is no longer correct because what we had up here, we had the test for by three and by five, that was first. Here, we're changing this around. We put the by three test first and now the code is wrong because what's gonna happen in the event that if we're a number that like say 15, which is evenly divisible by three and five, in that scenario, what's gonna happen is this condition's going to be true. So, we're gonna print out fizz and then skip over the rest of the stuff. We want it to print out fizz bus because this should be true as well but because this condition comes first, the order of these conditions are tested top to bottom, if you have an if or the bunch of elfs. And so, in some cases, like this one, it's gonna matter what the order is because in some cases, multiple conditions can be true and whichever one comes first, that's gonna be the one that executes. So, when you solve fizz bus, make sure to put this test first. Okay, here's finally something that's actually practical. A very common thing you want to do in code is take a list and extract out a range of elements from that list. So, like you have a list of 10 elements and you wanna get back another list which has all the same elements from say like index two up to say like index seven. You wanna extract out a sub list and so we're creating a function here called sub list which does exactly this and it takes as its first argument a list which we're just gonna call a and then it takes also an integer for the start index, we'll call that start and an integer for the end index, we'll call that end. And we're gonna get back, what we want back is a new list with all the same elements from start up to index but not including end. So say if start is two and end is six, then we're gonna get all the elements from index two up through but not index five. So we're not including six and is one past the last element we want. There's a reason for that. This is a common convention where you specify, when you specify ranges of things the last index is not inclusive, it's one past. That's, it works out to make common idioms in code, common patterns in code just a little more compact. It's something you just kind of have to see for yourself of why that's convention. Anyway, so looking through the logic here, well here, I'll just demonstrate some calls you have, we're gonna create some variable a that's gonna store a list. It's just a coincidence here that the list to sort of variable a has nothing to do with this a here, right? This is a totally separate variable of a separate function, right? They just, it's a coincidence. They don't have to be called the same thing. We have a variable a, we're just gonna store a list of strings that are just letters of the alphabet. So a, b, c, d, e, f, that's six elements. And we're gonna get a sub-list of a and if we specify starting index zero and end index four then we're gonna get back a list of a, b, c, d. So it's a list, you know, a is at index zero, b is at index one, c is at index two and d is at index three. And that's where we stop, one less than the number specified here. We don't go to four, we stop one before it. And then likewise, sub-list a, two, six, well it's starting at index two, which is c and ending at index five, which is f, et cetera. So I won't go to the rest. Well, okay, so here's an example. If we say two and two, then we get back an empty list. If the end index is less than the start value then we get back also an empty list. Okay, so looking at the logic in the function we create another local variable which we'll just call b and we'll create a new list and assign it to b. The list starts out empty and we want to iterate through all the elements in the list from index start to end. We're not gonna use a four each loop. That's, you know, if you're gonna iterate through an entire list it makes sense generally to use a four each loop. It's more convenient, but because we wanna go only through a sub-range and we're not necessarily going through the whole list then it makes sense to use a four rank where we can specify the start index and the end index. Okay, so what we then do in the loop is given, you know, we get the element at index i of a and we tack it on to the end of the list b with push. So we're pushing to be an item from a. So once we get to this loop that should be everything we need. b has been, it started out empty but each time to the loop we're adding another thing to it and by the time we get through the loop it now represents that sub-range specified by the caller of the function. So then we're done and we just returned b and that's the end of this function. So another very common thing we wanna be able to do in code is to take a list of strings and join all of those strings as we say into one string like going through them all concatenate them all together. But then often when we concatenate these strings together we wanna be able to say that in between all of them is some other string. So we have the join function here. We specify a list of strings which we call strings here and then a separator string. And if you look at the example usages down here we have our list which is a b and then cat and dog. If we join a join the list with an empty string an empty separator string we get back a b c cat dog with those spaces in between nothing in between. If we have join a with a string with a single space here that's what this is then we get back a string with all the strings of the list joined together but with spaces in between here the separator is comma space and so you see comma spaces looks like a comma separated list and then just for an arbitrary another example just two dots in between and here you go. So looking at the logic we're gonna have two variables s and last index we'll explain them in a second. But first thing we do is we check if the length of the strings is zero. If there are no strings in the strings list then we're just gonna return an empty string. We'll treat that sort of as a special case. And then we're gonna assign to s an empty string because in the logic here we're gonna go through the elements of strings and build up s each time through by concatenating whatever s currently has and then assigning that to s. It's gonna be very similar logic to what we did up here where we have this empty list and each time through the loop we're building up the list by pushing another thing to it. So logically it's the same thing down here. And we save two last index the length of the string minus one because it just works out if you, as you see we're using it in two places that's why I created a variable. Without the variable here I'd have to, I mean we could have written that way we could have just like plugged this in in place but I thought that looked a little ugly. So I created a variable and anyway so the reason we need last index here is because first thing we need to do is we need to go through all the strings of the list except for the last one. We need to treat the last string of this list like dog here as a special case because we wanna attack the separator. We wanna put the separator after each one of the strings except for the last one. So that last string is a special case. So we need to iterate through all of the lists and all the strings in the list except the last one what I've done is I've used sublist to get another list which is just like strings but has but is missing that last element. So this loop here is gonna iterate through all the element all the strings except the last one and each time through we're gonna concatenate what S is currently tack on V here is the string from the list of strings and then the separator and then that's the new S. So by the time we get done here S will be the joining of all of the strings with the separator except for the last string. That's the missing piece. And so what we do in the final statement here is we're gonna take what S is currently which is missing that last element and the last element and concatenate them together and that's our return value. So that's the join function. So very much like we wanna take a list and sometimes extract out a sublist a portion of elements, a range of elements from the list. We wanna do the same thing with a string where we extract out another string which is made up of some range of characters within the larger string. So for that purpose we create a function called subster as in substring and here for example we call it with hello world with index zero up to but not including index four then we get back hell and if we do so with index three to nine then it gets us back low comma space were that's six characters starting at index three up to but not including index nine and then if we call hello world with indexes five and six then we get back comma because that's index five right here, right? Yeah, zero, one, two, three, four, five. Okay and looking at the logic here we create a local variable called chars and we're introducing a new operator here. We didn't talk about this before the charlist operator given a string returns a list of strings where each string is a character of the input string. So given hello world you would get back a list where the first string is just a single character capital H the second is the single character lowercase e the third is just a single character lowercase l et cetera, right? So that's then stored in chars and we wanna get a subrange of that so we call the sublist function we defined before pass it chars and we want everything up from start at start up to but not including end and we're gonna store the result of that also in chars we're gonna clobber the previous list stored in chars with this new list and then finally we want to take all those strings and join them together so we get a single string, right? So we call join with chars oops and I forgot there should be an empty string for the separator there we go that's not proper. Okay, now there's a debatable point of style here about whether we need the local variable chars at all what you could do is you could take this expression this operation and plug it in where chars is used in the next line and it would logically be the same so we don't really need this line by itself at all we can get rid of that assignment and so it would look like this and I should fix the code up here so it's correct there we go and then we could do the same thing here we could take this and instead of assigning to variable just you know it's only used in one place later on so we could just plug it in right there and the results would look like this except we need to now take on there now this is correct. Yeah, so on the one hand this is more compact on the other hand you might look at this and say well that's kind of complicated for a single line of code I would look at this and say you know this is not really bad at all but if you did have a line that was too long then you would do the same thing we did here where you like take these intermediate operations assign their results to variables so they can spread the work onto multiple lines that's a very common thing to do with variables just be clear like strictly speaking we don't really need them you could just put this all in one line anyway so another thing we wanna do with strings is given a string we wanna search for a substring see if it's found somewhere within the first string and if so we wanna know where what index that substring is found so we define a function called index which does this it takes a string S and a substring SS and looks for SS somewhere in S and gives us back the index of where it's found so here for example if we call index with hello world and hell well hell there is a match inside hello world the sequence of characters does occur there starting at index zero so we get back index zero if we look for hell lowercase h well lowercase h and capital H are not the same character so there actually is no match anywhere in the substring index will then give you back negative one that's the convention to return negative one indicating that there's no match and then for world well there is a match starting at index what is that five six seven yeah that's index seven and then if we look for oh you can the substring can just be a single character that's valid and in this case well there's actually multiple matches there's index four and there's index let's say five six seven eight yeah index eight so the question is which one does give you back well it searches from the front so it gives you back always the first match if there are multiple matches in some cases you might wanna have another function like say called index all which will find all matches within a string and would return a list of numbers instead of just a single number but the index function just returns the first match from the left you also might want another function that searches from the end of the string and gives you if there's multiple matches it gives you the one at the end I don't know maybe call that like R index as in like right index anyway looking at the logic of the function we're gonna create local variable SS2 and this is very debatable people complain that you shouldn't have variables with numbers to distinguish them because we also have SS and now we have SS2 that is generally bad style but I would say in this case it's a very short function there's really not anything obvious that you would call this variable anyway what else you would call it it's just another substring so I'm calling it SS2 that's generally something you wanna avoid in particularly in longer functions where your variables like have to have meaning across a larger context and it can get confusing if you have a bunch of short variable names that are just have numbers after them but I think it's cool in this case anyway so the logic of what we're doing here is we're gonna have a loop where I iterates from zero up to but not including the increment of subtracting length of the substring from the length of the larger string and yes we are going to assume that the substring is smaller than S maybe we shouldn't actually we probably should actually what would happen in that case what would happen actually no, yeah if that were the case if our substring is longer than the string itself well then obviously there can't be a substring match we wanna get back negative one so if say substring were 10 and S were nine then the length of the string were nine this would be negative one you incremented to zero and then we'd go incrementing from I is zero up to but not including zero so it would never iterate because I would already be equal to the end index so that would actually work that would actually be okay anyway the reason for this complex logic is we're not we're not gonna iterate through all the characters of the string we only wanna we wanna start at index zero and keep going but we stop once we're at the last index where there could possibly be a match if our substring is four characters long then once we get to the index where there are only four characters left that's the last thing we check it doesn't make sense to keep going past that and in fact in this case because in the loop here we're gonna call substring we didn't talk about this before but the way we wrote the substring function is if we specify an end index which is or a start index this is outside the bounds of the string if it's, you know if you have a five character string you specify an index 10 that's outside the bounds well substring is gonna fail and it's gonna terminate our program actually it's a bad operation so we wanna avoid ever calling substring with indexes that aren't valid for the string so for that reason and also to avoid unnecessary work instead of iterating through all the indexes of the first string instead of just going up to the length of S we are going to do all this where so here's the logic so this is a hello world is 13 characters world is five characters subtract five from 13 you get eight okay so if we're incrementing up to we're not including index eight we would stop at index seven which would be five, six, seven we'd be stopping here when we wanna stop actually at the O it's a bad example I know it's confusing we wanna stop at the point at the index where there are five characters left so it's actually one greater than the subtracting length of SS from S that's why we have the ink here so now we have I which is gonna iterate through in this example from here all the way through R and each time it iterates we wanna get the substring in this case the four character substring starting at the position at I so we're gonna get the substring of S starting at I but then the end position that also changes along with I that's whatever the length of the substring is plus I that's the substring we're gonna check so the first time through here in this example for world we would get this substring of the first five characters and then the second iteration loop where I is one we get this substring of characters and third time through you get this substring of characters, okay that's what's being stored in SS too, okay and so with that substring we then check if it's equal to SS the substring we're looking for if so then we found a match and we wanna return whatever I is so in this first example in the first time through I is zero we get the substring and hey it's equal to SS so we return zero we return I otherwise what's gonna happen is just we keep going we go through all the indexes of the string up to the point where the substring is equal to the number of remaining characters and we're not going to find a match so this condition is never gonna be true the loop will end and okay it turns out we went through the whole thing match was not found so it must not be there so we return negative one so the logic of this one is slightly tricky you just have to keep in mind that you don't want to iterate through the entire original string that's what all this complication is otherwise it's not horribly complicated arguably you might want to remove the use of this other variable we don't really need it again we can do the same trick we just take this expression plug it in where SS2 is used cause it's only used in one place and so we could just write the code this way and it would function exactly the same and arguably this is easier to understand cause you don't have to think about what does SS2 mean what does its role there are trade-offs here in some cases introducing variables that you don't strictly need on the one hand maybe it helps you make individual lines easier to look at easier to read but on the other hand introducing a new thing with the name and if the reader of your code has to think well what is that about and you have to worry about what might happen to that variable as particularly in a longer function you have to worry about what might be done with that variable over many lines potentially in this case I don't really have a strong preference I think they're about equal in terms of readability on the one hand this is a little complicated but then over here you have to introduce another variable and always I find it a little displeasing so weighing the trade-offs I think they come out about the same now another objection to this function is that it's really not the most efficient way to implement this index operation because well the main culprit is the substar function because we're extracting out a whole substring which in fact the way we implemented the substring function is not the most efficient in the world because we're like creating a list creating another list from that and then join it into a string and yeah so I mean we don't have to sweat efficiency details certainly at this stage of your programming education I mean this is an educational language and we're doing trivial exercises but I do want to give you a sense of down the line if you do start writing real code you might want to avoid glaring inefficiencies like what we're doing here so our alternate implementation of index looks like this we're introducing a variable match which we'll talk about in a second and the first thing we do is we take the string and the substring and we get their chart lists in fact we're not going to need the string and the substrings themselves we just want their chart lists because we're going to take the corresponding characters individual characters and compare them against each other so the outer loop here looks exactly the same as in our original implementation it's going up to the position from zero up to the last possible position where the substring might be found that's what we're doing but then we're not using substr instead we set match to be true we're going to go through all the characters of SS we'll get it as CH here and then if we find a case where it's not equal to the corresponding character of the root of the full string then we know we don't have a match we're done for checking that particular position so okay to be clear here exactly J will be the index of SS so if SS is five characters long in this inner loop J goes to zero through four and it does that every time you know every time we go in the outer loop this inner loop J is always going to go to zero through four so we want to get the character which is at the corresponding position of the substring in the full string so that's what this is about we're taking whatever I is adding it to J and that gets us the corresponding character of the full string the original string is now S here which is a char list it's a list of individual character strings so we're going to compare it against CH and if they're not equal that's what any Q I don't know if we mentioned this before any Q is just a convenience it's an equality operation but logically inverted so if these things are not equal it returns true so if we see that they're not equal then we set match to false we break out of the loop I don't think we've mentioned break statements either a break statement is a convenience that lets us bail out of a loop early normally a loop you know there's a condition something governing how many times it's going to iterate well sometimes you just want to say I don't care just end the loop right now that's what a break statement says so because this break statement is inside this 4H loop it's going to break if executed it'll stop execution of the 4H execution will just jump from here to whatever's after the loop in this case it jumps down to this if statement so that's break it's quite convenient in some cases so when we get down here if this loop iterates and checks every character of the substring to the corresponding position in the original string and they're all equal then this condition is never going to be true match will never be set to false it'll still be true and so when we get down here it'll hey we found our match and so then we return I otherwise if it's not a match then match will have been set to false we'll have broken out of the loop and we get down here this is going to be false and we go on to the next index of the full string anyway so that's an alternate way of implementing index and when it comes to performance you always have to be careful about making these judgments you have to really measure things to know if you're making things better or worse but my guess is that this version would be considerably more efficient than the original version we had because it's only creating two lists it's not using charlist and join a bunch so it's almost certainly going to be more efficient anyway moving on so another thing you might want to do with a string is test whether it contains one or more certain characters and for that we have a contains any function which takes a string and then also a list of strings where those strings should be individual characters, single character strings and so here down in this example we have contains any with hello world we want to see if that string contains any character in this string, qwerty so we get a list of characters from qwerty and this call will be true because e is here right here and also r is also found there in world so that's true but then if we have zxcv if we try to find any one of those characters in hello world where it's none of those are found so we get false and then here we're testing if just an exclamation mark by itself is somewhere in the string and be clear this is a single character string already but the function is expecting a list of strings so even if you're looking for this one character you still have to have a list of strings not a string passed in the logic here is quite simple we're just iterating through all the characters of the outer list so s is a string right and we want to get the individual characters so we create a char list right so each time through ch will be a character of the outer string of the of the main string we're searching through and then we need to test we want to get the individual characters from the char list uh... from chars so we iterate through all those chars we call them ch2 we're just trying to find any match whatsoever right so the first time we find a match between ch and ch2 we know we're done so we just return true so if we get through uh... this outer loop and we haven't returned true then we know that there's no match and so we return false for our last exercise something we might want to do with strings is to trim them as we say which means to hack off certain characters found at the beginning of the string and at the end of the string most commonly you want to get rid of leading spaces and trailing spaces but sometimes you want to get rid of other kinds of characters so instead of just having a function that hacks off spaces will uh... generalize the solution to uh... work for other kinds of characters so the way the function works is expecting a string which we want to trim and a so-called cut set which is individual string but first thing we do in the cut set is uh... we create a charlist out of it because we just want to consider the individual characters uh... so looking down here uh... the first example trim it's a little hard to look at because the be clear this is the first string and then this is the second and the cut set string is just a single space character so we want to trim from this first string all the spaces from the beginning in the end uh... and so the result is hello world with no spaces around it whereas here if we're trimming E space exclamation mark H then we're going to hack off from the beginning everything all the characters that are in the cut set so we're going to hack all this stuff off and going from the end we're going to hack everything off up to the D so we get back low world uh... in this last example we're we're hacking everything off the same deal except we're not hacking off spaces and well we get back the same original string because if you if you go from the beginning and stop when you encounter something that's not one of these characters well space is not one of those characters so we're done uh... and if you work from the end well same deal uh... first characters of space and the spaces in the in the cut set so we don't actually cut anything in that case we don't trim anything so looking at the logic is probably the most complicated function so far our strategy is that we're gonna search from the start until we find a character which is not in the cut set and then we're going to search from the end and find the position of the first character that's not in the cut set once we have those two numbers start and end we have two local variables start and end and what we're trying to do is find what the start and end should be once we have those numbers then we can get a substring of S and that's our result at that point we know where to cut and so we use substar to uh... get this string like in this first example you want to extract out everything after the spaces in between the spaces so what we're going to do when we search from the start is we're going to iterate from zero up to but not including the length of S so the length of the full string and inside here we'll first draw attention to get char is another operator we haven't talked about before it just uh... given a string it gets us an individual character from that string it's like a subster but it only gets you a single character string instead of a substring and it's built into the language anyway so for each character we want to see we're starting from the left we want to see if like this first character is match matches anything in the cut set so we're going to use contains any which which we just defined uh... to see if this string the individual character of the the full string is matching anything in the cuts at any of the individual characters in the cut set and if not if we encounter character which is not in the cut set then we know we're done we found the start of the part of the string we want to keep and so we assigns start to whatever value of i is and we break out a loop because we're done now it's possible in this first loop that what if the string you're you're trimming consists entirely of characters in the cut set so you're going to trim everything well in that special case uh... will have iterated through this full list and we won't have found a start at all there is no start and so start will still be nil because start hasn't been assigned anything yet and so we check if start is equal to nil and if so we know we're done and we're going to return early out of the function we're going to say oh well you're going to return an empty string so we're trimming the whole thing we're trimming the whole string and so we return just an empty string otherwise assuming start has been assigned some number and it's not nil then we're going to continue on and we're going to start searching from the end and so now we need to iterate backwards through the string so that's why we have four deck so we can go backwards and we're going to have another counter i starting at one less than len s the first value of i is going to be whatever is len s minus one and then we're going to keep going through the value zero we're going to keep documenting until we get to negative one in effect and so we're effectively going through the string backwards right to left and the logic is exactly the same except when we find a character that's not in the cut set then we set end to whatever the value of i is plus one because when we set end because it's going to be used down here you know if this exclamation mark in this example is the last character of what's supposed to be included in the string then we want that position plus one when we call substar right because substar that last index is one past the character we keep anyway so now we have our start and end and last thing to do we just need to get a substring from s from start up to but not including end so that's the trim function and that's the last example for this video i just want to quickly remind you that we snuck in some new stuff the charlist operator and the get char operator and also break statements those are things we hadn't discussed in the previous video at all next video is going to cover the number guessing game and a hangman game so these are going to actually be interactive programs where at the console at least you'll type input hit enter and your program will process your input and spit out output in response and that's going to be next time


Dear students, now we are going to learn how to identify duplicate cases in SPSS. Duplicate cases are those cases which are considered duplicates if their values match for all selected variables. Deplicate cases can occur in your data for many reasons, including data entry errors in which the same case is accidentally entered more than once, or sometimes the students try to copy paste the data to increase the sample size. What happens is that you are entering data, unintentionally one case or two or three times entered from you, or when the students are doing their projects, then they to increase their sample size, they copy and paste the cases as it is so that our sample size increases. So to see these SPSS cases, if there are exact matches, then how will we identify them? For this, we will use a duplicate case command. So for this command, you will have to right click on the data tab, so when you click here, you will see the tab of the identified duplicate case. When you right click on it, you will have a dialog box like this in which you will be asked which variables you want to match. Basically, there are 40 variables in the software that match easily. In our data set, there are 8-10 variables, so we selected them and in the first window, as shown here, we selected them. And the other, by default options, we let them stay the same way and after selecting it, we clicked on the OK button. So when you click, you will have a variable that will be your primary-last. In this case, your duplicate case is identified as 0 and your primary case is identified as 1 as you can see here that the 0 is considered as duplicate and the 1 is considered as primary case. So you can identify it like this. In the output view, you will have overall summary that how many primary cases and how many duplicate cases were in your data set. So the data set we used here was a total of 21 samples, out of which there were 15 duplicate cases and 6 were actually primary cases and original cases. So when you use this command during data cleaning, you can delete such cases that are duplicated. The unintentionally came here for some reason, some data entry, those duplicate cases are added.


I'm Paul Muirekigwadi. I'm a ward representative in Mbakasi, Nairobi. I'm aged 61 years, around 20-21 years ago, of which I had an accident. I've been living on painkalors and medicine. The pain on my pelvic and my hip and my lower back. All this time I've been seeing so many doctors, but the only thing they've been doing to me is giving me medicine painkillers, of which after taking painkillers for so long, they started having effects on my body, that is side effects. So they reached a point where the pain was so much unbearable and I had to ask for maybe what I should do to get over that pain because I would not live all my life on painkalors. After my hip brought problems, it affected my knees, both my knees. So I had pains in the knees, pains in the joints, pains in my lower part of the body. That's when the name of looking for hospitals came. As a family we sat down and we thought of going to the website and to look for specialized treatment. Whereas that's where the name of Manipal came in and we found out that in Manipal we had specialized doctors. So I wanted to go somewhere where I'll have everything in one roof. That's how me and my family settled for Manipal. When I came to Manipal, everything has gone very softly. I first saw Mr. Paul Kigawati, 61-year-old gentleman from Kenya, a month mark in my clinic. He works as an elected representative of the Kenyan government. He first saw me with increasing complaints of right hip pain. To give you a brief history, he had a road traffic accident in the early 1980s where he sustained considerable damage to his right hip joint. Soon after that he started developing pain in the right hip which increased over the past couple of decades to this degree that he would hardly walk a couple of steps without pain. To make matters worse, he also had a condition called gout which affects the joints because of high uric acid content level in him. So he also had pain in both the knees which started from the past decade which was also troubling him. So I evaluated him, examined him, did x-rays and found that he'd got advanced arthritis of his right hip and arthritis of both his knee joints. After optimizing him and all the necessary tests for that we counseled him that he needs hip replacement of the right side and also knee replacement of both the sides. So we went ahead with the hip replacement. The surgery went well which was followed by a week later by both his knee suture replaced. So patients started walking soon after this first hip was replaced and subsequently after the knee replacement was done as well. So today he's three weeks down the line and he's walking considerably well with minimal aid. So these kind of joint replacements, hip and knee are a very successful surgery and with the advent of modern bearings and implants they can easily last for more than a couple of decades if taken care of well. So we at Manipal Hospitals are an esteemed center for these kind of joint replacements because of our infrastructure and because of the backup. It's a place where I would like even to refer other people too. It's only three weeks and I've started doing my health issue therapy, I'm standing, I can walk a bit and I'm feeling in the next maybe one, two months I'll be well, well, well completely. So one thing is many thanks to Dr. Sonir I found Dr. Sonir and the doctors who are all the doctors who are a couple, who are very cooperative.