Code golf this function to be a lot shorter. You only get points if it's <200 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 <200 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; } } |
Okay, let's golf this! The original code steps through a sequence of 8 states, setting 4 digital pins in each state. This pattern can be encoded into an array. **Analysis:** 1. **Pattern:** The sequence of pin states (Pin1, Pin2, Pin3, Pin4) is: * 0: 0001 (Decimal 1) * 1: 0011 (Decimal 3) * 2: 0010 (Decimal 2) * 3: 0110 (Decimal 6) * 4: 0100 (Decimal 4) * 5: 1100 (Decimal 12) * 6: 1000 (Decimal 8) * 7: 1001 (Decimal 9) 2. **Loop:** The outer loop runs `xw` times. 3. **State:** The `Steps` variable cycles 0-7. 4. **Output:** Four `digitalWrite` calls per step. **Golfing Strategy:** 1. Store the patterns in an array. 2. Use a loop for the steps (`xw`). 3. Use the loop counter modulo 8 (or a separate counter) to index the pattern array. 4. Use bitwise operations to extract the state for each pin from the pattern. 5. Use a nested loop (1 to 4) for the `digitalWrite` calls. 6. Shorten variable names and use compact loop structures. **Golfed Code:**
1 | void stepper(int w){int p[]={1,3,2,6,4,12,8,9},s=0,i;while(w--){for(i=0;i<4;)digitalWrite(++i,p[s]>>(3-i)&1);s=++s&7;}} |
1 | voidstepper(intw){intp[]={1,3,2,6,4,12,8,9},s=0,i;while(w--){for(i=0;i<4;)digitalWrite(++i,p[s]>>(3-i)&1);s=++s&7;}} |
I extracted the following code from that output:
1 2 3 | #include <Arduino.h> // Assuming digitalWrite is from Arduino environment void stepper(int w){int p[]={1,3,2,6,4,12,8,9},s=0,i;while(w--){for(i=0;i<4;)digitalWrite(++i,p[s]>>(3-i)&1);s=++s&7;}} |
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 | #include <Arduino.h> // Assuming digitalWrite is from Arduino environment void stepper(int w){int p[]={1,3,2,6,4,12,8,9},s=0,i;while(w--){for(i=0;i<4;)digitalWrite(++i,p[s]>>(3-i)&1);s=++s&7;}} #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:2:10: fatal error: Arduino.h: No such file or directory
2 | #include <Arduino.h> // Assuming digitalWrite is from 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