정현파 인쇄 (수직)


42

터미널에서 수직으로 연속 정현파를 스크롤하여 인쇄합니다. 프로그램은 종료되어서는 안되며 웨이브를 계속 스크롤해야합니다 (어떻게 중단 될 때까지는 제외). 오버플로가 문제가 아니라고 가정 할 수 있습니다 (즉, 카운터 증가 또는 무한 재귀와 함께 무한 루프를 사용할 수 있음).

웨이브는 다음 속성을 만족해야합니다.

  • 진폭 = 20 자 (피크 진폭)
  • 기간 = 60 ~ 65 행 (포함)
  • 출력은 공백, 개행 및 |
  • 각 출력 라인 후 50ms 동안 일시 중지

샘플 출력 :

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

위의 출력은 SIGINT 또는 SIGKILL 또는 터미널 창 닫기와 같이 달리 중단되지 않거나 기계의 전원을 끄거나 태양이 지구를 삼키는 등의 경우를 제외하고는 계속 켜져 야합니다.

가장 짧은 코드가 승리합니다.

노트. Display Scrolling Waves 에서 비슷한 문제를 알고 있지만 정확히 동일하지는 않습니다. 내 문제에서, 웨이브는 "제자리에서"스크롤되지 않아야한다-터미널에서 출력하면된다. 또한 이것은 ASCII 기술 문제이므로 Mathematica를 사용하여 플롯하지 마십시오.


1
피크 진폭, 피크 대 피크 진폭 또는 제곱 진폭?
DavidC

피크 진폭.
ace_HongKongIndependence

1
공백이없고 s 만 웨이브를 그릴 수 있습니까?
Gelatin

1
모든 답변은 아직 유효하지 않습니다. 그들은 또한 SIGINT뿐만 아니라 SIGKILL을 위해 멈 춥니 다.
Max Ried

1
@Max Ried는 괜찮습니다. "중단되지 않는 한 영원히 계속해야합니다"로 변경하겠습니다.
ace_HongKongIndependence

답변:


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: 50ms 기다렸다가 돌아옵니다 1. ( ⎕DL실제로 대기 한 시간을 반환합니다.에 가까워지고 0.05값을 반올림합니다 1.)
  • ∇⍵+: 해당 번호 ( 1)를 추가 하고 함수를 다시 실행하십시오.

2
Darn ... 삼각 함수와 시간 지연이 여러분을 떠나게 할 것이라고 생각했습니다
ace_HongKongIndependence

2
여기에 33 문자 하나 :{⎕←'|'↑⍨-⌈20×1+1○⍵⋄∇.1+⍵⊣⎕DL.05}0
Tobia

3
@ace LOL. APL을 확인해야합니다. 참신한 언어는 아닙니다. 매우 오래되어 수십 년 동안 대형 시스템에서 사용되어 왔습니다. 다른 것에 비해 매우 독특합니다. IMHO 기호를 사용하면 ASCII 전용 파생물 (J)
Tobia

22

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

펄 영역에 접근. :)


1
이것은 @ace 자신의 C 답변에서 영감을 얻었습니다.
treamur

2
5E4대신 사용할 수 있다고 생각합니다 50000.
musiphil

2
/ 10 대신 * .1을 사용할 수 있다고 생각합니다.
moala

1
@musiphil, 5E4 사용에 대해서도 생각했지만 작동하지 않는 것으로 나타났습니다. 컴파일러 usleep()프로토 타입을 표시하지 않으면 5E4를 명시 적으로 캐스팅해야합니다.
treamur

2
다음과 같이 j에 대한 할당을 printf로 이동하여 두 문자를 더 잘라낼 수 있습니다 printf("%*s\n",j=21+sin(i++*.1)*20,"|"). 결과 유형은 여전히 ​​int이므로 유효한 필드 너비 인수입니다.
Art

12

Mathematica 121104 80 67 64

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

사인


질문은 수학을 사용하여 음모를 꾸미지 말라고 말합니다. 이것이 어떻게 든 다른가요?
Malachi

13
@ 말라 치 네. 이것은 다른 답변과 마찬가지로 수학을 사용하여 계산합니다. 수학을 사용하여 음모를 꾸미는 것은 수학에게 음모를 꾸미 x=20*sin(pi*y/30)+20거나 이와 유사한 것을 말하게 됩니다.
Justin

좋아, 나는 당신이 말하는 것을 이해하게 해줘서 감사합니다
Malachi

1
그리고 여기에 58 문자 버전이 있습니다Do[Spacer[70*Sin[n*Pi/32]+70]~Print~"|";Pause@.05,{n,18!}]
Ajasja

1
임 아닌 티카 사용자,하지만 난 당신이 바꿀 수 있다고 생각 1 == 1하는 0 < 11 개 문자를 감소.
CCP

11

펄, 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

증분을 .105에서 .1로 변경하면 56 문자로 루비를 이길 것입니다!
KevinColyer

@primo - 내 껍질 수면 ... 1 초도 시간이 짧은 수행합니까
KevinColyer

man sleepunsigned int sleep(unsigned int seconds);. 오류는 없지만 실제 수면 간격은 0입니다. 변경 : 제안은 당신에게 짧게하기 $d로를 $_한 다음 사용 (25+20*sin)하고, 변경 \n리터럴 개행을 위해.
primo

2
@primo man 1 sleepGNU / 리눅스 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

이것은 정현파가 아닙니다. 그것은 단순히 포물선입니다 (코드를 올바르게 읽으면). (정현파로 이것을 나타낼 수 있다면 기능을보고 싶습니다.)
Justin

사인은 공식이며 공식을 복제하면 여전히 정현파입니다. 이것은 아마도 어떤 방식으로 Sine의 변형 일 것입니다.
말라기

8

루비 56

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

풋을 p로 교체 할 수 있습니까?
Slicedpan

1
@Slicedpan 나는 무언가를 그리는 것이 어렵 기 때문에 그렇게하지 않을 것이라고 생각합니다. p각 줄 주위에 큰 따옴표를 추가하고 "도면"을 변경합니다.
daniero jan

7

비 펀지 (98) - (103) (100)

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

삼각 기능이없는 언어로이를 수행하는 프로그램을 응원합니다. 실제로 첫 번째 프로그램. 두 번째 줄은 단순히 데이터입니다. 공백 문자에 추가 된 sin의 ASCII 값에 해당하는 문자.

편집 : 나는 공간을 빼지 않고 3 문자를 저장했습니다. 정현파는 오른쪽으로 32 단위로 변환됩니다 (유효합니다).

Befunge는 또한 수면 명령 또는 이와 유사한 것을 가지고 있지 않습니다. 지문을 찾을 좋은 것입니다,하지만 난 하나를 찾을 수 없습니다, 그래서 ff*:*8*푸시 8*225**2( 405000) 및 kz무 조작을 실행하는 여러 번 (물론, 많은 시간 + 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-

나는 프로그램을 단축 시키려고 노력했고, 코사인 에 대한 테일러 시리즈 를보기로 결정했다 (사인은 계산하기 어렵다). 나는 변경 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-

하면 x(45)보다 큰 경우, -14 (다시, 테일러 급수 에러 조정)로 변경.


이 : 당신이 할 수있는 골프를 아래로 희망을, 정확히 내가 기대하고 대답의 종류
ace_HongKongIndependence

1
그곳에! 코드 길이를 -5 자로 줄였습니다! 그리고 여전히 개선의 여지가 있습니다!
Justin

@Quincunx 내 펄 솔루션은 내장 함수를 사용하지 않습니다;)
primo

6

파이썬, 108,93,90,89, 88

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

이제 무한 스크롤 :)

편집 : 좋아, 90. 충분합니까?

편집 : 편집 : 아니오, 89.

편집 : 편집 : 편집 : 88 boothby 덕분에 .


질문을 명확하게하지 않으면 죄송합니다. 프로그램이 종료되어서는 안되고 계속해서 아래로 스크롤해야합니다 (SIGINT 제외)
ace_HongKongIndependence

1
a=0.-> a=088에 도착
boothby

5

PHP, 59 자

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

1
echo ...;대신 에를 사용하여 몇 바이트를 절약 할 수 있습니다 fwrite(STDOUT,...);.
primo

어쨌든 커맨드 라인에서 호출 할 때 의미가 있습니다. 10 자 절약-프리모 감사합니다.
Alex Barrett

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

아주 좋아요 이러한 변경 사항으로 답변을 편집하지 않으므로 직접 게시해야합니다.
Alex Barrett

1
@ace 그것은 ansi 인코딩으로 저장해야합니다. ideone은 자동으로 모든 것을 utf-8로 변환합니다. ~ƒõ단지 속기입니다 "|\n".
primo

4

C64 기본, 64 PETSCII 문자

여기에 이미지 설명을 입력하십시오

PAL C64에서 For i=0 to 2:next i약 1 초 동안 순환합니다. 0,05 초이므로 지연 시간이 존중됩니다.


3

자바 스크립트 88 76 78 자

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

Kendall Frey의 코드를 기반으로합니다.


당신은 초기화하지 i않으므로 웨이브 대신 직선을 인쇄합니다.
gilly3

내 실수는 ... 아마도 콘솔에서 Kendall의 스크립트를 이미 실행했기 때문에 효과가 있었기 때문에 이미 초기화되었습니다.
joeytje50

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
내가 int를 만들고 sin () 호출 내에서 10.0 (또는 9.9 문자를 저장하기 위해 9.9)으로 나눈 경우 작동합니까? i;main(j){for(j=0;j++<20+sin(i/10.0)*20;)putchar(32);puts("|");usleep(50000);i++;main();}
shiona

printf("%*s\n",(int)(21+sin(i++/10.)*20),"|")
forf

1
흠 ... 내 생각에이 아이디어를 사용하면 특히 죄책감을 느낄 것입니다. 특히 이것이 내 자신의 질문 일 때 ... 답을 직접 올리시겠습니까?
ace_HongKongIndependence

알았어 할게. 감사. :)
treamur

1
당신이를 제거하면 두 개 이상의 문자 면도 할 수 있습니다 j=0: i;main(j){for(;j++<21+sin(i/10.)*20;)putchar(32);puts("|");usleep(50000);i++;main(1);}. 이것은 프로그램이 0 개의 인수로 호출되었다는 가정에 의존합니다.
Josh

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 Wright

진폭을 제외하고 ...
lirtosiast

글쎄요,하지만 바이트 단위로는 괜찮습니다.
MI Wright

2

자바 스크립트-88

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

누군가가 실제로 영리한 것을 생각 해낼 수 있다고 확신합니다.


2

제이 - 103,58,57, 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

열차의 구조에 대해 혼란스럽게함으로써 이것을 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

2

하스켈-75

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

불행히도, 나는 문자 수를 두 배로 늘리지 않고 프로그램을 50ms 일시 중지시킬 수 없었기 때문에 콘솔을 넘치지 만 사인파를 생성합니다.


다음은 일시 중지 된 전체 코드입니다 (줄 바꿈이있는 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
일시 중지는 요구 사항 중 하나였습니다. 일시 중지로 코드를 게시 할 수 있습니까?
Justin

알았어요 Haskell을 통해 코드를 가져 오지 않고 일시 중지 할 수 있기를 바랍니다.
Zaq

진폭으로 나는 최대 진폭, 즉 현재 프로그램의 진폭의 두 배를 의미합니다. 20+20*sin x자격을 갖추기 위해 대신 변경할 수도 있습니다 .
ace_HongKongIndependence

그렇지. 나는 질문의 그 부분을 잘못 해석했다고 생각합니다.
Zaq

2

펄 6:46 자

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

를 사용하여 무한 게으른 범위를 만들고 0,0.1 ... *루프 오버하십시오. 곱셈에서 1로 숫자를 say반환 Bool::True하는 리턴 을 사용하면 단일 명령문으로 유지할 수 있습니다.


그 이유를 알 수 sleep.05분리되어야한다. 하지만 사이의 공간 궁금해 say하고 ' '필수?
Matthias

예 : s say' '사용할 수있는 경우 "2 개의 연속 된 열"오류가 발생 say(' ')하지만이 경우에는 1 개의 문자가 추가됩니다.
Ayiko

1
@Matthias : Perl 6에서 listops는 인수를 취하거나 공백을 갖거나 괄호를 사용할 필요가 없습니다. Perl 5와 달리 코드 골프 용으로 설계된 언어는 아닙니다 (그러나 많은 내장 기능이 포함되어 있으므로 사용 가능합니다).
Konrad Borowski

@xfix 설명해 주셔서 감사합니다. 나는 언어를 좋아하지만 아직 작업 프로젝트에서 언어를 사용할 수 없기 때문에 아직 철저히 조사하지 않았습니다. 그러나 항상 Perl 6 스크립트를 작성하려고합니다. @ Ayiko, 나는 당신의 Perl 6 게시물 감사합니다 :-)
Matthias

2

보기 흉한 자바 스크립트-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

스칼라, 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))이것이 유효한 구문이라고 가정하면 1 문자 씩 줄입니다 (스칼라에 대한 경험이 없음)
ace_HongKongIndependence

고맙지 만, 나는 방금 나 자신을 발견했다 :)
ValarDohaeris

1

파이썬 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 시계를 더 쉽게 얻을 수 있기 때문에 "잠자기"보다는이 구현이 CPU에서 갈아 입습니다. 이 접근법은 friol 's를 이길 수는 없지만 재미있어서 떠날 것입니다.


1

씨#

[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

컴파일러는 까다로울 수 있습니다.
Malachi

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

씨#

매직 라인 [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

"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);}}
Medeni Baykal

1
VS2010에서 컴파일 할 수 없어서 Threading.Thread.Sleep(50)뭔가 잘못하고 있습니까?
Malachi

1
나는 그것을 달릴 수 있었지만, 일부 브라켓과 세미콜론을 추가해야했고 매번 똑같이 보이지는 않았다
Malachi

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

좋은 캐치, 감사합니다! 출력 명령을 내릴 수있는 방법이 있습니까? 또한 CSE가 있기 때문에 몇 바이트의 비용으로 올바른 진폭 (26 문자 화면)으로 얻을 수 있습니다.
MI Wright

아니요, 출력 명령이 잘 보입니다. Disp에 견적이 필요합니다. 진폭은 실제로 20 자 여야하며, 화면 너비 요구 사항은 39입니다. 따라서 그래프 화면에서만 작동하므로 짧은 방법은 없습니다.
lirtosiast

1

줄리아-68

편집 : ML과 에이스 덕분에.

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

글쎄, APL과 경쟁 할 수는 없지만 여기 내 시도가 있습니다.

산출:

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

1
나는 줄리아 모르지만, 그것은 사용할 수 있습니다 .05대신 0.05sleep?
ace_HongKongIndependence

사실 맞아요! 감사합니다
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

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에서 초기화, fprintfwhile초기화하지 않고 문 i첫 번째. 이것은 프로그램이 먼저 빈 줄을 출력한다는 것을 의미하지만 사양에서는 이것이 금지되지 않는다고 생각합니다.

또한 Matlab은 대부분의 ASCII 제어 문자를 무시하고 NULL 대신 공백을 인쇄합니다 (첫 번째 빈 줄에도 해당).


"저는 MATLAB에서 항상 초기화된다는 사실을 남용했습니다. 즉, i를 먼저 초기화하지 않고도 while 문에 fprintf를 넣을 수있었습니다." 정말 영리합니다! +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은 ms 단위의 값을 기대한다고 가정하므로 0 중 하나를 제거하고 Thread.Sleep 50을 수행 할 수 있습니다. :)
ValarDohaeris

@ValarDohaeris 당신이 맞아요. 요구 사항을 잘못 읽었습니다.
pswg

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

클로저, 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.