100% found this document useful (6 votes)
29 views

Download Complete (Ebook) Discovering Computer Science: Interdisciplinary Problems, Principles, and Python Programming by Jessen Havill ISBN 9780367472498, 036747249X PDF for All Chapters

The document provides information about the ebook 'Discovering Computer Science: Interdisciplinary Problems, Principles, and Python Programming' by Jessen Havill, including its ISBNs and download links. It outlines the contents of the book, which covers various topics in computer science and Python programming. The second edition was published in 2021 by CRC Press.

Uploaded by

feagaepple2r
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (6 votes)
29 views

Download Complete (Ebook) Discovering Computer Science: Interdisciplinary Problems, Principles, and Python Programming by Jessen Havill ISBN 9780367472498, 036747249X PDF for All Chapters

The document provides information about the ebook 'Discovering Computer Science: Interdisciplinary Problems, Principles, and Python Programming' by Jessen Havill, including its ISBNs and download links. It outlines the contents of the book, which covers various topics in computer science and Python programming. The second edition was published in 2021 by CRC Press.

Uploaded by

feagaepple2r
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 65

Download Full Version ebook - Visit ebooknice.

com

(Ebook) Discovering Computer Science:


Interdisciplinary Problems, Principles, and Python
Programming by Jessen Havill ISBN 9780367472498,
036747249X
https://ebooknice.com/product/discovering-computer-science-
interdisciplinary-problems-principles-and-python-
programming-24229672

Click the button below to download

DOWLOAD EBOOK

Discover More Ebook - Explore Now at ebooknice.com


Instant digital products (PDF, ePub, MOBI) ready for you
Download now and discover formats that fit your needs...

Start reading on any device today!

(Ebook) Discovering Computer Science: Interdisciplinary


Problems, Principles, and Python Programming by Jessen
Havill ISBN 9780367472498, 036747249X
https://ebooknice.com/product/discovering-computer-science-
interdisciplinary-problems-principles-and-python-programming-24229672

ebooknice.com

(Ebook) Discovering Computer Science: Interdisciplinary


Problems, Principles, and Python Programming by Jessen
Havill ISBN 9781482254143, 148225414X
https://ebooknice.com/product/discovering-computer-science-
interdisciplinary-problems-principles-and-python-programming-5743478

ebooknice.com

(Ebook) Discovering Computer Science : Interdisciplinary


Problems, Principles, and Python Programming by Jessen
Havill ISBN 9781315381756, 1315381753
https://ebooknice.com/product/discovering-computer-science-
interdisciplinary-problems-principles-and-python-programming-10833944

ebooknice.com

(Ebook) Biota Grow 2C gather 2C cook by Loucas, Jason;


Viles, James ISBN 9781459699816, 9781743365571,
9781925268492, 1459699815, 1743365578, 1925268497
https://ebooknice.com/product/biota-grow-2c-gather-2c-cook-6661374

ebooknice.com
(Ebook) Matematik 5000+ Kurs 2c Lärobok by Lena
Alfredsson, Hans Heikne, Sanna Bodemyr ISBN 9789127456600,
9127456609
https://ebooknice.com/product/matematik-5000-kurs-2c-larobok-23848312

ebooknice.com

(Ebook) SAT II Success MATH 1C and 2C 2002 (Peterson's SAT


II Success) by Peterson's ISBN 9780768906677, 0768906679

https://ebooknice.com/product/sat-ii-success-
math-1c-and-2c-2002-peterson-s-sat-ii-success-1722018

ebooknice.com

(Ebook) Master SAT II Math 1c and 2c 4th ed (Arco Master


the SAT Subject Test: Math Levels 1 & 2) by Arco ISBN
9780768923049, 0768923042
https://ebooknice.com/product/master-sat-ii-math-1c-and-2c-4th-ed-
arco-master-the-sat-subject-test-math-levels-1-2-2326094

ebooknice.com

(Ebook) Cambridge IGCSE and O Level History Workbook 2C -


Depth Study: the United States, 1919-41 2nd Edition by
Benjamin Harrison ISBN 9781398375147, 9781398375048,
1398375144, 1398375047
https://ebooknice.com/product/cambridge-igcse-and-o-level-history-
workbook-2c-depth-study-the-united-states-1919-41-2nd-edition-53538044

ebooknice.com

(Ebook) Python Programming: An Introduction to Computer


Science by John M. Zelle

https://ebooknice.com/product/python-programming-an-introduction-to-
computer-science-7343896

ebooknice.com
Discovering Computer Science
Chapman & Hall/CRC
Textbooks in Computing
Series Editors
John Impagliazzo
Andrew McGettrick

Pascal Hitzler, Markus Krötzsch, and Sebastian Rudolph, Foundations of Semantic Web Technologies
Henrik Bærbak Christensen, Flexible, Reliable Software: Using Patterns and Agile Development
John S. Conery, Explorations in Computing: An Introduction to Computer Science
Lisa C. Kaczmarczyk, Computers and Society: Computing for Good
Mark Johnson, A Concise Introduction to Programming in Python
Paul Anderson, Web 2.0 and Beyond: Principles and Technologies
Henry Walker, The Tao of Computing, Second Edition
Ted Herman, A Functional Start to Computing with Python
Mark Johnson, A Concise Introduction to Data Structures Using Java
David D. Riley and Kenny A. Hunt, Computational Thinking for the Modern Problem Solver
Bill Manaris and Andrew R. Brown, Making Music with Computers: Creative Programming in Python
John S. Conery, Explorations in Computing: An Introduction to Computer Science and Python Programming
Jessen Havill, Discovering Computer Science: Interdisciplinary Problems, Principles, and Python
Programming
Efrem G. Mallach, Information Systems: What Every Business Student Needs to Know
Iztok Fajfar, Start Programming Using HTML, CSS, and JavaScript
Mark C. Lewis and Lisa L. Lacher, Introduction to Programming and Problem-Solving Using Scala,
Second Edition
Aharon Yadin, Computer Systems Architecture
Mark C. Lewis and Lisa L. Lacher, Object-Orientation, Abstraction, and Data Structures Using Scala,
Second Edition
Henry M. Walker, Teaching Computing: A Practitioner’s Perspective
Efrem G. Mallach, Information Systems:What Every Business Student Needs to Know, Second Edition
Jessen Havill, Discovering Computer Science: Interdisciplinary Problems, Principles, and Python
Programming, Second Edition
For more information about this series please visit:
https://www.crcpress.com/Chapman--HallCRC-Textbooks-in-Computing/book-series/CANDHTEXCO
MSER?page=2&order=pubdate&size=12&view=list&status=published,forthcoming
Discovering Computer Science
Interdisciplinary Problems, Principles, and
Python Programming
Second Edition

Jessen Havill
Second edition published 2021
by CRC Press
2 Park Square, Milton Park, Abingdon, Oxon, OX14 4RN

and by CRC Press


6000 Broken Sound Parkway NW, Suite 300, Boca Raton, FL 33487-2742

© 2021 Jessen Havill

The right of Jessen Havill to be identified as author of this work has been asserted by him in accordance with sections
77 and 78 of the Copyright, Designs and Patents Act 1988.

All rights reserved. No part of this book may be reprinted or reproduced or utilised in any form or by any electronic,
mechanical, or other means, now known or hereafter invented, including photocopying and recording, or in any infor­
mation storage or retrieval system, without permission in writing from the publishers.

For permission to photocopy or use material electronically from this work, access www.copyright.com or contact the
Copyright Clearance Center, Inc. (CCC), 222 Rosewood Drive, Danvers, MA 01923, 978-750-8400. For works that are
not available on CCC please contact mpkbookspermissions@tandf.co.uk

Trademark notice: Product or corporate names may be trademarks or registered trademarks, and are used only for
identification and explanation without intent to infringe.

British Library Cataloguing-in-Publication Data


A catalogue record for this book is available from the British Library

Library of Congress Cataloging-in-Publication Data

Names: Havill, Jessen, author.


Title: Discovering computer science : interdisciplinary problems,
principles, and Python programming / Jessen Havill.
Description: Second edition. | Boca Raton : CRC Press, 2021. | Series:
Chapman & Hall/CRC press textbooks in computing | Includes
bibliographical references and index.
Identifiers: LCCN 2020030144 | ISBN 9780367472498 (paperback) | ISBN
9780367613358 (hardback) | ISBN 9781003037149 (ebook)
Subjects: LCSH: Computer science--Textbooks. | Python (Computer program
language)--Textbooks.
Classification: LCC QA76 .H3735 2021 | DDC 005.13/3--dc23
LC record available at https://lccn.loc.gov/2020030144

ISBN: 9780367613358 (hbk)


ISBN: 9780367472498 (pbk)
ISBN: 9781003037149 (ebk)

Typeset in Computer Modern font


by Cenveo Publisher Services
Contents

Preface xv

Acknowledgments xxiii

About the author xxv

Chapter 1 ∎ How to Solve It 1


1.1 UNDERSTAND THE PROBLEM 3
A first problem: computing reading level 4
Functional abstraction 5
1.2 DESIGN AN ALGORITHM 6
Take it from the top 7
Pseudocode 10
Implement from the bottom 14
1.3 WRITE A PROGRAM 23
Welcome to the circus 23
What’s in a name? 28
Interactive computing 31
Looking ahead 32
1.4 LOOK BACK 36
Testing 37
Algorithm efficiency 39
1.5 SUMMARY AND FURTHER DISCOVERY 45

Chapter 2 ∎ Visualizing Abstraction 49


2.1 DATA ABSTRACTION 51
Turtle graphics 53
2.2 DRAWING FLOWERS AND PLOTTING EARTHQUAKES 55
Iteration 57
Tangent 2.1 Defining colors 60

v
vi • Contents

Data visualization 62
2.3 FUNCTIONAL ABSTRACTION 66
Function parameters 69
2.4 PROGRAMMING IN STYLE 77
Program structure 78
Documentation 79
Tangent 2.2 Global variables 80
Self-documenting code 83
2.5 A RETURN TO FUNCTIONS 87
The math module 88
Writing functions with return values 89
Return vs. print 92
2.6 SCOPE AND NAMESPACES 97
Local namespaces 98
The global namespace 101
2.7 SUMMARY AND FURTHER DISCOVERY 105

Chapter 3 ∎ Inside a Computer 107


3.1 COMPUTERS ARE DUMB 108
Tangent 3.1 High performance computing 109
Machine language 111
Tangent 3.2 Byte code 112
3.2 EVERYTHING IS BITS 112
Bits are switches 112
Bits can represent anything 113
Tangent 3.3 Hexadecimal notation 114
Computing with bits 114
3.3 COMPUTER ARITHMETIC 118
Limited precision 118
Tangent 3.4 Floating point notation 120
Error propagation 120
Division 121
Complex numbers 122
*3.4 BINARY ARITHMETIC ***
More limited precision

*
Sections with *** in lieu of a page number are available on the book website.
Contents • vii

Negative integers
Designing an adder
Implementing an adder
3.5 THE UNIVERSAL MACHINE 124
3.6 SUMMARY AND FURTHER DISCOVERY 126

Chapter 4 ∎ Growth and Decay 129


4.1 ACCUMULATORS 130
Managing a fishing pond 130
Measuring network value 136
Organizing a concert 139
4.2 DATA VISUALIZATION 150
4.3 CONDITIONAL ITERATION 155
When will the fish disappear? 155
When will your nest egg double? 157
*4.4 CONTINUOUS MODELS ***
Difference equations
Radiocarbon dating
Tradeoffs between accuracy and time
Simulating an epidemic
*4.5 NUMERICAL ANALYSIS ***
The harmonic series
Approximating π
Approximating square roots
4.6 SUMMING UP 161
Tangent 4.1 Triangular numbers 163
4.7 FURTHER DISCOVERY 164
*4.8 PROJECTS ***
4.1 Parasitic relationships
4.2 Financial calculators
4.3 Market penetration
4.4 Wolves and moose

Chapter 5 ∎ Forks in the Road 165


5.1 RANDOM WALKS 166
Tangent 5.1 Interval notation 167
One small step 167
viii • Contents

Monte Carlo simulation 171


*5.2 PSEUDORANDOM NUMBER GENERATORS ***
Implementation
Testing randomness
*5.3 SIMULATING PROBABILITY DISTRIBUTIONS ***
The central limit theorem
5.4 BACK TO BOOLEANS 180
Predicate functions 182
Short circuit evaluation 183
DeMorgan’s laws 184
Thinking inside the box 187
Many happy returns 192
5.5 DEFENSIVE PROGRAMMING 199
Checking parameters 199
Assertions 202
Unit testing 204
Tangent 5.2 Unit testing frameworks 205
Testing floats 207
Catching exceptions 207
5.6 GUESS MY NUMBER 210
Ending the game nicely 212
Friendly hints 213
A proper win/lose message 214
5.7 SUMMARY AND FURTHER DISCOVERY 219
*5.8 PROJECTS ***
5.1 The magic of polling
5.2 Escape!

Chapter 6 ∎ Text, Documents, and DNA 221


6.1 FIRST STEPS 222
Normalization 223
Tangent 6.1 Natural language processing 224
Tokenization 228
Creating your own module 232
Testing your module 233
6.2 TEXT DOCUMENTS 238
Contents • ix

Reading from text files 239


Writing to text files 242
Reading from the web 243
6.3 ENCODING STRINGS 246
Computing checksums 246
Unicode 247
Tangent 6.2 Compressing text files 250
Indexing and slicing 251
6.4 A CONCORDANCE 256
Finding a word 257
A concordance entry 262
A complete concordance 263
6.5 WORD FREQUENCY TRENDS 266
Finding the frequency of a word 268
Getting the frequencies in slices 269
Plotting the frequencies 270
6.6 COMPARING TEXTS 272
Dot plots 274
*6.7 TIME COMPLEXITY ***
Best case vs. worst case
Asymptotic time complexity
*6.8 COMPUTATIONAL GENOMICS ***
A genomics primer
Basic DNA analysis
Transforming sequences
Comparing sequences
Reading sequence files
6.9 SUMMARY AND FURTHER DISCOVERY 281
*6.10 PROJECTS ***
6.1 Polarized politics
6.2 Finding genes

Chapter 7 ∎ Data Analysis 285


7.1 SUMMARY STATISTICS 286
Mean and variance 286
Minimum and maximum 288
x • Contents

7.2 WRANGLING DATA 293


Smoothing data 294
A more efficient algorithm 295
Modifying lists in place 297
List operators and methods 302
*List comprehensions 305
Tangent 7.1 NumPy arrays 306
7.3 TALLYING FREQUENCIES 310
Word frequencies 310
Dictionaries 311
Tangent 7.2 Hash tables 315
Finding the most frequent word 315
Bigram frequencies 317
Tangent 7.3 Sentiment analysis 318
7.4 READING TABULAR DATA 325
Earthquakes 326
*7.5 DESIGNING EFFICIENT ALGORITHMS ***
Removing duplicates
A first algorithm
A more elegant algorithm
A more efficient algorithm
*7.6 LINEAR REGRESSION ***
*7.7 DATA CLUSTERING ***
Defining similarity
A simple example
Implementing k-means clustering
Locating bicycle safety programs
7.8 SUMMARY AND FURTHER DISCOVERY 333
Tangent 7.4 Privacy in the age of big data 334
*7.9 PROJECTS ***
7.1 Climate change
7.2 Does education influence unemployment?
7.3 Maximizing profit
7.4 Admissions
7.5 Preparing for a 100-year flood
7.6 Voting methods
Contents • xi

7.7 Heuristics for traveling salespeople

Chapter 8 ∎ Flatland 335


8.1 TABULAR DATA 335
Reading a table of temperatures 336
Tangent 8.1 Pandas 339
8.2 THE GAME OF LIFE 342
Creating a grid 344
Initial configurations 345
Surveying the neighborhood 346
Performing one pass 347
Tangent 8.2 NumPy arrays in two dimensions 349
Updating the grid 349
8.3 DIGITAL IMAGES 353
Colors 353
Tangent 8.3 Additive vs. subtractive color models 354
Image filters 355
Tangent 8.4 Image storage and compression 356
Transforming images 358
8.4 SUMMARY AND FURTHER DISCOVERY 363
*8.5 PROJECTS ***
8.1 Modeling segregation
8.2 Modeling ferromagnetism
8.3 Growing dendrites
8.4 Simulating an epidemic

Chapter 9 ∎ Self-similarity and Recursion 365


9.1 FRACTALS 365
Trees 367
Snowflakes 369
9.2 RECURSION AND ITERATION 375
Solving a problem recursively 379
Palindromes 380
Guessing passwords 382
9.3 THE MYTHICAL TOWER OF HANOI 388
*Is the end of the world nigh? 390
9.4 RECURSIVE LINEAR SEARCH 392
xii • Contents

*Efficiency of recursive linear search 393


9.5 DIVIDE AND CONQUER 396
Buy low, sell high 397
Navigating a maze 400
*9.6 LINDENMAYER SYSTEMS ***
Formal grammars
L-systems
Implementing L-systems
9.7 SUMMARY AND FURTHER DISCOVERY 405
*9.8 PROJECTS ***
9.1 Lindenmayer’s beautiful plants
9.2 Gerrymandering
9.3 Percolation

Chapter 10 ∎ Organizing Data 407


10.1 BINARY SEARCH 408
Tangent 10.1 Databases 409
Efficiency of iterative binary search 412
A spelling checker 414
Recursive binary search 415
*Efficiency of recursive binary search 416
10.2 SELECTION SORT 418
Implementing selection sort 419
Efficiency of selection sort 422
Querying data 423
10.3 INSERTION SORT 427
Implementing insertion sort 428
Efficiency of insertion sort 430
10.4 EFFICIENT SORTING 433
Merge sort 433
Internal vs. external sorting 437
Efficiency of merge sort 437
*10.5 TRACTABLE AND INTRACTABLE ALGORITHMS ***
Hard problems
10.6 SUMMARY AND FURTHER DISCOVERY 441
*10.7 PROJECTS ***
Contents • xiii

10.1 Creating a searchable database


10.2 Binary search trees

Chapter 11 ∎ Networks 443


11.1 MODELING WITH GRAPHS 444
Making friends 446
11.2 SHORTEST PATHS 451
Breadth-first search 451
Finding the actual paths 455
11.3 IT’S A SMALL WORLD. . . 458
Small world networks 458
Clustering coefficients 459
Scale-free networks 461
11.4 RANDOM GRAPHS 464
11.5 SUMMARY AND FURTHER DISCOVERY 467
*11.6 PROJECTS ***
11.1 Diffusion of ideas and influence
11.2 Slowing an epidemic
11.3 The Oracle of Bacon

Chapter 12 ∎ Object-oriented Design 469


12.1 SIMULATING AN EPIDEMIC 470
Object design 471
Person class 472
Augmenting the Person class 477
World class 479
The simulation 481
12.2 OPERATORS AND POLYMORPHISM 486
Designing a Pair ADT 487
Pair class 488
Arithmetic methods 489
Special methods 491
Comparison operators 493
Indexing 494
*12.3 A FLOCKING SIMULATION ***
The World
Boids
xiv • Contents

*12.4 A STACK ADT ***


Stack class
Reversing a string
Converting numbers to other bases
*12.5 A DICTIONARY ADT ***
Hash tables
Implementing a hash table
Indexing
ADTs vs. data structures
12.6 SUMMARY AND FURTHER DISCOVERY 499
*12.7 PROJECTS ***
12.1 Tracking GPS coordinates
12.2 Economic mobility
12.3 Slime mold aggregation
12.4 Boids in space

Bibliography 501

Appendix A ∎ Python Library Reference ***

Appendix B ∎ Selected Exercise Solutions ***

Index 505
Preface

I nthree
my view, an introductory computer science course should strive to accomplish
things. First, it should demonstrate to students how computing has become
a powerful mode of inquiry, and a vehicle of discovery, in a wide variety of disciplines.
This orientation is also inviting to students of the natural and social sciences, and the
humanities, who increasingly benefit from an introduction to computational thinking,
beyond the limited “black box” recipes often found in manuals and “Computing
for X” books. Second, the course should engage students in computational problem
solving, and lead them to discover the power of abstraction, efficiency, and data
organization in the design of their solutions. Third, the course should teach students
how to implement their solutions as computer programs. In learning how to program,
students more deeply learn the core principles, and experience the thrill of seeing
their solutions come to life.
Unlike most introductory computer science textbooks, which are organized around
programming language constructs, I deliberately lead with interdisciplinary problems
and techniques. This orientation is more interesting to a more diverse audience, and
more accurately reflects the role of programming in problem solving and discovery.
A computational discovery does not, of course, originate in a programming language
feature in search of an application. Rather, it starts with a compelling problem which
is modeled and solved algorithmically, by leveraging abstraction and prior experience
with similar problems. Only then is the solution implemented as a program.
Like most introductory computer science textbooks, I introduce programming skills
in an incremental fashion, and include many opportunities for students to practice
them. The topics in this book are arranged to ease students into computational
thinking, and encourage them to incrementally build on prior knowledge. Each
chapter focuses on a general class of problems that is tackled by new algorithmic
techniques and programming language features. My hope is that students will leave
the course, not only with strong programming skills, but with a set of problem
solving strategies and simulation techniques that they can apply in their future work,
whether or not they take another computer science course.
I use Python to introduce computer programming for two reasons. First, Python’s
intuitive syntax allows students to focus on interesting problems and powerful
principles, without unnecessary distractions. Learning how to think algorithmically
is hard enough without also having to struggle with a non-intuitive syntax. Second,
the expressiveness of Python (in particular, low-overhead lists and dictionaries)
expands tremendously the range of accessible problems in the introductory course.

xv
xvi • Preface

Teaching with Python over the last fifteen years has been a revelation; introductory
computer science has become fun again.

Changes in the second edition


In this comprehensive, cover-to-cover update, some sections were entirely rewritten
while others saw only minor revisions. Here are the highlights:

Problem solving The new first chapter, How to Solve It, sets the stage by focusing on
Polya’s elegant four-step problem solving process, adapted to a computational frame­
work. I introduce informal pseudocode, functional decomposition, hand-execution
with informal trace tables, and testing, practices that are now carried on throughout
the book. The introduction to Python (formally Chapter 2) is integrated into this
framework. Chapter 7, Designing Programs, from the first edition has been elimi­
nated, with that material spread out more naturally among Chapters 1, 5, and 6 in
the second edition.
Chapter 2, Visualizing Abstraction (based on the previous Chapter 3), elaborates on
the themes in Chapter 1, and their implementations in Python, introducing turtle
graphics, functions, and loops. The new Chapter 3, Inside a Computer (based on
the previous Sections 1.4 and 2.5), takes students on a brief excursion into the simple
principles underlying how computers work.

Online materials To reduce the size of the printed book, we have moved some
sections and all of the projects online. These sections are marked in the table of
contents with ***. Online materials are still indexed in the main book for convenience.

Exercises I’ve added exercises to most sections, bringing the total to about 750.
Solutions to exercises marked with an asterisk are available online for both students
and self-learners.

Digital humanities The interdisciplinary problems in the first edition were focused
primarily in the natural and social sciences. In this edition, especially in Chapters 1,
6, and 7, we have added new material on text analysis techniques commonly used in
the “digital humanities.”

Object-oriented design Chapter 12 begins with a new section to introduce object-


oriented design in a more concrete way through the development of an agent-based
simulation of a viral epidemic. The following sections flesh out more details on how
to implement polymorphic operators and collection classes.
Preface • xvii

Book website
Online materials for this book are available at

https://www.discoveringCS.net.
Here you will find

• additional “optional” sections, marked with an asterisk in the main text,


• over thirty interdisciplinary programming projects,
• solutions to selected exercises,
• programs and data files referenced in the text, exercises, and projects, and
• pointers for further exploration and links to additional documentation.

To students
Active learning Learning how to solve computational problems and implement
them as computer programs requires daily practice. Like an athlete, you will get
out of shape and fall behind quickly if you skip it. There are no shortcuts. Your
instructor is there to help, but he or she cannot do the work for you.
With this in mind, it is important that you type in and try the examples throughout
the text, and then go beyond them. Be curious! There are numbered “Reflection”
questions throughout the book that ask you to stop and think about, or apply,
something that you just read. Often, the question is answered in the book immediately
thereafter, so that you can check your understanding, but peeking ahead will rob
you of an important opportunity.

Further discovery There are many opportunities to delve into topics more deeply.
“Tangent” boxes scattered throughout the text briefly introduce related, but more
technical or applied, topics. For the most part, these are not strictly required to
understand what comes next, but I encourage you to read them anyway. In the
“Summary and Further Discovery” section of each chapter, you can find both a
high-level summary of the chapter and additional pointers to explore chapter topics
in more depth.

Exercises and projects At the end of most sections are several programming exercises
that ask you to further apply concepts from that section. Often, the exercises assume
that you have already worked through all of the examples in that section. Solutions
to the starred exercises are available on the book website. There are also more
involved projects available on the book website that challenge you to solve a variety
of interdisciplinary problems.

No prerequisites The book assumes no prior knowledge of computer science. How­


ever, it does assume a modest comfort with high school algebra. In optional sections,
xviii • Preface

trigonometry is occasionally mentioned, as is the idea of convergence to a limit, but


these are not relevant to understanding the main topics in the book.

Have fun! Programming and problem solving should be a fun, creative activity. I
hope that this book sparks your curiosity and love of learning, and that you enjoy
the journey as much as I have enjoyed writing this book.

To instructors
This book is appropriate for a traditional CS1 course for majors, a CS0 course for
non-majors (at a slower pace and omitting more material), or a targeted introductory
computing course for students in the natural sciences, social sciences, or humanities.
The approach is gentle and holistic, introducing programming concepts in the context
of interdisciplinary problems. We start with problem-solving, featuring pseudocode
and hand-execution with trace tables, and carry these techniques forward, especially
in the first half of the book.

Problem focus Most chapters begin with an interesting problem, and new concepts
and programming techniques are introduced in the context of solving it. As new
techniques are introduced, students are frequently challenged to re-solve old problems
in different ways. They are also encouraged to reuse their previous functions as
components in later programs.

Reflection questions, exercises, and projects “Reflection” questions are embedded


in every section to encourage active reading. These may also be assigned as “reading
questions” before class. The end-of-section exercises are appropriate for regular home­
work, and some more complex ones may form the basis of longer-term assignments.
The book website also hosts a few dozen interdisciplinary projects that students may
work on independently or in pairs over a longer time frame. I believe that projects
like these are crucial for students to develop both problem solving skills and an
appreciation for the many fascinating applications of computer science.

Additional instructor resources All of the reflection questions and exercises are
available to instructors as Jupyter notebooks. Solutions to all exercises and projects
are also available. Please visit the publisher’s website to request access.

Python coverage This book is not intended to be a Python manual. Some features
of the language were intentionally omitted because they would have muddled the core
problem solving focus or are not commonly found in other languages that students
may see in future CS courses (e.g., simultaneous swap, chained comparisons, zip,
enumerate in for loops).

Topic coverage There is more in this book than can be covered in a single semester,
giving instructors the opportunity to tailor the content to their particular situation
Preface • xix

Chapter 2 Chapter 3 Chapter 4


Chapter 1
Visualizing Inside a Growth and
How to Solve It
Abstraction Computer Decay

Chapter 6
Chapter 7 Chapter 5
Text, Documents,
Data Analysis Forks in the Road
and DNA

Chapter 9
Chapter 8 Chapter 10
Self-similarity and
Flatland Organizing Data
Recursion

Chapter 12
Chapter 11
Object-oriented
Networks
Design

Figure 1 An overview of chapter dependencies.

and interests. As illustrated in Figure 1, Chapters 1–7 form the core of the book, and
should be covered sequentially. The remaining chapters can be covered, partially or
entirely, at your discretion, although I would expect that most instructors will cover
at least parts of Chapters 8–10, and 12 if the course covers object-oriented design.
Chapter 11 introduces social network graphs and small-world and scale-free networks
as additional powerful applications of dictionaries, and may come any time after
Chapter 7. Sections marked with an asterisk are optional, in the sense that they are
not assumed for future sections in that chapter. When exercises and projects depend
on optional sections, they are also marked with an asterisk, and the dependency is
stated at the beginning of the project.

Chapter outlines The following tables provide brief overviews of what is available
in each chapter. Each table’s three columns, reflecting the three parts of the book’s
subtitle, provide three lenses through which to view the chapter.

1 How to Solve It
Sample problems Principles Programming
● reading level ● problems, input/output ● int, float, str types
● counting syllables, words ● functional abstraction ● arithmetic
● sphere volume ● functional decomposition ● assignment

● digital music ● top-down design ● variable names

● search engines ● bottom-up implementation ● calling built-in functions

● GPS devices ● algorithms and programs ● using strings

● phone trees ● pseudocode ● string operators

● wind chill ● names as references ● print and input

● compounding interest ● trace tables


● Mad Libs ● constant- vs. linear-time
xx • Preface

2 Visualizing Abstraction

Sample problems Principles Programming


● visualizing earthquakes ● using abstract data types ● using classes and objects
● drawing flowers ● creating functional ● turtle module
● random walks abstractions ● for loops (range and lists)
● ideal gas ● functional decomposition ● using and writing functions
● groundwater flow ● bottom-up implementation ● return vs. print

● demand functions ● turtle graphics ● namespaces and scope


● reading level ● trace tables with loops ● docstrings and comments
● self-documenting code
● program structure

3 Inside a Computer

Principles Programming
● computer organization ● int and float types
● machine language ● arithmetic errors
● binary representations ● true vs. floor division
● computer arithmetic
● finite precision, error propagation
● Boolean logic, truth tables, logic gates

● Turing machines, finite state machines

4 Growth and Decay

Sample problems Principles Programming


● population models ● accumulators ● for loops, range
● network value ● list accumulators ● format strings
● demand and profit ● data visualization ● matplotlib.pyplot

● loans and investing ● conditional iteration ● appending to lists


● bacterial growth ● classes of growth ● while loops
● radiocarbon dating ● continuous models
● epidemics (SIR, SIS) ● accuracy vs. time
● diffusion models ● numerical approximation

5 Forks in the Road


Sample problems Principles Programming
● random walks ● random number generators ● random module
● Monte Carlo simulation ● simulating probabilities ● if/elif/else
● guessing games ● flag variables ● comparison operators
● polling and ● using distributions ● Boolean operators

sampling ● DeMorgan’s laws ● short circuit evaluation

● particle escape ● defensive programming ● predicate functions


● pre- and post-conditions ● assert, isinstance

● unit testing ● catching exceptions


● histograms
● while loops
Preface • xxi

6 Text, Documents, and DNA


Sample problems Principles Programming
● text analysis ● functional decomposition ● str class and methods
● word frequency trends ● unit testing ● iterating over strings, lists
● checksums ● ASCII, Unicode ● indexing and slicing

● concordances ● linear-time algorithms ● iterating over indices


● dot plots, plagiarism ● time complexity ● creating a module
● congressional votes ● linear search ● text files and the web
● genomics ● string accumulators ● break
● nested loops

7 Data Analysis

Sample problems Principles Programming


● word, bigram frequencies ● histograms ● list class
● smoothing data ● hash tables ● indexing and slicing
● 100-year floods ● tabular data files ● list operators and methods
● traveling salesman ● efficient algorithm design ● reading CSV files
● meteorite sites ● linear regression ● modifying lists in place
● zebra migration ● k-means clustering ● list parameters
● tumor diagnosis ● heuristics ● tuples
● supply and demand ● list comprehensions
● voting methods ● dictionaries

8 Flatland
Sample problems Principles Programming
● earthquake data ● 2-D data ● lists of lists
● Game of Life ● cellular automata ● nested loops
● image filters ● digital images ● 2-D data in a dictionary

● racial segregation ● color models


● ferromagnetism
● dendrites
● epidemics
● tumor growth

9 Self-similarity and Recursion

Sample problems Principles Programming


● fractals ● self-similarity ● writing recursive functions
● cracking passwords ● recursion ● divide and conquer
● Tower of Hanoi ● linear search ● backtracking
● maximizing profit ● recurrence relations
● navigating a maze ● divide and conquer

● Lindenmayer systems ● depth-first search


● gerrymandering ● grammars
● percolation
xxii • Preface

10 Organizing Data

Sample problems Principles Programming


● spell check ● binary search ● nested loops
● querying data sets ● quadratic-time sorting ● writing recursive functions
● parallel lists
● merge sort
● recurrence relations

● intractability, P=NP?

11 Networks
Sample problems Principles Programming
● social media, web graphs ● graphs ● dictionaries
● diffusion of ideas ● adjacency list, matrix
● epidemics ● breadth-first search

● Oracle of Bacon ● queues


● shortest paths
● depth-first search
● small-world networks
● scale-free networks

● uniform random graphs

12 Object-oriented Design

Sample problems Principles Programming


● epidemic simulation ● abstract data types ● object-oriented design
● data sets ● encapsulation ● writing classes
● genomic sequences ● polymorphism ● special methods

● rational numbers ● data structures ● overriding operators


● flocking behavior ● stacks ● modules
● slime mold aggregation ● hash tables
● agent-based simulation
● swarm intelligence

Software assumptions
To follow along in this book and complete the exercises, you will need to have
installed Python 3.6 or later on your computer, and have access to IDLE or another
programming environment. The book also assumes that you have installed the
matplotlib.pyplot and numpy modules. The easiest way to get this software is to
install the free open source Anaconda distribution from http://www.anaconda.com.

Errata
While I (and my students) have ferreted out many errors, readers will inevitably find
more. You can find an up-to-date list of errata on the book website. If you find an error
in the text or have another suggestion, please let me know at havill@denison.edu.
Acknowledgments

In addition to those who provided their support and expertise for the first edition,
I wish to thank Janet Davis (Whitman College), Jim Deverick (The College of
William and Mary), David Goodwin (Denison University), and Ashwin Lall (Denison
University) for their valuable feedback on drafts of the second edition.
I would also like to thank Dee Ghiloni, Mary Lucas-Miller, and Tony Silveira for
their steadfast support, Mike Brady and my Data Analytics colleagues for reminding
me how much fun it can be to learn new things, and the Book Group for reminding
me to not take life too seriously. A Bowen Fellowship awarded by Denison University
gave me the time needed to complete this project.
Finally, my family has once again provided me with seemingly infinite patience and
love during this intensive period of writing. I am an extraordinarily lucky husband
and father.

xxiii
About the author

Jessen Havill is a Professor of Computer Science at Denison University. He has


been teaching courses across the computer science curriculum for almost thirty years,
and was awarded the College’s highest teaching honor, the Charles A. Brickman
Teaching Excellence Award, in 2013. Although his primary expertise is in the
development and analysis of online algorithms, Dr. Havill has spent many years
collaborating with colleagues across the curriculum to develop interdisciplinary
academic opportunities for students. From 2016–2019, he became the founding
Director of Denison University’s interdisciplinary Data Analytics program. Dr. Havill
earned his bachelor’s degree from Bucknell University and his Ph.D. in computer
science from The College of William and Mary.

xxv
CHAPTER 1

How to Solve It

We need to do away with the myth that computer science is about computers. Computer
science is no more about computers than astronomy is about telescopes, biology is about
microscopes or chemistry is about beakers and test tubes. Science is not about tools, it is
about how we use them and what we find out when we do.

Michael R. Fellows and Ian Parberry


Computing Research News (1993)

It has often been said that a person does not really understand something until after teaching
it to someone else. Actually a person does not really understand something until after
teaching it to a computer, i.e., expressing it as an algorithm.

Donald E. Knuth
American Scientist (1973)

C consciously
omputers now touch almost every facet of our daily lives, whether we are
aware of them or not. Computers have changed the way we learn,
communicate, shop, travel, receive healthcare, and entertain ourselves. They are
embedded in virtually everything, from major feats of engineering like airplanes,
spaceships, and factories to everyday items like microwaves, cameras, and tooth­
brushes. In addition, all of our critical infrastructure—utilities, transportation,
finance, communication, healthcare, law enforcement—relies upon computers.
Since computers are the most versatile tools ever invented, it should come as
no surprise that they are also employed throughout academia in the pursuit of
new knowledge. Social scientists use computational models to better understand
social networks, epidemics, population dynamics, markets, and auctions. Humanists
use computational tools to gain insight into literary trends, authorship of ancient
texts, and the macroscopic significance of historical records. Artists are increasingly
incorporating digital technologies into their compositions and performances. Natural

1
2 • 1 How to Solve It

Look back at
Understand the Design an Write a
your algorithm
problem algorithm program
and results

Figure 1.1 A simplified view of the problem solving process.

scientists use computers to collect and analyze immense quantities of data to


make discoveries in environmental science, genomics, particle physics, neuroscience,
pharmacology, and medicine.
But computers are neither productive nor consequential on their own. All of the
computers now driving civilization, for good or ill, were taught by humans. Computers
are amplifiers of human ingenuity. Without us, they are just dumb machines.
The goal of this book is to empower you to teach computers to solve problems and
make discoveries. Computational problem solving is a process that you will find both
familiar and new. We all solve problems every day and employ a variety of strategies
in doing so. Some of these strategies, like breaking big problems into smaller, more
manageable ones, are also fundamental to solving problems with a computer. Where
computational problem solving is different stems from computers’ lack of intellect
and intuition. Computers will only do what you tell them to and nothing more.
They cannot tolerate ambiguity or intuit your intentions. Computational problem
solving, by necessity, must be more precise and intentional than you may be used to.
The payoff though, paraphrasing Donald Knuth1 , is that teaching a computer to do
something can also dramatically deepen our understanding of that thing.
The problem solving process that we will outline in this chapter is inspired by How to
Solve It, a short book written by mathematician George Polya [50] in 1945. Polya’s
problem solving framework, having withstood the test of time, consists of four steps:

1. First, understand the problem. What is the unknown? What are the data?
What is the condition?
2. Second, devise a plan to solve the problem.
3. Third, carry out your plan, checking each step.
4. Fourth, look back. Check the result. Can you derive the result differently?

These four steps, with some modifications, can be applied just as well to compu­
tational problem solving, as illustrated in Figure 1.1. In the first step, we make

1
You can learn more about Donald Knuth at the end of this chapter.
Exploring the Variety of Random
Documents with Different Content
mint a májusi harmatcsepp, isteni forrása ezer boldogságoknak!
– Éljen a szabadság! A szabadságról beszél – kiáltá a fiatal
ember, a ki az előbb szónokolt.
Elemér gróf pedig folytatá:
– Jaj nekem, hogy többé föl nem támaszthatom! Jaj nekem,
legnyomorultabbnak, hogy csak boszura hívtalak benneteket, gyilkos
boszura, e borzasztó temetés után.
– Mert ez a világ – folytatá Elemér lázas sebességgel – ez a világ
termő földje mindennek a mi gonosz, a mi cudar, a mi gyalázatos; és
a jó, az igaz, a hű csak arra van itt, hogy áruló módon eltiportassék.
Itt a kezemben lebegtetem az igazságok könyvének egy kiszakított
lapját. Az elgázolt, vérbefojtott ártatlanság gyilkos története van reá
írva. Meghalt a ki írta, halálé, a ki olvasta. És a halál az a rév, a hol a
gyilkos meg az áldozat egy csónakba ülnek és leeveznek az
örökkévalóság tengerén. Rajta, rajta, ragadjatok fáklyát, ragadjatok
kést, ragadjatok gyilkot és töltsétek el a világot rémes üvöltéssel. A
halál a szabadság: töltsétek el a világot szabadsággal, hadd pihenjen
a ki fáradt.
Iszonyú zaj töltötte el a levegőt, a nép ittasodva fogadta az
érthetetlen szókat, melyeknek képei alatt mindenki azt értette, a mit
maga gondolt. Elemér pedig beszélt tovább a zsarnokokról, a
hatalmakról, a szabadságról, az ő halottjáról és rémesen lobogtatta
hozzá Pipiske levelét. Nem vette észre, hogy egyszerre csak
megmozdul előtte a tömeg, hogy az utcai zaj elfojtja az ő szavát,
hogy a nép jajgat és futni kezd, hogy az egyik utcasarkon fehér
kabátos katonák sorfala tünik fel, mely a népre indul, majd
visszavetődik, most parancsra vár, tűzre kapja fegyverét és iszonyú
ropogás, majd jajveszékelés tölti el a levegőt.
A fáklyák eltünnek, a nép észnélküli futásnak indul, a katonaság
szuronyszegezve söpri végig a csatakos utcát.
Egy félóra mulva csöndes, néptelen, tisztára söpörve volt az utca.
Elemér gróf pedig ott feküdt ájultan a pamlagon, mellén a veres
levéllel, mellében egy puskagolyóval, mely az ablakból leterítette
volt…
Kandallójában pattogott a tűz mint az előtt, inasa s egy orvos
pedig ápolták a fiatal embert, kinek görcsösen összeszorított kezéből
nem voltak képesek kivenni Pipiske levelét.
XXVI. FEJEZET.
(A bolondok.)

Nyolcan ülének ezúttal együtt egy középszerűen bútorozott elég


terjedelmes pince-szobában. A nyolc közül egyiknek volt lakása e
szoba. Egy ágy, egy szekrény, egy jó nagy asztal, egy másik kisebb
asztal, egy állvány, megrakva könyvekkel, diván, töltött székek és
nádszékek: ez volt a szobában nagyobb gond és rend nélkül
elhelyezve.
A nyolc fiatal ember, ki itt, ki ott ült, nagyobb része a nagy asztal
körül, Csongor Béla az asztalfőn mint elnök, tőle balkézről egy
jegyző, vele szemben a pap, az asztal körül többen, kiket a
kávéforrásból ismerünk. A kis asztalon thea-készülék volt elhelyezve,
mindennel fölszerelve, csak a spirituszt kellett alája gyújtani.
Pipa és szivar nem hiányzott az asztalokról.
Az egyik szögletben egy pléhkályhában égett a tűz dübörögve. A
falak nem voltak kifogástalanok, a padló szintén mutatott hiányokat.
Az ajtó egy folyosóra nyilt, melyből lépcső szolgált az udvarra. Az
ajtó előtt a padlóba belül a szobában egy négyszögletes erős
vaslemez volt illesztve, maradványa tán olyan időnek, midőn ezt a
helyiséget más célra használták. A szoba két ablaka az utcára nyilt,
de vasrácscsal és vastáblákkal volt ellátva, melyek ezúttal gondosan
be voltak rakva.
A fiatal emberek társasága, mely magát a «Bolondok társaságá»-
nak veszélytelen címével tisztelte meg, heti ülését ezúttal e szobában
tartotta. Midőn mi átlépjük küszöbjüket, a tanácskozás előkészítésén
túl vannak, s épen tárgyuk fölvételéhez látnak.
– Napirendünk mai tárgya, – szól az elnök, – általános nézetek a
társaság föladatai körül s különösen működése megkezdésének és
folytatásának voltaképeni mezeje. Két nézet harcol itt egymás ellen,
s minthogy eljárásunk sikere az egységes munkát legjobban
megkívánja, a két nézet közül az egyiket győztessé kell tennünk, s
magunkat alája rendelnünk annak, a melyiket többséggel
helyesebbnek nyilvánítunk. A társaság két jeles tagja tehát utolsó
határozatunkhoz képest ma elejbénk fogja terjeszteni a
munkálatokat, a melyek tanácskozásunkhoz az anyagot adják. Az
egyik munkálat azt a nézetet vitatja, hogy az ország különféle
nemzetiségeinek megmagyarosítása az első teendő, s hogy
működésünk első és közvetlen mezeje ez. A másik munkálat azt
bizonyítja, hogy az ország tökéletes megmagyarosításának nagy
művét nem az idegen ajkú nemzetiségeken, hanem magán a
magyaron kell kezdeni. Világos, hogy bármelyik itéltessék is
helyesnek a két nézet közül, mindenik más-más eszközöket, más-
más intézkedéseket teszen szükségessé. Kivánatos tehát, hogy e
dolog körül tisztába jöjjünk, hogy munkánk sikere biztosabb legyen.
Felszólítom ennélfogva először is Szombathelyi István társunkat
nézeteinek előadására.
A felszólított fiatal ember feláll. – Tisztelt társaság, – így kezd
szólni, – midőn abban a megtisztelő megbizásban részesültem, hogy
e nagyfontosságú tárgyban egyik előadói tisztre meghivattam,
kötelességemmé lett az elejbém tett kérdés minden oldalának bő és
alapos megfontolása. Ebbeli lelkiismeretes munkám folytán arra a
meggyőződésre jutottam, hogy a két felfogást, a mely itt harcban
van, nem szabad, sőt nem is lehet ily merev szembeállítás által
egymástól teljesen elválasztani. Hiszen feladatunk kiválóképen a
gyakorlati életet teszi működésünk terévé s a gyakorlati élet, ha nem
mindig zárja is ki, de csak ritkán mutatja tanácsosnak egyes
elveknek tiszta, keverék nélküli alkalmazását. Alku és megszorítás
tárgya lesz ott hamar minden, a hol az ember az élet nehézségeivel
kénytelen számolni s gyakorlati eredményeket kiván munkája után. A
társadalom különféleségei ugyanazon elvnek más-más alkalmazását
parancsolják, s az ország ethnografikus helyzete nem egyedül szabja
elejbénk az alkalmazás módjait. Semmi sem volna könnyebb, mint
egy hasonlattal a vegyészet teréről minden kétségen kívülivé tennem
az eljárásnak azt a módját, melyet ajánlani és képviselni van
szerencsém. Mert hiszen, ha valamely folyadékot valamely színre
festeni akarunk, nem-e a festőanyagnak intenziv erejétől függ
munkánk jobb sikere? Egy csepp kitünő festőanyag tízszer annyi
vizet megfest, mint tíz csepp gyengébb erejű anyag. Magától
kinálkozik tehát a belátásra az, hogy, ha Magyarországot
nemzetiségünk szinére akarjuk festeni, saját nemzetiségünk festő
erejét és hogy tárgyamnak megfelelő s nem képleges szót
használjak, azonosító képességét a lehetőségig fokozzuk. E
nemzetiség erkölcsi, intellektuális és anyagi érdekeinek kell tehát
predominálni ama nemzeti hatalom intézkedéseiben, mely e haza
sorsát kezébe veszi. A történet, a meddig csak visszavihető irott és
hagyománybeli források nyomán, azt tanítja, hogy e téreken
államalkotó szervezetet csak a magyar nemzet volt képes tartósan
alkotni. Semmi más fajnak rendezett állami életet fentartania itt nem
sikerült. Minden barátja tehát a rendezett és biztos államéletnek
józanul pártolni kénytelen az itt egyedül életképesnek bizonyult
magyar állameszmét. Ebből logikailag folyik, hogy csatlakoznia kell a
magyar nemzeti törekvésekhez, csatlakoznia az irányhoz, mely
számításait a magyar fajra fekteti. A ki ezt ignorálja, vagy épen
elnyomni oktalan, azt mesterséges hatalom ideig-óráig fentarthatja,
de viszonyok természetes folyományai hovahamarább porba döntik.
Ha tehát, a mi bizonyos és csak rövid idő kérdése, újra eljön e
nemzet szabadságának napja, a nemzeti kormány a béke, a
biztosság, az erkölcs és a józan politikai számítás érdekében
egyaránt csak arra irányozhatja figyelmét, tevékenysége céljául csak
és kizárólag csak azt tűzheti ki, hogy a magyar elem, a magyar faj
mindennemű érdekei fölemeltessenek. Felfokoztatván e faj szellemi
és anyagi ereje, minden további következmény önmagától fog
beállani. A magyar városok gazdagságban és kulturában
emelkedvén, fölöslegük mint a gőzkazánban a feszülő elem, rést fog
keresni és szét fog áradni e hazában egyfelől; másfelől mint példa és
tekintély hódítani fog a szellemekben. Vágyak, ambiciók forrása lesz
a vezérlő elemnek ilyetén tündöklése s ellenállhatlanul fog vonzani. A
lélek, az erő, az anyagi s a szellemi hatalom: ezek lesznek hódító
katonái ez iránynak; a hír jár előttük s utánuk és az erkölcsi hatás
rövid idő alatt nagyobb munkát fog végezni az elkapott kedélyekben,
mint akármely rendelet és erőszakos intézkedés, a minek a jelen
időben is intő példáit látjuk.
És itt van helyén áttérnem arra a pontra, a hol a két rendszer
találkozik. Mert ha nagy eredményt csakis attól a módszertől várok,
ha a magyar faj emelését tesszük politikánk vezérlő elvévé, mégis
vannak a harctérnek pontjai, a hol a másik módszert nem szabad
elhanyagolni, de sőt a hol abban minden mulasztás pótolhatlan
veszteséggel járna.
Ilyen pont mindenekfelett a polyglott főváros, első gondja egy
modern államnak. A fővárossal szemben haladéktalanul mindent
eszközt meg kell ragadnia a nemzeti kormánynak lakosainak
megmagyarosítására s minden eszközt egyszerre. Ha már nem oly
szerencsés ez ország, hogy nemzetiségére nézve egy teljesen
magyar fővárosa legyen s nagy nemzeti céljainak elérésére nemcsak,
hogy nélkülözi ezt a megmérhetlen hatású tényezőt, de sőt meglévő
erőinek egy részét, épen ennek a fővárosnak megmagyarosítása
veszi igénybe: akkor ez csak arra ok, hogy szemben a fővárossal e
téren a legerélyesebb munkára sarkaljon bennünket. Az államnak
kötelessége kezét tenni az iskolákra, templomokra, szinházakra s a
törvénykezésre. Imádkozni, tanulni, mulatni s igazságot keresni
nyilvánosan csak magyarul lehessen. És ha minden próba kimerülte
után az ország fővárosának minden rétegét ötven év alatt a
magyarság át nem hatotta, akkor a magyar nemzetre az a roppant
és keserű feladat vár, hogy egy második és pedig tősgyökeres
magyar fővárost teremtsen az országnak, mely bizonyos tekintetben
csak gyenge versenytársa lesz a kereskedelmi Pestnek, de mint a
magyar kormány, az országgyűlés, az egyetemek, a főbíróságok,
tudós társaságok és irodalom székhelye, a magyar nemzeti
kulturának fészke és tűzhelye leszen s teljesíti a feladatot, a melyre a
főváros a nemzeti életben hivatva van.
De ez eshetőség be nem fog állani.
Egy szebb jövő szózata hallik máris a tovazúgó idő szárnyainak
verődésében. A most fennálló, a történelem tanulságait megtagadó s
azért természettelen helyzet, mint a csúcsára állított pyramis saját
terhétől talpra fordul s eltemeti azokat, kik a súly törvényeivel
ellenkező állásában gyenge vállukkal támogatják. A mi időnk közelg,
reményeink, terveink, kötelességeink teljesítésének hajnala már a
hegyek mögött várja hasadását! Ajánlom a tisztelt társaságnak a
fővárosra nézve ellenfelem tervét, az ország többi részeire nézve az
általam indítványozott módszer elfogadását.
A mint a szónokló fiatal ember társai éljenzése közben leült s a
szobában csend lett, a társaság megdöbbenve kezdett figyelni.
Tompa kiabálás, futó emberek nehéz lépteinek zaja hallatszott le az
utcáról a szobába.
– Talán tűz van! – mond Csongor Béla s fölemelkedik székéről.
A társaság indulna kifelé, midőn az ajtó feltárul s a házmester
ijedt arca jelen meg a nyiláson.
– Kérem urak, a belvárosban forradalom van, lövöldöznek, tessék
haza menni, becsukom a kaput.
A fiatal emberek összenéztek, kalapjuk után nyúltak s indultak a
házmester nyomában.
Hárman maradtak vissza: Csongor Béla, Virág Bence és Gyalóky
Béni, a szoba lakója. Bezárkóztak barátságos beszélgetésre és
vacsorára.
A belvárosi forradalom csak kevéssé érdekelte őket.
Alapszabályaik egyik pontja volt, hogy erőszakos mozgalomban részt
nem vesznek; a ki pedig ilyenkor a tömegben találtatik, attól se a
golyó, se a katona nem kérdi, mi szándékkal van ott. Jobbnak látták
egymás társaságában tölteni az estét s ha kell az éjszakát.
Üldögéltek, beszélgettek, theáztak és falatoztak tehát, a midőn
egyszerre halk kopogás vonta magára figyelmöket.
Összenéztek, mintegy egymástól kérdezve, mi ez?
Se az ajtó, se az ablak nem volt, a min kopogtattak. Nem is
rendes kopogás volt, inkább szabálytalan kotomozás.
– Úgy látszik, – mond tréfásan az egyik, – a forradalom nem is
annyira a belvárosban, mint inkább a föld alatt van!
– És csakugyan, mintha onnan, az ajtó előtti vaslemez alul jönne!
– mond Béla.
– Mi van az alatt a fedő alatt? – kérdi Bence.
– Biz én alig tudom, pince, csatorna, vagy legalkalmasabban
vízfogó, – mond a szoba gazdája. – Én bizony még soha csak meg
se néztem!
– Alkalmasint megszorult patkányok lesznek.
– Bajosan, mert különben máskor is kellett volna már
jelentkezniök.
– Az is igaz. Hallgassuk csak! mintha ütések volnának! Valamely
szomszéd pincében dolgoznak talán.
– Végre megnézhetjük, – mond Béni, a gazda; – csak a
pléhszedőt kell fölemelnünk!
– Próbáljuk meg, – mond egyszerre a másik kettő s a három
fiatal ember csakugyan neki áll feszegetni a vaslemezt.
Nem kis munka volt megmozdítani s kiemelni a berozsdásodott
vasat, de a mint el volt távolítva, az ütések csakugyan világosabban
hangzottak.
Béla kezébe vette a lámpást s belevilágított az üregbe, mely egy
nem épen tágas vízfogó volt, mintegy bokáig érő vízmennyiséggel a
fenekén.
De a zaj hirtelen megszünt. Csend és nyugalom volt az üregben,
a víz tükre is teljesen zavartalan volt s mutatta, hogy benne se
patkány, se más lény ezúttal nem gázolt.
A házigazda letérdelt a földre s az üreg fölé hajolva, kissé
beeresztette a fejét.
– Hejhó! – kiáltá, – ki az?
Senki sem felelt. Csendesség lett az üregben s a fiatal emberek is
némán hallgatóztak egy darabig.
– Valakinek vagy valaminek pedig kell itt lennie, – mond végre
Béla, – mert zaját tisztán hallottuk.
– Megesik, hogy tolvajok, a kiket merész vállalatukban
megzavartunk.
– Olyan bolond tolvaj aligha van Pesten, a ki ennyi fáradsággal
ide jöjjön lopni!
Ez a beszélgetés suttogva folyt s most ismét félbeszakadt egy kis
zaj, valamely törmelék hullása miatt, mely a víz tükrén is karikákat
hajtott.
– Csendesen, – mond Béla súgva, – látogatónk ismét jelentkezik,
– s hátrább vitte a lámpát az üreg nyilásától.
A mint a három fiatal ember lélekzetfojtva hallgatózott, szemmel
tartván a homályba borult nyílást, a zaj élénkebb lett, tompa ütések
vegyültek bele és a törmelék szaporábban hullott a vízbe.
– Valaki falat bont, – susogja Béni, – várjuk be, mi lesz a
dologból.
E pillanatban élénk robaj és nagy locsogás támad az üregben.
Béla hirtelen eloltja a lámpát s kezébe veszi a gyujtótartót, hogy a
szükséges pillanatban ismét világot gyújthasson.
A vízfogóból olyan zaj hallik, mint mikor valaki egy szűk nyíláson
nagy ügygyel-bajjal keresztül bújik: ruhája surlódásának a zaja. Ezt
lábak tapicskálása vízben, tapogatózás és szuszogás követi.
Fiatal embereink egymást sem látták a sötétben s izgatottan
várták a világosságot. Addig is fülhegyezve lesték a zajt s abból
iparkodtak magoknak itéletet formálni a titkos földalatti látogatás
mivoltáról.
Tisztán lehetett egy lény erős lélekzését hallani, úgyszintén az
üreg nyílása körül kezek tapogatózását, míg a lábak zaja csak
csobogás volt. Világos, a földalatti vándor megtalálta a nyílást, feje
már a szobában van.
E pillanatban Béla meghúzta sercegve a gyújtót s a szoba világos
lett.
A három fiatal ember álmélkodva látja egy tüskés szakállú fiatal
ember fejét a nyíláson. Paraszt ruhája tele maszattal, keze, arca,
haja piszoktól, pókhálótól éktelen, félkezében egy törött ágyláb,
szerszámnak vagy fegyvernek: a mint a dolga fordul.
– Ki vagy, mit akarsz? – kérdi a három fiatal ember egyszerre.
– Hol vagyok? – kérdi viszont a csodálatos jövevény fáradtan
körülnézve.
– Mit keressz? Hol jársz a föld alatt, mi a szándokod? – kérdi újra
Béni. – Nálam vagy a lakásomon, ha rossz szándékkal nem jössz és
tisztességes ember vagy, akkor biztos helyen is vagy. Mi a neved?
A jövevény hallgatott, mintegy tanácsba szállva magával, aztán
fölnézett a fiatalokra, egyikre a másik után s így szólt:
– Tisztességes ember vagyok, semmi rossz szándékom nincsen,
többet nem mondhatok hazugság nélkül. Bajban vagyok, ha önök
nem segítenek rajtam, nincs más módom, mint újra a föld alá bújni,
más kijárót keresni, vagy ott veszni el ebben a borzasztó
útvesztőben, melyben már nem tudom, hány napja bolyongok.
A fiatal emberek összenéztek. Ez a paraszt nem paraszt.
– Honnan jöszsz, mint kerültél a föld alá?
– Kérem önöket, ne faggassanak kérdésekkel. Szerencsétlen
ember vagyok, ki szeretnék rettentő helyzetemből szabadulni: azt
kell csak tudnom, kiknek a kezébe adott a sorsom. Ha ellenségeim,
üssenek agyon vagy ereszszenek tovább; ha pedig van egy
szerencsétlen ember iránt szánakozás a szívökben, mentsenek ki.
– Mi senkinek sem vagyunk ellenségei. Ha ön tolvaj vagy gyilkos,
akkor tőlünk segítséget ne várjon, ha csak szerencsétlen, a ki a
segítő kezet megérdemli, akkor jó sorsa hozta közibénk.
E szavakra, melyeket Béla mondott, a jövevény belekapaszkodott
a nyílás széleibe, egyet rúgott magán s a szobában termett. Ruhája,
csizmája, mindene egy csatakos volt és undok bűzzel töltötte el a
levegőt.
– Kérek egy ital vizet, kérek egy falat ételt, kérek az isten
irgalmáért valamely ruhát. Ha megszabadulok, mindent gazdagon
meghálálhatok. Börtönből szöktem meg, menekült vagyok, tegyék
velem, a mi a szívökre fér.
És Viknyédy, mert ő volt, a fiatal emberek kérdéseire elmondta
merész szökését. A fiatalok theát és enni valót adtak neki, ő pedig
lehányta magáról a piszkos ruhát s beledobálta a vízfogó verembe,
mely még nyitva volt. A házigazda ellátta őt friss ruhával, mert hisz
egy darab a régiből nem volt rajta száraz.
– Tessék, – mondá vetkőzés közben, – át vagyok ázva bőrig. Itt
van ni, – s egy rongyos viaszkos vászonba takart csomagot vett ki
kebléből, – az én egyik jótevőm, a halott pap hagyatéka is oda van.
Tessék kérem addig átvenni, majd a kályhán megszárogassuk, s
odanyújtá Bélának a csomagot, ki, a míg a másik két fiatal ember
Viknyédit mosdatta, tisztogatta s öltöztette, a csomagot kezdte
törülgetni s szárogatni.
A mint Viknyédy ki volt tisztogatva, fel volt öltöztetve, a négy
fiatal emberhez egy ötödik szegődött: a jó kedv. Ettek, ittak,
beszélgettek (hiszen beszélni ugyan volt mit, kivált Viknyédynek), s
megismerkedvén, egy félóra alatt meg is szerették egymást.
Béla pedig a kályhánál folyton s óvatosan szárítgatta a csomagot,
a melyet Viknyédy az öreg Egeressi holtteste alul a koporsóból kivett.
XXVII. FEJEZET.
(Ismét kopogás.)

A még fiatal ember csakhamar igen jól érezte magát Béni


lakásán. Akár ott is virradt volna meg. Viknyédyé volt persze a szó, s
ez a szerencsés kedélyű ember csakhamar feltalálta és ragyogtatta
eredeti szeretetreméltó tulajdonságait. Elmés volt, beszédes és
természetes, hajmeresztő kalandjairól dicsekvés nélkül beszélt.
Könnyelműsége játszva vitte bele a legmerészebb dologba s mikor
elbeszélte élményeit, ez a könnyelműség takarta kellemesen rémes
fordulatait. Neki magának is mulatság volt a dolog s elbeszélése
humorosan volt fűszerezve. A mint túl volt egy-egy veszedelmen, az
már elbeszéléseiben nem mint veszedelem szerepelt, hanem «mint
bolondság», s a készség is meg volt ismét benne, bármely újabb
bolondságba vakon bele rohanni. Mintha csak foglalatossága lett
volna, folyton épségével és életével játszani. A mint más ember
szivarra gyújt, úgy kezdett ő egy-egy nyaktörő vállalatba.
A három fiatal ember, kinek vendége lett, komoly és higgadt
természet volt ugyan, de Viknyédy kedélyének és természetének
varázsa ő reájok is ellenállhatlanul hatott, s a mint bolyongásait a
föld alatt elbeszélte, kis híja, hogy kedvök nem kerekedett egy sétára
a föld alatti város tekervényes utcáin patkány, egér és más férgek e
süppedékes, piszkos országútján.
Kedélyes beszélgetésében ismét halk kopogás zavarta meg a
fiatal embereket. A kopogás ezúttal az ablakon szólt. Béni kinyitá a
vastáblát, majd az ablakot, melyen egy 12–14 éves fiú arcza
kandikált be.
– Itt van még Csongor Béla úr?
– Itt van, mit akarsz?
– A házmester fia vagyok onnan. Ezt a cédulát kell átadnom.
S ezzel bedobott egy kis papirdarabot s tovább szaladt.
A papirt fölvették, elolvasták.
Kezdetleges irással a következő sorok voltak ráirva:
«Csongor Béla úrnak! A rendőrség keresi önt lakásán. Ne jöjjön
haza, rejtőzzék el. Irásait összeszedik. Azt beszélik, sok elfogatás
lesz még az éjjel, összeesküvésnek jöttek a nyomára.»
– Ha nem csalatkozom, a házmesterem irása, – mond Béla.
– Keresnek, – szól Bence, – téged, hát meg vannak ezek már
bolondulva.
– Összeesküvés, – mond Béni. – Összeesküvés. Hogy jössz te
ahhoz?
– Mint Pilátus a krédoba.
– Megfoghatatlan.
– Sőt épen természetes. A nyúl minden bokorban vadászt, a
gonosztevő poroszlót lát. A ki aztán mind a kettő egy személyben,
nyúl is meg –
– Gonosztevő is –
– Az, ha egyszer megijed, kapkod vakon maga körül –
– És ebben van a dolog veszedelme, – mond Béla. Mit kell most
tenni?
– Itt maradni, várni. Itt jó helyen vagyunk.
– Csakhogy végig itt se maradhatunk.
– Egy elfogatás veszélyének ki nem teheted magadat. A kit
egyszer elfognak s betesznek valahová, az aztán ha bűnös, ha nem
bűnös, az isten irgalmára van bízva. Lehet, kiszabadul, de mikor!
– No most már sorsosok volnánk, – mond Béla Viknyédyhez
fordulva, ki némán hallgatta a fiatal emberek tanácskozását.
Viknyédy komoly lett. Ha őt jönnek üldözni, tán nevetve vett
volna búcsút, hogy tovább kisértsen szerencsét. De a mi rá nézve
semmi, az ezekre a komoly, munkás fiatal emberekre nézve nagy
dolog. Ő tudja mit tesz az, zár alá kerülni.
– Nem örvendek rajta, – mond Bélának. Önnek más dolga van,
mint kopók előtt szaladni.
– De végre is szaladni kell.
– Legalább is tanácsos.
– Csak az összefüggést tudnám a dologban. Sejtelmem sincs
róla, miféle összeesküvésben vagyok részes.
– Az összeesküvésről nekem alkalmasint van tudomásom, –
mond Viknyédy. Nyilván az én levelem került a rendőrség kezébe s a
szerint nyomozzák a békételeneket. De ott ön aligha fordul elő,
legalább névszerint.
– Magam is bajjal hiszem.
– Végre is, még egy egész éjjel van előttünk a tanácskozásra.
– Csendesen, az utcán valamit hallok!
És a fiatal emberek hallgatózni kezdtek.
Több ember rendes léptének zaját adta le a kövezet.
Ez katonaság!
És erre közeledik. Most megáll a ház előtt. Most valaki meghúzza
a csöngetyűt. Nem bizonyos, de valószinű, hogy Bélát keresik. Igen,
igen, hiszen egyik társa számára a lakásán egy cédulát hagyott
hátra, melyen meg volt írva, hogy az estét itt töltik Béni lakásán.
Tehát kétséget nem szenved: Bélát elfogni jött el idáig a
katonaság.
Most mit kell tenni? – Menekülni? – De merre? – Börtönbe menni,
egy bizonytalan sors elé?
– Igen, de hát Viknyédy? – ő is elfogassa magát? – S az ő ittléte
nem komplikálja-e a fiatal emberek helyzetét? –
A kapu nyilik: – a fiatal embereknek határozniok kell, és
határoznak is.
Meg vannak győződve, hogy az első ijedtségen túl a kormány
hangulata is más lesz. Tehát ez első ijedtség elül kell kitérni.
S a menekülő?
Ott van a patkányok országútja, még most is nyitva a fedele.
Viknyédy borzasztónak találta, mikor maga gázolt benne végig:
most szinte dobog belé a szíve, mikor arról van szó, hogy többen
menjenek.
De a házigazdának itthon kell maradnia. Azért is, hogy a gyanut
lehetőleg elhárítsa, azért is, hogy a pléhajtót betegye.
A fiatalok egymásután ugrálnak a víztartó sikátorba. Elül
Viknyédy, utána Bence, Bence után Béla.
Béni egy isten hozzátokat rebeg utánuk, s két kézre fogja a
vaslemezt, hogy rá tegye.
Ekkor kiált vissza Viknyédy:
– Héhé, a csomagom!
Béni leadja Bélának, Béla e szóval: «meg van!» zsebre teszi és az
ajtó felettük bezárul. Benne vannak térdig a vízben, fejig a
sötétségben. Egymást tapogatják s óvatosan kúsznak át a résen,
melyet Viknyédy a falon ütött volt. A résen túl egy pillanatra
megállanak, s hallgatóznak.
Béni ajtaján dörömbölnek a törvény nevében. Béni lomhán,
ingujjban, nagy pipával a szájában fogadja a katonai segédlettel
jelentkező rendőrséget.
– Csongor Béla?
– Nincs itt.
– Itt volt?
– Itt volt.
– Mikor ment el?
– Azt a házmester jobban tudja.
– És más sincsen itt?
– Más sincs itt.
– De gyűlés volt e szobában?
– Az volt.
A rendőrség int s emberei a kutatáshoz fognak.
– A padló piszkos,
– Biz az piszkos.
– De nagyon piszkos.
– Biz az nagyon piszkos.
– Mitől olyan piszkos?
– Tetszik tudni, hogy itt gyűlés volt, többen jártak itt, ott künn
pedig nagy a sár.
– Hát ez a vasajtó hova szolgál?
– Biz én még nem néztem meg. A házmester jobban fogja tudni.
– Vízfogó kérem ássan, – mond fogvacogva a házmester.
– Tessék megnézni, – mond Béni. A katona urak kevés erővel azt
hiszem fölnyithatják.
És fölnyitották.
– Iszapos víz; rongy darabok félig megrothadva látszanak ki
belőle. A ciszterna üres, – mond a rendőr, aztán hozzá teszi:
– Nyitva kell hagyni –
– De bocsánat, ez az én szállásom –
– Önnek más szállást fogunk adni.
– Köszönöm szépen, – mond Béni. Most mindjárt?
– Azonnal. Kövessen. Két ember itt marad a szobában, kettő a
kaput őrizni. Egy kettő, fél jobb.
S rendőr, katonaság, a két őr kivételével, valamint Béni is,
elhagyták a szobát.
XXVIII. FEJEZET.
(A hangyás ember.)

Egy földalatti homokbarlangban elmerengve gubbaszt egy


elkényszeredett emberi alak. Alája pokróc van terítve a puszta földre.
Világosságnak sehol a barlangba bejárója nincsen. Egy szegényes
olajlámpa vet kétes világosságot a merengő emberre, a ki a barlang
közepén nyüzsgő óriási hangyabolyra szegzi vörös karimáju szemeit,
s míg jobbjában egy kis pálcát tart, melylyel meg-megbolygatja a
fürge hangyanépet, addig baljával a mellette kosárban lévő
eleségből – összedarabolt patkányhús lisztbe, mézbe hempergetve –
eteti furcsa háziállatait, melyek sürögnek-forognak körülötte, botjára,
kezére másznak s vidáman lakomáznak a nyújtott eledelen.
Éveire nézve ez ember az ötven-hatvan közt van, de szemre
sokkal öregebb. Koponyája kopasz, csak a kupája kerületiben van
egy csomó gubancos haja. Két füle messze eláll a fejétől, mintha
folyton hallgatóznék, arca szine a fakónak s a sárgának bizonytalan
vegyületét mutatja; bajusza, szakálla már gyér és szinehagyott, már
nem szőke és még sem fehér, szine alig különbözik arcabőrétől s
csak árnyéka segítségétől sötétebb, mint ez a kicserzett bőr. Alkatra
az egész ember gyengés, vézna, de ha mozdul, erőt és könnyüséget
mutat. Ruhája nem csak jobb, mint az ember, a helyhez képest, a
hol látja, gondolná, hanem valósággal is jó, alkalmatos, puha,
simulékony kelméből való, s ha nincs is épen gazdájára szabva,
tisztességesen áll mégis rajta.
Figyelmét emberünknek teljesen igénybe veszi hangya-csordája.
Söpri, marékba veszi az izgékony állatkákat, melyeknek foszfor-
illatjától a köhögtetésig meg van terhelve a barlang levegője;
beszélget hozzájok, nevetgél, pöröl, majd egy kis dalt dúdol nekik,
mely körülbelül ekép szól:

Hangya, hangya, mit csinálsz?


– «Napvilágra mászok.»
Napvilágon mit keressz?
– «Napsugárral játszok.»
Hangya, hangya, mi a baj?
– «Napvilágra voltam.»
S mit cipelsz a hátadon?
– «Társamat, de holtan.
– Napvilágon járt velem,
– Az utcát futosta,
– Napvilágon a szegényt
– Ember eltaposta.»
Hangya, hangya látod-e,
Ne menj napvilágra,
Ember ottan rátapos
Emberre, hangyára!

Valamely egyhangú koldusnótára ment a dal, inkább csak a


rhitmus kiemeléséből állt, mint következetes melódiából, de nagy
hatással látszott lenni az ideges hangyákra. Seregesen álltak meg az
éneklő előtt e kis állatkák, fejüket földre szegezve, testük hátsó
részét fölemelve, csak csápjuk mozgott s utolsó lábuk párja. A mint
emberünk a dalt elvégezte, ismét megindult a raj és futkosott ész
nélkül ide-oda. A nagyobb koncokat úgy ellepték, hogy csak egy
hangyacsomónak látszott mindenik. Itt-ott egy tisztára lerágott
csont, patkányfej váza s efféle hevert a bolyon, hangyaszakaszok
által bolygatva.
– Egyetek fiaim, egyetek kicsikéim! – így biztatta az öreg állatjait.
Minek mennétek a napvilágra! Itt jó nekünk! Se telünk, se nyarunk.
Egyforma meleg van mindig, egyforma sötétség van mindig, senki se
tapos bennünket, senki se bánt, senki se hízeleg, senki se szeret,
senki se gyűlöl. Nincs bíró, nincs elüljáró, aki igazságtalan mértékkel
mérne! Nincs apa, a ki elhagyja gyermekét, nincs gyermek, a ki
megtagadja apját, nincs testvér, a ki elárulja testvérét – nincs más,
csak patkány meg egér. Egyetek fiaim, egyetek kicsikéim!
És a hangya-sereg mintha értette volna a biztatást, evett,
futkosott, dolgozott, nyüzsgött a barlangban, melynek félhomálya
nyilván világosabb volt lakóira nézve, mint a kik a napvilághoz
szokott szemekkel vetődtek volna oda.
A barlang oldala síma homokfal volt, itt-ott egy vakablak vala a
falba ásva. Területe tán öt négyszögöl, magassága alig sokkal több
egy ölnél. Az egyik falon egy rozoga deszkaajtó takart valamely
nyílást, ezzel szemben nyitott folyosó fekete szájürege tátongott a
bolyra. Csunya barátságtalan hely volt ez arra nézve, a ki ide nem
szokott. A barlangnak azon az oldalán, a hol a lámpa volt egy erős
fakampóra erősítve, a fal mellett a földön egy félig ágy, félig
pamlagféle volt elhelyezve, jó pokróccal leterítve, szőnyeggel borítva.
Nem rossz fekvőhely egy lusta vagy fáradt embernek. Fejtül egy X
lábú asztal volt melléje illesztve, melyen egy kancsóban bor, egy
tányéron sült hús és egy megszegett kenyér volt.
Sajátságos, hogy az asztaltól alig féllábnyira egy formális kis
országút volt kaparva, finom lábacskák által, hogy úgy mondjam,
taposva a homokfalra. Mint egy széles ripszszalag, úgy vonult fel az
út a barlang tetejéig, a hol a homok is ki volt kezdve. Innen aztán
számtalan kisebb s tágabb lyuk ment tova, folytatása az
országútnak. Hangyanép jött, ment ezen az úton, kerülgette
egymást, találkozván megállt, szimatolva összeeresztette s érintette
egymás csápját s tovább szaladt mindenik a maga irányában. És ez
iránytól el egy se tért, még azért sem, hogy a közel asztalra
helyezett sült húst megkóstolja. Értették úgy látszik egymást a
barlang lakói, az éneklő hangyás ember és parányi állatkái,
kedvében jártak egymásnak, mindenik tudta, mi illeti őt, mi a
másikat.
A hangyás ember, minekutána énekkel, biztatással és
patkányhússal jól tartotta hangyáit, fölkelt a pokrócról, megigazította
lámpáját, egyet huzott a kancsóból, a deszkaajtót kinyitva egy
tekintetet vetett mögéje, a hol egy másik lámpa fénye derengett
eléje és lefeküdt a kerevetre.
– Esti nyolc órának kell lenni, – mond órájára nézve – egy csinos
aranyóra – a hangyák fölöttem abban a nyüzsgő bolyban még aligha
gondolnak a lefekvésre. Most hosszú ott is az éj… Oh be nem
kivánkozom már közéjök!… Nincs is mit keresnem… A kik voltak, a
föld alatt vannak, mint én,… de nyugodtabban, mert se álmodnak,
se gondolkoznak… A ki még ott van… a ki még ott van… azt jobb
nem látnom… mert a föld alá tenném… pedig annak meg jobb ott,
mert az a féreg, a mely a föld alatt pusztít, az nem fáj… de az a
skorpió, mely őt ott fön csípi, szúrja, zaklatja: az, tudom, hogy fáj,
jobban fáj, mint a kés, jobban fáj, mint a kötél, jobban fáj, mint a
halálos félelem!… Ha lusta nem volnék… ha nem szeretném úgy ezt
az éjszakát, elmennék egyszer kínjaiban gyönyörködni… de attól
félek, megszabadítanám kínjaitól, melyekről minden nap
lefekvésekor oly édes gondolkoznom… Csípjétek, szúrjátok,
hasogassátok az agyvelejét, marjátok sebesre a szivét, őröljétek
meg a csontját, igyátok a vérét föltámadt lelkiismeret skorpiói! Hallja
álmában elpusztított gyermekek sírását, hallja az akasztott testvér
csontja zörgését… a míg én csöndesen pihenek, csöndesen alszom
és álmodom azokról, a kik már nincsenek… Jaj nekem, pedig be
szépek voltak! Jaj nekem, pedig de édesek voltak! Jaj nekem, jaj
nekem, de elmult minden, a mi szép, minden, a mi édes, – minden,
minden, minden!…
És a vén ember tapogatta kopasz fejét, mintha ott volna az a
fájás, a mely e beszédek alatt megmozdult benne s ajkai motyogtak
és mozogtak, szeme a lámpára bámult, a mely mintha kriptabeli
mécses lett volna, gyéren szürte le sugarait a barlang bús éjjelére…
Egyszerre csak elmerengéséből hirtelen talpra szökött.
Mintha zuhanást és kiáltást hallott volna!
Mi lehetne az? Hiszen itt ember nem jár, csak ő, ide kiáltás nem
hallatszik, itt egyéb zaj az ő léptei és sóhajai zajánál nem hallható!
Talán már elszundított s csak álmodta a dolgot? Nem, nem,
nagyon tisztán különböztette volt meg. A jajkiáltás hangja most is a
fülében csend. Akár ismételni is tudná.
– Há – há! – próbálja aztán, de csak rekedt károgással tudja
utánozni, a mit hallott. Ő azonban meg van elégedve vele.
– Tisztán ez a hang volt, mondja magában, tehát nem álmomban
hallottam. De ni, még az irányát is tudom. A kút felül hallottam, a
patkánykút felől!
És ezzel felragad ágya mellül egy kis kézi lámpát, meggyújtja s
nekiindul a sikátornak, mely a fal egyik oldalán a homokba vágva
volt.
Felragad egy kis kézi lámpát.

Egy öl széles, egy öl magas folyosó volt ez, síma fenékkel, síma
falakkal. Vagy ötven lépést tett benne a hangyás ember, aztán
bekanyarodott jobbra, ismét előre ment tíz lépést és két nyílást
elhagyva egy harmadik sikátorba lépett be. Ezen menetelésen mind
alább ment vagy harminc-negyven lépésnyire, ott élesen világító
lámpájának sugarai a homokfalba ütődtek. Vége volt a sikátornak.
Ez volt a patkánykút. A folyosónak tetője itt mind jobban
emelkedett s a sikátor végén egy tág kéménybe végződött, melynek
felső végét látni nem lehetett.
A mint a hangyás ember lámpája világa elérte a sikátor végét,
felülről kiabálás hallatszott.
– Hej hó! – ki az? – Béla! – Hol vagy? – Ide, ide! – hej! S hasonló
kiáltozások két pár ajkról egymást keresztezve.
A hangyás ember egy pillanatig megáll figyelni s lámpája világát
az úgynevezett kút fenekére, az az a folyosó végére ejti, a hol ő
patkányait fogni szokta.
Ha már idegen emberi hangok hallatára szokatlan izgatottság
fogta el s a tudatra, hogy emberekkel akadhat ily váratlanul dolga,
ideges lett mint egy hangya: úgy a látvány, mely elejbe tárult a kút
fenekéről, egészen kivette sodrából.
Egy piszkos, sáros emberi alak feküdt ott elterülve, egy fiatal
sápadt férfi arc, holtan-e, ájultan-e? nem tudhatja, de mozdulatlanul.
Tanácstalanul állott az öreg ember e látvány előtt, de csakhamar
irányt adtak neki a felülről meg-meg ujuló kiáltozások. Derekáról
leoldá szíját, s az ott fekvő test mellén átveté, becsatolá s karját a
szíjba öltve felemelé a testet s vitte a folyosón végig, – hogy lábai
végig karcolták a földet, a mint utána csúsztak, – vitte barlangjáig s
ott kerevetére ledobta.
XXIX. FEJEZET.
(A hogy az isten intézkedik.)

– Ki ez és hogy került ide?


Ezt a kérdést intézte magához először is a hangyás ember s erre
keresett feleletet, természetesen az idecepelt test – zsebeiben,
melyekben kutatni kezdett.
Első a mi a kezébe esett, egy csomag, viaszkos vászonba hirtelen
becsomagolva egy darab papír.
A mint a hangyás ember e csomagot sebten felbontja s a
szennyes írást oda tartja lámpájához: égni kezdenek szemei, két ajka
reszketegen szétnyílik.
Ezt az írást ő ismeri! A kéz, a mely e vonásokat rajzolta, az elme,
a mely foglalatját gondolta, – mindenik nagy munkát végzett az ő, a
hangyás ember sorsában is! Lehetetlen, hogy ebben csalódjék,
lehetetlen, hogy a pokol káprázata idegen írást mutasson neki,
«ahhoz» hasonlónak… s midőn lázas remegéssel fordít a kezében
lévő lapon, hogy az aláírást megkeresse… egy állati, tagolatlan
hörgéssel roskad le a fiatal ember teste mellé.
– Mely végzés, mely hatalom küldi nekem ezt, ebben az órában,
e helyre és miért? Mi végre?
Ezt hörgi, a mint két tenyerében az ágy szélén kopasz fejét
meggörgeti.
De csakhamar magához tér és az éhes ember mohóságával falja
fel két szeme a piszkos papiros tartalmát, mely a következő sorokból
állt:
«Ide irom le kínszenvedésem történetét, aztán rá bizom a
véletlenre, a mit a világ istennek csufol: intézkedjék róla az!»
«Kristóf testvérem! mondhatlanul szerettelek addig, míg
vőlegénye nem lettél annak a leánynak, a kit mindennél jobban
szerettem.»
«Megfogadtam, hogy boldogságtok virágában teszlek benneteket
nyomorultabbakká a legnyomorultabbaknál is.»
«Kivándorlottam hazánkból, hogy idegen országból biztosabban
intézhessem csapásaimat reátok.»
«Én voltam az, a ki, míg dolgaidban oda jártál, elrablottam két
gyermekedet és elhoztam idegen országba.»
«Feleséged nem tudta túl élni az első csapást, belehalt. Pedig
nem erre számítottam. Azt reméltem, hogy belőlük nevelek ostort,
kínt, gyötrelmet a számotokra.»
«Tégedet becsaltalak az országba, a hol voltam, pénzedet
elvettem, magadat akasztófára juttattalak.»
«Gyermekeidet világgá űztem, földönfutókká tettem, azt sem
tudják, hol születtek, azt sem tudják, kitől születtek: nyomorúltak,
koldusok, sehonnaiak lettek!»
«Pénzedet irigy rokonok közt per, civakodás és visszavonás
tárgyává tettem. Meg vagyok magammal elégedve.»
«Hallod-e Kristóf! Meg vagyok magammal elégedve! Ha hallod,
lehetetlen sírodban meg nem fordulnod.»
«Gyűlöletem és boszúállásom mérge volt az én táplálékom teljes
életemben.»
«Ha van isten, mindent tudó és mindenek felett bölcs isten
felettünk, a ki két nyomorult testvér szeretetét emésztő gyűlöletté
változtatja át az által, hogy pusztító szerelmöknek egy tárgyat ád: ez
az isten feleljen kínos életemért, gyötrelmes halálomért; én kacagva
szállok alá a poklok tüzébe!
Gerber, ujabban Ergerberger Flórián.»
– Jaj a nyomorult, jaj a nyomorult! – Csak ezt rebegte csukló
hangon, könnyei záporként omlottak alá, térdei ujra erőszakadtan
hajlottak össze s a vén földalatti ember ott fetrengett az ágy mellett,
zokogásba fult hangon egyre ismételve: jaj a nyomorult, jaj a
nyomorult! Jaj nekem szép gyermekeim, jaj nekem édes feleségem!
Jaj nekem, jaj nekem!
A hangyák pedig mászkáltak körülötte egykedvüen. Ezeket a
hangokat nem ismerték, nem is értették, nem is figyeltek reájok.
Egyszerre azonban megáll jajgatásával, és felemeli fényes kopasz
fejét.
– Ki ez az ember, a ki nekem ezt a rettenetes levelet hozza? És
mint jut a zsebébe ez a levél? – Irgalmas isten, hátha – –
És görcsösen megragadja az ájult fiatal ember fejét és
odafordítja a lámpa felé.
Piszok, por, pókháló borítja a fiatal ember képét; az öreg ember
szemeiből meg oly sűrűen esik az eső, hogy attól nem képes látni.
Kendőt ránt elé tehát és megáztatva omló könnyeiben, elkezdi
törülni, tisztogatni az ájult ember arcát.
És egy merev, holtnak látszó sápadt képen nyugszik meg kisírt
szeme. A lámpa sárga fénye rémessé teszi az arcot lecsukott két
szemével, melyen az öreg ismerős vonásokat keres.
– Mikor gyermekeiért jajgatott, mikor utánok epedve elhervadni
kezdett, mikor kiterítve volt, akkor lehetett ehhez hasonló! De oly
régen volt, és oly gyötrelmes volt, hogy ma már semmit sem tudok
belőle… Jaj és ha mégis úgy lenne!… fel kell használnom az
alkalmat… Mert ha úgy van is, a titoknak itt kell maradnia, ebben a
barlangban és ebben a szívben… de fel kell használnom az alkalmat!
És a hangyás ember ujra megragadta ájult vendége fejét s
elkezdte csókolni.
– Ez az apádért,… ez az anyádért… ez neked, ez drága kedves
húgodnak… ez a multért… ez azért a drága jelenért… ez a borzasztó
jövőért… ez a mérhetlen kínszenvedésekért…
És csókolta végig a testet, a hol érte, hogy szinte maszatos lett
tőle mindene. Sírt, zokogott, és egyre csókolta és mindig tudott
hozzá valamit mondani, hogy mért csókolja.
Egyszer aztán ismét rémülten felszökött. Hátha ez a fiatalember
meg van halva! Ha nem is az, a kinek hinni remeg, legalább hírt
mondhat, legalább elbeszélheti, mint jutott ez okmány birtokába…
És felszabván ruháit, elkezdte a testet dörzsölni. Aztán borral locsolta
meg az ott álló kancsóból kendőjét és az orra alá tartotta. A piszkos,
sáros ruhát leszedte róla s majd a puszta mellét, majd halántékát
dörzsölte, míg végre kezdte érezni a fiatalember szíve verését. Ekkor
szépen ágyára fektette, letakarta szőnyeggel és egy kortyra való bort
öntött a szájába. Aztán leste, mint tér az élet fokonként vissza a
fiatal testbe s mint terjed el benne újra.
A fiatal ember felnyitotta két szemét, de csakhamar ismét
lecsukta. Lélegzete erősebb, halhatóbb lett s melle elkezdett
hullámosan, bár gyengén emelkedni a ki s bejáró lélegzettől. Az öreg
ember izgatottan nézte mint foglalja el az élet jogos területét s
szemeivel a fiatal ember arcán csüngve várta az első szót.
Az első szó, a visszatért öntudat első szava lesz a varázsige, a
mely a viszonyt kettejök közt más lábra állítja. Azontúl nem
tapogathatja reszkető kezekkel, nem csókolhatja többé szomjas
ajakkal a fiatal testet. Azontúl egy idevetődött idegen lesz, a ki
felvilágosítást kénytelen adni az írásról, ő pedig a barlangbeli
hangyás ember, a ki, ha akar, ád, ha nem akar, nem ád magáról
felvilágosítást.
És ez első szó csakhamar ellebbent a magához tért fiatal ember
ajkáról.
– Hol vagyok? – susogja szemeit újra felnyitván s tétován
tekintve szerte.
Az öreg embernek az izgalom összefogta száját. Csak nagy
megerőltetéssel volt képes összeharapott fogait szétvenni egy-két
szóra.
– Csendesen, csak térjen magához – mondá.
– Ki az? – kérdé a fiatalember. – Ki az? És hol vagyok?
– Jó helyen, veszélytelenül. –
– Mi történt velem?
– Hogy érzi magát?
– Már jól, jobban. Egy pohár vizet kérek.
– Inkább egy ital bort. –
– Jó lesz!
És ivott s ismét lecsukta szemeit nehány perczre. Gyönge
pirosság ült az arczára s midőn szemeit ismét kinyitá, tekintete tiszta
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade

Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.

Let us accompany you on the journey of exploring knowledge and


personal growth!

ebooknice.com

You might also like