Scratch is a visual programming language. For the sake of counting bytes, Scratch is usually written in scratchblocks2 syntax.
Post tips that specifically apply to Scratch or scratchblocks2.
Code Golf Stack Exchange is a question and answer site for programming puzzle enthusiasts and code golfers. It only takes a minute to sign up.Sign up to join this community
Where possible, if the challenge says functions are allowed, use them! The syntax for defining a function is almost always shorter than the usual
when gf clicked.
define f(n say((n)+(1
when gf clicked ask()and wait say((answer)+(1
This also means one doesn't have to use the
answer variable, which is quite longer than
As of the time this answer is posted, Scratch lacks a ternary operator. If we had one, it'd have looked like this:
However, we can use a workaround with this:
Make sure to replace
y with the values for when the boolean is true and when it's false. The booleans may be empty here, but when using it should have the same conditions.
Besides, this only works when See edit.
y are numbers. Currently this fails with strings.
This also works because of https://codegolf.stackexchange.com/a/198744/110681
EDIT: you could use our invented ternary operator with a
(item()of[ v]) to index a number into the list, depending on the truth value of the boolean.
EDIT: To get single character results, Jacob has commented on his version, which is 20 bytes (replace
<> with your boolean):
However, notice that this doesn't work for emojis or Unicode characters, and they will return
� if you try using them.
In the scratchblocks3 visual syntax (backwards-compatible with scratckblocks2 syntax), you can auto-complete the brackets.
E.g. The hello, world program:
when gf clicked say[hello, world]
Can be golfed into:
when gf clicked say[hello, world
In addition, the end statement of switching structures is auto-completed at the end. So instead of
define f(n set[i v]to(1 set[o v]to( repeat(length of(n repeat((2)-((i)mod(2 set[o v]to(join(o)(letter(i)of(n end change[i v]by(1
You could do (-4 bytes)
define f(n set[i v]to(0 set[o v]to( repeat(length of(n change[i v]by(1 repeat((2)-((i)mod(2 set[o v]to(join(o)(letter(i)of(n
The previous consensus for output in Scratch was that you had to
say the output. However, this doesn't really make sense, since variables are automatically displayed in Scratch if not unchecked in the interface, just as
say is automatically displayed if the sprite is not checked as hidden.
Now, per this consensus, it's allowed to just output by writing a global variable, which can in some cases save many bytes.
For example, this (meaningless) code:
repeat(10 change[i v]by(1 if<(i)>5>then set[a v]to((i)*(2 end end say(a
Can become just:
repeat(10 change[i v]by(1 if<(i)>5>then set[a v]to((i)*(2