telgif: figlet ผกผัน


20

figletเป็นยูทิลิตี้ที่แปลงข้อความธรรมดาเป็นตัวแทน ASCII-art สำหรับใช้ในแบนเนอร์และสิ่งที่คล้ายกัน ตัวอย่างเช่น:

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

$

เขียนโปรแกรมหรือฟังก์ชั่นที่ใช้เอาท์พุท ASCII จาก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'

สิ่งนี้ให้ผล { j1, jl} และ { i1, il} เป็นคู่ที่คลุมเครือ ดังนั้นแทนที่จะใช้ตัวอักษรตัวพิมพ์ใหญ่ทั้งหมด (ตามที่ @AlexA แนะนำ) ไม่มีคู่ที่ไม่ชัดเจน:

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

5
ฉันขอแนะนำประโยค 'คุณอาจไม่เรียก figlet' เพราะมิฉะนั้นโปรแกรมที่สั้นที่สุดจะวนซ้ำกับสตริงที่เป็นไปได้ทั้งหมดเรียก figlet จากพวกเขาแล้วเปรียบเทียบความเท่าเทียมกัน
orlp

1
ซอร์สโค้ดของ figlet สามารถพบได้ใน repo git ต่อไปนี้: git://git.debian.org/git/collab-maint/figlet.git(ดาวน์โหลดด้วยgit clone)
Doorknob

4
หมายเหตุ: ความท้าทายนี้ยากมากในการเขียนโค้ด
ลินน์

4
1และlไม่เหมือนกัน แต่V1และVlเป็น
ลินน์

2
สำหรับผู้ที่ไม่มีระบบที่สามารถเรียกใช้ figlet มีรุ่นออนไลน์ต่างๆ ค้นหา "figlet online" ตัวอย่างเช่นนี้มีลักษณะที่ค่อนข้างตรงไปตรงมาและโฆษณาฟรี: network-science.de/ascii ตรวจสอบให้แน่ใจว่าคุณเลือกแบบอักษร "มาตรฐาน"
Reto Koradi

คำตอบ:


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 GOLFและAZแต่ไม่ใช่STAR WARS (ซึ่งอ่านเป็นSAR WARS) ฉันยอมแพ้ แต่บางทีบางคนก็ได้รับแรงบันดาลใจ


1
หากวิธีการแก้ปัญหาของคุณไม่ทำงานคุณอาจไม่ควรโพสต์มัน ...
อเล็กซ์ A.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.