我有一个这样的文本:
\/::360::__/
|::559:::| |
::468::\:\~\:\ \/__/
/:/\:\ /::390::\__\
::138::
::380:: /:/ \/__/
/::144::\ \
/::\ ::145:: \
::418:: ___
::539::___
\|::483::__|
这里使用\
、|
和_
制作了一些模式。每一行都以::539::
等格式添加到某个随机位置中的行号。我想首先根据给定的行号对所有行进行排序,然后从每行中剔除**::line-number::**
以获得实际的标志。
(实际问题有600行,随机排列。需要对它们进行适当的剥离才能找到旗帜。)
The actual complete text file link
我已经发布了我使用的python代码,如下所示。
#!/usr/bin/python3
# import sys
with open( 'sorted.txt' ) as file:
randlst =[0] * 600
for line in file:
num=''
strng=''
for each in line:
if each.isdigit():
num += each
else:
strng += each
strng = strng.strip('::::')
num = int(num)
randlst.insert(num,strng)
for i in range(600):
if randlst[i] !=0:
print(str(randlst[i]).replace('::::',''))
在这段代码中,文件sorted.txt是在使用bash对实际输入文件(在上面的链接中给出)进行排序后生成的,因为我认为在python中进行排序会变得很困难。
问题是bash所做的排序并不完全准确,正如您在这里看到的:
::0:: ___
::1:: /\__\
\/__::10::/
/\ \::100::
/::\ ::101:: \
::102::/:/\:\ \
/:/ \:\::103:: \
由于这个看似很小的错误,最终的输出没有几个字母,我的提交被拒绝了。
请指出我如何改进这一点(我不了解正则表达式,很抱歉这是一个糟糕的脚本)。
或者,您是否可以建议使用bash命令来完成此工作,而不是使用python?
发布于 2018-07-28 04:02:41
这将根据编号对行进行排序,并将它们写入标准输出(将用::<number>::
替换''
):
data = r""" \/::360::__/
|::559:::| |
::468::\:\~\:\ \/__/
/:/\:\ /::390::\__\
::138::
::380:: /:/ \/__/
/::144::\ \
/::\ ::145:: \
::418:: ___
::539::___
\|::483::__|"""
import re
for s1, _, s2 in sorted(re.findall(r'^(.*?)(?:::)(\d+)(?:::)(.*?)$', data, flags=re.M), key=lambda v: int(v[1])):
print(s1 + s2)
打印:
/\ \
/::\ \
\/__/
/:/ \/__/
/:/\:\ /\__\
___
\:\~\:\ \/__/
\|__|
___
|:| |
发布于 2018-07-28 04:12:42
下面是一个python解决方案,它根据嵌入的行号对行进行排序,然后剥离这些行号并打印模式
>>> print(s)
\/::360::__/
|::559:::| |
::468::\:\~\:\ \/__/
/:/\:\ /::390::\__\
::138::
::380:: /:/ \/__/
/::144::\ \
/::\ ::145:: \
::418:: ___
::539::___
\|::483::__|
>>>
>>>
>>> sorted_s ='\n'.join(sorted(s.splitlines(), key=lambda x: int(re.findall(r'\d+', x)[0])))
>>> print (re.sub(r'::\d+::', '', sorted_s))
/\ \
/::\ \
\/__/
/:/ \/__/
/:/\:\ /\__\
___
\:\~\:\ \/__/
\|__|
___
|:| |
>>>
在用户G_M创建的https://bpaste.net/raw/5379781c4ee8
页面的内容上尝试此操作后,我们将得到以下结果
>>> import requests
>>> import re
>>>
>>> r = requests.get('https://bpaste.net/raw/5379781c4ee8')
>>> s = r.text
>>> sorted_s ='\n'.join(sorted(s.splitlines(), key=lambda x: int(re.findall(r'\d+', x)[0])))
>>> print (re.sub(r'::\d+::', '', sorted_s))
___
/\__\
/::| |
/:|:| |
/:/|:|__|__
/:/ |::::\__\
\/__/~~/:/ /
/:/ /
/:/ /
/:/ /
\/__/
___
/\ \
/::\ \
/:/\:\ \
/::\~\:\ \
/:/\:\ \:\__\
\/__\:\/:/ /
\::/ /
/:/ /
/:/ /
\/__/
___
/\__\
/:/ /
/:/__/
/::\__\____
/:/\:::::\__\
\/_|:|~~|~
|:| |
|:| |
|:| |
\|__|
___
/\ \
\:\ \
/::\__\
__/:/\/__/
/\/:/ /
\::/__/
\:\__\
\/__/
___
/\__\
/::| |
/:|:| |
/:/|:| |__
/:/ |:| /\__\
\/__|:|/:/ /
|:/:/ /
|::/ /
/:/ /
\/__/
___
/\ \
/::\ \
/:/\:\ \
/:/ \:\ \
/:/__/_\:\__\
\:\ /\ \/__/
\:\ \:\__\
\:\/:/ /
\::/ /
\/__/
___
/\ \
/::\ \
/:/\:\ \
/::\~\:\ \
/:/\:\ \:\__\
\/__\:\/:/ /
\::/ /
/:/ /
/:/ /
\/__/
___
/\ \
/::\ \
/:/\ \ \
_\:\~\ \ \
/\ \:\ \ \__\
\:\ \:\ \/__/
\:\ \:\__\
\:\/:/ /
\::/ /
\/__/
___
/\ \
/::\ \
/:/\:\ \
/:/ \:\ \
/:/__/ \:\__\
\:\ \ \/__/
\:\ \
\:\ \
\:\__\
\/__/
___
/\ \
\:\ \
/::\__\
__/:/\/__/
/\/:/ /
\::/__/
\:\__\
\/__/
___
/\ \
\:\ \
/::\__\
__/:/\/__/
/\/:/ /
\::/__/
\:\__\
\/__/
___
/\ \
/::\ \
/:/\:\ \
/::\~\:\ \
/:/\:\ \:\__\
\/__\:\/:/ /
\::/ /
/:/ /
/:/ /
\/__/
___
/\ \
/::\ \
/:/\:\ \
/::\~\:\ \
/:/\:\ \:\__\
\/_|::\/:/ /
|:|::/ /
|:|\/__/
|:| |
\|__|
___
/\ \
\:\ \
\:\ \
/::\ \
/:/\:\__\
/:/ \/__/
/:/ /
\/__/
___
/\ \
\:\ \
/::\__\
__/:/\/__/
/\/:/ /
\::/__/
\:\__\
\/__/
___
/\ \
/::\ \
/:/\ \ \
_\:\~\ \ \
/\ \:\ \ \__\
\:\ \:\ \/__/
\:\ \:\__\
\:\/:/ /
\::/ /
\/__/
___
/\ \
/::\ \
/:/\:\ \
/::\~\:\ \
/:/\:\ \:\__\
\/__\:\/:/ /
\::/ /
/:/ /
/:/ /
\/__/
___
/\__\
/:/ /
/:/__/
/::\__\____
/:/\:::::\__\
\/_|:|~~|~
|:| |
|:| |
|:| |
\|__|
___
/\ \
/::\ \
/:/\:\ \
/::\~\:\ \
/:/\:\ \:\__\
\:\~\:\ \/__/
\:\ \:\__\
\:\ \/__/
\:\__\
\/__/
___
|\__\
|:| |
|:| |
|:|__|__
/::::\__\
/:/~~/~
/:/ /
\/__/
___
/\ \
/::\ \
/:/\:\ \
/::\~\:\ \
/:/\:\ \:\__\
\/__\:\/:/ /
\::/ /
\/__/
___
/\ \
/::\ \
/:/\:\ \
/::\~\:\ \
/:/\:\ \:\__\
\/__\:\/:/ /
\::/ /
/:/ /
/:/ /
\/__/
___
/\ \
/::\ \
/:/\:\ \
/::\~\:\ \
/:/\:\ \:\__\
\/_|::\/:/ /
|:|::/ /
|:|\/__/
|:| |
\|__|
___
/\ \
\:\ \
\:\ \
/::\ \
/:/\:\__\
/:/ \/__/
/:/ /
\/__/
___
/\ \
/::\ \
/:/\:\ \
/:/ \:\ \
/:/__/ \:\__\
\:\ \ /:/ /
\:\ /:/ /
\:\/:/ /
\::/ /
\/__/
___
/\ \
/::\ \
/:/\:\ \
/::\~\:\ \
/:/\:\ \:\__\
\/__\:\ \/__/
\:\__\
\/__/
___
/\ \
\:\ \
\:\ \
/::\ \
/:/\:\__\
/:/ \/__/
/:/ /
\/__/
___
/\__\
/:/ /
/:/__/
/::\ \ ___
/:/\:\ /\__\
\/__\:\/:/ /
\::/ /
/:/ /
/:/ /
\/__/
___
/\ \
/::\ \
/:/\:\ \
/::\~\:\ \
/:/\:\ \:\__\
\:\~\:\ \/__/
\:\ \:\__\
\:\ \/__/
\:\__\
\/__/
___
/\__\
/:/ /
/:/__/
/::\ \ ___
/:/\:\ /\__\
\/__\:\/:/ /
\::/ /
/:/ /
/:/ /
\/__/
___
/\ \
/::\ \
/:/\:\ \
/::\~\:\ \
/:/\:\ \:\__\
\/__\:\/:/ /
\::/ /
/:/ /
/:/ /
\/__/
___
/\ \
/::\ \
/:/\:\ \
/:/ \:\ \
/:/__/ \:\__\
\:\ \ \/__/
\:\ \
\:\ \
\:\__\
\/__/
___
/\__\
/:/ /
/:/__/
/::\__\____
/:/\:::::\__\
\/_|:|~~|~
|:| |
|:| |
|:| |
\|__|
___
/\ \
/::\ \
/:/\:\ \
/::\~\:\ \
/:/\:\ \:\__\
\:\~\:\ \/__/
\:\ \:\__\
\:\ \/__/
\:\__\
\/__/
___
/\ \
/::\ \
/:/\:\ \
/::\~\:\ \
/:/\:\ \:\__\
\/_|::\/:/ /
|:|::/ /
|:|\/__/
|:| |
\|__|
___
/\ \
/::\ \
/:/\ \ \
_\:\~\ \ \
/\ \:\ \ \__\
\:\ \:\ \/__/
\:\ \:\__\
\:\/:/ /
\::/ /
\/__/
___
/\ \
\:\ \
\:\ \
/::\ \
/:/\:\__\
/:/ \/__/
/:/ /
\/__/
___
/\ \
/::\ \
/:/\:\ \
/:/ \:\ \
/:/__/ \:\__\
\:\ \ /:/ /
\:\ /:/ /
\:\/:/ /
\::/ /
\/__/
___
/\ \
/::\ \
/:/\:\ \
/:/ \:\ \
/:/__/ \:\__\
\:\ \ /:/ /
\:\ /:/ /
\:\/:/ /
\::/ /
\/__/
___
/\__\
/:/ /
/:/ /
/:/ /
/:/__/
\:\ \
\:\ \
\:\ \
\:\__\
\/__/
___
/\__\
/:/ /
/:/__/
/::\__\____
/:/\:::::\__\
\/_|:|~~|~
|:| |
|:| |
|:| |
\|__|
___
/\ \
\:\ \
/::\__\
__/:/\/__/
/\/:/ /
\::/__/
\:\__\
\/__/
___
/\ \
\:\ \
\:\ \
/::\ \
/:/\:\__\
/:/ \/__/
/:/ /
\/__/
https://stackoverflow.com/questions/51564448
复制相似问题