Skip to main content
replaced http://codegolf.stackexchange.com/ with https://codegolf.stackexchange.com/
Source Link

Marbelous, size 36, es1024Marbelous, size 36, es1024

9C Dr=0 ^3 +O +O!! :Dr }0 ++ /\{>{0 

There is no trailing line break, so that we remain at 9.

After another very fruitful discussion session with Sp3000, at last, one of the Marbelous submissions is cracked! :)

I can't really explain Marbelous in the scope of this answer, so if you have no idea what I'm talking about, have a look at this reference.

Let's look at the output first: it's 100 ones and zeros, 8 of them at a time (with some offset in the cycle). This suggests that we have some loop that increments a marble 100 times, and printed 0 or 1 depending on the 4th byte. Both of those are pretty convenient because, starting at 9C (in hex) is 156. Incrementing 100 times overflows, so we can abort the loop with a =0. Furthermore, we have access to the fourth bit with ^3. And if we increment before outputting, then we will also correctly start with 3 ones.

Setting this up was a bit trickier though. Especially, since we got really stuck on the idea of naming the board Or, so that we would have the Ds as hex digits (and we also thought there were two ++ devices). But we just couldn't find a way to add 48 to the 0 or 1 resulting from ^3 (which is necessary to turn them into 0 or 1 characters). But at some point I had an epiphany, and realised that O is 24 in base 36, so we could actually increment by 48 using +O twice.

The rest was fairly simple to deduct from the available characters and the requirement to have no empty cells in the boards. In particular, there is no way to move a marble upwards in this, so the only way to create a loop is horizontally. The clue here was the cylindrical board, which allows you to just constantly push things to the right, until =0 lets the marble fall. This also meant that the ++ device had to go inside the subboard, because you can't prevent it from letting the marble fall.

So in summary:

  • 9C is a literal marble which starts its life at value 156.
  • There is a subboard Dr which takes in a marble, increments it, and spits out the result both downwards and to the right.
  • =0 lets the result fall if we hit 0, otherwise pushes it to the right, and back into Dr.
  • ^3 takes the marble that falls out of Dr and returns 0 or 1 depending on the 4th bit.
  • +O increments by 24 (twice).
  • When the result falls off the bottom of the main board, the corresponding ASCII character is printed.
  • !! terminates execution. This isn't necessary to break the loop (that wouldn't continue anyway), but it swallows the null byte, that would be printed if the 00 marble were allowed to fall off the board. It's important to put the !! in the last row, otherwise the final 0 character wouldn't have time to get printed.

Marbelous, size 36, es1024

9C Dr=0 ^3 +O +O!! :Dr }0 ++ /\{>{0 

There is no trailing line break, so that we remain at 9.

After another very fruitful discussion session with Sp3000, at last, one of the Marbelous submissions is cracked! :)

I can't really explain Marbelous in the scope of this answer, so if you have no idea what I'm talking about, have a look at this reference.

Let's look at the output first: it's 100 ones and zeros, 8 of them at a time (with some offset in the cycle). This suggests that we have some loop that increments a marble 100 times, and printed 0 or 1 depending on the 4th byte. Both of those are pretty convenient because, starting at 9C (in hex) is 156. Incrementing 100 times overflows, so we can abort the loop with a =0. Furthermore, we have access to the fourth bit with ^3. And if we increment before outputting, then we will also correctly start with 3 ones.

Setting this up was a bit trickier though. Especially, since we got really stuck on the idea of naming the board Or, so that we would have the Ds as hex digits (and we also thought there were two ++ devices). But we just couldn't find a way to add 48 to the 0 or 1 resulting from ^3 (which is necessary to turn them into 0 or 1 characters). But at some point I had an epiphany, and realised that O is 24 in base 36, so we could actually increment by 48 using +O twice.

The rest was fairly simple to deduct from the available characters and the requirement to have no empty cells in the boards. In particular, there is no way to move a marble upwards in this, so the only way to create a loop is horizontally. The clue here was the cylindrical board, which allows you to just constantly push things to the right, until =0 lets the marble fall. This also meant that the ++ device had to go inside the subboard, because you can't prevent it from letting the marble fall.

So in summary:

  • 9C is a literal marble which starts its life at value 156.
  • There is a subboard Dr which takes in a marble, increments it, and spits out the result both downwards and to the right.
  • =0 lets the result fall if we hit 0, otherwise pushes it to the right, and back into Dr.
  • ^3 takes the marble that falls out of Dr and returns 0 or 1 depending on the 4th bit.
  • +O increments by 24 (twice).
  • When the result falls off the bottom of the main board, the corresponding ASCII character is printed.
  • !! terminates execution. This isn't necessary to break the loop (that wouldn't continue anyway), but it swallows the null byte, that would be printed if the 00 marble were allowed to fall off the board. It's important to put the !! in the last row, otherwise the final 0 character wouldn't have time to get printed.

Marbelous, size 36, es1024

9C Dr=0 ^3 +O +O!! :Dr }0 ++ /\{>{0 

There is no trailing line break, so that we remain at 9.

After another very fruitful discussion session with Sp3000, at last, one of the Marbelous submissions is cracked! :)

I can't really explain Marbelous in the scope of this answer, so if you have no idea what I'm talking about, have a look at this reference.

Let's look at the output first: it's 100 ones and zeros, 8 of them at a time (with some offset in the cycle). This suggests that we have some loop that increments a marble 100 times, and printed 0 or 1 depending on the 4th byte. Both of those are pretty convenient because, starting at 9C (in hex) is 156. Incrementing 100 times overflows, so we can abort the loop with a =0. Furthermore, we have access to the fourth bit with ^3. And if we increment before outputting, then we will also correctly start with 3 ones.

Setting this up was a bit trickier though. Especially, since we got really stuck on the idea of naming the board Or, so that we would have the Ds as hex digits (and we also thought there were two ++ devices). But we just couldn't find a way to add 48 to the 0 or 1 resulting from ^3 (which is necessary to turn them into 0 or 1 characters). But at some point I had an epiphany, and realised that O is 24 in base 36, so we could actually increment by 48 using +O twice.

The rest was fairly simple to deduct from the available characters and the requirement to have no empty cells in the boards. In particular, there is no way to move a marble upwards in this, so the only way to create a loop is horizontally. The clue here was the cylindrical board, which allows you to just constantly push things to the right, until =0 lets the marble fall. This also meant that the ++ device had to go inside the subboard, because you can't prevent it from letting the marble fall.

So in summary:

  • 9C is a literal marble which starts its life at value 156.
  • There is a subboard Dr which takes in a marble, increments it, and spits out the result both downwards and to the right.
  • =0 lets the result fall if we hit 0, otherwise pushes it to the right, and back into Dr.
  • ^3 takes the marble that falls out of Dr and returns 0 or 1 depending on the 4th bit.
  • +O increments by 24 (twice).
  • When the result falls off the bottom of the main board, the corresponding ASCII character is printed.
  • !! terminates execution. This isn't necessary to break the loop (that wouldn't continue anyway), but it swallows the null byte, that would be printed if the 00 marble were allowed to fall off the board. It's important to put the !! in the last row, otherwise the final 0 character wouldn't have time to get printed.
added 2586 characters in body
Source Link
Martin Ender
  • 198.3k
  • 67
  • 455
  • 999

Marbelous, size 36, es1024

9C Dr=0 ^3 +O +O!!   :Dr }0 ++ /\{>{0 

The ninthThere is no trailing line break can probably go anywhere, but let's say we'll put itso that we remain at the end9.

After another very fruitful discussion session with Sp3000, at last, one of the Marbelous submissions is cracked! :)

I can't really explain Marbelous in the scope of this answer, so if you have no idea what I'm talking about, have a look at this reference.

Let's look at the output first: it's 100 ones and zeros, 8 of them at a time (with some offset in the cycle). This suggests that we have some loop that increments a marble 100 times, and printed 0 or 1 depending on the 4th byte. Both of those are pretty convenient because, starting at 9C (in hex) is 156. Incrementing 100 times overflows, so we can abort the loop with a =0. Furthermore, we have access to the fourth bit with ^3. And if we increment before outputting, then we will also correctly start with 3 ones.

Setting this up was a bit trickier though. Especially, since we got really stuck on the idea of naming the board Or, so that we would have the Ds as hex digits (and we also thought there were two ++ devices). But we just couldn't find a way to add 48 to the 0 or 1 resulting from ^3 (which is necessary to turn them into 0 or 1 characters). But at some point I had an epiphany, and realised that O is 24 in base 36, so we could actually increment by 48 using +O twice.

The rest was fairly simple to deduct from the available characters and the requirement to have no empty cells in the boards. In particular, there is no way to move a marble upwards in this, so the only way to create a loop is horizontally. The clue here was the cylindrical board, which allows you to just constantly push things to the right, until =0 lets the marble fall. This also meant that the ++ device had to go inside the subboard, because you can't prevent it from letting the marble fall.

So in summary:

  • 9C is a literal marble which starts its life at value 156.
  • There is a subboard Dr which takes in a marble, increments it, and spits out the result both downwards and to the right.
  • =0 lets the result fall if we hit 0, otherwise pushes it to the right, and back into Dr.
  • ^3 takes the marble that falls out of Dr and returns 0 or 1 depending on the 4th bit.
  • +O increments by 24 (twice).
  • When the result falls off the bottom of the main board, the corresponding ASCII character is printed.
  • !! terminates execution. This isn't necessary to break the loop (that wouldn't continue anyway), but it swallows the null byte, that would be printed if the 00 marble were allowed to fall off the board. It's important to put the !! in the last row, otherwise the final 0 character wouldn't have time to get printed.

Marbelous, size 36, es1024

9C Dr=0 ^3 +O +O!! :Dr }0 ++ /\{>{0 

The ninth line break can probably go anywhere, but let's say we'll put it at the end.

After another very fruitful discussion session with Sp3000, at last, one of the Marbelous submissions is cracked! :)

Marbelous, size 36, es1024

9C Dr=0 ^3 +O +O!!   :Dr }0 ++ /\{>{0 

There is no trailing line break, so that we remain at 9.

After another very fruitful discussion session with Sp3000, at last, one of the Marbelous submissions is cracked! :)

I can't really explain Marbelous in the scope of this answer, so if you have no idea what I'm talking about, have a look at this reference.

Let's look at the output first: it's 100 ones and zeros, 8 of them at a time (with some offset in the cycle). This suggests that we have some loop that increments a marble 100 times, and printed 0 or 1 depending on the 4th byte. Both of those are pretty convenient because, starting at 9C (in hex) is 156. Incrementing 100 times overflows, so we can abort the loop with a =0. Furthermore, we have access to the fourth bit with ^3. And if we increment before outputting, then we will also correctly start with 3 ones.

Setting this up was a bit trickier though. Especially, since we got really stuck on the idea of naming the board Or, so that we would have the Ds as hex digits (and we also thought there were two ++ devices). But we just couldn't find a way to add 48 to the 0 or 1 resulting from ^3 (which is necessary to turn them into 0 or 1 characters). But at some point I had an epiphany, and realised that O is 24 in base 36, so we could actually increment by 48 using +O twice.

The rest was fairly simple to deduct from the available characters and the requirement to have no empty cells in the boards. In particular, there is no way to move a marble upwards in this, so the only way to create a loop is horizontally. The clue here was the cylindrical board, which allows you to just constantly push things to the right, until =0 lets the marble fall. This also meant that the ++ device had to go inside the subboard, because you can't prevent it from letting the marble fall.

So in summary:

  • 9C is a literal marble which starts its life at value 156.
  • There is a subboard Dr which takes in a marble, increments it, and spits out the result both downwards and to the right.
  • =0 lets the result fall if we hit 0, otherwise pushes it to the right, and back into Dr.
  • ^3 takes the marble that falls out of Dr and returns 0 or 1 depending on the 4th bit.
  • +O increments by 24 (twice).
  • When the result falls off the bottom of the main board, the corresponding ASCII character is printed.
  • !! terminates execution. This isn't necessary to break the loop (that wouldn't continue anyway), but it swallows the null byte, that would be printed if the 00 marble were allowed to fall off the board. It's important to put the !! in the last row, otherwise the final 0 character wouldn't have time to get printed.
Source Link
Martin Ender
  • 198.3k
  • 67
  • 455
  • 999

Marbelous, size 36, es1024

9C Dr=0 ^3 +O +O!! :Dr }0 ++ /\{>{0 

The ninth line break can probably go anywhere, but let's say we'll put it at the end.

After another very fruitful discussion session with Sp3000, at last, one of the Marbelous submissions is cracked! :)