Sample
Scalabrio117
Human rating uses the original dataset scale.
Scores
| Method | Score | Scale | Dataset rank (0–100) |
|---|---|---|---|
| Posnett | 0 | 0–1; higher is more readable | 18.1Δ 27.4 |
| Scalabrino | 0.482 | 0–1; higher is more readable | 46.7Δ 1.3 |
| Dorn | 0.016 | 0–1; higher is more readable | 4.0Δ 41.5 |
| Mi | 0.436 | 0–1; higher is more readable | 70.9Δ 25.4 |
| LLOC | 17 | Logical lines; fewer is more readable | 35.7Δ 9.8 |
| DeepSeek V4 Pro | 9.33 | 0–20; mean of three runs | 15.6Δ 29.9 |
| GPT-6.1 Sol | 13 | 0–20; mean of three runs | 5.0Δ 40.5 |
| BTTF | 0.613 | 0–1; higher is more readable | 74.4Δ 28.9 |
| Human | 3.56 | 1–5; original rating | 45.5 |
Views
Select the downloaded ZIP or its extracted folder. Files stay in your browser.
Loading feature diagnosis…
Source regions
Feature contributions
Feature contributions
| Feature | Value | Contribution (log-odds) |
|---|---|---|
| Halstead volumeHow much symbolic information the code contains. It combines the total number of operators and values with the number of distinct ones. | 1443.271 | −47.628 |
| Source linesThe number of non-empty source lines. | 38 | +15.2 |
| Byte entropyHow varied the bytes in the source text are. Repeated bytes give a lower value; a more even mixture gives a higher value. | 5.062 | −7.593 |
Intercept 8.87 + feature contributions = -31.151 (log-odds).
Score = sigmoid(-31.151) = 0.
| Score | 0.482 |
|---|
Feature contributions
| Feature | Value | Contribution (log-odds) |
|---|---|---|
| Identifier layout (horizontal)How rapidly the visual pattern of identifier characters changes from left to right. It measures spatial frequency, not the meaning of the names. | 126 | −1.672 |
| Comment layout (horizontal)How rapidly the visual pattern of comment characters changes from left to right. | 0 | −0.804 |
| Indentation frequencyHow rapidly indentation changes from line to line. | 1 | −0.703 |
| Number layout frequencyHow rapidly the number of numeric values per line changes through the code. | 38 | −0.451 |
| Operator visual areaThe share of the code’s visual area occupied by operators such as +, =, and *. | 0.133 | −0.346 |
| Comment layout frequencyHow frequently the layout switches between lines containing only comments or whitespace and lines containing code. | 38 | −0.309 |
| Identifier layout (vertical)How rapidly the visual pattern of identifier characters changes from top to bottom. | 36.819 | +0.105 |
Intercept 0.07 + feature contributions = -4.11 (log-odds).
Score = sigmoid(-4.11) = 0.016.
| Score | 0.436 |
|---|
| Score | 17 |
|---|
Run 1
This code is difficult to read due to several issues. The structure is functional but generated-looking, with excessive blank lines and a redundant outer block that creates unnecessary nesting. Intent is clear only to someone familiar with parser generators; otherwise, the method name and logic are obscure. Variable declarations are crammed onto one line, reducing clarity. The switch statement has multiple case labels per line, which hurts readability, and the action of calling matchRange is repeated across blocks. The default case contains a long exception constructor on a single line, making it hard to parse. The code length is acceptable but could be more concise. Reading flow is disorganized, with the outer braces and blank lines creating disjointed segments. Overall, it functions but requires mental overhead to follow.
Run 2
The code is a generated parser method with poor readability. While it has some logical structure (switch statement for hex digits), it suffers from multiple issues: unnecessary nesting with standalone braces, inconsistent formatting, and unclear variable naming (_ttype, _token, _begin). The switch statement is flat but verbose, listing every digit separately instead of using ranges more efficiently. The method name mHEX_DIGIT is cryptic without context. Action granularity is mixed—some lines contain multiple statements while others are unnecessarily split. The reading flow is disrupted by the redundant wrapper block and inconsistent indentation. The intent is partially clear (matching hex digits) but the generated code style makes it harder to follow than necessary. Token creation logic at the end adds complexity without clear separation of concerns.
Run 3
This appears to be auto-generated lexer/parser code, which explains some structural issues. The method has a clear single purpose but suffers from readability problems: the switch statement is unnecessarily wrapped in an empty block, there are multiple declarations on one line, and the default case contains a long exception constructor call. The case labels are compact but repetitive. Variable names like _ttype, _token, and _begin are cryptic without context. The method mixes levels of abstraction—character matching and token creation in one place. The action granularity is inconsistent, with some lines doing too much. The reading flow is interrupted by the block-wrapped switch. However, the logic is straightforward and the code is relatively flat, so it remains understandable with effort.
Run 1
Code Structure: The method logically separates character recognition from token creation, but redundant blocks add clutter. Nesting: Depth is moderate, with unnecessary braces around the switch and each branch. Clarity of intent: The method name and character ranges clearly convey hexadecimal-digit recognition; terse variables and an unused _saveIndex reduce clarity. Code length: Explicit case lists and token-management boilerplate make a simple operation verbose. Action granularity: Most operations occupy separate lines, but the initial declarations and grouped case labels pack multiple elements onto single lines. Reading flow: Recognition, error handling, and token creation follow a natural sequence, though inconsistent spacing and excessive braces interrupt scanning.
Run 2
Code Structure: Logically separates character matching from token creation, but redundant blocks and an unused _saveIndex declaration add clutter. Nesting: Moderately nested, with unnecessary braces around the switch and each case body. Clarity of intent: HEX_DIGIT and matchRange clearly communicate hexadecimal recognition, though abbreviated variables and lexer-specific APIs require context. Code length: Fairly short, but enumerating every character before matching ranges is verbose. Action granularity: Most executable statements occupy separate lines, but multiple declarations and case labels share lines. Reading flow: Matching digits, uppercase letters, and lowercase letters before creating a token is natural; inconsistent spacing, indentation, and redundant braces interrupt that flow.
Run 3
Code Structure: The method logically separates character matching from token creation, but redundant blocks and an unused _saveIndex add clutter. Nesting: Depth is moderate, though unnecessary braces around the switch and each case make it appear more nested. Clarity of intent: HEX_DIGIT and matchRange clearly convey hexadecimal recognition; abbreviated variables and lexer-specific conventions obscure token handling. Code length: Explicit character cases and boilerplate are verbose for a simple operation. Action granularity: Most operations occupy separate lines, but multiple declarations and case labels share lines, reducing scanability. Reading flow: Matching digits, uppercase letters, then lowercase letters is natural, followed by token construction; inconsistent spacing and indentation interrupt that flow.