Buat seni ASCII tanpa gangguan!

11

Diberikan rangkaian seni ASCII seperti itu (Ini bukan seni ASCII tetapi akan lakukan sebagai contoh):

abc
d e
fgh

Mengacaukan seolah-olah sedang ditampilkan di layar dengan satu karakter per baris, seperti:

a
b
c
d

e
f
g
h

Cetak hasilnya, tunggu satu detik, ± 0,5 detik sebelum membersihkan terminal dan cetak hal yang sama, tetapi dengan 2 karakter ditampilkan per baris, bukan 1. Pada dasarnya, lebar layar berubah dari 1 menjadi 2.

ab
c
d 
e
fg
h

Perhatikan spasi setelah d. Ulangi menunggu, lalu cetak dengan karakter tambahan per baris sampai teks yang dimasukkan keluar.

Jika Anda menekan ujung garis ketika mencoba untuk mencetak karakter, maka Anda memasukkan baris baru dan mencetak sisanya mengikuti aturan ini. Misalnya input:

abcdefg
ab

Akan mencetak yang berikut ketika panjang tampilan adalah 4.

abcd
efg
ab

Anda dapat menemukan efek ukuran terminal di sini: https://repl.it/GoeU/1 . Jalankan program, lalu seret benda yang memisahkan terminal dari editor teks bolak-balik.

Klarifikasi:

Setelah sebuah garis muncul persis seperti yang diinput, Anda dapat membiarkan baris itu sendiri untuk jumlah karakter yang lebih besar per baris.

abc
ab

harus dicetak

ab
c
ab

ketika panjang kalimat = 2.


Ini adalah , jadi jumlah byte yang paling sedikit menang!

Aturan:

  • Harus mencetak ke STDOUT sebagai satu-satunya keluaran.
  • Harus menghapus terminal, atau menciptakan ilusi membersihkan terminal dengan menambahkan 150 atau lebih baris kosong.
  • Dapat mengambil input melalui metode standar.
  • Celah default berlaku.
  • Mengejar hal-hal dengan teks BUKAN OKE.

Ide ini muncul ketika saya mengubah ukuran terminal dengan seni ASCII di atasnya. Itu terlihat menarik, jadi saya memutuskan untuk membuat tantangan darinya.


Kasus uji:

Karena akan terlalu sulit untuk menunjukkan setiap langkah untuk setiap kasus uji secara individual, saya akan meninjau setiap jawaban untuk memastikan itu valid. Pastikan jawabannya dapat menangani test case.

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

Pastebin ini .

                        __/\__
                        \    /
                  __/\__/    \__/\__
                  \                /
                  /_              _\
                    \            /
      __/\__      __/            \__      __/\__
      \    /      \                /      \    /
__/\__/    \__/\__/                \__/\__/    \__/\__
Kamerad SparklePony
sumber

Jawaban:

2

Bash (dengan GNU coreutils), 69 byte

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

Menyimpan input dalam file sementara x, kemudian menghitung garis terpanjang (GNU coreutils ' wcmemiliki -Lflag untuk ini) dan beralih untuk setiap lebar konsol dari 1 hingga panjang garis terpanjang. fold, sleepdan clearmelakukan sisa sihir.

Frxstrem
sumber
3

Python 3.6, 124 byte

Ulangi panjang string input seperti solusi 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 untuk hanya pergi ke lebar garis terpanjang jawaban Bash 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)

Menggunakan "re.split ((. {1, i + 1}))" "untuk memecah string menjadi kelompok karakter. Karena '.' tidak cocok dengan '\ n', grup tidak membungkus dari satu baris ke baris berikutnya. Jika regex menggunakan grup penangkap, maka re.split () mengembalikan daftar dengan grup yang cocok di indeks aneh. Ini diambil dengan [1 :: 2].

Menggunakan python 3.6 f-string untuk membuat pola ulang tergantung pada lebar grup i.

* Di depan re.split () menggunakan python 3.6 unpacking untuk mengubah daftar menjadi argumen untuk pernyataan cetak. Demikian pula, * '\ n' * 75, berubah menjadi argumen 75 '\ n' untuk pernyataan cetak. Dengan argumen kata kunci cetak sep = '\ n', hasilnya adalah mencetak sekitar 150 baris kosong untuk menghapus layar, diikuti oleh setiap kelompok karakter pada baris yang terpisah.

RootTwo
sumber
Cara ini lebih baik dan lebih pendek dari milik saya. Kerja bagus! (y)
officialaimm
2

Python 3.5 ( 238 233 229 225 223 222 byte)

- Bekerja dengan baik di terminal windows; tidak yakin tentang platform lain, karena perintah os.system ("cls") khusus sistem.

- String yang lewat harus ditandai oleh \ n untuk baris baru, misalnya: '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)
  • Disimpan 5 byte: menghapus spasi yang tidak diinginkan
  • Disimpan 4 byte: singkatan untuk len (s)
  • Disimpan 4 byte: Berkat sparklepony (singkatan untuk cetak)
  • disimpan 2 byte: Berkat sparklepony (singkatan untuk rentang sebagai r dan r (0, i) sebagai rentang (i))
  • disimpan 1 byte: Terima kasih untuk steve (0,5 sebagai hanya 0,5)
officialaimm
sumber
1
Keren! Saya pikir Anda bisa mencukur beberapa byte dengan menggunakan kode z=printdi bagian atas, dan kemudian mengubah semua contoh lainnya print()menjadi z().
Kamerad SparklePony
1
Saya pikir Anda dingin melakukan hal yang sama dengan yang Anda lakukan printdengan range, dan bukannya range(0,3)menggunakan range(3).
Kamerad SparklePony
1
sleep(0.5)dapat ditulis ulang hanya sebagaisleep(.5)
steve