introduction
Il y a quelques jours, j'avais besoin d'un métronome pour quelque chose. Je n'en avais pas, j'ai donc téléchargé une application depuis l'App Store. L'application avait une taille de 71 Mo !!!
71 Mo pour faire du tic-toc ...?!
Alors le code-golf m’est venu à l’esprit et je me demandais si certains d’entre vous pourraient améliorer cela.
Défi
Golf un code qui produit du son. Quel genre de son importe peu. Si nécessaire, créez un fichier son ... mais un bip système fera également l'affaire. ( Voici quelques sons que j'ai créés ... rien de spécial. )
Input : Les battements par minute des sorties du métronome.
Exemple
Ceci est une version Java non-golfée! C'est juste pour vous montrer la tâche.
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!");
}
}
}
Règles
Vous ne pouvez pas utiliser de bibliothèque externe, seuls les outils du langage lui-même sont autorisés.
Seuls les octets du code source comptent ... pas le fichier son.
C'est du code-golf , donc la soumission avec le moins d'octets gagne!
MODIFIER:
Exemple de sortie: Donc, quelque chose comme ceci serait la sortie pour 120 bps : link
beep()
sortie de la console et la console ne sont pas exactement IIRC instantanées. Nisleep()
est connu pour être précis.Réponses:
Mathematica, 26 octets
Do
est normalement utilisé comme une boucle "for" dans le sens le plus étroit: répétez ce morceau de code pour chacuni
dex
ày
... ou même simplement répétez ce bout de coden
. Au lieu d'un nombre,n
nous pouvons lui donner l'infini pour créer une boucle infinie. Le corps de la bouclePause[Beep[];60/#]
est juste une manière amusante d’écrire,Beep[];Pause[60/#]
où se#
trouve l’argument de la fonction.Si la solution peut éventuellement faire exploser la pile d'appels, nous pouvons économiser un octet avec une solution récursive:
la source
~Do~∞
c'était possible. UneFor
boucle ne m'a amené qu'à 29 octets. (De plus, je pense personnellement que la version à 26 octets est la seule valide.)~Do~∞
ne semble pas fonctionner lorsque∞
vient d'une variable. (J'ai essayé de l'utiliser en jouant au golf avec votre machine à vérité.)Attributes[Do]
comprendHoldAll
, donc je suppose que cela_~Do~∞
a un modèle d'évaluation spécial.Do[...,a]
wherea
hold infinity indique en réalité l'appelDo[...,{a}]
.Pyth,
11109 octetsMerci à Adnan de me l'avoir rappelé
#
.Forever (
#
),C
affiche le code du har7
. Puis sommeil (.d
)60
secondes divisé par (c
) entrée (Q
).la source
7.
serait analysé comme un nombre.#pythnoob
JavaScript,
36 45 42 4134 octetsEnregistré 1 octet grâce à @RikerW
Enregistré 1 octet grâce à @ETHproductions
Ceci est une fonction.
Si je l'utilise
`\7`
, SpiderMonkey se plaint que les littéraux octaux sont obsolètes.Alternative, 31 octets
Le problème est que les non imprimables sont éliminés, mais cela devrait fonctionner.
la source
Bash,
535541 octetsMerci à @Dennis d'avoir réduit de 14 octets 1
Ok, heure de vérité: je suis terrible au golf bash. Toute aide serait très appréciée.
1 merde sainte. Pas étonnant que personne ne puisse surclasser Dennis.
la source
while 1
possible?while printf \\a
peut-êtrebc
.read
. 3.echo
existe avec le code 0, vous pouvez donc utiliser cette instruction au lieu detrue
.JavaScript ES6 (navigateur), 43 octets
Cela peut être étirer les règles:
Donnez un nom à cette fonction (par exemple
F=x=>...
) et entrez-le dans la console du navigateur sur cette page . Ensuite, appelez la fonction avec vos bps, par exempleF(60)
, et attendez que la magie se produise. :-)Pourquoi ça marche? Eh bien, se
b.html
trouve dans le même dossier qu’un fichier nommé1
, qui est l’exemple de fichier son de l’OP. Je ne sais pas si cela respecte les règles (je suppose que c'est comme la version shell; il doit être exécuté dans un environnement spécifique), mais cela en valait la peine.Version plus sûre, 57 octets
Si le code ci-dessus n'est pas autorisé pour une raison quelconque, essayez plutôt ceci:
Fonctionne sur n'importe quelle page!
la source
05AB1E , 31 octets
Code:
Si j'avais intégré pour attendre N secondes, cela aurait pu être 11 octets. Malheureusement, ce n'est pas le cas. Voici l'explication:
Utilise le codage ISO 8859-1.
la source
time.sleep
et.pop()
au milieu du code comme ça. ;)osascript, 39 octets
Il y a littéralement une commande appelée bip? Sweeeet!
Exécutable uniquement sur Mac OS X en raison d'une licence restreinte. Pour l'exécuter, procédez comme suit:
la source
Python,
686757 octetsEnregistré 1 octet grâce à @FlagAsSpam
9 octets sauvés grâce à @Adnan
En outre, il fallait 2 octets de moins après la conversion des fins de ligne au format UNIX.
Ancienne version utilisant bpm comme argument de ligne de commande (66 octets):
la source
print"\7";
? Je ne suis pas sûr, mais je suis à peu près sûr que ça marche.a=input()
-vous dea
remplacerint(sys.argv[1])
? J'ai toujours pensé que Python 2 évalue automatiquement les entrées et n'a donc pas besoin de la conversion int, mais je me trompe peut-être.input()
effectivement. J'ai oublié cette fonctionnalité. C'est cependant un peu antipythonique - probablement un héritage du passé.time.sleep(60./a)
être remplacé partime.sleep(60./input())
, tout en enlevant complètementa=input()
?AutoIt , 56 octets
la source
Vitsy, 14 octets
Mode verbeux (interprète à venir):
Fondamentalement, j'utilise l'
w
opérateur pour attendre un certain nombre de secondes comme spécifié parbpm/60
, enveloppé dans une boucle infinie. Ensuite, je fais du bruit avec la sortie de terminal du caractère ASCII 7 (BEL
).la source
java -jar Vitsy.jar <filename>
.C #, 118 octets
Solution de base.
la source
System.Console.Beep();
, et l'impression du personnage utiliseSystem.Console.Write('<\a character>');
.Java,
10382 octetsMerci à @Justin d'avoir réduit de 21 octets!
Oh bon sang.
Méthode et version golfée du programme exemple.
la source
System.out.print('\7');
au lieu de lajava.awt.Toolkit.getDefaultToolkit().beep();
?'\7'
est le personnage de la cloche, qui produit un son lorsqu’il est impriméCode machine GMC-4 , 21,5 octets
Le GMC-4 est un ordinateur 4 bits d'une société appelée Gakken, qui enseigne les principes du langage d'assemblage dans un jeu d'instructions simplifié et sur un ordinateur. Cette routine prend en entrée les adresses de mémoire de données
0x5D
par le biais0x5F
, en décimal gros-boutiste (qui est, par un chiffre quartet).L’algorithme ajoute l’entrée à la mémoire et attend 0.1 secondes, jusqu’à 600 minimum, puis soustrait 600 et émet un bip dans une boucle infinie. Étant donné que le GMC-4 dispose de nombreuses fonctions d’échange de registre mais pas de fonction de copie de registre , cela se fait à la dure.
En hex (la deuxième ligne est la position en mémoire):
En assemblée:
Avertissement:
Je ne possède pas réellement un GMC-4. J'ai vérifié méticuleusement ce programme avec la documentation en ligne, mais j'ai peut-être commis une erreur. Je ne connais pas non plus la finalité. On dirait que le GMC-4 est big-endian, mais je ne suis pas sûr. Si quelqu'un possède un GMC-4 et peut vérifier cela / me dire le caractère durable du GMC-4, je l'apprécierais beaucoup.
la source
C, 48 octets
Une solution uniquement Windows (fonction Sleep (), pour être spécifique).
J'ai aussi utilisé (ab) le fait que printf () renvoie le nombre de caractères imprimés pour l'utiliser comme condition de boucle infinie.
Il y a un caractère entre guillemets dans l'appel printf (), mais il ne s'affiche pas ici pour une raison quelconque. En cas de doute, copiez et collez dans Sublime Text 2 ou Notepad ++, le caractère s'affiche comme
BEL
.Cela a commencé comme une solution C ++, mais il est tombé dans le sous-ensemble C de C ++ (parce que, vous savez,
Sleep()
est un peu plus court questd::this_thread::sleep_for(std::chrono::milliseconds())
) etprintf()
est plus court questd::cout<<
).la source
AppleScript 94 octets
Je sais que je suis assez en retard, et ceci est mon premier post ici, mais peu importe.
Ungolfed:
la source
VBScript,
11366 octetsCe programme est assez simple. il prend une entrée, fait écho au caractère BEL et attend. Merci à Niel d’avoir rasé presque la moitié du programme!
la source
WScript.Echo CHR(7)
? Aussi, avez-vous dire60000
?Ruby,
3733 octetsAssez simple.
C'est une fonction lambda. Si vous vouliez 60 bpm, vous feriez:
m[60]
.la source
$><<?\a
devrait également fonctionner pour le bip. Et pas besoin de donner un nom pour votre proc (toutes les solutions JavaScript avec fonction graisse flèche laissent également sans affectation), vous pouvez appeler anonymement aussi:->b{loop{$><<?\a;sleep 6e1/b}}[60]
.?\a
; avez-vous Ruby 1.x? Si oui, pouvez-vous tester que cela fonctionne?Japt, 30 octets
Le
?
devrait être l'octet littéral9A
. Testez-le en ligne! (Désolé pour la fenêtre contextuelle retardant les premiers battements; elle sera bientôt supprimée.)Comment ça marche
la source
Oreillons, 18 octets
Lisez le tempo dans la variable I, puis F {avec deux espaces après} est une boucle infinie. Arrêtez pendant 60 secondes / BPM, puis écrivez $ CHR (7) {Ascii: BEL} sur la sortie standard en indiquant la sortie audio requise, puis redémarrez à la boucle infinie.
la source
Java, 321 caractères
Cela semble très bien. Fonctionne uniquement sur les systèmes prenant en charge MIDI.
.
la source
ChucK , 90 octets
Bruit blanc qui est activé et désactivé toutes les deux ticks.
Explication
Ceci est fait pour activer le son sur un temps, puis l'éteindre sur le temps après.
Version9893 octets (amateur)Le bruit blanc a joué 10 millisecondes par tick.
Ceci est fait pour être un clic au lieu d'activer et de désactiver le bruit constant.
la source
Perl 5, 36 octets
Un sous-programme; l'utiliser comme
la source
sleep
est en secondes, de sorte que vous ne pouvez pas avoir plus de 60 bips par minute, pas sûr que ce soit une exigence. En outre, vous pouvez probablement garder le même nombre d'octets mais avoir un programme complet en faisant quelque chose comme:$|=<>;{print"\a";sleep 60/$|;redo}
(ne peut pas le tester pour le moment).sleep
. Mais cela a fonctionné pour moi.Jolf, 7 octets, sans compétition
J'ai ajouté des sons après ce très beau défi.
Si vous souhaitez supprimer ce son, prenez note de la sortie. Dis que ce nombre est
x
. Exécutez une autre commande Jolf~CP"x"
et l'intervalle sera effacé.la source
Zsh , 32 octets
Basé sur la réponse bash en tête, mais
source
s au lieu deexec
s. Les sources de liens TIO en$0:a
raison de la façon dont le fichier original est exécuté, mais cela ne fonctionnera pas.Essayez-le en ligne!
la source
Bash + bc + > <> , 44 octets
Jouant sur le fait que l'interprète> <> vous permet de définir une heure de tick:
Le code> <> est
7o
et devrait sortir le BELcaractère, produisant un bip système. Il va en boucle jusqu'à ce qu'il soit interrompu.La
-t
valeur est définie sur (2 / tr / min) / 60 afin que le code entier soit lu tr / min * 60 fois par seconde.la source
bc
installé? Il semble que le$(bc -l<<<"2/$1/60")
ne produise aucune sortie. Je vais l'ajouter à la liste des langues de la réponse. Je n'ai pas encore été en mesure de tester pleinement ma réponse, il pourrait donc y avoir une sorte d'erreur.SmileBASIC, 26 octets
Il peut jouer n’importe quel instrument midi général, bien que tout ce qui dépasse 9 utilise plus d’octets.
la source
Stax, 17 octets
ou, déballé:
Le programme génère des octets qui, lorsqu'ils sont introduits dans l'outil de ligne de commande avec un paramètre par défaut, produisent un bruit de métronome. L'entrée est utilisée comme bpm
Exemple:
Vous devriez entendre un horrible bip sonore au bpm souhaité
la source