Skip to content
Snippets Groups Projects
Commit f4d28080 authored by Bensong Liu's avatar Bensong Liu
Browse files

add d

parent d25d0f47
No related branches found
No related tags found
No related merge requests found
*.c
changpu_v2
Makefile 0 → 100644
CC ?= gcc -O3
build:
cython --embed changpu_v2.py
$(CC) changpu_v2.c -o changpu_v2 $$(python3-config --cflags --ldflags --embed)
clean:
rm -f *.c changpu changpu_v2
# changpu\_zhang
张菖蒲。此程序遍历所有情形寻找最优解,未作优化(懒)。
## performance
```
CASE Q: PYTHON=0.041s, C=0.040s
CASE 42: PYTHON=0.041s, C=0.023s
CASE 5Q2: PYTHON=0.038s, C=0.022s
CASE 5A53: PYTHON=0.040s, C=0.038s
CASE 5669: PYTHON=0.023s, C=0.023s
CASE 54Q3: PYTHON=0.039s, C=0.021s
CASE A877: PYTHON=0.038s, C=0.034s
CASE KJA5: PYTHON=0.024s, C=0.021s
CASE K325: PYTHON=0.039s, C=0.039s
CASE Q6348: PYTHON=0.028s, C=0.023s
CASE AK6522: PYTHON=0.023s, C=0.040s
CASE QJ35482: PYTHON=0.041s, C=0.038s
CASE 9583JQ3A: PYTHON=0.040s, C=0.022s
CASE K98KK8239: PYTHON=0.040s, C=0.040s
CASE 45232A62A4: PYTHON=0.055s, C=0.141s
CASE A9JK95A8K98: PYTHON=0.059s, C=0.159s
CASE 437998Q7Q637: PYTHON=0.099s, C=0.186s
CASE 4K223JQ82Q6J5: PYTHON=0.268s, C=0.184s
CASE J43J744392A563: PYTHON=1.063s, C=0.162s
CASE 64322666KJK36AJ: PYTHON=2.914s, C=0.171s
CASE 8AAQ4355A626276K: PYTHON=12.286s, C=0.178s
CASE JQ68K2745574A5KA9: PYTHON=......., C=0.224s
CASE 5978339223K9J73A7J: PYTHON=......., C=0.330s
CASE 24KJ7Q7886592264278: PYTHON=......., C=0.409s
CASE 3729J6JQ6JQ63QQ75KK2: PYTHON=......., C=0.855s
CASE K3K2495AJ652J749J32K8: PYTHON=......., C=1.368s
CASE Q3K6AK9JQKKJJ79A72A474: PYTHON=......., C=2.406s
CASE 39QJJ3AK787K99655JQ85A9: PYTHON=......., C=4.878s
CASE 432J5259A6K5588JAJJ9KQ7K: PYTHON=......., C=12.215s
CASE A936Q4J7QKKK3J7K7AK377Q54: PYTHON=......., C=13.480s
CASE Q328K7A284Q698649652A58936: PYTHON=......., C=22.705s
CASE 327965J2Q62Q2K4J3247JQK5A4K: PYTHON=......., C=14.555s
CASE 764933Q4577J9J9374KK7J9A4Q69: PYTHON=......., C=14.666s
CASE J48J2JAK84KJ4426K4JQ5655749QK: PYTHON=......., C=15.975s
CASE QQ8AK748K2K6824557K98Q35K554J8: PYTHON=......., C=15.039s
```
function for_case () {
pytime=`( time python3 changpu_v2.py $1 ) 2>&1 | grep real | sed 's/^.*m//g'`
ctime=`( time ./changpu_v2 $1 ) 2>&1 | grep real | sed 's/^.*m//g'`
echo "CASE $1: PYTHON=$pytime, C=$ctime"
}
function for_case_c () {
ctime=`( time ./changpu_v2 $1 ) 2>&1 | grep real | sed 's/^.*m//g'`
echo "CASE $1: PYTHON=......., C=$ctime"
}
for_case Q
for_case 42
for_case 5Q2
for_case 5A53
for_case 5669
for_case 54Q3
for_case A877
for_case KJA5
for_case K325
for_case Q6348
for_case AK6522
for_case QJ35482
for_case 9583JQ3A
for_case K98KK8239
for_case 45232A62A4
for_case A9JK95A8K98
for_case 437998Q7Q637
for_case 4K223JQ82Q6J5
for_case J43J744392A563
for_case 64322666KJK36AJ
for_case 8AAQ4355A626276K
for_case_c JQ68K2745574A5KA9
for_case_c 5978339223K9J73A7J
for_case_c 24KJ7Q7886592264278
for_case_c 3729J6JQ6JQ63QQ75KK2
for_case_c K3K2495AJ652J749J32K8
for_case_c Q3K6AK9JQKKJJ79A72A474
for_case_c 39QJJ3AK787K99655JQ85A9
for_case_c 432J5259A6K5588JAJJ9KQ7K
for_case_c A936Q4J7QKKK3J7K7AK377Q54
for_case_c Q328K7A284Q698649652A58936
for_case_c 327965J2Q62Q2K4J3247JQK5A4K
for_case_c 764933Q4577J9J9374KK7J9A4Q69
for_case_c J48J2JAK84KJ4426K4JQ5655749QK
for_case_c QQ8AK748K2K6824557K98Q35K554J8
# for len in (seq 20)
# for i in (seq $len)
# echo -n (random choice A 2 3 4 5 6 7 8 9 J Q K)
# end
# echo ''
# end
#cython: language_level=3
s = 'A8492QJ835433'
s = input("INPUT: ")
import itertools
def basic_char_to_int(ch):
ls = '0A23456789JQK'
return ls.find(ch)
def basic_int_to_char(i):
ls = '0A23456789JQK'
return ls[i]
def comb_exclude_border(ar):
results = []
for i in range(len(ar)):
if i != 0:
results += list(itertools.combinations(ar, i))
return results
def sorted_list_dedup(ls):
if len(ls) == 0:
return ls
prev = "Impossible to match"
res = []
for elem in ls:
if elem != prev:
prev = elem
res.append(elem)
return res
def set_try_sum_to_number(ls, target_int):
ls = ls.sort()
return "TODO" # TODO: speed up
# we devide array to two half: halfA+halfB.
# Then find halfA == one of halfB.subset()
def combinations_pair_gen(ar):
combinations = comb_exclude_border(range(len(ar)))
results = []
for combination in combinations:
halfA, halfB = [], []
for i in range(len(ar)):
(halfA if i in combination else halfB).append(ar[i])
results.append((halfA, halfB))
return results
ar = [basic_char_to_int(ch) for ch in s]
possibilities = combinations_pair_gen(ar)
answers = []
for possib in possibilities:
halfA, halfB = possib
if sum(halfA) > sum(halfB):
continue
elif sum(halfA) == sum(halfB):
answers.append((halfA, halfB))
else:
# let's split halfB
for possib_halfB in comb_exclude_border(halfB):
if sum(halfA) == sum(possib_halfB):
answers.append((halfA, possib_halfB))
# now filter answers
quant = [len(answer[0]) + len(answer[1]) for answer in answers]
answers.sort(reverse=True, key=lambda answer: len(answer[0]) + len(answer[1]))
answers = sorted_list_dedup(answers)
answers = answers[:5] if len(answers) > 5 else answers
# print answers
for answer in answers:
halfA_s = ''.join([basic_int_to_char(i) for i in answer[0]])
halfB_s = ''.join([basic_int_to_char(i) for i in answer[1]])
print(halfA_s, "===", halfB_s)
s = 'A8492QJ835433'
s = input("INPUT: ")
#cython: language_level=3
import sys
if len(sys.argv) == 2:
s = sys.argv[1]
else:
s = input("INPUT: ")
import itertools
......@@ -40,7 +45,7 @@ combinations = comb_exclude_border(range(len(ar)))
# 100 -> [[0,1,2,3], [6,7,8]]
sum_buf = {}
for comb in combinations:
sum_val = sum(comb)
sum_val = sum([ar[index] for index in comb])
if sum_val in sum_buf:
sum_buf[sum_val].append(arr_to_bitarray(comb))
else:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment