Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Impressum chap6_mj.html   Interaktion und
PortierbarkeitHTML

 

 products/Sources/formale Sprachen/GAP/pkg/browse/doc/chap6_mj.html


<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<script type
  src="https://cdn.jsdelivr.net/npm/mathjax@2/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>
<title>GAP (Browse) - Chapter 6: Examples of Applications based on NCurses.BrowseGeneric
</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta name="generator" content="GAPDoc2HTML" />
<link rel="stylesheet" type="text/css" href="manual.css" />
<script src="manual.js" type="text/javascript  !apprompt@gap>| !gapinput@FourCycle := RcwaMapping((4,5,6,7),[4..7]);|
<script type="text/javascript">overwriteStyle();</script>
</head>
<body class="chap6"  onload="jscontent()">


<div class="chlinktop"><span class="chlink1">Goto Chapter: </span><a href="chap0_mj.html">Top</a>  <a href="chap1_mj.html">1</a>  <a href="chap2_mj.html">2</a>  <a href="chap3_mj.html">3</a>  <a href="chap4_mj.html">4</a>  <a href="chap5_mj.html">5</a>  <a href="chap6_mj.html">6</a>  <a href="chapA_mj.html">A</a>  <a href="chapBib_mj.html">Bib</a>  <a href="chapInd_mj.html">Ind</a>  </div>

<div class="chlinkprevnexttop"> <a href="chap0_mj.html">[Top of Book]</a>   <a href="chap0_mj.html#contents">[Contents]</a>    <a href="chap5_mj.html">[Previous Chapter]</a>      !apprompt@|g      level =1  returnFourCycle |

<p id="mathjaxlink" class="pcenter"><a href="chap6.html">[MathJax off]</a></p>
<p><a id="X78D4F8EA79405AF9" name="X78D4F8EA79405AF9"></a></p>
<div class="ChapSects"><a href="chap6_mj.html#X78D4F8EA79405AF9">6 <  !apprompt@|!apinput          (java.lang.StringIndexOutOfBoundsException: Range [89, 90) out of bounds for length 89
</span></a>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap6_mj.html#X813F90F7815AB5B3">6.1 <span class="< !apprompt@|!apinput@* Restriction(,RcwaMapping[431]
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6_mj.html#X7FDD696B7DD54A6E">6.1-1 Browse</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="java.lang.StringIndexOutOfBoundsException: Index 91 out of bounds for length 90
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6_mj.html#X8295F85D87118C83">6.2-1 NCurses.BrowseDenseList</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6_mj.  @|!apinput@                           ([4,,]);java.lang.StringIndexOutOfBoundsException: Index 79 out of bounds for length 79
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap6_mj.html#X8720923F7FDE5223">6.3 <span class="Heading">Character Table Display</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br />span class"ocss" &<span<href"hap6_mj.#870744182073">.- </>/>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6_mj.html#X7D80A56D853C9655">6.3-2 BrowseDecompositionMatrix</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap6_mj.html#X80E9A03780DE8891">6.4 <span class="Heading">Table of Marks Display</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6_mj.html#X7F4BD9C580BBBAA4">6.4-1 Browse</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap6_mj.html#java.lang.StringIndexOutOfBoundsException: Index 117 out of bounds for length 75
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6_mj.html#X8411AF928194C5AB">6.5-1 <span class="Heading">BrowseAtlasInfo</span></a>
</span>
</div></div>
<div class="ContSect"><  !gapprompt@>| !gapinput@ GrigorchukGroup2Generatorlevel);|
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6_mj.html#X7D79DF9181A15EDF">6.6-1 BrowseGapManuals</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap6_mj.html#X846751CC7F54F51D">6.7 <span class="Heading">Overview of Bibliographies</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6_mj.html#X7F0FE4CC7F46ABF3">6.7-1 BrowseBibliography</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6_mj.html#X7E4B5E277D08987B">6.7-2 BrowseBibliographyGapPackages</a\nd{erbatimjava.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6_mj.html#X81F1558678ACDB4A">6.7-3 BrowseMSC</a></span>
</div></div>
< We can do  things as shownin  example on the\extsfGAP  for the`first' Grigorchuk group:
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6_mj.html#X7B42091982DE7AE7">6.8-1 BrowseProfile</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap6_mj.html#X87B30F7387C0E531">6.9 <span class="Heading">Variables defined in <strong class="pkg">GAP\egin{}commandchars=!|fontsize=small,=,abelExample]
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6_mj.html#X8030B1688335783D">6.9-1 BrowsePackageVariables</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap6_mj.html#X7CD025147D528741">6.10 <span class="Heading">Configuring User preferences–a Variant</span></a>
</span>
<div class="ContSSBlock">
<span   !gapprompgapprompt@>|!gapinput@G : List(1.4]lev-GrigorchukGroup2(ev); #The  4 .|
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap6_mj.html#X86C730A07855238D">6.11 <span class="Heading">Overview of <strong class="pkg">GAP</strong> Data</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6_mj< [< group  Z  2generators,
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6_mj.html#X7FC24FCE7A0C6058">6.11-2 BrowseGapDataAdd</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap6_mj.html#X7E3FDA927E62D963">6.12 <span class="Heading">Navigating in a Directory Tree</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6_mj.html#X859682DE8397261E">6.12-1 BrowseDirectory</a></span>
</div></div>
<div class="rcwa   Z  2 >,
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6_mj.html#X7EF5FCBD7DAFFAF3">6.13-1 BrowsePuzzle</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap6_mj.html#X7FFF943D78A403C9">6.14 <span class="Heading">Peg Solitaire</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6_mj.html#X82C8691380FCB674">6.14-1 PegSolitaire</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap6_mj.html  !apprompt@ap>|!apinputH: ([.4]lev->(G[ev][.4l-]);#Isom..-ps.
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6_mj.html#X8100659E81FFE9A2">6.15-1 BrowseRubiksCube</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap6_mj.html#X7ADD618186541123">6.16 <span class="Heading">Changing Sides</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6_mj.html#X7FCFC5858584F46E">6.16-1 BrowseChangeSides</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap6_mj.html#X7DDE46668321B5E9">6.17 <span class="Heading">Sudoku</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6_mj.html#X789D3D4C818F4BC2">6.17-1 Sudoku.Init</a></span>
<span class        15913(,,,4(,,2,6 ) 
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6_mj.html#X8401B31A879F9F9F">6.17-3 Sudoku.RandomGame</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6_mj.html#X86917AC57C25A68F">6.17-4 Sudoku.SimpleDisplay</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6_mj.html#X81F98C6C7C8415AB">6.17-5 Sudoku.DisplayString</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6_mj.html#X7C73C6D08293B3B8">6.17-6 Sudoku.OneSolution</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6_mj.html#X865DDBDC7E16217F">6.17-7 Sudoku.UniqueSolution</a></span>
<span class= <   2 generators>]
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6_mj.html#X804D66D67B908F30">6.17-9 Sudoku.HTMLGame</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap6_mj.html#X78E8DF8381626623">6.18 <span class="Heading">Managing simple Workflows</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6_mj.html#X7E47FC2378C276C6">6.18-1 <span class="Heading">BrowseWizard</span></a>
</span>
</div></div>
<div class="ContSect[4,1024,4294967296,1329227995784915872903807060280344576
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap6_mj.html#X80F418C5835C62BA">6.19-1 LoadDemoFile</a></span>
</div></div>
</div>

<h3>6 <span class="<h3>6 <span class="Heading(ast,-CollectedF(n))|
</span></h3>

<p>This chapter introduces the operation <code class="func">Browse</code> (<a href="chap6_mj.html#X7FDD696B7DD54A6E"><span class="RefLink">6.1-1</span></a>) and lists several examples how the function <code class="func">NCurses.BrowseGeneric</code> (<a href="chap4_mj.html#X85FC163D87FAFD12"><span class="RefLink">4.3-1</span></a>) can be utilized for rendering <strong class="pkg">GAP</strong> related data or for playing games. Each section describes the relevant <strong class="pkg">GAP</strong> functions and briefly sketches the technical aspects of the implementation; more details can be found in the <strong class="pkg">GAP</strong> files, in the <code class="file">app</code> directory of the package.</p>

<p>Only Section <a href="chap6_mj.html#X80E9A03780DE8891"><span class="RefLink">6.4</span></a> describes a standard application in the sense of the introduction to Chapter <a href="chap4_mj.html#X877E60DE7F53FDEC"><span class="RefLink">4</span></a>, perhaps except for a special function that is needed to compare table entries. The other examples in this chapter require some of the programming described in Chapter <a href="chap5_mj.html#X82DDDC1783B4CA30"><span class="RefLink">5</span></a>.</p>

<p>The <strong class="pkg">GAP</strong> examples in this chapter use the "replay" feature of <code class="func">NCurses.BrowseGeneric</code> (<a href="chap4_mj.html#X85FC163D87FAFD12"><span class="RefLink">4.3-1</span></a>), see Section 

<p><a id="X813F90F7815AB5B3" name="X813F90F7815AB5B3"></a></p>

<h4>6.1 <span class="Heading">The Operation <code class="code">Browse</code></span></h4>

<p><a id="X7FDD696B7DD54A6E" name="X7FDD696B7DD54A6E"></a></p>

<h5>6.1-1 Browse</h5>

<div class="func"><table class="func" width="100%"><tr><td   
<p>This operation displays the <strong class="pkg">GAP</strong> object <var class="Arg">obj</var> in a nice, formatted way, similar to the operation <code class="func">Display</code> (<a href="../../../doc/ref/chap6_mj.html#X83A5C59278E13248"><span class="RefLink">Reference: Display</span></a>). The difference is that <code class="func">Browse</code> is intended to use <code class="code">ncurses</code> facilities.</p>

<p>Currently there are methods for matrices (see <code class="func">Browse</code> (<a href="chap6_mj.html#X7AD78A0B7BEDBB20"><span class="RefLink">6.2-2</span></a>)), for character tables (see <code class="func">Browse</code> (<a href="chap6_mj.html#X870C744182073CF6"><span class="RefLink">6.3-1</span></a>)) and for tables of marks (see <code class="func">Browse</code> (<a href="chap6_mj.html#X7F4BD9C580BBBAA4"><span class="RefLink">6.4-1</span><logpage ,20, }

<p><a id="X7F6EE19480D10E2B" name="X7F6EE19480D10E2B"></a></p>

<h4>6.2 <span class="Heading">Matrix Display</span></h4>

<p>The <strong class="pkg">GAP</strong> library provides several <code class="func">Display</code> (<a href="../../../doc/ref/chap6_mj.html#X83A5C59278E13248"><span class="RefLink">Reference: Display</span></a>) methods for matrices. In order to cover the functionality of these methods, <strong class="pkg">Browse</strong> provides the function <code class="func">NCurses.BrowseDenseList</code> (<a href="chap6_mj.html#X8295F85D87118C83"><span class="RefLink">6.2-1</span></a>) that uses   $n1    theforwardorbit  positiveinteger 

<p>The idea is to customize this function for different special cases, and to install corresponding <code class="func">Browse</code> (<a href="chap6_mj.html#X7FDD696B7DD54A6E"><span class="RefLink">6.1-1</span></a>) methods. Examples are methods for matrices over finite fields and residue class rings of the rational integers, see <code class="func">Browse</

<p>The code can be found in the file <code class="file">app/matdisp.g</code> of the package.</p>

<p><a id="X8295F85D87118C83" name="X8295F85D87118C83"></a></p>

<h5>6.2-1 NCurses.BrowseDenseList</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code  T_5^\pm:\\{}\ongrightarrowmathbbZ,\\\\
<p>Returns: nothing.</p>

<p>Let <var class="Arg">list</var> be a dense list whose entries are lists, for example a matrix, and let <var class="Arg">arec</var> be a record. This function displays <var class="Arg">list</var> in a window, as a two-dimensional array with row and column positions as row and column labels, respectively.</p>

<p>The following components of <var class="Arg">arec</var> are supported.</p>


<dl>
<dt><strong class="Mark"><code class="code">header</code></strong></dt>
<dd><p>If bound, the value must be a valid value of the <code class="code">work.header</code> component of a browse table, see <code class="func">BrowseData.IsBrowseTable</code> (<a href="chap4_mj.html#X81007E2F8552523B"><span class="RefLink">4.2-3</span></a>); for example, the value can be a list of strings. If this component\racn{2}        t{}  \\ext{} \

</dd>
<dt><strong class="Mark"><code class="code">footer</code></strong></dt>
<dd><p>If bound, the value must be a valid value of the <code class="code">work.footer</code> component of a browse java.lang.StringIndexOutOfBoundsException: Index 119 out of bounds for length 53

</dd>
<dt><strong class="Mark"><code class="code">convertEntry</code></strong></dt>
<dd><p>If bound, the value must be a unary function that returns a string describing its argument. The default     \nd{ases}

</dd>
<dt><strong class="Mark"><code class="code">labelsRow</code></strong></dt>
<dd><p>If bound, the value must be a list of row label rows for <var class="Arg">list</var>, as described in Section <code class="func">BrowseData.IsBrowseTable</code> (<a href="chap4_mj.html#X81007E2F8552523B"><span class="RefLink">4.2-3</span></a>).   \

</dd>
<dt><strong class="Mark"><code class="code">labelsCol</code></strong></dt>
<dd><p>If bound, the value must be a list of column label rows for <var class="Arg">list</var>, as described in Section <code class="func"

</dd>
</dl>
<p>The full functionality of the function <code class="func">NCurses.BrowseGeneric</code> (<a href="chap4_mj.html#X85FC163D87FAFD12"><span class="RefLink">4.3-1</span></a>) is available.</p>

<p><a id="X7AD78A0B7BEDBB20" name="X7AD78A0B7BEDBB20"></a></p>

<h5>6.2-2 Browse</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&#an style='color: green'>8227; Browse</code>( <var class="Arg">list</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: nothing.</p>

<p>Several methods for the operation <code class="func">Browse</code>ny positive integer under the action of themonoid generated by  


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">n:= [ 14, 14, 14, 14 ];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">input:= Concatenation( n, n, n, "Q" );;  # ``do nothingmappings$_^- and{nobreakspace}T_5^$ contains{nobreakspace}  of all, enter thegenerators
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseData.SetReplay( input );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Browse( RandomMat( 10, 10, Integers ) );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseData.SetReplay( input );</span>
< class=GAPprompt"gap&t;/span>< class=GAPinput"Browse  10,10,GF3) ;/spanjava.lang.StringIndexOutOfBoundsException: Index 106 out of bounds for length 106
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseData.SetReplay( input );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Browse( RandomMat( 10, 10, GF(4) ) );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseData.SetReplay( input );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Browse( RandomMat( 10, 10, Integers mod 6 ) );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseData.SetReplay( input );</span>
<span class="GAPprompt">gap></span> <span class  !apprompt@|gapinput@5 : ([1,,2][,1,];|
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseData.SetReplay( input );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Browse( RandomMat( 10, 10, GF( 2^20 ) ) );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseData.SetReplay( false );</span>
</re>/>

<p><a id="X8720923F7FDE5223" name="X8720923F7FDE5223"></a></p>

<h4>6.3 <span class="Heading">Character Table Display</span></h4>

<p>The <strong class="pkg">GAP</strong> library provides a <code class="func">Display</code> (<a href="../../../doc/ref/chap6_mj.html#X83A5C59278E13248"><span class="RefLink">Referencejava.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2

<p>The <code class="func">Browse</code> (<a href="chap6_mj.html#X7FDD696B7DD54A6E"><span class="RefLink">6.1-1</span></a>) method for character tables can be called instead of <code class="func">Display</code> (<a href="../../../doc/ref/chap6_mj.html#X83A5C59278E13248"><span class="RefLink">Reference: Display</span></a>). For convenience, one can additionally make this function the default <code class="func">Display</code> (<a href="../../../doc/ref/chap6_mj.html#X83A5C59278E13248   for  number k$ thatforr(^)$there   {\}f$ of ${n}mappings T_5^\m$whose  to r2k$given  n\apsto an+)c$where$>$ 

<p>The function <code class="func">BrowseDecompositionMatrix</code> (<a href="chap6_mj.html#X7D80A56D853C9655>span ="efLink"6.-<span>/a> canbeusedtodisplaydecomposition 

<p><a id="X870C744182073CF6" name="X870C744182073CF6"></a></p>

<h5>6.3-1 Browse</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&#an style='color: green'>8227; Browse</code>( java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
<p>This method displays the character table <var class="Arg">tbl</var> in a window. The optional record <var class="Arg">options</var> describes what shall be 

<p>The full functionality of the function <code class="func">NCurses.BrowseGeneric</code> (<a href="chap4_mj.html#X85FC163D87FAFD12"><span class="RefLink">4.3-1</span></a>) is available.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">if TestPackageAvailability( "CTblLib" ) = true then</span>
<span class="GAPprompt">></span> <span class="GAPinput">     BrowseData.SetReplay( Concatenation(</span>
<span class="GAPprompt">></span> <span class="GAPinput">        # scroll in the table</span>
< class=GAPprompt"&t;<span><pan class=GAPinput"        DRULdddddrrrrrlluu"<span>
<span class="GAPprompt">></span> <span class="GAPinput">        # select an entry and move it around</span>
<span class="GAPprompt">></span> <span class="GAPinput">        "seddrruuuddlll",</span>
<span class="GAPprompt">></span> <span class="GAPinput">        # search for the pattern 135 (six times)</span>
<      "/135", [ NCurseskeysENTER],"nnnnn"<span>
<span class="GAPprompt">></span> <span class="GAPinput">        # deselect the entry, select the first column</span>
<span class="GAPprompt">></span> <span class="GAPinput">        "qLsc",</span>
<span class="GAPprompt">></span> <span class="GAPinput">        # sort and categorize by this column</span>
<span class="GAPprompt">></span> <span class  !apprompt@|!apinput      : Union(ecr)|
<span class="GAPprompt">></span> <span class="GAPinput">        # select the first row, move down the selection</span>
<span class="GAPprompt">></span> <span class="GAPinput">        "srdddd",</span>
<span class="GAPprompt">></span> <span class="GAPinput">        # expand the selected category, scroll the selection down</span>
<span class="GAPprompt">></span> <span class="GAPinput">        "xd",</span>
<span class="GAPprompt">></span> <span class="GAPinput">        # and quit the application</span>
<span class="GAPprompt">></span> <span class="GAPinput">        "Q" ) );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     Browse( CharacterTable@> !apinput@      =k+1;java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
<span class="GAPprompt">></span> <span class="GAPinput">     BrowseData.SetReplay( false );</span>
<span class="GAPprompt">></span> <span  !gapprompt@|!apinput@    =;java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59
</pre></div>

<p><em>Implementation remarks</em>: The first part of the code in the <code class="func">Browse</code> (<a href="chap6_mj.html#X7FDD696B7DD54A6E"><span class="RefLink">6.1-1</span></a>) method for character tables is almost identical with the code for extracting the data to be displayed from  1 2

<p>The standard modes in <code class="func">BrowseData</code> (<a href="chap5_mj.html#X86E80E578085F137"><span class="RefLink">5.4-1</span></a>)   :0()

<p>An individual <code class="code">minyx</code> function does not only check whether the desired table fits into the window but also whether a table with too high column labels (centralizer orders and power maps) would fit if these labels get collapsed via the <strong class="button">p</strong> key. In this case, the labels are automatically collapsed, and the <strong class="button">p</strong> key is disabled  3:Z  ()U7(java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20

<p>In order to keep the required space small also for large character tables, caching of formatted matrix entries is disabled, and the strings to be displayed are computed on demand with a <code class="code">Main</code> function in the <code class="code">work</code> component of the browse table. For the same reason, the constant height one for all table rows is set in advance, so one need not inspect a whole character if only a few values of it shall be shown.</p>

<p>Special functions are provided for sorting (concerning the comparison of character values, which can be integers or irrationalities) and categorizing the table by a column (the value  6:<nion of 48 residue classes ( )

<p>The code can be found in the file <code class="file">app/ctbldisp.g</code> of the package.</p>

<p><a id="X7D80A56D853C9655" name="X7D80A56D853C9655"></a></p>

<h5>6.3-2 BrowseDecompositionMatrix</ :Integers

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&#an style='color: green'>8227; BrowseDecompositionMatrix</code>( <var class="Arg">modtbl</var>[, <var class="Arg">b</var>][, <var class="Arg">options</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<p>This method displays the decomposition matrix of (the <var class="Arg">b</var>-th block of) the Brauer character table <var \{Verbatimjava.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14

<p>The positions of the ordinary and modular irreducible characters are shown in the labels of the rows and columns, respectively Thus$=$serves our To  sure that for any  integern  monoid containsa $$suchthat $^<,westill  to check this condition  `'{nobreakspace}n$ Since  case$>$we  (+)c \geq n$ ifonly  $n \leq b/c-a)$, we only need to check those$$which are notlarger than the largest coefficient $_r()$occurring in any ofthe productsunder consideration:

<p>The full functionality of the function <code class="func">NCurses.BrowseGeneric</code> (<a href="chap4_mj.html#X85FC163D87FAFD12"><span class="RefLink">4.3-1</span></a>) is available.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseData.SetReplay( Concatenation(</span>
<span class="GAPprompt">></span> <span class="GAPinput">        # select the first entry</span>
<span class="GAPprompt">></span> <span class="GAPinput">        "se",</span>
<span class="GAPprompt">></span> <span class="GAPinput">        # scroll in the table</span>
<span class="GAPprompt">></span> <span class="GAPinput">        "drrrr",</span>
<span class="GAPprompt">></
<span class="GAPprompt">></span> <span class="GAPinput">        [ 14, 14, 14, 14, 14 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput">        # and quit  25999
<span class="GAPprompt">></span> <span class="GAPinput">        "Q" ) );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseDecompositionMatrix( CharacterTable( "J1" ) mod 2 );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseData !apprompt@ap>|!apinputsmall: ([..axb]n-ForAll(aps,>^>n)|
</pre></div>

<p>The code can be found in the file <code class="file">app/ctbldisp.g</code> of the package.</p>

<p><a id="X80E9A03780DE8891" name="X80E9A03780DE8891"></a></p>

<h4>6.4 <span class="Heading">Table of Marks Display</span></h4>

<p>The <strong class="pkg">GAP</strong> library provides a <code class="func">Display</code> (<a href="../../../doc/ref/chap6_mj.html#X83A5C59278E13248"><span class="RefLink">Reference: Display</span></a>) method for tables of marks that breaks the table java.lang.StringIndexOutOfBoundsException: Index 257 out of bounds for length 2

<p><code class="func">Browse</code> (<a href="chap6_mj.html#X7FDD696B7DD54A6E"><span class="RefLink">6.1-1</span></a>) can be called instead of <code class="func">Display</code> (<a href="../../../doc/ref/chap6_mj.html#X83A5C59278E13248"><span class="RefLink"end{}

<p><a id="X7F4BD9C580BBBAA4" name="X7F4BD9C580BBBAA4"></a></p>

<h5>6.4-1 Browse</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&#an style='color: green'>8227; Browse</< means thatexcept{nobreakspace1,only for n\n\{,\}  isno productof7  $_^pm  maps$$ a  integer   thatalso the forward orbits   three
<p>This method displays the table of marks <var class="Arg">tom</var> in a window. The optional record <var class="Arg">options</var> describes what shall be displayed, the supported components and the default values are described in <a href="../../../doc/ref/chap70_mj.html#X7AC0FB9685DCBCFD"><span class="RefLink">Reference: Printing Tables java.lang.StringIndexOutOfBoundsException: Range [0, 345) out of bounds for length 68

<p>The full functionality of the function <code class="func">NCurses.BrowseGeneric</code> (<a href="chap4_mj.html#X85FC163D87FAFD12"><span classof{}1:


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">if TestPackageAvailability( "TomLib" ) = true then</span>
<span class="GAPprompt">></span> <span class\eginVerbatim[=!|f=\mallframesinglelabel]
<span class="GAPprompt">></span> <span class="GAPinput">        # scroll in the table</span>
<span class="GAPprompt">></span> <span class="GAPinput">        "DDRRR",</span>
<span class="GAPprompt">></span> <span class="GAPinput">        # search for the (exact) value 100 (three times)</span
<span class="GAPprompt">></span> <span class="GAPinput">        "/100",</span>
<span class="GAPprompt">></span> <span class="GAPinput">        [ NCurses.keys.DOWN, NCurses.keys.DOWN, NCurses.keys.RIGHT ],</span>
<span class="GAPprompt">></span> <span class="GAPinput">  !appromptgap|!apinput@ : [];  : ;|
<span class="GAPprompt">></span> <span class="GAPinput">        [ NCurses.keys.RIGHT, NCurses.keys.ENTER ], "nn",</span>
<span class="GAPprompt">></span> <span class="GAPinput">        # no more occurrences of 100, confirm</span>
<span class="GAPprompt">></span  !apprompt@ap|!apinput@epeat|
<span class="GAPprompt">></span> <span class="GAPinput">        # and quit the application</span>
<span class="GAPprompt">></span> <span class="GAPinput">        "Q" ) );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     Browse( TableOfMarks( "A10" ) );</span>
<">     BrowseData.SetReplay false ;<span
<span class="GAPprompt">></span> <span class="GAPinput">   fi;</span>
</pre></div>

<p><em>Implementation remarks</em>: Rows and columns are indexed by their positions. The identifier of the table is used as the static header, there is no footer.</p>

<p>In order to keep the required space small also for large tables of marks, caching of formatted matrix entries is disabled, and the strings to be displayed are computed on demand with a <code class="code">Main</code> function in the <code class="code">work</code> component of the browse table. For the same reason, the constant height one for the table rows is set in advance. (For example, the table of marks of the group with identifier <code class="code">"O8+(2)"</code>, with <span class="SimpleMath">\(11171\)</span> rows and columns, can be shown with <code class="func">Browse</code> (<a href="chap6_mj.html#X7FDD696B7DD54A6E"><span class="RefLink">6.1-1</span></a>) in a <strong class="pkg">GAP</strong> session requiring about <span class="SimpleMath">\(100\)</span> MB.)</p>

<p>The code can be found in the file <code class="file">app/tomdisp.g</code> of the package.</p>

<p><a id="X80370827793813FD" name="X80370827793813FD"></a></p>

<h4>6.5 <span class="Heading">Table of Contents of <strong class="pkg">AtlasRep</strong></span></h4>

<p><p>The \extttA(LoadRCWAExamples(.ollatzMapping)}in order to assign the global  defined  section.}

<p><a id="X8411AF928194C5AB" name="X8411AF928194C5AB"></a></p>

<h5>6.5-1 <span class="Heading">BrowseAtlasInfo</span></h5>

<div class="func"><table class="func" width="100%"><tr><td class
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&#an style='color: green'>8227; BrowseAtlasInfo</code>( <var class="Arg">gapname</var>[, <var class="Arg">std</var>][, <var class="Arg">...</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: the list of "clicked" info records.</p>

<p>This function shows the information available viasection{textcolor{Chapter }  free group of rank2and   group PSL(,{ensuremath{mathbb Z}}}\abelsecFa}

<p>The optional arguments can be used to restrict the table to core data or data extensions, or to show an overview for one particular group. The arguments are the\ogpage{7,21  

<p>When one "clicks" on one of the table rows or entries then a browse table with an overview of the information available for this group is shown, and "clicking" on one of the rows in these tables adds the corresponding info record (see <code class="func">OneAtlasGeneratingSetInfo</code> (<a href="../../../pkg/atlasrep/doc/chap3_mj.html#X841478AB7CD06D44"><span class\yperdefL{815800ED820C6ECF}java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33

<p>The full functionality of the function <code class="func">NCurses.BrowseGeneric</code> (<a href="chap4_mj.html#X85FC163D87FAFD12"><span class="RefLink">4.3-1</span></a>) is available.</p>

< class="func>BrowseAtlasInfo</>can   to info  about permutation representationsof  alternating groups <pan class=SimpleMath"\A_5\<span>and <pan=SimpleMath"\(_\<span> We search forthe group name < class=code""5"/   overview ,andthefirstcell in    for <pan =SimpleMath>(\<span selected;hitting <trong class"">nter<strong>  causes anewwindow beopened with overview of the data available for< class=SimpleMath"\A_5\)/pan>;moving  rowsand hitting the <trong class=button"Enter<strong>key again causes the secondrepresentation to be     ;hittingstrongclass""Q>closes the  ,    in   table wemove selection down twice (totherowforthegroupspanclass""\A_6)/pan)   thefirst representation for thisgroup    table   return value is the listwith thedatafor the  .<>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">d:= [ NCurses.keys.DOWN ];;  r:= [ NCurses.keys.RIGHT ];;</span>Z})\exttt{\ymbol{45}texttt{symbol{5} infact it embeds even inthe
<span class="GAPprompt">gap></span> <span class="GAPinput">c:= [ NCurses.keys.ENTER ];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseData.SetReplay( Concatenation(</span>
<span class="GAPprompt">></span> <span class="subgroup which is generated by all class transpositions. embedding
<span class="GAPprompt">></span> <span class="GAPinput">       d, d, r,       # ... such that just the word matches,</span>
<span class="GAPprompt">></span> <span class="GAPinput">       c,             # start the search,</span>
< ="APprompt"&t;<span> <pan class=GAPinput"       c,            #click the  entry A5,/pan>
<span class="GAPprompt">></span> <span class="GAPinput">       d, d,          # move down two rows,</span>
<span class="GAPprompt">></span> <span class="GAPinput">       c,             # click the row for this representation,</span>
<span class="GAPprompt">></span> <span class="GAPinput">       "Q",           # quit the second level table,</so\texttt{\symbol{45}}called ``Schottky groups'' (cf.{\nobreakspace}\cite{LaHarpe00}, page{\nobreakspace}27) from PSL(2,{\ensuremath{\mathbb C}}) to
<span class="GAPprompt">></span> <span class="GAPinput">       d, d,          # move down two rows,</span>
<span class="GAPprompt">></span> <span class="GAPinput">       c,             # click the table entry A6,</span>
<span class="GAPprompt">></span> <span class="GAPinput">       d,             # move down one row,</span>
<span class="GAPprompt">&<CWA(\nsuremath{mathbb Z} weusenotation  thecited book) 
<span class="GAPprompt">></span> <span class="GAPinput">       "Q",           # quit the second level table,</span>
<span class="GAPprompt">></span> <span class="GAPinput">       "Q" ) );       # and quit the application.</span>
<span class="GAPprompt">gap></span> <\begin{Verbatim}[commandchars=!@|,fontsize==,=]
<span class="GAPprompt">></span> <span class="GAPinput">     SetUserPreference( "AtlasRep", "AtlasRepMarkNonCoreData", "" );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     tworeps:= BrowseAtlasInfo();</span>
<span class="GAPprompt">></span> <span class="GAPinput">   else</span>
<span class="GAPprompt">></span> <span class="GAPinput">     tworeps:= [ fail ];</span>
<span class="GAPprompt">></span> <span class="GAPinput">   fi;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseData.SetReplay( false );</span>
<span class="GAPprompt">  !apprompt@ap> !apinput@: (4;java.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62
<span class="GAPprompt">></span> <span class="GAPinput">     Print( "no access to the Web ATLAS\n" );</span>
<span class="GAPprompt">&t;/pan>< ="APinput"   else<span
<span class="GAPprompt">></span> <span class="GAPinput">     Print( List( tworeps, x -> x.identifier[1] ), "\n" );</span>
<span class="GAPprompt">></span> <span class="GAPinput">   fi;</span>
[ "A5", "A6" ]
</pre></div>

<p><em>Implementation remarks</em>: The first browse table shown has a static header, no footer and row labels, one row of column labels describing the type of data summarized in the columns.</p>

<p>Row and column separators are drawn as grids (cf. <code class="func">NCurses.Grid</code> (<a href="chap2_mj.html#X790715F683BF1E66"><span class="RefLink">2.2-8</span></a>)) composed from the special characters described in Section <a href="chap2_mj.html#X8091936586CCD248"><span java.lang.StringIndexOutOfBoundsException: Index 284 out of bounds for length 94

<p>When a row is selected, the "click" functionality opens a new window (via a second level call to <code class="func">NCurses.BrowseGeneric</code> (<a href="  !apprompt@> !apinput@amma2 : RepresentativeAction(RCWA(ntegers),

<p>For the two kinds of browse tables, the standard modes in <code class="func">BrowseData</code> (<a href="chap5_mj.html#X86E80E578085F137"><span class="RefLink">5.4-1</span></a>) (except the <code class="code">help</code> mode) have been extended by a new action that opens a pager giving an overview of all data that<!apprompt>|g@Difference,D3)D[];

<p>This function is available only if the <strong class="pkg">GAP</strong> package <strong class="pkg">AtlasRep</strong> is available.</p>

<p>The code can be found in the file <code class="file">app/atlasbrowse.g</code> of the package.</p>

<p><a id="X7CF999297B331E01" name="X7CF999297B331E01"></a></p>

<h4>6.6 <span class="Heading">Access to <strong class="pkg">GAP</strong> Manuals–a Variant</span></h4>

<p>A <strong class="pkg">Browse</strong> adapted way to access several manuals is to show the hierarchy of books, chapters, sections, and subsections as collapsible category rows, and to regard the java.lang.StringIndexOutOfBoundsException: Index 205 out of bounds for length 2

<p>This application is mainly intended as an example with table cells that exceed the screen, and as an example with several category levels.</p>

<p><a id="X7D79DF9181A15EDF" name="X7D79DF9181A15EDF"></a></p>

<5>.- BrowseGapManuals<h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&#an style='color: green'>8227; BrowseGapManuals</code>( [<var class="Arg">start</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<p>This function displays the contents of the <strong class="pkg">GAP</strong> manuals (the main <strong class="pkg">GAP</strong> manuals as well as the loaded package manuals) in a window. The optional argument <var class="Arg">start</var> describes the initial status, admissible values are the strings <code class="code">"inline/collapsed"</code>, <code class="code">"inline/expanded"</code>, <code class="code">"pager/collapsed"</code>, and <code class="code">"pager/expanded"</code>.</p>

<p>In the <code class="code">inline</code> cases, the parts of the manuals are shown in the browse table, and in the <code class="code">pager</code> case, the parts of the manuals are shown in a different window when they are "clicked", using the user's favourite help viewer, see <a href="../../../doc/ref/chap2_mj.html#X863FF9087EDA8DF9"><span class="RefLink">Reference: Changing the Help Viewer</<p>In the <code class="code">inline</code> cases, the parts of the manuals are shown in the browse table, and in the <code class="code">pager</code> case, the parts of the manuals are shown in a different window when they are "clicked", using the user's favourite help viewer, see <a href="../../../doc/ref/chap2_mj.html#X863FF9087EDA8DF9"><span class="RefLink">Reference: Changing the Help Viewer</span

<p>In the <code class="code">collapsed</code> cases, all category rows are collapsed, and the first row is selected; typical next steps are moving down the selection and expanding single category rows. In the <code class="code">expanded</  

<p>If no argument is given then the user is asked for selecting an initial status, using <code class="func">NCurses.Select</code> (<a href="chap3_mj.html#X833D321E86528981"><span class="RefLink">3.1-2</span></a>).</p>

<p>The full functionality of the function <code class="func">NCurses.BrowseGeneric</code> (<a href="chap4_mj.html#X85FC163D87FAFD12"><span class="RefLink">4.3-1</span></a>) is available.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">n:= [ 14, 14, 14 ];;  # ``do nothing''</span>
<span class="GAPprompt">gap&The generators are products of transpositions each:
<span class="GAPprompt">></span> <span class="GAPinput">       "xdxd",                             # expand a Tutorial section</span>
<span class="GAPprompt">></span> <span class="GAPinput">       n, "Q" ) );                         # and quit</span>
< =GAPprompt>&t<span <pan class=GAPinput">rowseGapManuals("nline")<span>
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseData.SetReplay( Concatenation(</span>
<span class="GAPprompt">></span> <span class="GAPinput">       "/Browse", [ NCurses.keys.ENTER ],  # search for "Browse"</span>
<span class="GAPprompt">></span> <span class="GAPinput">       "xdxddxd",                          # expand a section</span>
<span class="GAPprompt">></span> <span class="GAPinput">       n, "Q" ) );                         # and quit</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">java.lang.StringIndexOutOfBoundsException: Index 76 out of bounds for length 52
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseData.SetReplay( false );</span>
</pre></div>

<p><em>Implementation remarks</em>: The browse table has a dynamic header showing the name of the currently selected manual, no footer, no row or column labels, and exactly one column of fixed width equal to the screen width. The category rows are precomputed, i. e., they do not arise from a table column; this way, the contents of each data cell can be computed on demand, as soon as it is shown on the screen, in particular the category hierarchy is computed without reading the manuals into <strong class="pkg">GAP</strong>. Also, the data rows are not cached @> g@Factorizationg)|

<p>For the variants that show the manuals in a pager, the code temporarily replaces the <code class="code">show</code> function of the default viewer <code class="code">"screen"</code> (see <a href="../../../doc/ref/chap2_mj.html#X863FF9087EDA8DF9"><span class="RefLink">Reference: Changing the Help Viewer</span></a>) by a function that uses <code class="func">NCurses.Pager</code> (<a href="chap3_mj.html#X87E1B2787F588CC0"><span class="RefLink">3.1-4</span></a>). Note that in the case that the 

<p>The implementation should be regarded as a sketch.</p>

<p>For example, the markup available in the text file format of <strong class="pkg">GAPDoc</strong> manuals (using <strong class="button">Esc</strong> sequences) is stripped off instead of being transferred to the attribute lines that arise, because of the highlighting problem mentioned in Section <a href="chap2_mj.html#X81D1FC927C455AEB"><span class="RefLink">2.2-3</span></a>.</p>

<p>Some heuristics used in the code are due to deficiencies of the manual formats.</p>

<p>For the inline variant of the browse table, the titles of chapters, sections, and subsections are <em>not</em> regarded as parts of the actual text since they appear already as category rows; however, the functions of the <strong class="pkg">GAP</strong> help system deliver the text <em>together with</em> these titles, so these lines must be stripped off afterwards.</p>

<p>The category hierarchy representing the tables of contents is created from the <code class="file">manual.six</rank{nobreakspace2We verify  itreallyisonebythe

<p>Also, index entries and sectioning entries in <code class="file">manual.six</code> files of manuals in <strong class="pkg">GAPDoc</strong> format are not explicitly distinguished.</p>

<p>    found in    file"app/anualg<code>of the package.</p>

<p><a id="X846751CC7F54F51D" name="X846751CC7F54F51D"></a></p>

<h4>6.7 <span class="Heading">Overview of Bibliographies</span></h4>

<hefunction< =func></code < =c.htmlX7F0FE4CC7F46ABF3>span class=RefLink">.-<span>/>   used to turn of bibliography files inBibTeXor BibXMLext format see a href=.../.pkgGAPDocd/oc/.#7FB8F6BD80D859D1"<span class=RefLink>:TheBibXMLext <span<a)into a  table,such that one can scroll in the list, search for entries,sort by year, sort and by  etc<p

<p>The default bibliography used by <code class="func">BrowseBibliography</code> (<a href="chap6_mj.html#X7F0FE4CC7F46ABF3"><span class="RefLink">6.7-1</span></a>) is the bibliography of <strong \begin}[ommandchars=|,ontsize\,rame=ingle,=Example]

<p><code class="code">wget -N http://www.gap-system.org/Doc/Bib/gap-publishednicer.bib</code></p>

<p>The columns of the Browse table that is shown by <code class="func">BrowseBibliography</code> (<a href="chap6_mj.html#X7F0FE4CC7F46ABF3"><span class="RefLink">6.7-1</span></a>) can be customized, two examples for that are given by the functions <code class="func">BrowseBibliographySporadicSimple</code> (<a href="../../../pkg/atlasrep/doc/chap3_mj.html#X84ED4FC182C28198"><span class="RefLink">AtlasRep: BrowseBibliographySporadicSimple</span></a>) and <code class="func">BrowseBibliographyGapPackages</code> (<a href="java.lang.StringIndexOutOfBoundsException: Index 527 out of bounds for length 93

<p>The function <code class="func">BrowseMSC</code> (<a href="chap6_mj.html#X81F1558678ACDB4A"><span class="RefLink">6.7-3</span></a>) shows an overview of the AMS Mathematics Subject Classification <p>The function <code class="func">BrowseMSC</code> (<a href="chap6_mj.html#X81F1558678ACDB4A"><span class="RefLink">6.7-3</span></a>) shows an overview of the AMS Mathematics Subject Classification codes

<p><a id="X7F0FE4CC7F46ABF3"!@|!apinputL((F2,IsTame)java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65

<h5>6.7-1 BrowseBibliography</h5>

< class"unc"> class="func"width=100%>tr>td java.lang.StringIndexOutOfBoundsException: Range [65, 64) out of bounds for length 234
<p>Returns: a record as returned by <code class="func">ParseBibXMLExtFiles</code> (<a href="../../../pkg/GAPDoc.dev/doc/chap7_mj.html#X86BD29AE7A453721"><span class="RefLink">GAPDoc: ParseBibXMLextFiles</span></a>).</p>

<p>This function shows the list of bibliography entries in the files given by <var class="Arg">bibfiles</var>, which may be a string or a list of strings (denoting a filename or a list of filenames, respectively) or a record (see below for the supported components).</p>

<p>If no argument is given then the file <code class="file">bibl/gap-publishednicer.bib</code> in the <strong class="pkg">Browse</strong> package directory is taken, and <code class="code">"GAP Bibliography"</code> is used as the header.</p>

<p>Another perhaps interesting data file that should be available in the <strong class="pkg">GAP</strong> distribution is <code class="file">doc/manualbib.xml</code>. This file can be located as follows.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">file:= Filename( DirectoriesLibrary( "doc" ), "manualbib.xml" );;</span>
</pre></div>

<p>Both BibTeX format and the <strong class="pkg">XML</strong> based extended format provided!apprompt@ap|!apinput[()Sinksr1Loopsr1]   java.lang.StringIndexOutOfBoundsException: Range [82, 78) out of bounds for length 82

<p>In the case of BibTeX format input, first a conversion to the  [[0( ,[14 ][0() 1(4) ] ]

<p>In both cases of input, the problem arises that in visual mode, currently we can show only ASCII characters (and the symbols in <code class="code">NCurses.lineDraw</code>, but these are handled differently, see Section <a href="chap2_mj.html#X8091936586CCD248"><span class="RefLink">2.1-6</span></a>). Therefore, we use the function   !apprompt@> g@Sourcesr2,(,();#comparewithX2java.lang.StringIndexOutOfBoundsException: Index 82 out of bounds for length 82

<>he return value is a java.lang.StringIndexOutOfBoundsException: Range [32, 31) out of bounds for length 1056

<p>The full functionality of the function <code class="func">NCurses.BrowseGeneric</code> (<a href="chap4_mj.html#X85FC163D87FAFD12"><span class="RefLink">4.3-1</span></a>) is available.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput"># sort and categorize by year, scroll down, expand a category row</span>
< ="APprompt"gap></pan>< class=GAPinput>.SetReplay( scrrscsedddddxdddddQ )<span>
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseBibliography();;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput"># sort & categorize by authors, expand all category rows, scroll down</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseData.SetReplay( "scscXseddddddQ" );</span>
span class=GAPprompt>&t<span <pan class=GAPinput"BrowseBibliography();/pan
<span class="GAPprompt">gap></span> <span class="GAPinput"># sort and categorize by journal, search for a journal name, expand</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseData.SetReplay( Concatenation( "scrrrsc/J. Algebra",</span>
< class""&;/><pan class=GAPinput"       [NCurses.eys.NTER ] "xdddQ" ))<span
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseBibliography();;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseData.SetReplay( false );</span>
</pre></div>

<p><!appromptg> gapinputIsSubsetUnion(Sinks(1)X2F21 |

<p>Row and column separators are drawn as grids (cf. <code class="func">NCurses.Grid</code> (<a href="chap2_mj.html#X790715F683BF1E66"><span class="RefLink">2.2-8</span></a>)) composed from the special characters described in Section <a href="chap2_mj.html#X8091936586CCD248"><span class="RefLink">2.1-6</span></a>, using the component <code class="code">work.SpecialGrid</code> of the browse table, see <code class="func">BrowseData</code> (<a href="chap5_mj.html#X86E80E578085F137"><span class="RefLink">5.4-1</span></a>).</p>

<p>For categorizing by authors (or by MSC codes), the sort parameter <code class="code">"split rows on categorizing"</code> is set to <code class="code">"yes"</code>, so the authors (codes) are distributed to different category rows, hence each entry appears once for each of its authors (or its MSC codes) in the categorized table. When a data row or an entry in a data row is selected, "click" adds the corresponding bibliographhy entry to the result.</p>

<p>The width of the title column is preset; usually titles are too long 

<p>For four columns, the sort parameters are defined as follows: The <em>authors</em> and <em>MSC code</em> columns do not become hidden when the table is categorized according to this column, sorting by the <em>year</em> yields a <em>de</em>scending order, and the category rows arising from these columns and the <em>journal</em> column show the numbers of the data rows that belong to them.</p>

<p>Those standard modes in <code class="func">BrowseData</code> (<a href="chap5_mj\nd{Verbatim}

<p>This function requires some of the utilities provided by the <strong class="pkg">GAP</strong> package <strong class="pkg">GAPDoc</strong> (see <a href="chapBib_mj.html#biBGAPDoc">[LN07]</a>), such as <code class="func">FormatParagraph</code> (<a href="../../../pkg/GAPDoc.dev/doc/chap6_mj.html#X812058CE7C8E9022"><span class="RefLink">GAPDoc: FormatParagraph</span></a>), <code class="func">NormalizeNameAndKey</code> (<a href="../../../pkg/GAPDoc.dev/doc/chap7_mj.html#X7C9F0C337A0A0FF0"><span class="RefLink">GAPDoc: NormalizeNameAndKey</span></a>), Drawing thetransition   texttt{r1  \{} modulus{nobreakspace}  tounderstand   donein

<p>The code can be found in the file <code class="file">app/gapbibl.g</code> of the package.</p>

<p>The browse table can \begin{Verbatim}[commandch@,ontsize\mall,=,=Example


<dl>
<dt><strong class="Mark"><code class="code">files</code></strong></dt>
<dd><p>a nonempty list of filenames containing the data to be shown; there is no default for this component.</p>

</dd>
<dt><strong class="Mark"><code class="code">filesshort</code></strong></dt>
<>p listofthesame as the< =code><code>,the entries are strings  areshowninthe<ode =c>s"/ columnof the  i  column is presentthe default is thelistoffilenames<p

</dd>
<dt><strong class="Mark"><code class="code">filecontents</code></strong></dt>
<dd><p>a list of the same length as the <code class="code">files</code> component, the entries are strings which are shown as category values when the table java.lang.StringIndexOutOfBoundsException: Range [0, 159) out of bounds for length 3

<  
<dt><strong class="Mark"><code class="code">header</code></strong></dt>
<dd><p>is the constant part of the header shown above the browse table, the default is the first filename.</p>

</dd>
<dt><strong class="Mark"><code class="code">columns</code></strong></dt>
<dd><p>is a list of records that are valid as the second argument of <code class="func">DatabaseAttributeAdd</code> (<a href="chapA_mj.html#X8573522782D939FE"><span class="RefLink">A.1-5</span></a>), where the first argument is a database id enumerator created fromThegroup PSL(,e{\ Z}embeds

</dd>
<dt><strong class="Mark"><T{ensuremath\ Z})as well. We give an , and checkthatit
<dd><p>a list of strings denoting the <code class="code">identifier</code> components of those columns that shall actually be shown in the table, the default is <code class="code">[ "authors", "title", "year", "journal", "mrclass" ]</code>.</p>

</dd>
<dt><strong class="Mark"><code class="code">fingerprint</code></strong></dt>
<dd><p>a list of strings denoting component names of the entries of the database id enumerator that is constructed from the data (see above); two data records are regarded as equal if the 

</dd>
<dt><strong class="Mark"><code class="code">sortKeyFunction</code></strong></dt>
<dd><p>either <code class="keyw">fail</code>

</dd>
</dl>
<p><a id="X7E4B5E277D08987B" name="X7E4B5E277D08987B"></a></p>

<>.7- BrowseBibliographyGapPackages<h5

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&#an style='color: green'>8227; BrowseBibliographyGapPackages</code>(  )</td><td class="tdright">( function )</td></tr></table></div>
<>:a record as returned by <code class="func">BrowseBibliography</code> (<a href="chap6_mj.html#X7F0FE4CC7F46ABF3"><span class="RefLink">6.7-1</span></a>).</p>

<p>This function collects the information from the <code class="code">*.bib</code> and <code class="code">*bib.xml</code> files in those subdirectories of installed <strong class=pkg><strong>packageswhich thepackagedocumentation shows inaBrowseclass"unc"BrowseBibliographycode < href=chap6_mjh#">< ="RefLink>.-<span<a>./>

<p><em>This function is experimental.</em> The result is not really satisfactory, for the following reasons.</p>


<>
<li><p>Duplicate entries may occur, due to subtle differences in various source files.</p>

</li>
<li><p>The source files may contain more than what is actually cited in the package manuals.</p>

</li>
<li><p>It may happen that some <code class="code">*.bib</code> or <code class="code">*bib.xml</code> file is accidentally distributed with the package but is not intended to serve as package bibliography.</p>

<li>
<li><p>The heuristics for rewriting LaTeX code is of course not perfect; thus strange symbols may occur in the Browse table.</p>

</li>
</ul>
<p><a id="X81F1558678ACDB4A" name="X81F1558678ACDB4A"></a></p>

<h5>6.7-3 BrowseMSC</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&#an style='color: green'>8227; BrowseMSC</code>( [<var class="Arg">version</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: nothing.</p>

<p>This function shows the valid MSC codes in a browse table that is categorized by the <code class="code"  !apprompt@ap|!apinput@2: ResidueClass(,)|

<p>If <var class="Arg">version</var> is given then it must be one of the numbers <span class="SimpleMath">\(2010\)</span> or <span class="SimpleMath">\(2020\)</span>, meaning that the MSC2010 or MSC2020 codes are shown; the default for <var class="Arg">version</var> is <span class="SimpleMath">\(2020\)</span>.</p>

<p><a id="X837BDF547FF0EA31  !apprompt@> g@IsSubset(X1,2PSL2Z.)and IsSubsetX,X2^(PSL2Z12)|

<h4>6.8 <span class="Heading">Profiling <strong class="pkg">GAP</strong> functions–a Variant</span></h4>

<p>A <strongtrue

<p><a id="X7B42091982DE7AE7" name="X7B42091982DE7AE7"></a></p>

<h5>6.8-1 BrowseProfile</h5>

<  !apprompt@ap> !apinput@(X2X^PSL2Z.2)|
<p>The arguments and their meaning are the same as for the function <code class="func">DisplayProfile</code> (<a href="../../../doc/ref/chap7_mj.html#X80FEA6A08775A48E"><span class="RefLink">Reference: DisplayProfile</span></a>), in the sense that the lines printed by that function correspond to the rows of the list that is shown by <code class="func">BrowseProfile</code>. Initially, the table is sorted in   true

<p>The java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 2

<p>When a row or an entry \endVerbatim

<p>The full functionality of the function <code class="func">NCurses.BrowseGeneric</code> (<a href="chap4_mj.html#X85FC163D87FAFD12"><span class="RefLink">4.3-1</span></a>) is available.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">n:= [ 14, 14, 14, 14, 14 ];;  # ``do nothing''</span>
<span by  \{RCWA}' general method for \texttt{IsomorphismRcwaGroup} for free products of finite groups: 
<span class="GAPprompt">gap></span> <span class="GAPinput">ConjugacyClasses( PrimitiveGroup( 24, 1 ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">ProfileOperationsAndMethods( false );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseData.SetReplay( Concatenation(</span>
<span class="GAPprompt">></span> <span class="GAPinput">       Example
<span class="GAPprompt">></span> <span class="GAPinput">       [ NCurses.keys.DC ], "2", "\t",         # replace 10000 by 20000</span>
<span class="GAPprompt">></span> <span class="GAPinput">       [ NCurses.keys.DC ], "2
<span class="GAPprompt">></span> <span class="GAPinput">       [ NCurses.keys.ENTER ],                 # commit the changes</span>
<span class="GAPprompt">></span> <span class="GAPinput">       "scso",                                 # sort by column 1,</span>
<span class="  !gapprompt@gap>!apinputG: Image(IsomorphismRcwaGroupFreeProduct(CyclicGroup(3)|
<span class="GAPprompt">></span> <span class="GAPinput">       "rso",                                  # sort by column 2,</span>
<span class="GAPprompt">></span> <span class="GAPinput">       n,</span>
<span class="GAPprompt">></span> <span class="GAPinput">       "rso",                                  # sort by column 3,</span>
<span class="GAPprompt">></span> <span class="GAPinput">       n,</span>
<span class="GAPprompt">></span> <span class="GAPinput">       "q",                                    # deselect the column,</span>
<span class="GAPprompt">></span> <span class="GAPinput">       "/Normalizer", [ NCurses.keys.ENTER ],  # search for a function<ild rcwagroupoverwith >
<span class="GAPprompt">></span> <span class="GAPinput">       n, n, n, "Q" ) );                       # and quit</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseProfile();</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseData.SetReplay( false );</span>
</pre></div>

<p><em>Implementation remarks</em>: The browse table has a dynamic header, which shows the current values of <var class="Arg">mincount</var> and <var class="Arg">mintime</var>, and a dynamic footer, which shows the sums of counts and timings for the rows in the table (label <code class="code">TOTAL</code>) and if applicable the sums for the profiled functions not shown in the table (label <code class="code">OTHER</code>). There are no row labels, and the obvious column labels. There is no return value.</p>

<p>The standard modes in <code class="func">BrowseData</code> (<a href="chap5_mj.html#X86E80E578085F137"><span class="RefLink">5.4-1</span></a>) (except the <code class="code">help</code> mode) have been modified by adding a new action for changing the threshold parameters <var class="Arg">mincount</var> and <var class= \{ssignGlobalsL()F2\}PSL2Z)} order  assigntheglobalvariables   .  

<p>The code can be found in the file <code class="file">app/profile.g</code> of the package.</p>

<p><a id="X87B30F7387C0E531" name="X87B30F7387C0E531"></a></p>

<h4>6.9 <span class="Heading">Variables defined in <strong class="pkg">GAP</strong> packages–a Variant</span></h4>

<p>A <strong class="pkg">Browse</strong> adapted way to list the variables that are defined in a <strong class="pkg">GAP</strong> package is to show the overview that isjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

<p><a id="X8030B1688335783D" name="X8030B1688335783D"></a></p>

<h5>6.9-1 BrowsePackageVariables</h5>

<div class\hapter{{Chapter }The  Implemented }\{:lgorithms
<p>Returns: nothing.</p>

<p>The arguments can be the same as for <code class="func">ShowPackageVariables</code> (<a href="../../../doc/ref/chap76_mj.html#X7D34AC3287611B15"><span class="RefLink">Reference: ShowPackageVariables</span></a>), that is, <var class="Arg">pkgname</var> is the name of a <strong java.lang.StringIndexOutOfBoundsException: Range [0, 285) out of bounds for length 21

<p>Alternatively, the second argument can be the output <code class="code">info</code> of <code class="func">PackageVariablesInfo</code> (<a href="../../../doc/ref/chap76_mj.html#X7D34AC3287611B15"><span class="RefLink">Reference: PackageVariablesInfo</span></a>) for the package in question, instead of the version number.</p>

<p><code class="func">BrowsePackageVariables</code> opens a browse table that shows the global variables that become bound and the methods that become installed when <strong class="pkg">GAP</strong> loads the package <var class="Arg">pkgname</var>.</p>

<p>The table is categorized by the kinds of variables (new or redeclared operations, methods, info classes, synonyms, other globals). The column "Doc.?" distinguishes undocumented and documented variables, so one can use this column as a filter or for categorizing. The column "Filename" shows the names of the package files. Clicking a selected row of the table opens the relevant package file at the code in question.</p inthispackage  descriptionsare very  and

<p>The idea behind the argument <codeterse,  of themprovide rudimentary information Theyarelisted

<p>For example, the overview of package variables for <strong class="pkg">Browse</strong> can be shown by starting <strong class="pkg">GAP</strong> without packages and then entering the following lines.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">pkgname:= "Browse";;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">info:= PackageVariablesInfo( pkgname, "" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">LoadPackage( "Browse" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowsePackageVariables( pkgname, info );</span>
</pre></div>

<p>If the arguments are the same as for <code class="func">ShowPackageVariables</code> (<a href="../../../doccomputations,  `straightforward' means sophisticated isused. that `' `straightforward'   readas\{athematically}  , andthat   of a  

<p><a id="X7CD025147D528741" name="X7CD025147D528741"></a></p>

<h4>6.10 <span class="Heading" attributed in this way   bereasonably long  .

<p>A <strong class="pkg">Browse</strong> adapted way to show and edit <strong class="pkg">GAP</strong>'s user preferences is to show the overview that is printed by the <strong class="pkg">GAP</strong> function <code class="func">ShowUserPreferences</code> (<a href="../../../doc/ref/chap3_mj.html#X7B0AD104839B6C3C"><span class="RefLink">Reference: ShowUserPreferences</span></a>) in a <strong class="pkg">Browse</strong> table.</p>

<p><a id="X7A7B712E7A06449F" name="X7A7B712E7A06449F"></a></p>

<h5>.-1 BrowseUserPreferences<h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&#an style='color: green'>8227; BrowseUserPreferences</code>( <var class="Arg">package1</var>, <var class="Arg">package2</var>, <var class="Arg">...</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: nothing.</p>

<p>The arguments are the same as for <code class="func">ShowUserPreferences</code> (<a href="../../../doc/ref/chap3_mj.html#X7B0AD104839B6C3C"><span class="RefLink">Reference: ShowUserPreferences</span></a>), that is, calling the function with no argument yields an overview of all known user preferences, and if one or more strings <var\tem[{tAllElementsOfCTZWithGivenModulus{\ }) }Thisfunctionfirstdeterminesa     partitions\{}$ {\{mathbb }  \box\exttt\\ m}residueclasses  any  partition\{} itruns   the elements    groupof  \box\{mdseriesslshapem}   $sigma \in { }_m    \{}  constructs  elementof $\m CT(m{}$withmodulusdividingm   the ordered  ${m,1()\ots m-(\}$  partition from\{}   theresidue with $sigma$Finally  the elements isaproper  of\box{{\lshapem},' 

<><codeclass=func>BrowseUserPreferencescode  browse  withthefollowingcolumns<p


<dl>
<dt><strong class="Mark">"Package"</strong></dt>
<dd><p>contains the names of the <strong \item[{ \texttt{Ball(\mbox{\texttt{\mdseries\s}\mbox{{mdseriesslshapep},{texttt\\ r},mbox{texttt{mdseries\ act) ]`Straightforward'java.lang.StringIndexOutOfBoundsException: Index 194 out of bounds for length 194

</dd>
<t><trong class"ark""Pref. names"/trong<dt
<dd><p>contains the names of the user preferences, and</p>

</dd>
<dt><strong class="Mark">"Description"</strong></dt>
<dd>than \box{texttt\dseriesslshape m},andfilters  criteriaand ordering   entries.

</dd>
</dl>
<p>When one "clicks" on one of the table rows or entries then the values of the user preference in question can be edited. If a list of admissible values is known then this means that one can choose from this list\tem[ textttC(\{texttt{mdseries\lshape r}\{texttt\dseries\slshape m})}  `rivial' 

\item[{\exttt{ClassRotation(\box\texttt{\mdseries\slshape r}\{{\dseries\lshape m},mbox{texttt{mdseries\lshape u}}}}] `Trivial'.


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">d:= [ NCurses.keys.DOWN\tem[ \extttClassShift(mbox{{mdseriesslshape},mbox\{ }  `Trivial. 
<span class="GAPprompt">gap></span> <span class="GAPinput">c:= [ NCurses.keys.ENTER ];; </span>
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseData.SetReplay( Concatenation(</span>
<span class="item{t{ClassTransposition\box{texttt\mdseries\ },\box{texttt{mdseries\ },\mbox{texttt{mdseries\ r2},\box{texttt{mdseries\lshape }) }  `Trivial' 
<span class="GAPprompt">></span> <span class="GAPinput">       c,                  # start the search,</span>
<span class="GAPprompt">></span> <span class="GAPinput">       c,                  # edit the entry (a list of choices),</span>
<  # toggle the first four ,/>
<span class="GAPprompt">></span> <span class="GAPinput">       " ", d,             #</span>
<span class="GAPprompt">></span> <span class="GAPinput">       " ", d,             #</span>
<span class="GAPprompt">></span> <span class="GAPinput">       " ", d,             #</span>
<span class="GAPprompt">></span> <span class="GAPinput">       c,                  # submit the values,</span>
<span class="GAPprompt">></span> <span class="GAPinput">       "Q",                # quit the table,</span>
<span =GAPprompt>gt;/pan<pan;#  "ancel" do notapply the ./>
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseUserPreferences();</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseData.SetReplay( false );</span>
</pre></div>

<>  canbefound inthe  < =file>/userprefg./>

<p><a id="X86C730A07855238D" name="X86C730A07855238D"></a></p>

<h4>6.11 <span class="Heading">Overview of <strong class="pkg">GAP</strong> Data</span></h4>

<p>The <strong class="pkg">GAP</strong> system contains several data collections such as libraries of groups and character tables. Clearly the function <code class="func">NCurses.BrowseGeneric</code> (<a\tem[\{CT({t{\dseries\lshapeR})}   andproperties set  to\obreakspacec{} 

<p><a id="X850C786C87A4877B" name="X850C786C87A4877B"></a></p>

<h5\item[ \{CycleRepresentativesAndLengths(mbox{\exttt\mdseries\ g},\box{\{mdseriess }}}}  `'.

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&#an style='color: green'>8227; BrowseGapData</code>(  )</td><td class="tdright">( function )</td></tr></table></div>


<p>The function <code class="func">BrowseGapData</code> shows the choices in the list <code class="code">BrowseData.GapDataOverviews</code>, in a browse table with one column. When an entry is "clicked" then the associated function is called, and the table of choices is closed.</p>

<p>The idea is that each entry of <code class="code">BrowseData.GapDataOverviews</code> describes an overview of a data collection.</p>

<p>The <strong class="pkg">Browse</strong> package provides overviews of</p>


<ul>
<li><p>the current AMS Mathematics Subject Classification codes (see <code class="func">BrowseMSC</code> (<a href="chap6_mj.html#X81F1558678ACDB4A"><span class="RefLink">6.7-3</span></a>)),</p>

</li>
<">AtlasRep</strong>  < ="hapBib_mjhtml#"[PN+19]/a> (nly if this package is loaded, see Section<a href=c.tml#X80370827793813FD"<pan class="65/span>/a>,/>

</li>
<li><p>the Conway polynomials in <strong class="pkg">GAP</strong> (calls <code class="code">BrowseConwayPolynomials()</code>),</p>

<li
<li><p>profile information for <strong class="pkg">GAP</strong> functions (see Section <a href="chap6_mj.html#X837BDF547FF0EA31"><span class="RefLink">6.8</span></a>),</p>

<>
<li><p>the list of <strong class="pkg">GAP</strong> related bibliography entries in the file <code class="file">bibl/gap-publishednicer.bib</code> of the <strong class="pkg">Browse</strong> package (see Section <a href="chap6_mj.html#X846751CC7F54F51D"><span class="RefLink">6.7</span></a>),</p>

</li>
<li><p>the <strong class="pkg">GAP</strong> manuals (see Section <a href="chap6_mj.html#X7CF999297B331E01"><span class="RefLink">6.6</span></a>),</p>

</li>
<li><p><strong class="pkg">GAP</strong> operations and methods (calls <code class="code">BrowseGapMethods()</code>),</p>

</li>
<li><p>the installed <strong class="pkg">GAP</strong> packages (calls <code class="code">BrowseGapPackages()</code>),</p>

</li>
<li><p><strong class="pkg">GAP</strong>'s user preferences (see Section <a href="chap6_mj.html#X7CD025147D528741"><span class="RefLink">6.10</span></a>),</p>

</li>
<li><p>the contents of the <strong class="pkg">TomLib</strong> package <a href="chapBib_mj\tem[ t{(\mbox{mdseries\lshapeG},mbox{t{mdseries\lshapen}) }] `'' \exttt{symbol{5}\{ balls of radius $$about \box{texttt{slshape }}  $  1,2,\ots$until a point smaller than $$is .java.lang.StringIndexOutOfBoundsException: Index 323 out of bounds for length 323

</li>
</ul>
<> <trong class=pkg>APstrong>packages may add  ,using  < class=func"BrowseGapDataAdd<code>(a href=chap6_mj.tml#7FC24FCE7A0C6058"<pan="6112/span>/a>)  example,thereare  of<p>


<ul>
<li><p>the bibliographies in the <strong class="pkg">ATLAS</strong> of Finite Groups <a href="chapBib_mj.html#biBCCN85">[CCN+85]</a> and in the <strong class="pkg">ATLAS</strong> of Brauer Characters <a href="item[{ \texttt{DrawGrid(\mbox{\texttt{\mdseries\slshape U}},\mbox{\texttt{\mdseries\slshape range{\textunderscore}y}},\mbox{\texttt{\mdseries\slshape range{\textunderscore}x}},\mbox{\texttt{\mdseries\slshape filename

</li>
<\item[ \texttt{rawOrbitPicture]Compute   $1,\ots,r$around the  points  theorigineither in the lower left

</li>
<li><p>the differences between the versions of the character table data in the <strong class="pkg">CTblLib</strong> package (see Section <code class="func">BrowseCTblLibDifferences</code> (<a href="../../../pkg/ctbllib/doc/chap3_mj.html#X87CA74CF7B533CC6"><span classof  picture (fall  inthefirstquadrant orin  of

</li>
<li><p>the information in the <strong class="pkg">GAP</strong  (f  dont points of ballblack incase

</li>
<li><p>an overview of minimal degrees of representations of groups from the <strong class="pkg">ATLAS</strong> of Group Representations (see Section <code class="func">BrowseMinimalDegrees</code> (<a href="../../../pkg/atlasrep/doc/chap3_mj.html#X7F31A7CB841FE63F"f a  picture Choose colors from  given palette depending on 

</li>
</ul>
<>Except always one table cellisselected the fullfunctionality the function <ode class=func"NCursesB</>(a=chap4_mj.tmlX85FC163D87FAFD12"<pan class=RefLink">.-1<span><a> isavailable<p>


<div class="example"><pre>
<span class="GAPprompt">gap></\item[{ \texttt{EpimorphismFromFpGroup\texttt{mdseries\lshape},mbox\texttt{mdseries\ }) ]Computesjava.lang.StringIndexOutOfBoundsException: Range [133, 132) out of bounds for length 367
<span class="GAPprompt">gap></span> <span class="GAPinput"># open the overview of Conway polynomials</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseData.SetReplay( Concatenation( "/Conway Polynomials",</span>
<anclass=GAPprompt>spanclass=GAPinput>[ .eysENTER .eysENTER] s" n,Q"))<span
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseGapData();;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput"># open the overview of GAP packages</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseData.SetReplay( Concatenation[ textttExponent\box{\{m\ G}}]  Check whether \mbox{texttt{mdseries\lshape G} isfinite  it    the \{}Library method, applied  {ImageIsomorphismPermGroupmbox\{mdseries\lshapeG})} Checkwhether \box{{mdseriess G} is .Ifyes  \exttt{}. ,run loopover \mbox{texttt{\ }   anelement infinite order.Once one is , return \texttt{nfinity} 
<span class="GAPprompt">></span> <span class="GAPinput">     [ NCurses.keys.ENTER, NCurses.keys.ENTER ], "/Browse",</span>
<span class="GAPprompt">></span> <span class="GAPinput">     [ NCurses.keys.ENTER ], "n", n, "Q" ) );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseGapData();;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseData.SetReplay( false );</span>
</pre></div>

<p><em>Implementation remarks</em>: The browse table has a static header, a dynamic footer showing the description of the currently selected entry, no row or column labels, and exactly one column of fixed width equal to the screen width. If the chosen application has a return value then this is returned by <code class="func">BrowseGapData</code>, otherwise nothing is<under  that     

<p>The code can be found in the filewildelement It lookslikely   , but currently the author 

<p><a id="X7FC24FCE7A0C6058" name="X7FC24FCE7A0C6058"></a></p>

<h5>6.11-2 BrowseGapDataAdd knowa 

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&#an style='color: green'>8227; BrowseGapDataAdd</code>( <var class="Arg">title</var>, <var class="Arg">call</var>[, <var class="Arg">ret</var>], <var class="Arg">documentation</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>This function extends the list <code class="code">BrowseData.GapDataOverviews</code> by a new entry. The list is used by <code class="func">BrowseGapData</code> (<a href="chap6_mj.html#X850C786C87A4877B"><span class="RefLink">6.11-1</span></a>).</p>

<p><var class="Arg">title</var> must be a string of length at most <span class="SimpleMath">\(76\)</span>; it will be shown in the browse table that is opened by <code class="func">BrowseGapData</code> (<a href="chap6_mj.html#X850C786C87A4877B"><span class="RefLink">6.11-1</span></a>). <var class="Arg">call</var> must be a function that takes no arguments; it will be called when <var published.Atthemoment isnotguaranteed  in

<p><a id="X7E3FDA927E62D963" name="X7E3FDA927E62D963"></a></p>

<h4>6.12 <span classthe mappingclass\exttt{symbol{45}wise order\exttt\{}preserving

<p>A natural way to visualize the contents of a directory is via a tree whose leaves denote plain files, and the other vertices denote subdirectories. <strong class="pkg">Browse</strong> provides a function based on <code class="func">NCurses.BrowseGeneric</code> (<a href="chap4_mj.html#X85FC163D87FAFD12"><span class="RefLink">4.3-1</span></a>)and balanced,and   remove all  factors  anddivisor

<>a id=X859682DE8397261Ename"859682"<a<p

<h5>6.12-1 BrowseDirectory</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&#an style='color: green'>8227; BrowseDirectory</code>( [<var class="Arg">dir</var>] )</td><td class="tdright">( . Theremaining mappingcanbefactored  similar
<p>Returns: a list of the "clicked" filenames.</p>

<p>If no argument is given then the contents of the current directory is shown, see <code class="func">DirectoryCurrent</code> (<a href="../../../doc/ref/chap9_mj.html#X7BAD8036849E8430"><span class="RefLink">Reference: DirectoryCurrent</span></a>). If a directory object <var class="Arg">dir</var> (see <code class="func">Directory</code> (<a href="../../../doc/ref/chap9_mj.html#X86A71E927EEC7EAD"><span class="RefLink">Reference: Directory</span></a>)) is given as the only argument then the contents of this directory is shown; alternatively, <var class="Arg">dir</var> may also be \[{ t{(\{texttt\\ },{texttt\\lshapem} ]  textsf}toget  componentsofthetransition,   java.lang.StringIndexOutOfBoundsException: Range [226, 227) out of bounds for length 226

<p>The full functionality of the function <code class="func">NCurses.BrowseGeneric</code> (<a href="chap4_mj.html#X85FC163D87FAFD12"><span class="RefLink">4.3-1</span></a>) is available.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">n:= [ 14, 14, 14 ];;  # ``do nothing''</span>
< class=GAPprompt"gap&;/> < ="APinput>rowseData.etReplay(Concatenation/>
<span class="GAPprompt">></span> <span class="GAPinput">       "q",                                  # leave the selection</span>
<span class="GAPprompt">></span> <span class="GAPinput">       "X",                                  # expand all categories</span>
<span class="GAPprompt">></span> <span class="GAPinput">       "/filetree", [ NCurses.keys.ENTER ],  # search for "filetree"</span>
<span class="GAPprompt">></span> <span class="GAPinput">       n, "Q" ) );                           # and quit</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">\item[{ \texttt{GroupByResidueClasses(\mbox{\texttt{\mdseries\slshape classes}})} }]  Finds all pairs of residue classes in the list \mbox{\texttt{\mdseries\slshape classes}} which are disjoint, forms the corresponding class transpositions and returns
<span class="GAPprompt">gap></span> <span class="GAPinput">if IsBound( BrowseDirectory ) then</span>
<span class="GAPprompt">></span> <span class="GAPinput">     BrowseDirectory( dir );</span>
<span class="GAPprompt">></span>the groupgenerated .
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseData.SetReplay( false );</span>
</pre></div>

<><Implementation  <em:The table  header no ,no row or columnlabels and exactly onedata.The  rowsareprecomputed i. e. they do  from   The tree structure isvisualized via aspecial   is  intheseparator columnin front of   column;  of this  is computed from largest  technical reasons, rowsrepresentingemempty<em>directories   via"ummy"table rows;a  < =c"ShowTables<>functionguarantees that these rows   hidden</>

<p>When a data row or an entry in this row is selected, "click" adds the corresponding filename to the result list. Initially, the first row is selected. (So if you want to search in the whole tree then you should quit this selection by hitting the <strong class="button">q</strong> key.)</p>

<p>The category hierarchy is computed using <code class="func">DirectoryContents</code> (<a href="../../../doc/ref/chap9_mj.html#X7B225E5282534EDA"><span class="RefLink">Reference: DirectoryContents</span></a>).</p>

<p>This function is available only if the <strong class="pkg">java.lang.StringIndexOutOfBoundsException: Range [0, 65) out of bounds for length 62

<p>The code can be found in the file <code class="file">app/filetree.g</code> of the package.</p>

<p><a id="X7FAE33037D09CC4E" name="X7FAE33037D09CC4E"></a></p>

<h4>6.13 <span class="Heading">A Puzzle</span></h4>

<p>We consider an <span class="SimpleMath">\(m\)</span> by <span class="SimpleMath">\(n\)</span> rectangle of squares numbered from <span class="SimpleMath">\(1\)</span> to <span class="SimpleMath">\(m n - 1\)</span>, the bottom right square is left empty. The numbered squares are permuted by successively exchanging the empty square and a neighboring square such that in the end, the empty cell is again in the bottom right corner.</p>

<div class="pcenter"><table class="GAPDocTable">
<tr>
<td class="tdcenter"><span class="SimpleMath">\( 7\)</span></td>
<td class="tdcenter"><span class="SimpleMath">\(13\)</span></td>
<"><span class="impleMath\14\<span>td
<td class="tdcenter"><span class="SimpleMath">\( 2\)</span></td>
</tr>
<tr>
<td class="tdcenter"><span class="SimpleMath">\( 1<
<td class="tdcenter"><span class="SimpleMath">\( 4\)</span></td>
<td class="tdcenter"><span class="SimpleMath">\(15\)</span></td>
<td class="tdcenter"><span class="SimpleMath">\(11\)</span></td>
<tr
<tr>
<td class="tdcenter"><span class="SimpleMath">\( 6\)</span></td>
<td class="tdcenter"><span class="SimpleMath">\( 8\)</span></td>
<td class="which always containsn}{k}to a polycyclically group.If{nobreakspace\{}  in{nobreakspace\{},return \exttt{true}  return texttt{alse.java.lang.StringIndexOutOfBoundsException: Index 201 out of bounds for length 201
<td class="tdcenter"><span class="SimpleMath">\( 9\)</span></td>
</tr>
<tr>
<td class="tdcenter"><span class="SimpleMath">\(10\)</span></td>
<td class="tdcenter"><span class="SimpleMath">\( 5\)</span></td>
< classtdcenter>span class"impleMath"\12\<span>/>
<td class="tdcenter"><span class="SimpleMath">\( \)</span></td>
</tr>
</table><br />
</div>

<p>The aim of the game is to order the numbered squares via these moves.</p>

<p>For the case <span class="SimpleMath">\(m = n = 4\)</span>, the puzzle is (erroneously?) known under the name "Sam Loyd's Fifteen", see <a href="chapBib_mj.html#biBLoydFifteenWeb">[Bog]</a> and <a href="chapBib_mj.html#biBHistGames">[OR]</a> for more information and references.</p>

<p><a id="X7EF5FCBD7DAFFAF3" name="X7EF5FCBD7DAFFAF3"></a></p>

<h5>6.13-1 BrowsePuzzle</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&#an style='color: green'>8227; BrowsePuzzle</code>( [<var class="Arg">m</var>, <var class="Arg">n</var>[, <var class="Arg">pi</var>]] )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: a record describing the initial and final status of the puzzle.</p>

<p>This function shows the rectangle in a window.</p>

<p>The arguments <var class="Arg">m</var> and <var class="Arg">n</var> are the dimensions of the rectangle, the default for both values is <span class="SimpleMath">\(4\)</span>. The initial distribution of the numbers in the squares can be prescribed via a permutation <var class="Arg">pi</var>, the default is a random element in the alternating group on the points <span class="SimpleMath">\(1, 2, \ldots, \textit{m} \textit{n} - 1\)<the of{}\{texttt\\ M} Ifone  isnotthecase  \{}       ofthedivisor{\}m{texttt\dseriess }       ofthesets     divisorsofthe

<p>In any case, the empty cell is selected, and the selection can be moved to neighboring cells via the arrow keys, or to any place in the same row or column via a mouse click.</p>

<p>The<hereof,then check whether \box{\exttt{\ f}}is not class\texttt{symbol{symbol{5},  \box{\exttt{mdseriesslshapeM}\}is.If ,return \exttt{}.


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseData.SetReplay( Concatenation(</span>
<span class="GAPprompt">></span> <span class="GAPinput">       BrowsePuzzleSolution.steps, "Q" ) );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowsePuzzle( 4, 4, BrowsePuzzleSolution.init );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseData.SetReplay( false );</span>
</pre></div>

<p>An implementation using only mouse clicks but no key strokes is available in the <strong class="pkg">GAP</strong> package <strong class="pkg">XGAP</strong> (see <a href="chapBib_mj.html#biBXGAP">[CN04]</a>).</p>

<p><em>Implementation remarks</em>: The game board is implemented via a browse table, without row and column labels, with static header, dynamic footer, and individual <code class="code">minyx</code> function. Only one mode is needed in which one cell is selected, and besides the standard actions for quitting the table, asking for help, and saving the current window contents, only the four moves via the arrow keys and mouse clicks are admissible.</p>

<p>Some standard <code class="func">NCurses.BrowseGeneric</code> (<a href="chap4_mj.html#X85FC163D87FAFD12"><span class="RefLink">4.3-1</span></a>) functionality, such as scrolling, selecting, and searching, are not available in this application.</p>

<p>The code can be found in the file <code class="file">app/puzzle.g</code> of the package.</p>

<p><a id="X7FFF943D78A403C9" name="X7FFF943D78A403C9"></a></p>

<h4>6.14 <span class="Heading">Peg Solitaire</span></h4>

<p>Peg solitaire is a board game for one player. The game board consists of several holes some of which contain pegs. In each step of the game, one peg is moved horizontally or vertically to an empty hole at distance two, by jumping over a neighboring peg\tem[ texttt\{texttt{\lshapepoint}in m{texttt{mdseriess orbit}}m test orbits ]Usesthe equality test for orbits:The   computesballs

<p>We consider the game that in the beginning, exactly one hole is empty, and in the end, exactly one peg is left.</p>

<p><a id="X82C8691380FCB674" name="X82C8691380FCB674"></a></p>

<h5>6.14-1 PegSolitaire</h5>

< class">tableclass=func width="00%>tr< class="tdleft"><code class=func>#8227;PegSolitaire> />, < class""nrholes</var>[][ =A">woModes</> )td>td ="dright>&;function&bsp;)/d>/r>/able/>
<p>This function shows the game board in a window.</p>

<p>If the argument <var class="Arg">format</var> is one of the strings <code class="code">"small"</code> or <code class="code">"large"</code> then small or large pegs are shown, the default is <code class="information and  \exttt{  appropriate.In between,i..after  computed  to a 

<p>Three shapes of the game board are supported, with <span class="SimpleMath">\(extent depending  the properties   ,  asuitable

<p>If a Boolean <var class="Arg">twoModes</var> is entered as an argument then it determines whether a browse table with one or two modes is used; the default <code class="keyw">false</code> yields a browse table with only one mode.</p>

<p>In any case, one cell of the board is selected, and the selection can be moved to neighboring cells via the arrow keys. A peg in the selected cell jumps over a neighboring peg to an adjacent hole via the <code class="code">j</code> key followed by the appropriate arrow key.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">for n in [ 33, 37, 45 ] do</span>
<span class="GAPprompt">></span> <span class="GAPinput">     BrowseData.SetReplay( Concatenation(</span>
< ="APprompt">g;/>< =GAPinput"         PegSolitaireSolutions ( n  )   )</pan>
<span class="GAPprompt">></span> <span class="GAPinput">     PegSolitaire( n );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     PegSolitaire( "large", n );</span>
<span class="GAPprompt as . 
<span class="GAPprompt">></span> <span class="GAPinput">     PegSolitaire( "large", n, true );</span>
<span class="GAPprompt">></span> <span class="GAPinput">od;</span>
<spanclass"GAPprompt&t;/>< =GAPinput"BrowseData.etReplay(false)<span
</pre></div>

<p>For more information such as variations of the game and references, see <a href="chapBib_mj.html#biBPegSolitaireWeb">[Köla]</a>. Also the solutions stored in the variable <code class="code">PegSolitaireSolutions</code{nobreakspace}\nsuremath{mathbbZ}}   follows:If both  \mbox{texttt{mdseries\lshapeG}and\}mbox\{mdseriesslshape}  ,return quotient of  {\ }  ,but\box\{mdseriesslshapeH}isfinite return \texttt{infinity.Otherwise   ofrightcosets  m{texttt\dseries\ H} {nobreakspace\{texttt\\lshapeG} computedbythe\extsf{} functiont{ightCosets 

<p><em>Implementation remarks</em>: The game board is implemented via a browse table, without row and column labels,

<p>Some standard <code class="func">NCurses.BrowseGeneric</code> (<a href="chap4_mj.html#X85FC163D87FAFD12"><span class="RefLink">4.3-1</span></a>) functionality, such as scrolling, selecting, and searching, are not available in this application.</p>

<p>The code can be found in the file <code class="file">app/solitair.g</code> of the package.</p>

<p><a id="X862CB73B7E0BE170" name="X862CB73B7E0BE170"></a></p>

<h4>6.15 <span class="Heading">Rubik's Cube</span></h4>

<p>We visualize the transformations of Rubik's magic cube in a model that is given by "unfolding" the faces and numbering them as follows. </p><div style="text-align:center;"> <img src="rubik.png" alt="[unfolded Rubik's cube image]"/> </div><p></p>

<p>Clockwise turns of the six layers (top, left, front, right, back, and down) are represented by the following permutations.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">cubegens := [</span>
<span class="of{\obreakspace}m{\exttt{ }} have {\obreakspacezero.If ,thenreturn\exttt{nfinity} Check whether\box{texttt\mdseries\lshape H}  tame, but \box{texttt{m\slshape } is not.If so, return texttt{nfinity} If m{t{mdseries\lshape G}  ,then  whether the  of the  free abelian  of
<span class="GAPprompt">></span> <span class="GAPinput">  ( 9,11,16,14)(10,13,15,12)( 1,17,41,40)( 4,20,44,37)( 6,22,46,35),</span>
<span class="GAPprompt">></span> <span class="GAPinput">  (17,19,24,22)(18,21,23,20)( 6,25,43,16)( 7,28,42,13)( 8,30,41,11),</span>
<span class="GAPprompt">></span> <span class="GAPinput">  for{nobreakspace{{mdseriesslshapeH}.Forthischeck,  \{}. Ifit is,then  \textttinfinity.
<span class="GAPprompt">></span> <span class="GAPinput">  (33,35,40,38)(34,37,39,36)( 3, 9,46,32)( 2,12,47,29)( 1,14,48,27),</span>
<&t;/pan><pan class="APinput"  (1,43,48,6)42454744223038(,,,)16243240<span
<span class="GAPprompt">></span> <span class="GAPinput">];;</span>
</pre></div>

<p><strong class="pkg">GAP</strong> computations analyzing this permutation <p><strong class="pkg">GAP</strong> computations analyzing this permutation group ]Getsasetofgenerators  \extttInductionm{texttt\dseriesslshape g}\{texttt\\ })   generatorsm{texttt{\mdseries\ g}{n}\box\{mdseriess }.

<p><a id="X8100659E81FFE9A2" name="X8100659E81FFE9A2"></a></p>

<5>.5- BrowseRubiksCube</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&#an style='color: green'>8227; BrowseRubiksCube</code>( [<var class="Arg">format</var>][,] [<var class="Arg">pi</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<p>This function shows the model of the cube in a window.</p>

<p>If the argument <var class="Arg">format</var> is one of the strings <code class="code">"small"</code> or <code class="code">"large"</code> then small or large cells are shown, the default is <code class="code">"small"</code>.</p>

<p>The argument <var class="Arg">pi</var> is the initial permutation of the faces, the default is a random permutation in the cube group, see <a href="../../../doc/ref/chap30_mj.html#X7FF906E57D6936F8"><span class="RefLink">Reference: Random</span></a>.</p>

<p>Supported user inputs are the keys <strong class="button">t</strong>, <strong class="button">l</strong>, <strong class="button">f</strong>, <strong class="button">r</strong>, <strong class="button">b</strong>, and <strong class="button">d</strong> for clockwise turns of the six layers, and the correspondingin{nobreakspace\{} 

<>Thevalueisarecord with the components <odeclass=code>inputs/ astringdescribingthe) < class">init</ode>  <ode class=c"finalcode (he  finalpermutationofthefaces ) ( codeclass"ode"inputs<code>component can be used for thejava.lang.StringIndexOutOfBoundsException: Range [331, 330) out of bounds for length 367

<p>In the following example, a word in terms of the generators is used to initialize the browse table, and<{\obreakspace}b {nobreakspace}cite{ohl05}.


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">choiceitem[ texttt{sBalanced(\box\\ }) ]Checks whether the  of prime factors ofthemultiplier  
<span class="GAPprompt">gap></span> <span class="GAPinput">input:= List( "tlfrbd", IntChar ){ choice };;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseData.SetReplay( Concatenation(</span>
<span class="GAPprompt">></span> <span class="GAPinput">       input{ [ 1 .. 20 ] },</span>
<span class="GAPprompt">></span> <span class="GAPinput">       "s",                    # switch to number display</span>
<spanitem[ \exttt{sBijective(mbox{texttt{mdseries\lshape f}}}}`T', respectively,see \texttt{sInjectivet{sSurjective.java.lang.StringIndexOutOfBoundsException: Index 149 out of bounds for length 149
<span class="GAPprompt">></span> <span class="GAPinput">       "s",                    # switch to color display</span>
<pan class=GAPprompt">gt;/>< =G">input{[26 .30 }</>
<span class="GAPprompt">></span> <span class="GAPinput">       "Q" ) );;               # quit the browse table</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseRubiksCube( Product( cubegens{ choice } ) );;</span>
< class=GAPprompt"gap>/><pan class=GAPinput"BrowseRubiksCube( "arge" Product(cubegens{choice   ;</pan>
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseData.SetReplay( false );</span>
</pre></div>

<p row and column labels with static ,  footerand individual code class=code"minyx<code>function.Onlyone modeisneeded,   standard actionsfor quitting the table,asking for help,andsaving    contents,onlythetwelvemovesandthe switch  color and    ./>

<p>Switching between the two display formats is implemented via a function <code class="code">work.Main</code>, so this relies on <em>not</em> caching the formatted cells in <code class="code">work.main</code>.</p>

<p>Row and column separators of the browse table are whitespace of height and width one. The separating lines are drawn using an individual <code class="code">SpecialGrid</code> function in the browse table. Note that the relevant cells do not form a rectangular array.</p>

<p>Some standard <code class="func">NCurses.BrowseGeneric</code> (<a href="chap4_mj.html#X85FC163D87FAFD12"><span class="RefLink">4.3-1</span></a>) functionality, such as scrolling, selecting, and searching, are not available in this application.</p>

<p>The code can be found in the file <code class="file">app/rubik.g</code> of the package.</p>

<p><a id="X7ADD618186541123" name="X7ADD618186541123"></a></p>

<h4>6.16 <span class="Heading">Changing Sides</span></h4>

<p>We consider a <span class="SimpleMath">\(5\)</span> by <span class="SimpleMath">\(5\)</span> board of squares filled with two types of stones, as follows. The square in the middle is left empty.</p>

<tdtdX/d><td>>X/d></tr> <tr><td><td>td>O<td>td>/>td><td>td><td><tr tr<><td><d><>td><td<><td>td>>tr tr>tdO/>><td>td>/>tdO/d>td><td>/tr><table><>/>

<p>The aim of the game is to exchange the two types of stones via a sequence of single steps that move one stone to the empty position on the board. Only those moves are allowed that increase or decrease one coordinate by <span class="SimpleMath">\(2\)</span> and increase< \extttfalse} 

<p>This game has been part of the MacTutor system <a href="chapBib_mj.html#biBMacTutor">[OR00]</a>.</p>

<p><a id="X7FCFC5858584F46E" name="X7FCFC5858584F46E"></a></p>

<h5>6.16-1 If the mappings are wild \{}   for cyclesnotbelonging toaninfinite,until

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&#an style='color: green'>8227; BrowseChangeSides</code>(  )</td><td class="tdright">( function )</td></tr></table></div>
<p>This function shows the game board in a window.</p>

<p>Each move is encoded as a sequence of three arrow keys; there are <span class="SimpleMath">\(24\)</span> admissible ,return\exttt{false} 


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">for entry in BrowseChangeSidesSolutions do</span>
<span class="GAPprompt">></span> <span class="GAPinput">     BrowseData.SetReplay( Concatenation( entry, "Q" ) );</span>
< class"APprompt"gt;/pan spanclass""     BrowseChangeSides;span
<span class="GAPprompt">></span> <span class="GAPinput">od;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseData.SetReplay( false );</span>
<pre><div>

<p><em>Implementation remarks</em>: The game board is implemented via a browse table, without row and column labels, with static header, dynamic footer, and individual <code class="code">minyx</code> function. Only one mode is needed, and besides the standard actions for quitting the table, asking for help, and saving the current window contents, only moves via combinations of the fourTheorem{nobreakspace}.67in\}\standard 'of  java.lang.StringIndexOutOfBoundsException: Range [116, 115) out of bounds for length 362

<p>The separating lines are drawn using an individual <code class="code">SpecialGrid</code> function in the browse table.</p>

<java.lang.StringIndexOutOfBoundsException: Range [28, 2) out of bounds for length 250

<p>The code can be found in the file <code class="file">app/knight.g</code> of the package.</p>

<p><a id="X7DDE46668321B5E9" name="X7DDE46668321B5E9"></a></p>

<h4>6.17 <span class="Heading">Sudoku</span></h4>

<p>We consider a <span class="SimpleMath">\(9\)</span> by <span class="SimpleMath">\(9\)</span> board of squares. Some squares are initially filled with numbers from <span class="SimpleMath">\(1\)</span> to <span class="SimpleMath">\(9\)</span>. The aim of the game is to fill the java.lang.StringIndexOutOfBoundsException: Index 282 out of bounds for length 153

<p></p><table class="sudokuout"> <tr> <td><table class="in{\{Kohl05} 

<p><a id="X789D3D4C818F4BC2" name="X789D3D4C818F4BC2"></a></p>

<6-1Sudoku<h5

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&#an style='color: green'>8227; Sudoku.Init</code>( [<var class="Arg">arg</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: A record describing a Sudoku board or <code class="keyw">fail</code>.</p>

<p>This function constructs a order\texttt{\symbol{45}}preserving, compute the action on the respected


<dl>
<dt><strong class="Mark"><var class="Arg">arg</var> is a string</strong></dt>
<>The entries of  Sudoku board  numbered row-ise from 1  81.A  is encoded as a string .Ifoneof  1 to   in entry <panclass"impleMath"\i\<span>then the corresponding digit character is written in position <span class="SimpleMath">\(i\)</span> of the string. If an entry is empty any character, except <code class="code">'1'/code>to < =code"''/ode>or <ode class="''/ode   inposition <pan=SimpleMath>i)/>ofthestring  empty  can   out  < =c"'/>characterscanbeinsertedthestring(orexample markline) Suchstringscan be used< /./>

</dd>
<dt><strong class="Mark"><var class="Arg">arg</var> is a matrix</strong></dt>
<dd><p>A Sudoku board can also be encoded as a 9 by 9-matrix, that is a list of 9 lists of length 9, whose (i,j)-th entry is the (i,j)-th entry of groupsuses \exttt{cwaMapping}Part\obreakspace}d)java.lang.StringIndexOutOfBoundsException: Index 159 out of bounds for length 159

</dd>
<dt><strong class="Mark"><var class="Arg">arg</var> is a list of integers</strong></dt>
<dd><p>Instead of the matrix just described the argument can also be given by the concatenation of the rows of the matrix (so, a list of integers and holes).</p>

</dd>
<dl>

<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">game := Sudoku.Init(" 3   68  | 85  1 69|  97   53|      79 |\</span>
<span class="GAPprompt">></span> <span class="GAPinput"> 6  47   |45  2    |89   2 1 | 4   8 7 | ");;</span>
</pre></div>

<p><a id="X86A5C6CE79DD67EE" name="X86A5C6CE79DD67EE"></a></p>

<h5>6.17-2 Sudoku.Place</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&#an style='color: green'>8227; Sudoku.Place</code>( <var class="Arg">game</var>, <var class="Arg">i</var>, <var class="Argc       permutation  under
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&#an style='color: green'>8227; Sudoku.Remove</code>( <var class="Arg">game</var>, <var class="Arg">i</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: The changed <var class="Arg">game</var>.</p>

<p>Here <var class="Arg">game</var> is a record describing a Sudoku board, as returned by 

<p><code class="func">Sudoku.Place</code> tries to place number <var class="Arg">n</var> on entry <var class="Arg">i</var>. It is an error if entry <var class="Arg">i</var> is not empty. The number is not placed if <var class="Arg">n</var>The  for groups uses an  of theconstructiongiven

<p><code class="func">Sudoku{nobreakspace27 in{nobreakspace\{LaHarpe00} from PSL(2,\nsuremath{mathbb C})to RCWA(\nsuremath{ Z}}.As an


<div class="example"><pre>
<span class="GAPprompt">gap>equivalent for the closed discs used there,the method takes  
<span class="GAPprompt">></span> <span class="GAPinput"> 6  47   |45  2    |89   2 1 | 4   8 7 | ");;</span>
<span class="GAPprompt">gap></span>  therankofthefreegroup. 
<span class="GAPprompt">gap></span> <span class="GAPinput">IsBound(game.impossible);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">Sudoku\item[{t{sOne\box{texttt{slshape}) }`Trivial'.
<span class="GAPprompt">gap></span> <span class="GAPinput">IsBound(game.impossible);</span>
false
</pre></div>

<p><a id="X8401B31A879F9F9F" name="X8401B31A879F9F9F"></a></p>

<h5>6.17-3 Sudoku.RandomGame</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class=" IfIf the underlying ring is{nobreakspace{ensuremath Z}   the
<p>Returns: A pair <code class="code">[str, seed]</code> of string and seed.</p>

<>The  <ar class=Arg>seed/> if,mustbeaninteger Ifnot  randominteger currentclass"kg>GAP</>  used.This  returns a random  Sudoku game,where  board is  by a  < class""str<code> as   codeclass">.</ode>( href="hap6_mj.tml#789D3D4C818F4BC2>span class=RefLink"6171/>/>. the <var =A"seed<var>the    ./>

<p>The games computed by this function have the property that after removing any given entry the puzzle does no longer have a unique solution.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">Sudoku.RandomGame(5833750);</span>
[ " 1         2     43  2   68   72    8     6 2   1 9 8  8 3   9     \
47 3   7  18  ", 5833750 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">last = Sudoku.RandomGame(last[2]);</span>
true
</pre></div>

<p><a id="X86917AC57C25A68F" name="X86917AC57C25A68F"></a></p>

<h5>6.17-4 Sudoku.SimpleDisplay</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&#an style='color: green'>8227; Sudoku.SimpleDisplay</code>( <var class="Arg">game</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Displays a Sudoku board on the terminal. (But see <code class="func">PlaySudoku</code> (<a href="chap6_mj.html#X7D19224478E86BB4"><span class="RefLink">6.17-8</span></a>) for a fancier interface.)</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">game := Sudoku.Init(" 3   68  | 85  1 69|  97   53|      79 |\</span>
<span class="GAPprompt">></span> <span class="GAPinput"> 6  47   |45  2    |89   2 1 | 4   8 7 | ");;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Sudoku.SimpleDisplay(game);</span>
 3 |  6|8  
 85|  1| 69
  9|7  | 53
-----------
   |   |79 
 6 | 47|   
45 | 2 |   
-----------
89 |  2| 1 
 4 | |7 
   |   |   
</pre></div>

<p><a id="X81F98C6C7C8415AB" name="X81F98C6C7C8415AB"></a></p>

<h5>6.17-5 Sudoku.DisplayString</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&#an style='color: green'>8227; Sudoku.DisplayString</code>( <var class="Arg">game</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>The string returned by this function can be used to display the Sudoku board <var class="Arg">game</var> on the terminal, using <code class="func">PrintFormattedString</code> (<a href="../../../pkg/GAPDoc.dev/doc/chap6_mj.html#X812A8326844BC910"><span class="RefLink">GAPDoc: PrintFormattedString</span></a>). The result depends on the value of <code class="code">GAPInfo.TermEncoding</code>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">game := Sudoku.Init(" 3   68  | 85  1 69|  97   53|      79 |\</span>
<span class="GAPprompt">></span> <span class="GAPinput"> 6  47   |45  2    |89   2 1 | 4   8 7 | ");;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">str:= Sudoku.DisplayString( game );;</span>
<span class="GAPprompt">gap></span> <span classIfmbox{texttt\\ G}} and \mbox{\texttt\\ } are both tame,then :Ifthemultiplier of \box{\exttt{\mdseries\lshape } does notdividethe multiplier {nobreakspacem\exttt\\lshapeG},then return \{alse}. If \mbox{\texttt{\mdseries\slshape H}} does not respect the stored respected partition of{\obreakspacem{texttt{mdseries\lshape },then return\exttt{  whether the finite permutation group inducedby\box\{mdseriess }  t{espectedPartitionmbox{\\\lshape }) isa  of \extttA(\mbox{{m\ G}). If yes,  t{rue.Check}mbox\{mdseries\slshape}  greater  the orderof{nobreakspace}{texttt\\lshapeG.Ifso return \exttt{} 
                     ┏━━━┯━━━┯━━━┳━━━┯━━━┯━━━┳━━━┯━━━┯━━━┓
                     ┃   │ 3 │   ┃   │   │ java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
                     ┠───┼───┼───╂───┼───┼───╂───┼───┼───┨
                     ┃   │ 8 │ 5 ┃   │   │ 1 ┃   │ 6 │ 9 ┃
                     ┠───┼───┼───╂───┼───┼───╂───┼───┼───┨
                     ┃   │   │ 9 ┃ 7 │   │   ┃   │ 5 │ 3 ┃
                     ┣━━━┿━━━┿━━━╋━━━┿━━━┿━━━╋━━━┿━━━┿━━━┫
                     ┃   │   │   ┃   │   │   ┃ 7 │ 9 │   ┃
                     ┠───┼───┼───╂───┼───┼───╂───┼───┼───┨
                     ┃   │ 6 │   ┃   │ 4 │ 7 ┃   │   │   ┃
                     ┠───┼───┼───╂───┼───┼───╂───┼───┼───┨
                     ┃ 4 │ 5 │   ┃   │ 2 │   ┃   │   │   ┃
                     ┣━━━┿━━━┿━━━╋━━━┿━━━┿━━━╋━━━┿━━━┿━━━┫
                     ┃ 8 │ 9 │   ┃   │   │ 2 ┃   │ 1 │   ┃
                     ┠───┼───┼───╂───┼─── {\exttt{sTame(\box{{mdseriess }) ]Applicationthe given  Corollary{}2..java.lang.StringIndexOutOfBoundsException: Index 132 out of bounds for length 132
                     ┃   │ 4 │   ┃   │   │ 8 ┃   │ 7 │   ┃
                     ┠───┼───┼───╂───┼───┼───╂───┼───┼───┨
                     ┃   │   │   ┃   │   │   ┃   │   │   ┃
                     ┗━━━┷━━━┷━━━┻━━━┷━━━┷━━━┻━━━┷━━━┷━━━┛
</pre></div>

<p><a id="X7C73C6D08293B3B8" name="X7C73C6D08293B3B8"></a></p>

<h5>6.17-6 Sudoku.OneSolution</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&#an style='color: green'>8227; Sudoku.OneSolution</code>( <var class="Arg">game</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: A completed Sudoku board that solves <var class="Arg">game</var>, or <code class="keyw">fail</code>.</p>

<p>Here <var class="Arg">game</var> must be a Sudoku board as returned by <code class="func">Sudoku.Init</code> (<a href="chap6_mj.html#X789D3D4C818F4BC2"><span class="RefLink">6.17-1</span></a>). It is not necessary that <var class="Arg">game</var> describes a proper Sudoku game (has a unique solution). It may have several solutions, then one random solution is returned. Or it may have no solution, then <code java.lang.StringIndexOutOfBoundsException: Index 418 out of bounds for length 33


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">Sudoku.SimpleDisplay(Sudoku.OneSolution(Sudoku.Init("  3")));</span>
493|876|251
861|542|739
527|193|648
-----------
942|618|573
156|739|482
738|425|916
-----------
289|354|167
375|961|824

</pre></div>

<p><a id="X865DDBDC7E16217F" name="X865DDBDC7E16217F"></a></p>

<h5>6.17-7 Sudoku.UniqueSolution</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&#an style='color: green'>8227; Sudoku.UniqueSolution</code>( <var class="Arg">game</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: A completed Sudoku board that solves <var class="Arg">game</var>, or <code class="keyw">false</code>, or <code class="keyw">fail</code>. If suitable \{  $()  found, as  

<p>Here <var class="Arg">game</var> must be a Sudoku board as returned by <code class="func">Sudoku.Init</code> (<a href="chap6_mj.html#X789D3D4C818F4BC2"><span class="RefLink">6.17-1</span></a>). It is not necessary that <var class="Arg">game</var> describes a proper Sudoku game. If it has several solutions, then <code class="keyw">false</code> is returned. If it has no solution, then <code class="keyw">fail</code> is returned. Otherwise a board with the


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">s := "      5  java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
<span class="GAPprompt">></span> <span class="GAPinput">|     5   | 4   7  2|  91  8  "If terminates:If $  \{\athbbZ}$  \exttt{rue,otherwisereturn \{} 
<span class="GAPprompt">gap></span> <span class="GAPinput">sol := Sudoku.UniqueSolution(Sudoku.Init(s));;</span>
<spanitem{\extttIsTransitiveOnNonnegativeIntegersInSupport{texttt{mdseries}) }  Computes  about1 with  increasingradii and checks whether
438|219|576
715|436|928
962|758|314
------java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
694|573|281
153|862|749
827941653
-----------
281|695|437
546|387|192
379|124|865
</pre></div>

<p><a item[{\texttt{IsZero(\mbox{\texttt{\mdseries\slshape f}})} }]  ``Trivial''. 

<h5>6.17-8 PlaySudoku</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&#an style='color: green'>8227; PlaySudoku</code>( [<var class="Arg">arg</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: A record describing the latest status of a Sudoku board.</p>

<p>This function allows one to solve Sudoku puzzles interactively. There are several possibilities for the optional argument <var class="Arg">arg</var>. It can either be a string, matrix or list of holes and integers as described in <code class="func">Sudoku.Init</code> (<a href="chap6_mj.html#X789D3D4C818F4BC2"><span class="RefLink">6.17-1</span></a>), or a board as returned by <code class="func">Sudoku.Init</code> (<a href="chap6_mj.html#X789D3D4C818F4BC2"><spangroups induced by{}mbox\{mdseriesslshapeG}onrefinements   storedrespectedpartition{nobreakspace\textttPbytheorder  the groupinduced{\obreakspace\{texttt\dseriesslshapeG} on\}.Thenusea   the  m{texttt{m\ }  powers     waywhich

<p>The usage of this function is self-explanatory, pressing the <strong class="button">?</strong> key displays a help screen. Here, we mention two keys with a particular action: Pressing the <strong class="button">h</strong> key you get a hint, either an empty entry is filled or the program tells you that there is no solution (so you must delete some entries and try others). Pressing the <strong class="button">s</strong> key the puzzle is solved by the program or it tells you that there is no or no unique solution.</p>

<p><em>Implementation remarks</em>: The game board is implemented via a browse table, without row and column labels, with static header, dynamic footer, and individual <code class="code">minyx</code> function. Two modes are supported, with the standard actions for quitting the table and asking for help; one cell is selected in each mode. The first mode provides actions for moving the selected cell via arrow keys, for changing the value in the selected cell, for getting a hint or the (unique) solution. (Initial entries of the matrix cannot be changed via user input. They are shown in boldface.) The second mode serves for error handling: When the user enters an invalid number, i. e., a number that occurs already in the current row or column or subsquare, then the application switches to this mode, which causes that a message is shown in the footer, and the invalid entry is shown in red and blinking; similarly, error mode is\tem{ \{(\mbox{texttt\\ f}}}     classes    the,

<p>The separating lines are drawn using an individual <code class="code">SpecialGrid</code> function in the browse table, since they cannot be specified within the generic browse table functions.</p>

<p>Some standard <code class="func">NCurses.BrowseGeneric</code> (<a href="chap4_mj.html#X85FC163D87FAFD12"><span class="RefLink">4.3-1</span></a\item[ \texttt{LikelyContractionCentre\mbox\{\mdseries\lshape f}\mboxtexttt{\mdseries\slshape maxn}},\mbox{\texttt{\mdseries\slshape bound}})} }]  Computes trajectories with starting values from a  interval, untila

<p>The code can be found in the file <code class="file">app/sudoku.g</code> of the package.</p>

<p><a id="X804D66D67B908F30" name="X804D66D67B908F30"></a></p>

<h5>6.17-9 Sudoku.HTMLGame</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&#an style='color: green'>8227; Sudoku.HTMLGame</code>( <var class="Arg">game</var> )</td><td class="tdright">( function )</td></tr></table></div>
<div class"unc">tableclass"unc width="100%">tr>td "dleft><code ="func>#8227;Sudoku.aTeXGame<code( class=A"game/ar)/td<classtdright>&functionnbsp)/d<<table<div
<p>Returns: A string with HTML or LaTeX code, respectively.</p>

<p>The argument of these functions is a record describing a Sudoku game. These functions return code for including the current status ofthan reading in certain files. 

<p><a id="X78E8DF8381626623" name="X78E8DF8381626623"></a></p>

<h4>6.18 <span class="Heading">Managing simple Workflows</span></h4>

<p>The idea behind the \item[{ \texttt{LocalizedRcwaMapping\mbox{\texttt{\mdseries\slshape f}},\mbox{\texttt{\mdseries\slshape p}})} }]  ``Trivial''. 

<p><a id="X7E47FC2378C276C6" name="X7E47FC2378C276C6"></a></p>

<h5>6.18-1 <span class="Heading">BrowseWizard</span></h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&#an style='color: green'>8227; BrowseWizard</code>( <var class="Arg">data</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: a record.</p>

<p>The argument <var class="Arg">data</var> must be a record with the components <code class="code">steps</code> (a list of records, each representing one step in the questionnaire) and <code class="code">defaults</code> (a record). The component <code class="code">header</code>, if present, must be a string that is used as a header line; the default for it is <code class="code">"BrowseWizard"</code>.</p>

<p><code class="func">BrowseWizard\tem[{ \extttMaximalShift\mbox{texttt\mdseries\slshapef}}}  `Trivial'' 

<p>Beginning with the first entry, the user is asked to enter information, one record component per entry; this may be done by entering some text, by choosing keys from a given list of choices, or by editing a list of tabular data. Then one can go to the next step by hitting the <strong class="button">ArrowDown</strong> key (or by entering <strong class=<item[{\extttM(\mbox\{\mdseries\slshape G}},\mbox{\texttt{\mdseries\slshape points}},\mbox{\texttt{\mdseries\slshape point}})} }]  As described in \texttt{MergerExtension} (\ref{MergerExtension:for finite permutation groups}). 

<p[{\textttM(mbox{\exttt\dseriesslshapeg}},{nobreakspace}\{Mirrored(java.lang.StringIndexOutOfBoundsException: Range [103, 102) out of bounds for length 207

<p>An implementation of a questionnaire is given by <code class="code">BrowseData.ChooseSimpleGroupQuestions</code>, which is used in the following example. The idea is to choose the description of a finite simple group by entering first the type (cyclic, alternating, classical, exceptional, or java.lang.StringIndexOutOfBoundsException: Range [0, 304) out of bounds for length 136


<div class="example"><pre>
<class"GAPprompt">gap;</pan <pan class=GAPinput>d: [NCurseskeys.OWN]; r=[NCurses.eys.RIGHT];<span
<span class="GAPprompt">gap></span> <span class="GAPinput">c:= [ NCurses.keys.ENTER ];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseData.SetReplay( Concatenation(</span>
<span class="GAPprompt">></span> <span class="GAPinput">       c,             #arespected partition (see \texttt{RespectedPartition}). 
<span class="GAPprompt">></span> <span class="GAPinput">       d,             # enter the first step</span>
<span class="GAPprompt">></span> <span class="GAPinput">       d, d,          # go to the choice of classical groups</span>
<span class="GAPprompt">></span>\item[ \textttModulus\java.lang.StringIndexOutOfBoundsException: Range [31, 29) out of bounds for length 79
<span class="GAPprompt">></span> <span class="GAPinput">       c,             # enter the next step</span>
<span class="GAPprompt">></span> <span class="GAPinput">       d, d,          # go to the choice of unitary groups</span>
<span class="GAPprompt">></span> <span class="GAPinput">       c,             # confirm this choice</span>
<span class="GAPprompt">></span> <span class="GAPinput">       c,             # enter the next step</span>
<span class="GAPprompt">>
<span class="GAPprompt">></span> <span class="GAPinput">       c,             # enter the next step</span>
<span class="GAPprompt">></span> <span class="GAPinput">       "3", c,        # enter the field size and confirm</span>
<span class="GAPprompt">></span> <span class="GAPinput">       c ) );         # confirm all choices (closes the table)</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">res:= BrowseWizard( rec(</span>
<span class="GAPprompt">></span> <span class="GAPinput">     steps:= BrowseData.ChooseSimpleGroupQuestions,</span>
<"java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 88
<span class="GAPprompt">></span> <span class="GAPinput">     header:= "Choose a finite simple group" ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseData.SetReplay( false );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">BrowseData.InterpretSimpleGroupDescription( res );</span>
rec( parameter := [ 4, 3 ], requestedname := "U5(3)", series := "2A", 
  shortname := "U5(3)" )
</pre></div>

<p>The supported components of each entry in <var class="Arg">data</var><code class="code">.steps</code> are as follows.</p>


<dl>
<dt><strong class="Mark"><code class="code">key</code></strong></dt>
<dd><p>a string, the name of the component of the result record that gets bound for this entry.</p>

</dd>
<dt><strong class="Mark"><code class="code">description</code></strong></dt>
<dd><p>a string describing what information shall be entered.</p>

</dd>
<dt><strong class="Mark"><code class="code">type</code></strong></dt>
<dd><p>one of <code class="code">"editstring"</code>, <code class="code">"edittable"</code>, <code class<or  of \box{texttt\\ m}rangingup      countsof

</dd>
<dt><strong class="Mark"><code class="code">keys</code>
      (only if <code class="code">type</code> is <code class="code">"key"</code> or <code class="code">"keys"</code>)</strong></dt>
<dd><p>either the list of pairs <code class="code">[ key, alias ]</code> such that the user shall choose from the list of <code class="code">key</code> values (strings), and the <code class="code">alias</code> values (any <strong class="pkg">GAP</strong> object) java.lang.StringIndexOutOfBoundsException: Index 273 out of bounds for length 178

</dd>
<dt><strong class="Mark"><code class="code">validation</code> (optional)</strong></dt>
<dd><p>a function that takes <var class="Arg">steps</var>, the current result record, and a result candidate for the current step as its arguments; it returns <code class="keyw">true</code> if the result candidate is valid, and a string describing the reason for ord)}.

</dd>
<dt><strong class="Mark"><code sesOfRCWAZOfOrder\{{\ ord}} }]Theclass numbersaretaken  Corollary\obreakspace27.1
<dd><p>depending on the <code class="code">type</code> value, the alias part(s) of the chosen key(s) or the string or the list of data records, or alternatively a function that takes <var class="Arg">steps</var> and the current result record as its arguments and returns the desired value. If the <code class="code">key</code> component of <var class="Arg">data</var><code class="code">.defaults</code> is bound and valid (according to the <code class="code">validation</code> function) then this value is taken as the default; otherwise, thein{\obreakspace}\cite{Kohl05}. 

</dd>
<dt><strong class="Mark"><code class="code">isVisible</code> (optional)</strong></dt>
<dd><p>a function that takes <var class="Arg">steps</var> and the current result record as its arguments and returns <code class="keyw">trueitem{ \exttt{(mbox{{mdseriesslshapef}} \}\exttt{One(\mbox{\texttt{mdseriess }),}  `'.

</dd>
</dl>
<>If code =code"type<> of a  is code class=code">e"/  also the   aremandatory</>


<dl>
<dt><strong class="Mark"><code class="code">list<as alist.Otherwise test whether the group \mbox{\texttt{\mdseries\slshape G}} is tame or wild. 
<dd><p>the current list of records to be edited; only strings are supported as the values of the record components.</p>

</dd>
<dt><strong class="Mark"><code class="code">mapping</code></strong></dt>
<dd><p>a list of pairs <code class="code">[ component, label ]</code> such that <code class="code">component</code> is the name of a component in the entries in <code class="code">list</code>, and <code class="code">label</code> is the label shown in the dialog box for editing the record.</p>

</dd>
<dt><strong class="Mark"><code class="code">choices</code> (optional)</strong></dt>
<dd><p>a list of records which can be added to <code class="code">list</code>.</p>

</dd>
<dt><strong class="Mark"><code class="code">rectodisp</code></strong></dt>
<dd><p>a function that takes a record from <code class="code">list</code> and returns a string that is shown in the browse table.</p>

</dd>
<dt>strong class=""><code class=code"title/code></strong>/t>
<dd><p>a string, the header line of the dialog box for editing an entry.</p>

</dd>
</dl>
<p>The code of <code class="func">BrowseWizard</code>, <code class="code">BrowseData.ChooseSimpleGroupQuestions</code>, and <code class="code">BrowseData.InterpretSimpleGroupDescription</code> can be found in the file <code class="file">app/wizard.g</code> of the package.</p>

>idX7BCE1AE37EFCE91D"name="X7BCE1AE37EFCE91D"></a></p>

<h4>6.19 <span class="Heading">Utility for <strong class="pkg">GAP</strong> Demos</span></h4>

<p>This application can be used with <strong class="pkg">GAP</strong> if the user interface has <code class="code">readline</code> support. The purpose is to simplify the typing during a \item[{ \texttt{Order(\mbox{\texttt{\mdseries\slshape f}})} }]  Test for \texttt{IsTame}. If the mapping is not tame, then return \texttt{infinity}. Otherwise use Corollary{\nobreakspace}2.5{Kohl05}

<p>The file format to specify <strong class="pkg">GAP</strong> code for a demonstration is very simple: it contains blocks of lines with <strong class="pkg">GAP</strong>\tem[{\texttt{ermutationOpNCmbox{texttt\slshapesigma},m{texttt\\lshapeP}\{t{mdseriesslshape }) ]Severaldifferent methods fordifferenttypesof  


<pre class="normal">

#% Add comments after #% characters at the beginning of a line.
#% A comment can have several lines.
#% Here is a multi-line input block:
g := MathieuGroup(11);;
cl := ConjugacyClasses(g);
#% Calling a help page
?MathieuGroup
#% The next line contains a comment in the GAP session:
a := 12;; b := 13;; # assign two numbers
#%
*b
#%

</pre>

<p>(Single <code class=<uccessivelycompute two ballsaround{\obreakspace1 and{\nobreakspace}\box{texttt{\mdseries\slshape g}} until they intersect non\texttt{\symbol{45}}trivially is standard in

<p>A demonstration can be loaded into a <strong class="pkg">GAP</strong> session with the command</p>

<p><a id="X80F418C5835C62BA" name="X80F418C5835C62BA"></a></p>

<h5>6.19-1 LoadDemoFile</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class=nd run time to actually compute groupelements. Thus only images of tuples of
<p>Returns: Nothing.</p>

<p>This function loads a demo file in the format described java.lang.StringIndexOutOfBoundsException: Range [0, 64) out of bounds for length 32

<p>If the optional argument <var class="<p>If the optional argument <var class="Argf}), {\} \{rimeSet\{texttt{\dseries\ G}) ]`Straightforward''. 


<div class="example"><pre>
<span class="\item[{ \texttt{PrimeSwitch\mbox{\texttt{\mdseries\slshape p}})} }]  Multiplication of rcwa mappings as indicated. 
<span class="GAPprompt">gap></span> <span class="GAPinput">demofile := Filename(dirs, "../app/demo.demo");;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">if IsBound(GAPInfo.UseReadline) and GAPInfo.UseReadline = true then</span>
span class="APprompt"&<><class"APinput>  LoadDemoFile"My firstdemo" )</pan>
<span class="GAPprompt">></span> <span class="GAPinput">  LoadDemoFile("My first demo (single lines)", demofile, true);</span>
<span class="GAPprompt">></span> <span class="GAPinput">fi;</span>
</pre></div>

<p>Many demos can be loaded at the same time. They are used with the <strong class="button">PageDown</strong> and <strong class="button">PageUp</strong> keys.</p>

<p>The <Part{\nobreakspace}(a) in{\nobreakspace}\cite{Kohl05}. 

<p>The next input block of the current demo is copied into the current input line of the <strong class="pkg">GAP</strong> session by pressing the <strong class="button">PageDown</strong> key. This line is not yet sent to <strong class="pkg">GAP</strong>, use the <strong class="button">Return</strong> key if you want to evaluate the input. (You can also still edit the input line before evaluation.)</p>

<p>So, in the simplest case a demo can be done by just pressing <strong class="button">PageDown</strong> and <strong class="button">Return</strong> in turns. But it is always possible to type extra input during a demo by hand or to change the input lines from the demo file before evaluation. It is no problem if java.lang.StringIndexOutOfBoundsException: Index 319 out of bounds for length 242

<p>Try it yourself with the two demos<nd  \texttt{RestrictedPerm}to  theimages ofthe  \}mbox\\slshape}these.


<div class="chlinkprevnextbot"> <a href="chap0_mj.html">[Top of Book]</a>   <a href="chap0_mj.[ tjava.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 85


< ""< classchlink1>Chapter: </span<hrefcjava.lang.StringIndexOutOfBoundsException: Range [84, 83) out of bounds for length 392

<hr />
<p class="foot">generated by <a href="https://www.math.rwth-aachen.de/~Frank.Luebeck/GAPDoc">GAPDoc2HTML</a></p>
</body>
</html>

Messung
CHZG
8010010093

¤ Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.0.109Bemerkung:  ¤

*Eine klare Vorstellung vom Zielzustand






Wurzel

Suchen

PVS Prover

Isabelle Prover


Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Statistik
#Sources=1104857
#Domains=418314