创建ASCII艺术作品!


11

给定类似这样的ASCII艺术字串(这不是ASCII艺术字,但将在示例中起作用):

abc
d e
fgh

像将其显示在屏幕上一样,每行显示一个字符,将其弄乱,就像这样:

a
b
c
d

e
f
g
h

打印结果,等待一秒钟,±0.5秒,然后再清除端子并打印相同的内容,但是每行显示2个字符而不是1。基本上,显示宽度从1变为2。

ab
c
d 
e
fg
h

注意d。后面的空格。重复等待,然后每行添加一个额外的字符,直到输出输入的文本。

如果在尝试打印字符时碰到了行尾,则插入一个换行符并按照此规则打印其余字符。例如输入:

abcdefg
ab

当显示长度为4时将打印以下内容。

abcd
efg
ab

您可以在此处找到终端调整大小的效果:https : //repl.it/GoeU/1。运行该程序,然后前后拖动将终端与文本编辑器分开的东西。

澄清:

一旦一行完全按照输入方式显示,您就可以保留该行,以便以后每行增加字符数。

abc
ab

应该打印

ab
c
ab

当句子长度= 2时


这是,因此最少的字节数会获胜!

规则:

  • 必须打印到STDOUT作为唯一输出。
  • 必须清除终端,或者通过添加150条左右的空行来创建清除终端的错觉。
  • 可以通过标准方法进行输入。
  • 默认漏洞适用。
  • 尾随带有文字的东西是不好的。

当我调整带有ASCII艺术的终端的大小时,我想到了这个主意。它看起来很有趣,所以我决定提出一个挑战。


测试用例:

由于要单独显示每个测试用例的每个步骤会花费很多工作,因此我将复查每个答案以确保它是有效的。确保答案可以处理测试用例。

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

这糊糊

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

Answers:


2

Bash(带有GNU coreutils),69字节

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

将输入保存在临时文件中x,然后计算最长的行(GNU coreutils wc具有-L此标志)并针对每个控制台宽度从1到最长的行长度进行迭代。foldsleep并且clear确实神奇的休息。


3

Python 3.6,124个字节

在输入字符串的长度上循环,如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个字节只能到达最长行的宽度al Frxstrem的Bash答案

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)

使用“ re.split((。{1,i + 1}))”将字符串分成字符组。因为“。” 与“ \ n”不匹配,则各组不会从一行移到下一行。如果正则表达式使用捕获组,则re.split()返回一个列表,其中匹配的组位于奇数索引处。这些通过[1 :: 2]检索。

使用python 3.6 f-string使re模式取决于组宽度i。

re.split()前面的*使用python 3.6解压缩将列表转换为print语句的参数。同样,*'\ n'* 75将print语句转换为75个'\ n'参数。使用print关键字参数sep ='\ n'时,结果是打印约150个空白行以清除屏幕,然后在每行上分别显示每组字符。


这比我的方法更好,更短。做得好!(y)
Officialaimm

2

蟒3.5(238 233 229 225个 223个 222字节)

-在Windows终端中工作正常;由于系统特定的os.system(“ cls”)命令,因此不确定其他平台。

-传递的字符串应用\ n标记换行符,例如:'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)
  • 保存5个字节:删除了不需要的空格
  • 已保存4个字节:len的简写
  • 保存了4个字节:感谢sparklepony(打印的缩写)
  • 节省2个字节:多亏了sparklepony(将范围缩写为r,将r(0,i)表示为range(i))
  • 保存了1个字节:感谢史蒂夫(0.5等于0.5)

1
凉!我认为您可以通过使用z=print顶部的代码来删除一些字节,然后将所有其他实例更改print()z()
“ SparklePony同志” 17年

1
我想你冷做你做同样的事情printrange和,而不是range(0,3)使用range(3)
“ SparklePony同志” 17年

1
sleep(0.5)可以被改写为仅仅是sleep(.5)
steve
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.