45
\$\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 they 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\$
1
  • 5
    \$\begingroup\$ Congrats on an excellent challenge with high 'replay value'. I've had a lot of fun participating on both sides, digging into a couple of languages for the first time along the way. \$\endgroup\$
    – Dingus
    Aug 20, 2020 at 3:22

142 Answers 142

1
2 3 4 5
49
\$\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!

\$\endgroup\$
5
  • 4
    \$\begingroup\$ Almost exactly the same as mine, nice job! \$\endgroup\$
    – nthistle
    Jul 25, 2020 at 16:12
  • \$\begingroup\$ @nthistle Thanks! This was fun \$\endgroup\$
    – Luis Mendo
    Jul 25, 2020 at 16:13
  • 6
    \$\begingroup\$ Can someone explain why this works? \$\endgroup\$ Jul 25, 2020 at 16:20
  • 7
    \$\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, 2020 at 16:28
  • 1
    \$\begingroup\$ Why this answer got more upvotes than the cops answer is the mystery of Stack Exchange. \$\endgroup\$ Jul 28, 2020 at 16:16
18
\$\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!

\$\endgroup\$
8
  • \$\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\$
    – Wheat Wizard
    Jul 27, 2020 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, 2020 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, 2020 at 2:53
  • 6
    \$\begingroup\$ @jez 29 bytes - Try it online! \$\endgroup\$
    – Sisyphus
    Jul 27, 2020 at 3:02
  • 5
    \$\begingroup\$ @Sisyphus You should have posted that as a cop answer rather than wasting it here. \$\endgroup\$ Jul 27, 2020 at 3:03
13
\$\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))+"\"")
\$\endgroup\$
3
  • 1
    \$\begingroup\$ This is awesome. \$\endgroup\$
    – histocrat
    Jul 25, 2020 at 20:56
  • 3
    \$\begingroup\$ Out of curiosity, what did your original program look like? \$\endgroup\$
    – nthistle
    Jul 25, 2020 at 20:59
  • \$\begingroup\$ Very different, but I think I'll iterate on it and post another cop before surrendering :) \$\endgroup\$
    – histocrat
    Jul 26, 2020 at 0:08
13
\$\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)
\$\endgroup\$
2
  • 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\$ Jul 26, 2020 at 20:19
  • 1
    \$\begingroup\$ I think your code is angry: >:| (line 3) \$\endgroup\$ Aug 18, 2020 at 14:15
12
\$\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[...]].

\$\endgroup\$
1
  • \$\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\$
    – Wheat Wizard
    Jul 26, 2020 at 1:44
12
\$\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.

\$\endgroup\$
1
  • 1
    \$\begingroup\$ This is almost exactly what I had. Well done! \$\endgroup\$
    – user
    Jul 26, 2020 at 19:24
10
\$\begingroup\$

Shakespeare Programming Language, 1034 bytes, cracks @RobinRyder's answer

Restricted sauce, or, A shortage of ketchup.

Othello, also known as Reversi.
Ophelia, a satellite of Uranus.

Act I: Love's letters lost.

Scene I: Cracked pepper.

[Enter Othello and Ophelia]

Othello:
  Thou art as sweet as the square root of a cute peaceful fair fine gentle angel!

Ophelia:
  Thou art as cunning as the square root of the product of the factorial of I and the product of a trustworthy rich pony and the square of I!
  Speak thy deceitful treachery!

Othello:
  Thou art as golden as the square root of twice the square of thou!

Ophelia:
  Thou art as healthy as the product of the square root of a cunning pretty trustworthy good peaceful gentle fine squirrel and I!
  Speak thy awful truth!
  Thou art as loving as twice the square of I!
  Speak thy flirtatious trifles!

Othello:
  Thou art as happy as the square root of a gentle delicious cunning golden honest trustworthy sweet Lord!  

Ophelia:
  Thou art as peaceful as the product of twice the square root of I and I!
  Speak thy glad tidings!

[Exeunt]

Try it online!

Constructing integers was tricky. As Robin noted, addition and subtraction are out. So too are cubing (the cube of), division (the quotient between), and modulo (the remainder of the quotient between). We will have to make do with multiplication, squares, square roots, and factorials. These operations are incompletely documented in the official docs; I actually found the interpreter source code to be a more useful reference in this regard.

We also need a way to output characters given that the usual Speak thy mind! is banned as well. Digging into the interpreter source code, I found that mind may be replaced with arbitrary text (a warning is printed to STDERR). There's that problem solved. Now, on to generating the required characters.

The required ASCII codes are 109, 77, 98, and 66. The basic idea is to set Othello to each of these values in succession, then print the character via Speak thy ... (I took some poetic licence with the ...s). Ophelia stores some intermediate values for convenience.

I think the code is most easily explained through the maths. Here I will use \$p\$ for Ophelia's value and \$t\$ for Othello's. The only other thing to bear in mind is that positive nouns (such as angel and pony) represent \$1\$ and adjectives (such as cute and sweet) preceding a noun multiply it by \$2\$. (SPL has negative and neutral nouns too, but only positive nouns are used here.)

Othello:
  Thou art as sweet as the square root of a cute peaceful fair fine gentle angel!

\$p = \left\lfloor\sqrt{2\cdot2\cdot2\cdot2\cdot2\cdot1}\right\rfloor = \left\lfloor\sqrt{32}\right\rfloor = 5\$

Ophelia:
  Thou art as cunning as the square root of the product of the factorial of I and the product of a trustworthy rich pony and the square of I!

\$t = \left\lfloor\sqrt{p!(2\cdot2\cdot1\cdot p^2)}\right\rfloor = \left\lfloor\sqrt{12000}\right\rfloor = 109\$

Othello:
  Thou art as golden as the square root of twice the square of thou!

\$p = \left\lfloor\sqrt{2p^2}\right\rfloor\ = \left\lfloor\sqrt{50}\right\rfloor = 7\$

Ophelia:
  Thou art as healthy as the product of the square root of a cunning pretty trustworthy good peaceful gentle fine squirrel and I!

\$t = \left\lfloor\sqrt{2\cdot2\cdot2\cdot2\cdot2\cdot2\cdot2\cdot1}\right\rfloor p = \left\lfloor\sqrt{128}\right\rfloor 7 = 77\$

  Thou art as loving as twice the square of I!

\$t = 2p^2 = 98\$

Othello:
  Thou art as happy as the square root of a gentle delicious cunning golden honest trustworthy sweet Lord!

\$p=\left\lfloor\sqrt{2\cdot2\cdot2\cdot2\cdot2\cdot2\cdot2\cdot1}\right\rfloor = \left\lfloor\sqrt{128}\right\rfloor = 11\$

Ophelia:
  Thou art as peaceful as the product of twice the square root of I and I!

\$t = 2\left\lfloor\sqrt{p}\right\rfloor p = 2\left\lfloor\sqrt{11}\right\rfloor 11 = 66\$

\$\endgroup\$
4
  • 3
    \$\begingroup\$ > Restricted sauce, or, A shortage of ketchup. +1! \$\endgroup\$ Aug 19, 2020 at 12:07
  • 1
    \$\begingroup\$ Very nice crack, well done! I was hoping that whoever cracked this challenge would write a "proper" SPL program, and not the usual collection of Ajax, Page and cats. I am glad you did! \$\endgroup\$ Aug 19, 2020 at 12:43
  • \$\begingroup\$ @RobinRyder Thanks. I had a lot of fun writing it! \$\endgroup\$
    – Dingus
    Aug 19, 2020 at 13:36
  • \$\begingroup\$ Othello, also known as Reversi. Nice pun \$\endgroup\$ Aug 28, 2020 at 12:20
9
\$\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!

\$\endgroup\$
7
\$\begingroup\$

CJam, Ethan Chapman's answer

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

Try it online!

\$\endgroup\$
1
  • \$\begingroup\$ That sure is a lot of smiley faces :) \$\endgroup\$
    – Dingus
    Aug 29, 2020 at 11:34
7
\$\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="")
\$\endgroup\$
3
  • 1
    \$\begingroup\$ Why doesn't it work on TIO? \$\endgroup\$ Jul 26, 2020 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\$ Jul 26, 2020 at 22:22
  • \$\begingroup\$ Back to the drawing board, then... Well done! \$\endgroup\$ Jul 27, 2020 at 6:25
7
\$\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)
\$\endgroup\$
2
  • 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\$ Jul 27, 2020 at 5:04
  • 5
    \$\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\$ Jul 27, 2020 at 5:35
6
\$\begingroup\$

JavaScript (Browser), cracks PkmnQ's answer

window.location="javascript:console.log"+String.fromCharCode`40`+String.fromCharCode`34`+String.fromCharCode`40`+String.fromCharCode`92`+String.fromCharCode`92`+String.fromCharCode`41`+String.fromCharCode`34`+String.fromCharCode`41`

Paste it in your browser's JS console! (Tested on Chrome).

Uses window.location="javascript:..." to basically get an eval, and then builds the payload ("(\\)") by using String.fromCharCode, using template literal syntax to call that method (please don't ask me why this exists in JavaScript...). Both of these tricks I got from this handy StackOverflow post.

\$\endgroup\$
3
  • \$\begingroup\$ I actually didn't consider using window.location. I only said Browser because I used the unescape function, and I wasn't sure if it worked in other places you use JS in. And I forgot String.fromCharCode existed. \$\endgroup\$
    – PkmnQ
    Jul 25, 2020 at 18:18
  • \$\begingroup\$ Yeah, I figured there was probably another way to call methods without parentheses that would work, I just saw this first and it all worked out. \$\endgroup\$
    – nthistle
    Jul 25, 2020 at 18:20
  • 1
    \$\begingroup\$ I wouldn't have found this if it weren't for JSF$ck. Not JSFuck, JSF$ck. Basically, it uses []["fill"]["constructor"]`$${code as string here}` \$\endgroup\$
    – PkmnQ
    Jul 25, 2020 at 18:27
6
\$\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!

\$\endgroup\$
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!

\$\endgroup\$
6
\$\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!

\$\endgroup\$
1
  • \$\begingroup\$ no need for 1+9, since Print already includes the trailing newline \$\endgroup\$
    – att
    Jul 27, 2020 at 16:45
6
\$\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$
\$\endgroup\$
1
  • 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, 2020 at 4:20
6
\$\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.

\$\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!)

\$\endgroup\$
5
\$\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}'")
\$\endgroup\$
1
  • \$\begingroup\$ Much, much simpler: ₂ÌR₂«©DÍÍ<D<DÍ<D<₆ÌX«®ÌÌDÍÍÍÍ₆Ì>₆Í₆>¬.ø)çJžhJ \$\endgroup\$
    – Makonede
    May 26, 2021 at 18:04
5
\$\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!

\$\endgroup\$
5
\$\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.

\$\endgroup\$
5
\$\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.
\$\endgroup\$
2
  • \$\begingroup\$ Very well done, Giuseppe! \$\endgroup\$ Jul 27, 2020 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\$ Jul 27, 2020 at 15:27
5
\$\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!

\$\endgroup\$
2
  • \$\begingroup\$ Well done. This one still gives quite a few options. I shall dispose of those distractions for the next one. \$\endgroup\$ Jul 28, 2020 at 17:47
  • 2
    \$\begingroup\$ Oh, no, there's more ... \$\endgroup\$ Jul 28, 2020 at 17:48
5
\$\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.
\$\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!

\$\endgroup\$
9
  • \$\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, 2020 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, 2020 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\$ Aug 1, 2020 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\$ Aug 1, 2020 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\$ Aug 1, 2020 at 17:28
5
\$\begingroup\$

JavaScript, cracks PkmnQ's third answer

Outputs a string via console.log. You can evaluate arbitrary code with only a little extra work. Should work in any sufficiently modern JavaScript implementation; /_/.prototype.unicode must be false (true would work with minor modifications).

Try it online!

The code is too big to include directly. Here's the Python code I used to generate it.

#!/usr/bin/env python3

import re

payload = '<("MrJock,TVQuizPHDBagsFewLynx.mRjOCKtvqUIZ=phd#bAGSfEWlYNX? 12+34-56*78^90%!\')>'

zero = '~~[]' # 0
one = '~[]/~[]' # 1

def plus_one(n):
    return '~[%s][~~[]]/~[]' % (n,)
def unary_integer(n):
    assert(n >= 0)
    if n == 0:
        return zero
    s = one
    while n > 1:
        n = n - 1
        s = plus_one(s)
    return s
def integer_string(n):
    if n <= 9:
        return '`${' + unary_integer(n) + '}`'
    else:
        return ''.join(['${' + unary_integer(int(digit)) + '}'
                              for digit in str(n)])
def integer(n):
    if n <= 9:
        return unary_integer(n)
    else:
        return '`' + integer_string(n) + '`/~[]/~[]'

# Map a character to how it can be inserted in `...`
characters = {}

def encode_string(s):
    return ''.join(['`'] + [characters[c] for c in s] + ['`'])

def encode_string_literal(m):
    return encode_string(m.group(1))

def encode_string_literals(code):
    return re.sub(r'"([^"]*)"', encode_string_literal, code)

permitted_characters = (frozenset(''.join(map(chr, range(32, 127))))
                        .difference(payload))
for c in permitted_characters:
    characters[c] = c
characters['`'] = '\\`'
characters['$'] = '\\$'
characters['\\'] = '\\\\'
for c in range(10):
    characters[str(c)] = '${' + unary_integer(c) + '}'

def add_characters(raw_code, result):
    encoded_code = encode_string_literals(raw_code)
    for i in range(len(result)):
        this_code = '${`${%s}`[%s]}' % (encoded_code, integer(i))
        if result[i] not in characters or len(result[i]) > len(this_code):
            characters[result[i]] = this_code

add_characters('[][[]]', 'undefined')
add_characters('{}', '[object Object]')
add_characters('[]/[]', 'NaN')
add_characters('~[]/[]', '-Infinity')
add_characters('/$/["unicode"]', 'false') # +'ls'
add_characters('``["includes"]``', 'true') # +'r'
add_characters('``["fontcolor"]``', '<font color=""></font>') # +'"<=>'
add_characters('``["constructor"]', 'function String() { [native code] }') # +'()Sgv'
add_characters('~[~[~[]/~[]][~~[]]/~[]][~~[]]/~[~[]/~[]][~~[]]', '1.5') # +'.'

eval_prefix = encode_string_literals('[]["find"]["constructor"]`_${')
eval_suffix = '}```'
def eval_with_function(code):
    return eval_prefix + encode_string(code) + eval_suffix

def octal_string(s):
    return ''.join('\\%03o' % (ord(c),) for c in s)

print(eval_with_function('console.log("%s")' % (octal_string(payload),)))

The basic principle is the same as JSFuck: build integers, then build some strings containing interesting characters, extract the characters from the strings, and assemble those characters to get an “eval” gadget. Leverage automatic coercions to integers and strings. Due to the different character set, the details of the building steps are different.

A lot of things coerce to 0 when a number is expected, for example []. To get a number, we need to force a coercion to a number, which we can do with the bitwise negation operator ~, so the easiest integer to build is -1 = ~[]. Then 0 = ~~[]. Signed integers are represented with two's complement, so ~x = -x-1 and thus x+1 = ~x/-1. We actually need to apply this plus-one operation to an expression that has a lower precedence than the ~ operator, so we need to simulate parentheses: plus-one is ~[…][0]/-. Armed with 0 and plus-one, we can build all integers in unary.

As a shortcut, we'll use the decimal representation for numbers above 9. This is our first use of template literals, which this character set supports fully. Template literals are string literals written between backticks, with ${…} to inject expressions. This lets us concatenate strings without +. For example a 2-digit integer is `${digit1}${digit2}`/-1/-1. When the goal is to inject the integer into a string, we don't need the /-1/-1 part.

Next we build some strings. JSFuck provides some inspiration. For example, {} stringifies to [object Object]. Here we can't use + to coerce to a string, but we can use a template literal: for example `${{}}` evaluates to the string [object Object]. We can extract individual characters from a string as string[index].

The normal way to access a property of an object is object.property, but . is forbidden. Fortunately there's another way which not only permitted, but also allows using a constructed string as the property name: object["property"] is equivalent to object.property. Looking through built-in types for which we can build a value (Array [], Object {}, Number [~[]][~~[]], String ``, RegExp /$/), the pickings are slim at this point:

Array.prototype.concat()
Array.prototype.find()
Array.prototype.join()
RegExp.prototype.unicode
String.prototype.concat()

Fortunately /_/.unicode is false, which gives us l and s, which unlocks the String method includes, which gives us true. The string representation of a method gives us parentheses, and the exotic but convenient fontcolor provides "<=>.

At this point we have a variation of the classic eval gadget from JSFuck: first we take a reference to a method such as []["find"]. Its constructor []["find"]["constructor"] is Function, and calling Function with a string argument evaluates that string as the body of a function. We have the characters of return, so we can make the function return the value of any expression that we can spell as a string.

There's one more hurdle here: unlike JSFuck, we don't have parentheses. This is where we use another feature of templates: if you put a function just before a template literal, with no punctuation involved except for the template literal, it's called on the interpolated expressions from the template. The arguments have to be strings, but that's good enough for us. To evaluate the string code we call Function on the code to build the function and call that code with an empty string as an argument: Function `_${`return ${code}`}` `` .

At this point we can spell console.log("…"). We're allowed to use backslashes, so we can put octal escapes in and print an arbitrary string. The backslashes are just a shortcut: without them, we could still build fromCharCode as in JSFuck. If we wanted an arbitrary eval gadget, we could do another round of evaluation.

\$\endgroup\$
5
\$\begingroup\$

Python 3, 552040 bytes, cracks M Virts' second answer

getattr(__builtins__,str().join(chr(e)for e in((not not...).__sub__((not...).__sub__(not not...)).__sub__((not...).__sub__(not not...)).__sub__((not...)...

Try it online!

Truncated here because of SE limitations. The TIO link has the full version, or you can see it as a gist.

  • not... (... is a special sentinal value in Python, and it's truthy) gives False which is equivalent to 0
  • not not... gives True which is equivalent to 1
  • we can't use + or __add__, so to get an integer we use 0-(-1)-... or (not...).__sub__((not...).__sub__(not not...))...

Other than that, it's the same method as Wheat Wizard's crack for the previous one, but a lot longer. I'm pretty sure this isn't an intended crack, since it's so similar. It could be shortened, but this isn't .

The program was generated using this script:

def get_int(a):
    return "(not not...)" + ".__sub__((not...).__sub__(not not...))" * (a - 1)

def get_str(s):
    return "str().join(chr(e)for e in(" + ",".join(get_int(ord(e)) for e in s) + ",))"

print("getattr(__builtins__," + get_str("exec") + ")(" + get_str(r"""print(end='\t\n\x0b\f\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f!"#$%&\'*+-/0123456789:;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^`dkpqvwxyz{|}~\x7f')""") + ")")
\$\endgroup\$
4
\$\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.

\$\endgroup\$
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.

\$\endgroup\$
2
  • \$\begingroup\$ Well done! Would it have been more difficult if I had included fewer characters, to make apropos less useful? \$\endgroup\$ Jul 26, 2020 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, 2020 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!

\$\endgroup\$
3
  • 2
    \$\begingroup\$ The <% is a legacy feature since not all machines had {} iirc. However today it seems a bit absurd. \$\endgroup\$
    – Wheat Wizard
    Jul 26, 2020 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, 2020 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, 2020 at 15:35
1
2 3 4 5

Your Answer

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

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