垂直打印正弦波


42

打印在终端上垂直滚动的连续正弦波。该程序不应终止,而应连续向下滚动该波形(除非以某种方式被中断)。您可能会认为溢出不是问题(即,您可以使用带有递增计数器的无限循环或无限递归)。

该波应满足以下特性:

  • 幅度= 20个字符(峰值幅度)
  • 期间= 60至65行(含)
  • 输出应仅包含空格,换行符和 |
  • 每行输出后,暂停50ms

样本输出:

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

除非另有中断,例如SIGINT或SIGKILL,或者关闭终端窗口,或者关闭计算机电源,或者太阳吞下地球等,否则以上输出应该一直持续运行。

最短的代码胜出。

注意。我知道“ 显示滚动波”上存在类似的问题,但这并不完全相同。在我的问题中,该波形不应该“就地”滚动-只需将其输出到终端即可。另外,这是一个艺术问题,所以不要使用Mathematica进行绘制。


1
峰幅度,峰峰幅度或均方根幅度?
DavidC 2014年

峰值幅度。
ace_HongKong独立

1
只用| s而不用空格绘制波浪是否可以?
明胶2014年

1
所有答案均无效。他们不仅为SIGINT停止了SIGKILL。
Max Ried

1
@Max Ried很好,我将其更改为“应该永远继续下去,除非被打断”。
ace_HongKongIndependence

Answers:


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个字符:{⎕←'|'↑⍨-⌈20×1+1○⍵⋄∇.1+⍵⊣⎕DL.05}0
Tobia

3
@ace哈哈。您应该检查一下APL,它不是一种新颖的语言。它非常古老,已经在大型系统中使用了数十年。与其他任何东西相比,它非常独特。IMHO符号使它更可读的唯一ASCII衍生物(J)
托比亚

22

C, 74 73 70 69 67个字符

67个字符的解决方案,来自@ugoren等人的许多好主意:

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 2014年

2
我认为您可以使用* .1而不是/ 10。
moala 2014年

1
@musiphil,我也考虑过使用5E4,但事实证明它不起作用:如果不显示编译器usleep()原型,则必须显式转换5E4。
treamur

2
您可以通过将对j的赋值移动到printf中来减少两个字符,如下所示:printf("%*s\n",j=21+sin(i++*.1)*20,"|")。结果类型仍然是int,因此它是有效的字段宽度参数。
艺术

12

Mathematica 121104 80 67 64

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

正弦


问题说不要使用mathematica对其进行绘制。这有什么不同吗?
玛拉基2014年

13
@Malachi是的。就像其他答案一样,它使用mathematica进行计算。使用mathematica进行绘图将告诉mathematica进行绘图x=20*sin(pi*y/30)+20或类似的操作。
贾斯汀

好的,我明白了您的意思,谢谢您的澄清
Malachi 2014年

1
这是58个字符的版本Do[Spacer[70*Sin[n*Pi/32]+70]~Print~"|";Pause@.05,{n,18!}]
Ajasja 2014年

1
我不是一个Mathematica用户,但我认为你可以改变1 == 1,以0 < 1减少1个字符。
CCP

11

Perl,48(68)

GNU sleep版本: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

通过使用shell睡眠功能删除了Time :: HiRes模块的使用。按照Ruby示例缩短增量。可以使用$“和$ 0缩短,看到Primo的工作提示。感谢您的提示Primo。


我将此保存为文件test.pl并运行perl ./test.pl,但是等待时间与规范不符。而且,波的幅度太小。(此幅度是指峰值和平衡位置之间的长度。)
ace_HongKongIndependence 2014年

我想如果将增量从.105更改为.1,我将以56个字符击败红宝石!
KevinColyer 2014年

@primo-我的shell睡眠时间确实短于1秒...
KevinColyer 2014年

man sleepunsigned int sleep(unsigned int seconds);。不会出错,但是实际的睡眠间隔为零。一些使您简短的建议:更改$d$_,然后使用(25+20*sin),然后将更改为\n文字换行符。
2014年

2
@primo man 1 sleep在GNU / Linux的bash shell的告诉我们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特定的shell命令:

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

以下使用特定于GNU / Linux的shell命令:

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

两者均为64字节。

  • 期限是64。
  • 最大振幅正好是20。
  • 曲线是完全对称的。
  • 每个时期都是相同的。
                    |
                      |
                         |
                           |
                             |
                               |
                                |
                                  |
                                   |
                                    |
                                     |
                                      |
                                       |
                                       |
                                        |
                                        |
                                        |
                                        |
                                        |
                                       |
                                       |
                                      |
                                     |
                                    |
                                   |
                                  |
                                |
                               |
                             |
                           |
                         |
                      |
                    |
                  |
               |
             |
           |
         |
        |
      |
     |
    |
   |
  |
 |
 |
|
|
|
|
|
 |
 |
  |
   |
    |
     |
      |
        |
         |
           |
             |
               |
                  |
                    |
                      |
                         |
                           |
                             |
                               |
                                |
                                  |
                                   |
                                    |
                                     |
                                      |
                                       |
                                       |
                                        |
                                        |
                                        |
                                        |
                                        |
                                       |
                                       |
                                      |
                                     |
                                    |
                                   |
                                  |
                                |
                               |
                             |
                           |
                         |
                      |
                    |
                  |
               |
             |
           |
         |
        |
      |
     |
    |
   |
  |
 |
 |
|
|
|
|
|
 |
 |
  |
   |
    |
     |
      |
        |
         |
           |
             |
               |
                  |
                    |

请注意,这并非正弦波,而是二次插值。针对实际罪恶作图:

在所需的粒度下,这些在视觉上是无法区分的。

如果美学不是那么重要,我提供60字节的替代方案,周期长度为62,最大幅度为〜20.02,并且存在一些不对称性:

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

这不是正弦波;它不是正弦波。这只是抛物线(如果我没看错你的代码)。(如果您可以用一些正弦波来表示这一点,我很乐意看到该函数)。
贾斯汀2014年

正弦是一个公式,如果您复制该公式,它仍然是正弦波。这可能是Sine的某种变体。
玛拉基2014年

8

红宝石56

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

是否可以用p替换看跌期权?
Slicedpan 2014年

1
@Slicedpan我想我不会,因为这是画画的挑战。p将在每条线周围添加双引号,并更改“绘图”。
daniero 2014年

7

Befunge 98 - 103 100

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

用没有三角功能的语言为执行此操作的程序欢呼;实际上是第一个程序。第二行只是数据;与sin的ascii值对应的字符,添加到空格字符。

编辑:我不减去空格就节省了3个字符;正弦曲线向右平移32个单位(有效)。

Befunge也没有睡眠命令或类似命令。找到一个指纹会很好,但是我找不到一个指纹,因此ff*:*8*按下8*225**2405000)并kz运行多次noop(好吧,多次+ 1)。在带有pyfunge的 Windows命令行上,这大约是50毫秒,所以我说我很好。注意:如果有人对此有好的指纹,请告诉我。

代码的最后一部分只是检查计数器(用于数据线)是否超过数据,如果超过,则将计数器重置为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-

我试图缩短程序,决定查看余弦taylor系列(正弦很难计算)。我更改xpi * x / 30匹配此处请求的周期,然后乘以20匹配振幅。我做了一些简化(用于取消的调整因素,而没有太多改变函数的值)。然后我实现了它。可悲的是,这并不是一个较短的实现。

:f`!4*jf2*-

检查taylor系列的值是否变得不正确(约x = 15)。如果是,那么我将计算泰勒级数x - 30而不是x

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

是我在的taylor系列的实现x = 0,when x是堆栈上的值。

\$\f`!4*j01-* 

如果需要调整taylor系列,则取反taylor系列的值。

b2*+

使余弦波为正;否则,打印将无法进行。

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

印波

ff*:*8*kz1+

临时等待50毫秒,然后递增 x

:f3*`!3*j$e-

如果x大于45,则将其更改为-14(再次,调整Taylor系列误差)。


这正是我所期望的答案,希望您能接受它:)
ace_HongKongIndependence 2014年

1
那里!我成功地将代码长度减少了-5个字符!而且还有改进的空间!
贾斯汀

@Quincunx我的perl解决方案也没有使用任何内置的trig函数;)
primo 2014年

6

蟒蛇, 108939089,88

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

现在可以无限滚动了:)

编辑:好的,90。够了吗?

编辑:编辑:不,89。

编辑:编辑:编辑:88感谢bootyby


抱歉,如果我没有明确说明问题-您的程序不应终止,而应连续向下滚动(直到SIGINT除外)
ace_HongKongIndependence 2014年

1
a=0.->带a=0您进入88号
展位

5

PHP,59个字符

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

1
您可以使用echo ...;代替来节省一些字节fwrite(STDOUT,...);
2014年

无论如何,从命令行调用时都是有道理的。已保存10个字符-感谢primo。
Alex Barrett 2014年

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

非常好。我不会用这些更改来编辑答案,您应该以自己的名义发布。
Alex Barrett 2014年

1
@ace需要使用ansi编码保存。ideone会自动将所有内容转换为utf-8,这会中断。~ƒõ是的简写"|\n"
primo 2014年


3

Java脚本 88 76 78个字符

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

基于肯德尔·弗雷(Kendall Frey)的代码。


您永远不会初始化i,因此它打印的是直线而不是波浪。
gilly3 2014年

我的错误...之所以有用,是因为我已经在控制台中运行了Kendall的脚本,所以已经为我初始化了。
joeytje50 2014年

3

C-86 + 3个字符

感谢shiona和Josh的编辑

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以保存字符),是否可以工作?i;main(j){for(j=0;j++<20+sin(i/10.0)*20;)putchar(32);puts("|");usleep(50000);i++;main();}
shiona 2014年

您可以使用printf()替换for循环将大小减小到76个字符左右:printf("%*s\n",(int)(21+sin(i++/10.)*20),"|")
treamur

1
嗯...如果我在答案中使用这个想法,我会感到内,尤其是当这是我自己的问题时...您会考虑自己发布答案吗?
ace_HongKongIndependence 2014年

好的,我会做。谢谢。:)
treamur

1
如果您删除了j=0:,可以再剃掉两个字符i;main(j){for(;j++<21+sin(i/10.)*20;)putchar(32);puts("|");usleep(50000);i++;main(1);}。这取决于使用0参数调用程序的假设。
2014年

3

Ti-Basic,33个字节

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

存在以下警告

  1. 由于屏幕限制为16x8,此正弦波的振幅仅为7(仍保持为60)

  2. 由于缺少访问|char 的简便方法,!因此改用

  3. 由于缺少准确的系统计时器,因此无法实现延迟。但是,运行速度似乎正确。


1
嘿,由于TI-BASIC是按一/二字节令牌计算的,所以实际上是33字节(不是“ 56个字符”),因此它实际上应该赢得了挑战!
MI赖特2015年

除了振幅的东西外……
lirtosiast

好吧,是的,但是按字节计数就可以了。
MI Wright

2

JavaScript的-88

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

我确信有人可以提出实际上很聪明的东西。


2

- 1035857,54

感谢IRC的杰出人士

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

用从右到左的单词读取:从0无限次开始:sin,加1,乘以20,下限,追加1(因此它成为2个元素的数组),复制两个字节'|' 相应地,将其打印,等待0.05秒并添加0.1

可以使用递归来代替无限循环,它可以节省2个字符,但是在经过多次迭代后也会产生堆栈错误

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

$:递归调用在哪里。


您介意添加一些解释,以便不熟悉J语法的人(例如我)也可以理解您的答案吗?
ace_HongKong独立

通过关注火车的结构,可以将其缩短为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尽管它在触底之前似乎持续了更长的时间。
algorithmhark

2

哈斯克尔-75

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

不幸的是,我无法让程序暂停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
暂停是要求之一。您还可以在暂停时发布代码吗?
贾斯汀

好的,我发布了。希望Haskell让您暂停不导入的代码。
Zaq 2014年

幅度是指峰值幅度,即当前程序幅度的两倍。您可能希望将其更改20+20*sin x为合格。
ace_HongKongIndependence 2014年

行,可以。我想我误解了那部分问题。
Zaq 2014年

2

Perl 6:46个字符

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

使用创建无限懒惰范围0,0.1 ... *,在其上循环。say返回Bool::True乘以1的数字,这样我可以将其保留在单个语句中。


我明白了为什么sleep.05必须分开。但是我想知道say和之间的空格' '是否是强制性的?
Matthias 2014年

是的:s它给出了“ say' '可以连续使用2个术语”的错误,say(' ')但在这种情况下,这额外增加了1个字符...
Ayiko 2014年

1
@Matthias:在Perl 6中,listop要么不必接受参数,要么在其后留空格,或者使用括号。与Perl 5不同,它不是为代码高尔夫而设计的语言(但它包含许多不错的内置功能,因此可以使用)。
Konrad Borowski14年

@xfix谢谢您的解释。我喜欢这种语言,但是我尚未深入研究它,因为我仍然不能在工作项目中使用它。但是,我总是计划编写一些Perl 6脚本。@ Ayiko,感谢您在Perl 6上发表的帖子:-)
Matthias

2

丑陋的 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

愚蠢的frikk'n进口...

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

这种实现方式不是“睡眠”,而是在cpu上工作,因为python使获取浮点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);}}}}

我无法获得Run的现有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 2014年

编译器可能会很挑剔,是吗?
玛拉基2014年

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

对不起,忘记了这一点。立即修复。
John ClearZ 2014年

我认为您可以丢失“ Thread.Sleep”,并用var更改“ float” :) 117个字符。-对不起,没有看到等待时间。.现在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);}}
Medeni Baykal 2014年

1
Threading.Thread.Sleep(50)做错了什么,无法在VS2010中进行编译?
玛拉基2014年

1
我能够运行它,但是我必须添加一些括号和分号,而且每个时期看起来都不一样
Malachi 2014年

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 Wright

顺便说一句,.03π可以是.1,它仍在所需的时间间隔内。
lirtosiast 2015年

不错,谢谢!您看到我可以打出输出命令的任何方式吗?另外,由于我拥有CSE,因此可以花几个字节就可以使振幅达到正确的幅度(26个字符的屏幕)。
MI Wright

不,输出命令看起来不错-很可惜Disp需要加引号。实际上,振幅应为20个字符,这使得屏幕宽度要求为39。因此,它仅适用于图形屏幕,并且没有实现此目的的简便方法。
lirtosiast 2015年

1

朱莉娅-68

编辑:感谢ML和ace。

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

好吧,它无法与APL竞争,但这是我的尝试。

输出:

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

1
我不了解Julia,但是可以使用in .05代替吗?0.05sleep
ace_HongKong独立2014年

其实,是!谢谢
CCP

将其缩减为68个字符i=0;while 0<1;println(" "^int(20sin(.1i)+20)*"|");i+=1;sleep(.05)end——— sin(i/10)*20等于20sin(.1i)
ML

我不了解Julia,但是您可以使用for循环遍历所有自然数吗?
lirtosiast 2015年

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中初始化的事实,这意味着我可以fprintfwhilei先初始化的情况下将in 放入语句中。这确实意味着程序首先输出一个空行,但是我认为规范中不禁止这样做。

此外,它滥用了Matlab将忽略大多数ASCII控制字符,而是打印一个空格而不是NULL(也用于第一个空行)的事实。


“我滥用了我总是在MATLAB中初始化的事实,这意味着我可以将fprintf放入while语句中而无需先初始化i。” 真聪明!+1!
Stewie Griffin

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.

它可能可以进一步改进。


在不了解F#的情况下,我假设Thread.Sleep期望以毫秒为单位的值,因此您可以摆脱0之一,然后执行Thread.Sleep50。:)
ValarDohaeris 2014年

@ValarDohaeris你是对的。我误读了要求。
pswg 2014年

0

自动热键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插件)。

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.