28
\$\begingroup\$

"First they came..." is a poem by Martin Niemöller:

First they came for the Socialists, and I did not speak out-
Because I was not a Socialist.
Then they came for the Trade Unionists, and I did not speak out-
Because I was not a Trade Unionist.
Then they came for the Jews, and I did not speak out-
Because I was not a Jew.
Then they came for me-and there was no one left to speak for me.

Your task is to output the above. This is , so shortest code in bytes wins!

Rules

  • You may include extra whitespace that does not affect appearance. A single trailing newline is allowed.
  • Otherwise, the output must match exactly, including the location of newlines.
  • As per meta standards, you may output a list of strings. However, you must include the empty lines.

Note that I personally believe this is not a dupe because of how the poem is laid out - it needs some creativity to golf. Meta discussion about whether this is a dupe or not can be found here.

asked Aug 21, 2017 at 14:48
\$\endgroup\$
9
  • 7
    \$\begingroup\$ I'm not sure what this adds to the site above and beyond the RickRoll challenge. \$\endgroup\$ Commented Aug 21, 2017 at 14:54
  • 3
    \$\begingroup\$ Meta discussion \$\endgroup\$ Commented Aug 21, 2017 at 15:06
  • 11
    \$\begingroup\$ For once, I don't think this is a Rickroll dupe. There is meaningful structure here. The parallelism allows from different strategies. Reopening. \$\endgroup\$ Commented Aug 21, 2017 at 23:51
  • 3
    \$\begingroup\$ The structure is an argument in favour of being a dupe of the rickroll, not against. \$\endgroup\$ Commented Aug 22, 2017 at 9:50
  • 2
    \$\begingroup\$ The poem in question has much more structure than Never Gonna Give You Up, I don't see how it makes it more of a dupe target. \$\endgroup\$ Commented Aug 22, 2017 at 18:02

28 Answers 28

8
\$\begingroup\$

SOGL V0.12, (削除) 103 (削除ここまで) (削除) 102 (削除ここまで) 101 bytes

 →∑‘3⁄4ο╤Ε9‘}ψ4‘1"4¡‘Q°‘:11I{ū_:1"Eā/}l68SÆしろいしかく4↔b3⁄8╬I℮;YΥηκ*█7⁄8F^Κ3⁄88{x2⁄351⁄╚?Z‘O}"Ι╚╬√2⁄3δηvΧχ7)Η<υL┼!Ο'μΠ5╝7‘)

Try it Here!

Explanation (here I replaced the compressed strings with .. to save space):

..‘.‘..‘ push "socialist", "trade unionist" and "jew"
 1 wrap in an array: ["socialist", "trade unionist", "jew"]
 "..‘..‘ push "first" and "then"
 : duplicate the then
 1 wrap in an array: ["first","then","then"]
 1 wrap those two in an array: [["socialist", "trade unionist", "jew"], ["first","then","then"]]
 I rotate clockwise: [[first,socialist], [then,trade unionist], [then,jew]]
 { } for each do, pushing the array
 ū uppercase the 1st letter of each word in the array - ["First", "Socialist"]
 _ splat the contents on the stack "First", "Socialist"
 : duplicate the 2nd one "First", "Socialist", "Socialist"
 1 wrap in an array ["First", "Socialist", "Socialist"]
 "..‘ push "ŗ they came for the ŗs, and I did not speak out-\nBecause I was not a ŗ." with ŗ replaced with its appropriate item in the array
 O output that
 "..‘ push "then they came for me-and there was no one left to speak for me."
 ) uppercase the 1st letter of it
 implicitly output it in a new line
answered Aug 21, 2017 at 15:25
\$\endgroup\$
3
  • \$\begingroup\$ Could you add an explanation please? \$\endgroup\$ Commented Aug 22, 2017 at 14:22
  • \$\begingroup\$ @Nzall Forgot to, writing up \$\endgroup\$ Commented Aug 22, 2017 at 14:28
  • \$\begingroup\$ @Nzall Added an explanation \$\endgroup\$ Commented Aug 22, 2017 at 14:50
7
\$\begingroup\$

6502 machine code (C64), 229 bytes

Kind of boring, still doable on a C64 with a somewhat decent amount of bytes :)

00 C0 A9 17 8D 18 D0 A2 2C 86 FE A6 FE A0 C0 BD B6 C0 20 1E AB C6 FE 10 F2 60
C6 49 52 53 54 20 00 D4 48 45 4E 20 00 54 48 45 20 00 54 48 45 59 20 43 41 4D
45 20 00 46 4F 52 20 00 53 50 45 41 4B 20 00 41 4E 44 20 C9 20 44 49 44 20 4E
4F 54 20 00 4F 55 54 2D 0D 00 C2 45 43 41 55 53 45 20 C9 20 57 41 53 20 4E 4F
54 20 41 20 00 4D 45 2D 41 4E 44 20 54 48 45 52 45 20 57 41 53 20 4E 4F 20 4F
4E 45 20 4C 45 46 54 20 54 4F 20 00 4D 45 2E 00 2E 0D 00 53 2C 20 00 D3 4F 43
49 41 4C 49 53 54 00 D4 52 41 44 45 20 D5 4E 49 4F 4E 49 53 54 00 CA 45 57 00
0D 00 8C 35 3A 6B 2A 1F B4 90 B0 56 50 3A 41 93 B0 25 35 2A 1F B4 90 A1 56 50
3A 41 93 A1 25 35 2A 1F B4 90 97 56 50 3A 41 93 97 25 35 2A 18

Online demo

Usage: SYS49152

Explanation:

As this contains mostly data, instead of a meaningless disassembly listing, here's the ca65-style assembly source that creates this machine code:

.segment "LDADDR"
 .word $c000 ; load address
.code
 lda #17ドル ; upper/lower mode
 sta $d018 ; store in VIC register
 ldx #revpoemsize ; initialize ...
 stx $fe ; ... counter
loop: ldx $fe ; load current position
 ldy #$c0 ; highbyte of strings always same
 lda revpoem,x ; load lowbyte from table
 jsr $ab1e ; output 0-terminated string
 dec $fe ; decrement position
 bpl loop ; >=0 ? -> repeat
 rts ; done
first: .byte "First ", 0
then: .byte "Then ", 0
the: .byte "the ", 0
came: .byte "they came ", 0
for: .byte "for ", 0
speak: .byte "speak ", 0
didnot: .byte "and I did not ", 0
out: .byte "out-", $d, 0
wasnot: .byte "Because I was not a ", 0
noone: .byte "me-and there was no one left to ", 0
me: .byte "me.", 0
period: .byte ".", $d, 0
comma: .byte "s, ", 0
socialist: .byte "Socialist", 0
unionist: .byte "Trade Unionist", 0
jew: .byte "Jew", 0
p: .byte $d, 0
revpoem: .byte <me, <for, <speak, <noone, <came, <then, <p
 .byte <period, <jew, <wasnot, <out, <speak, <didnot
 .byte <comma, <jew, <the, <for, <came, <then, <p, <period
 .byte <unionist, <wasnot, <out, <speak, <didnot, <comma
 .byte <unionist, <the, <for, <came, <then, <p, <period
 .byte <socialist, <wasnot, <out, <speak, <didnot, <comma
 .byte <socialist, <the, <for, <came, <first
revpoemsize = * - revpoem - 1
answered Aug 22, 2017 at 14:53
\$\endgroup\$
6
\$\begingroup\$

Python 3, 209 bytes

t='they came for '
s='First '
for i in'Socialist','Trade Unionist','Jew':s+=t+f'the {i}s, and I did not speak out-\nBecause I was not a {i}.\n\nThen '
print(s+t+'me-and there was no one left to speak for me.')

Try it online!

-5 thanks to Felipe Nardi Batista.

answered Aug 21, 2017 at 16:00
\$\endgroup\$
1
  • \$\begingroup\$ @Heiteira Sorry, but I can't leave the "Trade " part out of the output. \$\endgroup\$ Commented Aug 14, 2018 at 18:44
4
\$\begingroup\$

Perl 6, 193 bytes

say join ' they came for ','First',«Socialist "Trade Unionist" Jew».map({"the {$_}s, but I did not speak out-
because I was not a $_.
Then"}),'me- and there was no one left to speak for me.'

Try it online!

answered Aug 23, 2017 at 13:58
\$\endgroup\$
4
\$\begingroup\$

Perl 5, 185 bytes

print join" they came for ",First,(map"the ${_}s, and I did not speak out-
Because I was not a $_.
Then",Socialist,"Trade Unionist",Jew),"me-and there was no one left to speak for me."

Try it online!

Thanks to @Massa for -3 bytes!

answered Aug 21, 2017 at 16:14
\$\endgroup\$
4
  • \$\begingroup\$ Use Join and you can trim another five chairs or so \$\endgroup\$ Commented Aug 23, 2017 at 14:46
  • \$\begingroup\$ @Massa not sure I'm seeing how! Any more clues? \$\endgroup\$ Commented Aug 23, 2017 at 14:59
  • \$\begingroup\$ I'm on my mobile right now, but take a look at my perl6 answer below! \$\endgroup\$ Commented Aug 23, 2017 at 15:00
  • \$\begingroup\$ @Massa Ahhh, nice! Thanks! -3 in the end :) \$\endgroup\$ Commented Aug 23, 2017 at 15:08
3
\$\begingroup\$

C, 248 bytes

Thanks to @Zacharý for saving 9 bytes.

p(x,y){printf("%s they came for the %ss, and I did not speak out-\nBecause I was not a %s.\n\n",x,y,y);}f(){p("First","Socialist");p("Then","Trade Unionist");p("Then","Jew");puts("Then they came for me-and there was no one left to speak for me.");}

Try it online!

answered Aug 21, 2017 at 15:03
\$\endgroup\$
3
  • \$\begingroup\$ Can you move s directly into the printf statement? \$\endgroup\$ Commented Aug 21, 2017 at 15:09
  • \$\begingroup\$ @Zacharý Yes, of course. \$\endgroup\$ Commented Aug 21, 2017 at 15:10
  • \$\begingroup\$ 247 bytes \$\endgroup\$ Commented Jan 22, 2020 at 23:21
3
\$\begingroup\$

C# (.NET Core), (削除) 248 (削除ここまで) (削除) 246 (削除ここまで) 242 bytes

a=>{string b=@", and I did not speak out-
Because I was not a ",c=" they came for ",d="Socialist",e="Trade Unionist";return$@"First{c+d}s{b+d}.
Then{c+e}s{b+e}.
Then{c}the Jews{b}Jew.
Then{c}me-and there was no one left to speak for me.";}

Actual newlines saved me a few bytes.

Try it online!

Saved 2 bytes thanks to Business Cat

answered Aug 21, 2017 at 15:16
\$\endgroup\$
0
3
\$\begingroup\$

Python 3, 203 bytes

print('First',*[f'the {s}s, and I did not speak out-\nBecause I was not a {s}.\n\nThen'for s in['Socialist','Trade Unionist','Jew']],'me-and there was no one left to speak for me.',sep=' they came for ')

Try it online!

answered Aug 24, 2017 at 1:30
\$\endgroup\$
1
  • \$\begingroup\$ sep= is a genius move! :-) \$\endgroup\$ Commented Aug 28, 2017 at 13:49
3
\$\begingroup\$

Befunge-93, 348 bytes

".em rof kaeps ot tfel eno on saw ereht dna-em rof emac yeht nehT"52*:v
v"d not speak out-"*25"Because I was not a "< p5-2*89p1-2*89"vvJew."<
> "id I dna ">",sweJ>v"67+2p66+5p v ^p2-2*89"vTrade Unionist."<
>"tsriF">:#,v>",stsinoinU edarTv"67+3pv ^ p3+66p40"^_Socialist."<
>"nehT"52*: v>",stsilaicoS@"67+3p >" eht rof emac yeht "

Try it online!

answered Aug 14, 2018 at 5:43
\$\endgroup\$
3
\$\begingroup\$

Befunge, (削除) 293 (削除ここまで) (削除) 274 (削除ここまで) 270 bytes

62574732594932584832001v_@#:0円\!<
0-*84g+3/"P"\%"P"::+p00<_|#:-1g0
84!-"*":g+3/"P"\%"P"::+1\<+1_$#:^#-2,円-**
&First0 they came for %the Qs, and I did not speak out-*Because I was not a (.**
ThenOme-and there was no one left to speak for me.*$Jew*Socialist/Trade Unionist

Try it online!

This is a different approach to the existing Befunge solution. It uses a kind of linked list to store a dictionary of the common phrases, and then just has a simple list of values on the stack representing the order in which the phrases should be output.

answered May 19, 2019 at 15:41
\$\endgroup\$
2
\$\begingroup\$

Retina, 176 bytes


 Socialists, Trade Unionists, Jews,1me-and there was no one left to2for me.
( .+?)s,
1the$& and I did not2out-¶Because I was not a1ドル.¶¶Then
^
First
1
 they came for 
2
 speak 

Try it online! Explanation: The 1 and 2 are just repeated strings which are long enough to be worth deduplicating. The First is added later to make it easier to select the placeholder for the repetitive portion, "they came for the [group]s, and I did not speak out-Because I was not a [group]. Then", which is expanded by the second stage.

answered Aug 22, 2017 at 7:57
\$\endgroup\$
2
  • \$\begingroup\$ 174 bytes by also substituting ` was no`. \$\endgroup\$ Commented Aug 18, 2021 at 17:40
  • \$\begingroup\$ @DLosc Thanks! I won't edit the post though for historical reasons. \$\endgroup\$ Commented Aug 18, 2021 at 18:48
2
\$\begingroup\$

JavaScript (ES6), (削除) 231 (削除ここまで) (削除) 227 (削除ここまで) (削除) 223 (削除ここまで) 221 bytes

_=>`First${t=" they came for "}the Socialist${a=`s, and I did not speak out-
Because I was not a `}Socialist${t=`.
Then`+t}the ${(u="Trade Unionist")+a+u+t}the Jew${a}Jew${t}me-and there was no one left to speak for me.`

Try it

o.innerText=(
_=>`First${t=" they came for "}the Socialist${a=`s, and I did not speak out-
Because I was not a `}Socialist${t=`.
Then`+t}the ${(u="Trade Unionist")+a+u+t}the Jew${a}Jew${t}me-and there was no one left to speak for me.`
)()
<pre id=o>

answered Aug 21, 2017 at 15:38
\$\endgroup\$
2
\$\begingroup\$

Java 8, (削除) 250 (削除ここまで) 236 bytes

o->{String t=" they came for ",r="First";for(String s:"Socialist,Trade Unionist,Jew".split(","))r+=t+"the "+s+"s, and I did not speak out-\nBecause I was not a "+s+".\n\nThen";return r+t+"me-and there was no one left to speak for me.";}

Try it here.

answered Aug 22, 2017 at 9:25
\$\endgroup\$
2
\$\begingroup\$

JavaScript (ES6), (削除) 210 (削除ここまで) (削除) 207 (削除ここまで) (削除) 206 (削除ここまで) 203 bytes

A different approach to my other solution so figured it was worth editing it out to its own answer now that the challenge has been reopened.

_=>`First${["Socialist","Trade Unionist","Jew"].map(x=>t+`the ${x}s, and I did not speak out-
Because I was not a ${x}.
Then`,t=` they came for `).join``+t}me-and there was no one left to speak for me.`

Try it

o.innerText=(
_=>`First${["Socialist","Trade Unionist","Jew"].map(x=>t+`the ${x}s, and I did not speak out-
Because I was not a ${x}.
Then`,t=` they came for `).join``+t}me-and there was no one left to speak for me.`
)()
<pre id=o>

answered Aug 22, 2017 at 8:40
\$\endgroup\$
2
\$\begingroup\$

Gaia, (削除) 179 (削除ここまで) 175 bytes

⇓"the "3ṁ"s, and I did not speak out-¶Because I was not a "2ṃ".¶¶Then
" they came for 
First""Socialist"Trade Unionist"Jew"↓¦⇑"me-and there was no one left to speak for me."]$

Try it online!

Explanation

3 functions are defined here (1 per line). The bottom one is called first. gets replaced by newlines.

⇓"the "3ṁ"..."2ṃ".¶¶Then First helper function. Argument: s
⇓ Push "Then they came for "
 "the " Push "the "
 3ṁ Bring s to the top
 "..." Push "s, and I did not speak out-¶Because I was not a "
 2ṃ Push a copy of s
 ".¶¶Then Push ".¶¶Then"
" they came for Helper function. No arguments.
" they came for Push " they came for "
First"".."..".."↓¦⇑"..."]$ Main function.
First" Push "First"
 ".."..".." Push the list ["Socialist" "Trade Unionist" "Jew"]
 ↓¦ Call the first helper function on each.
 ⇑ Push "Then they came for "
 "..." Push "me-and there was no one left to speak for me."
 ]$ Wrap the stack in a list and join with no separator.
answered Aug 21, 2017 at 15:27
\$\endgroup\$
2
\$\begingroup\$

Bubblegum, (削除) 149 (削除ここまで) (削除) 132 (削除ここまで) 129 bytes

00000000: 9d4d b515 0241 14cc af8a c991 1e70 0991 .M...A.......p..
00000010: 02fe bbfd e7b7 cb1a 523d ee0e d9f8 7453 ........R=....tS
00000020: 631d 5cc2 2b84 5432 2265 760c 6315 a654 c.\.+.T2"ev.c..T
00000030: a4d6 d92a 480a 0c20 5201 a91c ec8c 2987 ...*H.. R.....).
00000040: f2ae 1634 3924 6f79 6b2e c8ee 4dba 14eb ...49$oyk...M...
00000050: 4130 4958 3ed9 9e18 128c a94c 95fc e3e0 A0IX>......L....
00000060: b6fd fa65 c88b 1fa7 7795 e77b 25d7 488a ...e....w..{%.H.
00000070: 9d68 f898 8792 8c82 2307 a78e bb87 647d .h......#.....d}
00000080: 03 .

Try it online!

Boring Bubblegum answer. Already beaten by SOGL, so that's good.

Credit for -17 bytes goes to Dom Hastings

-3 bytes by ovs

answered Aug 21, 2017 at 15:55
\$\endgroup\$
4
  • \$\begingroup\$ 132 bytes. Still can't beat SOGL! \$\endgroup\$ Commented Aug 21, 2017 at 16:17
  • \$\begingroup\$ @DomHastings I don't think you'll ever beat SOGL with Bubblegum... \$\endgroup\$ Commented Aug 22, 2017 at 8:14
  • \$\begingroup\$ @EriktheOutgolfer I'm very glad of that fact too! I'd like to invest some time to play with it, incredibly expressive! \$\endgroup\$ Commented Aug 22, 2017 at 18:36
  • \$\begingroup\$ 129 bytes \$\endgroup\$ Commented Aug 28, 2017 at 8:51
2
\$\begingroup\$

SQL 269 bytes

declare @ char(18)='They came for the ',@a char(49)='s, and I did not speak out-
Because I was not a '
print'First '+@+'Socialist'+@a+'Socialist.
'+@+'Trade Unionist'+@a+'Trade Unionist.
'+@+'Jew'+@a+'Jew.
'+@+' me-and there was no one left to speak for me.'
\$\endgroup\$
1
  • 1
    \$\begingroup\$ Hi, welcome to PPCG! I've edited your post to add some formatting. As for the actual code, I think the leading words "Then " are missing in the last three sentences, and the last sentence now states "They came for the me-..." instead of "Then they came for me-...". \$\endgroup\$ Commented Jan 21, 2019 at 14:40
2
\$\begingroup\$

PowerShell, (削除) 211 (削除ここまで) (削除) 202 (削除ここまで) 198 bytes

-13 bytes thanks to @Veskah

$a,$b='First',' they came for'
'Socialist','Trade Unionist','Jew'|%{"$a$b the $_`s, and I did not speak out-
Because I was not a $_.
";$a='Then'}
"$a$b me-and there was no one left to speak for me."

Try it online!

I'm sure this can be golfed down a little bit.

answered Dec 14, 2018 at 22:24
\$\endgroup\$
2
1
\$\begingroup\$

Proton, 219 bytes

t='they came for'for i:'Socialist','Trade Unionist','Jew'print(i[0]=='S'? 'First':'Then',t,'the',i+'s, and I did not speak out-
Because I was not a',i+'.
')print('Then',t,'me-and there was no one left to speak for me.')

Try it online!

answered Aug 22, 2017 at 0:21
\$\endgroup\$
1
\$\begingroup\$

Python 2, 246 bytes

First time I tried compressing the string an returning it. Aparently it takes more bytes than other approaches. Is there anything left to golf?

import zlib,base64
print zlib.decompress(base64.b64decode('eJyd0DEOwjAMBdA9p/gHoD0EAxJdgQNYiatGtDaKU1XcvikUdSkDjLb/f4NPMVlG7vgJTwOj1bRMuKiP1EfLdgBJwBkhBohm2IPpDh1z5Y7saTQux4nsdaStWDt37Vh27JtElT/oT++73PD0K1oq+97A1QKVZeI1DxVGz215mK7uO1nPf1Zu5g=='))

Try it online!

\$\endgroup\$
1
\$\begingroup\$

Röda, 204 bytes

{t="Then"c=" they came for";["First","Socialist",t,"Trade Unionist",t,"Jew"]|[`$_$c the ${_}s, and I did not speak out-
Because I was not a $_2.
`];[`$t$c me-and there was no one left to speak for me.`]}

Try it online!

answered Aug 22, 2017 at 9:57
\$\endgroup\$
1
\$\begingroup\$

PHP, 194 bytes

First<?=$t=" they came for ";foreach([Socialist,"Trade Unionist",Jew]as$s)echo"the ${s}s, and I did not speak out-
Because I was not a $s.
Then$t"?>me-and there was no one left to speak for me.

Try it online.

answered Aug 22, 2017 at 11:53
\$\endgroup\$
1
\$\begingroup\$

C (gcc), 244 bytes

f(c){for(c=0;c<3;printf("%s they came for the %ss, and I did not speak out-\nBecause I was not a %2$s.\n\n",c++?"Then":"First",c^2?c?"Trade Unionist":"Socialist":"Jew"));puts("Then they came for me-and there was no one left to speak for me.");}

Try it online!

answered Aug 22, 2017 at 15:37
\$\endgroup\$
1
\$\begingroup\$

Python 3, 208 bytes

print(' they came for '.join(["First"]+[f"the {i}s, and I did not speak out-\nBecause I was not a {i}.\n\nThen"for i in['Socialist','Trade Unionist','Jew']]+['me-and there was no one left to speak for me.']))

Try it online!

-1 thanks to @Step Hen

answered Aug 23, 2017 at 14:37
\$\endgroup\$
2
  • 1
    \$\begingroup\$ Then "for -> Then"for and you're beating the other Python answers :) \$\endgroup\$ Commented Aug 23, 2017 at 14:43
  • \$\begingroup\$ @StepHen Thanks for noticing the extra space! :-) \$\endgroup\$ Commented Aug 23, 2017 at 18:03
1
\$\begingroup\$

Clojure, 285 bytes

(fn[](doseq[i(range 4):let[c["Socialist""Trade Unionist""Jew"""]f #(if(< i 3)% %2)]](println(if(= i 0)"First""Then")"they came for"(str(f(str"the "(c i)"s, ")"me-")(f"and I did not speak out-\n""and there was no one left to speak for me.")(f(str"Because I was not a "(c i)".\n")"")))))

This was a fun little challenge. I ended up almost entirely rewriting most of it a couple of times because I realized I was doing something overly roundabout. There are still a couple areas that could probably be touched up, but I'm pretty happy with how it turned out, even if I'm only "compressing" the original by 54 bytes.

repl.io

See the pre-golfed code for an explanation:

(defn ftc []
 ; Loop over the lines numbers for reference
 (doseq [i (range 4)
 :let [; Added a dummy last "class" since "me-" wasn't necessary,
 ; and only having 3 elements was causing OOB errors.
 classes ["Socialist" "Trade Unionist" "Jew" ""]
 
 ; A helper function that executes either its first or second argument
 ; depending on if the current line is one of the first 3 lines.
 if-first-three-lines #(if (< i 3) % %2)]]
 ; An implicit space is inserted between each of the args to println
 (println
 ; Decide on the opener
 (if (= i 0) "First" "Then")
 "they came for"
 ; Start string concatenation because the implicit space
 ; begins complicating things.
 (str
 ; Decide which "class" the line belongs to
 (if-first-three-lines
 (str "the " (classes i) "s, ")
 "me-")
 ; Decide on the line ending
 (if-first-three-lines
 "and I did not speak out-\n"
 "and there was no one left to speak for me.")
 ; Then pick the trailer
 (if-first-three-lines
 (str "Because I was not a " (classes i) ".\n")
 "")))))
answered Aug 23, 2017 at 19:17
\$\endgroup\$
1
\$\begingroup\$

Japt, (削除) 153 (削除ここまで) (削除) 150 (削除ここまで) (削除) 149 (削除ここまで) 147 bytes

`{=` ey ̄ ́ f `} ́-d tre °s no e ¤ft speak f ́.`i`Sáû\E
TÎè UÍát
Jew`·rÈ+U+`e {Y}s, d I 1d not speak t-
Be ̄«e I °s not a {Y}.
Tn`}`Fir¡

Test it

1 byte saved thanks to Oliver

answered Aug 22, 2017 at 9:03
\$\endgroup\$
0
1
\$\begingroup\$

05AB1E, (削除) 124 (削除ここまで) 119 bytes

.•RYÁ Wö∍®Ø’áÅÚ)’Òü•'x¡TMvy„€Û‚1⁄2#NĀèTM"ÿ€»‹é€‡€€ ÿs,€ƒ Iƒ§€–¡ ́€Ä-"©¶y"ƒ« I€\€–€... ÿ.".a¶¶}®19£"€á-and€Ç€\€ ̧€μ... ̧€„¡ ́€‡€á."J

Try it online.

Explanation:

.•RYÁ Wö∍®Ø’áÅÚ)’Òü•
 # Push compressed string "socialistxtrade unionistxjew"
 'x¡ '# Split it on "x": ["socialist","trade unionist","jew"]
 TM # Convert each word to Titlecase: ["Socialist","Trade Unionist","Jew"]
v # Loop `y` over each of these strings:
 y # Push string `y`
 „€Û‚1⁄2 # Push dictionary string "first then"
 # # Split on spaces: ["first","then"]
 N # Push the index of the loop
 Ā # Truthify it (0 remains 0; every other number becomes 1)
 è # Use it to index into the list
 TM # Titlecase it
 "ÿ€»‹é€‡€€ ÿs,€ƒ Iƒ§€–¡ ́€Ä-"
 # Push dictionary string "ÿ they came for the ÿs, and I did not speak out-"
 # where the "ÿ" are automatically filled with the strings at the top of the stack
 © # Save it in the register (without popping)
 ¶ # Push a newline "\n"
 y # Push string `y` again
 "ƒ« I€\€–€... ÿ." # Push dictionary string "because I was not a ÿ."
 # where the "ÿ" is automatically filled again with the string
 .a # Sentence case it: "because" becomes "Because"
 ¶¶ # Push two newline characters "\n\n"
} # After the loop:
® # Push the string from the register:
 # "Then they came for the Jews, and I did not speak out-"
 19£ # Only leave the first 19 characters: "Then they came for "
"€á-and€Ç€\€ ̧€μ... ̧€„¡ ́€‡€á."
 # Push dictionary string "me-and there was no one left to speak for me."
J # Then join everything on the stack together (and output implicitly)

See this 05AB1E tip of mine (sections How to use the dictionary? and How to compress strings not part of the dictionary?) to understand why:

  • .•RYÁ Wö∍®Ø’áÅÚ)’Òü• is "socialistxtrade unionistxjew"
  • „€Û‚1⁄2 is "first then"
  • "ÿ€»‹é€‡€€ ÿs,€ƒ Iƒ§€–¡ ́€Ä-" is "ÿ they came for the ÿs, and I did not speak out-"
  • "ƒ« I€\€–€... ÿ." is "because I was not a ÿ."
  • "€á-and€Ç€\€ ̧€μ... ̧€„¡ ́€‡€á." is "me-and there was no one left to speak for me."
answered Jan 21, 2019 at 9:15
\$\endgroup\$
-5
\$\begingroup\$

Text, 348 bytes

First they came for the Socialists, and I did not speak out-
Because I was not a Socialist.
Then they came for the Trade Unionists, and I did not speak out-
Because I was not a Trade Unionist.
Then they came for the Jews, and I did not speak out-
Because I was not a Jew.
Then they came for me-and there was no one left to speak for me.

This is the shortest possible version in its language, and is on par with the Befunge-93 answer at time of writing.

\$\endgroup\$
2
  • 2
    \$\begingroup\$ As with pretty much all "Text" answers, this is boring and lazy \$\endgroup\$ Commented Jan 22, 2019 at 5:46
  • \$\begingroup\$ @Jo King The notable bit is that it's the same length as the Befunge-93 answer. \$\endgroup\$ Commented Jan 22, 2019 at 6:02

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.