พิมพ์คลื่นไซน์ (แนวตั้ง)


42

พิมพ์คลื่นไซน์แบบต่อเนื่องที่เลื่อนไปตามแนวตั้งบนเทอร์มินัล โปรแกรมไม่ควรยุติและควรเลื่อนคลื่นอย่างต่อเนื่อง (ยกเว้นจนกว่าจะถูกรบกวน) คุณอาจสันนิษฐานว่าการล้นเกินนั้นไม่ใช่ปัญหา (เช่นคุณอาจใช้ลูปไม่สิ้นสุดกับตัวนับที่เพิ่มขึ้นหรือการเรียกซ้ำแบบไม่สิ้นสุด)

คลื่นควรตอบสนองคุณสมบัติดังต่อไปนี้:

  • Amplitude = 20 chars (ความกว้างสูงสุด)
  • จุด = 60 ถึง 65 บรรทัด (รวม)
  • ผลลัพธ์ควรประกอบด้วยช่องว่าง, บรรทัดใหม่และ |
  • หลังจากแต่ละบรรทัดของเอาต์พุตหยุดชั่วคราวเป็น 50ms

ตัวอย่างผลลัพธ์:

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

ผลลัพธ์ข้างต้นควรดำเนินต่อไปตลอดไปเว้นแต่จะถูกขัดจังหวะเป็นอย่างอื่นเช่น SIGINT หรือ SIGKILL หรือปิดหน้าต่างเทอร์มินัลหรือคุณปิดเครื่องหรือดวงอาทิตย์กลืนโลก ฯลฯ

รหัสที่สั้นที่สุดชนะ

บันทึก. ฉันตระหนักถึงปัญหาที่คล้ายกันในDisplay Scrolling Wavesแต่ไม่เหมือนกันทั้งหมด ในปัญหาของฉันคลื่นจะไม่ถูกเลื่อน "ในสถานที่" - เพียงแค่เอามันออกไปใน terminal นอกจากนี้นี่เป็นปัญหาแบบ ascii-art ดังนั้นอย่าใช้ Mathematica ในการพล็อต


1
แอมพลิจูดสูงสุดแอมพลิจูดสูงสุดถึงสูงสุดหรือแอมพลิจูดรูตสแควร์
DavidC

แอมพลิจูดสูงสุด
ace_HongKong การพึ่งพากัน

1
มันเป็นการตกลงที่จะดึงคลื่นที่มีเพียง | s และไม่มีช่องว่างหรือไม่?
เจลาติ

1
คำตอบทั้งหมดยังไม่ถูกต้อง พวกเขายังหยุดเพื่อ SIGKILL ไม่ใช่เพียงเพื่อ SIGINT
Max Ried

1
@ Max Ried ดีฉันจะเปลี่ยนเป็น "ควรดำเนินต่อไปตลอดไปเว้นแต่ขัดจังหวะเป็นอย่างอื่น"
ace_HongKongIndependence

คำตอบ:


12

APL (35)

(ใช่มันมีขนาดพอดีกับ 35 ไบต์นี่คือการเข้ารหัส APL ขนาด 1 ไบต์ )

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

คำอธิบาย:

  • {... }1: เรียกใช้ฟังก์ชันด้วย 1 ที่จุดเริ่มต้น
  • 1○⍵×.1: sin(⍵×π÷30)ใกล้พอสำหรับการทำงานของรัฐบาลในการ ( 1○คือsin)
  • -21+⌈20: ปรับให้เป็นมาตรฐาน1..40และลบล้าง
  • '|'↑⍨: ใช้Nอักขระตัวสุดท้ายจากสตริง'|'(ซึ่งส่งผลให้มีช่องว่างด้วย a |ที่ท้าย
  • ⎕←: แสดงผล
  • ⌈⎕DL.05: รอ 50 ms 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-only (J)
Tobia

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

โซลูชันตัวอักษร 69 ตัวพร้อมกับ while loop แทนการเรียกซ้ำ:

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

ใกล้อาณาเขตของ perl :)


1
นี่เป็นแรงบันดาลใจจากคำตอบ C ของ @ ace
treamur

2
ฉันคิดว่าคุณสามารถใช้แทน5E4 50000
musiphil

2
ฉันคิดว่าคุณสามารถใช้ * .1 แทน / 10
moala

1
@musiphil ฉันคิดเกี่ยวกับการใช้ 5E4 แต่ปรากฎว่ามันไม่ทำงาน: หากไม่มีการแสดงusleep()ต้นแบบคอมไพเลอร์คุณจะต้องใช้ 5E4 อย่างชัดเจน
treamur

2
คุณสามารถตัดออกจากตัวละครทั้งสองมากขึ้นโดยการย้ายมอบหมายให้เจเข้า printf printf("%*s\n",j=21+sin(i++*.1)*20,"|")เช่นนี้: ประเภทผลลัพธ์ยังคงเป็น int ดังนั้นจึงเป็นอาร์กิวเมนต์ความกว้างของฟิลด์ที่ถูกต้อง
ศิลปะ

12

Mathematica 121 104 80 67 64

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

ซายน์


คำถามบอกว่าจะไม่ใช้ mathematica เพื่อพล็อตมัน มันแตกต่างจากที่ใด?
มาลาคี

13
@ Malachi ใช่ นี่ใช้การคำนวณทางคณิตศาสตร์เพื่อคำนวณเช่นเดียวกับคำตอบอื่น ๆ การใช้ mathematica เพื่อพล็อตจะบอก mathematica ให้พล็อตx=20*sin(pi*y/30)+20หรือสิ่งที่คล้ายกัน
Justin

ตกลงฉันได้รับสิ่งที่คุณกำลังพูดขอขอบคุณสำหรับการชี้แจง
มาลาคี

1
และนี่คือรุ่นถ่าน 58 ตัวDo[Spacer[70*Sin[n*Pi/32]+70]~Print~"|";Pause@.05,{n,18!}]
Ajasja

1
อิ่มไม่ผู้ใช้ Mathematica แต่ฉันคิดว่าคุณสามารถเปลี่ยน1 == 1ไป0 < 1จะลดลง 1 ถ่าน
CCP

11

Perl, 48 (68)

GNU sleep version: 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 โดยใช้ฟังก์ชัน shell sleep การเพิ่มขึ้นที่สั้นลงตามตัวอย่างทับทิม ลดการใช้ $ "และ $ 0" เพื่อดูคำแนะนำจากผลงานของ Primo ขอบคุณสำหรับคำแนะนำ Primo


ฉันบันทึกสิ่งนี้เป็นไฟล์test.plและทำงานperl ./test.plได้อย่างไรก็ตามเวลาที่รอไม่ตรงกับข้อกำหนด นอกจากนี้แอมพลิจูดของคลื่นก็เล็กเกินไป (แอมพลิจูดนี้หมายถึงความยาวระหว่างจุดสูงสุดและตำแหน่งสมดุล)
ace_HongKong การพึ่งพาอาศัยกัน

ฉันเดาว่าถ้าฉันเปลี่ยนส่วนเพิ่มจาก. 105 เป็น .1 ฉันจะเอาชนะ ruby ​​ที่ 56 chars!
KevinColyer

@primo - การนอนหลับของกระสุนของฉันสั้นกว่า 1 วินาที ...
KevinColyer

man sleepunsigned int sleep(unsigned int seconds);→ มันจะไม่เกิดข้อผิดพลาด แต่ช่วงเวลาสลีปจริงเป็นศูนย์ คำแนะนำบางอย่างเพื่อทำให้คุณสั้นลง: เปลี่ยน$dเป็น$_แล้วใช้(25+20*sin)และเปลี่ยน\nเพื่อขึ้นบรรทัดใหม่ตามตัวอักษร
primo

2
@primo man 1 sleepบนเชลล์ทุบตี GNU / Linux บอกเราว่า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
  • เส้นโค้งนั้นสมมาตรอย่างสมบูรณ์แบบ
  • ทุกช่วงเวลาเหมือนกัน
                    |
                      |
                         |
                           |
                             |
                               |
                                |
                                  |
                                   |
                                    |
                                     |
                                      |
                                       |
                                       |
                                        |
                                        |
                                        |
                                        |
                                        |
                                       |
                                       |
                                      |
                                     |
                                    |
                                   |
                                  |
                                |
                               |
                             |
                           |
                         |
                      |
                    |
                  |
               |
             |
           |
         |
        |
      |
     |
    |
   |
  |
 |
 |
|
|
|
|
|
 |
 |
  |
   |
    |
     |
      |
        |
         |
           |
             |
               |
                  |
                    |
                      |
                         |
                           |
                             |
                               |
                                |
                                  |
                                   |
                                    |
                                     |
                                      |
                                       |
                                       |
                                        |
                                        |
                                        |
                                        |
                                        |
                                       |
                                       |
                                      |
                                     |
                                    |
                                   |
                                  |
                                |
                               |
                             |
                           |
                         |
                      |
                    |
                  |
               |
             |
           |
         |
        |
      |
     |
    |
   |
  |
 |
 |
|
|
|
|
|
 |
 |
  |
   |
    |
     |
      |
        |
         |
           |
             |
               |
                  |
                    |

โปรดทราบว่านี่ไม่ใช่คลื่นไซน์แน่นอน แต่เป็นการประมาณกำลังสอง วางแผนต่อต้านบาปจริง:

ที่ความละเอียดที่ต้องการสิ่งเหล่านี้จะแยกไม่ออกจากสายตา

หากความสวยงามนั้นไม่สำคัญนักฉันขอเสนอทางเลือก60 ไบต์ด้วยระยะเวลา 62 ความกว้างสูงสุด ~ 20.02 และความไม่สมดุลเล็กน้อย:

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

นี่ไม่ใช่คลื่นไซน์ มันเป็นพาราโบลา (ถ้าฉันอ่านรหัสของคุณถูกต้อง) (หากคุณสามารถแสดงสิ่งนี้ด้วยคลื่นไซน์บางอย่างฉันชอบที่จะเห็นฟังก์ชั่น)
Justin

ไซน์เป็นสูตรถ้าคุณทำซ้ำสูตรมันจะยังคงเป็นคลื่นไซน์ และนี่อาจเป็นตัวแปรของซายน์ในแฟชั่นบางอย่าง
มาลาคี

8

ทับทิม 56

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

อนุญาตให้แทนที่ด้วย p ได้หรือไม่
slicedpan

1
@Slicedpan ฉันคิดว่าฉันจะไม่ทำเพราะนี่เป็นความท้าทายในการวาดบางสิ่งบางอย่าง pจะเพิ่มเครื่องหมายคำพูดคู่ล้อมรอบแต่ละบรรทัดและแก้ไข "รูปวาด"
daniero

7

Befunge 98 - 103 100

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

ไชโยสำหรับโปรแกรมที่ทำสิ่งนี้ในภาษาที่ไม่มีความสามารถเกี่ยวกับวิชาตรีโกณมิติ โปรแกรมแรกในความเป็นจริง บรรทัดที่สองเป็นเพียงข้อมูล ตัวละครที่สอดคล้องกับค่า ascii ของบาปเพิ่มเข้าไปในช่องว่าง

แก้ไข:ฉันบันทึก 3 ตัวอักษรโดยไม่ลบพื้นที่ออก sinusoid แปล 32 หน่วยทางด้านขวา (ซึ่งใช้ได้)

Befunge ยังไม่มีคำสั่ง sleep หรืออะไรที่คล้ายกัน มันคงจะดีถ้าหาลายนิ้วมือ แต่ฉันหามันไม่เจอดังนั้นff*:*8*กด8*225**2( 405000) แล้วก็kzวิ่ง noop ที่หลาย ๆ ครั้ง บนบรรทัดคำสั่งของ windows พร้อมpyfungeสิ่งนี้กลายเป็นประมาณ 50 มิลลิวินาทีดังนั้นฉันบอกว่าฉันดี หมายเหตุ: หากใครรู้ลายนิ้วมือที่ดีสำหรับเรื่องนี้โปรดแจ้งให้เราทราบ

ส่วนสุดท้ายของรหัสเพียงตรวจสอบว่าตัวนับ (สำหรับสายข้อมูล) ผ่านข้อมูลหรือไม่หากเป็นตัวนับจะถูกรีเซ็ตเป็น 0

ฉันใช้สิ่งนี้เพื่อสร้างข้อมูล


ซีรี่ส์ Taylor

แม้ว่าเวอร์ชั่นนี้จะมี 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 - 30x

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

คือการดำเนินการของชุดเทย์เลอร์ของฉันที่x = 0เมื่อxเป็นค่าในกอง

\$\f`!4*j01-* 

ลบล้างค่าของชุดเทย์เลอร์หากจำเป็นต้องปรับชุดเทย์เลอร์

b2*+

ทำให้คลื่นโคไซน์เป็นบวก มิฉะนั้นการพิมพ์จะไม่ทำงาน

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

พิมพ์คลื่น

ff*:*8*kz1+

makeshift รอ 50 มิลลิวินาทีจากนั้นเพิ่มขึ้น x

:f3*`!3*j$e-

หากxมากกว่า 45 ให้เปลี่ยนเป็น -14 (การปรับข้อผิดพลาดซีรีย์เทย์เลอร์อีกครั้ง)


นี่คือคำตอบที่ฉันคาดหวังว่าคุณจะลงสนามได้ :)
ace_HongKongIndependence

1
มี! ฉันลดความยาวโค้ดได้สำเร็จโดย -5 ตัวอักษร! และยังมีห้องพักสำหรับการปรับปรุง!
Justin

@Quincunx ของฉัน Perl โซลูชั่นนี้ยังไม่ได้ใช้ใด ๆ ที่สร้างขึ้นในฟังก์ชั่นหนุน;)
พรีโม่

6

งูหลาม 108,93,90,8988

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

ขณะนี้มีการเลื่อนแบบไม่มีที่สิ้นสุด :)

แก้ไข: ตกลง 90 พอไหม

แก้ไข: แก้ไข: ไม่, 89

แก้ไข: แก้ไข: แก้ไข: 88 ขอบคุณที่บูธโดย


ขออภัยถ้าฉันยังไม่ได้ตอบคำถามอย่างชัดเจน - โปรแกรมของคุณไม่ควรยุติและควรเลื่อนคลื่นอย่างต่อเนื่อง (ยกเว้นจนถึง SIGINT)
ace_HongKongIndependence

1
a=0.-> a=0พาคุณไปที่ 88
บูธโดย

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
@ ต้องมีการบันทึกด้วยการเข้ารหัส ansi ideone แปลงทุกอย่างเป็น utf-8 โดยอัตโนมัติ เป็นเพียงการจดชวเลข~ƒõ "|\n"
primo

4

C64 พื้นฐาน 64 ตัวอักษร PETSCII

ป้อนคำอธิบายรูปภาพที่นี่

บน PAL C64 For i=0 to 2:next iรอบสำหรับประมาณ 0.1 วินาทีดังนั้นเวลาหน่วงจึงเป็นที่ยอมรับ


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

ฉัน; หลัก (ญ) {สำหรับ (ญ = 0; J ++ <20 + sin (i / 10) * 20.) putchar (32); ทำให้ ( "|"); usleep (50000); ฉัน ++; main () ;}

float i; main (j) {สำหรับ (j = 0; j ++ <20 + sin (i) * 20;) putchar (32); put ("|"); usleep (50000); i + =. 1; main ( );}

คอมไพล์ด้วย-lmแฟล็กฉันคิดว่าฉันต้องเพิ่ม 3 ตัวอักษร


1
มันจะทำงานได้ไหมถ้าคุณทำให้ฉันเป็น 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

คุณสามารถนำมาลงขนาดตัวอักษร 76 หรือดังนั้นโดยใช้ printf () เพื่อแทนที่สำหรับวง:printf("%*s\n",(int)(21+sin(i++/10.)*20),"|")
treamur

1
อืม ... ฉันจะรู้สึกผิดจริง ๆ ถ้าฉันใช้ความคิดนี้ในคำตอบของฉันโดยเฉพาะเมื่อนี่เป็นคำถามของฉันเอง ... คุณจะลองโพสต์คำตอบด้วยตัวเองหรือไม่?
ace_HongKong การพึ่งพาอาศัยกัน

ตกลงจะทำ ขอบคุณ :)
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
Heh เนื่องจาก TI-BASIC ถูกนับในโทเค็นหนึ่ง / สองไบต์นี่คือ 33 ไบต์ (ไม่ใช่ "56 chars") ดังนั้นจริง ๆ แล้วมันควรจะชนะการท้าทาย!
MI Wright

ยกเว้นเรื่องแอมพลิจูด ...
lirtosiast

ก็ใช่ แต่ไปทีละไบต์ก็ไม่เป็นไร
MI Wright


2

เจ - 103,58,5754

ขอบคุณผู้ชายที่น่ากลัวจาก IRC

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

ในคำจากขวาไปซ้ายจะอ่าน: เริ่มจาก 0 อนันต์คูณทำ: บาป, เพิ่ม 1, คูณด้วย 20, พื้น, ผนวก 1 (ดังนั้นมันจึงกลายเป็นอาร์เรย์ของ 2 องค์ประกอบ), คัดลอกสองไบต์ '|' ตามลำดับพิมพ์รอ 0.05s และเพิ่ม 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แม้ว่าจะดูเหมือนจะนานกว่าก่อนที่จะจุดต่ำสุด
algorithmshark

2

Haskell - 75

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

น่าเสียดายที่ฉันไม่สามารถให้โปรแกรมหยุด 50 ms โดยไม่เพิ่มจำนวน char ของฉันดังนั้นมันจึงท่วมคอนโซล แต่มันสร้างคลื่นไซน์


นี่คือรหัสเต็มรูปแบบที่มีการหยุดชั่วคราว (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_HongKong การพึ่งพากัน

อ๋อแน่นอน ฉันเดาว่าฉันตีความผิดส่วนนั้น
Zaq

2

Perl 6: 46 ตัวอักษร

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

สร้าง Range ที่ไม่มีที่สิ้นสุดโดยใช้0,0.1 ... *วนรอบนั้น sayส่งกลับBool::Trueที่ numifies เป็น 1 ในการคูณด้วยวิธีนี้ฉันสามารถเก็บไว้ในงบเดียว


ฉันสามารถดูสาเหตุsleepและ.05ต้องแยกจากกัน แต่ฉันสงสัยว่าช่องว่างระหว่างsayและ' 'บังคับ?
Matthias

ใช่: s มันทำให้ "2 วาระในแถว" ข้อผิดพลาดสำหรับsay' 'หนึ่งสามารถใช้say(' ')แต่ที่ 1 ถ่านพิเศษในกรณีนี้ ...
Ayiko

1
@Matthias: ใน Perl 6 ผู้ฟังจะต้องไม่ขัดแย้งกันมีช่องว่างหลังจากนั้นหรือใช้วงเล็บ มันไม่ใช่ภาษาที่ออกแบบมาสำหรับการเล่นกอล์ฟรหัสซึ่งแตกต่างจาก Perl 5 (แต่มันมีคุณสมบัติที่ดีมากมายในตัวดังนั้นจึงใช้งานได้)
Konrad Borowski

@xfix ขอบคุณสำหรับคำอธิบาย ฉันชอบภาษา แต่ฉันยังไม่ได้ดูอย่างละเอียดเพราะฉันยังไม่สามารถใช้ในโครงการงานได้ อย่างไรก็ตามฉันวางแผนที่จะเขียนสคริปต์ Perl 6 เสมอ @ Ayiko ฉันขอขอบคุณ Perl 6 ข้อความของคุณ :-)
Matthias

2

Javascript fugly - 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,8987

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 อักขระโดยสมมติว่านี่เป็นไวยากรณ์ที่ถูกต้อง (ฉันไม่เคยมีประสบการณ์เกี่ยวกับ Scala)
ace_HongKongIndependence

ขอบคุณ แต่ฉันเพิ่งค้นพบว่าตัวเอง :)
ValarDohaeris

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)

แทนที่จะเป็น "sleep" การติดตั้งนี้จะทำการบดที่ cpu เพราะ python ช่วยให้สามารถรับ cpu clock แบบ floating-point ได้ง่ายกว่านาฬิกาแขวน วิธีนี้จะไม่ชนะฟริออล แต่ก็สนุกดีฉันเลยทิ้งมันไว้


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 # ที่มีอยู่เพื่อเรียกใช้และฉันไม่สามารถลงคะแนนได้เพราะฉันมีชื่อเสียงไม่เพียงพอ

มันหายไปสองสาม{และหายไป)หลังจากประกาศสำหรับวง

ฉันคิดว่าความแปรปรวนของคลื่นเมื่อวิ่งนั้นเป็นเพราะวิธีที่เราพยายามแสดงคลื่นนี้


ถ้าเราไม่นับ Namespace และการประกาศเมธอดมันจะเป็น [104]ตัวอักษรสำหรับเวอร์ชั่นที่ใช้งานได้

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

คำตอบ C # อื่น ๆ ใช้งานได้บน gmcs มันไม่สามารถคอมไพล์ในตอนแรก แต่ฉันคิดว่าเป็นเพราะมีอักขระบางตัวที่ไม่สามารถพิมพ์ได้ในซอร์สโค้ด หลังจากพิมพ์อีกครั้งในไฟล์ว่างการคอมไพล์สำเร็จ
ace_HongKong การพึ่งพากัน

คอมไพเลอร์สามารถจู้จี้จุกจิกใช่มั้ย
มาลาคี

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 #

The Magic Line [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_HongKong การพึ่งพากัน

ขออภัยลืมเกี่ยวกับบิตนั้น แก้ไขแล้ว
John ClearZ

ฉันคิดว่าคุณสามารถสูญเสีย "Thread.Sleep" s และเปลี่ยน "float" ด้วย var :) 117 chars - ขออภัยไม่เห็นเวลารอ .. 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)ฉันทำอะไรผิดพลาดได้หรือไม่?
มาลาคี

1
ฉันสามารถทำให้มันทำงานได้ แต่ฉันต้องเพิ่มวงเล็บและ Semi-colons และมันก็ดูไม่เหมือนกันทุกช่วงเวลา
Malachi


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-char) ด้วยราคาเพียงไม่กี่ไบต์
MI Wright

ไม่คำสั่งเอาต์พุตดูดี - แย่มากที่ Disp ต้องมีเครื่องหมายคำพูด แอมพลิจูดควรมี 20 ตัวอักษรจริง ๆ แล้วทำให้ต้องการความกว้างของหน้าจอ 39 ดังนั้นมันจะทำงานบนหน้าจอกราฟเท่านั้นและไม่มีวิธีการทำเช่นนั้น
lirtosiast

1

จูเลีย - 68

แก้ไข: ขอบคุณ ML และ ace

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

มันไม่สามารถแข่งขันกับ APL ได้ แต่นี่เป็นความพยายามของฉัน

เอาท์พุท:

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

1
ผมไม่ทราบว่าจูเลีย แต่มันก็เป็นไปได้ที่จะใช้.05แทน0.05ในsleep?
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 แต่คุณสามารถใช้เพื่อวนซ้ำตัวเลขธรรมชาติทั้งหมดแทนได้หรือไม่?
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 ซึ่งหมายความว่าฉันจะใส่fprintfในwhileคำสั่งโดยไม่ต้องเริ่มต้นiครั้งแรก นี่หมายความว่าโปรแกรมส่งเอาต์พุตบรรทัดว่างก่อน แต่ฉันคิดว่านี่ไม่ได้ถูกห้ามในข้อมูลจำเพาะ

นอกจากนี้ยังเป็นการละเมิดข้อเท็จจริงที่ว่า Matlab จะไม่สนใจอักขระควบคุม ASCII ส่วนใหญ่โดยพิมพ์ช่องว่างแทน NULL (เช่นเดียวกับบรรทัดว่างบรรทัดแรก)


"ฉันทำร้ายความจริงที่ว่าฉันเริ่มต้นใน MATLAB เสมอซึ่งหมายความว่าฉันสามารถใส่ fprintf ลงในคำสั่ง while โดยไม่ต้องเริ่มต้นฉันก่อน" ฉลาดจริงๆ! +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.Sleep 50 :)
ValarDohaeris

@ValarDohaeris คุณพูดถูก ฉันอ่านข้อกำหนดผิดไป
pswg

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

เรียกใช้สคริปต์ มันเปิด Notepad และพิมพ์ตัวละคร กด 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.