Date: Sat, 19 Dec 92 12:41:21 PST
Reply-To: <[email protected]>
Message-ID: <[email protected]>
Mime-Version: 1.0
Content-Type: text/plain
From: [email protected] (Captain COCOT)
To: [email protected] (SURFPUNK Technical Journal)
Subject: [surfpunk-0020] WAREZ:  Getting the right phone number
Keywords: surfpunk, warez, phone number, perl, chortle

Looks useful.  Try it next time you order a Personal 911 service.

                                                          Captain Cocot
________________________________________________________________________
________________________________________________________________________

Source: Yucks Digest         Sat, 19 Dec 92       Volume 2 : Issue  62
Property-Of: Written and placed in the public domain by Howard A. Landman
Language: perl
________________________________________________________________________

Date: Mon, 4 May 92 18:18:40 PDT
From: landman%[email protected] (Howard Landman)
Subject: Getting the right phone number
To: eniac

On moving into my new house, I had to get 2 new phone numbers.  I tend to
prefer numbers that spell something.  I followed the procedure outlined
below and, as a result, now have the following numbers:

       Main: (408) CHORTLE
       Computer: (408) CHIPSYN

I liked chortle because any word of Lewis Carroll's is a word of mine.
ChipSyn is appropriate because I mostly do silicon compilation and
logic synthesis for a living.

How did I manage this?  It's not too hard ...

HOW TO GET THE PHONE NUMBER OF YOUR DREAMS (in 8 easy steps)

1. Determine the list of available prefixes.  The phone company will
  happily provide you with this.

2. Ignore all prefixes which contain 0 or 1.  There are no letters which
  correspond to them.  (However, you may want to consider them in step
  5 below.)

3. Edit the "prefixes" program (appended below) to match your set of
  prefixes.  You may also need to change the path to Perl if your
  system has it somewhere else.  Make it executable with "chmod +x prefixes".

4. Run "prefixes YOUR_PREFIXES > prefixes.out".  For example, if your
  available prefixes are 555 and 234 (usually it is a much longer list),
  run "prefixes 555 234 > prefixes.out".  Order of the prefixes has no
  effect, as they get sorted anyway.  It is most efficient to do all of
  your prefixes in one run, since the dictionary then only needs to be
  consulted once.

5. Edit the prefixes.out file.  It contains not only all 7-letter words
  which match valid prefixes, but also shorter words that might *begin*
  a combination of words that match a number.  For example, the output
  of "prefixes 779" is:

       779-    pry,spy,SSW
       779-24  psych
       779-243 psyche
       779-2442        psychic
       779-246 psycho

  "psychic" is the only complete word match, but other combinations may be
  suggested, such as "pry-open", "psycho-1", or "spy-hole".  For each
  partial, either come up with one or more combinations that you like, or
  delete it.  Also, see if any of the prefixes suggest good non-word
  possibilities.  For example, "248" might suggest "248-1632".  Don't
  forget that simple repetition is mnemonic, so that, for example, a
  number like "248-8888" would be easy to remember.  You now have a list
  of phone numbers.

6. In a better world, the phone company would let you submit an arbitrary
  list of numbers and give you the first one on the list that is available.
  Unfortunately, to save themselves work, they restrict you to a maximum
  of ten tries, after which they just assign you a number.  Since your list
  at this point is likely MUCH longer than ten numbers, you need to prescreen
  them first.  Begin with all numbers on your list unmarked:
  a. Pick the best unmarked number and call it.  The best time to do this
     is in the middle of the day, when you are unlikely to wake anyone up.
  b. If it rings, it's in service.  Hang up and mark it as in use.  If the
     word is REALLY good, you can stay on the line and tell the person who
     answers what a great number they have and why.  I did that for "chuckle",
     which turned out to be someone at a bank.  Made her whole day.
  c. If you get a "not in service" or "that number has been changed" message,
     you've hit paydirt.  Mark the number as available.
  d. Repeat a,b,c until you have at least two and not more than ten available
     numbers.

7. Sort your list of available numbers, most desirable first.

8. Call up the phone company and order your phone service, asking for the
  most desirable number.  Hear the person express amazement when your first
  choice is acceptable!  (The main chance of failure is if the number got
  assigned since you tried it.  In that case, give your next most desirable
  number.)

--------------------- Save following as "prefixes" ---------------------
#!/usr/local/bin/perl
#
# This program searches for words which are also phone numbers which
# have one of a set of specified prefixes.
#
# Written and placed in the public domain by Howard A. Landman
#
if (@ARGV) {
       @prefixes = @ARGV ;
} else {
       # Ignore 241,261 since there are no letter for 1.
       @prefixes = (236,243,244,246,247,248,249,296,345,553,554,575,984,985,983) ;
}

$letters[0] = '' ;
$letters[1] = '' ;
$letters[2] = 'abc' ;
$letters[3] = 'def' ;
$letters[4] = 'ghi' ;
$letters[5] = 'jkl' ;
$letters[6] = 'mno' ;
$letters[7] = 'prs' ;
$letters[8] = 'tuv' ;
$letters[9] = 'wxy' ;

# This information is redundant, but it was faster to type it in than
# to code the loop to generate it from @letters.
$number{'a'} = 2 ;
$number{'b'} = 2 ;
$number{'c'} = 2 ;
$number{'d'} = 3 ;
$number{'e'} = 3 ;
$number{'f'} = 3 ;
$number{'g'} = 4 ;
$number{'h'} = 4 ;
$number{'i'} = 4 ;
$number{'j'} = 5 ;
$number{'k'} = 5 ;
$number{'l'} = 5 ;
$number{'m'} = 6 ;
$number{'n'} = 6 ;
$number{'o'} = 6 ;
$number{'p'} = 7 ;
$number{'r'} = 7 ;
$number{'s'} = 7 ;
$number{'t'} = 8 ;
$number{'u'} = 8 ;
$number{'v'} = 8 ;
$number{'w'} = 9 ;
$number{'x'} = 9 ;
$number{'y'} = 9 ;

foreach $p (@prefixes)
{
       $is_a_prefix{$p} = 1 ;
}

open(DICT,'/usr/dict/words') ;
while (<DICT>)
{
       chop ;
       next if (7 < length) ;  # word is too long for a phone #.
       $Word = $_ ;
       # lowercase and convert to digits
       ($word = $Word) =~ tr/A-Z/a-z/ ;
       @c = split(//,$word) ;
       @n = grep($_ = $number{$_},@c) ;        # using grep as mapcar
       next if (scalar(@n) != scalar(@c)) ;    # some illegal letter
       # check against prefixes
       $prefix = join('',@n[0..2]) ;
       if ($is_a_prefix{$prefix})
       {
               # build number (with hyphen)
               $number = join('',$prefix,'-',@n[3..6]) ;
               # one number may equal more than one word, so append
               $word{$number} .= "$Word," ;
       }
}

foreach $number (sort keys %word)
{
       $Words = $word{$number} ;
       chop $Words ;   # chop trailing comma
       print "$number\t$Words\n" ;
}


________________________________________________________________________


The "Yucks" digest is a moderated list of the bizarre, the unusual,
the sometimes risque, the possibly insane, and the (usually) humorous.
It is issued on a semi-regular basis, as the whim and time present
themselves.

Back issues and subscriptions can be obtained using a mail server.  Send
mail to "[email protected]" with a "Subject:" line of the single
word "help" for instructions.

Submissions and problem reports should be sent to [email protected]

________________________________________________________________________
________________________________________________________________________

The SURFPUNK Technical Journal is a dangerous multinational hacker zine
originating near BARRNET in the fashionable western arm of the northern
California matrix.  Quantum Californians appear in one of two states,
spin surf or spin punk.  Undetected, we are both, or might be neither.
________________________________________________________________________

Send postings to <[email protected]>, subscription requests
to <[email protected]>.  MIME encouraged.
Xanalogical archive access soon.  Thank YOU for using SMTP.
________________________________________________________________________
________________________________________________________________________