สร้างเครื่องเมตรอนอม


36

บทนำ

เมื่อหลายวันก่อนฉันต้องการเครื่องเมตรอนอมสำหรับบางอย่าง ฉันไม่มีที่ว่างดังนั้นฉันจึงดาวน์โหลดแอพจาก App Store แอพนี้มีขนาด 71 MB !!!
71 MB สำหรับการทำ tic-toc ... ?!
ดังนั้นรหัส - กอล์ฟเข้ามาในใจของฉันและฉันสงสัยว่าพวกคุณบางคนสามารถปรับปรุงสิ่งนี้ได้ไหม

ท้าทาย

กอล์ฟรหัสบางอย่างที่ส่งเสียงบางอย่าง มันค่อนข้างไม่เกี่ยวข้องเลยว่าเสียงแบบไหน หากจำเป็นต้องสร้างไฟล์เสียงบางส่วน ... แต่เสียงบี๊บของระบบจะทำงานเช่นกัน ( นี่คือเสียงที่ฉันสร้างขึ้น ... ไม่มีอะไรพิเศษ )

อินพุต : จังหวะต่อนาทีของเอาต์พุตเครื่องเมตรอนอม

ตัวอย่าง

นี่เป็นเวอร์ชั่น Java ที่ไม่ใช่กอล์ฟ! มันเป็นเพียงการแสดงให้คุณเห็นงาน

public class Metronome {
  public static void main(String[] args) throws InterruptedException {
    int bpm = Integer.valueOf(args[0]);
    int interval = 60000 / bpm;

    while(true) {
        java.awt.Toolkit.getDefaultToolkit().beep();
        // or start playing the sound
        Thread.sleep(interval);
        System.out.println("Beep!");

    }
  }
}

กฎระเบียบ

คุณไม่สามารถใช้ lib ภายนอกได้อนุญาตเฉพาะเครื่องมือภาษาเท่านั้น
จำนวนไบต์ของซอร์สโค้ดจะนับ ... ไม่ใช่ไฟล์เสียง

นี่คือดังนั้นการส่งที่มีจำนวนไบต์น้อยที่สุดจะชนะ!

แก้ไข:

ตัวอย่างเอาต์พุต:ดังนั้นสิ่งนี้จะเป็นเอาต์พุตสำหรับ120 bps : link


1
คุณสามารถเพิ่มตัวอย่างบางส่วนสำหรับ I / O (บันทึกเสียงและอัปโหลดโพสต์ลิงก์ที่นี่)?
Addison Crump

2
คำถาม: เมื่อคุณพูดว่า "ห้องสมุดภายนอก" นั่นรวมถึงห้องสมุดที่แนะนำด้วยภาษาหรือไม่? (ฉันจะไม่ใช้สิ่งนี้ แต่ตัวอย่างอยู่ใน Vitsy ที่ฉันสามารถเข้าถึงเชลล์หรือ JS (แต่ JS นั้นถูกสร้างขึ้นภายใน))
Addison Crump

3
คุณสามารถเพิ่มตัวอย่างกระดานผู้นำได้ไหม?
Addison Crump

1
ฉันสงสัยว่าแอพที่คุณดาวน์โหลดส่วนใหญ่นั้นเป็นกราฟิกและเสียงประกอบ มันเหมือนกับแอพไฟฉายที่ไม่ทำอะไรเลยนอกจากเปลี่ยนหน้าจอเป็นสีขาวทั้งหมด แต่ก็ยังสามารถใช้งานได้ถึงสิบ MB ...
Darrel Hoffman

1
ข้อกำหนดเกี่ยวกับความแม่นยำคืออะไร ในตัวอย่างของคุณทั้งbeep()เอาต์พุตคอนโซลและไม่ใช่ IIRC ในทันที ไม่sleep()เป็นที่รู้จักสำหรับ beeing ที่ถูกต้อง
Num Lock

คำตอบ:


19

Mathematica ขนาด 26 ไบต์

Pause[Beep[];60/#]~Do~∞&

Doโดยปกติจะใช้เป็นวง "สำหรับ" ในแง่ที่แคบที่สุด: ทำซ้ำส่วนของรหัสนี้สำหรับแต่ละiจากxถึงy... หรือแม้กระทั่งทำซ้ำส่วนของรหัสnนี้ แทนที่จะเป็นจำนวนnเราสามารถให้ค่าอนันต์เพื่อสร้างวงวนไม่สิ้นสุด ร่างกายวนรอบPause[Beep[];60/#]ซึ่งเป็นเพียงวิธี golfy ของการเขียนBeep[];Pause[60/#]ที่#เป็นข้อโต้แย้งฟังก์ชั่น

หากเป็นที่ยอมรับสำหรับการแก้ปัญหาที่จะระเบิดโทรสแต็คในที่สุดเราสามารถบันทึกหนึ่งไบต์ด้วยโซลูชั่นแบบเรียกซ้ำ:

#0[Beep[];Pause[60/#];#]&

ฉันไม่รู้ว่า~Do~∞เป็นไปได้ การForวนซ้ำทำให้ฉันถึง 29 ไบต์เท่านั้น (เช่นกันโดยส่วนตัวฉันเชื่อว่ารุ่น 26 ไบต์เป็นรุ่นที่ใช้ได้เพียงอย่างเดียว)
LegionMammal978

@ LegionMammal978 แต่น่าเสียดายที่~Do~∞ดูเหมือนจะไม่ทำงานเมื่อมาจากตัวแปร (ฉันลองใช้สิ่งนั้นเมื่อตีกอล์ฟเครื่องความจริงของคุณ)
Martin Ender

1
Attributes[Do]รวมถึงHoldAllดังนั้นฉันเดาว่า_~Do~∞มีรูปแบบการประเมินพิเศษ
LegionMammal978

@ LegionMammal978 ดูเหมือนว่าจะมีตัวแปรมากกว่าเพราะข้อความแสดงข้อผิดพลาดสำหรับDo[...,a]ตำแหน่งที่aไม่มีที่สิ้นสุดแสดงให้เห็นว่าการโทรเป็นDo[...,{a}]จริง
Martin Ender

14

Pyth, 11 10 9 ไบต์

ขอขอบคุณที่Adnan#สำหรับการเตือนฉันเกี่ยวกับ

#C7.dc60Q

ตลอดกาล ( #) พิมพ์รหัสC har 7จากนั้น sleep ( .d) 60วินาทีหารด้วย ( c) อินพุต ( Q)


@Adnan ลืมเรื่องนั้นไป ขอบคุณ
PurkkaKoodari

คุณต้องการพื้นที่หรือไม่
lirtosiast

@ThomasKwa ใช่ IIRC 7.จะถูกแยกวิเคราะห์เป็นตัวเลข
Conor O'Brien

5
โอ้ #pythnoob
Conor O'Brien

2
ฉันนอนไม่หลับเมื่อฉันพยายาม มันยังคงพิมพ์เวลา unix
busukxuan

8

JavaScript, 36 45 42 41 34 ไบต์

บันทึกแล้ว 1 ไบต์ขอบคุณ @RikerW

บันทึกแล้ว 1 ไบต์ขอบคุณ @ETHproductions

n=>{for(;;sleep(60/n))print("\7")}

นี่คือฟังก์ชั่น

ถ้าฉันใช้`\7`SpiderMonkey บ่นตัวอักษรฐานแปดจะเลิกใช้

ทางเลือก 31 ไบต์

n=>{for(;;sleep(60/n))print``}

ปัญหาคือถอด unprintables แต่ควรทำงาน


Dammit ฉันเพิ่งจะโพสต์สิ่งนี้ ฉันยังคงโพสต์มัน (เพราะมันใช้โหนดและทั้งหมด) เพราะฉันใช้วิธีการที่แตกต่างกัน
Addison Crump

หากคุณดูจากวิธีที่ฉันถามคำถามโซลูชันแบบเรียกซ้ำจะไม่สามารถทำได้ Metronomes ถูกสร้างขึ้นมาเพื่อการทำงานและการทำงาน ... ไม่ใช่เพื่อการทำงานล้มเหลวหลังจากผ่านไประยะหนึ่ง
แพร์

@PEAR สิ่งนี้ไม่ควรผิดพลาดเพราะไม่มีการเพิ่มตัวแปร สิ่งเดียวที่อาจทำให้เกิดความผิดพลาดได้คือบัฟเฟอร์ของเทอร์มินัลยกเว้นในคอมพิวเตอร์สมัยใหม่ที่อาจใช้เวลา> 50-100 ปีที่ฉันคิดว่า
Downgoat

สภาพแวดล้อมแบบนี้ทำงานภายใต้อะไร? ฉันลองใช้ chrome และ Node.js แต่ฉันไม่สามารถใช้งานได้
starbeamrainbowlabs

@starbeamrainbowlabs สิ่งนี้ใช้เชลล์ JavaScript (SpiderMonkey)
Downgoat

8

Bash, 53 55 41 ไบต์

ขอบคุณ @Dennis ที่โกนหนวด14 ไบต์1

โอเคเวลาจริง: ฉันกลัวการตีกอล์ฟ ความช่วยเหลือใด ๆ จะได้รับการชื่นชมอย่างมาก

echo " ";sleep `bc -l<<<60/$1`;exec $0 $1
      ^ That's ASCII char 7

1อึศักดิ์สิทธิ์ ไม่น่าแปลกใจที่ไม่มีใครสามารถเอาชนะเดนนิสได้


เป็นwhile 1ไปได้ไหม
แพร์

@PEAR Nupe - ลองใช้แล้ว
Addison Crump

while printf \\aบางที?
Neil

วิธีนี้ใช้ไม่ได้เนื่องจาก bash ใช้การหารจำนวนเต็ม bcคุณจะต้องใช้
ปาเก็ตตี้

1. ตัวละคร BEL ไม่ได้พิเศษสำหรับ Bash ดังนั้นคุณไม่จำเป็นต้องใส่เครื่องหมายคำพูด 2. ถ้าคุณอ่านเข้าเป็น CLA readที่คุณไม่จำเป็นต้อง 3. echoมีอยู่ด้วยรหัส 0 trueเพื่อให้คุณสามารถใช้คำสั่งที่แทน
Dennis

7

JavaScript ES6 (เบราว์เซอร์) 43 ไบต์

นี่อาจเป็นการยืดกฎ:

x=>setInterval('new Audio(1).play()',6e4/x)

ตั้งชื่อให้ฟังก์ชั่นนี้ (เช่นF=x=>...) และป้อนลงในคอนโซลของเบราว์เซอร์ในหน้านี้ จากนั้นเรียกใช้ฟังก์ชันด้วย bps ของคุณเช่นF(60)และรอให้เวทมนต์เกิดขึ้น :-)

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

รุ่นที่ปลอดภัยกว่า 57 ไบต์

หากรหัสข้างต้นไม่ได้รับอนุญาตด้วยเหตุผลบางอย่างลองแทน:

x=>setInterval('new Audio("//ow.ly/Xrnl1").play()',6e4/x)

ทำงานบนหน้าใดก็ได้!


นี่เป็นวิธีการแก้ปัญหา intersting มันจะยิ่งสั้นลงเมื่อคุณดาวน์โหลดและเปลี่ยนชื่อไฟล์ใช่มั้ย
แพร์

@PEAR นั่นจะสั้นกว่า แต่ก็ต้องมีหน้าเว็บของตัวเองพร้อมไฟล์เสียงในโฟลเดอร์เดียวกันเพื่อให้ทำงานได้
ETHproductions

โอ้มันของ JavaScript xD ... คุณกำลังขวา
ลูกแพร์

@ PEAR ที่นั่นฉันทำแล้ว นี่เป็นโซลูชั่นใหม่ภายในกฎหรือไม่
ETHproductions

ฮะ. คุณสามารถระบุได้ว่าเป็น JS พร้อมกับหน้าเว็บบางหน้า มันเป็นล่ามที่มีอยู่ก่อนแล้วดังนั้นจึงเป็นภาษาที่ถูกต้อง
Addison Crump

6

05AB1E , 31 ไบต์

รหัส:

I60s/[7ç?D.etime.sleep(#.pop())

ถ้าฉันมีบิวท์อินสำหรับการรอ N วินาทีนี่อาจเป็น 11 ไบต์ น่าเสียดายที่นี่ไม่ใช่กรณี นี่คือคำอธิบาย:

I                               # Push input
 60                             # Push 60
   s                            # Swap the top 2 items
    /                           # Divide the top 2 items
     [                          # Infinite loop
      7ç                        # Push the character \x07
        ?                       # Output it, which give a sound
         .e                     # Evaluate the following as Python code
           time.sleep(       )  # Wait for N seconds
                      #         # Short for stack
                       .pop()   # Pop the last item

ใช้การเข้ารหัส ISO 8859-1


นี่ต้องเป็นหนึ่งใน 05AB1E แรกที่ตอบo.Ôมันดูแปลกมากที่เห็นtime.sleepและ.pop()อยู่ตรงกลางของรหัสเช่นนั้น ;)
Kevin Cruijssen

6

osascript ขนาด 39 ไบต์

on run a
repeat
beep
delay 60/a
end
end

มีคำสั่งเรียกว่าบี๊บอย่างแท้จริง? Sweeeet!

ทำงานได้เฉพาะบน Mac OS X เนื่องจากมีใบอนุญาต จำกัด แต่ต้องทำให้ทำ:

osascript -e "on run a
repeat
beep
delay 60/a
end
end" bpm

6

Python, 68 67 57 ไบต์

บันทึกแล้ว 1 ไบต์ขอบคุณ @FlagAsSpam

บันทึกแล้ว 9 ไบต์ขอบคุณ @Adnan

import time
a=input()
while 1:print"\7";time.sleep(60./a)

นอกจากนี้ยังใช้เวลาน้อยกว่า 2 ไบต์หลังจากแปลงการสิ้นสุดบรรทัดไปเป็นรูปแบบ UNIX

เวอร์ชันเก่ากว่านั้นใช้ bpm เป็นอาร์กิวเมนต์บรรทัดคำสั่ง (66 ไบต์):

import sys,time
while 1:print"\7";time.sleep(60./int(sys.argv[1]))

4
ทำprint"\7";ไม่ได้เหรอ ฉันไม่แน่ใจ แต่ฉันค่อนข้างแน่ใจว่าได้ผล
Addison Crump

@Andan ไม่อินพุต () ร้องขอการป้อนข้อมูลจากผู้ใช้ ฉันไม่ทราบว่าเป็นข้อมูลที่ถูกต้องหรือไม่ นอกจากนี้ยังจำเป็นต้องแปลงเป็นตัวเลข
webwarrior

1
วิธีการเกี่ยวกับa=input()และaแทนที่int(sys.argv[1])? ฉันคิดเสมอว่า Python 2 จะประเมินอินพุตโดยอัตโนมัติดังนั้นจึงไม่จำเป็นต้องมีการแปลง int แต่ฉันอาจผิด
Adnan

@ input()อันที่จริงแล้วการประเมินอัตโนมัติ ฉันลืมเกี่ยวกับคุณสมบัตินั้น มันค่อนข้างจะไม่เน้นเสียง - อาจเป็นมรดกตกทอดมาจากสมัยก่อน
webwarrior

สามารถtime.sleep(60./a)ถูกแทนที่ด้วยtime.sleep(60./input())ในขณะที่การลบอย่างสมบูรณ์a=input()?
ตบมือ


4

Vitsy ขนาด 14 ไบต์

a6*r/V1m
<wVO7

โหมด verbose (ล่ามเร็ว ๆ นี้):

0:                              // a6*r/V1m
push a; // 10
push 6;
multiply top two; // 60
reverse stack; // bpm on top
divide top two; // bpm/60
save/push permanent variable; 
push 1;
goto top method; // goes to 1
1:                              // <wVO7
go backward; // infinite loop, from the bottom of 1
wait top seconds;
save/push permanent variable; // pushes the bpm in terms of seconds of delay
output top as character;
push 7;

โดยทั่วไปฉันใช้wโอเปอเรเตอร์เพื่อรอจำนวนวินาทีตามที่ระบุโดยbpm/60ห่อด้วยลูปไม่ จำกัด จากนั้นฉันก็ส่งเสียงด้วยเทอร์มินัลเอาท์พุตของตัวอักษร ASCII 7 ( BEL)


ดูดี แต่ฉันจะทดสอบได้อย่างไร :)
แพร์

@PEAR คุณจะต้องดาวน์โหลดล่าม (ลืมที่จะเชื่อมโยงมันในชื่อ) java -jar Vitsy.jar <filename>บันทึกไว้ในไฟล์และทำงานด้วย
Addison Crump

4

C #, 118 ไบต์

class A{static int Main(string[]a){for(;;System.Threading.Thread.Sleep(60000/int.Parse(a[0])))System.Console.Beep();}}

โซลูชันพื้นฐาน


ทำไมไม่พิมพ์ ASCII ถ่าน 7
Addison Crump

@FlagAsSpam มันอีกต่อไป: ใช้ระบบเสียงเตือนและการพิมพ์ใช้ตัวอักษรSystem.Console.Beep(); System.Console.Write('<\a character>');
LegionMammal978

ว้าว นั่นเป็นเรื่องมากมายที่จะเขียนตัวละคร
Addison Crump

4

Java, 103 82 ไบต์

ขอบคุณ @Justin สำหรับการกำจัด 21 ไบต์!

โอ้ geez

void x(int b)throws Exception{for(;;Thread.sleep(60000/b))System.out.print('\7');}

วิธีการและเวอร์ชันของโปรแกรมตัวอย่าง


ทำไมไม่ลองSystem.out.print('\7');แทนjava.awt.Toolkit.getDefaultToolkit().beep();ล่ะ?
Justin

@Justin \ ใช้เพื่อหลบหนีอักขระ Regex เท่านั้น
Addison Crump

1
ไม่มีแบ็กสแลชเป็นลำดับการยกเว้น '\7'เป็นตัวละครในระฆังซึ่งส่งเสียงเมื่อพิมพ์ออกมา
Justin

@Justin Huh ฉันเคยโยนข้อผิดพลาดมาเสมอ (เมื่อใช้เครื่องหมายคำพูดคู่) ความผิดพลาดของฉัน. ขอบคุณ! : D
Addison Crump

3

รหัสเครื่องGMC-4ขนาด 21.5 ไบต์

GMC-4 เป็นคอมพิวเตอร์ 4 บิตโดย บริษัท ชื่อ Gakken เพื่อสอนหลักการของภาษาแอสเซมบลีในชุดคำสั่งที่เรียบง่ายและคอมพิวเตอร์ ประจำวันนี้จะเข้าในที่อยู่หน่วยความจำข้อมูล0x5Dผ่าน0x5Fในทศนิยม big-(นั่นคือหนึ่งหลักต่อตอด)

อัลกอริทึมนั้นเป็นการเพิ่มอินพุตเข้าสู่หน่วยความจำและรอ 0.1 วินาทีจนกระทั่งอย่างน้อย 600 จากนั้นจึงลบ 600 และส่งเสียงบี๊บในวงวนไม่สิ้นสุด เนื่องจาก GMC-4 มีฟังก์ชั่นการแลกเปลี่ยนการลงทะเบียนจำนวนมาก แต่ไม่มีฟังก์ชั่นการคัดลอกลงทะเบียนจึงเป็นวิธีที่ทำได้ยาก

ใน hex (บรรทัดที่สองคือตำแหน่งในหน่วยความจำ):

A24A14A04 80EC AF5A2EF AE5A1EF AD5A0EF 8A6 F2AF09 86ADEEE9F09
012345678 9ABC DEF0123 4567890 ABCDEF0 123 456789 ABCDEF01234

ในการชุมนุม:

    tiy 2     ;ld y, 0x2
    AM        ;ld a, [0x50 + y]
    tiy 1
    AM
    tiy 0
    AM
start:
    tia 0     ;ld a, 0x0
    cal timr  ;pause for (a+1)*0.1 seconds
    tiy F
    MA        ;ld [0x50 + y], a
    tiy 2
    cal DEM+  ;add a to [0x50 + y]; convert to decimal and carry.
    tiy E     ;do the same for the second digit
    MA
    tiy 1
    cal DEM+
    tiy D     ;and the third.
    MA
    tiy 0
    cal DEM+
    tia A
    M+
    jump beep
    jump start
beep:
    tia 6
    tiy D
    cal DEM-
    cal SHTS  ;'play short sound'
    jump start

Disclaimer:

ฉันไม่ได้เป็นเจ้าของ GMC-4 ฉันได้ตรวจสอบโปรแกรมนี้ด้วยเอกสารอย่างพิถีพิถันจากออนไลน์ แต่ฉันอาจทำผิดพลาด ฉันก็ไม่รู้เหมือนกันว่า endianness ดูเหมือนว่า GMC-4 จะเป็นนักดนตรีตัวยง แต่ฉันไม่แน่ใจ หากใครเป็นเจ้าของ GMC-4 และสามารถยืนยันสิ่งนี้ / บอกฉันถึง endianness ของ GMC-4 ฉันจะขอบคุณมันมาก


3

C, 48 ไบต์

void f(int b){while(printf(""))Sleep(60000/b);}
                            ^ literal 0x07 here

โซลูชันเฉพาะสำหรับ Windows (Sleep () เพื่อเฉพาะ)

ฉันยัง (ab) ใช้ความจริงที่ว่า printf () คืนค่าจำนวนตัวอักษรที่พิมพ์เพื่อใช้เป็นเงื่อนไขลูปไม่สิ้นสุด

มีอักขระอยู่ระหว่างเครื่องหมายอัญประกาศคู่ในการเรียกใช้ printf () แต่จะไม่แสดงที่นี่ด้วยเหตุผลบางประการ หากมีข้อสงสัยให้คัดลอกและวางลงใน Sublime Text 2 หรือ Notepad ++ BELตัวละครจะแสดงเป็น

สิ่งนี้เริ่มต้นเป็นวิธีแก้ปัญหา C ++ แต่มันตกลงไปใน C-subset ของ C ++ (เพราะคุณรู้ว่าSleep()มันสั้นกว่าstd::this_thread::sleep_for(std::chrono::milliseconds())) และprintf()สั้นกว่าstd::cout<<)


3

AppleScript 94 ไบต์

ฉันรู้ว่าฉันค่อนข้างช้าและนี่คือโพสต์แรกของฉันที่นี่ แต่อะไรก็ตาม

กล่องโต้ตอบแสดง "" คำตอบเริ่มต้น ""
ตั้งค่า x เป็น 60000 / ผลลัพธ์ของข้อความที่ส่งคืน
ทำซ้ำ
เสียงเตือน
หน่วงเวลา x
ปลาย

Ungolfed:

กล่องโต้ตอบแสดง "" คำตอบเริ่มต้น ""
ตั้งค่า x เป็น 60000 / (ข้อความผลลัพธ์ถูกส่งคืน)
ทำซ้ำ
    เสียงเตือน
    หน่วงเวลา x
จบซ้ำ

เฮ้คำตอบใหม่ :) โชคไม่ดีที่ฉันไม่สามารถลองโพสต์ของคุณได้ถ้าไม่มี Mac) - แต่ต้องขอบคุณมาก ๆ
PEAR

@PEAR ยินดีต้อนรับ :)
คุณ

ยินดีต้อนรับสู่การเขียนโปรแกรมปริศนาและรหัสกอล์ฟ นี่เป็นคำตอบที่ดี +1 โปรดตอบต่อไป!
wizzwizz4

2

VBScript, 113 66 ไบต์

a=InputBox("")
Do
WScript.Echo(Chr(7))
WScript.Sleep(60000/a)
Loop

โปรแกรมนี้ง่ายพอ มันต้องป้อนข้อมูลก้องตัวละครเบลและรอ ขอบคุณ Niel สำหรับการกำจัดโปรแกรมเกือบครึ่ง!


มีอะไรผิดปกติกับWScript.Echo CHR(7)? นอกจากนี้คุณหมายถึง60000อะไร
Neil

@ Neil Ah ใช่ ลืมเกี่ยวกับสิ่งเหล่านั้น;
Conor O'Brien

2

Ruby, 37 33 ไบต์

m=->b{loop{puts"\7"
sleep 6e1/b}}

ตรงไปตรงมาสวย

นี่คือฟังก์ชั่นแลมบ์ดา หากคุณต้องการ 60 m[60]ครั้งต่อนาทีคุณจะทำ:


ในทางทฤษฎี$><<?\aควรทำงานให้เสียงบี๊บ และไม่จำเป็นต้องให้ชื่อสำหรับ proc คุณ (โซลูชั่น JavaScript ทั้งหมดที่มีฟังก์ชั่นลูกศรไขมันยังปล่อยให้มันไม่ได้มอบหมาย) ->b{loop{$><<?\a;sleep 6e1/b}}[60]คุณสามารถเรียกมันโดยไม่ระบุชื่อเกินไป:
จัดการ

@manatwork ฉันมีเพียงแค่ทับทิม 2.x ดังนั้นฉันไม่สามารถทดสอบ?\a; คุณมี Ruby 1.x ไหม ถ้าเป็นเช่นนั้นคุณสามารถทดสอบว่ามันใช้งานได้?
Justin

ฉันมี Ruby 1.9.3 และรหัสนั้นไม่มีข้อผิดพลาดเกิดขึ้น แต่ฉันมีปัญหากับการทดสอบอีก: ไม่มีเสียงเตือนบนเครื่องของฉัน ไม่ว่าจะเป็นทับทิมหรืออะไรก็ตาม ตั้งอะไรซักอย่างหนึ่งโดยไม่รู้ว่าอะไร
จัดการ

2

Japt, 30 ไบต์

6e4/U i`?w Au¹o('../1').play()

ควรจะไบต์ตัวอักษร? ทดสอบออนไลน์! (ขออภัยเกี่ยวกับป๊อปอัปที่จะชะลอการแสดงผลสองสามช่วงแรกซึ่งจะถูกลบในไม่ช้า)9A

มันทำงานอย่างไร

6e4/U i"new Audio('../1').play()  // Implicit: U = input bps
6e4/U                             // Calculate 60000 / U.
      i                           // Set a timed event every that many milliseconds,
       "new Audio('../1').play()  // running this code every time.
                                  // ../1 is the path to the file used in my JS entry.

2

คางทูม 18 ไบต์

R I F  H 60/I W *7

อ่าน BPM ให้เป็นตัวแปร I จากนั้น F {ที่มีช่องว่างสองช่องหลังจาก} คือลูป infinate หยุดเป็นเวลา 60 วินาที / BPM จากนั้นเขียน $ CHR (7) {Ascii: BEL} ไปยังเอาต์พุตมาตรฐานโดยให้เอาต์พุตเสียงที่ต้องการจากนั้นรีสตาร์ทที่วงวนไม่สิ้นสุด


2

Java, 321 ตัวอักษร

ฟังดูดีมาก ใช้งานได้กับระบบที่รองรับ MIDI เท่านั้น

import javax.sound.midi.*;import java.util.*;class A{public static void main(String[] a) throws Exception{int d=new Scanner(System.in).nextInt();Synthesizer b=MidiSystem.getSynthesizer();b.open();MidiChannel c=b.getChannels()[0];c.programChange(116);while(true){c.noteOn(0,100);Thread.sleep((int)(d/.06));c.noteOff(0);}}}

.


ดูดี แต่นี่ใช้ไม่ได้สำหรับฉัน: pastebin.com/0CbGYkU0
แพร์

@PEAR แก้ไขแล้ว ฉันลืมนักแสดง
username.ak

@PEAR และการนำเข้า
username.ak

@PEAR ฉันเปลี่ยน ops มาบ้างเพราะไม่มีเสียง
username.ak

2

ChucK , 90 ไบต์

เสียงสีขาวที่เปิดและปิดทุกสองเห็บ

60./Std.atoi(me.arg(0))*1000=>float s;while(1){Noise b=>dac;s::ms=>now;b=<dac;s::ms=>now;}

คำอธิบาย

60./Std.atoi(me.arg(0)) //Convert the input to an int and divide 60 by it
*1000                   //Multiply by 1000 (in order to avoid s::second)
=>float s;              //Store it as a float in variable s
while(1)                //Forever,
{Noise b=>dac;          //Connect a noise generator b to the audio output
s::ms=>now;             //Wait for s milliseconds
b=<dac;                 //Disconnect b from the audio output
s::ms=>now;}            //Wait for s milliseconds

สิ่งนี้ถูกสร้างขึ้นมาเพื่อเปิดเสียงที่เป็นจังหวะจากนั้นจึงปิดเสียงที่จังหวะหลังจากนั้น

รุ่น 98 93 ไบต์ (นักเล่น)

เสียงสีขาวเล่นเป็นเวลา 10 มิลลิวินาทีต่อเห็บ

60./Std.atoi(me.arg(0))*1000-9=>float s;while(1){Noise b=>dac;10::ms=>now;b=<dac;s::ms=>now;}

สิ่งนี้ทำให้เป็นการคลิกแทนการเปิดและปิดสัญญาณรบกวนอย่างต่อเนื่อง


2

Perl 5, 36 ไบต์

{{$|=print"\a";sleep 60/$_[0];redo}}

รูทีนย่อย ใช้มันเป็น

sub{{$|=print"\a";sleep 60/$_[0];redo}}->(21)

sleepมีหน่วยเป็นวินาทีคุณจึงไม่สามารถส่งเสียงบี๊บได้มากกว่า 60 ครั้งต่อนาทีไม่แน่ใจว่าเป็นข้อกำหนดหรือไม่ นอกจากนี้คุณอาจยังคงนับไบต์เดียวกัน แต่มีโปรแกรมเต็มรูปแบบโดยทำสิ่งที่ชอบ: $|=<>;{print"\a";sleep 60/$|;redo}(ไม่สามารถทดสอบได้ในขณะนี้)
ChatterOne

@ChatterOne sleepตามเอกสารของคุณถูกต้องเกี่ยวกับ แต่มันก็ได้ผลสำหรับฉัน
msh210

1

Jolf, 7 ไบต์, ไม่ใช่การแข่งขัน

ฉันเพิ่มเสียงหลังจากทำสิ่งที่ท้าทายมาก ๆ แล้ว

TΑa/Αaj
T       set an interval
 Αa      that plays a short beep (Α is Alpha)
   /Αaj  every 60000 / j (the input) seconds. (Αa returns 60000)

หากคุณต้องการล้างเสียงนี้ให้จดเอาท์พุท xบอกว่าตัวเลขที่เป็น ดำเนินการคำสั่ง Jolf อื่น~CP"x"และช่วงเวลาจะถูกล้าง


1

Zsh , 32 ไบต์

<<<$'\a'
sleep $[60./$1]
. $0 $1

ขึ้นอยู่กับคำตอบของ bash ชั้นนำ แต่sources แทนexecs แหล่งลิงก์ TIO $0:aเนื่องจากวิธีการเรียกใช้งานไฟล์ต้นฉบับ แต่จะทำงานได้หากไม่มีไฟล์ดังกล่าว

ลองออนไลน์!


คุณมาสายไปงานเลี้ยง แต่นี่ดูเหมือนเป็นทางออกที่ดีจริงๆ!
แพร์

ฉันรู้ว่าฉันมาสาย แต่ฉันรู้สึกเหมือนเล่นกอล์ฟวันนี้ ตัดสินใจที่จะตรวจสอบแท็กเพลงเพื่อความสนุกสนานและพบกับความท้าทายนี้ ดีหนึ่ง btw!
GammaFunction

0

Bash + bc + > <> , 44 ไบต์

จากข้อเท็จจริงที่ว่าล่าม> <> ช่วยให้คุณสามารถกำหนดเวลาติ๊กได้:

python fish.py -t $(bc -l<<<"2/$1/60") -c 7o

รหัส> <> เป็น7oและควรเอาท์พุทBELของตัวละคร, การผลิตเสียงเตือนระบบ มันจะวนซ้ำจนกว่าจะถูกขัดจังหวะ ถูกตั้งค่า (2 / RPM) / 60 เพื่อให้โค้ดทั้งหมดจะถูกเล่นรอบต่อนาที * 60 ครั้งต่อวินาที
-t


ขอบคุณมากสำหรับคำตอบใหม่หลังจากผ่านไประยะเวลาหนึ่งหลังจากการเผยแพร่ ใช้งานไม่ได้สำหรับฉัน :( ไม่แน่ใจว่ามีปัญหาเกี่ยวกับระบบของฉันหรืออย่างอื่นฉันดาวน์โหลด fish.py จาก GitHub แล้วใช้งานคอมม่าของคุณ (openSUSE) มีข้อผิดพลาดนี้: (standard_in) 1: ข้อผิดพลาดทางไวยากรณ์: ปลา .py [-h] (<ไฟล์สคริปต์> | -c <code>) [<options>] fish.py: ข้อผิดพลาด: อาร์กิวเมนต์ -t / - ติ๊ก: คาดว่าจะมีหนึ่งอาร์กิวเมนต์
PEAR

คุณbcติดตั้งแล้วใช่ไหม ดูเหมือนว่า$(bc -l<<<"2/$1/60")จะไม่สร้างผลลัพธ์ใด ๆ ฉันจะเพิ่มลงในรายการภาษาของคำตอบ ฉันยังไม่สามารถทดสอบคำตอบได้อย่างเต็มที่ดังนั้นอาจมีข้อผิดพลาดบางอย่างเช่นกัน
แอรอน

0

SmileBASIC ขนาด 26 ไบต์

INPUT B$BGMPLAY@8T+B$+"[C]

มันสามารถเล่นเครื่องดนตรี midi ทั่วไปแม้ว่าสิ่งใดก็ตามที่สูงกว่า 9 จะใช้ไบต์มากขึ้น


0

Stax, 17 ไบต์

ü7»♥O╚⌂╥☻≈OyM╜Δ∩`

หรือแตกออก:

4|A48*x/W2|A]pc{| }*

โปรแกรมเอาต์พุตไบต์ที่เมื่อป้อนผ่านเครื่องมือบรรทัดคำสั่ง aplay ที่มีการตั้งค่าเริ่มต้นจะสร้างสัญญาณรบกวนจังหวะ อินพุตถูกใช้เป็น bpm

ตัวอย่าง:

example-stax-interpreter metronome.stax -i "60" | aplay

คุณควรได้ยินเสียงบี๊บที่น่ากลัวในเวลาที่ต้องการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.