Peter’s blog ✴ Week 190 ✴ 7 November 2022

THE WEEKLY CHALLENGE
Capital test and ambiguous encoding

The Perl Camel

Task 1

Capital detection

You are given a string with alphabetic characters only: A..Z and a..z.

Write a script to find out if the usage of capitals is appropriate if it satisfies at least one of the following rules:

  1. Only first letter is capital and all others are small.
  2. Every letter is small.
  3. Every letter is capital.

Examples


Example 1
Input: $s = 'Perl'
Output: 1

Example 2
Input: $s = 'TPF'
Output: 1

Example 3
Input: $s = 'PyThon'
Output: 0

Example 4
Input: $s = 'raku'
Output: 1

Analysis

Generally I steer clear of hard-to-follow one-liners, but this one is fairly simple:

$test =~ m/^[A-Z]?([a-z]*|[A-Z]*)$/ ? 1 : 0;

In words, the string follows the rule if:

  • it starts with zero or one capital letter, and
  • it continues with either zero or more capital letters, or zero or more lower case letters.

Perl Weekly’s review

from PW issue 590

Well crafted breakdown of the task makes it so easy to follow. Keep it up great work.

Try it 

Try running the script with any input:



example: Challenge

Script


#!/usr/bin/perl

# Peter Campbell Smith - 2022-11-07
# PWC 190 task 1

use v5.28;
use utf8;
use warnings;
binmode(STDOUT, ':utf8');

my (@tests, $test);

@tests = qw[Perl PWC PyThon raku Byron ShakesSpeare miltoN KEATS 123 6-fold Hello! a A];

# loop over tests
 while ($test = shift @tests) {
     say qq[\nInput:  $test\nOutput: ] . ($test =~ m/^[A-Z]?([a-z]*|[A-Z]*)$/ ? 1 : 0);
}

8 lines of code

Output from script


Input:  Perl
Output: 1

Input:  PWC
Output: 1

Input:  PyThon
Output: 0

Input:  raku
Output: 1

Input:  Byron
Output: 1

Input:  ShakesSpeare
Output: 0

Input:  miltoN
Output: 0

Input:  KEATS
Output: 1

Input:  123
Output: 0

Input:  6-fold
Output: 0

Input:  Hello!
Output: 0

Input:  a
Output: 1

Input:  A
Output: 1

 

Any content of this website which has been created by Peter Campbell Smith is in the public domain