ASCIIアートを簡単に作成してください!


11

このようなASCIIアートの文字列が与えられた場合(これはASCIIアートではありませんが、例で行います):

abc
d e
fgh

次のように、1行に1文字ずつ画面上に表示されているかのように混ぜます。

a
b
c
d

e
f
g
h

結果を印刷し、1秒、±0.5秒待ってから端末をクリアし、同じことを印刷しますが、1行ではなく2文字を表示します。基本的に、ディスプレイの幅は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アートのある端末のサイズを変更するときに思いつきました。面白そうだったので、そこから挑戦することにしました。


テストケース:

各テストケースの各ステップを個別に表示するのは非常に手間がかかるため、各回答を確認して有効であることを確認します。答えがテストケースを処理できることを確認してください。

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

このペーストビン

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

回答:


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)

FrxstremのBashの最も長い行の幅にのみ移動するには143バイト

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

Python 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(s)の省略形
  • 4バイト保存:sparkleponyのおかげ(印刷の省略形)
  • 2バイトの節約:sparkleponyのおかげ(rとしての範囲の省略形とrange(i)としてのr(0、i))
  • 1バイトの節約:スティーブのおかげで(0.5はちょうど.5)

1
涼しい!z=print上部のコードを使用し、print()toの他のすべてのインスタンスを変更することで、いくつかのバイトを削ることができると思いますz()
同志SparklePony

1
私はあなたがやったと同じことやるコールド考えるprintrange、代わりのrange(0,3)使用をrange(3)
同志SparklePony

1
sleep(0.5)単にsleep(.5)
スティーブ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.