Dawnnnnnn

随缘记录_(:3 」∠ )_

记录一些平时遇到的问题_(:3 ⌒゙)_


欢迎(〃∀〃)

2019华为笔试题代码

之前因为赶火车,在KFC匆匆忙忙的做了点,只AC了第一题,第二题写了个开头就交卷了,第三题看了一眼,确认过眼神,是很难的题。所以后来回来后只抽空做了第二题,在这里贴一下第一题和第二题的代码做个记录。

之前没刷过算法题,也没看过算法方面的东西。。以为笔试会是安全方面的题,没想到竟然是统一的题。比较难受。代码比较渣,只求能用。

第一题

import sys
# 连续输入字符串(输入字符串个数为N,每个字符串长度不大于100,输入字符串间按照空格键分隔),请按长度为8拆分每个字符串后输出到新的字符串数组,输出的字符串按照升序排列。
# 长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
# 输入描述:
# 输入内容:2 abc 123456789
# 输入说明:
# 1.
# 输入两个字符串(以空格分隔),其中一个为abc,另一个为123456789
# 输出描述:
# 输出结果: 12345678 90000000 abc00000
#
# 输出说明:
# 1.abc字符串需要再后边补零,12345789拆分为12345678与90000000,所有的字符串需要升序排列后输出(以空格分隔);
# 2.输出字符串中的重复字符串不能删除。
string_list = []


line = sys.stdin.readline().strip()
string_num = line.split(" ")[0]  # 这个必须能读到的。根据这个判断下面有几个参数


for i in range(0, int(string_num)):
    split_string = (line.split(" ")[i + 1])  # ojbk
    string_list.append(split_string)


def loop_helper(string_list):
    """
    这是一个循环处理函数,虽然时间复杂度有点高,但是我觉得应该可以循环到符合要求
    :return: string_list
    """
    divided_num_list = []
    will_deleted_list = []
    no_change_length = len(string_list)
    for k in range(0, no_change_length):
        if len(string_list[k]) == 8:
            pass
        elif len(string_list[k]) < 8:
            need_zero_num = 8 - len(string_list[k])
            string_list[k] = string_list[k] + "0" * need_zero_num
        elif 8 < len(string_list[k]) <= 100:
            will_deleted_num = string_list[k]
            will_deleted_list.append(will_deleted_num)
            will_divided_group_num = int(len(string_list[k]) / 8)
            for m in range(0, will_divided_group_num):
                divided_num = string_list[k][m * 8:(m + 1) * 8]
                divided_num_list.append(divided_num)
            last_num = string_list[k][will_divided_group_num * 8:]
            divided_num_list.append(last_num)
        else:
            exit("string length > 100 !")
    if divided_num_list:
        for tmp1 in divided_num_list:
            string_list.append(tmp1)
    if will_deleted_list:
        for tmp2 in will_deleted_list:
            string_list.remove(tmp2)
    return string_list


result = loop_helper(string_list)
result = loop_helper(result)

result = sorted(result)

for single_string in result:
    print(single_string,end=" ")


第二题

import sys
# 给定一个字符串,字符串包含数字、大小写字母以及括号(包括大括号、中括号和小括号),括号可以嵌套,即括号里面可以出现数字和括号。
# 按照如下的规则对字符串进行展开,不需要考虑括号成对不匹配问题,用例保证括号匹配,同时用例保证每个数字后面都有括号,不用考虑数字后面没有括号的这种情况,即2a2(b)这种情况不用考虑。
# 1) 数字表示括号里的字符串重复的次数,展开后的字符串不包含括号。
# 2) 将字符串进行逆序展开。
# 输出最终展开的字符串。
# 输入描述:
# 输入一个长度小于100的字符串。
# 输出描述:
# 输出展开后的字符串。
# 示例1输入输出示例仅供调试,后台判题数据一般不包含示例
# 输入 abc3(A)
# 输出 AAAcba


def match_chars(char):
    if char == "(":
        return ")"
    elif char == "[":
        return "]"
    else:
        return "}"

def handle(strings):
    struct_info = []
    # 存储数字位置,数字数值,符号
    for i in range(0,len(strings)):
        if strings[i].isdigit():
            struct_info.append([i,int(strings[i]),strings[i+1]])
    new_strings = ""
    # 从最内层的括号开始去除
    for struct in struct_info[::-1]:
        # 确定括号内的内容的起始和结束位置
        start = struct[0] + 2
        end = start + strings[start:].index(match_chars(struct[2]))
        new_strings = ""
        new_strings = new_strings + strings[:struct[0]]
        for k in range(0,struct[1]):
            new_strings = new_strings + strings[start:end]

        new_strings = new_strings + strings[end+1:]
        # 为了循环删去括号,把新值覆盖到旧值
        strings = new_strings

    return new_strings


line = sys.stdin.readline().strip()
result = handle(line)
print(result[::-1])

最近的文章

2019秋招/实习安全面经及总结

安全面经少之又少,我也为大家做做贡献XD,虽然我是个菜鸡….我主要是做Web安全的辣鸡CTF选手,二进制只会F5,经常写B站的脚本工具啥的,靠着这个在Github上骗star,当作亮点(雾Github链接下面介绍一下我3月份实习和789月份秋招投递的公司以下仅写有回复的公司,一点消息没有的就不写了,有的是自己放弃了笔试,有的是公司不给回复,还有的公司可能是忘了….时间周期太长了3月实习投递公司 腾讯 华为 海康威视 微众银行 深信服腾讯(挂)提前批刚开始,就直接投递+找学长内推了...…

继续阅读
更早的文章

Wordpress 5.0 RCE复现分析

复现一遍这个2.20曝出来的CVE-2019-6977,我根据lorexxar的这篇文章尝试了复现,中途还是遇到了很多问题,再记录一下首先搭建一个wordpress环境,坑就从这里开始了。我之前调试php完全就是用的自带的Apache和php,项目放到 /Library/WebServer/Documents 这个文件夹下,基本就可以运行了,今天这个虽然说也能运行,但是rewrite模块没打开,导致在查看附件页面疯狂报404,经过我的长时间调试仍然不知道哪里出了问题,就剩下重启电脑这个办法...…

继续阅读