Skip to content

Instantly share code, notes, and snippets.

@RantyDave
Created October 10, 2023 05:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save RantyDave/41ac164cfcf527a91d3b97c8dd19ed3c to your computer and use it in GitHub Desktop.
Save RantyDave/41ac164cfcf527a91d3b97c8dd19ed3c to your computer and use it in GitHub Desktop.
Comparing the performance of Berkshire Hathaway and the S&P 500 over various 10 year periods.
# https://www.berkshirehathaway.com/letters/2022ltr.pdf
berkshire_string = "49.5 (3.4) 13.3 77.8 19.4 (4.6) 80.5 8.1 (2.5) (48.7) 2.5 129.3 46.8 14.5 102.5 32.8 31.8 38.4 69.0 (2.7) 93.7 14.2 4.6 59.3 84.6 (23.1) 35.6 29.8 38.9 25.0 57.4 6.2 34.9 52.2 (19.9) 26.6 6.5 (3.8) 15.8 4.3 0.8 24.1 28.7 (31.8) 2.7 21.4 (4.7) 16.8 32.7 27.0 (12.5) 23.4 21.9 2.8 11.0 2.4 29.6 4.0"
sp_string = "10.0 (11.7) 30.9 11.0 (8.4) 3.9 14.6 18.9 (14.8) (26.4) 37.2 23.6 (7.4) 6.4 18.2 32.3 (5.0) 21.4 22.4 6.1 31.6 18.6 5.1 16.6 31.7 (3.1) 30.5 7.6 10.1 1.3 37.6 23.0 33.4 28.6 21.0 (9.1) (11.9) (22.1) 28.7 10.9 4.9 15.8 5.5 (37.0) 26.5 15.1 2.1 16.0 32.4 13.7 1.4 12.0 21.8 (4.4) 31.5 18.4 28.7 (18.1)"
def brackets_val(s):
if s[0] == '(':
return 1 - float(s[1:-1])*0.01
else:
return 1 + float(s)*0.01
berkshire = [brackets_val(x) for x in berkshire_string.split()]
sp = [brackets_val(x) for x in sp_string.split()]
for start_idx in range(49):
berkshire_return, sp_return = 1.0, 1.0
for n in range(0, 10):
berkshire_return *= berkshire[start_idx + n]
sp_return *= sp[start_idx + n]
berkshire_return *= 100
sp_return *= 100
print(f"{start_idx + 1974} {berkshire_return:.2f} {sp_return:.2f} {berkshire_return - sp_return:.2f}")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment