Write a Rectangular Program that Outputs the Number of Times it was Rotated

64

9

The title says it all. Your goal is to write a program that forms a w×h rectangle of characters that can be rotated and re-run to output the number of 90° Counter-Clockwise (CCW) rotations that have been done.

For example, if the 3×2 program

abc
def

solved the problem, it would initially output 0, and successive rotations of 90° CCW

cf    fed    da
be    cba    eb
ad           fc

would output 1, 2, and 3 respectively.

Using comments makes this a trivial task is most languages. In Ruby for example, it can be done in a 7×7 rectangle:

###p###
### ###
###1###
p 0#2 p
###3###
### ###
###p###

The challenge is to do this without any sort of comments.

Scoring

Your score is w*h, the area of your rectangle. Newlines are excluded. In other words, code-golf, newlines not counted.

The score for the Ruby example is 49 (though of course it is invalid since it has comments).

Notes

  • Your code must really be rectangular with no missing characters at the end of lines.
  • If you wish you may output other legal "mod 90°" values instead of 0 1 2 3. So 8 is fine instead of 0, and -1 is fine instead of 3, etc.
  • The output may go to the console or into a file.
  • Standard loopholes apply.

I hope this, my first question, really intrigues some people. Enjoy!

Calvin's Hobbies

Posted 2014-07-08T21:50:11.567

Reputation: 84 000

I think since a 0x0 rectangle has no well-defined rotation, any output is acceptable--including the null output (e.g. what the Python program `` would output). – imallett – 2015-02-05T07:51:49.333

1To be more specific about what a comment is, is a comment any unevaluated code? Unparsed code? – isaacg – 2014-07-08T21:59:47.833

I mean that none of your language's traditional "comment characters" should appear in any of the 4 rotated versions. So for C++, two slashes next to each other should never appear, though one may be used alone. Likewise with /*. I hope that clarifies it. – Calvin's Hobbies – 2014-07-08T22:09:51.837

What about languages that do not have comment characters? – isaacg – 2014-07-08T22:19:22.003

So code like echo 0;exit;e in bash is allowed? – jimmy23013 – 2014-07-08T22:22:13.833

If there is no way to comment then you needn't worry. @user23013 That bash is fine. – Calvin's Hobbies – 2014-07-08T22:40:53.393

can the program throw errors/exceptions after outputting the answer? – xem – 2014-07-09T07:42:45.990

@xem I don't think so. The program should be syntactically legal and be able to run without errors any way it is rotated. – Calvin's Hobbies – 2014-07-09T07:50:24.660

fair enough. I posted my JS solution (score=9) without error :) – xem – 2014-07-09T08:13:00.420

edit: JS score = 4 – xem – 2014-07-09T09:05:28.467

Answers

42

APL (1x3 = 3)

5!3

This solution uses the extra rule that any output that is correct mod 4 works.

In APL, x!y is the number of way to choose x elements from y, commonly known as binom(y,x) or choose(y,x). Let's check that each rotation gives the right answer.

0 rotations

5!3

There's no way to choose 5 elements from 3, so we get 0, which is automatically printed.

1 CCW rotation

3
!
5

APL happily evaluates each line, getting the number 3, the operator !, and then the number 5, printing only the last of these (5), which is 1 mod 4.

2 CCW rotations

3!5

This is binom(5,3), which is (5*4*3*2*1)/(3*2*1)/(2*1) = 10, which is 2 mod 4.

3 CCW rotations

5
!
3

As before, only the last-evaluated value of 3 is printer.

I don't actually know APL, so please tell me if I got any of the explanation wrong. I found it by trial and error as the first language on this site that:

  1. Automatically prints the result of an expression
  2. Given multiple lines of expressions, only outputs the last one
  3. Has no issue with an operator standing alone on a line
  4. Takes operators infix
  5. Has a single-character arithmetic binary operator that is asymmetric (aRb != bRa), and flexible enough to return a variety of numbers.

For (5), I went down the list of APL dyadic functions. My first candidate operation was the integer division / of C and Python 2, but APL division ÷ gives floats. Exponentiation is tempting, but fails because a and a^b have the same parity but are gotten by consecutive rotations (unless b=0, but then b^a=0). Boolean operators like < give 0 and 1 180 degrees apart, which doesn't work. Finally, I found the binomial operator ! and tried numbers until I got some that work.

Thanks to Quincunx for his confidence that there exists a smaller solution than 2x2.

xnor

Posted 2014-07-08T21:50:11.567

Reputation: 115 687

Actually, doesn't APL print both the 3 and the 5 in the 90° rotation? – FUZxxl – 2015-04-08T11:14:15.603

@FUZxxl I think this only works in ngn/apl. – Adám – 2016-11-28T09:36:11.757

6Man, it's nice to see an answer that uses a non-esoteric language and wins. – Stuart P. Bentley – 2014-07-12T18:40:16.180

I've accepted this as the answer since it is the shortest according to my rules, but I want to make Ventero's answer (http://codegolf.stackexchange.com/a/33162/26997) a very honorable mention. It follows the true essence of the problem.

– Calvin's Hobbies – 2014-07-15T12:43:46.963

It also works in J in the exact form you gave. – ɐɔıʇǝɥʇuʎs – 2014-09-01T15:09:06.063

41

Ruby, 7×9 (63)

 30;p  
0||p=p 
0|0;p;p
;p;p|p;
p=p ||0
;p   p;
2||p =p
 00;1  
     p 

A bit longer than the other solution, but at least this solution doesn't depend on any implicit printing or rule abuse. For all four rotations, the full code is parsed and other than some short-circuiting, all of it is executed. Surprisingly, there's absolutely no symmetry in the code

This solution relies on the fact that it's still possible to call the p function (which is used to print the numbers) even if a variable with the same name has already been defined. For example, something like p p calls the function p with the variable p as argument (thus, printing the value of p).

Explanation for some of the common expressions used in the code:

  • p: As mentioned above, this is either a function call or a variable. When the variable is not defined, this calls the function p without arguments, which does nothing and returns nil.
  • p p: Prints the variable p.
  • p|x: When p is the function, this is identical to nil|x, which returns true/false depending on the value of x. If p is an integer, it's bitwise or. Either way, this statement has no side effect.
  • p=p||x: Effectively the same as p||=x (conditional assignment) with the advantage of being syntactically valid and a no-op when reversed.

Symmetric version (9×10 = 90)

    p    

  0 * 0  
  00100  
  0||2* p
p *0||0  
  00300  
  0 * 0  

    p    

This is the shortest symmetric solution (C2 when ignoring the numbers to print) I could come up with.

Test script

Here's a test script to verify the code above (the # at the line ends have been added so that the whitespace doesn't get stripped and are removed before execution):

rotate=->s{s.split($/).map{|i|i.chars.reverse}.transpose.map(&:join).join($/)}

s=<<EOD.gsub(?#,"")
 30;p  #
0||p=p #
0|0;p;p#
;p;p|p;#
p=p ||0#
;p   p;#
2||p =p#
 00;1  #
     p #
EOD


puts ">>> 0°"
eval s
puts ">>> 90°"
eval rotate[s]
puts ">>> 180°"
eval rotate[rotate[s]]
puts ">>> 270°"
eval rotate[rotate[rotate[s]]]

Ventero

Posted 2014-07-08T21:50:11.567

Reputation: 9 842

10It may not be the shortest but this is exactly the kind of obfuscated brilliance I was looking for :D – Calvin's Hobbies – 2014-07-08T23:39:10.800

1@Calvin'sHobbies Does this meet the "Your code must really be rectangular with no missing characters at the end of lines" restriction? – Joshua Taylor – 2014-07-10T15:00:10.270

@JoshuaTaylor It's rectangular, some lines are just padded with spaces (which, as far as I'm concerned, is a character). If that wouldn't meet the restriction for whatever reason, I could also pad the lines with semicolons instead ... – Ventero – 2014-07-10T15:06:50.847

@Ventero I certainly hope this legal; I'm just trying to understand what was meant in the question. – Joshua Taylor – 2014-07-10T15:10:04.057

@JoshuaTaylor Woops, sorry, didn't notice you were asking Calvin'sHobbies. – Ventero – 2014-07-10T15:49:17.487

@Ventero No worries. I just asked it here rather than on the main question because in this we have an example. :) – Joshua Taylor – 2014-07-10T15:54:10.270

1@Ventero Padding with spaces (or really anything besides comments and newlines) is just fine. – Calvin's Hobbies – 2014-07-10T18:52:59.017

32

GolfScript, 4 (2x2)

43
12

Prints 4312 which is 0 (mod 4). The rotations print 3241 (1 mod 4), 2134 (2 mod 4), and 1423 (3 mod 4).

Prompted by:

If you wish you may output other legal "mod 90°" values instead of 0 1 2 3. So 8 is fine instead of 0, and -1 is fine instead of 3, etc.

There are actually many sets of numbers for which this works. I found these with this Python program:

def f(a,b,c,d):
    return int("%i%i%i%i"%(a,b,c,d))
for a in range(10):
    for b in range(10):
        for c in range(10):
            for d in range(10):
                candidate = f(a,b,c,d) % 4 == 0
                candidate &= f(b,d,a,c) % 4 == 1
                candidate &= f(d,c,b,a) % 4 == 2
                candidate &= f(c,a,d,b) % 4 == 3
                if candidate:
                    print("%i, %i, %i, %i"%(a,b,c,d))

Although the program outputs 0s (which probably wouldn't work), the valid solutions are of the form

ab
cd

Where a∈{4,8}, b∈{3,7}, c∈{1,5,9}, d∈{2,6}. IE (a,b,c,d)∈{4,8}×{3,7}×{1,5,9}×{2,6} which is 24 solutions.

Justin

Posted 2014-07-08T21:50:11.567

Reputation: 19 757

Thought I'd just say: I accidentally deleted a relevant comment: My point was that 2x1 could be possible because the newline due to the rotation produces 4 different possible programs. – Justin – 2015-05-31T04:50:43.393

7Very clever. I honestly thought that extra rule was innocuous. – Calvin's Hobbies – 2014-07-08T23:24:23.307

Don't forget to count the newline as a character. – isaacg – 2014-07-08T23:27:13.000

4@Everybody Note that this is not the smallest possible program. A 2x1 is possible, and it is the smallest possible. So get to work! – Justin – 2014-07-08T23:37:05.130

An equivalent python program: x=[print("%i, %i, %i, %i"%(a,b,c,d))for a,b,c,d in __import__('itertools').product(*(range(10),)*4)if int("%i%i%i%i"%(a,b,c,d))%4==0and int("%i%i%i%i"%(b,d,a,c))%4==1and int("%i%i%i%i"%(d,c,b,a))% 4==2and int("%i%i%i%i"%(c,a,d,b))%4==3]. One liner ftw! – Justin – 2014-07-09T00:28:01.130

1@isaacg Your score is w*h, the area of your rectangle. Newlines are excluded. In other words, code-golf, newlines not counted. – undergroundmonorail – 2014-07-09T02:03:21.970

2@Quincunx Well then post it! – tomsmeding – 2014-07-10T12:41:48.783

@tomsmeding I said that a 2x1 is a possible solution (a 3x1 is also a possibility). I didn't say that I know a language or a program that could do it. :-/ – Justin – 2014-07-10T14:27:38.653

1Assuming the language here simply prints the last number it evaluates, I don't believe a 1n (one-number) solution exists for any n. This is because the parity of the whole number equals the parity of its rightmost digit, but rotations 90 degrees apart must yield different parities. So, `22` is the minimum for this approach. – xnor – 2014-07-10T20:10:21.623

@Quincunx I see. You can have a 1*3 solution of 3/5 if you have a language that returns the last value it evaluates, has / as integer division ignoring remainder, and doesn't mind a lone number or function operation on a line. – xnor – 2014-07-10T20:26:46.843

30

Python - 23 x 23 = 529

Ok, this question has already a winner, but there is no Python solution, yet. So I thought about it - heavily! - and found a way to make the bulky print command working in any direction without producing errors when parsed from one of the other directions.

The breakthrough was the following line:

'"\'';forward_code;"';backward_code;""\'"''

While the forward_code is executed, the backward_code is part of a string and thus not printed. This is exactly the other way around when reading backwards.

So combined with two more directions and fine-tuned to get all quotes matching correctly I end up with the following solution:

''"''""''"''"''"'"''""'
"  ""                 "
"  \\                 "
'"\'';print 1;"'""\'"''
'"\''"';3 tnirp;""\'"''
"  ;""                "
"  p'                 "
'  r;                 '
'  i2                 '
"  n                  "
"  tt                 "
'   n                 '
'  4i                 '
"  ;r     .-=<>=-.    "
' \"p    /__----__\   '
"  ';'  |/ (')(') \|  "
"  ""    \   __   /   "
'  ""    .`--__--`.   '
"  \\   /    :|    \  "
'  ''  (_)   :|   (_) '
'  ""    |___:|____|  '
"  ''    |_________|  "
''"''""''"''"''"'"''""'

Edit: I found a way to deal with all that whitespace. ;)

Falko

Posted 2014-07-08T21:50:11.567

Reputation: 5 307

Is there any way to also put p=print in the file, since you've got so much whitespace currently? (Python 3, of course) – isaacg – 2014-08-22T00:09:44.117

@isaacg: I don't think so. The definition p=print is also lengthy. And more importantly: You can't reuse p after rotating the code! – Falko – 2014-08-22T00:18:52.980

I guess you're right. It's two bad, though. – isaacg – 2014-08-22T00:21:02.827

12Nominated: Best Use of Whitespace Award. – primo – 2014-09-01T13:41:07.567

24

BASIC, 64

Won't win, but here it is anyway. (Tested in Chipmunk Basic)

?0:END:?
:::::::1
D:::::::
N::::::E
E::::::N
:::::::D
3:::::::
?:DNE:2?

Note: ? is shorthand for PRINT in various dialects of BASIC. Although there are lots of syntax errors in the code, the END statement in the first line prevents them from being seen by the interpreter.

r3mainer

Posted 2014-07-08T21:50:11.567

Reputation: 19 135

1Actually, your scores are 64 and 16, respectively. Newlines don't count. Also, why not split the answer? – Justin – 2014-07-08T23:26:41.070

Oh, missed that bit. I would have split the answers if they weren't occupying joint last place. There doesn't seem to be much point otherwise :-) – r3mainer – 2014-07-08T23:29:22.613

You're not last anymore :-) – Justin – 2014-07-08T23:31:31.047

I'd give you bonus points for getting a nice round number of characters. The actual +1 is for the creative use of END though :) – CompuChip – 2014-07-10T14:15:36.217

21

Pyth, 9 characters (3x3)

0 1

3 2

In pyth, everything is printed by default, unless it is preceded by a space. Lines after the first line are for user input, and are not evaluated in this program.

Another way to get 9 characters:

"0"
3 1
"2"

Pyth 1.0.5, 4 characters

While recent changes to pyth have made 2 digit numbers harder to generate (A change that I am considering reverting), older versions of Pyth have easy two digit number generation, which, combined with the implicit printing and the fact that all lines but the first are ignored, gives the following solution:

32
41

Prints 32,21,14,43.

isaacg

Posted 2014-07-08T21:50:11.567

Reputation: 39 268

Well, that's just fun. +1 – seequ – 2014-07-08T22:36:06.577

Shucks, I was hoping it wasn't that easy. You are missing 3 characters on your middle line but I'm guessing that's due to the auto-formatting here. – Calvin's Hobbies – 2014-07-08T22:50:32.387

@Calvin'sHobbies Sorry, I see. It chomped my trailing spaces. – isaacg – 2014-07-08T22:53:07.490

@Quincunx Oh, I missed that part of the scoring. Thanks for the fixes. – isaacg – 2014-07-08T23:29:37.393

18

Befunge, 16

0.@1
@@@.
.@@@
3@.2

Explanation: Digits from 0 to 9 push the corresponding number onto the stack, . pops a value from the stack and prints it as an integer, and @ ends the program.

(tested here)

r3mainer

Posted 2014-07-08T21:50:11.567

Reputation: 19 135

Befunge!!! Still my favourite language of all times ever forever eternally so! – steffen – 2017-05-04T20:13:56.887

Doesn't this output the number of times it was rotated counterclockwise? – seequ – 2014-07-10T16:23:34.373

@TheRare Yes. It does. That is what it should do. – Justin – 2014-07-10T20:32:08.887

1I seem to be utterly blind. Have a +1 because of that. – seequ – 2014-07-10T20:43:01.180

16

Piet, 49

A Piet Program

I made a point only to use yellow and red colors, and to try and make it roughly symmetrical. When rotated, it prints 0, 1, 2 or 3. Exiting the program in Piet is hard, and takes up around half the space in the picture, unfortunately.

Tryth

Posted 2014-07-08T21:50:11.567

Reputation: 750

1Seems like the right tool for the job. – Robert Fraser – 2016-04-06T07:38:07.597

O_o, I cried finding out about this programming language! Just now. Beautiful. In so many ways! Thank you! – steffen – 2017-05-04T20:21:38.317

15

GNU dc, 6 (3x2)

I think this is the shortest answer not to require the "mod 90°" rule-relaxation:

3z1
0p2

Outputs 0, 1, 2 or 3 for each rotation.

For the 0, 2 and 3 rotations, the p simply pops and prints the last number literal to have been pushed to the stack. For the 1 rotation, the z pushes the current stack depth (1) to the stack, then the p pops and prints it.

Digital Trauma

Posted 2014-07-08T21:50:11.567

Reputation: 64 644

It does affect the golf score, but negatively, since newlines are not counted, but slashes are. – M.Herzkamp – 2015-08-31T11:58:40.900

@M.Herzkamp My assumption was that Neil meant 311\n0p2, where \n is a newline character. Otherwise it would be meaningless within the context of dc. – Digital Trauma – 2015-08-31T17:35:35.100

1So 311/0p2 would also work? – Neil – 2014-07-13T09:18:01.060

@Neil Yes, good one. Doesn't affect the golf score though :) – Digital Trauma – 2014-07-14T14:51:35.140

10

GolfScript, 9 (3x3)

0}1
} }
3}2

Sort of abusing the rules. The } happens to end the program if there is no matching {, and the contents of the stack are printed at program end.

Justin

Posted 2014-07-08T21:50:11.567

Reputation: 19 757

Don't forget to count the newline as a character. – isaacg – 2014-07-08T23:27:33.867

2@isaacg Your score is w*h, the area of your rectangle. Newlines are excluded. In other words, code-golf, newlines not counted. – undergroundmonorail – 2014-07-09T02:02:47.457

I didn't know that } can be unbalanced. Nice trick. – Peter Taylor – 2014-07-09T07:00:39.917

9

JavaScript, 4

03
12

When you execute this program (or a rotation of this program) in a javaScript console, only the last line is evaluated and echoed in the console.

So:

12 modulo 4 == 0
01 modulo 4 == 1
30 modulo 4 == 2
23 modulo 4 == 3

Here are all the similar 2x2 programs that work too:

03
12

03
16

03
52

03
56

03
92

03
96

07
12

07
16

07
52

07
56

07
92

07
96

43
12

43
16

43
52

43
56

43
92

43
96

47
12

47
16

47
52

47
56

47
92

47
96

83
12

83
16

83
52

83
56

83
92

83
96

87
12

87
16

87
52

87
56

87
92

87
96

In other terms,

ab
cd

where a is in [0,4,8], b is in [3,7], c is in [1,5,9], and d is in [2,6]

xem

Posted 2014-07-08T21:50:11.567

Reputation: 5 523

8

CJam / GolfScript - 3*3

2;3
;7;
1;0

The semicolon pops the previous number, thus only the bottom right corner is printed.

aditsu quit because SE is EVIL

Posted 2014-07-08T21:50:11.567

Reputation: 22 326

5

Aheui, 8

바몽희뷸
뷷희몽반

Since Aheui does not have a letter that pushes 1 onto the stack, I decided to print 0, 5, 2, and 3.

Explanation: 바 and 반 push 0 and 2, respectively, onto the stack and moves the cursor right by one character. 뷸 and 뷷 push 5 and 3, respectively, onto the stack and moves the cursor down by two characters. 몽 pops and prints the number in the stack and moves the cursor up by one character. 희 terminates the program.

fsfd1100

Posted 2014-07-08T21:50:11.567

Reputation: 849

5

JavaScript

(Entered in browser console, shell or another REPL, so result is printed)

1+2
-3-
4+5

Should work for any other language with expressions, non-significant newlines and automatic printing of the result.

lrn

Posted 2014-07-08T21:50:11.567

Reputation: 521

2I like the idea behind this, but doesn't it always print 1 (mod 4)? – zennehoy – 2014-07-10T15:51:23.043

2A simpler variation might be '2,3\n,0,\n1,0'. – Keen – 2014-07-10T17:43:33.897

It does give different results when rotated. @Cory, That's clever! I'm too used to working in a language without the comma operator. – lrn – 2014-07-10T20:01:46.030

@lrn Yes, it gives different results, but that isn't the requirement. The program has to print 0 (mod 4) when not rotated, and 1, 2 or 3 (mod 4) when rotated the respective number of times... – zennehoy – 2014-07-11T13:48:28.910

The second note of the original poster allows any values for the rotated versions, as long as they are distinct. – lrn – 2014-07-11T23:58:29.577

@lrn I don't think so, read it again – aditsu quit because SE is EVIL – 2014-07-15T16:23:04.260

5

Matlab/Octave - 144 100

Golfed: 10 x 10 = 100

....d.....
....i.....
....s.....
... p2 ...
disp  1...
...3  psid
... 4p ...
.....s....
.....i....
.....d....

Alternative solution: 15 x 15 = 225

.......d.......
.......i.......
.......s.......
...    p    ...
...         ...
...    4    ...
...    .    ...
disp 1...3 psid
...    .    ...
...    2    ...
...         ...
...    p    ...
.......s.......
.......i.......
.......d.......

Falko

Posted 2014-07-08T21:50:11.567

Reputation: 5 307

Can the first solution be reduced to size 8x8, if vrtical and horizontal operators 'disp' share letter 'p'?
...d....
...i....
...s2...
disp 1.. ..3 psid
...4s...
....i...
....d...
– AMK – 2014-09-01T15:26:50.967

@AMK: Unfortunately, this produces a syntax error in line ..3 psid. You need at least three dots at the beginning of each line to indicate a line break and to ignore the remaining characters. – Falko – 2014-09-01T15:53:42.317

5

Perl 5x7 (35)

1+p+t+1
-print+
1+i+i+1
+tnirp+
1+t+p+1

A bit late to the party. The solitary - determines which number is printed.

primo

Posted 2014-07-08T21:50:11.567

Reputation: 30 891

3

Befunge, 12 (6x2)

I Managed to come up with a slight improvement on the existing Befunge answer by making the most of Befunge's two-dimensional nature and having the code path run vertically in two of the orientations.

0.@.1v
v3.@.2

Try it online: Starting 0, Rotation 1, Rotation 2, Rotation 3.

James Holderness

Posted 2014-07-08T21:50:11.567

Reputation: 8 298

3

JavaScript, 3

2
1
4

It works... in base 7.

Base 9 version:

2
7
0

Explanation

When run interactively, e.g. from a debugging console, the value of the last statement/expression will be output.

47 = 4100 (mod 4)
4127 = 205101 (mod 4)
27 = 2102 (mod 4)
2147 = 109103 (mod 4)

Similar solutions could be found for any odd base.

user29124

Posted 2014-07-08T21:50:11.567

Reputation: 61

This was flagged, but I don't understand the question or the answer so I had to skip it. Would be nice if downvoters left a comment explaining their downvotes. – Rainbolt – 2014-07-11T01:56:18.163

@Rusher I suspect they didn't understand the base 7 bit. – primo – 2014-07-11T06:19:23.703

2

Marbelous, 7*14 = 98

.. \/ \/ .. ..
.. 31 \\ 32 \/
\/ \\ \/ \\ \/
\/ 30 \\ 33 ..
.. .. \/ \/ ..

Blake Thomas

Posted 2014-07-08T21:50:11.567

Reputation: 51

Are you expecting each cell to remain intact when rotated? – Sparr – 2015-06-09T18:26:37.680

2

Argh!/Aargh! (4*4=16)

What was that about using the right tool for the job? There are no comments (in the language in general).

The entire family of programs (generated in J: ((|.@:|:) ^: (i. 4)) >'hpqh';'q01p';'p32q';'hqph' or ((|.@:|:) ^: (i. 4)) 4 4 $ 'hpqhq01pp32qhqph')

hpqh
q01p
p32q
hqph

rotated once:

hpqh
q12p
p03q
hqph

rotated twice:

hpqh
q23p
p10q
hqph

rotated three times:

hpqh
q30p
p21q
hqph

To explain this, it might be best to look at an "indented" version (That also works in all rotations):

hhpq h
  0  h
q   1p
p3   q
h  2  
h qphh

This version shows that the program consists of 4 separate parts, one for each individual rotation.

  • h - set control flow left

  • p - print item in data/code raster below it

  • q - quit the program

ɐɔıʇǝɥʇuʎs

Posted 2014-07-08T21:50:11.567

Reputation: 4 449

2

Floater - 9×5=45

enter image description here

Prints 4, 1, 2, or 3 to console.

Note that 'Black' is a valid instruction (NOP), and is syntactic. Without it, it can't find the starting position. Thus, all positions in the rectangle are occupied.

Mark Jeronimus

Posted 2014-07-08T21:50:11.567

Reputation: 6 451

1

Element, 2x3 = 6

1*
`2
3 

This is an improvement over the 3x3 naive solution, which has a ` in the middle with a number on each side. The 0 case, shown above, is the most interesting, since the * is used to multiply the 3 by nothing to get 0. Other than that, it's not that complicated.

If you find the space awkward, you can replace it with pretty much any other character, excluding []{}`_.

For reference, here are the other three rotations:

case 1
*2 
1`3

case 2
 3
2`
*1

case 3
3`1
 2*

PhiNotPi

Posted 2014-07-08T21:50:11.567

Reputation: 26 739

0

Chip, (2x5) 10

b~
+a
~t
e*
 f

* activates all neighbor elements: north, east, south and west (source)
~ if not activated from the west, activates the east neighbor (NOT-gate) (never activated here)
t terminates execution after printing the current byte
a sets the bit 0x01 of the output
b sets the bit 0x02 of the output
e sets the bit 0x10 of the output
f sets the bit 0x20 of the output
+ if activated by any neighbor, activate all other neighbors (wire)

Chip requires either the -w flag (to allow execution without input), or some input in order to run.

Prints 0, 1, 2, or 3 in ASCII. If code points 0x00 to 0x03 are desired, remove the e and f, then move the space up to fill the gap.

Phlarx

Posted 2014-07-08T21:50:11.567

Reputation: 1 366

0

Japt, 3 * 1 = 3 bytes

5zB

Try it online: as-is, rotated once, twice, thrice.

Outputs 0, 5, 2, 11 respectively.

The variable B holds the value 11, and Number.z(other) is floor division (everyone looked for apparently :p). For multi-line code, the last line is passed to output, which is simply a constant here.


2 * 2 = 4 bytes

2J
1T

Try it online: as-is, rotated once, twice, thrice.

Outputs 0, 21, 2, -1 respectively.

T holds 0, and J holds -1.

The trick is that, if two literals or variables are put side-by-side, a comma is inserted and the output is just the last one.

2 * 2 JS solution works in Japt too.

Bubbler

Posted 2014-07-08T21:50:11.567

Reputation: 16 616