Tạo một nghệ thuật ASCII không lộn xộn!


11

Đưa ra một chuỗi nghệ thuật ASCII như vậy (Đây không phải là nghệ thuật ASCII nhưng nó sẽ làm ví dụ):

abc
d e
fgh

Jumble nó như thể nó đang được hiển thị trên màn hình với một ký tự trên mỗi dòng, như vậy:

a
b
c
d

e
f
g
h

In kết quả, đợi một giây, ± 0,5 giây trước khi xóa thiết bị đầu cuối và in cùng một thứ, nhưng với 2 ký tự được hiển thị trên mỗi dòng thay vì 1. Về cơ bản, chiều rộng của màn hình chuyển từ 1 sang 2.

ab
c
d 
e
fg
h

Lưu ý không gian sau d. Lặp lại chờ đợi, sau đó in với một ký tự bổ sung trên mỗi dòng cho đến khi văn bản được nhập vào được xuất ra.

Nếu bạn nhấn vào cuối dòng khi cố in các ký tự, thì bạn chèn một dòng mới và in phần còn lại của chúng theo quy tắc này. Ví dụ: đầu vào:

abcdefg
ab

Sẽ in như sau khi chiều dài màn hình là 4.

abcd
efg
ab

Bạn có thể tìm thấy hiệu ứng thay đổi kích thước của thiết bị đầu cuối tại đây: https://repl.it/GoeU/1 . Chạy chương trình, sau đó kéo thứ tách thiết bị đầu cuối ra khỏi trình soạn thảo văn bản qua lại.

Làm rõ:

Khi một dòng xuất hiện chính xác như thế nào nó được nhập vào, bạn có thể để dòng đó một mình cho số lượng ký tự lớn hơn trong tương lai trên mỗi dòng.

abc
ab

nên in

ab
c
ab

khi độ dài câu = 2.


Đây là , nên số byte ít nhất sẽ thắng!

Quy tắc:

  • Phải in ra STDOUT làm đầu ra duy nhất.
  • Phải xóa thiết bị đầu cuối hoặc tạo ảo giác xóa thiết bị đầu cuối bằng cách thêm 150 dòng trống.
  • Có thể lấy đầu vào thông qua các phương pháp tiêu chuẩn.
  • Lỗ hổng mặc định áp dụng.
  • Trailing Stuff với văn bản là KHÔNG OKAY.

Ý tưởng này đến với tôi khi tôi thay đổi kích thước thiết bị đầu cuối với nghệ thuật ASCII trên đó. Trông nó thật thú vị, vì vậy tôi quyết định thực hiện một thử thách từ nó.


Các trường hợp thử nghiệm:

Vì sẽ là quá nhiều công việc để hiển thị từng bước cho từng trường hợp thử nghiệm riêng lẻ, tôi sẽ xem xét từng câu trả lời để đảm bảo rằng nó hợp lệ. Hãy chắc chắn rằng câu trả lời có thể xử lý các trường hợp thử nghiệm.

 ______   ______     __     __   __     ______      __    __     ______    
/\  == \ /\  == \   /\ \   /\ "-.\ \   /\__  _\    /\ "-./  \   /\  ___\   
\ \  _-/ \ \  __<   \ \ \  \ \ \-.  \  \/_/\ \/    \ \ \-./\ \  \ \  __\   
 \ \_\    \ \_\ \_\  \ \_\  \ \_\\"\_\    \ \_\     \ \_\ \ \_\  \ \_____\ 
  \/_/     \/_/ /_/   \/_/   \/_/ \/_/     \/_/      \/_/  \/_/   \/_____/ 

Món pastebin này .

                        __/\__
                        \    /
                  __/\__/    \__/\__
                  \                /
                  /_              _\
                    \            /
      __/\__      __/            \__      __/\__
      \    /      \                /      \    /
__/\__/    \__/\__/                \__/\__/    \__/\__

Câu trả lời:


2

Bash (với lõi GNU), 69 byte

n=`tee x|wc -L`;for i in `seq 1 $n`;do fold -w$i x;sleep 1;clear;done

Lưu đầu vào trong tệp tạm thời x, sau đó đếm dòng dài nhất (GNU coreutils ' wc-Lcờ cho điều này) và lặp lại cho mỗi chiều rộng của bàn điều khiển từ 1 đến chiều dài dòng dài nhất. fold, sleepclearhiện phần còn lại của sự kỳ diệu.


3

Python 3.6, 124 byte

Vòng lặp trên chiều dài của chuỗi đầu vào như giải pháp của Officialaimm

import re,time
def d(s):
 for i in range(len(s)):print(*'\n'*75,*re.split(f'(.{{1,{i+1}}})',s)[1::2],sep='\n');time.sleep(1)

143 byte chỉ đi đến chiều rộng của dòng dài nhất câu trả lời Bash của al Frxstrem

import re,time
def d(s):
 for i in range(max(map(len,s.split()))):print(*'\n'*75,*re.split(f'(.{{1,{i+1}}})', s)[1::2],sep='\n');time.sleep(.5)

Sử dụng "re.split ((. {1, i + 1}))" để chia chuỗi thành các nhóm ký tự. Bởi vì '.' không khớp với '\ n', các nhóm không bao quanh từ dòng này sang dòng tiếp theo. Nếu regex sử dụng một nhóm bắt giữ, thì re.split () trả về một danh sách với các nhóm phù hợp ở các chỉ mục lẻ. Chúng được lấy bằng [1 :: 2].

Sử dụng chuỗi python 3.6 f để tạo mẫu re phụ thuộc vào độ rộng nhóm i.

Dấu * phía trước re.split () sử dụng giải nén python 3.6 để biến danh sách thành đối số cho câu lệnh in. Tương tự, * '\ n' * 75, biến thành các đối số 75 '\ n' thành câu lệnh in. Với đối số từ khóa in sep = '\ n', kết quả là in khoảng 150 dòng trống để xóa màn hình, theo sau là từng nhóm ký tự trên một dòng riêng biệt.


Cái này tốt hơn và ngắn hơn của tôi. Bạn đã làm rất tốt! (y)
chính thức tuyên bố

2

Python 3.5 ( 238 233 229 225 223 222 byte)

- Hoạt động tốt trong thiết bị đầu cuối windows; không chắc chắn về các nền tảng khác, vì lệnh os.system ("cls") dành riêng cho hệ thống.

- Chuỗi được truyền phải được đánh dấu bởi \ n cho dòng mới, ví dụ: 'abc \ nd efgh \ n'

import os,time 
def b(s):
 p=len(s);z=print;r=range
 for i in r(1,p):
  os.system("cls");l=0
  for j in r(p):
   z(s[j],end="");l+=1
   if(s[j]=='\n'):l=0
   if(j+1<p and l==i and s[j+1]!='\n'):z();l=0
  z();time.sleep(.5)
  • Đã lưu 5 byte: loại bỏ các khoảng trắng không mong muốn
  • Đã lưu 4 byte: tốc ký cho len (s)
  • Đã lưu 4 byte: Nhờ sparklepony (tốc ký để in)
  • đã lưu 2 byte: Nhờ sparklepony (tốc ký cho phạm vi là r và r (0, i) là phạm vi (i))
  • đã lưu 1 byte: Nhờ steve (0,5 như chỉ 0,5)

1
Mát mẻ! Tôi nghĩ rằng bạn có thể tắt một số byte bằng cách sử dụng mã z=printở trên cùng, và sau đó thay đổi tất cả các trường hợp khác print()thành z().
Đồng chí SparklePony

1
Tôi nghĩ rằng bạn lạnh lùng làm điều tương tự như bạn đã làm printvới range, và thay vì range(0,3)sử dụng range(3).
Đồng chí SparklePony

1
sleep(0.5)có thể được viết lại chỉ đơn thuầnsleep(.5)
steve
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.