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]. S reverse=’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 .
Constraints
- 1<=q<=10
- 2<=length of s<=10000
Sample Input
STDIN Function ----- -------- 2 q = 2 acxz s = 'acxz' bcxz s = 'bcxz'
Sample Output
Funny Not Funny
Funny String HackerRank Solution in C
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#define MAX(_n, _m) ((_n > _m)?_n:_m)
#define MIN(_n, _m) ((_n < _m)?_n:_m)
int main() {
int testcnt = 0;
char str[10001] = {0};
int len = 0;
scanf("%d", &testcnt);
for (int test = 0; test < testcnt; test++){
scanf("%s", str);
len = strlen(str);
int funny = 1;
for (int i = 1, j = len - 1; i < len; i++, j--){
if (MAX(str[i], str[i-1]) - MIN(str[i], str[i-1]) !=
MAX(str[j], str[j-1]) - MIN(str[j], str[j-1])){
funny = 0;
break;
}
}
if (funny){
printf("Funny\n");
}
else{
printf("Not Funny\n");
}
}
return 0;
}
Funny String HackerRank Solution in C++
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cctype>
#include<cstdlib>
#include<algorithm>
#include<bitset>
#include<vector>
#include<list>
#include<deque>
#include<queue>
#include<map>
#include<set>
#include<stack>
#include<cmath>
#include<sstream>
#include<fstream>
#include<iomanip>
#include<ctime>
#include<complex>
#include<functional>
#include<climits>
#include<cassert>
#include<iterator>
using namespace std;
string s;
int t;
char ss[1000001];
int main(){
scanf("%d", &t);
while (t--){
scanf("%s", ss);
s = ss;
//cin >> s;
string r = s;
bool ok = false;
reverse(r.begin(), r.end());
for (int i = 0; i < s.size() - 1; i++){
if (abs(s[i] - s[i + 1]) != abs(r[i] - r[i + 1])){
ok = true;
break;
}
}
if (ok){
puts("Not Funny");
}
else{
puts("Funny");
}
}
return 0;
}
Funny String HackerRank Solution in Java
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.InputMismatchException;
public class FS {
static InputStream is;
static PrintWriter out;
static String INPUT = "";
static void solve()
{
outer:
for(int T = ni();T >= 1;T--){
char[] s = ns().toCharArray();
int n = s.length;
for(int i = 0;i < n-1;i++){
if(Math.abs(s[i+1]-s[i]) == Math.abs(s[n-1-i] - s[n-1-i-1])){
}else{
out.println("Not Funny");
continue outer;
}
}
out.println("Funny");
}
}
public static void main(String[] args) throws Exception
{
long S = System.currentTimeMillis();
is = INPUT.isEmpty() ? System.in : new ByteArrayInputStream(INPUT.getBytes());
out = new PrintWriter(System.out);
solve();
out.flush();
long G = System.currentTimeMillis();
tr(G-S+"ms");
}
private static boolean eof()
{
if(lenbuf == -1)return true;
int lptr = ptrbuf;
while(lptr < lenbuf)if(!isSpaceChar(inbuf[lptr++]))return false;
try {
is.mark(1000);
while(true){
int b = is.read();
if(b == -1){
is.reset();
return true;
}else if(!isSpaceChar(b)){
is.reset();
return false;
}
}
} catch (IOException e) {
return true;
}
}
private static byte[] inbuf = new byte[1024];
static int lenbuf = 0, ptrbuf = 0;
private static int readByte()
{
if(lenbuf == -1)throw new InputMismatchException();
if(ptrbuf >= lenbuf){
ptrbuf = 0;
try { lenbuf = is.read(inbuf); } catch (IOException e) { throw new InputMismatchException(); }
if(lenbuf <= 0)return -1;
}
return inbuf[ptrbuf++];
}
private static boolean isSpaceChar(int c) { return !(c >= 33 && c <= 126); }
private static int skip() { int b; while((b = readByte()) != -1 && isSpaceChar(b)); return b; }
private static double nd() { return Double.parseDouble(ns()); }
private static char nc() { return (char)skip(); }
private static String ns()
{
int b = skip();
StringBuilder sb = new StringBuilder();
while(!(isSpaceChar(b))){ // when nextLine, (isSpaceChar(b) && b != ' ')
sb.appendCodePoint(b);
b = readByte();
}
return sb.toString();
}
private static char[] ns(int n)
{
char[] buf = new char[n];
int b = skip(), p = 0;
while(p < n && !(isSpaceChar(b))){
buf[p++] = (char)b;
b = readByte();
}
return n == p ? buf : Arrays.copyOf(buf, p);
}
private static char[][] nm(int n, int m)
{
char[][] map = new char[n][];
for(int i = 0;i < n;i++)map[i] = ns(m);
return map;
}
private static int[] na(int n)
{
int[] a = new int[n];
for(int i = 0;i < n;i++)a[i] = ni();
return a;
}
private static int ni()
{
int num = 0, b;
boolean minus = false;
while((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-'));
if(b == '-'){
minus = true;
b = readByte();
}
while(true){
if(b >= '0' && b <= '9'){
num = num * 10 + (b - '0');
}else{
return minus ? -num : num;
}
b = readByte();
}
}
private static long nl()
{
long num = 0;
int b;
boolean minus = false;
while((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-'));
if(b == '-'){
minus = true;
b = readByte();
}
while(true){
if(b >= '0' && b <= '9'){
num = num * 10 + (b - '0');
}else{
return minus ? -num : num;
}
b = readByte();
}
}
private static void tr(Object... o) { if(INPUT.length() != 0)System.out.println(Arrays.deepToString(o)); }
}
Funny String HackerRank Solution in Python
# Enter your code here. Read input from STDIN. Print output to STDOUT
import fileinput
line = fileinput.input()
n = int(line[0])
for i in range(n):
s = line[i+1].strip()
lst = [ord(c) for c in s]
nlst = lst[:]
nlst.reverse()
ln = len(s)
funny = True
for k in range(1, ln):
if abs(lst[k]-lst[k-1]) != abs(nlst[k]-nlst[k-1]):
funny = False
break
if funny: print "Funny"
else: print "Not Funny"
Funny String HackerRank Solution in C#
using System;
namespace FunnyString
{
class Program
{
static void Main(string[] args)
{
int t = int.Parse(Console.ReadLine());
for (int i = 0; i < t; i++)
{
HandleTestCase();
}
}
static void HandleTestCase()
{
string str = Console.ReadLine();
for (int i = 0; i < str.Length - 1; i++)
{
int lastIndex = str.Length - i - 1;
int mod1 = Math.Abs(str[i] - str[i + 1]);
int mod2 = Math.Abs(str[lastIndex] - str[lastIndex - 1]);
if (mod1 != mod2)
{
Console.WriteLine("Not Funny");
return;
}
}
Console.WriteLine("Funny");
}
}
}
Attempt Funny String HackerRank Challenge
Link – https://www.hackerrank.com/challenges/funny-string/
Next HackerRank Challenge Solution
Link – https://exploringbits.com/counting-sort-1-hackerrank-solution/
Aayush Kumar Gupta is the founder and creator of ExploringBits, a website dedicated to providing useful content for people passionate about Engineering and Technology. Aayush has completed his Bachelor of Technology (Computer Science & Engineering) from 2018-2022. From July 2022, Aayush has been working as a full-time Devops Engineer.