Saturday, May 14, 2022

What on earth is Webifi?

Webifi is a text and audio interface that enables chat interactions with web pages, in a style similar to an interactive-fiction game.

At this point, Webifi is not a general-purpose interface: it only works for crosswords. However, I plan to expand its capabilities to other kinds of web pages (mainly other word and number games). I have enabled Webifi for almost all of my own crosswords at gussalufz.com. As an example, try clicking on the Webifi link under this 13x13 puzzle of mine from a few years back. If you are a sight-challenged user, use this link instead (it adds a URL parameter called webifi, which makes the Webifi interface appear directly without any clicks, and also hides the graphical interface—you can do the same with any other crossword link that supports Webifi).

In addition, any crossword that you open with exolve-player will have Webifi enabled (you will see a Webifi link under the crossword). Please feel free to play with it and offer feedback.

Motivation

There are three motivating use cases for Webifi:

  1. An interactive-fiction interface can be a lot of fun. One can simply use Webifi as an additional interface to a crossword, coexisting with a standard interface. Using Webifi, you can navigate and solve the puzzle with some powerful extra features, while continuing to be able to also use the standard grid-based interactive interface.
  2. Using voice input and audio output, the Webifi interface can be used to solve a crossword without using the screen much (for example, while out running or walking).
  3. A sight-challenged user can use Webifi to solve a crossword, using voice inputs. They can use the text interface in conjunction with any screen-reading mechanism or extension that they may already be using, or they can use Webifi's own audio output.

In an interactive-fiction game (aka a text adventure), you move between various locations, interacting with your surroundings using simple text commands. Each crossword can be thought of as a text adventure game, where the clues are the individual locations. When you are "at" a particular clue, you can access the clue (command: clue), you can review what letters have been entered so far (command: entry), you can consult wordplay tools for help (commands: matches, anagrams, synonyms, etc.), you can enter (command: type) and check solutions (command: check), and so on. You can navigate across clues in various orders, jumping off to crossing lights or to clues that have the fewest unfilled letters, etc.

Illustration

Here's a mock interaction with a Webifi-powered crossword, as an illustration:

> entry

Current entry in this 11 Across clue is: A_S__

> clue

The way to approach a wedding is through strong beer (5)

> matches

Here are some matches.

Assam, Assad, Aisha, Aisne
Aesop, asset, at sea, aisle
arson, assay, apses, asses
arsis, aesir, assai, apsis
arses, absey, adsum, absit
assot, A'asia

> type aisle

Entered aisle in 11 Across.

> check

All cells are correct

> next best

Inspects the foundations of some Berry Ave houses (4)

Current entry in this 6 Down clue is: ___S

> audio on

Audio is on; language is en-GB, with the name, Google UK English Female

Please prefer to use headphones for privacy and also to avoid interference if using voice-typing.

Assistive features

Webifi provides some powerful assistive features for solving crosswords (of course, it's up to you as a solver to decide how much assistance you want to use—my own philosophy as a solver is to maximize my fun in solving, which sometimes means using some assistance to get past a clue that I might be stuck on). Webifi can help you find words matching a partial solution; it can offer possibilities for some cryptic wordplays such as anagrams and homophones. When online, it can also look up definitions and synonyms.

Saturday, April 30, 2022

Composite Anagrams

A recent The Hindu Cryptic crossword of mine (THC #13543) featured this clue:

5d. Saga this distant relative of mine misused for cheap magazines? (10)

This is a "Composite Anagram" (CA, also called a "Compound Anagram") and is considered an "advanced" clue type (I say, piffle!). I think it's quite straightforward, once you've worked a few out.

You can find many explanations on the web, but I think my explanation is better (of course :-)). Just like a normal anagram clue, a CA has two parts, X and Y, and the clue's cryptic reading tells you that X is an anagram of Y (it can do so in a variety of ways, like "Angering X gives Y," or "X is Y after adjustments," or "X rearranges to Y," etc.—the point is that the anagrind can be anywhere as long as the cryptic reading is grammatical).

In a normal anagram clue, one of X/Y is the definition. In a CA, one of X/Y contains the definition as a sub-phrase. It will have other letters (to be included literally in the anagramming) before and/or after the definition part. It is common to indicate a CA with a "this [definition]," or "such a [definition]," etc. (but sometimes the setter may not do that and get some raised eyebrows, if the surface without "this"/"such"/etc. is just much better).

So, in my clue, X = "saga this distant relative of mine", with "distant relative of mine" being the definition, prefixed by "this." The solution is CHIMPANZEE. The anagrind is "misused for." And, Y = "cheap magazines."

(SAGA CHIMPANZEE)* = CHEAP MAGAZINES.

Sunday, July 26, 2020

Al's Trick

Al's Trick is the puzzle that I wanted to create that motivated me to write the Exolve software. There are some "special effects" to be seen, once you've answered the first question correctly.

Tuesday, July 21, 2020

Exolve in a widget

This blogpost illustrates how to use the Exolve software to embed interactively solvable crossword puzzles into your blogposts (or other websites).

Just copy the following HTML snippet into the HTML of your blogpost or web page (the resulting puzzle is also shown in this post). You can edit the HTML of a new or existing blogpost by choosing the "< > HTML view" menu option in Blogger.

    
  <link rel="stylesheet" type="text/css"
    href="https://viresh-ratnakar.github.io/exolve-m.css"/>
  <script
    src="https://viresh-ratnakar.github.io/exolve-m.js">
  </script>

  <div id="exolve"></div>
  <script>
    createExolve(`
    ======REPLACE WITH YOUR PUZZLE BELOW======
  
    exolve-begin
      exolve-id: some-unique-alphanumeric-id
      exolve-title: Replace With Title
      exolve-setter: Replace With Setter
      exolve-copyright: Replace with copyright notice or delete
      exolve-width: 3
      exolve-height: 3
      exolve-grid:
        000
        0.0
        000
      exolve-across:
        1 Running with placement, essentially, for single (3)
        3 Oddly fluent and entertaining (3)
      exolve-down:
        1 Retreating thief forgot to hide bananas (3)
        2 One suffering for a long time (3)
    exolve-end
  
    ======REPLACE WITH YOUR PUZZLE ABOVE======
    `);
  </script>
  

You can edit the text between the "exolve-begin" and 'exolve-end" lines to specify your own puzzle. Note that instead of "0"s, you can specify the solution letters in grid squares, which will create a puzzle that allows solutions to be checked/revealed via button clicks. Exolve supports a rich variety of puzzles, letting you use:

  • Blocked or barred grids, or grids using both blocks and bars.
  • Linked clues.
  • Puzzle preambles.
  • Annotations of clue solutions.
  • Customized color schemes.
  • Any language.
  • Diagramless puzzles.
  • Jigsaw-style puzzles.
  • Customized special effects through additional JavaScript.
  • And much more! See the Exolve documentation for details.

To force blog readers to refresh their version of the Exolve software instead of using the cached copy (after a software update for a bug-fix, for example), you can attach any new arbitrary suffix after a question mark, to the exolve URLs in your code. For example, here we have appended "?20200802"

    
  <link rel="stylesheet" type="text/css"
    href="https://viresh-ratnakar.github.io/exolve-m.css?20200802"/>
  <script
    src="https://viresh-ratnakar.github.io/exolve-m.js?20200802">
  </script>