Sample

JetBrains/b5

Human rating uses the original dataset scale.

DatasetJetBrains
Human0.9
Lines13

Scores

MethodScoreScaleDataset rank
(0–100)
Posnett0.0010–1; higher is more readable
71.2Δ 6.4
Scalabrino0.7460–1; higher is more readable
61.9Δ 15.7
Dorn0.5210–1; higher is more readable
50.0Δ 27.5
Mi0.640–1; higher is more readable
82.2Δ 4.7
LLOC9Logical lines; fewer is more readable
79.2Δ 1.7
DeepSeek V4 Pro180–20; mean of three runs
94.5Δ 16.9
GPT-6.1 Sol17.330–20; mean of three runs
58.5Δ 19.1
BTTF0.3170–1; higher is more readable
13.6Δ 64.0
Human0.90–1; original rating
77.5

Views

Source code

class Main { public static void main(String[] args) { for(int i=1; i<=100; i++) { System.out.println("Divisors of " + i + ":"); for(int j=1; j<=i; j++) { if(i%j==0) { System.out.print(j + " "); } } System.out.println(); } } }

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.468.851−15.472
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.888−5.832
Source linesThe number of non-empty source lines.13+5.2

Intercept 8.87 + feature contributions = -7.234 (log-odds).
Score = sigmoid(-7.234) = 0.001.

Score0.746

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.55+1.336
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.168−0.692
Identifier layout (vertical)How rapidly the visual pattern of identifier characters changes from top to bottom.11.679−0.247
Number layout frequencyHow rapidly the number of numeric values per line changes through the code.13+0.123

Intercept 0.07 + feature contributions = 0.083 (log-odds).
Score = sigmoid(0.083) = 0.521.

Score0.64
Score9
Run 1

The code is well-structured with a clear separation between the outer and inner loops. The outer loop iterates from 1 to 100, and the inner loop finds divisors, which is logically organized. Nesting is limited to two levels, which is acceptable and readable. The purpose—printing divisors of numbers from 1 to 100—is immediately clear. The code is concise, with no redundant lines. Each action is on its own line, aiding readability. The reading flow is natural: outer loop, print header, inner loop, check divisibility, print divisor if true, then newline. Minor deductions could be for the lack of braces on the if statement (though not incorrect) and the slightly compact for-loop syntax, but these are conventional in Java and do not significantly impact readability.

Run 2

The code is highly readable. It has a clear, logical structure: an outer loop from 1 to 100, and an inner loop that finds divisors. Nesting is minimal (two levels), and the logic is straightforward. Intent is evident from the output messages. The code is concise and not unnecessarily verbose. Action granularity is appropriate, with one main operation per line. Reading flow is natural, moving from generating each number, printing a label, checking divisors, then printing a newline. Minor deductions could be for lacking comments or a helper method for divisor logic, but overall it is very easy to follow.

Run 3

The code is highly readable. It has a clear, logical structure with two nested loops: an outer loop for numbers 1 to 100 and an inner loop to find divisors. Nesting depth is minimal (two levels), making the flow easy to follow. The intent is obvious — printing divisors for each number — and variable names 'i' and 'j' are conventional for loop counters, which is acceptable here. Code length is concise for the task, with no unnecessary lines. Each line performs one action, and the reading flow is natural, top to bottom. Minor deductions could be made for lack of comments or slight ambiguity in output formatting, but overall the code is very clear.

Run 1

Code Structure: Logically organized, with each number followed by its divisors. Nesting: Two loops and one conditional create moderate but manageable nesting. Clarity of intent: Output labels clearly communicate the purpose, though descriptive variable names and consistent operator spacing would improve clarity. Code length: Concise, with no unnecessary code. Action granularity: Each statement performs one action; loop headers use conventional syntax. Reading flow: Natural top-to-bottom progression and consistent indentation make the code easy to follow.

Run 2

Code Structure: Logically organized, with the outer loop selecting numbers and the inner loop finding divisors. Nesting: Moderate and appropriate; two loops and one conditional are easy to follow. Clarity of intent: The output label and divisibility test clearly communicate the purpose, though descriptive variable names would improve clarity. Code length: Concise, with no unnecessary logic. Action granularity: Each statement performs a single action; standard loop headers remain readable. Reading flow: Natural progression from printing the label to printing divisors and ending the line. Consistent spacing around operators and control statements would improve readability.

Run 3

Code Structure: Logically organized, with an outer loop over numbers and an inner loop checking divisors. Nesting: Moderate nesting is appropriate to the task, though it adds some visual depth. Clarity of intent: The output label and divisibility check clearly communicate the purpose; more descriptive variable names would help. Code length: Concise, with no unnecessary code. Action granularity: Each statement performs a single action; loop headers conventionally group initialization, condition, and increment. Reading flow: Execution proceeds naturally from the label to divisor output and a final newline. Consistent indentation helps, but spacing around operators and after keywords would improve readability.