Merge branch 'master' of github.com:failedxyz/easyctf
This commit is contained in:
commit
cb8c08951b
28 changed files with 100 additions and 129 deletions
|
@ -1,9 +1,17 @@
|
|||
Write a program that outputs the numbers 1 through n, in incremental order, one per line.
|
||||
Write a program that takes an integer `n` as input.
|
||||
|
||||
However, replace any line that is a multiple of 3 with "Fizz" and any that are a multiple of 5 with "Buzz". Any line that is a multiple of 3 and 5 should be written as "FizzBuzz".
|
||||
Output the numbers 1 through `n`, in increasing order, one per line.
|
||||
|
||||
However, replace any line that is a multiple of 3 with `Fizz` and any that are a multiple of 5 with `Buzz`. Any line that is a multiple of 3 and 5 should be written as `FizzBuzz`.
|
||||
|
||||
The input will be the number of lines to write, n, followed by a linebreak.
|
||||
|
||||
Sample input:
|
||||
|
||||
```
|
||||
17
|
||||
```
|
||||
|
||||
Sample output:
|
||||
|
||||
```
|
||||
|
@ -12,14 +20,16 @@ Sample output:
|
|||
Fizz
|
||||
4
|
||||
Buzz
|
||||
|
||||
...
|
||||
|
||||
Fizz
|
||||
7
|
||||
8
|
||||
Fizz
|
||||
Buzz
|
||||
11
|
||||
Fizz
|
||||
13
|
||||
14
|
||||
FizzBuzz
|
||||
16
|
||||
17
|
||||
|
||||
...
|
||||
```
|
|
@ -1,4 +1,12 @@
|
|||
def grade(random, key):
|
||||
if key.find("PUT A NEW KEY HERE!!!!") != -1:
|
||||
return True, "Correct!"
|
||||
return False, "Nope."
|
||||
n = input()
|
||||
|
||||
for i in range(1, n + 1):
|
||||
if i % 3 == 0 and i % 5 == 0:
|
||||
print 'FizzBuzz'
|
||||
elif i % 3 == 0:
|
||||
print 'Fizz'
|
||||
elif i % 5 == 0:
|
||||
print 'Buzz'
|
||||
else:
|
||||
print i
|
||||
|
||||
|
|
|
@ -2,10 +2,10 @@ Your librarian has a 2-row bookshelf that can contain N books in each row. She w
|
|||
|
||||
Input: the integer, N (1<=N<=2^1024)
|
||||
|
||||
Output: the number of ways you can place red-colored books and blue-colored books onto the bookshelf. Since this number might be really big, output it mod 10^9+7.
|
||||
Output: the number of ways you can place red-colored books and blue-colored books onto a N-column bookshelf. Since this number might be really big, output it mod 10^9+7.
|
||||
|
||||
Example:
|
||||
Input: 3
|
||||
Input: 2
|
||||
|
||||
Your valid bookshelf layouts are:
|
||||
```
|
||||
|
|
11
library/generator.py
Normal file
11
library/generator.py
Normal file
|
@ -0,0 +1,11 @@
|
|||
import random
|
||||
C = input()
|
||||
|
||||
if C==1:
|
||||
print 1
|
||||
elif C==2:
|
||||
print 2
|
||||
elif C==3 or C==4:
|
||||
print random.randint(3, 100)
|
||||
else:
|
||||
print random.randint(2**(C**3-1), 2**(C**3))
|
39
library/grader.py
Normal file
39
library/grader.py
Normal file
|
@ -0,0 +1,39 @@
|
|||
x = input() + 1
|
||||
|
||||
mat = [[0,0,1,0],[0,1,0,1],[1,0,2,0],[0,2,0,1]]
|
||||
mod = 10**9+7
|
||||
|
||||
def egcd(a, b):
|
||||
if a == 0:
|
||||
return (b, 0, 1)
|
||||
else:
|
||||
g, y, x = egcd(b % a, a)
|
||||
return (g, x - (b // a) * y, y)
|
||||
|
||||
def modinv(a, m):
|
||||
g, x, y = egcd(a, m)
|
||||
if g != 1:
|
||||
raise Exception('modular inverse does not exist')
|
||||
else:
|
||||
return x % m
|
||||
|
||||
def matmult(mtx_a, mtx_b, mod):
|
||||
tpos_b = zip( *mtx_b)
|
||||
rtn = [[ sum( ea*eb for ea,eb in zip(a,b))%mod for b in tpos_b] for a in mtx_a]
|
||||
return rtn
|
||||
|
||||
def trace(A):
|
||||
return sum(A[j][j] for j in range(len(A)))
|
||||
|
||||
def matpow(A, p):
|
||||
ret = A
|
||||
for bit in bin(p)[3:]:
|
||||
ret = matmult(ret, ret, mod)
|
||||
if bit=='1':
|
||||
ret = matmult(ret, A, mod)
|
||||
return ret
|
||||
|
||||
inv4 = modinv(4, mod)
|
||||
ans = trace(matpow(mat, x))%mod
|
||||
ans = (ans * inv4)% mod
|
||||
print ans
|
10
library/problem.yml
Normal file
10
library/problem.yml
Normal file
|
@ -0,0 +1,10 @@
|
|||
author: arxenix
|
||||
title: library
|
||||
category: Programming
|
||||
autogen: false
|
||||
programming: true
|
||||
value: 75
|
||||
|
||||
test_cases: 10
|
||||
time_limit: 1000
|
||||
memory_limit: 256000
|
|
@ -28,3 +28,7 @@ Output:
|
|||
```
|
||||
1
|
||||
```
|
||||
|
||||
Explanation:
|
||||
|
||||
If you understand the word 'ok', you can understand the word 'blah'. If you understand 'ok' and 'blah', you can understand 'iz'. 'iz', and 'ok' lets you understand 'yiq'. 'yiq', 'iz', and 'blah' let you understand 'arggiq'.
|
||||
|
|
|
@ -1,5 +1 @@
|
|||
<<<<<<< HEAD
|
||||
I found somebody's notes on their private RSA! Help me crack [this](${ciphertext_txt}).
|
||||
=======
|
||||
We came across another [message]($rsa3) that follows the same cryptographic schema as those other Really Scary Admin messages. Take a look and see if you can crack it.
|
||||
>>>>>>> 93577ddee37a489cf0aa1a4b987d23a3bc3d2657
|
||||
We came across another [message]($rsa3) that follows the same cryptographic schema as those other RSA messages. Take a look and see if you can crack it.
|
||||
|
|
|
@ -1,56 +1,4 @@
|
|||
<<<<<<< HEAD
|
||||
from cStringIO import StringIO
|
||||
|
||||
flag = "wh3n_y0u_h4ve_p&q_RSA_iz_ez"
|
||||
|
||||
def modx(base,exp,mod):
|
||||
r = 1;
|
||||
while (exp > 0):
|
||||
if (exp % 2 == 1):
|
||||
r = (r * base) % mod
|
||||
base = (base * base) % mod
|
||||
exp = exp/2
|
||||
return r
|
||||
|
||||
def probprime(s):
|
||||
if s%2==0:
|
||||
s += 1
|
||||
smolprimes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
|
||||
while len(set([modx(i,s-1,s) for i in smolprimes])) != 1 or modx(2,s-1,s) != 1:
|
||||
s+=2
|
||||
return(s)
|
||||
|
||||
def get_problem(random):
|
||||
# add Probable Prime function later
|
||||
p = probprime(random.randint(3*10**79,4*10**79))
|
||||
q = probprime(random.randint(3*10**79,4*10**79))
|
||||
e = 3
|
||||
salt = "".join([random.choice("0123456789abcdef") for i in range(8)])
|
||||
return (p, q, e, salt)
|
||||
|
||||
def generate_ciphertext(random):
|
||||
p, q, e, salt = get_problem(random)
|
||||
encoded = int(("easyctf{%s_%s}" % (flag, salt)).encode('hex'),16)
|
||||
ciphertext = 'p: '+str(p)+'\n'
|
||||
ciphertext += 'q: '+str(q)+'\n'
|
||||
ciphertext += 'e: '+str(e)+'\n'
|
||||
ciphertext += 'c: '+str(pow(encoded, e, p*q))+'\n'
|
||||
|
||||
return StringIO(ciphertext)
|
||||
|
||||
def generate(random):
|
||||
return dict(files={
|
||||
"ciphertext_rsa1.txt": generate_ciphertext
|
||||
})
|
||||
|
||||
def grade(random, key):
|
||||
n, salt = get_problem(random)
|
||||
if key.find("%s_%s" % (flag, salt)) >= 0:
|
||||
return True, "Correct!"
|
||||
return False, "Nope."
|
||||
=======
|
||||
def grade(autogen, key):
|
||||
if key.find("tw0_v3ry_merrry_tw1n_pr1m35!!_417c0d") != -1:
|
||||
return True, "Really Superb! Applause!"
|
||||
return False, "RIP"
|
||||
>>>>>>> 93577ddee37a489cf0aa1a4b987d23a3bc3d2657
|
||||
|
|
|
@ -1,19 +1,9 @@
|
|||
<<<<<<< HEAD
|
||||
title: RSA 1
|
||||
author: neptunia
|
||||
hint: Go google RSA if you're stuck.
|
||||
category: Cryptography
|
||||
autogen: true
|
||||
programming: false
|
||||
value: 25
|
||||
=======
|
||||
author: blockingthesky
|
||||
title: RSA 3
|
||||
hint: You might want to read up on how RSA works.
|
||||
category: Cryptography
|
||||
autogen: false
|
||||
programming: false
|
||||
value: 70
|
||||
value: 135
|
||||
files:
|
||||
- rsa3
|
||||
>>>>>>> 93577ddee37a489cf0aa1a4b987d23a3bc3d2657
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
We came across another [message]($rsa4) that follows the same cryptographic schema as those other RSA messages. Take a look and see if you can crack it.
|
|
@ -1,8 +0,0 @@
|
|||
<<<<<<< HEAD
|
||||
<<<<<<< HEAD
|
||||
I found somebody's notes on their private RSA! Help me crack [this](${ciphertext_txt}).
|
||||
=======
|
||||
We came across another [message]($rsa3) that follows the same cryptographic schema as those other Really Scary Admin messages. Take a look and see if you can crack it.
|
||||
>>>>>>> 93577ddee37a489cf0aa1a4b987d23a3bc3d2657
|
||||
=======
|
||||
>>>>>>> f9a58afef003d40f3ada9c1645eda26363521cf3
|
|
@ -1,8 +0,0 @@
|
|||
<<<<<<< HEAD
|
||||
<<<<<<< HEAD
|
||||
I found somebody's notes on their private RSA! Help me crack [this](${ciphertext_txt}).
|
||||
=======
|
||||
We came across another [message]($rsa3) that follows the same cryptographic schema as those other Really Scary Admin messages. Take a look and see if you can crack it.
|
||||
>>>>>>> 93577ddee37a489cf0aa1a4b987d23a3bc3d2657
|
||||
=======
|
||||
>>>>>>> f9a58afef003d40f3ada9c1645eda26363521cf3
|
|
@ -1 +0,0 @@
|
|||
We came across another [message]($rsa3) that follows the same cryptographic schema as those other Really Scary Admin messages. Take a look and see if you can crack it.
|
|
@ -1 +0,0 @@
|
|||
We came across another [message]($rsa3) that follows the same cryptographic schema as those other Really Scary Admin messages. Take a look and see if you can crack it.
|
|
@ -1,5 +0,0 @@
|
|||
<<<<<<< HEAD
|
||||
I found somebody's notes on their private RSA! Help me crack [this](${ciphertext_txt}).
|
||||
=======
|
||||
We came across another [message]($rsa3) that follows the same cryptographic schema as those other Really Scary Admin messages. Take a look and see if you can crack it.
|
||||
>>>>>>> 93577ddee37a489cf0aa1a4b987d23a3bc3d2657
|
|
@ -1,5 +0,0 @@
|
|||
<<<<<<< HEAD
|
||||
I found somebody's notes on their private RSA! Help me crack [this](${ciphertext_txt}).
|
||||
=======
|
||||
We came across another [message]($rsa3) that follows the same cryptographic schema as those other Really Scary Admin messages. Take a look and see if you can crack it.
|
||||
>>>>>>> 93577ddee37a489cf0aa1a4b987d23a3bc3d2657
|
|
@ -1,4 +0,0 @@
|
|||
def grade(autogen, key):
|
||||
if key.find("tw0_v3ry_merrry_tw1n_pr1m35!!_417c0d") != -1:
|
||||
return True, "Really Superb! Applause!"
|
||||
return False, "RIP"
|
|
@ -1,9 +0,0 @@
|
|||
author: blockingthesky
|
||||
title: RSA 4
|
||||
hint: You might want to read up on how RSA works.
|
||||
category: Cryptography
|
||||
autogen: false
|
||||
programming: false
|
||||
value: 130
|
||||
files:
|
||||
- rsa3
|
|
@ -1,2 +0,0 @@
|
|||
{N : e : c}
|
||||
{0x27335d21ca51432fa000ddf9e81f630314a0ef2e35d81a839584c5a7356b94934630ebfc2ef9c55b111e8c373f2db66ca3be0c0818b1d4eda7d53c1bd0067f66a12897099b5e322d85a8da45b72b828813af23L : 0x10001 : 0x9b9c138e0d473b6e6cf44acfa3becb358b91d0ba9bfb37bf11effcebf9e0fe4a86439e8217819c273ea5c1c5acfd70147533aa550aa70f2e07cc98be1a1b0ea36c0738d1c994c50b1bd633e3873fc0cb377e7L}
|
|
@ -1,2 +0,0 @@
|
|||
{N : e : c}
|
||||
{0x27335d21ca51432fa000ddf9e81f630314a0ef2e35d81a839584c5a7356b94934630ebfc2ef9c55b111e8c373f2db66ca3be0c0818b1d4eda7d53c1bd0067f66a12897099b5e322d85a8da45b72b828813af23L : 0x10001 : 0x9b9c138e0d473b6e6cf44acfa3becb358b91d0ba9bfb37bf11effcebf9e0fe4a86439e8217819c273ea5c1c5acfd70147533aa550aa70f2e07cc98be1a1b0ea36c0738d1c994c50b1bd633e3873fc0cb377e7L}
|
|
@ -5,6 +5,7 @@ autogen: false
|
|||
programming: true
|
||||
value: 15
|
||||
|
||||
grader_language: python
|
||||
test_cases: 10
|
||||
time_limit: 1000
|
||||
memory_limit: 256000
|
||||
|
|
|
@ -7,7 +7,7 @@ elif N == 1:
|
|||
elif N == 2:
|
||||
print '123 456 3\n5 7 11'
|
||||
elif N == 3:
|
||||
print '1 10000000 16\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16'
|
||||
print '1 10000000 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16'
|
||||
else:
|
||||
import random as r
|
||||
r.seed(N)
|
||||
|
|
BIN
things-dont-add-up/grader.class
Normal file
BIN
things-dont-add-up/grader.class
Normal file
Binary file not shown.
|
@ -1 +0,0 @@
|
|||
# done in grader.java
|
|
@ -5,6 +5,7 @@ autogen: false
|
|||
programming: true
|
||||
value: 210
|
||||
|
||||
grader_language: java
|
||||
test_cases: 15
|
||||
time_limit: 1000
|
||||
memory_limit: 256000
|
Loading…
Reference in a new issue