telgif:逆フィグレット


20

figletは、バナーなどで使用するためにプレーンテキストをASCIIアート表現に変換するユーティリティです。例えば:

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

$

ascii-art出力を取得figletして元のプレーンテキストに戻すプログラムまたは関数を作成します。

インストールするのに役立つかもしれませんfigletsudo apt-get install figletUbuntu 14.04 を使用している場合に取得できるバージョン2.2.5があります。このフィグレットには、実際にはいくつかの「フォント」があります。このコンテキストの目的のために、デフォルトの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
figletのソースコードは、次のgitリポジトリにあります:(git://git.debian.org/git/collab-maint/figlet.gitダウンロードgit clone)。
ドアノブ

4
注:ゴルフはもちろん、この課題をコーディングするのは非常に困難です。
リン

4
1and lは同一ではありませんがV1、and Vlは同一です。
リン

2
figletを実行できるシステムを持っていない人のために、さまざまなオンラインバージョンがあります。「フィグレットオンライン」を検索します。たとえば、これはかなり単純で広告なしに見えます:network-science.de/ascii。「標準」フォントを選択してください。
レトコラディ

回答:


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
あなたの解決策ではない仕事をしている場合、あなたはおそらく...それを投稿べきではない
アレックスA.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.