正弦波を印刷(垂直)


42

端末で垂直にスクロールする連続正弦波を印刷します。プログラムは終了せず、ウェーブを継続的にスクロールする必要があります(何らかの理由で中断されるまでは例外です)。オーバーフローは問題ではないと想定することができます(つまり、カウンターをインクリメントする無限ループ、または無限再帰を使用できます)。

波は次のプロパティを満たしている必要があります。

  • 振幅= 20文字(ピーク振幅)
  • 期間= 60〜65行(含む)
  • 出力は、スペース、改行、 |
  • 出力の各行の後、50msの間一時停止します

サンプル出力:

                    |
                      |
                        |
                          |
                            |
                              |
                                |
                                 |
                                   |
                                    |
                                     |
                                      |
                                       |
                                        |
                                        |
                                        |
                                        |
                                        |
                                        |
                                       |
                                       |
                                      |
                                     |
                                   |
                                  |
                                |
                               |
                             |
                           |
                         |
                       |
                     |
                   |
                 |
               |
             |
            |
          |
        |
       |
     |
    |
   |
  |
 |
 |
 |
 |
 |
 |
 |
  |
   |
    |
     |
      |
        |
         |
           |
             |
               |
                 |
                   |
                     |
                       |
                         |
                           |
                             |
                              |
                                |
                                  |
                                   |
                                    |
                                      |
                                      |
                                       |
                                        |
                                        |
                                        |
                                        |
                                        |
                                        |
                                       |
                                       |
                                      |
                                    |
                                   |
                                  |
                                |
                               |
                             |
                           |
                         |
                       |
                     |
                   |
                 |
               |
             |
           |
          |
        |
       |
     |
    |
   |
  |
 |
 |
 |
 |
 |
 |
 |
  |
   |
    |
     |
       |
        |
          |
            |
             |
               |
                 |
                   |

上記の出力は、特に断らない限り(SIGINTやSIGKILLなど)、端末ウィンドウを閉じたり、マシンの電源を切ったり、太陽が地球を飲み込んだりしない限り、永遠に続くはずです。

最短のコードが優先されます。

注意。Display Scrolling Wavesで同様の問題を認識していますが、これはまったく同じではありません。私の問題では、ウェーブは「その場で」スクロールされるべきではなく、単に端末に出力されるだけです。また、これはascii-artの問題であるため、Mathematicaを使用してプロットしないでください。


1
ピーク振幅、ピークツーピーク振幅、または平方根振幅?
DavidC

ピーク振幅。
ace_HongKongIndependence 14年

1
スペースを入れずに| sだけで波を描いても大丈夫ですか?
ゼラチン14年

1
まだすべての回答は無効です。また、SIGINTだけでなくSIGKILLも停止します。
マックスリード

1
@Max Riedは問題ありません。「中断しない限り、永遠に続けるべきです」に変更します。
ace_HongKongIndependence 14

回答:


12

APL(35)

(はい、35バイトに収まります。1バイトのAPLエンコードです

{∇⍵+⌈⎕DL.05⊣⎕←'|'↑⍨-21+⌈20×1○⍵×.1}1

説明:

  • {... }1:最初に1を指定して関数を呼び出します
  • 1○⍵×.1:政府の仕事に十分近いsin(⍵×π÷30)。(1○sin)。
  • -21+⌈20:範囲に正規化して1..40否定する
  • '|'↑⍨N文字列から最後の文字を取得します'|'|末尾にが付いたスペースの文字列になります
  • ⎕←:ディスプレイ
  • ⌈⎕DL.05:50ミリ秒待ってから戻り1ます。(⎕DL実際に待機した時間を返します。これはに近くなり0.05、その値を切り上げます1)。
  • ∇⍵+:その番号(1)を追加して、関数を再度実行します。

2
くそー...私は三角関数と時間遅延があなたたちを
追い払う

2
ここに33文字1つ:{⎕←'|'↑⍨-⌈20×1+1○⍵⋄∇.1+⍵⊣⎕DL.05}0
トビア14年

3
@ace LOL。APLをチェックしてください。これは目新しい言語ではありません。これは非常に古く、何十年もの間大規模システムで使用されてきました。それは他のものと比較して非常にユニークです。私見のシンボルは、ASCIIのみの派生物(J)
トビア14年

22

C、 74 73 70 69 67文字

@ugorenなどの多くの優れたアイデアを備えた67文字のソリューション:

i;main(j){main(poll(printf("%*c|\n",j=21+sin(i++*.1)*20,0),0,50));}

再帰の代わりにwhileループを使用した69文字のソリューション:

i;main(j){while(printf("%*c|\n",j=21+sin(i++*.1)*20,0))poll(0,0,50);}

perlの領域に近づいています。:)


1
これは、@ ace自身のCの回答に触発されました。
treamur

2
5E4代わりに使用できると思います50000
musiphil 14年

2
/ 10の代わりに* .1を使用できると思います。
モアラ14年

1
@ musiphil、5E4の使用についても考えましたが、動作しないことがわかりました。コンパイラのusleep()プロトタイプを表示しないと、5E4を明示的にキャストする必要があります。
treamur

2
次のように、jへの割り当てをprintfに移動することにより、さらに2つの文字を切り取ることができますprintf("%*s\n",j=21+sin(i++*.1)*20,"|")。結果の型はまだintであるため、有効なフィールド幅引数です。
アート14年

12

Mathematica 121104 80 67 64 64

n=1;While[0<1,Spacer[70 Sin[n Pi/32]+70]~Print~"|";Pause@.05; n++]

正弦


質問は、それをプロットするために数学を使用しないように言っています。これはどういうわけか違うの?
マラキ14年

13
@Malachiはい。これは、他の答えと同様に、数学を使用して計算します。数学を使ってプロットすることは、数学にプロットするx=20*sin(pi*y/30)+20か、それに類することを伝えることです。
ジャスティン14年

わかりました、ありがとうございます
マラキ14年

1
そして、ここに58文字のバージョンがあるDo[Spacer[70*Sin[n*Pi/32]+70]~Print~"|";Pause@.05,{n,18!}]
Ajasja

1
私はMathematicaユーザーではありませんが、1文字減らす1 == 1よう0 < 1に変更できると思います。
CCP 14年

11

Perl、48(68)

GNUスリープバージョン:48

print$"x(25+20*sin).'|
';$_+=.1;`sleep .05`;do$0

クロスプラットフォーム:68

use Time::HiRes"sleep";print$"x(25+20*sin).'|
';$_+=.1;sleep.05;do$0

シェルスリープ機能を使用してTime :: HiResモジュールの使用を削除しました。Rubyの例による増分の短縮。Primoの作業からヒントを見るために$ "と$ 0を使用して短縮ヒントPrimoをありがとう。


これをファイルとして保存して実行test.plしましたperl ./test.plが、待機時間が仕様と一致しません。また、波の振幅が小さすぎます。(この振幅は、ピークと平衡位置の間の長さを指します。)
ace_HongKongIndependence 14年

増分を.105から.1に変更すると、56文字でルビーに勝つと思います!
ケビンコリアー14年

@primo -私のシェル睡眠は... 1秒より短い時間をするのか
KevinColyer

man sleepunsigned int sleep(unsigned int seconds);。エラーにはなりませんが、実際のスリープ間隔はゼロです。を短くするためのいくつかの提案:に変更$dして$_からを使用し、リテラルの改行(25+20*sin)を変更し\nます。
プリモ14年

2
@primo man 1 sleepGNU / Linuxのbashシェルでは、ということを教えてくれるUnlike most implementations that require NUMBER be an integer, here NUMBER may be an arbitrary floating point number.
ace_HongKongIndependence

11

Perl-64(または60)バイト

以下は、Windows固有のシェルコマンドを使用します。

`sleep/m50`,print$"x(20.5-$_*(32-abs)/12.8),'|
'for-32..31;do$0

以下はGNU / Linux固有のシェルコマンドを使用します。

`sleep .05`,print$"x(20.5-$_*(32-abs)/12.8),'|
'for-32..31;do$0

両方とも64バイト。

  • 期間は64です。
  • 最大振幅は正確に20です。
  • 曲線は完全に対称です。
  • すべての期間は同じです。
                    |
                      |
                         |
                           |
                             |
                               |
                                |
                                  |
                                   |
                                    |
                                     |
                                      |
                                       |
                                       |
                                        |
                                        |
                                        |
                                        |
                                        |
                                       |
                                       |
                                      |
                                     |
                                    |
                                   |
                                  |
                                |
                               |
                             |
                           |
                         |
                      |
                    |
                  |
               |
             |
           |
         |
        |
      |
     |
    |
   |
  |
 |
 |
|
|
|
|
|
 |
 |
  |
   |
    |
     |
      |
        |
         |
           |
             |
               |
                  |
                    |
                      |
                         |
                           |
                             |
                               |
                                |
                                  |
                                   |
                                    |
                                     |
                                      |
                                       |
                                       |
                                        |
                                        |
                                        |
                                        |
                                        |
                                       |
                                       |
                                      |
                                     |
                                    |
                                   |
                                  |
                                |
                               |
                             |
                           |
                         |
                      |
                    |
                  |
               |
             |
           |
         |
        |
      |
     |
    |
   |
  |
 |
 |
|
|
|
|
|
 |
 |
  |
   |
    |
     |
      |
        |
         |
           |
             |
               |
                  |
                    |

これは正確には正弦波ではなく、2次補間であることに注意してください。実際の罪に対してプロット:

必要な粒度で、これらは視覚的に区別できません。

美観がそれほど重要でない場合は、周期長62、最大振幅〜20.02、わずかな非対称性を備えた60バイトの代替を提供します

`sleep/m50`,print$"x(20-$_*(31-abs)/12),'|
'for-31..30;do$0

これは正弦波ではありません。単に放物線です(コードを正しく読んだ場合)。(これを正弦波で表すことができれば、その機能を見てみたいです)。
ジャスティン14年

サインは数式です。数式を複製すると、正弦波のままです。そして、これはおそらく何らかの形でSineのバリアントです。
マラキ14

8

ルビー56

i=0
loop{puts" "*(20*Math.sin(i+=0.1)+20)+?|;sleep 0.05}

putをpに置き換えることはできますか?
スライスパン14年

1
@Slicedpanこれは何かを描くのが難しいからです。p各行の周りに二重引用符を追加し、「描画」を変更します。
ダニエロ14年

7

Befunge 98 - 103 100

:1g:02p' \k:02gk,'|,a,$ff*:*8*kz1+:'<\`*
468:<=?ABDEFGGGHGGGFEDBA?=<:86420.,+)'&$#"!!! !!!"#$&')+,.02

三角関数の機能を持たない言語でこれを行うプログラムを歓迎します。実際には最初のプログラム。2行目は単なるデータです。空白文字に追加された、sinのASCII値に対応する文字。

編集:スペースを差し引かないことで3文字を節約しました。正弦波は32ユニット右に変換されます(これは有効です)。

Befungeには、スリープコマンドなどもありません。指紋を見つけるのはいいことですが、私は指紋を見つけることができなかったので、()をff*:*8*押して何回もnoopを実行します(まあ、何回も+ 1)。pyfungeを使用した Windowsコマンドラインでは、これは約50ミリ秒であることが判明したため、私は良いと言います。注:誰かがこれの良い指紋を知っているなら、私に知らせてください。8*225**2405000kz

コードの最後の部分は、(データ行の)カウンターがデータを過ぎているかどうかを単純にチェックし、そうであれば、カウンターは0にリセットされます。

私が使用し、これをデータを生成します。


テイラーシリーズ

このバージョンは105文字ですが、私はそれを含める必要がありました:

:::f`!4*jf2*-:::*:*9*\:*aa*:*:01p*-01g9*/a2*+\$\f`!4*j01-*b2*+:01p' \k:01gk,$'|,a,ff*:*8*kz1+:f3*`!3*j$e-

私は自分のプログラムを短くしようとしていたので、コサインテイラー級数を調べることにしました(サインの計算は困難です)。ここで要求された周期に一致xするpi * x / 30ように変更し20、振幅を一致させるために乗算しました。いくつかの単純化を行いました(関数の値を大幅に変更することなく、キャンセルの調整係数)。それから実装しました。悲しいことに、それはより短い実装ではありません。

:f`!4*jf2*-

テイラーシリーズの値が不正確になっている(約x = 15)かどうかを確認します。もしそうであれば、のx - 30代わりにのテイラー級数を計算しxます。

:::*:*9*\:*aa*:*:01p*-01g9*/a2*+

テイラーシリーズの私の実装であるx = 0とき、x値がスタックにあります。

\$\f`!4*j01-* 

テイラーシリーズの調整が必要な場合、テイラーシリーズの値を無効にします。

b2*+

コサイン波を正にします。そうしないと、印刷が機能しません。

:01p' \k:01gk,$'|,a,

波を印刷します

ff*:*8*kz1+

間に合わせに50ミリ秒待機してから、増分 x

:f3*`!3*j$e-

x45より大きい場合は、-14に変更します(再度、テイラーシリーズの誤差調整)。


これはまさに私が楽しみにしている種類の答えです。ゴルフを
楽しんでください

1
そこ!コード長を-5文字減らすことに成功しました!そして、まだ改善の余地があります!
ジャスティン14年

@Quincunx私のperlソリューションも組み込みのトリガー関数を使用しません;)
primo 14年

6

Python、 108939089、88

import math,time
a=0
while 1:print" "*int(20+20*math.sin(a))+"|";time.sleep(.05);a+=.1

無限スクロールが可能になりました:)

編集:OK、90。十分ですか?

編集:編集:いいえ、89。

Edit:Edit:Edit:88 boothbyに感謝します


質問を明確にしていない場合は申し訳ありません。プログラムは終了せず、ウェーブを継続的にスクロールする必要があります(SIGINTまでを除く)
ace_HongKongIndependence 14年

1
a=0.- > a=0あなたは88になります
boothby

5

PHP、59文字

<?for(;;usleep(5e4))echo str_pad('',22+20*sin($a+=.1)).~ƒõ;

1
echo ...;代わりにを使用すると、バイトを節約できますfwrite(STDOUT,...);
プリモ14年

とにかくコマンドラインから呼び出す場合、それは理にかなっています。10文字が保存されました-primoに感謝します。
アレックスバレット14年

1
58:<?for(;;)echo~str_pad(ƒõ,22+20*sin($a+=.1),ß,usleep(5e4));
primo 14年

非常に素晴らしい。これらの変更については回答を編集しません。自分で投稿してください。
アレックスバレット14年

1
@aceは、ansiエンコーディングで保存する必要があります。ideoneはすべてを自動的にutf-8に変換しますが、これは壊れます。~ƒõはの省略形です"|\n"
primo 14年


3

Javascript 88 76 78文字

setInterval('console.log(Array(Math.sin(i++/10)*20+21|0).join(" ")+"|")',i=50)

Kendall Freyのコードに基づいています。


決して初期化しないiので、波の代わりに直線を出力します。
gilly3

私の間違い...おそらく、コンソールで既にKendallのスクリプトを実行していたので、うまくいきました。
joeytje50 14年

3

C-86 + 3文字

編集に感謝します

i;main(j){for(;j++<21+sin(i*.1)*20;)putchar(32);puts("|");usleep(50000);i++;main(1);}

i; main(j){for(j = 0; j ++ <20 + sin(i / 10。)* 20;)putchar(32); puts( "|"); usleep(50000); i ++; main() ;}

float i; main(j){for(j = 0; j ++ <20 + sin(i)* 20;)putchar(32); puts( "|"); usleep(50000); i + =。1; main( );}

-lmフラグでコンパイルされたので、3文字を追加する必要があると思います


1
sin()の呼び出し内でiをintにして、それを10.0(または9.9のcharを保存するために)で割っただけで機能しますか?i;main(j){for(j=0;j++<20+sin(i/10.0)*20;)putchar(32);puts("|");usleep(50000);i++;main();}
塩奈14年

あなたは、forループを交換するのprintf()を使って、76文字くらいまでの大きさをもたらすことができる:printf("%*s\n",(int)(21+sin(i++/10.)*20),"|")
treamur

1
うーん...特にこの質問が自分の質問である場合、このアイデアを回答に使用すると本当に罪悪感を覚えるでしょう...回答を自分で投稿することを検討してください。
ace_HongKongIndependence 14年

わかった。ありがとう。:)
トレマー14年

1
以下を削除すれば、さらに2文字を削ることができますj=0i;main(j){for(;j++<21+sin(i/10.)*20;)putchar(32);puts("|");usleep(50000);i++;main(1);}。これは、プログラムが引数なしで呼び出されるという前提に依存しています。
ジョシュ14年

3

Ti-Basic、33バイト

While 1:Output(8,int(7sin(X)+8),"!":Disp "":π/30+X→X:End

次の注意事項があります

  1. 16x8の画面制限により、この正弦波の振幅は7のみです(60の周期は維持されます)

  2. |文字にアクセスする簡単な方法がないため、!代わりに使用されます

  3. 正確なシステムタイマーがないため、遅延は実装されていません。ただし、実行速度はほぼ正しいように見えます。


1
ねえ、TI-BASICは1/2バイトトークンでカウントされるので、これは実際には33バイト(「56文字」ではない)なので、実際にチャレンジに勝ったはずです。
MIライト

振幅の事を除いて
...-リトシアスト

ええ、はい、しかしバイト単位で行っても大丈夫です。
MIライト

2

JavaScript-88

setInterval(function(){console.log(Array(Math.sin(i++/10)*20+21|0).join(" ")+"|")},i=50)

誰かが実際に賢い何かを思いつくことができると確信しています。


2

J- 1035857、54

IRCの素晴らしい人たちに感謝します

(0.1&+[6!:3@]&0.05[2:1!:2~' |'#~1,~[:<.20*1+1&o.)^:_]0

右から左への言葉で:0から無限に開始します:sin、1を加算、20で乗算、floor、1を追加(2要素の配列になります)、2バイトをコピー '|' それに応じて、印刷して0.05秒待ってから0.1を追加します

無限ループの代わりに再帰を使用できます。2文字を節約できますが、いくつかの反復後にスタックエラーが発生します。

($:+&0.1[6!:3@]&0.05[2:1!:2~' |'#~1,~[:<.20*1+1&o.)0  

$:再帰呼び出しはどこにありますか。


J構文に慣れていない人(私のように)もあなたの答えを理解できるように、少し説明を加えていただけますか?
ace_HongKongIndependence 14年

電車の構造をいじって、これを50文字に短縮することができます(+2*(%20)6!:3@[2:1!:2~' |'#~1,~[:<.20*1+1&o.)^:_]0。再帰バージョンは、今回は1文字しか保存し$:@(+2*(%20)6!:3@[2:1!:2~' |'#~1,~[:<.20*1+1&o.)0ませんが、ボトムアウトするまでは長持ちするようです。
algorithmshark 14

2

ハスケル-75

main=putStr$concat["|\n"++take(floor$20+20*sin x)(repeat ' ')|x<-[0,0.1..]]

残念ながら、文字数を2倍にしないとプログラムを50ミリ秒一時停止させることができなかったので、コンソールをあふれさせますが、正弦波を生成します。


一時停止を伴う完全なコードを次に示します(改行を含む138文字)。

import GHC.Conc
import Control.Monad
main=mapM_(\a->putStr a>>threadDelay 50000)(["|\n"++take(floor$20+20*sin x)(repeat ' ')|x<-[0,0.1..]])

2
一時停止は要件の1つでした。一時停止してコードを投稿することもできますか?
ジャスティン14年

さて、投稿しました。Haskellを使用して、インポートせずにコードを一時停止させてください。
ザック14年

振幅とは、ピーク振幅、つまり現在のプログラムの振幅の2倍を意味します。20+20*sin x資格を得るために代わりに変更することもできます。
ace_HongKongIndependence 14年

はい。私は質問のその部分を誤って解釈したと思います。
ザック14年

2

Perl 6:46文字

sleep .05*say ' 'x(25+20*.sin),'|'for 0,.1...*

を使用して無限の遅延範囲を作成し0,0.1 ... *、ループします。乗算で1として数えるsay戻り値Bool::Trueを返します。これにより、1つのステートメントに保持できます。


私はなぜ見ることができますsleepし、.05分離しなければなりません。しかし、sayとの間のスペース' 'は必須なのでしょうか?
マティアス14年

はい:それが与えるために、エラー「行の2項の」S say' '一つは使用することができsay(' ')ますが...この場合は1つのchar型の余分だこと
Ayiko

1
@Matthias:Perl 6では、listopは引数を取らないか、後にスペースを入れるか、括弧を使用する必要があります。Perl 5とは異なり、コードゴルフ用に設計された言語ではありません(ただし、多くの優れた組み込み機能が含まれているため、使用可能です)。
コンラッドボロウスキ14年

@xfix説明ありがとうございます。私はこの言語が好きですが、まだ作業プロジェクトでまだ使用できないため、まだ徹底的に調べていません。しかし、私は常にいくつかのPerl 6スクリプトを書くつもりです。@愛子、Perl 6の投稿に感謝します:-)
マティアス14年

2

fugly Javascript-77

i=setInterval("console.log(Array(Math.sin(i+=.1)*20+20|0).join(' ')+'|')",50)

Firefoxで実行する場合-73

i=setInterval("console.log(' '.repeat(Math.sin(i+=.1)*20+20|0)+'|');",50)

そして、私たちが厄介な場合-67

i=setInterval("throw(' '.repeat(Math.sin(i+=.1)*20+20|0)+'|');",50)


1

Python 3、103

愚かな輸入品...

import time,math
t=0
while 1:t+=(.05+t<time.clock())and(print(' '*int(20+20*math.cos(t*1.9))+'|')or.05)

pythonを使用すると、壁時計よりも浮動小数点CPUクロックを取得しやすくなるため、「スリープ」するのではなく、CPUを研磨します。このアプローチはfriolに勝るものではありませんが、楽しいのでそのままにしておきます。


1

C#

[152]キャラクター

namespace System{class P{static void Main(){for(var i=0d;;){Console.Write("{0,"+(int)(40+20*Math.Sin(i+=.1))+"}\n",'|');Threading.Thread.Sleep(50);}}}}

実行に対する既存のC#の回答を取得できず、十分な評判がなかったため、ダウン投票できませんでした

Forループ宣言の後、いくつか欠落して{おり、欠落してい)ます。

ウェーブが実行されたときのウェーブの外観のばらつきは、このウェーブを表示しようとしている方法が原因であると考えています。


名前空間とメソッド宣言をカウントしない場合 、作業バージョンでは[104]文字になります

for(var i=0d;;){Console.Write("{0,"+(int)(40+20*Math.Sin(i+=.1))+"}\n",'|');Threading.Thread.Sleep(50);}

他のC#の回答はgmcsで機能します。最初はコンパイルに失敗しますが、ソースコードに印刷できない文字があるためだと思います。空のファイルにもう一度入力すると、コンパイルが成功します。
ace_HongKongIndependence 14年

コンパイラは気難しいかもしれませんよね?
マラキ14年

1

VB [236] [178]

タブのカウント方法がわからないので、ここに貼り付ける前にNotepadd ++からカウントを取りました。 改行は必須です。おそらく、誰もコードゴルフに使用するのが好きではないのでしょう。

Module Module1
Sub Main()
Dim i
While True
Console.WriteLine("{0:" & (40 + 20 * Math.Sin(i = i + 0.1)) & "}", "|")
Threading.Thread.Sleep(50)
End While
End Sub
End Module

1

C#

マジックライン[91]キャラクター

for(var i=0d;;Console.Write("{0,"+(int)(40+20*Math.Sin(i+=.1))+"}\n",'|'))Thread.Sleep(50);

以下の作業プログラム。[148]キャラクター

namespace System{class P{static void Main(){for(var i=0d;;Console.Write("{0,"+(int)(40+20*Math.Sin(i+=.1))+"}\n",'|'))Threading.Thread.Sleep(50);}}}

質問を明確にしていない場合は申し訳ありません。プログラムは終了せず、ウェーブを継続的にスクロールする必要があります(SIGINTまでを除く)。また、文字数を追加してください。
ace_HongKongIndependence 14年

そのビットを忘れてすみませんでした。修正されました。
ジョンクリアズ14年

「Thread.Sleep」を失い、var :) 117文字で「float」を変更できると思います。-申し訳ありませんが、待ち時間は表示されませんでした。133文字になりました。 using System;class P{static void Main(){for(var i=0d;;Console.Write("{0,"+(int)(40+20*Math.Sin(i+=.1))+"}\n",'|'))Thread.Sleep(50);}}
メデニバイカル14

1
VS2010でコンパイルできないので、Threading.Thread.Sleep(50)何か問題がありますか?
マラキ14年

1
私はそれを実行するために取得することができたが、私はいくつかのブラケットとセミコロンを追加する必要がありましたし、それは同じ周期ごとに見ていない
マラキ

1

Bash + bc(数学を行うため)、80

$ for((;;i++)){ printf "%$(bc -l<<<"a=20*s($i/10);scale=0;a/1+20")s|
";sleep .05;}
                |
                 |
                   |
                     |
                       |
                         |
                           |
                            |
                              |
                               |
                                |
                                 |
                                  |
                                   |
                                   |
                                   |
                                   |
                                   |
                                   |

1

TI-BASIC、30バイト

精度を多少犠牲にして、他の回答よりもサイズを小さく改善します。TI-Basicには技術的に| しかし、あなたはそれをコンピューター経由で転送するか、アセンブリー・プログラムを使用してそれにアクセスしなければなりません。

While 1
Output(8,int(8+7sin(Ans)),":
Disp "
.03π+Ans
End

うわー、この挑戦​​が何歳なのかわからなかった!...(確かに可能である)、このもっとゴルフをしようとするつもりが、それは本当に価値がないのですた
MIライト

ところで、.03πすることができ.1必要な区間内にまだあります。
リルトシアスト

いいキャッチ、ありがとう!出力コマンドをゴルフする方法はありますか?また、私はCSEを持っているので、数バイトのコストでこれを適切な振幅(26文字の画面)で取得できました。
MIライト

いいえ、出力コマンドは正常に見えます。Dispには引用符が必要です。実際には、振幅は20文字である必要があり、画面幅の要件は39になります。したがって、グラフ画面でのみ機能し、それを行う簡単な方法はありません。
リルトシアスト

1

ジュリア-68

編集:MLとエースに感謝します。

i=0;while 0<1;println(" "^int(20sin(.1i)+20)*"|");i+=1;sleep(.05)end

まあ、それは対APL対抗できませんが、ここに私の試みがあります。

出力:

                    |
                      |
                        |
                          |
                            |
                              |
                               |
                                 |
                                  |
                                    |
                                     |
                                      |
                                       |
                                       |
                                        |
                                        |
                                        |
                                        |
                                       |
                                       |
                                      |
                                     |
                                    |
                                   |
                                  |
                                |
                              |
                             |
                           |
                         |
                       |
                     |
                   |
                 |
               |
             |
           |
         |
        |
      |
     |
    |
   |
  |
 |
|
|
|
|
|
 |
 |
  |
   |
     |
      |
       |
         |
           |
             |
              |
                |
                  |
                    |
                      |
                        |
                          |
                            |
                              |
                                |
                                 |
                                   |
                                    |
                                     |
                                      |
                                       |
                                       |
                                        |
                                        |
                                        |
                                        |
                                       |
                                       |
                                      |
                                     |
                                    |
                                   |
                                 |
                                |
                              |
                            |
                          |
                        |
                      |
                    |
                  |
                 |
               |
             |
           |
         |
       |
      |
     |
   |
  |
  |
 |
|
|
|
|
|
 |
  |
  |
    |
     |
      |
        |
         |
           |
             |
               |
                 |
                   |
                     |
                       |
                         |
                           |
                            |
                              |
                                |
                                 |
                                   |
                                    |
                                     |
                                      |
                                       |
                                       |
                                        |
                                        |
                                        |
                                        |
                                       |
                                       |
                                      |
                                     |
                                    |
                                  |
                                 |
                               |
                              |
                            |
                          |
                        |
                      |
                    |
                  |
                |
              |
            |
           |
         |
       |
      |
    |
   |
  |
 |
 |
|
|
|
|
|
 |
  |
   |
    |
     |
      |
        |
          |
           |
             |
               |
                 |
                   |
                     |
                       |
                         |
                           |
                             |
                              |
                                |
                                  |
                                   |
                                    |
                                     |
                                      |
                                       |
                                        |
                                        |
                                        |
                                        |
                                        |
                                       |
                                       |
                                      |
                                     |
                                    |
                                  |
                                 |
                               |
                             |
                            |
                          |
                        |
                      |
                    |
                  |
                |
              |
            |
          |
         |
       |
      |
    |
   |
  |
 |
 |
|
|
|
|
 |
 |
  |
   |
    |
     |
       |
        |
          |
            |
             |
               |
                 |
                   |
                     |
                       |
                         |
                           |
                             |
                               |
                                |
                                  |
                                   |
                                    |
                                      |
                                      |
                                       |
                                        |
                                        |
                                        |
                                        |
                                        |
                                       |
                                      |
                                      |
                                     |
                                   |
                                  |
                                |
                               |
                             |
                           |
                         |
                       |
                     |
                   |

1
ジュリアは知りませんが.050.05inの代わりに使用することは可能sleepですか?
ace_HongKongIndependence 14年

実はそうです!おかげで
CCP

それをダウンカット68の文字i=0;while 0<1;println(" "^int(20sin(.1i)+20)*"|");i+=1;sleep(.05)end--- sin(i/10)*20に等しい20sin(.1i)
ML

ジュリアは知りませんが、代わりにすべての自然数を反復処理するforループを使用できますか?
リスト管理者

1

MATLAB、81バイト

t=0;while(fprintf('%s\n',i))i=[];t=t+1;i(fix(21+20*sind(t*6)))='|';pause(.05);end

私は実際に虐待されi、私は置くことができることを意味し、常にMATLABに初期化され、fprintf中にwhile初期化せずに文のi最初に。これは、プログラムが最初に空の行を出力することを意味しますが、仕様では禁止されていないと思います。

さらに、MatlabがほとんどのASCII制御文字を無視するという事実を悪用し、NULLの代わりにスペースも出力します(最初の空行にも)。


「iは常にMATLABで初期化されるという事実を悪用したため、最初にiを初期化せずにwhileステートメントにfprintfを配置できました。」本当に賢い!+1!
スチューウィーグリフィン

0

F#-90 79 77 76

ここに再帰を使用した解決策があります

let rec f x=printfn"%*c"(int(20.*sin x)+21)'|';Thread.Sleep 50;f(x+0.1)
f 0.

おそらくさらに改善される可能性があります。


あなたが0の1を取り除くとのThread.sleep 50を行う得ることができるので、F#について何も知らなくても、私は:)、のThread.sleepはミリ秒の値を期待していると仮定している
ValarDohaeris

@ValarDohaerisそうですね。要件を読み違えました。
pswg 14年

0

AutoHotkey 176

SetKeyDelay,-1
run Notepad.exe
WinWaitActive, ahk_class Notepad
p:=0
loop
{
sleep 50
p+=Mod(Floor(A_index/40),2)?-1:1,t:=""
loop % p
t .= " "
sendinput % t "|`n"
}
esc::Exitapp

スクリプトを実行します。メモ帳を開き、文字を印刷します。いつでもEscを押して終了します。


0

Clojure、121

短縮版:

(loop[a 0](println(clojure.string/join(repeat(int(+ 20 (* 20 (Math/sin a)))) " ")) \|)(Thread/sleep 50)(recur(+ a 0.1)))

プリティバージョン:

(loop [a 0]
  (println (clojure.string/join (repeat (int (+ 20 (* 20 (Math/sin a)))) " ")) \|)    
  (Thread/sleep 50)
  (recur(+ a 0.1)))

期間は64です。

これをlein replファイルに入力するか、ファイルに保存しsin.cljて実行しますlein exec sin.clj(lein-execプラグインが必要です)。

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