telgif:反figlet


20

figlet是一种实用程序,可将纯文本转换为可在横幅等中使用的ascii-art表示形式。例如:

$ figlet "CODE GOLF"
  ____ ___  ____  _____    ____  ___  _     _____ 
 / ___/ _ \|  _ \| ____|  / ___|/ _ \| |   |  ___|
| |  | | | | | | |  _|   | |  _| | | | |   | |_   
| |__| |_| | |_| | |___  | |_| | |_| | |___|  _|  
 \____\___/|____/|_____|  \____|\___/|_____|_|    

$

编写一个程序或函数,将ascii-art输出从中获取figlet并返回到其原始纯文本。

安装可能对您有所帮助figlet。我有版本2.2.5,这是sudo apt-get install figlet在Ubuntu 14.04上获得的版本。这个Figlet实际上有几个“字体”。就此而言,我们将使用默认standard字体。

输入文本的宽度不得超过80个字符,并且将由仅包含大写字符和空格的纯文本生成。

您的程序不得figlet以任何方式调用或其源代码。

输入:

    _    ____   ____ ____  _____ _____ ____ _   _ ___ 
   / \  | __ ) / ___|  _ \| ____|  ___/ ___| | | |_ _|
  / _ \ |  _ \| |   | | | |  _| | |_ | |  _| |_| || | 
 / ___ \| |_) | |___| |_| | |___|  _|| |_| |  _  || | 
/_/   \_\____/ \____|____/|_____|_|   \____|_| |_|___|

     _ _  ___     __  __ _   _  ___  ____   ___  ____  
    | | |/ / |   |  \/  | \ | |/ _ \|  _ \ / _ \|  _ \ 
 _  | | ' /| |   | |\/| |  \| | | | | |_) | | | | |_) |
| |_| | . \| |___| |  | | |\  | |_| |  __/| |_| |  _ < 
 \___/|_|\_\_____|_|  |_|_| \_|\___/|_|    \__\_\_| \_\

 ____ _____ _   ___     ____        ____  ____   _______
/ ___|_   _| | | \ \   / /\ \      / /\ \/ /\ \ / /__  /
\___ \ | | | | | |\ \ / /  \ \ /\ / /  \  /  \ V /  / / 
 ___) || | | |_| | \ V /    \ V  V /   /  \   | |  / /_ 
|____/ |_|  \___/   \_/      \_/\_/   /_/\_\  |_| /____|

输出:

ABCDEFGHI
JKLMNOPQR
STUVWXYZ

输入:

 ____ _____  _    ____   __        ___    ____  ____  
/ ___|_   _|/ \  |  _ \  \ \      / / \  |  _ \/ ___| 
\___ \ | | / _ \ | |_) |  \ \ /\ / / _ \ | |_) \___ \ 
 ___) || |/ ___ \|  _ <    \ V  V / ___ \|  _ < ___) |
|____/ |_/_/   \_\_| \_\    \_/\_/_/   \_\_| \_\____/ 

输出:

STAR WARS

请注意,此问题的先前编辑允许输入包含大写和小写字母以及数字的输入。有人指出,这与某些相邻字符组合引起了一些歧义。很明显,我需要严格地找到一组没有这种冲突的角色,以便比赛实际上是可行的。刚开始,我使用这种外壳一线式尝试所有小写字母加数字:

for t in {0..9}{a..z} {a..z}{a..z} {a..z}{0..9} {0..9}{0..9} ; do figlet $t | tr '\n' ':'; echo ; done | sort | uniq -d | tr ':' '\n'

这样就产生了{ j1jl}和{ i1il}为模糊对。因此,使用所有大写字母(如@AlexA所建议),没有歧义对:

for t in {A-Z} ; do figlet $t | tr '\n' ':'; echo ; done | sort | uniq -d | tr ':' '\n'

5
我建议您使用“您不得调用figlet”子句,因为否则,最短的程序肯定会迭代所有可能的字符串,在它们上调用figlet,然后进行比较以得出相等性。
orlp

1
可以在以下git repo中找到figlet的源代码:(使用git://git.debian.org/git/collab-maint/figlet.git下载git clone)。
门把手

4
注意:这个挑战很难编码,更不用说高尔夫了。
林恩

4
1l不相同,但V1Vl
林恩

2
对于没有可运行figlet的系统的人们,有各种在线版本。搜索“在线Figlet”。例如,这个看起来很简单而且没有广告:network-science.de/ascii。确保选择“标准”字体。
Reto Koradi

Answers:


3

CJam,147个字节,略有损坏

qN/6/{z{:i:+165%91%' +}%"e 3 VG rr A>Q V) rP r4 />/ F> [> C >> 9$ j8 fQrQ rG rN rD VV $>$ ;$ 859 98 ff = BB"S/eeWf%$W%{~@@/\a*}/{`''#},'@f+'@/S*N}%

它通过CODE GOLFAZ,但不传递STAR WARS(其标识为SAR WARS)。我放弃了,但也许有人受到了启发。


1
如果您的解决方案不起作用,您可能不应该发布它
Alex
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.