Easier communication means… ○ circular edition!

12

0

Based on this, but I was asked[​1​],[​2​] to do a graphical edition.

EASIER COMMUNICATION MEANS FASTER CODING MEANS FEWER CODERS MEANS…

Task

Generate a circular display of the text EASIER COMMUNICATION MEANS FASTER CODING MEANS FEWER CODERS MEANS . Any uppercase font goes. The letter tops must face out of the circle. Either the space before FEWER must be at the bottom (6 o'clock) or (for brownie points) your text must rotate.

Adám

Posted 2017-05-07T20:17:48.007

Reputation: 37 779

@Uriel Well, nominally, each letter takes 5.45°, so shall we say 5.4° to 5.5°? – Adám – 2017-05-08T15:05:27.610

I believe that would be a good precision, considering the 2/21 approximation error is small than 0.002. – Uriel – 2017-05-08T16:11:46.427

Answers

7

HTML and JS, 13 + 170 = 284 227 192 186 183 bytes

41 bytes saved thanks to @Shaggy

(x=c.getContext("2d")).translate(r=c.height/2,r)
for(i in t="CATION MEANS FASTER CODING MEANS FEWER CODERS MEANS EASIER COMMUNI"){x.rotate(2/21);x.fillText(t[i],0,-r*.8)}
<canvas id=c height=250 width=250>

The width and height set to 250 to allow better visibility were not included in the bytes count.

Uriel

Posted 2017-05-07T20:17:48.007

Reputation: 11 708

Reduce your JS to 223 bytes with (x=c.getContext("2d"))[t="translate"](r=c.height/2,r,i=66);r*=.8;while(i--){x.rotate(a=i*Math.PI/33);x[t](0,-r);x.fillText("EASIER COMMUNICATION MEANS FASTER CODING MEANS FEWER CODERS MEANS "[i],0,0);x[t](0,r);x.rotate(-a)}. – Shaggy – 2017-05-08T14:03:45.693

Or, reduce the latest version of your JS to 179 bytes with (x=c.getContext("2d")).translate(r=c.height/2,r);r*=.8;for(i in t="EASIER COMMUNICATION MEANS FASTER CODING MEANS FEWER CODERS MEANS "){x.rotate(Math.PI/33);x.fillText(t[i],0,-r)} – Shaggy – 2017-05-08T14:09:11.957

If you're happy to sacrifice a little bit of precision, you could replace Math.PI with 22/7 to save another 6 bytes. – Shaggy – 2017-05-08T14:19:49.693

and Math.PI/332/21, but is that considered ok? – Uriel – 2017-05-08T14:22:44.767

You might need to run it past @Adám for confirmation. – Shaggy – 2017-05-08T14:23:35.943

@Uriel 2/21 is fine. I can't tell the difference. – Adám – 2017-05-08T15:00:54.370

1You can save some bytes using es6 for...of: for(c of"CATION... and x.fillText(c, – Brian McCutchon – 2017-05-08T15:20:06.907

7

Mathematica, 153 Bytes

x=Pi/33;Graphics@Map[StringSplit["CATION MEANS FASTER CODING MEANS FEWER CODERS MEANS EASIER COMMUNI",""][[#/x]]~Text~{Sin@#,Cos@#}~Rotate~-#&,Range@66x]

enter image description here

Increasing it to 178 bytes lets it rotate:

x=Pi/33;Graphics@Map[StringSplit["CATION MEANS FASTER CODING MEANS FEWER CODERS MEANS EASIER COMMUNI",""][[#/x-a]]~Text~{Sin@#,Cos@#}~Rotate~-#&,(a+Range@66)x]~Animate~{a,1,66,1}

enter image description here

Ian Miller

Posted 2017-05-07T20:17:48.007

Reputation: 727

6

Octave, 168 bytes

for i=1:(n=nnz(s='CATION MEANS FASTER CODING MEANS FEWER CODERS MEANS EASIER COMMUNI')),text(sin(i/n*2*pi),cos(i/n*2*pi),s(i),'rotation',-i/n*360);axis([-2,2,-2,2]);end

Try it here

Stewie Griffin

Posted 2017-05-07T20:17:48.007

Reputation: 43 471

Nice! It seems axis([-2,2,-2,2]); is not needed. But you may want to add axis equal at the end to get a true circle – Luis Mendo – 2017-05-08T13:25:35.420

what do you do with the for loop? Can you add an explanation for an Octave novice like me? – Michthan – 2017-05-08T13:30:11.157

Of course, I'll add an explanation when I have the time. Hopefully later today :-) – Stewie Griffin – 2017-05-08T15:31:20.520

4

Bash + ImageMagick, 168 bytes

convert -font $(convert -list font|grep Font:|head -n1|cut -d" " -f4) label:"FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS " -distort Arc 360 i.png

Example output:

Example output

betseg

Posted 2017-05-07T20:17:48.007

Reputation: 8 493

1I think you can use a fixed font name to shorten it. – dkudriavtsev – 2017-05-08T00:03:24.787

4

BBC BASIC, 248

Download interpreter at http://www.bbcbasic.co.uk/bbcwin/download.html

F.i=6TO767a=i DIV6*.024-.3r=(80+i MOD6)MOD83*9-369IFASC(M."?[O@Wo}@b}O@O|O@y?l@xHH@GGE@zmo@yo|@}oU@o?m@?L|@phh@GEE@?u?@?{o@Wk?@?I?@g|O@EGE@?]M@z}o@|_|@}?m@?MO@GDG@xhh@?k?@?oU@z}o@?LO@a?L",i DIV6))>>i MOD6A.1CIRCLEFILL500-r*COS(a),500+r*SIN(a),9
N.

Ungolfed

  FORi=6TO767
    a=i DIV 6 * .024 - .3
    r=(80 + i MOD 6) MOD 83 * 9 - 369            :REM iterate through ({80,81,82,0,1,2} - 41 = {39,40,41,-41,-40,-39}) * 9
    IF ASC(MID$("?[O@Wo}@b}O@O|O@y?l@xHH@GGE@zmo@yo|@}oU@o?m@?L|@phh@GEE@?u?@?{o@Wk?@?I?@g|O@EGE@?]M@z}o@|_|@}?m@?MO@GDG@xhh@?k?@?oU@z}o@?LO@a?L",i DIV6))>>i MOD6AND1    THEN
      CIRCLEFILL 500-r*COS(a), 500+r*SIN(a), 9   :REM dots are circle radius 9 according to documentation (but BBC BASIC actually draws them smaller.)
    ENDIF
  NEXT

Doing this in a language that doesn't support rotated text - for fun. Each character is a 3x3 dot matrix array. There are a total of 66 characters but there are 2 diametrically opposite spaces that we do not print (after CODERS and before FASTER.) Each byte of the magic string encodes for a single vertical row of one letter and a single vertical row of the opposite letter. In this way we only have to sweep through 180 degrees.

enter image description here

Level River St

Posted 2017-05-07T20:17:48.007

Reputation: 22 049

Clever, but you should be able to do 4 pixels high letters in a byte, no? Also, your text should be rotated 5 characters counter-clockwise. – Adám – 2017-05-09T04:04:00.970

@Adám difficult to do 4 pixels high as code will contain many unprintables. I don't think the interpreter will like it. I misinterpreted/misremembered the spec for rotation. (MEANS was already at the bottom and I rotated it the wrong way) +.2 needs to be changed to -.3 Editing. – Level River St – 2017-05-09T06:15:05.593

Since the OP specifies uppercase, maybe do A as ⠰⠳ and R as ⠸⠫? – Adám – 2017-05-09T06:20:36.100

@Adam that's a lot of extra work now, and I believe it will reduce readability. It's common in arty and calculator fonts for certain uppercase letters to be replaced with equivalents resembling lowercase. I will see how it looks later. – Level River St – 2017-05-09T06:40:39.123

3

SVG(HTML5), 212 bytes

<svg width=500 height=500><defs><path id=p d=M250,451a201,201,0,0,1,0,-402a201,201,0,0,1,0,402></defs><text font-size="32"><textPath xlink:href=#p>FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS

Static version of my answer to Easier communication means faster coding means fewer coders means … tweaked so that FEWER is at the bottom. Adjustable version in case your font doesn't match mine:

<p><input type=number value=0 min=0 max=9 oninput=p.setAttribute('d','M250,250m0,20_a20_,20_,0,1,1,20_,-20_a20_,20_,0,1,1,-20_,-20_a20_,20_,0,1,1,-20_,20_a20_,20_,0,1,1,20_,20_'.replace(/_/g,this.value))></p>
<svg width=500 height=500><defs><path id=p d=M250,250m0,200a200,200,0,1,1,200,-200a200,200,0,1,1,-200,-200a200,200,0,1,1,-200,200a200,200,0,1,1,200,200></defs><text font-size="32"><textPath xlink:href=#p>FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS

Neil

Posted 2017-05-07T20:17:48.007

Reputation: 95 035

How do you adjust the spacing between MEANS and FEWER? In my browser, they read like one word. – Adám – 2017-05-10T05:42:01.880

@Adám I've ported the adjustable version across. – Neil – 2017-05-10T08:12:45.107

Nice. That's going over and beyond. – Adám – 2017-05-10T08:14:52.240

2

Postscript (127 bytes)

Hex dump:

00000000: 2f53 2031 92a5 9233 2f4d 6f6e 6f20 3992  /S 1...3/Mono 9.
00000010: 8e88 6432 3030 926b 3292 9a28 4943 4154  ..d200.k2..(ICAT
00000020: 494f 4e20 4d45 414e 5320 4641 5354 4552  ION MEANS FASTER
00000030: 2043 4f44 494e 4720 4d45 414e 5320 4645   CODING MEANS FE
00000040: 5745 5220 434f 4445 5253 204d 4541 4e53  WER CODERS MEANS
00000050: 2045 4153 4945 5220 434f 4d4d 554e 297b   EASIER COMMUN){
00000060: 5388 0033 2032 9287 9278 5320 6661 6c73  S..3 2...xS fals
00000070: 6592 112d 352e 3435 9288 7d92 4992 a7    e..-5.45..}.I..

Ungolfed (text) version:

/S 1 string def
/Mono 9 selectfont
100 200 moveto
2 setlinejoin
(ICATION MEANS FASTER CODING MEANS FEWER CODERS MEANS EASIER COMMUN)
{S 0 3 2 roll put S false charpath -5.45 rotate} forall
stroke

Sample output:

enter image description here

goose121

Posted 2017-05-07T20:17:48.007

Reputation: 151

2

Java 8, 1,087 bytes

import javafx.animation.*;import javafx.application.*;import javafx.scene.*;import javafx.scene.layout.*;import javafx.scene.shape.*;import javafx.scene.text.*;import javafx.stage.*;import javafx.util.*;import java.util.*;import static javafx.animation.PathTransition.*;public class P extends Application{@Override public void start(Stage stage)throws Error{char[] t="EASIER COMMUNICATION MEANS FASTER CODING MEANS FEWER CODERS MEANS".toCharArray();Shape q=new Circle(400,400,120);List<Text>h=new ArrayList<>();List<Transition>z=new ArrayList<>();for(char c:t){Text o=new Text(c+"");h.add(o);z.add(x(q, o));}Pane p=new Pane();p.getChildren().addAll(h);int s=h.size();for(int i=0;i<s;i++){Transition w=z.get(i);w.jumpTo(Duration.seconds(10).multiply((i+.5)*1/s));w.play();}stage.setScene(new Scene(p,800,800));stage.show();}Transition x(Shape e,Text t){PathTransition v=new PathTransition(Duration.seconds(10),e,t);v.setCycleCount(INDEFINITE);v.setOrientation(OrientationType.ORTHOGONAL_TO_TANGENT);v.setInterpolator(Interpolator.LINEAR);return v;}static void main(String[]a){launch(a);}}

Screenshot

Roberto Graham

Posted 2017-05-07T20:17:48.007

Reputation: 1 305

Nice, but you seem to be missing a space between MEANS and EASIER COM. – Adám – 2017-09-03T04:39:33.330

@Adám: It does not conform with the FEWER at 6 o'clock rule! – sergiol – 2017-11-12T16:32:04.477

0

LaTeX + TikZ, 380 bytes

\documentclass[tikz,border=20pt]{standalone}\usetikzlibrary{decorations,decorations.text,}\begin{document}\begin{tikzpicture}\draw[color=white,rotate=-90,postaction={decorate,decoration={text along path,raise=4pt,text align={align=center},text={FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS },reverse path}}](0,0)circle(2.425cm);\end{tikzpicture}\end{document}

Example output

enter image description here

Renzo

Posted 2017-05-07T20:17:48.007

Reputation: 2 260

0

Tcl/Tk, 222

grid [canvas .c]
set i 90;lmap c [split "FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS" ""] {.c cr t [expr {93*cos([set i [expr $i+5.5]]/57.3)+99}] [expr {93*sin($i/57.3)+99}] -te $c -ang [expr -$i-90]}

enter image description here

Will golf it more later!

sergiol

Posted 2017-05-07T20:17:48.007

Reputation: 3 055