Skip to content
  • Home
  • Contact Us
  • About Us
  • Privacy Policy
  • DMCA
  • Linkedin
  • Pinterest
  • Facebook
thecscience

TheCScience

TheCScience is a blog that publishes daily tutorials and guides on engineering subjects and everything that related to computer science and technology

  • Home
  • Human values
  • Microprocessor
  • Digital communication
  • Linux
  • outsystems guide
  • Toggle search form
HackerRank Funny String Problem Solution

HackerRank Funny String Problem Solution

Posted on April 26, 2023April 28, 2023 By Yashwant Parihar No Comments on HackerRank Funny String Problem Solution

In this post, we will solve HackerRank Funny String Problem Solution.

In this challenge, you will determine whether a string is funny or not. To determine whether a string is funny, create a copy of the string in reverse e.g. abc → cba. Iterating through each string, compare the absolute difference in the ascii values of the characters at positions 0 and 1, 1 and 2 and so on to the end. If the list of absolute differences is the same for both strings, they are funny.
Determine whether a give string is funny. If it is, return Funny, otherwise return Not Funny.
Example
s = ‘lmnop’
The ordinal values of the charcters are [108, 109, 110, 111, 112]. Sreverse= ‘ponml’ and the ordinals are [112, 111, 110, 109, 108]. The absolute differences of the adjacent elements for both strings are [1, 1, 1, 1], so the answer is Funny.

Function Description

Complete the funnyString function in the editor below.

funnyString has the following parameter(s):

  • string s: a string to test

Returns

  • string: either Funny or Not Funny

Input Format

The first line contains an integer q, the number of queries.
The next q lines each contain a string, s.

Sample Input

STDIN   Function
-----   --------
2       q = 2
acxz    s = 'acxz'
bcxz    s = 'bcxz'

Sample Output

Funny
Not Funny

Explanation
Let r be the reverse of $.
Test Case 0:
s = acxz, r = zxca
Corresponding ASCII values of characters of the strings:
s = [97, 99, 120, 122] and r = [122, 120, 99, 97] For both the strings the adjacent difference list is [2, 21, 2].
Test Case 1:
s = bcxz. r zxcb
Corresponding ASCII values of characters of the strings:
s = [98, 99, 120, 122] and r = [122, 120, 99, 98] The difference list for string $ is [1, 21, 2] and for string r is [2, 21, 1].

HackerRank Funny String Problem Solution
HackerRank Funny String Problem Solution

Table of Contents

  • Funny String C Solution
  • Funny String C++ Solution
  • Funny String C Solution
  • Funny String Java Solution
  • Funny String JavaScript Solution
  • Funny String Python Solution

Funny String C Solution

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {
    char str_buf[10000] = {0};
    int T;
    scanf("%d", &T);
    for(int i = 0; i < T; i++) {
        scanf("%s", str_buf);
        int is_funny = 1;
        int str_len = strlen(str_buf);
        for(int j = 1; j < str_len; j++) {
            int sdif = str_buf[j]-str_buf[j-1];
            int rdif = str_buf[str_len-1-j]-str_buf[str_len-j];
            if(abs(sdif) != abs(rdif)) {
                is_funny = 0;
                break;
            }
        }
        if(is_funny){
            printf("Funny\n");
        } else {
            printf("Not Funny\n");
        }
        memset(str_buf, 0, 10000*sizeof(char));
    }
    /* Enter your code here. Read input from STDIN. Print output to STDOUT */    
    return 0;
}

Funny String C++ Solution

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;


int main() {
    int t;
    std::cin >> t;
    while(t--) {
        std::string S;
        std::cin >> S;
        int n = S.size();
        bool isfunny=true;
        for(int i=1;i<n;++i) {
            if(std::abs(int(S[i])-int(S[i-1])) !=
               std::abs(int(S[n-1-i])-int(S[n-i]))) {
                isfunny=false;
            }
        }
        std::cout << (isfunny ? "Funny" : "Not Funny") << std::endl;
    }
    return 0;
}

Funny String C Solution

using System;
using System.Collections.Generic;
using System.IO;
class Solution {
    private static void Main(string[] args)
        {
            int T = int.Parse(Console.ReadLine());

            for (int i = 0; i < T; i++)
            {
                string s = Console.ReadLine();

                string result = isFunny(s);
                Console.WriteLine(result);
            }
            
        }

        private static string isFunny(string s)
        {
            for (int i = 0, j = s.Length - 1; i < s.Length - 1; i++, j--)
            {
                if (Math.Abs(s[i + 1] - s[i]) != (Math.Abs(s[j - 1] - s[j])))
                {
                    return "Not Funny";
                }
            }

            return "Funny";
        }
}

Funny String Java Solution

import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.function.*;
import java.util.regex.*;
import java.util.stream.*;
import static java.util.stream.Collectors.joining;
import static java.util.stream.Collectors.toList;

class Result {

    /*
     * Complete the 'funnyString' function below.
     *
     * The function is expected to return a STRING.
     * The function accepts STRING s as parameter.
     */

    public static String funnyString(String s) {
    // Write your code here
        String reversedString = new StringBuilder().append(s).reverse().toString();
        char[] sCharArray = s.toCharArray();
        char[] reversedCharArray = reversedString.toCharArray();
        for (int i = 0; i < sCharArray.length - 1; i++) {
            int temp = Math.abs((sCharArray[i]) - sCharArray[i+1]);
            int temp2 = Math.abs(reversedCharArray[i] - reversedCharArray[i+1]);
            if (temp != temp2) {
                return "Not Funny";
            }
        }
        return "Funny";
    }

}

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));

        int q = Integer.parseInt(bufferedReader.readLine().trim());

        IntStream.range(0, q).forEach(qItr -> {
            try {
                String s = bufferedReader.readLine();

                String result = Result.funnyString(s);

                bufferedWriter.write(result);
                bufferedWriter.newLine();
            } catch (IOException ex) {
                throw new RuntimeException(ex);
            }
        });

        bufferedReader.close();
        bufferedWriter.close();
    }
}

Funny String JavaScript Solution

String.prototype.charCode = function () {
    code = this[0].charCodeAt(0);
    return code;
}

function processData(input) {
    lines = input.split('\n');
    count = parseInt(lines[0]);
    tests = getTests(lines, count);   
    
    tests.forEach(function(word, index, array) {
        funny = null;
        S = word.split('');
        R = S.slice(0).reverse();
                
        for (i = 1; i < S.length; i++) {
            Si = S[i].charCode();
            prevSi = S[i-1].charCode();            
            
            Ri = R[i].charCode();            
            prevRi = R[i-1].charCode();
            
            isFunnyCharSet = Math.abs(Si - prevSi) === Math.abs(Ri - prevRi);
            
            if (!isFunnyCharSet) {
                funny = false;
            }
        }
        
        if (funny === false) {
            console.log("Not Funny");
        } else {
            console.log("Funny");
        }
    })
}

function getTests(lines, count) {
    tests = []
    for (i = 1; i <= count; i++) {
        tests.push(lines[i]);
    }
    return tests;
}
process.stdin.resume();
process.stdin.setEncoding("ascii");
_input = "";
process.stdin.on("data", function (input) {
    _input += input;
});

process.stdin.on("end", function () {
   processData(_input);
});

Funny String Python Solution

from sys import stdin 

T = int(stdin.readline())

for _ in range(T):
    s = list(map(ord, stdin.readline().strip()))
    r = s[::-1]
    
    sdif = [abs(s[i] - s[i-1]) for i in range(1, len(s))]
    rdif = [abs(r[i] - r[i-1]) for i in range(1, len(s))]
    
    print('Funny' if sdif == rdif else 'Not Funny')

Other Solutions

  • HackerRank Counting Sort 1 Problem Solution
  • HackerRank Counting Sort 2 Problem Solution
c, C#, C++, HackerRank Solutions, java, javascript, python Tags:C, cpp, CSharp, Hackerrank Solutions, java, javascript, python

Post navigation

Previous Post: HackerRank Separate the Numbers Solution
Next Post: HackerRank Counting Sort 1 Problem Solution

Related Posts

HackerRank Beautiful Binary String Problem Solution HackerRank Beautiful Binary String Solution c
HackerRank Circular Array Rotation Problem Solution HackerRank Circular Array Rotation Solution c
HackerRank Favorite sequence Problem Solution HackerRank Favorite sequence Problem Solution c
HackerRank Roads and Libraries Problem Solution HackerRank Roads and Libraries Problem Solution c
HackerRank Staircase Problem Solution HackerRank Staircase Problem Solution c
HackerRank Closest Numbers Problem Solution HackerRank Closest Numbers Problem Solution c

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Pick Your Subject
Human Values

Copyright © 2023 TheCScience.

Powered by PressBook Grid Blogs theme