Da kann man eine ganze Menge verbessern- muss man aber nicht.
Wenn du tiefer einsteigen, und später auch grössere Programme schreiben willst, wärs eine gute Übung, sämtliche delay() aus dem Programm zu verbannen.
delay() hat nämlich einen Nachteil: der Controller tut...nichts, ausser ab und zu auf die Uhr zu schauen.
In komplexeren Programmen ist das oft doof, weil in der Wartezeit andere Dinge erledigt werden könnten.

Wenn du wissen willst, wie man die delay() los wird, schau dir mal das Beispielprogramm blinkWithoutDelay an, was du unter Beispiele in der Arduino-IDE findest. Das ist ein Grundgerüst für nen Timer, den man für alles Mögliche benutzen kann.
Beispielsweise das Entprellen des Tasters (ich nehme an, das soll dieses delay(50) bewirken), kann man damit eleganter lösen.

Auch könntest du den Button über nen Interrupt anbinden, so stört der den normalen Programmablauf nur dann, wenn es unbedingt nötig ist.
Da du ihn an Pin2 hast, sollte das bei den meisten Arduinos klappen.

Wo ich grade nicht sicher bin (könnte sein, das optimiert der Compiler selber): int ist ne recht grosse Zahl.
So viel Speicher brauchst du für die Pin-Definitionen gar nicht, das kann man alles mit byte machen.
Gelegentlich landet man beim Speicherverbrauch an der oberen Grenze, da ist man froh über jedes Byte, was man irgendwo eingespart hat.

Das alles ist aber nicht nötig, wenn dein Programm tut, was es soll...sind eher empfehlenswerte Übungen für später.