Sample

JetBrains/e45

Human rating uses the original dataset scale.

DatasetJetBrains
Human0.77
Lines10

Scores

MethodScoreScaleDataset rank
(0–100)
Posnett00–1; higher is more readable
67.8Δ 10.2
Scalabrino0.7690–1; higher is more readable
66.9Δ 9.3
Dorn0.2250–1; higher is more readable
17.8Δ 39.8
Mi0.5070–1; higher is more readable
54.2Δ 3.4
LLOC7Logical lines; fewer is more readable
85.2Δ 27.5
DeepSeek V4 Pro120–20; mean of three runs
16.1Δ 41.5
GPT-6.1 Sol160–20; mean of three runs
26.7Δ 30.9
BTTF0.5630–1; higher is more readable
82.2Δ 24.6
Human0.770–1; original rating
57.6

Views

Source code

public class BeerSong { public static void main(String[] args) { for(int i=99; i>0; i--){ System.out.println(i + " bottles of beer on the wall, " + i + " bottles of beer."); System.out.println("Take one down and pass it around, " + (i-1) + " bottles of beer on the wall."); } System.out.println("No more bottles of beer on the wall, no more bottles of beer."); System.out.println("Go to the store and buy some more, 99 bottles of beer on the wall."); } }

Loading feature diagnosis…

Source regions

Feature contributions

Feature contributions

FeatureValueContribution
(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.429.104−14.16
Byte entropyHow varied the bytes in the source text are. Repeated bytes give a lower value; a more even mixture gives a higher value.4.45−6.676
Source linesThe number of non-empty source lines.10+4

Intercept 8.87 + feature contributions = -7.966 (log-odds).
Score = sigmoid(-7.966) = 0.

Score0.769

Feature contributions

FeatureValueContribution
(log-odds)
Comment layout frequencyHow frequently the layout switches between lines containing only comments or whitespace and lines containing code.1+1.001
Comment layout (horizontal)How rapidly the visual pattern of comment characters changes from left to right.0−0.804
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.104−0.74
Indentation frequencyHow rapidly indentation changes from line to line.1−0.703
Identifier layout (vertical)How rapidly the visual pattern of identifier characters changes from top to bottom.8.81−0.287
Number layout frequencyHow rapidly the number of numeric values per line changes through the code.10+0.191
Operator visual areaThe share of the code’s visual area occupied by operators such as +, =, and *.0.093+0.035

Intercept 0.07 + feature contributions = -1.236 (log-odds).
Score = sigmoid(-1.236) = 0.225.

Score0.507
Score7
Run 1

The code is simple and readable at a basic level, but it has significant readability issues. The class structure is minimal, and the main method lacks indentation, which hurts visual organization. The loop is flat and easy to follow, but the code does not handle pluralization (e.g., '1 bottles'), which makes the output logically inconsistent. The action granularity is acceptable (one statement per line), but the multiple print statements inside the loop are not separated by blank lines, reducing readability. The reading flow is straightforward but lacks comments or a helper method to clarify intent. Overall, it is concise but would benefit from better formatting and minor logic improvements.

Run 2

The code has a clear, simple purpose and is logically structured as a single loop followed by final output. It avoids unnecessary complexity and uses flat nesting, with one action per line, which supports readability. However, there are issues: inconsistent indentation, lack of a blank line between loop and final verses, and awkward phrasing like '0 bottles' instead of 'no more bottles' inside the loop. Variable naming is acceptable but minimal. Overall, the intent is understandable, but formatting and minor grammar detract from polish.

Run 3

The code is functional and relatively short, but it lacks formatting and clarity. Indentation is inconsistent, and the absence of spaces around operators and after commas makes it harder to read. The logic is straightforward, but the final verses are not integrated into the loop cleanly; the transition from the loop to the 'No more bottles' lines is abrupt and requires the reader to mentally track the loop's end state. The action granularity is acceptable, with one statement per line, but the reading flow suffers from the lack of visual structure. Overall, it is understandable for a simple task like '99 Bottles of Beer,' but it would benefit from consistent indentation, better spacing, and perhaps a comment explaining the loop's behavior and the final verses.

Run 1

Code Structure: A single main method with a loop followed by the final verse is logically organized, though inconsistent indentation obscures block boundaries. Nesting: Shallow, with only one loop inside the method. Clarity of intent: The class name and printed lyrics make the purpose obvious; a more descriptive loop variable could help. Code length: Concise, with no unnecessary abstractions or repetition beyond the required output. Action granularity: Each print statement performs one action on its own line; the loop header conventionally groups initialization, condition, and decrement. Reading flow: Execution follows the song naturally, but missing spaces around operators and poor indentation reduce scanability.

Run 2

Code Structure: A straightforward class, main method, loop, and final output provide logical organization, though inconsistent indentation obscures block boundaries. Nesting: Minimal and appropriate, with only one loop inside the method. Clarity of intent: BeerSong and the printed lyrics make the purpose obvious; a descriptive variable name such as bottles would improve clarity. Code length: Concise, with no unnecessary abstractions or repetition beyond the required output. Action granularity: Each print statement occupies its own line; the loop header conventionally combines initialization, condition, and decrement. Reading flow: The countdown followed by the closing verses reads naturally, but missing spaces and poor indentation reduce scanability.

Run 3

Code Structure: Logically organized around a countdown loop followed by the closing verses, but inconsistent indentation weakens visual structure. Nesting: Shallow and easy to follow, with only one loop inside main. Clarity of intent: The BeerSong class name and printed lyrics make the purpose obvious; a descriptive counter name would improve clarity. Code length: Concise, with no unnecessary abstraction or repetition beyond the required output. Action granularity: Each print operation occupies its own line, although the loop header combines initialization, condition, and decrement in standard Java fashion. Reading flow: Execution proceeds naturally from countdown to conclusion, but minimal spacing and long output lines reduce scanning ease.