29
\$\begingroup\$

This is the robber's thread of a challenge. You can view the cop's thread here

A pretty common beginner style question is to print some string, but, there's a catch!, you need to do it without using any of the characters in the string itself!

For this challenge we will find out who is the best at printing X without X. There are two threads to this, a cop's thread and a robber's thread.

In the cop's thread users will choose a language (which we will call Y) and a string (which we will call X) and write a program in language Y which takes no input and outputs X without using any of the characters in X. The cop will then post both X and Y without revealing the program the have written.

Robbers will be select cop answers and write programs in language Y which take no input and output X. They will post these "cracks" as answers in this thread. A crack need only work not be the intended solution.

Once a cop's answer is one week old, so long as it has not been cracked, the cop may reveal their program and mark it as "safe". Safe answers can no longer be cracked

Robbers will be scored by the total number of successful cracks with more cracks being better.

\$\endgroup\$

68 Answers 68

32
\$\begingroup\$

Python 3, cracks @nthistle's answer

𝓹𝓻𝓲𝓷𝓽(𝓬𝓱𝓻(97)+𝓬𝓱𝓻(98)+𝓬𝓱𝓻(99)+𝓬𝓱𝓻(100)+𝓬𝓱𝓻(101)+𝓬𝓱𝓻(102)+𝓬𝓱𝓻(103)+𝓬𝓱𝓻(104)+𝓬𝓱𝓻(105)+𝓬𝓱𝓻(106)+𝓬𝓱𝓻(107)+𝓬𝓱𝓻(108)+𝓬𝓱𝓻(109)+𝓬𝓱𝓻(110)+𝓬𝓱𝓻(111)+𝓬𝓱𝓻(112)+𝓬𝓱𝓻(113)+𝓬𝓱𝓻(114)+𝓬𝓱𝓻(115)+𝓬𝓱𝓻(116)+𝓬𝓱𝓻(117)+𝓬𝓱𝓻(118)+𝓬𝓱𝓻(119)+𝓬𝓱𝓻(120)+𝓬𝓱𝓻(121)+𝓬𝓱𝓻(122)+𝓬𝓱𝓻(65)+𝓬𝓱𝓻(66)+𝓬𝓱𝓻(67)+𝓬𝓱𝓻(68)+𝓬𝓱𝓻(69)+𝓬𝓱𝓻(70)+𝓬𝓱𝓻(71)+𝓬𝓱𝓻(72)+𝓬𝓱𝓻(73)+𝓬𝓱𝓻(74)+𝓬𝓱𝓻(75)+𝓬𝓱𝓻(76)+𝓬𝓱𝓻(77)+𝓬𝓱𝓻(78)+𝓬𝓱𝓻(79)+𝓬𝓱𝓻(80)+𝓬𝓱𝓻(81)+𝓬𝓱𝓻(82)+𝓬𝓱𝓻(83)+𝓬𝓱𝓻(84)+𝓬𝓱𝓻(85)+𝓬𝓱𝓻(86)+𝓬𝓱𝓻(87)+𝓬𝓱𝓻(88)+𝓬𝓱𝓻(89)+𝓬𝓱𝓻(90)+𝓬𝓱𝓻(33)+𝓬𝓱𝓻(34)+𝓬𝓱𝓻(35)+𝓬𝓱𝓻(36)+𝓬𝓱𝓻(37)+𝓬𝓱𝓻(38)+𝓬𝓱𝓻(39)+𝓬𝓱𝓻(42)+𝓬𝓱𝓻(44)+𝓬𝓱𝓻(46)+𝓬𝓱𝓻(47)+𝓬𝓱𝓻(58)+𝓬𝓱𝓻(59)+𝓬𝓱𝓻(60)+𝓬𝓱𝓻(61)+𝓬𝓱𝓻(62)+𝓬𝓱𝓻(63)+𝓬𝓱𝓻(64)+𝓬𝓱𝓻(91)+𝓬𝓱𝓻(93)+𝓬𝓱𝓻(94)+𝓬𝓱𝓻(95)+𝓬𝓱𝓻(96)+𝓬𝓱𝓻(123)+𝓬𝓱𝓻(124)+𝓬𝓱𝓻(125)+𝓬𝓱𝓻(126))

Try it online!

| improve this answer | |
\$\endgroup\$
  • 4
    \$\begingroup\$ Almost exactly the same as mine, nice job! \$\endgroup\$ – nthistle Jul 25 at 16:12
  • \$\begingroup\$ @nthistle Thanks! This was fun \$\endgroup\$ – Luis Mendo Jul 25 at 16:13
  • 4
    \$\begingroup\$ Can someone explain why this works? \$\endgroup\$ – Surculose Sputum Jul 25 at 16:20
  • 5
    \$\begingroup\$ @SurculoseSputum I took inspiration from this Q&A, which I recently read by chance. I wasn't sure it would work for builtin methods \$\endgroup\$ – Luis Mendo Jul 25 at 16:28
  • \$\begingroup\$ Why this answer got more upvotes than the cops answer is the mystery of Stack Exchange. \$\endgroup\$ – my pronoun is monicareinstate Jul 28 at 16:16
13
\$\begingroup\$

Python 3.7, 128 bytes, cracks jez's answer

import sys
class A:__class_getitem__=chr
class B:__class_getitem__=ord
class C:__class_getitem__=sys.stdout.write
C[A[B["'"]+1]]

Try it online!

| improve this answer | |
\$\endgroup\$
  • \$\begingroup\$ You beat me to it! I had just realized I could use __class_getitem__ to call functions when I saw the notification. Good job! Not sure why you need three classes though. chr is totally unnecessary. \$\endgroup\$ – Ad Hoc Garf Hunter Jul 27 at 2:49
  • \$\begingroup\$ Beat me by a minute. Alternate solution: copyright._Printer__lines='print\x28"\x28"),exit\x28)';copyright._Printer__setup.__globals__['__builtins__']['len']=eval;'%s'%copyright \$\endgroup\$ – Sisyphus Jul 27 at 2:51
  • \$\begingroup\$ Love it. (and @Sisyphus's solution too). And it has introduced me to __class_getitem__ for the first time. There's no need to golf, true, but wouldn't it be fun? Try to beat my 97 bytes. \$\endgroup\$ – jez Jul 27 at 2:53
  • 3
    \$\begingroup\$ @jez 29 bytes - Try it online! \$\endgroup\$ – Sisyphus Jul 27 at 3:02
  • 3
    \$\begingroup\$ @Sisyphus You should have posted that as a cop answer rather than wasting it here. \$\endgroup\$ – pppery Jul 27 at 3:03
11
\$\begingroup\$

Befunge-93 (FBBI), cracks @Ethan Chapman's (new) answer

>g::g- :::+:+:+:+:++\::+:+:+:+:+:+\::+::+::+::+::+::++++++\::+::+:+:+:++\: v
v      +::+:+::+::+::\+++++::+:+::+::+:::\+++::+::+:+:+::\++++::+::+:+:+:: <
>      +++\:::+:+::+:+::++++\::+:+::+:+::+++\:::+::+:+:+::++++\::+::+:+:+: v
v      \+++:+::+::+:+::\+++:+::+::+:+::\++::+:+:+:+::\+++::+:+:+:+:::\+++: <
>      ::+\::+::+:++\::+:+:+:+:+:+\::+\::+:+::++\$pp                       v
v                                                                          <
>                                                                          v
v                                                                          <
 
v <
  X
>:|
  Y
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                                                              =

Try it online!

A Brief History/Explanation: I originally started writing this answer when I saw Ethan Chapman's first Befunge-93 answer, but progress was hampered by the fact that I didn't know Befunge. I took a lunch break and by the time I came back, it had already been cracked (in a different way)! My original approach was simply to use ! to get 1 on the stack (it implicitly reads a 0 off the stack), and then just duplicate (:) and add (+) that to itself to create whatever numbers I needed.

Then, you can take advantage of Befunge's ability to modify the source code to write a , into some specific location and then print off the stack as ASCII characters. It was easy enough to write the following snippet that prints off the entire stack, which also only has a single , (which means it only requires one self-write).

v <   (Whee!)
  ,  Prints top of stack as ASCII character
>:|  Duplicates top of stack, then pops, going down if zero, up otherwise
  @  Terminates

Fortunately, this general approach didn't change too much between the two answers. The main difference is that I can no longer use ! to get a 1 on top of the stack from the empty stack (I also can't use @ to terminate, but that's not an issue, since we can just use another self-write for that).

Some simple process of elimination reveals that g (pop y, x, then push value of ASCII character at location (x,y)) is just about the only way to get non-zero values onto the stack now. Since the stack is implicitly zero, the first g we hit with an empty stack will simply push the value of character at (0,0). However, unlike some more convenient languages (cough, cough, 05AB1E), we don't have builtin operators to divide by 2 that we might use to reduce this value down to 1.

Thus, we need to use our ability to read again. The simplest way to do this is have the value at (0,0) be ASCII value v, and then put v-1 at (v,v). At this point, I ran into some problems with a lot of the Befunge-93 interpreters on TIO, since by default they only support a 25x80 program, and will complain about reads outside of this range. I can start with a space, which has ASCII value 32, but that's still out of bounds. Fortunately, the FBBI version works just fine, although I can't start with a space because for some reason it doesn't terminate unless you begin with a direction(?).

In any case, I can recover the magic 1 by starting with > (value 62) at (0,0), then using g:: to push 62 onto the stack and duplicate it twice, then using g to read (62,62), where I have = (value 61), and then finally subtract the top two elements of the stack, 62 and 61, in order to get 1.

From here, it's straightforward, if slightly painful. We just need to produce a stack that looks like our target string (in reverse order), followed by our two writes of , and @ (denoted by X and Y in the original source). While I could just duplicate the 1 several hundreds of times, I decided it was worth the effort to write a more efficient method, which encodes the target value in binary, then produces the binary decomposition on the stack, before summing (it's easy to get 1,4,16,32, for instance, because I can double with :+).

This, plus the careful positioning of everything so the writes end up in the correct place, is a lot of work, so I just wrote a Python script that does it for me.

from collections import defaultdict

# by convention, assume there is a 1 on top of the stack
def gen_stack(stack):
    # goal is to produce stack:list[int]
    def gen_single(ch):
        if type(ch) is chr:
            ch = ord(ch)
        binary_decomp = []
        cur = ch
        while cur > 0: # I know this is inefficient
            r = (1 << (cur.bit_length() - 1))
            cur -= r
            binary_decomp.append(r)
        binary_decomp = binary_decomp[::-1]
        total = ""
        value = 1
        for c in binary_decomp:
            total += ":"
            while value < c:
                total += ":+"
                value *= 2
        return total + "+" * (len(binary_decomp) - 1) + "\\"
    return "".join(gen_single(c) for c in stack)

# places string segment starting at (i,j) in given direction
def place_segment(prog, i, j, segment, direction=(1,0)):
    for k, c in enumerate(segment):
        prog[i + k*direction[0], j + k*direction[1]] = c
    return len(segment)

target_string = """,0123456789"~@!"""

# [x,y], use implicit grid
prog = defaultdict(lambda : ' ')

W = 75
offset = 0
offset += place_segment(prog, offset, 0, ">g::g-") # ends at 6,0 excl
# store this for 1-recovery
prog[62,62] = "="

# now have 1 on stack
target_stack = list(map(ord,target_string))[::-1]
target_stack.extend([ord(","),2,10]) # write , to 2,10
target_stack.extend([ord("@"),2,12]) # write @ to 2,12

stack_generation = gen_stack(target_stack)

stack_generation += "$" # pop the 1
stack_generation += "p" # place the @
stack_generation += "p" # place the ,

# program flow routing
for i in range(8):
    prog[W,i] = "<" if (i % 2 == 1) else "v"
    prog[0,i] = "v" if (i % 2 == 1) else ">"

# makes it more aesthetically pleasing
offset += 1
row = 0
while len(stack_generation) > 0:
    # zig-zag segment placement until we're out
    if row % 2 == 0:
        place_segment(prog, offset, row, stack_generation[:W-offset-1])
        stack_generation = stack_generation[W-offset-1:]
    else:
        place_segment(prog, W - 2, row, stack_generation[:W-offset-1], (-1,0))
        stack_generation = stack_generation[W-offset-1:]
    row += 1

# first 8 rows were allocated for the stack generation
# place the print-stack block
place_segment(prog, 0,  9, "v <")
place_segment(prog, 0, 10, "  X")
place_segment(prog, 0, 11, ">:|")
place_segment(prog, 0, 12, "  Y")

# print prog
max_y = max(k[1] for k in prog.keys())
max_x = lambda y : max([0, *[k[0] for k in prog.keys() if k[1] == y]])
# just so we don't print tons of extra spaces

source = "\n".join("".join(prog[i,j] for i in range(max_x(j)+1)) for j in range(max_y+1))
print(source)

# verify
for c in target_string:
    if c in source:
        print("Failed check for",c)
| improve this answer | |
\$\endgroup\$
  • 1
    \$\begingroup\$ Very nice, similar to what I wrote but a little less verbose and a little more convoluted. I'll add my answer on the cops post. \$\endgroup\$ – Ethan Chapman Jul 26 at 20:19
10
\$\begingroup\$

Ruby, cracks @histocrat's answer

send("ev"+("%x"%(5+5))+"l",send("ev"+("%x"%(5+5))+"l",("%d"%(4-3))+("%d"%(4-3))+"2"+("%f"%2)[4-3]+"chr")+"uts \""+send("ev"+("%x"%(5+5))+"l",("%d"%(4-3))+("%d"%(4-3))+"2"+("%f"%2)[4-3]+"chr")+send("ev"+("%x"%(5+5))+"l","60"+("%f"%2)[4-3]+"chr")+("%f"%2)[4-3]+send("ev"+("%x"%(5+5))+"l","36"+("%f"%2)[4-3]+"chr")+("%x"%(5+5))+("%d"%(4-3))+"\"")

Try it online!

I'm gonna be honest – about an hour ago, I didn't know Ruby. But I didn't let that stop me!

Explanation: In general, my approach to these is to get some kind of eval construct, and then convert numbers to characters and combine to get any payload (as long as numbers and + allowed, and you can do the former with the language, this works).

The immediate problems with this one are that we don't have access to p, which is necessary for any(?) kind of printing in ruby (p, puts, pp, ...), we can't use a, so eval is out, and we can't use ., so it's difficult to call any methods or get attributes. For that matter, we're going to have difficulty converting numbers => characters without Integer.chr (I found some hacky ways to get it to call without using ., including overriding * for Integers, but not without using a in class).

In my quest to find reflection tricks that would be useful, I stumbled across the send method, although it took a while before I realized you didn't have to invoke it on an object. Now we're at send("eval","[payload]"), but still need a way to construct strings. I banged my head on this for a while before I realized that for the a restriction at least, I could simply use a format string with hex. ("%x" % 10) gets us a, although we need to change 10 to 5+5 in order to bypass the 1 restriction.

Great, now we have eval. Unfortunately, p is not a hex character. Not a problem, though, since we have eval! We can recover "." from ("%f"%1)[1] (changing to ("%f"%2)[4-3] to bypass 1), so now we can just send "112.chr" to eval, and we're golden.

From here it's just combining these primitives to get a payload that translates to the string puts "p<.$a1", and we're done!

Edit: I just realized that I could've also just used "%c" % ... to get characters instead of the clunky trick I have for invoking .chr. For completeness, here's a much shorter version that uses this:

send("ev"+("%c"%97)+"l",("%c"%(56+56))+"uts \""+("%c"%(56+56))+("%c"%60)+("%f"%2)[4-3]+("%c"%36)+("%c"%97)+("%d"%(4-3))+"\"")
| improve this answer | |
\$\endgroup\$
  • 1
    \$\begingroup\$ This is awesome. \$\endgroup\$ – histocrat Jul 25 at 20:56
  • 3
    \$\begingroup\$ Out of curiosity, what did your original program look like? \$\endgroup\$ – nthistle Jul 25 at 20:59
  • \$\begingroup\$ Very different, but I think I'll iterate on it and post another cop before surrendering :) \$\endgroup\$ – histocrat Jul 26 at 0:08
10
\$\begingroup\$

Haskell, cracks Ad Hoc Garf Hunter's answer

Hard version:

main=print[p|r<-[[n..m]|m<-[a|a<-['n'..],init[a|a<-['n'..],'|'<a,[a,']','<']<[a,']'..]]<[a],[a,']','<']<[a,']'..]],n<-[a|a<-init=<<[init['n','a'..]],a<'-']],p<-r,p<','||','<p,p<'.'||'.'<p,p<'['||'['<p,p<'|'||'|'<p,p<'<'||'<'<p,p<'-'||'-'<p,p<']'||']'<p,p<'m'||'m'<p,p<'a'||'a'<p,p<'i'||'i'<p,p<'n'||'n'<p,p<'p'||'p'<p,p<'r'||'r'<p,p<'t'||'t'<p,p<'='||'='<p,t<-init=<<[init=<<[init=<<[init=<<[init[t|n<-[a|a<-init=<<[init['n','a'..]],a<'-'],t<-[n..','],[n,t,'.']<[n,t..]]]]]],p<t||t<p,i<-init[a|a<-['n','['..],a<'.'],i<p||p<i]

Easy version:

main=print[p|r<-[[n..m]|m<-[a|a<-['n'..],init[a|a<-['n'..],'|'<a,[a,']','<']<[a,']'..]]<[a],[a,']','<']<[a,']'..]],n<-[a|a<-init=<<[init['n','a'..]],a<'-']],p<-r,p<','||','<p,p<'.'||'.'<p,p<'['||'['<p,p<'|'||'|'<p,p<'<'||'<'<p,p<'-'||'-'<p,p<']'||']'<p,p<'m'||'m'<p,p<'a'||'a'<p,p<'i'||'i'<p,p<'n'||'n'<p,p<'p'||'p'<p,p<'r'||'r'<p,p<'t'||'t'<p,p<'='||'='<p,t<-init=<<[init=<<[init=<<[init=<<[init[t|n<-[a|a<-init=<<[init['n','a'..]],a<'-'],t<-[n..','],[n,t,'.']<[n,t..]]]]]],p<t||t<p,i<-init[a|a<-['n','['..],a<'.'],i<p||p<i,':'<p||p<':']

Found by lots of trial and error, mostly using ranges, list comprehensions and comparisons as filters. Some used tricks:

  • We can only ever obtain strings, never single characters (except those that are allowed). List comprehensions work around this: If s=[c] and t=[d] are single-character strings, then [[c,d..]|c<-s,d<-t] is equivalent to [[c,d..]]
  • init.init[1,2,3] doesn't work due to precedence. Use init=<<[init[1,2,3]] instead
  • Lexicographic ordering is useful! Things like [a,'.'..]>[a,'.'] (check if further terms in arithmetic sequence exist) and [a,'m'..]>[a,'m',']'] (check if next term is greater than ']') are useful checks for narrowing down characters
  • After we have ' ' and '~' we can construct [' '..'~'], and filter out the allowed chars using the construct p<'m'||'m'<p. However, we can't write ''', so ' has to again be generated using range tricks

There are probably some shortcuts using some kind of pattern matching inside the assignment (for example, the inits could be elimited by something like [a,_,_]<-[[...]] instead of a<-init=<<[init[...]].

| improve this answer | |
\$\endgroup\$
  • \$\begingroup\$ I see you got some use out of the library functions other than print! Interesting approach. I'm going to have to see if I can rework this to curb this approach. \$\endgroup\$ – Ad Hoc Garf Hunter Jul 26 at 1:44
8
\$\begingroup\$

Java (JDK), cracks user's answer

class T{public static void main(String... args){if(System.out.printf(""+(char)92+(char)91+(char)59)==null){}}}

Try it online!

This was pretty fun. First, we need a main method without the square brackets, which can be done with the standard main method definition replacing the square brackets with ellipsis, and then to avoid the semicolon we can wrap the print statement into an if conditional so that it executes when the condition is being checked, printing the characters according to their ascii values.

| improve this answer | |
\$\endgroup\$
  • 3
    \$\begingroup\$ Welcome to the site! \$\endgroup\$ – Ad Hoc Garf Hunter Jul 26 at 18:57
  • \$\begingroup\$ Thank you @AdHocGarfHunter :) \$\endgroup\$ – aadirag Jul 26 at 19:02
  • \$\begingroup\$ This is almost exactly what I had. Well done! \$\endgroup\$ – user Jul 26 at 19:24
6
\$\begingroup\$

C (gcc), cracks Noodle9's answer

Output: #_ep

Since printf, put and write are not allowed I had to use inline assembly to send data to stdout. The string "\043\137\145\160" encodes the desired output in octal notation.

int main()
{
    long r;
    asm ("int $0x80" : "=a" (r) : "a" (4), "b"(1), "c"("\043\137\145\160"), "d" (4));
}

Try it online!

| improve this answer | |
\$\endgroup\$
6
\$\begingroup\$

R, cracks Dominic van Essen's challenge

The string to print is

0123456789+-*/^!&|%`()$

My (circumvoluted) solution is:

"<"=sum
a=T<F
aa=T<T
aaa=T<aa
aaaa=T<aaa
aaaaa=T<aaaa
aaaaaa=T<aaaaa
aaaaaaa=T<aaaaaa
aaaaaaaa=T<aaaaaaa
aaaaaaaaa=T<aaaaaaaa
"["=example
S=Syntax[,,,T]
A=Arithmetic[,,,T]
Q=Quotes[,,,T]
">"=strsplit
As=A>""
Ss=S>""
Qs=Q>""
"?"=unlist
Au=?As
Su=?Ss
Qu=?Qs
"<"=c
b=Au<Su
b=b<Qu
"?"=unique
b=?b
"?"=sort
b=?b
n=F:aaaaaaaaa
"?"=rm
?"["
">"=sum
r=n<b[{aaaaaaaaa>aaaaaaaaa}>aaaa]
r=r<b[aaa]
r=r<b[aaaaaa>aaaaaaaa]
r=r<b[aaaaaaa>aaaaaaaa]
r=r<b[{aaaaaaaaa>aaaaaaaaa}>aaa]
r=r<b[aaaaaaa]
r=r<b[aaaaaaaa>aaaaaaaaa]
r=r<b[aaaaaaaaa>{aaaaaaaaa>aaaaaaaa}]
r=r<b[{aaaaaaaaa>aaaaaa}>aaaa]
r=r<b[{aaaaaaaaa>aaaaaa}>aaaaa]
r=r<b[aaaaaaaaa>aaa]
r=r<b[aaaaaaaaa>aaaa]
r=r<b[aaaaaaaaa>{aaaaaaaaa>aaaaaaaaa}]
"["=write
"?"=length
r["",?r,,""]

Don't try it online!: it doesn't work on TIO, but it works on my laptop.

The key idea relies on

unlist(strsplit(example(Syntax, give.lines=T), ""))

The function example is usually used to execute the "Examples" section of a help file. With the give.lines=T argument, you can get the code of those examples; this includes a lot useful characters. In this case, the examples for Syntax, Arithmetic and Quotes combined contain all the necessary characters, plus some extra ones, stored in b.

Since we are not allowed brackets, calling functions requires redefining the operators ?<>[, making the code even messier. (Thanks to Giuseppe for pointing out that this was possible with the available characters.)

The rest of the code defines constants 1 to 9 (a to aaaaaaaaa; some of these are not needed in the end but I'm not sure which ones) and extracts the values of b in the right order.

Slightly commented version:

"<"=sum
a=T<F  # a=1
aa=T<T #aa=2
aaa=T<aa #aaa=3
aaaa=T<aaa #...
aaaaa=T<aaaa
aaaaaa=T<aaaaa
aaaaaaa=T<aaaaaa
aaaaaaaa=T<aaaaaaa
aaaaaaaaa=T<aaaaaaaa # aaaaaaaaa=9
"["=example
S=Syntax[,,,T] # S=example(Syntax, give.lines=T)
A=Arithmetic[,,,T] # A=example(Arithmetic, give.lines=T)
Q=Quotes[,,,T] # Q=example(Quotes, give.lines=T)
">"=strsplit
As=A>"" # As=strsplit(A)
Ss=S>"" # Ss=strsplit(S)
Qs=Q>"" # Qs=strsplit(Q)
"?"=unlist
Au=?As # Au=unlist(As)
Su=?Ss # Su=unlist(Ss)
Qu=?Qs # Qu=unlist(Qs)
"<"=c
b=Au<Su 
b=b<Qu # b=c(Au, Su, Qu)
"?"=unique
b=?b
"?"=sort
b=?b # b=sort(unique(b))
n=F:aaaaaaaaa # n=0:9
"?"=rm
?"["
">"=sum
r=n<b[{aaaaaaaaa>aaaaaaaaa}>aaaa] # r=c(n, b[9+9+4]) since b[22]=="+"
r=r<b[aaa] # r=c(r,b[3]) since b[3]=="-"
r=r<b[aaaaaa>aaaaaaaa] # ...
r=r<b[aaaaaaa>aaaaaaaa]
r=r<b[{aaaaaaaaa>aaaaaaaaa}>aaa]
r=r<b[aaaaaaa]
r=r<b[aaaaaaaa>aaaaaaaaa]
r=r<b[aaaaaaaaa>{aaaaaaaaa>aaaaaaaa}]
r=r<b[{aaaaaaaaa>aaaaaa}>aaaa]
r=r<b[{aaaaaaaaa>aaaaaa}>aaaaa]
r=r<b[aaaaaaaaa>aaa]
r=r<b[aaaaaaaaa>aaaa]
r=r<b[aaaaaaaaa>{aaaaaaaaa>aaaaaaaaa}]
"["=write
"?"=length
r["",?r,,""] # write(r, file="", ncolumns=length(r), sep="")
| improve this answer | |
\$\endgroup\$
  • 1
    \$\begingroup\$ Why doesn't it work on TIO? \$\endgroup\$ – pppery Jul 26 at 22:18
  • 2
    \$\begingroup\$ @pppery From what I understand: because it relies on the Examples section of the help text, which is not accessible on TIO for some reason. I have tried several other local installs of R, and it works on all of them. \$\endgroup\$ – Robin Ryder Jul 26 at 22:22
  • \$\begingroup\$ Back to the drawing board, then... Well done! \$\endgroup\$ – Dominic van Essen Jul 27 at 6:25
6
\$\begingroup\$

J, cracks @xash's answer

(97)1!:2(4)
(117)1!:2(4)
(46)1!:2(4)

Try it online!

Gonna be honest, not entirely sure why this works. I was trying to learn J syntax and playing around with a few things, and I found that you can just send ASCII values to STDOUT and they get automatically converted into characters. Neat!

| improve this answer | |
\$\endgroup\$
6
\$\begingroup\$

JavaScript (Babel), cracks my pronoun is monicareinstate's answer

The answer is 74291 bytes using only the characters [+|>], which is unfortunately too large to post here, so I've provided a GitHub repository to verify the solution.

git clone https://github.com/patrickroberts/xchars-pipeline.git
cd xchars-pipeline
npm install
npx babel-node index.js

Output:

!"#$%&'()*,-./0123456789:;=ABCDEFGHIJKLMNOPQRSTUVWXYZ^_`abcdefghijklmnopqrstuvwxyz

This output limits us to the printable ASCII characters +<>?@[]{|}~ (as Calculuswhiz points out), which means the only way to invoke a function is with the pipeline operator |>.

Essentially the pipeline operator allows f(x) to be expressed as x|>f. Other than that, the restricted source using these characters is very similar to JSF*ck. I compiled the following program using Xchars.js

console.log('!"#$%&\'()*,-./0123456789:;=ABCDEFGHIJKLMNOPQRSTUVWXYZ^_`abcdefghijklmnopqrstuvwxyz')

and was able to interpret it using a Babel plugin. There are two competing proposals for the pipeline operator supported by this plugin, but I opted to use the F#-style pipeline since the output of the Xchars.js compiler is not compatible with the Smart pipeline and Babel will throw the following error during compilation:

SyntaxError: Pipeline is in topic style but does not use topic reference (1:670)
| improve this answer | |
\$\endgroup\$
  • 2
    \$\begingroup\$ "I compiled the following program using Xchars.js" why does that thing even exist :(. This runs only in Babel (which, as I think, is not even a Javascript interpreter) and not in SpiderMonkey compiled with --enable-pipeline-operator (which I hoped answers would use), but I guess I have to accept this as a solution. \$\endgroup\$ – my pronoun is monicareinstate Jul 27 at 5:04
  • 4
    \$\begingroup\$ @mypronounismonicareinstate "why does that thing even exist" -- are you saying you expected someone to hand-write a 72kB program which is only a trivial variation of JSF*ck? "which I hoped answers would use" -- if you wanted answers to use SpiderMonkey compiled with --enable-pipeline-operator then you should have specified that in your answer, otherwise as others rightly pointed out, any JavaScript interpreter is considered a valid crack. \$\endgroup\$ – Patrick Roberts Jul 27 at 5:35
5
\$\begingroup\$

CJam, Ethan Chapman's answer

9`:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)0=,_34=\_97=\_99=\_101=\_115=\39=

Try it online!

| improve this answer | |
\$\endgroup\$
5
\$\begingroup\$

Ruby, cracks @histocrat's answer, 55 bytes

method("\x70rint")["\x70\x3c\x2e\x24%c%d\x73"%[97,3-2]]

The approach I took here was to find a way to access the print method, using method seemed sensible, but trying to invoke it was harder than I'd have liked, then I happened to stumble across the docs for Proc which showed the <method reference>[<args>] notation which gave me the last piece I needed!

Try it online!

| improve this answer | |
\$\endgroup\$
5
\$\begingroup\$

Ruby, @histocrat's answer, 48 bytes

STDOUT::write"\x70\x3c\x2e\x24%c%d\x64"%[97,3-2]

Try it online!

I had no idea you could call methods that way, until I read this answer (thanks @histocrat!)

| improve this answer | |
\$\endgroup\$
5
\$\begingroup\$

Wolfram Language (Mathematica), cracks att's answer

{69,99,95+9,111,64,68,116,91,48,32,38,32,93,1+9}//("Fr*ara*de"//Names//Tr//(x//Head))//("Prin"~~_//Names//Tr//(x//Head))

Try it online!

| improve this answer | |
\$\endgroup\$
  • \$\begingroup\$ no need for 1+9, since Print already includes the trailing newline \$\endgroup\$ – att Jul 27 at 16:45
5
\$\begingroup\$

QBasic 1.1, cracks DLosc's answer

The string to print is:

Cc

Thanks to QBasic's complete lack of memory safety, my solution creates an arbitrary two character string, gets its memory address, directly changes the memory into the right ASCII codes, and prints the result:

X$ = "aa"
A = SADD(X$)
POKE A, 67
POKE A + 1, 99
PRINT X$
| improve this answer | |
\$\endgroup\$
  • 1
    \$\begingroup\$ Welcome to CGCC! I thought something like this would be possible, although it wasn't my intended solution. Let me see if I can prevent it in my next cop answer... \$\endgroup\$ – DLosc Jul 29 at 4:20
5
\$\begingroup\$

Perl 5 cracks @Gilles 'SO- stop being evil''s answer, 5845 (!) bytes

Note: the original program contains \x18 which is used as ^X in this answer.

($__=()=())=>($___=()=(_))=>($____=()=(_=>_))=>($_____=()=(_=>_=>_))=>($______=()=(_=>_=>_=>_))=>($_______=()=(_=>_=>_=>_=>_))=>($________=()=(_=>_=>_=>_=>_=>_))=>($_________=()=(_=>_=>_=>_=>_=>_=>_))=>($__________=()=(_=>_=>_=>_=>_=>_=>_=>_))=>($___________=()=(_=>_=>_=>_=>_=>_=>_=>_=>_))=>($_=[]=>/./)=>(($____________=>$_____________=>$______________=>$_______________=>$________________=>$_________________=>$__________________=>$___________________=>$____________________=>$_____________________=>$______________________=>$_______________________=>$________________________=>$_________________________=>$__________________________=>$___________________________=>$____________________________=>$_____________________________=>$______________________________=>$_______________________________=>$________________________________=>$_________________________________=>$__________________________________=>$___________________________________=>$____________________________________=>$_____________________________________)=$&.._)=>($_=$^X=>/...$/=>$_=$&=>/./)=>(($__________________________________________=>$___________________________________________=>$____________________________________________=>$_____________________________________________=>$______________________________________________=>$_______________________________________________=>$________________________________________________=>$_________________________________________________=>$__________________________________________________=>$___________________________________________________=>$____________________________________________________=>$_____________________________________________________=>$______________________________________________________=>$_______________________________________________________=>$________________________________________________________=>$_________________________________________________________=>$__________________________________________________________=>$___________________________________________________________=>$____________________________________________________________=>$_____________________________________________________________=>$______________________________________________________________=>$_______________________________________________________________=>)=$&.._)=>($______________________________________=$__________________________________________&$______________________________________________________________)=>(($______________________________________=>$_______________________________________=>$________________________________________=>$_________________________________________=>)=$______________________________________.._)=>($_________________________________________________________________=$____________________________________________&(!$_________).$_________)=>($__________________________________________________________________=$______________.$__________________________.$_____________________________.$________________.$_________________________________________________________________.$__________________________________________.$___________________________________________________________.$______________________________________.$_________________________________________________.$_______________________________________.$______________________________________________________________.$_________________________________________________________.$__________________________________________.$________________________________________________________)=>($___________________________________________________________________=$______________.$__________________________.$_____________________________.$________________.$_________________________________________________________________.$_____________________________________________________.$______________________________________.$________________________________________.$________________________________________________)=>(&$__________________________________________________________________(&$___________________________________________________________________($______________.$__________.$___________=>$___.$___.$____=>$___.$___.$______=>$___.$__.$_______=>$___.$___.$__=>$___.$___.$________=>$_____.$____=>$___.$___.$_____=>$______.$_________=>$_____.$_____=>$_____.$______=>$_____.$___________=>$______.$____=>$______.$_____=>$______.$______=>$______.$_______=>$______.$__________=>$______.$___________=>$_______.$__=>$_______.$___=>$_______.$____=>$_______.$_____=>$_______.$______=>$_______.$_______=>$_______.$________=>$_______.$_________=>$_______.$__________=>$_______.$___________=>$________.$__=>$________.$_____=>$________.$______=>$________.$_______=>$________.$________=>$________.$_________=>$________.$__________=>$________.$___________=>$_________.$__=>$_________.$___=>$_________.$____=>$_________.$_____=>$_________.$______=>$_________.$_______=>$_________.$________=>$_________.$_________=>$_________.$__________=>$_________.$___________=>$__________.$__=>$__________.$___=>$__________.$____=>$__________.$_____=>$__________.$______=>$__________.$_______=>$__________.$________=>$__________.$_________=>$__________.$__________=>$__________.$___________=>$___________.$__=>$___________.$____=>$___________.$______=>$___________.$________=>$___________.$_________=>$___________.$__________=>$___________.$___________=>$___.$__.$__=>$___.$__.$___=>$___.$__.$____=>$___.$__.$_____=>$___.$__.$______=>$___.$__.$_______=>$___.$__.$________=>$___.$__.$_________=>$___.$__.$__________=>$___.$__.$___________=>$___.$___.$__=>$___.$___.$___=>$___.$___.$____=>$___.$___.$_____=>$___.$___.$______=>$___.$___.$_______=>$___.$___.$________=>$___.$___.$_________=>$___.$___.$__________=>$___.$___.$___________=>$___.$____.$__=>$___.$____.$___=>$___.$____.$____=>$___.$____.$_____=>$___.$____.$______=>$___.$____.$________=>$______.$_________)))

Try it online!

Explanation

This is a very restrictive set of characters, but the biggest problem I encountered was trying to get access to the lowercase letters.

First the numbers are set up and stored in $__ (0) to $___________ which was using lengths of lists to get the scalar numbers. Next target was to set up A to Z. To do this, $_ is set to [] which, in scalar context, evaluates to a string like ARRAY(0x123456789abc) so /./ sets $& to A which is then used in a range with _ ($&.._) which you can assign to many variables in list context (e.g. ($a, $b, $c) = a..c, but using long strings of _s for the names in this).

Next it's necessary to generate the lowercase letters to be able to call functions, this was pretty tricky and I'm using something that might be a little unfair as it can potentially change depending on the implementation. I did look at a few different ideas before settling on this one, I originally hoped to use __PACKAGE__ which returns main and would easily enable producing a.._, but I wasn't able to get it to work. With more patience maybe... But knowing that Perl stores the executable the program was invoked with in a special variable $^X ($\x18), which ends with perl on most of my tests on Linux, was a viable (if not entirely portable) solution. This provides access to e, via storing $^X in $_, matching /...$/, which would store erl in $&, storing this in $_, matching again /./ to store e in $& then, as was done for the uppercase letters, generating a range from e to _ and storing. To get access to a, it's necessary to perform another [stringwise operation of "e"&"y"] and generate the missing start of the alphabet as was done for the other letters.

To be able to call library functions it's necessary to generate :: (or ' which functions identically), fortunately ' can be generated via a stringwise AND operation of g&"7", but it's necessary to concatenate 7 with the empty string to cast to string so "g"&(!7).7 is used.

Now we have all the letters and ' which means we can call CORE::evalbytes (or any other functions in the CORE library), but we need to be able to generate characters we haven't pre-generated, so CORE::pack is used to generate a string by passing in a list of numbers and converting them to characters, that will be evaled producing the desired output.

| improve this answer | |
\$\endgroup\$
5
\$\begingroup\$

Mornington Crescent, 15909 bytes, cracks Discrete lizard's second answer

The battle for London is on, and I have been proven as the victor

Take Northern Line to King's Cross St. Pancras
Take Victoria Line to Seven Sisters
Take Victoria Line to Victoria
Take Circle Line to Victoria
Take Circle Line to Cannon Street
Take Circle Line to Victoria
Take Victoria Line to Seven Sisters
Take Victoria Line to Victoria
Take Victoria Line to Victoria
Take District Line to Mile End
Take District Line to Victoria
Take District Line to Mile End
Take District Line to Victoria
Take District Line to Victoria
Take Circle Line to Moorgate
Take Circle Line to Moorgate
Take Northern Line to Charing Cross 
Take Northern Line to King's Cross St. Pancras
Take Northern Line to King's Cross St. Pancras
Take Circle Line to Cannon Street
Take Circle Line to King's Cross St. Pancras
Take Circle Line to King's Cross St. Pancras
Take Northern Line to Charing Cross
Take Northern Line to King's Cross St. Pancras
Take Northern Line to King's Cross St. Pancras
Take Circle Line to Cannon Street
Take Circle Line to King's Cross St. Pancras
Take Circle Line to Cannon Street
Take Circle Line to Westbourne Park
Take Circle Line to Victoria
Take Victoria Line to Seven Sisters
Take Victoria Line to Victoria
Take District Line to Mile End
Take District Line to Victoria
Take District Line to Mile End
Take District Line to Victoria
Take District Line to Victoria
Take Circle Line to Moorgate
Take Circle Line to Moorgate
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to King's Cross St. Pancras
Take Circle Line to King's Cross St. Pancras
Take Circle Line to Cannon Street
Take Circle Line to King's Cross St. Pancras
Take Circle Line to Cannon Street
Take Circle Line to King's Cross St. Pancras
Take Circle Line to Cannon Street
Take Circle Line to King's Cross St. Pancras
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Bank
Take District Line to Plaistow
Take District Line to Victoria
Take Victoria Line to Seven Sisters
Take Victoria Line to Victoria
Take District Line to Mile End
Take District Line to Victoria
Take District Line to Mile End
Take District Line to Victoria
Take District Line to Victoria
Take Circle Line to Moorgate
Take Circle Line to Moorgate
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to King's Cross St. Pancras
Take Circle Line to King's Cross St. Pancras
Take Circle Line to Cannon Street
Take Circle Line to King's Cross St. Pancras
Take Circle Line to Cannon Street
Take Circle Line to King's Cross St. Pancras
Take Circle Line to Cannon Street
Take Circle Line to King's Cross St. Pancras
Take Northern Line to Charing Cross
Take Northern Line to Bank
Take Circle Line to Bank
Take Circle Line to Paddington
Take Circle Line to Bank
Take Circle Line to Paddington
Take Circle Line to Bank
Take Northern Line to Charing Cross
Take Northern Line to Bank
Take Circle Line to Bank
Take Circle Line to Paddington
Take Circle Line to Bank
Take Northern Line to Charing Cross
Take Bakerloo Line to Stonebridge Park
Take Bakerloo Line to Oxford Circus
Take Bakerloo Line to Oxford Circus
Take Victoria Line to Victoria
Take Victoria Line to Seven Sisters
Take Victoria Line to Victoria
Take District Line to Mile End
Take District Line to Victoria
Take District Line to Mile End
Take District Line to Victoria
Take District Line to Victoria
Take Circle Line to Moorgate
Take Circle Line to Moorgate
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to King's Cross St. Pancras
Take Circle Line to King's Cross St. Pancras
Take Circle Line to Cannon Street
Take Circle Line to King's Cross St. Pancras
Take Circle Line to Cannon Street
Take Circle Line to King's Cross St. Pancras
Take Circle Line to Cannon Street
Take Circle Line to King's Cross St. Pancras
Take Northern Line to Charing Cross
Take Northern Line to Bank
Take Circle Line to Bank
Take Circle Line to Paddington
Take Circle Line to Bank
Take Circle Line to Paddington
Take Circle Line to Bank
Take Northern Line to Charing Cross
Take Northern Line to Bank
Take Circle Line to Bank
Take Circle Line to Paddington
Take District Line to Parsons Green
Take District Line to Cannon Street
Take Circle Line to Victoria
Take Victoria Line to Seven Sisters
Take Victoria Line to Victoria
Take Circle Line to Victoria
Take Circle Line to Cannon Street
Take Circle Line to Bank
Take Circle Line to Bank
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Bank
Take Circle Line to Bank
Take Circle Line to Aldgate
Take Circle Line to Euston Square
Take Circle Line to Paddington
Take Circle Line to Bank
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Bank
Take Circle Line to Bank
Take Circle Line to Paddington
Take Circle Line to Paddington
Take Circle Line to Bank
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Bank
Take Circle Line to Bank
Take Circle Line to Paddington
Take District Line to Victoria
Take Victoria Line to Seven Sisters
Take Victoria Line to Victoria
Take District Line to Mile End
Take District Line to Victoria
Take District Line to Mile End
Take District Line to Victoria
Take District Line to Victoria
Take Circle Line to Moorgate
Take Circle Line to Moorgate
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to King's Cross St. Pancras
Take Circle Line to King's Cross St. Pancras
Take Circle Line to Cannon Street
Take Circle Line to King's Cross St. Pancras
Take Circle Line to Cannon Street
Take Circle Line to King's Cross St. Pancras
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to King's Cross St. Pancras
Take Circle Line to King's Cross St. Pancras
Take Circle Line to Cannon Street
Take Circle Line to King's Cross St. Pancras
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Bank
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Bank
Take Circle Line to Bank
Take Circle Line to Paddington
Take Circle Line to Bank
Take Circle Line to Paddington
Take Circle Line to Bank
Take Northern Line to Tooting Bec
Take Northern Line to Bank
Take Circle Line to Bank
Take District Line to Victoria
Take Victoria Line to Seven Sisters
Take Victoria Line to Victoria
Take District Line to Mile End
Take District Line to Victoria
Take District Line to Mile End
Take District Line to Victoria
Take District Line to Victoria
Take Circle Line to Moorgate
Take Circle Line to Moorgate
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to King's Cross St. Pancras
Take Circle Line to King's Cross St. Pancras
Take Circle Line to Cannon Street
Take Circle Line to King's Cross St. Pancras
Take Circle Line to Cannon Street
Take Circle Line to King's Cross St. Pancras
Take Circle Line to Cannon Street
Take Circle Line to King's Cross St. Pancras
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Bank
Take Circle Line to Bank
Take Circle Line to Paddington
Take Circle Line to Paddington
Take Circle Line to Bank
Take Northern Line to Kennington
Take Northern Line to Bank
Take Circle Line to Bank
Take Circle Line to Victoria
Take Victoria Line to Seven Sisters
Take Victoria Line to Victoria
Take District Line to Mile End
Take District Line to Victoria
Take District Line to Mile End
Take District Line to Victoria
Take District Line to Victoria
Take Circle Line to Moorgate
Take Circle Line to Moorgate
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to King's Cross St. Pancras
Take Circle Line to King's Cross St. Pancras
Take Circle Line to Cannon Street
Take Circle Line to King's Cross St. Pancras
Take Circle Line to Cannon Street
Take Circle Line to King's Cross St. Pancras
Take Circle Line to Cannon Street
Take Circle Line to King's Cross St. Pancras
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Bank
Take Circle Line to Bank
Take Circle Line to Paddington
Take District Line to Parsons Green
Take District Line to Cannon Street
Take Circle Line to Victoria
Take Victoria Line to Seven Sisters
Take Victoria Line to Victoria
Take Circle Line to Victoria
Take Circle Line to Cannon Street
Take Circle Line to Bank
Take Circle Line to Bank
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Bank
Take Circle Line to Bank
Take Circle Line to Baker Street
Take Circle Line to Blackfriars
Take Circle Line to Victoria
Take Victoria Line to Seven Sisters
Take Victoria Line to Victoria
Take District Line to Mile End
Take District Line to Victoria
Take District Line to Mile End
Take District Line to Victoria
Take District Line to Victoria
Take Circle Line to Moorgate
Take Circle Line to Moorgate
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to King's Cross St. Pancras
Take Circle Line to King's Cross St. Pancras
Take Circle Line to Cannon Street
Take Circle Line to King's Cross St. Pancras
Take Circle Line to Cannon Street
Take Circle Line to King's Cross St. Pancras
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to King's Cross St. Pancras
Take Circle Line to King's Cross St. Pancras
Take Circle Line to Cannon Street
Take Circle Line to King's Cross St. Pancras
Take Northern Line to Charing Cross
Take Northern Line to Bank
Take Circle Line to Bank
Take Circle Line to Paddington
Take Circle Line to Bank
Take Northern Line to Charing Cross
Take Northern Line to Bank
Take Circle Line to Bank
Take Circle Line to Paddington
Take Circle Line to Barbican
Take Circle Line to Victoria
Take Victoria Line to Seven Sisters
Take Victoria Line to Victoria
Take District Line to Mile End
Take District Line to Victoria
Take District Line to Mile End
Take District Line to Victoria
Take District Line to Victoria
Take Circle Line to Moorgate
Take Circle Line to Moorgate
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to King's Cross St. Pancras
Take Circle Line to King's Cross St. Pancras
Take Circle Line to Cannon Street
Take Circle Line to King's Cross St. Pancras
Take Circle Line to Cannon Street
Take Circle Line to King's Cross St. Pancras
Take Circle Line to Cannon Street
Take Circle Line to King's Cross St. Pancras
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Bank
Take Circle Line to Bank
Take Circle Line to Paddington
Take Circle Line to Paddington
Take District Line to Southfields
Take District Line to Victoria
Take Victoria Line to Seven Sisters
Take Victoria Line to Victoria
Take District Line to Mile End
Take District Line to Victoria
Take District Line to Mile End
Take District Line to Victoria
Take District Line to Victoria
Take Circle Line to Moorgate
Take Circle Line to Moorgate
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to King's Cross St. Pancras
Take Circle Line to King's Cross St. Pancras
Take Circle Line to Cannon Street
Take Circle Line to King's Cross St. Pancras
Take Circle Line to Cannon Street
Take Circle Line to King's Cross St. Pancras
Take Circle Line to Cannon Street
Take Circle Line to King's Cross St. Pancras
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Bank
Take Circle Line to Bank
Take Circle Line to Paddington
Take District Line to Parsons Green
Take District Line to Cannon Street
Take Circle Line to Victoria
Take Victoria Line to Seven Sisters
Take Victoria Line to Victoria
Take Circle Line to Victoria
Take Circle Line to Cannon Street
Take Circle Line to Bank
Take Circle Line to Bank
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Bank
Take Circle Line to Bank
Take Circle Line to Edgware Road
Take Circle Line to Bank
Take Circle Line to Wood Lane
Take Circle Line to Sloane Square
Take Circle Line to Paddington
Take Circle Line to Bank
Take Northern Line to Charing Cross
Take Northern Line to Bank
Take Circle Line to Bank
Take Circle Line to Paddington
Take Circle Line to Paddington
Take Circle Line to Bank
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Bank
Take Circle Line to Bank
Take Circle Line to Paddington
Take District Line to Victoria
Take Victoria Line to Seven Sisters
Take Victoria Line to Victoria
Take District Line to Mile End
Take District Line to Victoria
Take District Line to Mile End
Take District Line to Victoria
Take District Line to Victoria
Take Circle Line to Moorgate
Take Circle Line to Moorgate
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to King's Cross St. Pancras
Take Circle Line to King's Cross St. Pancras
Take Circle Line to Cannon Street
Take Circle Line to King's Cross St. Pancras
Take Circle Line to Cannon Street
Take Circle Line to King's Cross St. Pancras
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to King's Cross St. Pancras
Take Circle Line to King's Cross St. Pancras
Take Circle Line to Cannon Street
Take Circle Line to King's Cross St. Pancras
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Bank
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Bank
Take Circle Line to Bank
Take Circle Line to Paddington
Take Circle Line to Wood Lane
Take Circle Line to Paddington
Take Circle Line to Bank
Take Circle Line to Paddington
Take Circle Line to Paddington
Take Circle Line to Bank
Take Circle Line to Bank
Take Northern Line to Colindale
Take Northern Line to Bank
Take Circle Line to Bank
Take Circle Line to Victoria
Take Victoria Line to Seven Sisters
Take Victoria Line to Victoria
Take District Line to Mile End
Take District Line to Victoria
Take District Line to Mile End
Take District Line to Victoria
Take District Line to Victoria
Take Circle Line to Moorgate
Take Circle Line to Moorgate
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to King's Cross St. Pancras
Take Circle Line to King's Cross St. Pancras
Take Circle Line to Cannon Street
Take Circle Line to King's Cross St. Pancras
Take Circle Line to Cannon Street
Take Circle Line to King's Cross St. Pancras
Take Circle Line to Cannon Street
Take Circle Line to King's Cross St. Pancras
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Bank
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Bank
Take Circle Line to Bank
Take Circle Line to Paddington
Take District Line to Parsons Green
Take District Line to Cannon Street
Take Circle Line to Victoria
Take Victoria Line to Seven Sisters
Take Victoria Line to Victoria
Take Circle Line to Victoria
Take Circle Line to Cannon Street
Take Circle Line to Bank
Take Circle Line to Bank
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Bank
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Bank
Take Circle Line to Bank
Take Circle Line to Paddington
Take Circle Line to Aldgate
Take Circle Line to Paddington
Take Circle Line to Baker Street
Take Circle Line to Paddington
Take Circle Line to Paddington
Take Circle Line to Edgware Road
Take Circle Line to Paddington
Take Circle Line to Paddington
Take Circle Line to Bank
Take Circle Line to Paddington
Take Circle Line to Bank
Take Circle Line to Bank
Take Northern Line to Mornington Crescent

I realized about 2/3 of the way through writing this program that I was using an inefficient approach and the code was about twice as long as it needed to be, but that doesn't matter since there's no value to short robber answers.

Try it online!

| improve this answer | |
\$\endgroup\$
  • \$\begingroup\$ I was trying to solve this as well (first time dealing with Mornington Crescent) but didn't succeeded to get even close to the solution. Please let me know if I'm wrong, but the only operations that remained were integer division , bitwise NOT, parse string to integer, 7, character <-> codepoint, string concat, right substring, if, pop, exit. And my approach was getting into the codepoints of the characters using capital characters of stations. (1/2) \$\endgroup\$ – SomoKRoceS Aug 1 at 16:14
  • \$\begingroup\$ But since the capital letters are lower than small letters, and I didn't had tools for incrementing my value or concatenate numbers (because they are not strings), I didn't manage to get to those codepoints. Can you please explain the general idea how to get to those codepoints with only the stations remaining? I probably have missed something. Thanks :) (2/2) \$\endgroup\$ – SomoKRoceS Aug 1 at 16:16
  • \$\begingroup\$ Sure. First, I generated a 2, by taking a C from Charing Cross and dividing it by a space (the seventh-to-last character in "Cannon Street"). Then, I took a bunch of other stations, took the seventh-to-last character of their names, converted it to an integer, and divided it by two, and converted it back to a string, producing stringified digits. I concatenated 3 different stringified digits to make a stringified three-digit number, interpreted it as a base-10 integer using Parsons Green, divided it by 7 (although I think this last step is unnecessary), to produce the right codepoint. \$\endgroup\$ – pppery Aug 1 at 16:22
  • 1
    \$\begingroup\$ Yes, you understand me correctly. No idea why Charing Cross on your interpreter is giving an error. It works both for me locally and on TIO. \$\endgroup\$ – pppery Aug 1 at 16:34
  • 1
    \$\begingroup\$ @SomoKRoceS There is quite a bit of ambiguity in the language spec here that interpreters likely deal with as in their host language. For example, if the integer on Mile End is longer than the string length, I would consider this to be index 'out of range' in most languages. However, Python 3 does not give a runtime error on "example"[-100:] and neither does the linked interpreter with example and 100 on Mile End. \$\endgroup\$ – Discrete lizard Aug 1 at 17:28
4
\$\begingroup\$

R, 209 bytes, cracks Robin Ryder's answer

dput(intToUtf8(c(59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,86,87,88,89,90,91,92,93,94,95,96,97,98,101,103,104,106,107,108,109,113,114,115,118,119,120,121,122,123,124,125,126)))

Try it online!

Found the right output function dput by using apropos on the remaining alphabet characters. dput also happens to be a key element of an R quine.

| improve this answer | |
\$\endgroup\$
  • \$\begingroup\$ Well done! Would it have been more difficult if I had included fewer characters, to make apropos less useful? \$\endgroup\$ – Robin Ryder Jul 26 at 6:26
  • \$\begingroup\$ @RobinRyder probably! It certainly would have taken me a lot longer to golf on my phone, since it'd be harder to try the larger range of functions, but I guess then the only barrier still would have been time. \$\endgroup\$ – Giuseppe Jul 26 at 13:51
4
\$\begingroup\$

C, cracks xibu's answer

#include <stdio.h>

int main(void) <%
  if (printf("%c%c", 123, 59)) <% %>
%>

For some reason, you can use <% instead of { in C. You can also use printf inside an if block to avoid having a single statement with a semicolon.

Try it online!

| improve this answer | |
\$\endgroup\$
  • 2
    \$\begingroup\$ The <% is a legacy feature since not all machines had {} iirc. However today it seems a bit absurd. \$\endgroup\$ – Ad Hoc Garf Hunter Jul 26 at 19:37
  • 1
    \$\begingroup\$ Yes, that was my solution as well. Older Keyboard didn't have some special characters like { an so digraphs were introduced as alternatives for them. \$\endgroup\$ – xibu Jul 26 at 19:43
  • 1
    \$\begingroup\$ @user Here's the relevant page on cppreference: en.cppreference.com/w/c/language/operator_alternative \$\endgroup\$ – L. F. Jul 28 at 15:35
4
\$\begingroup\$

05AB1E, cracks @SomoKRoceS's (other) answer

žEžwžv;;;++çžEžvžv;žv;;žv;;;;++++çžEžvžv;žv;;+++çžEžvžv;žv;;;;+++çžEžvžv;++çžzžxžwžvžv;žv;;žv;;;;++++++çžEžwžv;;žv;;;+++çžEžvžv;žv;;žv;;;++++çžwžv;;žv;;;žv;;;;+++çžwžv;;;+çžCžBžzžwžv;žv;;žv;;;;++++++çžwžv+çžwžvžv;;;;++çžwžvžv;;;++çžwžvžv;;;žv;;;;+++çžwžvžv;;++çžwžvžv;;žv;;;;+++çžwžvžv;;žv;;;+++çžwžvžv;;žv;;;žv;;;;++++çžwžvžv;++çžwžvžv;žv;;;;+++çJ

Try it online!

Incidentally, all this approach really needs to function is ç (cast top of stack to a character), J (join together the entire stack into a string), and some way of producing numbers on the stack. My original idea for the latter (since number literals are now banned) was to use T (push 10), then ; (divide by 2) to get a 1 (although that technically also needs ï, cast to int), and then adding that with itself as many times as necessary.

However, since the Unicode character values for this program are in the range of ~8000, this would make for very length source code. I made it a bit shorter by using the literals that push powers of two (žv through žH). Here's the Python script I used to create this:

lookup = {65536: "žH", 32768: "žG", 16384: "žF", 8192: "žE",
          4096: "žD", 2048: "žC", 1024: "žB", 512: "žA",
          256: "žz", 128: "žy", 64: "žx", 32: "žw", 16: "žv",
          8: "žv;", 4: "žv;;", 2: "žv;;;", 1: "žv;;;;"}

def make_value(target):
    if target in lookup:
        return lookup[target]
    use = max(k for k in lookup if k <= target)
    return lookup[use] + make_value(target - use) + "+"

goal = "•”“’‘Ž…„'\"ഭ0123456789"

source = "".join(make_value(ord(c)) + "ç" for c in goal) + "J"
print(source)

for c in goal:
    if c in source:
        print(f"Failed check for '{c}'")
| improve this answer | |
\$\endgroup\$
4
\$\begingroup\$

J, cracks @xash's answer

(tolower'TMOUTPUT')apply 117
(tolower'TMOUTPUT')apply 58
(tolower'TMOUTPUT')apply 46

Try it online!

Classic stdlib abuse. tmoutput is a wrapper for 1!:2&4 which was used in the previous crack. Since it contains u, I use the uppercased name, lowered with tolower and then eval-applied with apply.

| improve this answer | |
\$\endgroup\$
4
\$\begingroup\$

R, 187 bytes, cracks Dominic van Essen's answer

n=pi*pi
d=F:n
`!`=ls
l=!n
i=n*n*pi-pi-pi-T-T
`?`=el
o=n+pi-T-T
t=n+pi-T
p=l?o
b=l?t
k=l?i
A=?letters
`!`=toupper
e=!letters?pi+pi-T
`+`=c
o=d+p+b+A+e
s=l?n*n*n-n-pi-T
`!`=get
`+`=!s
x=o+k

Try it online!

Random tricks:

  • liberal aliasing of functions to the builtin operators to get around (.
  • Uses ls(9) to get a list of all builtins in package:base, getting around the lack of apropos() -- this may not work on non-TIO platforms.
  • Uses el to get around [ since el(what,where)==what[where][[1]]
  • get is used to return a function given a string, in this case sapply.
  • uses sapply(output list,"cat") to print, since otherwise we have no way of specifying that sep="". The x= is just to suppress the output of NULL.
  • uses pi and T and arithmetic for indexing, and n=pi^2 for a close enough approximation to 9.
| improve this answer | |
\$\endgroup\$
  • \$\begingroup\$ Very well done, Giuseppe! \$\endgroup\$ – Dominic van Essen Jul 27 at 14:54
  • \$\begingroup\$ Your solution is much shorter and neater than the one I had in mind when I set the challenge (now revealed). \$\endgroup\$ – Dominic van Essen Jul 27 at 15:27
4
\$\begingroup\$

JavaScript (Browser) (3709 bytes), cracks @Sparkles the Unicorn's answer

-693 bytes thanks to Bubbler's suggestion to use String.fromCharCode only once

console.log(String.fromCharCode(((+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))*([+!+[]]+[+[]])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))+String.fromCharCode(((+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))*([+!+[]]+[+[]])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))+String.fromCharCode(((+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))*([+!+[]]+[+[]])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))+String.fromCharCode(((+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))*([+!+[]]+[+[]])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))+String.fromCharCode(((+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))*([+!+[]]+[+[]]))+String.fromCharCode(((+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))*([+!+[]]+[+[]])+(+!+[]))+String.fromCharCode(((+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))*([+!+[]]+[+[]])+(+!+[])+(+!+[]))+String.fromCharCode(((+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))*([+!+[]]+[+[]])+(+!+[])+(+!+[])+(+!+[]))+String.fromCharCode(((+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))*([+!+[]]+[+[]])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))+String.fromCharCode(((+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))*([+!+[]]+[+[]])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))+String.fromCharCode(((+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))*([+!+[]]+[+[]])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))+String.fromCharCode(((+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))*([+!+[]]+[+[]])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))+String.fromCharCode(((+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))*([+!+[]]+[+[]])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))+String.fromCharCode(((+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))*([+!+[]]+[+[]])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))+String.fromCharCode(((+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))*([+!+[]]+[+[]]))+String.fromCharCode(((+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))*([+!+[]]+[+[]])+(+!+[]))+String.fromCharCode(((+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))*([+!+[]]+[+[]])+(+!+[])+(+!+[]))+String.fromCharCode(((+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))*([+!+[]]+[+[]])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))+String.fromCharCode(((+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))*([+!+[]]+[+[]])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))+String.fromCharCode(((+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))*([+!+[]]+[+[]])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))+String.fromCharCode(((+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))*([+!+[]]+[+[]])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))+String.fromCharCode(((+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))*([+!+[]]+[+[]])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))+String.fromCharCode(((+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))*([+!+[]]+[+[]])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))+String.fromCharCode(((+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))*([+!+[]]+[+[]]))+String.fromCharCode(((+!+[])+(+!+[])+(+!+[])+(+!+[]))*([+!+[]]+[+[]])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))+String.fromCharCode(((+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))*([+!+[]]+[+[]]))+String.fromCharCode(((+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))*([+!+[]]+[+[]])+(+!+[]))+String.fromCharCode(((+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))*([+!+[]]+[+[]])+(+!+[])+(+!+[]))+String.fromCharCode(((+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))*([+!+[]]+[+[]])+(+!+[])+(+!+[])+(+!+[]))+String.fromCharCode(((+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))*([+!+[]]+[+[]])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))+String.fromCharCode(((+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))*([+!+[]]+[+[]])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))+String.fromCharCode(((+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))*([+!+[]]+[+[]])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))+String.fromCharCode(((+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))*([+!+[]]+[+[]])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[]))+String.fromCharCode(((+!+[])+(+!+[])+(+!+[])+(+!+[]))*([+!+[]]+[+[]])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])+(+!+[])))

Try it online!

No numbers? No problem! Also, note the suspicious lack of C and S in the output string. This immediately clued me in to String.fromCharCode – the only problem is how to produce numbers, since all number literals are banned. Fortunately, JavaScript has some really awful type juggling, so you can produce the number 3, for instance, like (+!+[])+(+!+[])+(+!+[]).

In practice, as long as ()+[]! are all allowed, you can just use JSFuck to convert the whole thing, but it really inflates the size (the version of my answer wouldn't fit in this post), and no C and S made me assume that String.fromCharCode was the intended solution anyways. I did borrow the literals for 1 and 10 in order to construct my character codes, though.

| improve this answer | |
\$\endgroup\$
  • 1
    \$\begingroup\$ I think you could make it shorter by using String.fromCharCode only once, as it can take multiple values at once (TIO). \$\endgroup\$ – Bubbler Jul 27 at 23:43
  • 1
    \$\begingroup\$ Oh neat, I didn't know that. I updated the answer, but it's definitely nowhere close to optimal -- I have tons of extra parentheses floating around, and there's shorter ways to express say, 65, than (1+1+1+1+1+1)*(10)+(1+1+1+1+1). \$\endgroup\$ – nthistle Jul 28 at 0:11
4
\$\begingroup\$

Mornington Crescent, 5015 bytes, cracks Discrete lizard's answer

I've braved the depths of London, and I came out alive ...

Take Northern Line to Charing Cross
Take Northern Line to Moorgate
Take Circle Line to Moorgate
Take Circle Line to Paddington
Take Circle Line to Moorgate
Take Northern Line to Finchley Central
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Moorgate
Take Northern Line to Moorgate
Take Metropolitan Line to Chalfont & Latimer
Take Metropolitan Line to Moorgate
Take Northern Line to West Finchley
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Moorgate
Take Northern Line to Moorgate
Take Metropolitan Line to Chalfont & Latimer
Take Metropolitan Line to Preston Road
Take Metropolitan Line to Moorgate
Take Northern Line to Golders Green
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Moorgate
Take Northern Line to Moorgate
Take Metropolitan Line to Preston Road
Take Metropolitan Line to Moorgate
Take Northern Line to Moorgate
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Moorgate
Take Circle Line to Moorgate
Take Circle Line to Paddington
Take Circle Line to Moorgate
Take Circle Line to Moorgate
Take Metropolitan Line to Chalfont & Latimer
Take Metropolitan Line to Moorgate
Take Northern Line to Morden
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Moorgate
Take Northern Line to Moorgate
Take Metropolitan Line to Chalfont & Latimer
Take Metropolitan Line to Preston Road
Take Metropolitan Line to Moorgate
Take Circle Line to Victoria
Take Circle Line to Moorgate
Take Circle Line to Moorgate
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Moorgate
Take Northern Line to Moorgate
Take Metropolitan Line to Preston Road
Take Metropolitan Line to Moorgate
Take Metropolitan Line to Moorgate
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Moorgate
Take Circle Line to Moorgate
Take Circle Line to Paddington
Take Circle Line to Moorgate
Take Northern Line to Kentish Town
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Tottenham Court Road
Take Northern Line to Tottenham Court Road
Take Central Line to Holland Park
Take Central Line to Fairlop
Take Central Line to Tottenham Court Road
Take Central Line to Tottenham Court Road
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Tottenham Court Road
Take Northern Line to Tottenham Court Road
Take Central Line to Holland Park
Take Central Line to Tottenham Court Road
Take Central Line to Tottenham Court Road
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Moorgate
Take Circle Line to Paddington
Take Circle Line to Moorgate
Take Circle Line to Paddington
Take Circle Line to Paddington
Take Circle Line to Mansion House
Take Circle Line to Moorgate
Take Circle Line to Moorgate
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Tottenham Court Road
Take Northern Line to Tottenham Court Road
Take Central Line to Holland Park
Take Central Line to Gants Hill
Take Central Line to Tottenham Court Road
Take Central Line to Tottenham Court Road
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Tottenham Court Road
Take Northern Line to Tottenham Court Road
Take Central Line to Holland Park
Take Central Line to Tottenham Court Road
Take Central Line to Tottenham Court Road
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Moorgate
Take Circle Line to Moorgate
Take Circle Line to Paddington
Take Circle Line to Paddington
Take Circle Line to Moorgate
Take Metropolitan Line to Moor Park
Take Metropolitan Line to Moorgate
Take Circle Line to Moorgate
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Moorgate
Take Circle Line to Moorgate
Take Metropolitan Line to Chalfont & Latimer
Take Metropolitan Line to Finchley Road
Take Metropolitan Line to Moorgate
Take Circle Line to Moorgate
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Moorgate
Take Circle Line to Moorgate
Take Metropolitan Line to Chalfont & Latimer
Take Metropolitan Line to Preston Road
Take Metropolitan Line to West Harrow
Take Metropolitan Line to Moorgate
Take Circle Line to Moorgate
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Moorgate
Take Circle Line to Moorgate
Take Metropolitan Line to Preston Road
Take Metropolitan Line to Moorgate
Take Circle Line to Moorgate
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Moorgate
Take Circle Line to Moorgate
Take Circle Line to Paddington
Take Circle Line to Moorgate
Take Circle Line to Moorgate
Take Northern Line to Mornington Crescent

Try it online!

| improve this answer | |
\$\endgroup\$
  • \$\begingroup\$ Well done. This one still gives quite a few options. I shall dispose of those distractions for the next one. \$\endgroup\$ – Discrete lizard Jul 28 at 17:47
  • 2
    \$\begingroup\$ Oh, no, there's more ... \$\endgroup\$ – pppery Jul 28 at 17:48
4
\$\begingroup\$

BBC BASIC II, cracks Martin Rosenau's challenge

The string to print is

VP

Solution:

10 MODE 7
20 A%=HIMEM
30 ?A%=80
40 A%?1=86
50 GOTO 50

Tested on BeebEm emulator and should work directly on BBC model 'B'.

enter image description here

How?

  • MODE 7 is a low-resolution graphics mode, intended to display 'teletext'. Each character on the display is encoded by a single byte in memory: bytes 1-128 encode the normal ASCII characters, and bytes 129-255 (which we don't need here) encode chunky coloured and/or flashing 2x6 pixel blocks.
    So all we need to do is to set the first two bytes of the display memory to encode 'PV'
  • HIMEM is a system variable used to indicate the address of the highest usable RAM memory location +1; the display memory starts here.
  • ? stores the specified value at a particular memory location. It's equivalent to POKE in other variants of BASIC. In this case, we specify the ASCII value 80, encoding the letter 'P'.
  • A%?1 is a shortcut to store the specified value to the memory location +1. We use 86, encoding the letter 'V'
  • If we exit the program now, the first character will be overwritten by the new command-line prompt (a '>' character), so we just send the program into an endless loop so that the full beauty of the displayed 'PV' characters can remain on the screen for our admiration.
  • In the example shown, I exited the program by pressing 'Escape' so that I could display a LISTing of the program.
| improve this answer | |
\$\endgroup\$
4
\$\begingroup\$

Ruby, cracks Dingus's third answer

ZERO = $$ - $$
S_ZERO = String ZERO
ONE = -~ZERO
S_ONE = String ONE
S_TWO = String ONE + ONE
S_THREE = String ONE + ONE + ONE
S_FOUR = String ONE + ONE + ONE + ONE
S_FIVE = String ONE + ONE + ONE + ONE + ONE
S_SIX = String ONE + ONE + ONE + ONE + ONE + ONE
S_SEVEN = String ONE + ONE + ONE + ONE + ONE + ONE + ONE
S_EIGHT = String ONE + ONE + ONE + ONE + ONE + ONE + ONE + ONE
S_NINE = String ONE + ONE + ONE + ONE + ONE + ONE + ONE + ONE + ONE

S_TWO_POINT_ZERO = String Float ONE + ONE
S_TWO_POINT_ZERO =~ /#{Array Float ONE}/
DOT = $&

alakazam_hrto_s = nil
another_variable = nil
$_ = String local_variables
$_ =~ /#{DOT}#{DOT}/
$& =~ /#{DOT}$/
COLON = $&
$_ =~ /#{DOT}#{DOT}#{COLON}/
$& =~ /#{DOT}#{DOT}$/
$& =~ /#{DOT}/
SPACE = $&
$_ =~ /alakazam_#{DOT}#{DOT}#{DOT}#{DOT}#{DOT}#{DOT}/
$_ = $&
$_ =~ /#{DOT}#{DOT}#{DOT}#{DOT}$/
S_to_s = $&
$_ =~ /#{DOT}#{DOT}#{DOT}#{DOT}#{DOT}#{DOT}$/
$& =~ /#{DOT}#{DOT}/
$_ = eval S_ONE + S_TWO + DOT + S_to_s + SPACE + S_ONE + S_SIX
DOT_CHR = DOT + $_ + $&

f_out = eval S_ONE + S_ONE + S_TWO + DOT_CHR
f_out += eval S_ONE + S_ONE + S_SEVEN + DOT_CHR
f_out += eval S_ONE + S_ONE + S_SIX + DOT_CHR
f_out += eval S_NINE + S_NINE + DOT_CHR
f_out += SPACE

eval f_out + S_NINE + S_NINE
eval f_out + S_ONE + S_ZERO + S_ZERO
eval f_out + S_ONE + S_ONE + S_TWO
eval f_out + S_FOUR + S_EIGHT
eval f_out + S_FOUR + S_NINE
eval f_out + S_FIVE + S_ZERO
eval f_out + S_FIVE + S_ONE
eval f_out + S_FIVE + S_TWO
eval f_out + S_FIVE + S_THREE
eval f_out + S_FIVE + S_FOUR
eval f_out + S_FIVE + S_FIVE
eval f_out + S_FIVE + S_SIX
eval f_out + S_FIVE + S_SEVEN
eval f_out + S_FOUR + S_SIX
eval f_out + S_NINE + S_SIX
eval f_out + S_THREE + S_NINE
eval f_out + S_THREE + S_FOUR
eval f_out + S_SIX + S_THREE
eval f_out + S_THREE + S_SEVEN
eval f_out + S_FOUR + S_ZERO
eval f_out + S_NINE + S_ONE
eval f_out + S_FIVE + S_EIGHT
eval f_out + S_SIX + S_ZERO

Try it online!

Looking at the character set, we can call eval and we have the + operator to concatenate strings. So if we can build arbitrary one-character strings, we're done. In Ruby, creating a character from its numeric code is 123.chr, but we don't have . or c.

I browsed through the list of global variables and predefined functions to see what interesting things I could use given the available characters.

We don't have digits, but since we have arithmetic operators, that's just a minor annoyance. We create variables containing each digit as a string, for later.

Our next objective is to have a way to extract a specific character from a string, without the […] subscript operator. Almost every interesting action on a string is a (non-operator) method call, which is impossible without .. We can do regexp matching. string =~ /./ puts the first character of the string in $&, and string =~ /.$/ puts the last character in $&, but we don't have .. Let's build ..

We can take a floating point number and convert it to a string with String. But we still don't know how to extract the . from that string. There's another way to match a single character in a regexp without simply listing this character, and that's character sets: can we somehow inject [something.somethingelse] into the regexp? Yes! We can inject the value of an expression (converted to a string) with /#{expression}/. And we can build a string surrounded by brackets by building an array, which is represented as [element, ...] as a string. Match "2.0" against /[1.0]/, and we get "." in $&. Now we can extract an arbitrary character from a string with one or two regexp matches (/#{DOT}…#{DOT}/ then /#{DOT}$/ to take the Nth character, or /#{DOT}…#{DOT}$/ then /#{DOT}/ to take the Nth character from the end).

Our next objective is to construct the string ".chr", after which we can construct arbitrary characters as e.g. eval "1" + "2" + "3" + ".chr". We can have hr in the source code but we need to inject them into a string, and we need to get chr from somewhere. A convenient way to inject letters into a string is local_variables, which converts to a string that looks like

[:alakazam_hrto_s, :another_variable, :f_out]

So define a local variable containing hr, add a unique pattern (alakazam_) to anchor it, and match /alakazam_../ against String local_variables. While we're at it, use regexp matching to get ":" and " ", and also "to_s". We can now evaluate "12.to_s 16" to get "c" (hexadecimal representation of 12).

Now that DOT_CHR is ".chr", assemble f_out = "putc", and print the desired characters one by one given their numeric code.

| improve this answer | |
\$\endgroup\$
  • \$\begingroup\$ This is really awesome, and much closer to what I had in mind. There are still some interesting differences though: I hadn't considered regexp interpolation and I knew I should have banned r! You also reminded me about $$, which makes banning digits redundant. So if you're not bored of this yet, I think I can make it even more rigid with a lower score. \$\endgroup\$ – Dingus Aug 1 at 1:27
4
\$\begingroup\$

PicoLisp, cracks @Wezl's answer

Yes, it was indeed simple! First time I heard about PicoLisp!

[prinl [char 40]][bye]

It seems to work on https://www.jdoodle.com/execute-picolisp-online/ with version 18.9.5.

PicoList output


I didn't knew ideone had PicoList prior to posting this, but, someone raised objections due to the output being : ( and not just (.

The : is the prompt for the tool used.
You can verify it in this ideone link: https://ideone.com/4vuYQL (it uses version 18.12.27).

| improve this answer | |
\$\endgroup\$
  • \$\begingroup\$ Yes! Exactly. I was hoping someone would try out picolisp. See if you can do it without spaces. (ideone.com doesn't need [bye] at the end, and prin works as well as prinl) \$\endgroup\$ – Wezl Jul 28 at 14:10
  • \$\begingroup\$ @Wezl I believe it is a lot better if you post the intended solution on codegolf.stackexchange.com/a/207691 (as per the definitions of the challenge, quoting: "A crack need only work not be the intended solution."). But it's good to see you confirming my solution as a working one. \$\endgroup\$ – Ismael Miguel Jul 28 at 19:02
  • \$\begingroup\$ The output is : (, not (. \$\endgroup\$ – Gilles 'SO- stop being evil' Jul 30 at 22:47
  • 2
    \$\begingroup\$ The output is (, the prompt is :. Check ideone.com/4vuYQL (I didn't knew before that ideone had Picolisp, which is why I didn't use it before). \$\endgroup\$ – Ismael Miguel Jul 31 at 13:17
  • \$\begingroup\$ On my machine and on jdoodle, the output is : (. I know that the : is meant as a prompt, but it's part of what the program prints to stdout. The ideone implemetation is a correct solution. \$\endgroup\$ – Gilles 'SO- stop being evil' Jul 31 at 16:54
3
\$\begingroup\$

International Phonetic Esoteric Language, cracks @bigyihsuan's answer

{32}χu{33}χu{34}χu{35}χu{36}χu{37}χu{38}χu{39}χu{40}χu{41}χu{42}χu{43}χu{44}χu{45}χu{46}χu{65}χu{66}χu{67}χu{68}χu{69}χu{70}χu{71}χu{72}χu{73}χu{74}χu{75}χu{76}χu{77}χu{78}χu{79}χu{80}χu{81}χu{82}χu{83}χu{84}χu{85}χu{86}χu{87}χu{88}χu{89}χu{90}χu{91}χu{92}χu{93}χu{94}χu{95}χu{96}χu

To my knowledge, the only way to test this is with the interpreter here.

| improve this answer | |
\$\endgroup\$
3
\$\begingroup\$

Python 2, 39953 bytes, cracks Jonathan Allan's answer

exec(chr((id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id)))+chr((id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id)))+chr((id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id)))+chr((id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id)))+chr((id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id)))+chr((id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id)))+chr((id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id)))+chr((id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id)))+chr((id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id)))+chr((id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id)))+chr((id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id)))+chr((id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id)))+chr((id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id)))+chr((id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id)))+chr((id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id)))+chr((id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id)))+chr((id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id)))+chr((id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id)))+chr((id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id)))+chr((id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id)))+chr((id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id)))+chr((id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id)))+chr((id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id)))+chr((id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id)))+chr((id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id)))+chr((id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id)))+chr((id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id)))+chr((id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id)))+chr((id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id)))+chr((id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))+(id(id)-~-id(id))))

Try it online!

| improve this answer | |
\$\endgroup\$
3
\$\begingroup\$

Python 2, cracks @Mukundan314's answer

C="%x"%12
D="%x"%13
S="73"
S=getattr(*([S]+[D+"e"+C+"o"+D+"e"]))
S=S("hex")
W="77"
W=getattr(*([W]+[D+"e"+C+"o"+D+"e"]))
W=W("hex")
P1=__import__(S+"y"+S)
P2=getattr(*([P1]+[S+"t"+D+"out"]))
P3=getattr(*([P2]+[W+"rite"]))
P4="63646e7376772"+C
P5=getattr(*([P4]+[D+"e"+C+"o"+D+"e"]))
P6=P5("hex")
P3(P6)

Try it online!

Explanation: First, we can immediately figure out what builtins we have available to us with the following snippet:

for b in dir(__builtins__):
  if not any(c in b for c in "cdnsvw,"):
    print(b)

Of immediate interest is getattr. My original approach used this along with eval, but then I realized that v was banned... (c is also banned so no exec). In any case, as long as we can get arbitrary characters and we have getattr, it's game over. Of course, no c, so no chr, so how do we get arbitrary letters? Indexing into dir() is out too, because we don't have access to d.

Well, Python 2 has this neat trick where you can decode hex strings by simply doing str.decode("hex"). "decode" requires both "c" and "d", so we need to get those characters first, but fortunately they're hex digits, so we can just retrieve them with "%x"%12 and "%x"%13, respectively (Note: the reason we can do this here, but not to get dir is because decode is an attribute of strings, which we can get, whereas dir is an attribute of __builtins__, which we can't get because of the s).

The last trick is to evade , in our getattr calls, which we can do by using arg expansion on a list, which we construct by adding lists together: getattr(a,b) <=> getattr(*([a]+[b])). From here we just chain together these primitives. Translated, the answer looks like:

__import__("sys").stdout.write("63646e7376772".decode("hex"))
| improve this answer | |
\$\endgroup\$
  • 1
    \$\begingroup\$ You can use octal codes to write "something" as "\163\157\155\145\164\150\151\156\147" etc. eliminating the need for decode. The intended solution has a very similar approach. \$\endgroup\$ – Mukundan314 Jul 27 at 15:18
  • \$\begingroup\$ Ah, thanks for the tip. Nice intended solution! Good to know I wasn't too far off, though. \$\endgroup\$ – nthistle Jul 27 at 23:10

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.