# Funny String

### Problem Statement :

```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  ->  cab. 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.

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 s, the number of queries.
The next q lines each contain a string, s.

Constraints

1  <=  q  <=  10
2  <=  length of  s  <=  10000```

### Solution :

```                            ```Solution in C :

In   C++  :

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

int main() {

int t;
cin>>t;
while(t--)
{
char arr[10001],brr[10001];
cin>>arr;
int len=strlen(arr);
int j=len-2;
int i;
for(i=1;i<len;i++,j--)
{
if(abs(arr[i]-arr[i-1])!=abs(arr[j]-arr[j+1]))
{
cout<<"Not Funny\n";
break;
}
}
if(i==len)
cout<<"Funny\n";

}
return 0;
}

In   Java  :

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {

public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int t=sc.nextInt();
for(int j=0;j<t;j++)
{
String s=sc.next();
int len=s.length();
int stop=(len/2);
int flag=0;
int i=0;
for(i=0;i<stop;i++)
{
int diff_fwd=(int)(s.charAt(i))-(int)(s.charAt(i+1));
int diff_back=(int)(s.charAt(len-1-i))-(int)(s.charAt(len-1-(i+1)));
if(Math.abs(diff_fwd)!=Math.abs(diff_back))
{
flag=1;
break;
}
}
if(flag==1)
System.out.println("Not Funny");
else
System.out.println("Funny");
}
}
}

In  C :

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

int main() {
int T, N, funny, i, r;
char S[10001];

scanf("%d\n", &T);
while (T--) {
scanf("%s\n", S);
N = strlen(S);
funny = 1;
for(i=1, r=N-2; i<N; i++, r--) {
if (fabs(S[i]-S[i-1]) != fabs(S[r]-S[r+1])) {
funny = 0;
break;
}
}
printf("%sFunny\n", funny ? "" : "Not ");
}
return 0;
}

In   Python3  :

def isFunny(s):
for i in range(1, len(s)):
if abs(s[i] - s[i-1]) != abs(s[-i-1] - s[-i]): return False
return True

if __name__ == "__main__":
num_cases = int(input());
for case in range(num_cases):
s = [ord(c) for c in input()];
if isFunny(s): print("Funny")
else: print("Not Funny");```
```

## View More Similar Problems

Given a pointer to the head of a linked list, insert a new node before the head. The next value in the new node should point to head and the data value should be replaced with a given value. Return a reference to the new head of the list. The head pointer given may be null meaning that the initial list is empty. Function Description: Complete the function insertNodeAtHead in the editor below

## Insert a node at a specific position in a linked list

Given the pointer to the head node of a linked list and an integer to insert at a certain position, create a new node with the given integer as its data attribute, insert this node at the desired position and return the head node. A position of 0 indicates head, a position of 1 indicates one node away from the head and so on. The head pointer given may be null meaning that the initial list is e

## Delete a Node

Delete the node at a given position in a linked list and return a reference to the head node. The head is at position 0. The list may be empty after you delete the node. In that case, return a null value. Example: list=0->1->2->3 position=2 After removing the node at position 2, list'= 0->1->-3. Function Description: Complete the deleteNode function in the editor below. deleteNo

## Print in Reverse

Given a pointer to the head of a singly-linked list, print each data value from the reversed list. If the given list is empty, do not print anything. Example head* refers to the linked list with data values 1->2->3->Null Print the following: 3 2 1 Function Description: Complete the reversePrint function in the editor below. reversePrint has the following parameters: Sing