Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to actually run the puzzles #7

Closed
m0zjo-code opened this issue Nov 12, 2017 · 3 comments
Closed

How to actually run the puzzles #7

m0zjo-code opened this issue Nov 12, 2017 · 3 comments

Comments

@m0zjo-code
Copy link

Errr slightly embarrassing question...

It's not immediately clear to me on how to actually run the compiled puzzles after going through the readme - I keep getting seg-faults on the provided implementation which I guess means I'm just using them wrong...

Could someone provide some example use cases of the puzzles please??

Thanks! :)

@m8pple
Copy link
Contributor

m8pple commented Nov 12, 2017

Ah yes, in the interest of a short readme I left things a bit implicit.

So assuming you've done make all, you could use bin/run_puzzle:

$ bin/run_puzzle
run_puzzle name scale logLevel
Puzzles:
edit_distance
gaussian_blur
hold_time
mining
random_projection

This is saying that the program takes three arguments:

  • The name of the puzzle (e.g. mining)
  • A scale parameter (a positive integer)
  • A log level, which controls how much debug info is printed

So if we choose name=mining, scale=20, logLevel=2:

$ bin/run_puzzle mining 20 2
LogLevel = 2 -> 2
[run_puzzle], 1510481496.81, 2, Created log.
[run_puzzle], 1510481496.81, 2, Creating random input
[run_puzzle], 1510481496.81, 2, Executing puzzle
[run_puzzle], 1510481496.81, 2, Executing reference
[run_puzzle], 1510481496.81, 2, Checking output
[run_puzzle], 1510481496.81, 2, Output is correct

Increasing the log-level results in more output:

$ bin/run_puzzle mining 20 3
LogLevel = 3 -> 3
[run_puzzle], 1510481531.46, 2, Created log.
[run_puzzle], 1510481531.46, 2, Creating random input
[run_puzzle], 1510481531.46, 2, Executing puzzle
[run_puzzle], 1510481531.46, 3, Found new best of 13001368952934052812, ratio=0.00354708
[run_puzzle], 1510481531.46, 3, Found new best of 3475098330808870328, ratio=0.0132707
[run_puzzle], 1510481531.46, 3, Found new best of 2993103420261690249, ratio=0.0154077
[run_puzzle], 1510481531.46, 3, Found new best of 1174583366943439854, ratio=0.0392623
[run_puzzle], 1510481531.46, 3, Found new best of 234398509893197458, ratio=0.196746
[run_puzzle], 1510481531.46, 3, Found new best of 170740885297889898, ratio=0.270099
[run_puzzle], 1510481531.46, 3, Found new best of 151155954521271800, ratio=0.305095
[run_puzzle], 1510481531.46, 3, Found new best of 80107323736766319, ratio=0.575688
[run_puzzle], 1510481531.46, 3, Found new best of 63841427804842625, ratio=0.722366
[run_puzzle], 1510481531.46, 2, Executing reference
[run_puzzle], 1510481531.46, 3, Found new best of 13001368952934052812, ratio=0.00354708
[run_puzzle], 1510481531.46, 3, Found new best of 3475098330808870328, ratio=0.0132707
[run_puzzle], 1510481531.46, 3, Found new best of 2993103420261690249, ratio=0.0154077
[run_puzzle], 1510481531.46, 3, Found new best of 1174583366943439854, ratio=0.0392623
[run_puzzle], 1510481531.46, 3, Found new best of 234398509893197458, ratio=0.196746
[run_puzzle], 1510481531.46, 3, Found new best of 170740885297889898, ratio=0.270099
[run_puzzle], 1510481531.46, 3, Found new best of 151155954521271800, ratio=0.305095
[run_puzzle], 1510481531.46, 3, Found new best of 80107323736766319, ratio=0.575688
[run_puzzle], 1510481531.46, 3, Found new best of 63841427804842625, ratio=0.722366
[run_puzzle], 1510481531.46, 2, Checking output
[run_puzzle], 1510481531.46, 2, Output is correct

@m8pple
Copy link
Contributor

m8pple commented Nov 12, 2017

And for independent files, we can create and save an input to a file
(with the same parameters as before):

$ bin/create_puzzle_input mining 20 2 > w/input.bin
LogLevel = 2 -> 2
[run_puzzle], 1510481643.80, 2, Created log.
[run_puzzle], 1510481643.80, 2, Creating random input
[run_puzzle], 1510481643.80, 2, Writing data to stdout

We can then execute the puzzle:

$ bin/execute_puzzle
execute_puzzle isReference logLevel

So isReference controls whether it is the original version (1), or your
optimised version (0).

Running the reference version:

$ cat w/input.bin | bin/execute_puzzle 1 2 > w/output.ref
[execute_puzzle], 1510481734.90, 2, Created log.
[execute_puzzle], 1510481734.90, 2, Loaded input, puzzle=mining
[execute_puzzle], 1510481734.90, 2, Begin reference
[execute_puzzle], 1510481734.90, 2, Finished reference

then the customised version (note the 1 has changed to a 0):

$ cat w/input.bin | bin/execute_puzzle 0 2 > w/output.got
[execute_puzzle], 1510481882.28, 2, Created log.
[execute_puzzle], 1510481882.28, 2, Loaded input, puzzle=mining
[execute_puzzle], 1510481882.28, 2, Begin execution
[execute_puzzle], 1510481882.28, 2, Finished execution

We now have:

  • w/input.bin
  • w/output.ref
  • w/output.got

The solution can then be compared:

$ bin/compare_puzzle_output w/input.bin w/output.ref w/output.got 2
LogLevel = 2 -> 2
[execute_puzzle], 1510481972.43, 2, Created log.
[execute_puzzle], 1510481972.43, 2, Loading input w/input.bin
[execute_puzzle], 1510481972.43, 2, Creating puzzle mining to match input
[execute_puzzle], 1510481972.43, 2, Loading reference w/output.ref
[execute_puzzle], 1510481972.43, 2, Loading got w/output.got
[execute_puzzle], 1510481972.43, 2, Outputs are equal.

There is also an example testing build target in the makefile called
serenity_now - try doing make serenity_now.

@m0zjo-code
Copy link
Author

Wonderful thanks! 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants