267 lines
5.0 KiB
Plaintext
267 lines
5.0 KiB
Plaintext
This file contains materials I created to teach programming. It is more or less a precursor to ΛV.
|
||
Since then, I have decided to replace the A for the upwards-pointing cursor with a capital lambda.
|
||
ΛV will also only have one of each condition and use ! to negate them.
|
||
|
||
|
||
Prerequisite:
|
||
```
|
||
|
||
_______________
|
||
| |
|
||
| |
|
||
| |
|
||
| |
|
||
| |
|
||
| |
|
||
| |
|
||
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
|
||
|
||
```
|
||
This needs to show up as a roughly square box.
|
||
|
||
|
||
1)
|
||
Let’s start out by familiarizing ourselves with what things look like:
|
||
|
||
Cursor:
|
||
`< A > V`
|
||
Wall/barrier:
|
||
`| _ ¯ #`
|
||
Goal:
|
||
`$`
|
||
|
||
```
|
||
_______________
|
||
| # $# |
|
||
| # ###### |
|
||
|#### # |
|
||
| > # |
|
||
|###### |
|
||
| |
|
||
| |
|
||
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
|
||
```
|
||
Available instructions:
|
||
step
|
||
left
|
||
right
|
||
|
||
Possible solution: step step step left step step step right step step step step step
|
||
|
||
|
||
2)
|
||
That’s quite simple. But it can get tedious really quickly:
|
||
|
||
```
|
||
_______________
|
||
|V#$ |
|
||
| ############# |
|
||
| # # |
|
||
| # # |
|
||
| # # |
|
||
| ############# |
|
||
| |
|
||
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
|
||
```
|
||
Available instructions:
|
||
step
|
||
left
|
||
right
|
||
repeat<NUMBER>(INSTRUCTIONS)
|
||
|
||
Possible solution: repeat<6>(step) left repeat<14>(step) left repeat<6>(step) left repeat<12>(step)
|
||
|
||
|
||
3)
|
||
Same concept, different problem:
|
||
```
|
||
_______________
|
||
|>## |
|
||
| ## |
|
||
|# ## |
|
||
|## ## |
|
||
| ## ## |
|
||
| ## ## |
|
||
| ## $# |
|
||
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
|
||
```
|
||
Avaliable instructions:
|
||
step
|
||
left
|
||
right
|
||
repeat<NUMBER>(INSTRUCTIONS)
|
||
|
||
Possible solution: repeat<6>(right step left step)
|
||
|
||
|
||
4)
|
||
Now in actual programming, running code repeatedly is a bit different.
|
||
Instead of running a set number of times, which is certainly possible but
|
||
not always desired, they usually run as long as a certain condition is met.
|
||
This is called a loop. The most basic form it is known as a "while loop".
|
||
```
|
||
_______________
|
||
| |
|
||
| |
|
||
|############ |
|
||
|> $# |
|
||
|############ |
|
||
| |
|
||
| |
|
||
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
|
||
```
|
||
Available instructions:
|
||
step
|
||
left
|
||
right
|
||
while<CONDITION>(INSTRUCTIONS)
|
||
|
||
Available conditions:
|
||
facing wall
|
||
not facing wall
|
||
|
||
Possible solution: while<not facing wall>(step)
|
||
|
||
|
||
Additional practice:
|
||
```
|
||
_______________
|
||
| #$ # |
|
||
| ## # |
|
||
| # # |
|
||
| # # |
|
||
| # # |
|
||
| # # |
|
||
| #A# |
|
||
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
|
||
```
|
||
|
||
|
||
5)
|
||
Let’s turn this up a notch (copy+paste is gonna be real handy for this one):
|
||
```
|
||
_______________
|
||
| |
|
||
| ############# |
|
||
| #$# # |
|
||
| # # # |
|
||
| # # # |
|
||
| # ########### |
|
||
|A# |
|
||
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
|
||
```
|
||
Available instructions:
|
||
step
|
||
left
|
||
right
|
||
while<CONDITION>(INSTRUCTIONS)
|
||
|
||
Available conditions:
|
||
facing wall
|
||
not facing wall
|
||
|
||
Possible solution: while<not facing wall>(step) right while<not facing wall>(step) right while<not facing wall>(step) right while<not facing wall>(step) right while<not facing wall>(step)
|
||
|
||
|
||
6)
|
||
Loops can also be nested inside other loops:
|
||
```
|
||
_______________
|
||
| |
|
||
| ############# |
|
||
| # # |
|
||
| # ######### # |
|
||
| # #$ # |
|
||
| # ########### |
|
||
|A# |
|
||
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
|
||
```
|
||
Available instructions:
|
||
step
|
||
left
|
||
right
|
||
while<CONDITION>(INSTRUCTIONS)
|
||
|
||
Available conditions:
|
||
facing wall
|
||
not facing wall
|
||
goal reached
|
||
goal not reached
|
||
|
||
Possible solution: while<goal not reached>(while<not facing wall>(step) right)
|
||
|
||
|
||
7)
|
||
We’ve already seen that conditions can be used to control loops. They can also be used to control if/else statements.
|
||
|
||
I am going to introduce a new item here:
|
||
`ó` apple
|
||
Pick up all the apples in the area.
|
||
You cannot use the "take" action when there is no apple to take.
|
||
|
||
```
|
||
_______________
|
||
| |
|
||
| |
|
||
| ##########|
|
||
| #$ ó ó <|
|
||
| ##########|
|
||
| |
|
||
| |
|
||
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
|
||
```
|
||
Available instructions:
|
||
step
|
||
left
|
||
right
|
||
take
|
||
while<CONDITION>(INSTRUCTIONS)
|
||
if<CONDITION>(INSTRUCTIONS)
|
||
if<CONDITION>(INSTRUCTIONS) else(INSTRUCTIONS)
|
||
|
||
Available conditions:
|
||
facing wall
|
||
not facing wall
|
||
goal reached
|
||
goal not reached
|
||
on apple
|
||
not on apple
|
||
|
||
Possible solution: while<goal not reached>(if<on apple>(take) step)
|
||
|
||
8)
|
||
Let’s do the same but more:
|
||
```
|
||
_______________
|
||
|ó $|
|
||
| ó ó |
|
||
| |
|
||
| ó |
|
||
| ó |
|
||
| ó ó |
|
||
|> ó ó|
|
||
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
|
||
```
|
||
Available instructions:
|
||
step
|
||
left
|
||
right
|
||
take
|
||
while<CONDITION>(INSTRUCTIONS)
|
||
if<CONDITION>(INSTRUCTIONS)
|
||
if<CONDITION>(INSTRUCTIONS) else(INSTRUCTIONS)
|
||
|
||
Available conditions:
|
||
facing wall
|
||
not facing wall
|
||
goal reached
|
||
goal not reached
|
||
on apple
|
||
not on apple
|
||
facing north
|
||
facing south
|
||
facing east
|
||
facing west
|
||
|
||
Possible solution: while<goal not reached>(if<on apple>(take) while<not facing wall>(step if<on apple>(take)) if<facing east>(left step left) else(right step right))
|