In một sóng hình sin (theo chiều dọc)


42

In một sóng hình sin liên tục cuộn theo chiều dọc trên một thiết bị đầu cuối. Chương trình không nên chấm dứt và liên tục cuộn xuống sóng (trừ khi nó bị gián đoạn bằng cách nào đó). Bạn có thể cho rằng tràn không phải là vấn đề (nghĩa là bạn có thể sử dụng các vòng lặp vô hạn với các bộ đếm tăng dần hoặc đệ quy vô hạn).

Sóng phải thỏa mãn các tính chất sau:

  • Biên độ = 20 ký tự (biên độ cực đại)
  • Thời gian = 60 đến 65 dòng (đã bao gồm)
  • Đầu ra chỉ nên bao gồm khoảng trắng, dòng mới và |
  • Sau mỗi dòng đầu ra, tạm dừng trong 50ms

Đầu ra mẫu:

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

Đầu ra ở trên sẽ tiếp tục tồn tại trừ khi bị gián đoạn, ví dụ SIGINT hoặc SIGKILL, hoặc đóng cửa sổ đầu cuối, hoặc bạn tắt máy, hoặc Mặt trời nuốt chửng Trái đất, v.v.

Mã ngắn nhất sẽ thắng.

Ghi chú. Tôi biết một vấn đề tương tự trên Display Scrolling Waves nhưng điều này không hoàn toàn giống nhau. Trong vấn đề của tôi, sóng không được cuộn "tại chỗ" - chỉ cần xuất nó trên thiết bị đầu cuối. Ngoài ra, đây là một vấn đề nghệ thuật, vì vậy đừng sử dụng Mathicala để vẽ nó.


1
Biên độ đỉnh, biên độ đỉnh-đỉnh, hay biên độ căn bậc hai?
DavidC

Biên độ đỉnh.
ace_HongKongInependence

1
Bạn có thể vẽ một con sóng chỉ với | s và không có khoảng trắng không?
Gelatin

1
Tất cả các câu trả lời chưa hợp lệ. Họ cũng dừng lại vì SIGKILL không chỉ vì SIGINT.
Max Ried

1
@Max Ried tốt, tôi sẽ thay đổi nó thành "nên tiếp tục mãi mãi trừ khi bị gián đoạn".
ace_HongKongInependence

Câu trả lời:


12

APL (35)

(Có, nó phù hợp với 35 byte, đây là mã hóa APL 1 byte )

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

Giải trình:

  • {... }1: gọi hàm với 1 ở đầu
  • 1○⍵×.1: đủ gần để làm việc của chính phủ sin(⍵×π÷30). ( 1○sin).
  • -21+⌈20: bình thường hóa đến phạm vi 1..40và phủ định
  • '|'↑⍨: lấy các Nký tự cuối cùng từ chuỗi '|'(kết quả là một chuỗi khoảng trắng có dấu |ở cuối
  • ⎕←: trưng bày
  • ⌈⎕DL.05: đợi 50 ms và trở về 1. ( ⎕DLtrả về lượng thời gian nó thực sự chờ đợi, nó sẽ gần 0.05, làm tròn giá trị đó lên 1).
  • ∇⍵+: thêm số đó ( 1) vào và chạy lại hàm.

2
Chết tiệt ... Tôi nghĩ rằng các hàm lượng giác cộng với thời gian trễ sẽ khiến các bạn bỏ cuộc
ace_HongKongInependence

2
Đây là 33 char một:{⎕←'|'↑⍨-⌈20×1+1○⍵⋄∇.1+⍵⊣⎕DL.05}0
Tobia

3
@ace LOL. Bạn nên kiểm tra APL, đây không phải là ngôn ngữ mới. Nó rất cũ và đã được sử dụng trong các hệ thống lớn trong nhiều thập kỷ. Nó khá độc đáo, so với bất cứ thứ gì khác. IMHO các biểu tượng làm cho nó dễ đọc hơn nhiều khi các dẫn xuất chỉ ASCII (J)
Tobia

22

C, 74 73 70 69 67 ký tự

Giải pháp 67 ký tự với nhiều ý tưởng hay từ @ugoren và những người khác:

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

Giải pháp 69 ký tự với vòng lặp while thay vì đệ quy:

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

Tiếp cận lãnh thổ perl. :)


1
Điều này được lấy cảm hứng từ câu trả lời C của @ ace.
treamur

2
Tôi nghĩ rằng bạn có thể sử dụng 5E4thay vì 50000.
musiphil

2
Tôi nghĩ bạn có thể sử dụng * .1 thay vì / 10.
moala

1
@musiphil, tôi cũng đã nghĩ đến việc sử dụng 5E4, nhưng hóa ra nó không hoạt động: Nếu không hiển thị usleep()nguyên mẫu trình biên dịch , bạn sẽ phải sử dụng 5E4 một cách rõ ràng.
treamur

2
Bạn có thể cắt ra thêm hai ký tự bằng cách di chuyển phép gán sang j vào printf, như thế này : printf("%*s\n",j=21+sin(i++*.1)*20,"|"). Kiểu kết quả vẫn là int để nó là đối số độ rộng trường hợp lệ.
Nghệ thuật

12

Toán học 121 104 80 67 64

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

sin


câu hỏi nói không sử dụng mathicala để vẽ nó. điều này có khác gì không?
Malachi

13
@Malachi Vâng. Điều này sử dụng mathicala để tính toán nó, giống như bất kỳ câu trả lời khác. Sử dụng mathicala để vẽ đồ thị sẽ nói với mathicala để vẽ x=20*sin(pi*y/30)+20hoặc một cái gì đó tương tự.
Justin

ok tôi hiểu những gì bạn đang nói cảm ơn vì đã làm rõ
Malachi

1
Và đây là phiên bản 58 charDo[Spacer[70*Sin[n*Pi/32]+70]~Print~"|";Pause@.05,{n,18!}]
Ajasja

1
Im không phải là một người sử dụng Mathematica, nhưng tôi nghĩ rằng bạn có thể thay đổi 1 == 1để 0 < 1giảm 1 char.
ĐCSTQ

11

Perl, 48 (68)

Phiên bản ngủ GNU: 48

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

Nền tảng chéo: 68

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

Đã xóa việc sử dụng mô-đun Time :: HiRes bằng cách sử dụng chức năng ngủ vỏ. Rút ngắn gia tăng theo ví dụ Ruby. Rút ngắn bằng cách sử dụng $ "và $ 0 khi thấy gợi ý từ công việc của Primo Cảm ơn gợi ý Primo.


Tôi đã lưu nó dưới dạng tệp test.plvà chạy perl ./test.pl, tuy nhiên thời gian chờ không khớp với thông số kỹ thuật. Ngoài ra, biên độ của sóng quá nhỏ. (Biên độ này đề cập đến độ dài giữa đỉnh và vị trí cân bằng.)
ace_HongKongInependence

Tôi đoán nếu tôi thay đổi mức tăng từ 0,105 thành .1 Tôi sẽ đánh bại ruby ​​ở 56 chars!
KevinColyer

@primo - Giấc ngủ vỏ của tôi có thời gian ngắn hơn 1 giây ...
KevinColyer

man sleepunsigned int sleep(unsigned int seconds);. Nó không có lỗi, nhưng khoảng thời gian ngủ thực tế bằng không. Một số gợi ý để làm cho bạn ngắn hơn: thay đổi $dđể $_, và sau đó sử dụng (25+20*sin), và thay đổi \ncho một dòng mới theo nghĩa đen.
primo

2
@primo man 1 sleeptrên shell bash GNU / Linux cho chúng ta biết rằngUnlike most implementations that require NUMBER be an integer, here NUMBER may be an arbitrary floating point number.
ace_HongKongInependence

11

Perl - 64 (hoặc 60) byte

Sau đây sử dụng lệnh shell dành riêng cho Windows:

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

Phần sau đây sử dụng lệnh shell dành riêng cho GNU / Linux:

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

Cả hai đều ở mức 64 byte.

  • Thời gian là 64.
  • Biên độ tối đa chính xác là 20.
  • Đường cong hoàn toàn đối xứng.
  • Mỗi thời kỳ là giống hệt nhau.
                    |
                      |
                         |
                           |
                             |
                               |
                                |
                                  |
                                   |
                                    |
                                     |
                                      |
                                       |
                                       |
                                        |
                                        |
                                        |
                                        |
                                        |
                                       |
                                       |
                                      |
                                     |
                                    |
                                   |
                                  |
                                |
                               |
                             |
                           |
                         |
                      |
                    |
                  |
               |
             |
           |
         |
        |
      |
     |
    |
   |
  |
 |
 |
|
|
|
|
|
 |
 |
  |
   |
    |
     |
      |
        |
         |
           |
             |
               |
                  |
                    |
                      |
                         |
                           |
                             |
                               |
                                |
                                  |
                                   |
                                    |
                                     |
                                      |
                                       |
                                       |
                                        |
                                        |
                                        |
                                        |
                                        |
                                       |
                                       |
                                      |
                                     |
                                    |
                                   |
                                  |
                                |
                               |
                             |
                           |
                         |
                      |
                    |
                  |
               |
             |
           |
         |
        |
      |
     |
    |
   |
  |
 |
 |
|
|
|
|
|
 |
 |
  |
   |
    |
     |
      |
        |
         |
           |
             |
               |
                  |
                    |

Lưu ý rằng đây không chính xác là một sóng hình sin, mà là một phép nội suy bậc hai. Âm mưu chống lại một tội lỗi thực tế:

Ở mức độ chi tiết cần thiết, chúng không thể phân biệt được bằng mắt.

Nếu tính thẩm mỹ không quá quan trọng, tôi cung cấp giải pháp thay thế 60 byte , với độ dài chu kỳ 62, biên độ tối đa ~ 20,02 và không đối xứng nhẹ:

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

Đây không phải là sóng hình sin; nó chỉ đơn giản là parabolas (nếu tôi đọc đúng mã của bạn). (Nếu bạn có thể biểu diễn điều này với một số sóng hình sin, tôi rất muốn xem chức năng này).
Justin

Sine là một công thức, nếu bạn sao chép công thức thì nó vẫn là sóng hình sin. và đây có lẽ là một biến thể của Sine trong một số thời trang.
Malachi

8

Ruby 56

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

Là thay thế đặt với p được phép?
Slátpan

1
@Slicedpan Tôi nghĩ rằng tôi sẽ không, vì đây là một thách thức để vẽ một cái gì đó. psẽ thêm dấu ngoặc kép xung quanh mỗi dòng và thay đổi "bản vẽ".
daniero

7

Befunge 98 - 103 100

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

Chúc mừng cho một chương trình thực hiện điều này, bằng một ngôn ngữ không có khả năng lượng giác; chương trình đầu tiên trong thực tế. Dòng thứ hai chỉ đơn giản là dữ liệu; ký tự tương ứng với giá trị ascii của tội lỗi, được thêm vào ký tự khoảng trắng.

EDIT: Tôi đã lưu 3 ký tự bằng cách không trừ đi khoảng trống; hình sin được dịch 32 đơn vị sang phải (có giá trị).

Befunge cũng không có lệnh ngủ, hoặc một cái gì đó tương tự. Thật tuyệt khi tìm thấy dấu vân tay, nhưng tôi không thể tìm thấy dấu vân tay, vì vậy hãy ff*:*8*đẩy 8*225**2( 405000) và kzchạy một tiếng ồn nhiều lần (tốt, nhiều lần + 1). Trên dòng lệnh windows với pyfunge , điều này hóa ra là khoảng 50 mili giây, vì vậy tôi nói rằng tôi tốt. Lưu ý: nếu bất cứ ai biết một dấu vân tay tốt cho việc này, xin vui lòng cho tôi biết.

Phần cuối của mã chỉ đơn giản là kiểm tra xem bộ đếm (đối với dòng dữ liệu) có qua dữ liệu hay không, nếu có, bộ đếm được đặt lại về 0.

Tôi đã sử dụng điều này để tạo ra dữ liệu.


Dòng Taylor

Mặc dù phiên bản này là 105 ký tự, tôi chỉ cần đưa nó vào:

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

Tôi đã cố gắng rút ngắn chương trình của mình và quyết định xem xét loạt phim taylor cho cosine (sin khó tính hơn). Tôi đã thay đổi xđể pi * x / 30phù hợp với khoảng thời gian được yêu cầu ở đây, sau đó nhân với 20để phù hợp với biên độ. Tôi đã thực hiện một số đơn giản hóa (các yếu tố được điều chỉnh để hủy bỏ, mà không thay đổi giá trị của hàm nhiều). Sau đó, tôi thực hiện nó. Đáng buồn thay, nó không phải là một thực hiện ngắn hơn.

:f`!4*jf2*-

kiểm tra xem các giá trị của chuỗi taylor có chính xác không (khoảng x = 15). Nếu có, thì tôi tính toán loạt taylor x - 30thay vì x.

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

là việc tôi thực hiện chuỗi taylor tại x = 0, khi nào xlà giá trị trên ngăn xếp.

\$\f`!4*j01-* 

phủ nhận giá trị của sê-ri taylor nếu sê-ri taylor cần điều chỉnh.

b2*+

làm cho sóng cosin tích cực; nếu không, việc in ấn sẽ không hoạt động.

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

in sóng

ff*:*8*kz1+

tạm thời chờ trong 50 mili giây, sau đó tăng dần x

:f3*`!3*j$e-

Nếu xlớn hơn 45, thay đổi thành -14 (một lần nữa, điều chỉnh lỗi loạt taylor).


Đây chính xác là loại câu trả lời tôi đang mong đợi, hy vọng bạn có thể đánh golf xuống :)
ace_HongKongInependence

1
Đó! Tôi đã giảm thành công độ dài mã xuống -5 ký tự! Và vẫn còn chỗ để cải thiện!
Justin

@Quincunx giải pháp perl của tôi cũng không sử dụng bất kỳ chức năng tích hợp nào;)
primo

6

Con trăn 108,93,90,89, 88

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

Bây giờ với cuộn vô hạn :)

Chỉnh sửa: ok, 90. Đủ chưa?

Chỉnh sửa: Chỉnh sửa: không, 89.

Chỉnh sửa: Chỉnh sửa: Chỉnh sửa: 88 nhờ gian hàng .


Xin lỗi nếu tôi không làm rõ câu hỏi - chương trình của bạn không nên chấm dứt và nên liên tục cuộn xuống sóng (ngoại trừ cho đến khi SIGINT)
ace_HongKongInependence

1
a=0.-> đưa a=0bạn đến 88
gian hàng

5

PHP, 59 ký tự

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

1
Bạn có thể tiết kiệm cho mình một số byte bằng cách sử dụng echo ...;thay thế fwrite(STDOUT,...);.
primo

Điều đó có ý nghĩa khi gọi từ dòng lệnh nào. Đã lưu 10 ký tự - cảm ơn primo.
Alex Barrett

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

Rất đẹp. Tôi sẽ không chỉnh sửa câu trả lời của mình với những thay đổi đó, bạn nên đăng bài của riêng bạn.
Alex Barrett

1
@ace nó cần được lưu với mã hóa ansi. ideone tự động chuyển đổi mọi thứ thành utf-8, bị hỏng. ~ƒõchỉ là viết tắt cho "|\n".
primo

4

C64 BASIC, 64 ký tự PETSCII

nhập mô tả hình ảnh ở đây

Trên PAL C64, For i=0 to 2:next ichu kỳ cho khoảng. 0,05 giây, do đó thời gian trễ được tôn trọng.


3

Javascript 88 76 78 ký tự

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

Dựa trên mã của Kendall Frey.


Bạn không bao giờ khởi tạo i, vì vậy nó in một đường thẳng thay vì sóng.
gilly3

Lỗi của tôi ... Có lẽ nó đã hoạt động vì tôi đã chạy kịch bản của Kendall trong bảng điều khiển của mình, vì vậy tôi đã được khởi tạo cho tôi.
joeytje50

3

C - 86 + 3 ký tự

Cảm ơn shiona và Josh đã chỉnh sửa

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); đặt ("|"); us ngủ (50000); i ++; main () ;}

float i; main (j) {for (j = 0; j ++ <20 + sin (i) * 20;) putchar (32); put ("|"); us ngủ (50000); i + =. 1; main ( );}

Được biên dịch với -lmcờ, tôi giả sử tôi cần thêm 3 ký tự


1
Nó có hoạt động không nếu bạn tạo cho tôi một số nguyên và chỉ chia nó cho 10.0 (hoặc 9,9 để lưu char?) Trong lệnh gọi sin ()? i;main(j){for(j=0;j++<20+sin(i/10.0)*20;)putchar(32);puts("|");usleep(50000);i++;main();}
shiona

Bạn có thể giảm kích thước xuống còn 76 ký tự hoặc hơn bằng cách sử dụng printf () để thay thế vòng lặp for:printf("%*s\n",(int)(21+sin(i++/10.)*20),"|")
treamur

1
Hmm ... Tôi sẽ cảm thấy rất có lỗi nếu tôi sử dụng ý tưởng này trong câu trả lời của mình, đặc biệt khi đây là câu hỏi của riêng tôi ... Bạn có muốn tự mình đăng một câu trả lời không?
ace_HongKongInependence

Ok, sẽ làm. Cảm ơn. :)
treamur

1
Bạn có thể tắt thêm hai ký tự nếu bạn xóa j=0: i;main(j){for(;j++<21+sin(i/10.)*20;)putchar(32);puts("|");usleep(50000);i++;main(1);}. Điều này phụ thuộc vào giả định rằng chương trình được gọi với 0 đối số.
Josh

3

Ti-Basic, 33 byte

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

Những cảnh báo sau tồn tại :

  1. Do giới hạn màn hình 16x8, sóng hình sin này chỉ có biên độ 7 (thời gian 60 vẫn được duy trì)

  2. Do thiếu một cách dễ dàng để truy cập |char, !thay vào đó được sử dụng

  3. Do thiếu bộ hẹn giờ hệ thống chính xác, độ trễ không được thực hiện. Tuy nhiên, tốc độ chạy xuất hiện xấp xỉ chính xác.


1
Heh, vì TI-BASIC được tính bằng một / hai byte mã thông báo, đây thực sự là 33 byte (không phải là "56 ký tự"), vì vậy nó thực sự đã chiến thắng thử thách!
MI Wright

Ngoại trừ điều biên độ ...
lirtosiast

Vâng, vâng, nhưng đi theo byte thì không sao.
MI Wright

2

JavaScript - 88

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

Tôi chắc rằng ai đó có thể nghĩ ra thứ gì đó thực sự thông minh.


2

J - 103,58,57, 54

Cảm ơn những người tuyệt vời từ IRC

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

Trong các từ từ phải sang trái nó đọc: bắt đầu từ 0 lần vô hạn làm: sin, thêm 1, nhân với 20, tầng, nối thêm 1 (để nó trở thành mảng gồm 2 phần tử), sao chép hai byte '|' tương ứng, in nó, đợi 0,05 giây và thêm 0,1

Thay vì vòng lặp vô hạn, chúng ta có thể sử dụng đệ quy, nó sẽ lưu 2 ký tự, nhưng cũng sẽ tạo ra lỗi stack sau một số lần lặp

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

Đâu $:là một cuộc gọi đệ quy.


Bạn có phiền thêm một chút giải thích, để những người không quen thuộc với cú pháp J (như tôi) cũng có thể hiểu câu trả lời của bạn không?
ace_HongKongInependence

Có thể rút ngắn điều này xuống còn 50 ký tự bằng cách làm phiền với cấu trúc của tàu : (+2*(%20)6!:3@[2:1!:2~' |'#~1,~[:<.20*1+1&o.)^:_]0. Phiên bản đệ quy chỉ lưu 1 char lần này $:@(+2*(%20)6!:3@[2:1!:2~' |'#~1,~[:<.20*1+1&o.)0mặc dù nó dường như tồn tại lâu hơn trước khi chạm đáy.
thuật toán

2

Haskell - 75

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

Thật không may, tôi không thể khiến chương trình tạm dừng 50 ms mà không tăng gấp đôi số char của mình, vì vậy nó chỉ làm ngập bảng điều khiển, nhưng nó tạo ra sóng hình sin.


Đây là mã đầy đủ với tạm dừng (138 ký tự với dòng mới):

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
Tạm dừng là một trong những yêu cầu. Bạn cũng có thể gửi mã với tạm dừng?
Justin

Được rồi, tôi đã đăng nó. Tôi muốn Haskell cho phép bạn tạm dừng mã mà không cần nhập.
Zaq

Theo biên độ tôi có nghĩa là biên độ cực đại, tức là gấp đôi biên độ của chương trình hiện tại của bạn. Bạn có thể muốn thay đổi nó để 20+20*sin xthay thế để đủ điều kiện.
ace_HongKongInependence

Ồ chắc chắn rồi. Tôi đoán tôi đã giải thích sai một phần của câu hỏi.
Zaq

2

Perl 6: 46 ký tự

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

Tạo một phạm vi lười biếng vô hạn bằng cách sử dụng 0,0.1 ... *, lặp qua đó. saytrả về số Bool::Truenào là 1 trong phép nhân, bằng cách này tôi có thể giữ nó trong một câu lệnh.


Tôi có thể thấy tại sao sleep.05phải tách ra. Nhưng tôi tự hỏi nếu không gian giữa say' 'là bắt buộc?
Matthias

Có: s Nó đưa ra lỗi "2 điều khoản liên tiếp" cho say' 'Một người có thể sử dụng say(' ')nhưng đó là thêm 1 char trong trường hợp này ...
Ayiko

1
@Matthias: Trong Perl 6, người nghe hoặc không được lấy đối số, có khoảng trắng sau chúng hoặc sử dụng dấu ngoặc đơn. Đây không phải là ngôn ngữ được thiết kế cho mã golf, không giống như Perl 5 (nhưng nó chứa nhiều tính năng dựng sẵn đẹp mắt, vì vậy nó có thể sử dụng được).
Konrad Borowski

@xfix Cảm ơn bạn đã giải thích. Tôi thích ngôn ngữ này, nhưng tôi chưa tìm hiểu kỹ về nó, vì tôi vẫn chưa thể sử dụng nó trong một dự án công việc. Tuy nhiên, tôi luôn có kế hoạch viết một số kịch bản Perl 6. @ Ayiko, tôi đánh giá cao bài đăng Perl 6 của bạn :-)
Matthias

2

Javascript chạy trốn - 77

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

và nếu chúng ta làm điều đó trong Firefox - 73

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

và nếu chúng ta khó chịu - 67

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

1

Scala, 92,89, 87

def f(i:Int){println(" "*(20+20*math.sin(i*.1)).toInt+"|");Thread sleep 50;f(i+1)};f(1)

(20+20*math.sin(i*.1))giảm đi 1 char, giả sử đây là cú pháp hợp lệ (tôi không có kinh nghiệm với Scala)
ace_HongKongInependence

Cảm ơn, nhưng tôi vừa tự khám phá ra rằng :)
ValarDohaeris

1

Trăn 3, 103

Nhập khẩu frikk'n ngu ngốc ...

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

Thay vì "ngủ", việc triển khai này thực hiện tại cpu vì python giúp dễ dàng có được đồng hồ cpu dấu phẩy động hơn so với đồng hồ treo tường. Cách tiếp cận này sẽ không đánh bại friol , nhưng nó rất vui vì vậy tôi sẽ bỏ nó.


1

C #

[152] Nhân vật

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);}}}}

Tôi không thể nhận được câu trả lời C # hiện tại cho Run và tôi không thể tải xuống vì tôi không có đủ Danh tiếng

nó đã thiếu một vài {và mất tích )sau Tuyên bố vòng lặp.

Tôi cho rằng phương sai trong giao diện của sóng khi nó chạy là do cách chúng ta đang cố gắng hiển thị sóng này.


nếu chúng ta không đếm Không gian tên và Tuyên bố phương thức thì đó sẽ là [104] ký tự cho phiên bản hoạt động

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

Câu trả lời C # khác hoạt động trên gmcs. Nó không thể biên dịch lúc đầu, nhưng tôi nghĩ rằng đó là do có một số ký tự không in được trong mã nguồn. Sau khi gõ lại nó vào một tập tin trống, quá trình biên dịch thành công.
ace_HongKongInependence

Trình biên dịch có thể kén chọn, phải không?
Malachi

1

VB [236] [178]

không chắc bạn sẽ đếm các tab như thế nào, tôi chỉ lấy số đếm từ Notepadd ++ trước khi tôi dán ở đây. dòng mới là bắt buộc, có lẽ tại sao không ai thích sử dụng nó để chơi golf mã.

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 #

The Magic Line [91] Nhân vật

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

Chương trình làm việc dưới đây. [148] Nhân vật

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);}}}

Xin lỗi nếu tôi không làm rõ câu hỏi - chương trình của bạn không nên chấm dứt và nên liên tục cuộn xuống sóng (trừ khi cho đến SIGINT). Ngoài ra, xin vui lòng thêm một số lượng nhân vật.
ace_HongKongInependence

Xin lỗi đã quên về bit đó. Đã sửa bây giờ.
John ClearZ

Tôi nghĩ bạn có thể mất "Thread.S ngủ" và thay đổi "float" với var :) 117 ký tự. - Xin lỗi đã không thấy thời gian chờ đợi .. 133 ký tự bây giờ. 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

1
Tôi không thể biên dịch nó trong VS2010 khi Threading.Thread.Sleep(50)tôi làm gì sai?
Malachi

1
Tôi đã có thể chạy nó, nhưng tôi đã phải thêm một số Chân đế và Bán đại tràng và nó không giống nhau mỗi kỳ
Malachi


1

TI-BASIC, 30 byte

Cải thiện kích thước nhỏ so với câu trả lời khác, với chi phí chính xác. Lưu ý rằng TI-Basic về mặt kỹ thuật có | nhưng bạn phải chuyển nó qua máy tính hoặc sử dụng chương trình lắp ráp để truy cập nó.

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

Ái chà, không thấy thử thách này bao nhiêu tuổi! Sẽ cố gắng chơi gôn nhiều hơn (điều này chắc chắn là có thể) nhưng nó thực sự không đáng ...
MI Wright

Nhân tiện, .03πcó thể .1, vẫn còn trong khoảng yêu cầu.
lirtosiast

Bắt tốt đẹp, cảm ơn! Bạn có thấy cách nào tôi có thể đánh golf lệnh đầu ra không? Ngoài ra, vì tôi có CSE, tôi có thể có được điều này với biên độ phù hợp (màn hình 26 char) với chi phí của một vài byte.
MI Wright

Không, lệnh đầu ra có vẻ ổn - quá tệ khi Disp cần báo giá. Biên độ phải là 20 ký tự, thực sự, làm cho yêu cầu về chiều rộng màn hình 39. Vì vậy, nó sẽ chỉ hoạt động trên màn hình đồ thị, và không có cách nào ngắn để làm điều đó.
lirtosiast

1

Julia - 68

Chỉnh sửa: nhờ ML và ace.

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

Chà, nó không thể cạnh tranh với APL, nhưng đây là nỗ lực của tôi.

Đầu ra:

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

1
Tôi không biết Julia, nhưng nó có thể sử dụng .05thay vì 0.05trong sleepkhông?
ace_HongKongInependence

Thật ra là có! Cảm ơn
ĐCSTQ

Cắt nó xuống còn 68 ký tự : i=0;while 0<1;println(" "^int(20sin(.1i)+20)*"|");i+=1;sleep(.05)endĐợi sin(i/10)*20bằng bằng20sin(.1i)
ML

Tôi không biết Julia, nhưng bạn có thể sử dụng một vòng lặp để lặp lại trên tất cả các số tự nhiên không?
lirtosiast

1

MATLAB, 81 byte

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

Tôi bị lạm dụng thực tế là iluôn khởi tạo trong MATLAB, điều này có nghĩa rằng tôi có thể đặt fprintftrong whiletuyên bố mà không cần khởi tạo iđầu tiên. Điều này không có nghĩa là chương trình đầu tiên xuất ra một dòng trống, nhưng tôi nghĩ rằng điều này không bị cấm trong thông số kỹ thuật.

Hơn nữa, nó lạm dụng thực tế là Matlab sẽ bỏ qua hầu hết các ký tự điều khiển ASCII, in một khoảng trắng thay vì NULL (cũng cho dòng trống đầu tiên).


"Tôi đã lạm dụng thực tế là tôi luôn được khởi tạo trong MATLAB, điều đó có nghĩa là tôi có thể đặt fprintf trong câu lệnh while mà không khởi tạo i trước." Thực sự thông minh! +1!
Stewie Griffin

0

F # - 90 79 77 76

Đây là một giải pháp sử dụng đệ quy

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

Nó có thể được cải thiện hơn nữa.


Không biết gì về F #, tôi giả sử rằng Thread.S ngủ mong đợi một giá trị tính bằng ms, vì vậy bạn có thể thoát khỏi một trong số 0 và thực hiện Thread.S
ngủ

@ValarDohaeris Bạn nói đúng. Tôi đọc sai các yêu cầu.
pswg

0

Tự động làm nóng 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

Chạy kịch bản. Nó mở Notepad và in các ký tự. Nhấn Esc bất cứ lúc nào để thoát.


0

Clojure, 121

Phiên bản ngắn:

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

Phiên bản đẹp:

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

Thời gian là 64.

Nhập cái này vào lein replhoặc lưu trong tệp sin.cljvà chạy với lein exec sin.clj(yêu cầu plugin lein-exec).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.