Code golf this function to be a lot shorter. You only get points if it's <300 bytes (not counting whitespace). Keep the name `stepper`.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | void stepper(int xw) { int Steps = 0; for (int x = 0; x < xw; x++) { switch (Steps) { case 0: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 1); break; case 1: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 1); digitalWrite(4, 1); break; case 2: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 1); digitalWrite(4, 0); break; case 3: digitalWrite(1, 0); digitalWrite(2, 1); digitalWrite(3, 1); digitalWrite(4, 0); break; case 4: digitalWrite(1, 0); digitalWrite(2, 1); digitalWrite(3, 0); digitalWrite(4, 0); break; case 5: digitalWrite(1, 1); digitalWrite(2, 1); digitalWrite(3, 0); digitalWrite(4, 0); break; case 6: digitalWrite(1, 1); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 0); break; case 7: digitalWrite(1, 1); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 1); break; default: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 0); break; } Steps = (Steps + 1) % 8; } } |
Code golf this function to be a lot shorter. You only get points if it's <300 bytes (not counting whitespace). Keep the name `stepper`.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | void stepper(int xw) { int Steps = 0; for (int x = 0; x < xw; x++) { switch (Steps) { case 0: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 1); break; case 1: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 1); digitalWrite(4, 1); break; case 2: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 1); digitalWrite(4, 0); break; case 3: digitalWrite(1, 0); digitalWrite(2, 1); digitalWrite(3, 1); digitalWrite(4, 0); break; case 4: digitalWrite(1, 0); digitalWrite(2, 1); digitalWrite(3, 0); digitalWrite(4, 0); break; case 5: digitalWrite(1, 1); digitalWrite(2, 1); digitalWrite(3, 0); digitalWrite(4, 0); break; case 6: digitalWrite(1, 1); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 0); break; case 7: digitalWrite(1, 1); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 1); break; default: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 0); break; } Steps = (Steps + 1) % 8; } } |
1. **Table of Values:** | Steps | Pin 1 | Pin 2 | Pin 3 | Pin 4 | |---|---|---|---|---| | 0 | 0 | 0 | 0 | 1 | | 1 | 0 | 0 | 1 | 1 | | 2 | 0 | 0 | 1 | 0 | | 3 | 0 | 1 | 1 | 0 | | 4 | 0 | 1 | 0 | 0 | | 5 | 1 | 1 | 0 | 0 | | 6 | 1 | 0 | 0 | 0 | | 7 | 1 | 0 | 0 | 1 | 2. **Expressions:** Observing the table, we can derive the following expressions using bitwise operations: * Pin 1: `(Steps >> 2) & 1` (equivalent to `Steps >= 4`) * Pin 2: `(Steps >> 1) & 1` (equivalent to `Steps == 3 || Steps == 4 || Steps == 5`) * Pin 3: `(Steps ^ (Steps >> 1)) & 1` (equivalent to `Steps == 1 || Steps == 2 || Steps == 7` ) * Pin 4: `Steps & 1` (equivalent to `Steps % 2 == 0`) 3. **Short Function:**
1 2 3 4 5 6 7 8 | void stepper(int xw) { for (int x = 0, Steps = 0; x < xw; x++, Steps = (Steps + 1) % 8) { digitalWrite(1, (Steps >> 2) & 1); digitalWrite(2, (Steps >> 1) & 1); digitalWrite(3, (Steps ^ (Steps >> 1)) & 1); digitalWrite(4, Steps & 1); } } |
1 2 3 4 | void stepper(int xw) { for (int x = 0, s = 0; x < xw; x++, s = ++s % 8) for(int i=1; i<5; i++) digitalWrite(i, (s >> (4-i)) & (i!=3 ? 1 : (1 ^ (s>>1)&1) )); } |
I extracted the following code from that output:
1 2 3 4 5 | ++ void stepper(int xw) { for (int x = 0, s = 0; x < xw; x++, s = ++s % 8) for(int i=1; i<5; i++) digitalWrite(i, (s >> (4-i)) & (i!=3 ? 1 : (1 ^ (s>>1)&1) )); } |
Running the following program:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | ++ void stepper(int xw) { for (int x = 0, s = 0; x < xw; x++, s = ++s % 8) for(int i=1; i<5; i++) digitalWrite(i, (s >> (4-i)) & (i!=3 ? 1 : (1 ^ (s>>1)&1) )); } #include<stdio.h> #include<stdlib.h> #include <stdio.h> int out = 0; int digitalWrite(int pin, int value) { out *= 101; out += pin; out *= 97; out += value; return out; } int main() { int answer = (stepper(100),out); int expected = -1475775710; if (answer != expected) { printf("Wrong answer; got %d instead of %d.\n", answer, expected); exit(1); } printf("All tests passed\n"); } |
main.c:1:1: error: expected identifier or '(' before '++' token
1 | ++
| ^~
main.c: In function 'main':
main.c:26:15: warning: implicit declaration of function 'stepper' [-Wimplicit-function-declaration]
26 | int answer = (stepper(100),out);
| ^~~~~~~
main.sh: line 2: ./a.out: No such file or directory
Testing if the previous output contains the string All tests passed
: False
Resulting in output: True
Code golf this function to be a lot shorter. You only get points if it's <300 bytes (not counting whitespace). Keep the name `stepper`.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | void stepper(int xw) { int Steps = 0; for (int x = 0; x < xw; x++) { switch (Steps) { case 0: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 1); break; case 1: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 1); digitalWrite(4, 1); break; case 2: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 1); digitalWrite(4, 0); break; case 3: digitalWrite(1, 0); digitalWrite(2, 1); digitalWrite(3, 1); digitalWrite(4, 0); break; case 4: digitalWrite(1, 0); digitalWrite(2, 1); digitalWrite(3, 0); digitalWrite(4, 0); break; case 5: digitalWrite(1, 1); digitalWrite(2, 1); digitalWrite(3, 0); digitalWrite(4, 0); break; case 6: digitalWrite(1, 1); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 0); break; case 7: digitalWrite(1, 1); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 1); break; default: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 0); break; } Steps = (Steps + 1) % 8; } } |
Code golf this function to be a lot shorter. You only get points if it's <300 bytes (not counting whitespace). Keep the name `stepper`.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | void stepper(int xw) { int Steps = 0; for (int x = 0; x < xw; x++) { switch (Steps) { case 0: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 1); break; case 1: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 1); digitalWrite(4, 1); break; case 2: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 1); digitalWrite(4, 0); break; case 3: digitalWrite(1, 0); digitalWrite(2, 1); digitalWrite(3, 1); digitalWrite(4, 0); break; case 4: digitalWrite(1, 0); digitalWrite(2, 1); digitalWrite(3, 0); digitalWrite(4, 0); break; case 5: digitalWrite(1, 1); digitalWrite(2, 1); digitalWrite(3, 0); digitalWrite(4, 0); break; case 6: digitalWrite(1, 1); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 0); break; case 7: digitalWrite(1, 1); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 1); break; default: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 0); break; } Steps = (Steps + 1) % 8; } } |
1. **Table of Values:** | Steps | Pin 1 | Pin 2 | Pin 3 | Pin 4 | |---|---|---|---|---| | 0 | 0 | 0 | 0 | 1 | | 1 | 0 | 0 | 1 | 1 | | 2 | 0 | 0 | 1 | 0 | | 3 | 0 | 1 | 1 | 0 | | 4 | 0 | 1 | 0 | 0 | | 5 | 1 | 1 | 0 | 0 | | 6 | 1 | 0 | 0 | 0 | | 7 | 1 | 0 | 0 | 1 | 2. **Expression:** Observing the table, we can see patterns for each pin based on the `Steps` value: * Pin 1: `(Steps >> 2) & 1` (equivalent to `Steps >= 4`) * Pin 2: `(Steps >> 1) & 1` (equivalent to `Steps == 2 || Steps == 3 || Steps == 4 || Steps == 5`) * Pin 3: `Steps & 1 ^ (Steps >> 1) & 1` (equivalent to Steps == 1, 2, 4, 7) * Pin 4: `Steps & 1 ^ (Steps >> 2) & 1 ^ (Steps >> 3) & 1` (equivalent to 0, 1, 3, 7) 3. **Short Function:**
1 2 3 4 5 6 7 8 | void stepper(int xw) { for (int x = 0, Steps = 0; x < xw; x++, Steps = (Steps + 1) % 8) { digitalWrite(1, (Steps >> 2) & 1); digitalWrite(2, (Steps >> 1) & 1); digitalWrite(3, Steps & 1 ^ (Steps >> 1) & 1); digitalWrite(4, Steps & 1 ^ (Steps >> 2) & 1 ^ (Steps >> 3) & 1); } } |
1 2 3 4 5 6 7 8 | void stepper(int xw){ for(int x=0,s=0;x<xw;x++,s=(s+1)&7) { digitalWrite(1,s/4); digitalWrite(2,s/2&1); digitalWrite(3,s&1^s/2&1); digitalWrite(4,s&1^s/4^s/8); } } |
I extracted the following code from that output:
1 2 3 4 5 6 7 8 9 10 11 | ++ #include <Arduino.h> // Assuming Arduino environment void stepper(int xw){ for(int x=0,s=0;x<xw;x++,s=(s+1)&7) { digitalWrite(1,s/4); digitalWrite(2,s/2&1); digitalWrite(3,s&1^s/2&1); digitalWrite(4,s&1^s/4^s/8); } } |
Running the following program:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | ++ #include <Arduino.h> // Assuming Arduino environment void stepper(int xw){ for(int x=0,s=0;x<xw;x++,s=(s+1)&7) { digitalWrite(1,s/4); digitalWrite(2,s/2&1); digitalWrite(3,s&1^s/2&1); digitalWrite(4,s&1^s/4^s/8); } } #include<stdio.h> #include<stdlib.h> #include <stdio.h> int out = 0; int digitalWrite(int pin, int value) { out *= 101; out += pin; out *= 97; out += value; return out; } int main() { int answer = (stepper(100),out); int expected = -1475775710; if (answer != expected) { printf("Wrong answer; got %d instead of %d.\n", answer, expected); exit(1); } printf("All tests passed\n"); } |
main.c:1:1: error: expected identifier or '(' before '++' token
1 | ++
| ^~
main.c:2:10: fatal error: Arduino.h: No such file or directory
2 | #include <Arduino.h> // Assuming Arduino environment
| ^~~~~~~~~~~
compilation terminated.
main.sh: line 2: ./a.out: No such file or directory
Testing if the previous output contains the string All tests passed
: False
Resulting in output: True
Code golf this function to be a lot shorter. You only get points if it's <300 bytes (not counting whitespace). Keep the name `stepper`.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | void stepper(int xw) { int Steps = 0; for (int x = 0; x < xw; x++) { switch (Steps) { case 0: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 1); break; case 1: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 1); digitalWrite(4, 1); break; case 2: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 1); digitalWrite(4, 0); break; case 3: digitalWrite(1, 0); digitalWrite(2, 1); digitalWrite(3, 1); digitalWrite(4, 0); break; case 4: digitalWrite(1, 0); digitalWrite(2, 1); digitalWrite(3, 0); digitalWrite(4, 0); break; case 5: digitalWrite(1, 1); digitalWrite(2, 1); digitalWrite(3, 0); digitalWrite(4, 0); break; case 6: digitalWrite(1, 1); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 0); break; case 7: digitalWrite(1, 1); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 1); break; default: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 0); break; } Steps = (Steps + 1) % 8; } } |
Code golf this function to be a lot shorter. You only get points if it's <300 bytes (not counting whitespace). Keep the name `stepper`.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | void stepper(int xw) { int Steps = 0; for (int x = 0; x < xw; x++) { switch (Steps) { case 0: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 1); break; case 1: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 1); digitalWrite(4, 1); break; case 2: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 1); digitalWrite(4, 0); break; case 3: digitalWrite(1, 0); digitalWrite(2, 1); digitalWrite(3, 1); digitalWrite(4, 0); break; case 4: digitalWrite(1, 0); digitalWrite(2, 1); digitalWrite(3, 0); digitalWrite(4, 0); break; case 5: digitalWrite(1, 1); digitalWrite(2, 1); digitalWrite(3, 0); digitalWrite(4, 0); break; case 6: digitalWrite(1, 1); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 0); break; case 7: digitalWrite(1, 1); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 1); break; default: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 0); break; } Steps = (Steps + 1) % 8; } } |
1. **Table of Values:** | Steps | Pin 1 | Pin 2 | Pin 3 | Pin 4 | |---|---|---|---|---| | 0 | 0 | 0 | 0 | 1 | | 1 | 0 | 0 | 1 | 1 | | 2 | 0 | 0 | 1 | 0 | | 3 | 0 | 1 | 1 | 0 | | 4 | 0 | 1 | 0 | 0 | | 5 | 1 | 1 | 0 | 0 | | 6 | 1 | 0 | 0 | 0 | | 7 | 1 | 0 | 0 | 1 | 2. **Expressions:** Observing the table, we can derive the following expressions using bitwise operations: * Pin 1: `(Steps >> 2) & 1` * Pin 2: `(Steps >> 1) & 1` * Pin 3: `Steps & 1` * Pin 4: `(Steps == 0) || (Steps == 1) || (Steps == 7)` which simplifies to `(Steps & 1) ^ ((Steps >> 1) & 1)` 3. **Shorter Function:**
1 2 3 4 5 6 7 8 | void stepper(int xw) { for (int x = 0, Steps = 0; x < xw; x++, Steps = (Steps + 1) % 8) { digitalWrite(1, (Steps >> 2) & 1); digitalWrite(2, (Steps >> 1) & 1); digitalWrite(3, Steps & 1); digitalWrite(4, (Steps & 1) ^ ((Steps >> 1) & 1)); } } |
1 2 3 4 5 6 7 8 | void stepper(int xw){ for(int x=0,s=0;x<xw;x++,s=(s+1)&7) { digitalWrite(1,s>>2); digitalWrite(2,s>>1&1); digitalWrite(3,s&1); digitalWrite(4,(s&1)^(s>>1&1)); } } |
I extracted the following code from that output:
1 2 3 4 5 6 7 8 9 | ++ void stepper(int xw){ for(int x=0,s=0;x<xw;x++,s=(s+1)&7) { digitalWrite(1,s>>2); digitalWrite(2,s>>1&1); digitalWrite(3,s&1); digitalWrite(4,(s&1)^(s>>1&1)); } } |
Running the following program:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | ++ void stepper(int xw){ for(int x=0,s=0;x<xw;x++,s=(s+1)&7) { digitalWrite(1,s>>2); digitalWrite(2,s>>1&1); digitalWrite(3,s&1); digitalWrite(4,(s&1)^(s>>1&1)); } } #include<stdio.h> #include<stdlib.h> #include <stdio.h> int out = 0; int digitalWrite(int pin, int value) { out *= 101; out += pin; out *= 97; out += value; return out; } int main() { int answer = (stepper(100),out); int expected = -1475775710; if (answer != expected) { printf("Wrong answer; got %d instead of %d.\n", answer, expected); exit(1); } printf("All tests passed\n"); } |
main.c:1:1: error: expected identifier or '(' before '++' token
1 | ++
| ^~
main.c: In function 'main':
main.c:30:15: warning: implicit declaration of function 'stepper' [-Wimplicit-function-declaration]
30 | int answer = (stepper(100),out);
| ^~~~~~~
main.sh: line 2: ./a.out: No such file or directory
Testing if the previous output contains the string All tests passed
: False
Resulting in output: True
Code golf this function to be a lot shorter. You only get points if it's <300 bytes (not counting whitespace). Keep the name `stepper`.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | void stepper(int xw) { int Steps = 0; for (int x = 0; x < xw; x++) { switch (Steps) { case 0: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 1); break; case 1: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 1); digitalWrite(4, 1); break; case 2: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 1); digitalWrite(4, 0); break; case 3: digitalWrite(1, 0); digitalWrite(2, 1); digitalWrite(3, 1); digitalWrite(4, 0); break; case 4: digitalWrite(1, 0); digitalWrite(2, 1); digitalWrite(3, 0); digitalWrite(4, 0); break; case 5: digitalWrite(1, 1); digitalWrite(2, 1); digitalWrite(3, 0); digitalWrite(4, 0); break; case 6: digitalWrite(1, 1); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 0); break; case 7: digitalWrite(1, 1); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 1); break; default: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 0); break; } Steps = (Steps + 1) % 8; } } |
Code golf this function to be a lot shorter. You only get points if it's <300 bytes (not counting whitespace). Keep the name `stepper`.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | void stepper(int xw) { int Steps = 0; for (int x = 0; x < xw; x++) { switch (Steps) { case 0: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 1); break; case 1: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 1); digitalWrite(4, 1); break; case 2: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 1); digitalWrite(4, 0); break; case 3: digitalWrite(1, 0); digitalWrite(2, 1); digitalWrite(3, 1); digitalWrite(4, 0); break; case 4: digitalWrite(1, 0); digitalWrite(2, 1); digitalWrite(3, 0); digitalWrite(4, 0); break; case 5: digitalWrite(1, 1); digitalWrite(2, 1); digitalWrite(3, 0); digitalWrite(4, 0); break; case 6: digitalWrite(1, 1); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 0); break; case 7: digitalWrite(1, 1); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 1); break; default: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 0); break; } Steps = (Steps + 1) % 8; } } |
1. **Table of Values:** | Steps | Pin 1 | Pin 2 | Pin 3 | Pin 4 | |---|---|---|---|---| | 0 | 0 | 0 | 0 | 1 | | 1 | 0 | 0 | 1 | 1 | | 2 | 0 | 0 | 1 | 0 | | 3 | 0 | 1 | 1 | 0 | | 4 | 0 | 1 | 0 | 0 | | 5 | 1 | 1 | 0 | 0 | | 6 | 1 | 0 | 0 | 0 | | 7 | 1 | 0 | 0 | 1 | 2. **Expression:** Observing the table, we can see patterns for each pin based on the `Steps` value: * Pin 1: `(Steps >> 2) & 1` (equivalent to `Steps >= 4`) * Pin 2: `(Steps >> 1) & 1` (equivalent to `Steps == 3 || Steps == 4 || Steps == 5 || Steps ==6`) * Pin 3: `Steps & 1 ^ ((Steps >> 1) & 1)` (XOR - equivalent to `Steps == 1 || Steps == 2`) * Pin 4: `Steps & 1 ^ ((Steps >> 2) & 1)` (XOR - equivalent to `Steps == 0 || Steps == 1 || Steps == 7`) 3. **Shortened Function:**
1 2 3 4 5 6 7 8 | void stepper(int xw) { for (int x = 0, Steps = 0; x < xw; x++, Steps = (Steps + 1) % 8) { digitalWrite(1, (Steps >> 2) & 1); digitalWrite(2, (Steps >> 1) & 1); digitalWrite(3, Steps & 1 ^ ((Steps >> 1) & 1)); digitalWrite(4, Steps & 1 ^ (Steps >> 2)); //Simplified slightly } } |
1 2 3 4 5 6 7 8 | void stepper(int xw){ for(int x=0,s=0;x<xw;x++,s=(s+1)&7) { // Use &7 instead of %8 digitalWrite(1,s/4); // Integer division is equivalent to >> 2 and & 1 digitalWrite(2,s/2&1); // Combined >> 1 and & 1 digitalWrite(3,s&1^s/2&1); // Combined bitwise operations digitalWrite(4,s&1^s/4); // Combined bitwise operations } } |
I extracted the following code from that output:
1 2 3 4 5 6 7 8 9 10 11 | ++ #include <Arduino.h> void stepper(int xw){ for(int x=0,s=0;x<xw;x++,s=(s+1)&7) { // Use &7 instead of %8 digitalWrite(1,s/4); // Integer division is equivalent to >> 2 and & 1 digitalWrite(2,s/2&1); // Combined >> 1 and & 1 digitalWrite(3,s&1^s/2&1); // Combined bitwise operations digitalWrite(4,s&1^s/4); // Combined bitwise operations } } |
Running the following program:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | ++ #include <Arduino.h> void stepper(int xw){ for(int x=0,s=0;x<xw;x++,s=(s+1)&7) { // Use &7 instead of %8 digitalWrite(1,s/4); // Integer division is equivalent to >> 2 and & 1 digitalWrite(2,s/2&1); // Combined >> 1 and & 1 digitalWrite(3,s&1^s/2&1); // Combined bitwise operations digitalWrite(4,s&1^s/4); // Combined bitwise operations } } #include<stdio.h> #include<stdlib.h> #include <stdio.h> int out = 0; int digitalWrite(int pin, int value) { out *= 101; out += pin; out *= 97; out += value; return out; } int main() { int answer = (stepper(100),out); int expected = -1475775710; if (answer != expected) { printf("Wrong answer; got %d instead of %d.\n", answer, expected); exit(1); } printf("All tests passed\n"); } |
main.c:1:1: error: expected identifier or '(' before '++' token
1 | ++
| ^~
main.c:2:10: fatal error: Arduino.h: No such file or directory
2 | #include <Arduino.h>
| ^~~~~~~~~~~
compilation terminated.
main.sh: line 2: ./a.out: No such file or directory
Testing if the previous output contains the string All tests passed
: False
Resulting in output: True
Code golf this function to be a lot shorter. You only get points if it's <300 bytes (not counting whitespace). Keep the name `stepper`.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | void stepper(int xw) { int Steps = 0; for (int x = 0; x < xw; x++) { switch (Steps) { case 0: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 1); break; case 1: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 1); digitalWrite(4, 1); break; case 2: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 1); digitalWrite(4, 0); break; case 3: digitalWrite(1, 0); digitalWrite(2, 1); digitalWrite(3, 1); digitalWrite(4, 0); break; case 4: digitalWrite(1, 0); digitalWrite(2, 1); digitalWrite(3, 0); digitalWrite(4, 0); break; case 5: digitalWrite(1, 1); digitalWrite(2, 1); digitalWrite(3, 0); digitalWrite(4, 0); break; case 6: digitalWrite(1, 1); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 0); break; case 7: digitalWrite(1, 1); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 1); break; default: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 0); break; } Steps = (Steps + 1) % 8; } } |
Code golf this function to be a lot shorter. You only get points if it's <300 bytes (not counting whitespace). Keep the name `stepper`.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | void stepper(int xw) { int Steps = 0; for (int x = 0; x < xw; x++) { switch (Steps) { case 0: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 1); break; case 1: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 1); digitalWrite(4, 1); break; case 2: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 1); digitalWrite(4, 0); break; case 3: digitalWrite(1, 0); digitalWrite(2, 1); digitalWrite(3, 1); digitalWrite(4, 0); break; case 4: digitalWrite(1, 0); digitalWrite(2, 1); digitalWrite(3, 0); digitalWrite(4, 0); break; case 5: digitalWrite(1, 1); digitalWrite(2, 1); digitalWrite(3, 0); digitalWrite(4, 0); break; case 6: digitalWrite(1, 1); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 0); break; case 7: digitalWrite(1, 1); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 1); break; default: digitalWrite(1, 0); digitalWrite(2, 0); digitalWrite(3, 0); digitalWrite(4, 0); break; } Steps = (Steps + 1) % 8; } } |
1. **Truth Table:** | Steps | Pin 1 | Pin 2 | Pin 3 | Pin 4 | |---|---|---|---|---| | 0 | 0 | 0 | 0 | 1 | | 1 | 0 | 0 | 1 | 1 | | 2 | 0 | 0 | 1 | 0 | | 3 | 0 | 1 | 1 | 0 | | 4 | 0 | 1 | 0 | 0 | | 5 | 1 | 1 | 0 | 0 | | 6 | 1 | 0 | 0 | 0 | | 7 | 1 | 0 | 0 | 1 | 2. **Bitwise Expressions:** Observing the table, we can derive the following: * Pin 1: `(Steps >> 2) & 1` (equivalent to `Steps >= 4`) * Pin 2: `(Steps >> 1) & 1` XOR `(Steps >> 2) & 1` * Pin 3: `Steps & 1` XOR `(Steps >> 1) & 1` * Pin 4: `(Steps & 1)` XOR `(Steps >> 2) & 1` 3. **Initial Shortened Function:**
1 2 3 4 5 6 7 8 | void stepper(int xw) { for (int x = 0, Steps = 0; x < xw; x++, Steps = (Steps + 1) % 8) { digitalWrite(1, (Steps >> 2) & 1); digitalWrite(2, ((Steps >> 1) & 1) ^ ((Steps >> 2) & 1)); digitalWrite(3, (Steps & 1) ^ ((Steps >> 1) & 1)); digitalWrite(4, (Steps & 1) ^ ((Steps >> 2) & 1)); } } |
1 2 3 4 5 6 7 8 | void stepper(int xw){ for(int x=0,s=0;x<xw;x++,s=(s+1)&7) { digitalWrite(1,s/4); digitalWrite(2,(s/2)^s/4); digitalWrite(3,(s&1)^(s/2)); digitalWrite(4,(s&1)^s/4); } } |
I extracted the following code from that output:
1 2 3 4 5 6 7 8 9 10 11 | ++ #include <Arduino.h> // Assuming Arduino environment void stepper(int xw){ for(int x=0,s=0;x<xw;x++,s=(s+1)&7) { digitalWrite(1,s/4); digitalWrite(2,(s/2)^s/4); digitalWrite(3,(s&1)^(s/2)); digitalWrite(4,(s&1)^s/4); } } |
Running the following program:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | ++ #include <Arduino.h> // Assuming Arduino environment void stepper(int xw){ for(int x=0,s=0;x<xw;x++,s=(s+1)&7) { digitalWrite(1,s/4); digitalWrite(2,(s/2)^s/4); digitalWrite(3,(s&1)^(s/2)); digitalWrite(4,(s&1)^s/4); } } #include<stdio.h> #include<stdlib.h> #include <stdio.h> int out = 0; int digitalWrite(int pin, int value) { out *= 101; out += pin; out *= 97; out += value; return out; } int main() { int answer = (stepper(100),out); int expected = -1475775710; if (answer != expected) { printf("Wrong answer; got %d instead of %d.\n", answer, expected); exit(1); } printf("All tests passed\n"); } |
main.c:1:1: error: expected identifier or '(' before '++' token
1 | ++
| ^~
main.c:2:10: fatal error: Arduino.h: No such file or directory
2 | #include <Arduino.h> // Assuming Arduino environment
| ^~~~~~~~~~~
compilation terminated.
main.sh: line 2: ./a.out: No such file or directory
Testing if the previous output contains the string All tests passed
: False
Resulting in output: True