words whose reversals are their opposites

created by jt
(idea) by jt (1.6 y) (print)   (I like it!) 1 C! Fri Oct 27 2000 at 12:30:59
A word puzzle which arose from the definition of arothelp: find words which when reversed (approximate reversal is acceptable) yield another word meaning the opposite thing.

Sylvar was the first to find a clever solution:

"madam" (a respectable lady) is the opposite of "madam" (a brothelkeeper)
A related variation would be to find words whose exact reversal yields an approximately opposite meaning. A very weak example which springs to mind is "evil--live". broken-winged bird also came up with:
There's "on," which is the electronic equivalent of "yes," but if you reverse it, spells "no."

Email me (or node) further suggestions.

(idea) by jafuser (1.1 y) (print)   (I like it!) 1 C! Fri Oct 27 2000 at 13:38:17
Here's the complete list of reversible words from the /usr/dict/words file on Linux - I couldn't find any opposites.
Here's the quick and dirty source code I wrote. You can use it to try to find any in your native language. It's not very elegant, but it works. I didn't want to spend a lot of time on it. I spent more time making this node than writing it :)

Be sure to resize the MAX_WORDS define to be larger or equal to the number of words you will be sorting through.

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

#define MAX_WORDS 65536

char *words[MAX_WORDS];
char *revwords[MAX_WORDS];

void stripcrlf(char *s){
  int n;
  for(n=0;s[n];n++){
    if(s[n]==13 || s[n]==10){
      s[n]=0;
      break;
    }
  }
}

char *str_reverse(char *text){
  int g,t,n;
  char c;
  g=(t=strlen(text)-1)/2;
  for(n=0;n<=g;n++){
    c=text[n];
    text[n]=text[t-n];
    text[t-n]=c;
  }
  return text;
}

int main(){
  char text[4096];
  long numwords=0;
  int x,y;
  while(fgets(text,4096,stdin)){
    stripcrlf(text);
    if(text[0] && text[0] >= 'a' && text[0] <= 'z'){
      if(words[numwords]=strdup(text)){
        if(revwords[numwords]=strdup(text)){
          str_reverse(revwords[numwords]);
        }else{
          fprintf(stderr,"strdup error\n");
          exit(1);
        }
      }else{
        fprintf(stderr,"strdup error\n");
        exit(1);
      }
      numwords++;
    }
  }
  for(x=0;x<numwords;x++){
    for(y=x+1;y<numwords;y++){
      if(!strcmp(words[x],revwords[y])){
        printf("%s %s\n",words[x],words[y]);
      }
    }
  }
}
(idea) by mkb (6.5 hr) (print)   (I like it!) Fri Oct 27 2000 at 13:56:43

It's not an opposite but a reciprocal!

1 ohm (measure of resistance) = 1/mho (measure of conductance, also called a siemens)

(idea) by JustSomeGuy (6.2 y) (print)   (I like it!) 1 C! Fri Oct 27 2000 at 18:47:11
Sorry, jafuser, I couln't resist rewriting your code as a perl one liner:
perl -ne 'chop;$w{reverse $_}=$_;print "$_\t$w{$_}\n" if $w{$_}'
(idea) by HippieChick (3.1 y) (print)   (I like it!) 1 C! Thu May 24 2001 at 10:20:46
Here is an unusual close-solution to the problem, taken from a book whose title was The Puzzling Adventures of Dr. Eco, I believe. (I was unable to verify the title or find the author, sadly).

If you take the word "up", and reverse it not by mirroring the letter-order, but by rotating it 180 degrees, you get "dn", the abbreviation for "down".

(idea) by Carthag (5.9 mon) (print)   (I like it!) Thu May 24 2001 at 12:26:54
Two reversible words, with almost reverse meanings as well:

Amok (Amuck) vs. Coma

Depending on the spelling, these are literally reversible or not.

Y'know, if you log in, you can write something here, or contact authors directly on the site. Create a New User if you don't already have an account.