Sample

JetBrains/e11

Human rating uses the original dataset scale.

DatasetJetBrains
Human0.45
Lines15

Scores

MethodScoreScaleDataset rank
(0–100)
Posnett0.0050–1; higher is more readable
82.2Δ 68.2
Scalabrino0.8190–1; higher is more readable
78.0Δ 64.0
Dorn0.650–1; higher is more readable
77.1Δ 63.1
Mi0.6390–1; higher is more readable
81.4Δ 67.4
LLOC10Logical lines; fewer is more readable
72.9Δ 58.9
DeepSeek V4 Pro17.670–20; mean of three runs
88.6Δ 74.6
GPT-6.1 Sol180–20; mean of three runs
77.5Δ 63.6
BTTF0.5540–1; higher is more readable
81.4Δ 67.4
Human0.450–1; original rating
14.0

Views

Source code

public class AbundantNumbers { public static void main(String[] args) { for (int i = 1; i <= 1000; i++) { int sum = 0; for (int j = 1; j <= i/2; j++) { if (i % j == 0) { sum += j; } } if (sum > i) { System.out.println(i); } } } }

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.453.222−14.956
Source linesThe number of non-empty source lines.15+6
Byte entropyHow varied the bytes in the source text are. Repeated bytes give a lower value; a more even mixture gives a higher value.3.54−5.31

Intercept 8.87 + feature contributions = -5.396 (log-odds).
Score = sigmoid(-5.396) = 0.005.

Score0.819

Feature contributions

FeatureValueContribution
(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.45.933+1.72
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
Indentation frequencyHow rapidly indentation changes from line to line.1−0.703
Operator visual areaThe share of the code’s visual area occupied by operators such as +, =, and *.0.151−0.525
Identifier layout (vertical)How rapidly the visual pattern of identifier characters changes from top to bottom.13.894−0.216
Number layout frequencyHow rapidly the number of numeric values per line changes through the code.15+0.077

Intercept 0.07 + feature contributions = 0.619 (log-odds).
Score = sigmoid(0.619) = 0.65.

Score0.639
Score10
Run 1

The code is highly readable due to its clear and straightforward structure. It uses simple nested loops to identify abundant numbers from 1 to 1000. The outer loop iterates the range, while the inner loop calculates the sum of proper divisors by checking up to i/2, which is an efficient and logical bound. Each line performs a single action, and the conditionals are flat with only one level of nesting. Variable names like 'i', 'j', and 'sum' are concise and their purpose is clear from context. The logic flows naturally: iterate, accumulate, compare, print. There is no unnecessary complexity or redundant code. The only minor deduction is that the class name 'AbundantNumbers' accurately reflects the problem, but the absence of comments or explanatory text might leave a beginner less certain about the definition of an abundant number; however, the logic itself is self-evident from the code.

Run 2

The code is concise and logically structured to find abundant numbers. It uses a straightforward nested loop: an outer loop to iterate numbers and an inner loop to sum proper divisors up to half the number. Nesting is shallow (2 levels), and each line performs a single clear action. Variable names like 'i', 'j', and 'sum' are conventional for loops but could be more descriptive (e.g., 'number', 'divisor'). The intent is clear from the logic, but a comment or method extraction (e.g., 'isAbundant') would improve readability. The reading flow is natural: generate, calculate, compare, print. Overall, it is highly readable for a small algorithm, but slightly less self-documenting than possible.

Run 3

The code is highly readable. It has a clear, logical structure: a simple outer loop over the range, an inner loop to sum proper divisors, and a final condition to print abundant numbers. Nesting is minimal (two levels), and each level has a distinct purpose. Variable names (i, j, sum) are short but appropriate for local loop counters and a running total. The intent is evident without comments—finding numbers whose proper divisor sum exceeds the number. Code length is concise for the task, avoiding unnecessary methods or classes. Action granularity is excellent: each line performs one clear operation. The reading flow is natural, progressing from initialization to divisor summation to output. The only minor issue is using i/2 as the divisor bound; it’s correct for proper divisors but slightly less intuitive than sqrt(i), though this does not significantly hurt clarity.

Run 1

Code Structure: Logically organized, with divisor summation followed by the abundance check. Nesting: Moderate nesting from two loops and an if statement, but each block is short and easy to follow. Clarity of intent: The class name and sum comparison clearly convey the purpose; more descriptive names than i and j would improve clarity. Code length: Concise, with no unnecessary code. Action granularity: Each statement performs one clear action. Reading flow: Natural progression from candidate selection to divisor testing, summation, and output. Minor improvements include consistent spacing around i / 2 and naming the upper limit.

Run 2

Code Structure: Logically organized, with divisor summation followed by the abundance check. Nesting: Moderate nesting from two loops and a conditional, appropriate for this straightforward algorithm. Clarity of intent: The class name and sum comparison communicate the purpose, though descriptive names instead of i and j would help. Code length: Concise without unnecessary statements. Action granularity: Each statement performs a single clear action; loop headers use conventional syntax. Reading flow: Natural top-to-bottom progression with consistent indentation. A named upper-bound constant and spacing around i / 2 would slightly improve readability.

Run 3

Code Structure: Logically organized, with divisor summation followed by the abundance check. Nesting: Moderate nesting from two loops and a conditional, but each block is short and easy to follow. Clarity of intent: The class name and sum comparison make the purpose clear, although descriptive names such as number and divisor would improve on i and j. Code length: Concise, without unnecessary statements. Action granularity: Each statement performs one clear action; loop headers use standard Java conventions. Reading flow: Natural top-to-bottom progression with consistent indentation. Minor improvements include spacing around i / 2 and naming the upper limit instead of using the literal 1000.