Je suis tombé sur un article dans lequel des étudiants utilisaient le trafic réseau pour dessiner leur université sur le graphique IPv6 du pays . [image]
Votre objectif est simple à dire, mais difficile à mettre en œuvre. Dessinez le texte MAIL (car il s’agit de l’un des rares mots pouvant être lus sur un graphique 1D) sur le graphique de la CPU.
Ça devrait ressembler a quelque chose comme ca:
En élaborant un peu plus sur ce qui est admissible:
- Le code n'a pas besoin d'être multiplate-forme (vous n'aurez donc pas besoin d'API inconnues pour y faire face).
- Vous pouvez le capturer dans n'importe quel utilitaire d'utilisation du processeur que vous avez.
- Le graphique semble un peu pire sur une machine différente: je vous fais confiance cette fois-ci.
- Le pourcentage d'utilisation du processeur de base doit être continu. Par conséquent, si vous générez une onde aléatoire et mettez en surbrillance un élément qui ressemble au mot MAIL, il est évident que vous trichez.
- Vous pouvez choisir la charge maximale à utiliser, mais celle-ci doit être suffisamment importante pour la voir clairement.
- Vous devez suivre la linéarité de l'exemple. (Pour M, cela ressemble à ceci:% de base, puis augmentation soudaine jusqu'au maximum spécifié, baisse graduelle vers un% inférieur, remontant au maximum et baisse soudaine jusqu'au% de base.)
- Si c'est illisible, les électeurs le remarqueront après tout.
Les failles standard s'appliquent. Postez les images aussi!
Réponses:
Python, 143
Chaque caractère de la chaîne correspond à une seconde d'activité, du caractère ASCII
0
(charge maximale) à~
(charge très légère). Le programme s'exécute sur une boucle synchronisée dans le temps, vous pouvez donc exécuter plusieurs instances pour obtenir de meilleurs résultats.J'ai utilisé Python 2.7.6 sur OS X avec un processeur Intel Core i7, mais cela devrait fonctionner sur d'autres ordinateurs avec un peu d'ajustement (réglez la
0.001
). La capture d'écran ci-dessous a été prise avec une activité de fond importante.Mise à jour - J'ai été en mesure de produire un graphique plus clair avec
time()/10
une fréquence de mise à jour inférieure:Et enfin, voici une version plus golfée ( 123 octets ) et son résultat :
la source
Python,
358281268221194 octetsMonochrome est tellement l'année dernière. Cela utilise plusieurs processus et appels système pour obtenir des graphiques de processeur à deux couleurs !
Sortie du moniteur d’activités (OS X 10.9):
Sortie de MenuMeters:
Toutes les sorties ont été générées avec une vitesse de mise à jour de 1s. Aucune tâche d’arrière-plan importante n’était en cours d’exécution, bien que cette sortie vainc assez facilement toute tâche de processeur à un seul thread.
Ce code suppose que vous avez 8 cœurs. Il devrait être assez facile de modifier pour moins / plus. Il est portable sur les systèmes Linux / UNIX (bien qu'il n'ait été testé que sur OS X) et devrait produire la même sortie bicolore pour tout moniteur de CPU capable de distinguer l'utilisateur du temps UC du système.
Cela fonctionne essentiellement en supprimant sept processus, chacun choisissant de passer une seconde en veille, en tournant dans le mode utilisateur ou en faisant tourner le noyau. Le spin en mode noyau est obtenu en demandant de grandes quantités de données
/dev/urandom
, ce qui oblige le back-up du pilote/dev/urandom
à passer beaucoup de cycles de la CPU "système".EDITED [07/21]: Réduit considérablement en utilisant à la
fork()
place demultiprocessing.Process
(/dev/urandom
ne fonctionne de toute façon que sur les systèmes * NIX, cela ne réduit donc pas la portabilité). Notez cependant que le programme génère maintenant des tâches en arrière-plan ; vous devrez peut-êtrekillall Python
(ou similaire) pour vous débarrasser des mangeurs de CPU.Je n'ai pas pu résister à la mise en place de quelques lettres supplémentaires. J'ai 16 lettres, plus quelques symboles:
L'alphabet complet est "ACDFHILMNOPTUVWY", avec les symboles "._ ~ / \". Il y a probablement beaucoup plus de personnages qui peuvent être représentés.
Code entièrement non-golfé pour les lettres supplémentaires:
la source
C (Intel Core Duo + OS X / Darwin), 248 octets
Ce code est à peu près aussi portable que la Grande Pyramide de Kheops. Désolé pour ça. Les valeurs renvoyées
mach_absolute_time()
dépendent du matériel, mais sur ma machine, la valeur incrémente environ une fois par nanoseconde.Voici le résultat:
Il y a deux graphiques car le processeur a deux cœurs. Je règle la charge maximale du processeur sur environ 90%, car le processus est susceptible de basculer entre les cœurs chaque fois que j'appelle
usleep()
. Avec une charge de 100%, le processus est enchaîné et les résultats sont illisibles ( voir ceci, par exemple )la source
uint64_t
variables dans l'en-tête de lafor
boucle suivante ?Ruby, 150 caractères
Ce n’est pas si court jusqu’à présent, mais à mon avis, la sortie est plutôt sympa, alors j’ai pensé que je posterais ça de toute façon. Comme avec la plupart des autres solutions, vous devrez peut-être épingler le processus Ruby à un noyau en le préfixant avec
taskset -c $core
.Le code est une simple combinaison de rotation / sommeil pendant un certain temps, ce qui devrait le rendre assez portable. Les dégradés lisses sont créés en faisant varier le rapport temps de rotation / sommeil.
La diminution de la fréquence d'échantillonnage du processeur améliore l'aspect des bords:
En ajoutant quelques lettres supplémentaires à l’alphabet (qui
AILMNUVW
sont plus ou moins reconnaissables), nous pouvons aussi écrire quelques autres mots:Ces images ont été générées avec le code suivant:
Les mots pouvant être écrits avec les lettres implémentées peuvent être trouvés avec
la source
Python, sur Intel Pentium 4 3.0Ghz,
180 166 145 141138 octetsAppeler avec
taskset -c 0 python cpu_graph_drawer.py
.taskset
est nécessaire pour restreindre le processus à l’utilisation d’un seul processeur / cœur (hyperthreading dans mon cas).Le résultat n'est pas terrible.
la source
gnome-system-monitor
c'est la seule chose que je sache. Avez-vous des alternatives qui fonctionnent sur LMDE Cinnamon?a=[...]+[(.1,.2)]*10
au lieu de.extend
.Java 8, 482 caractères
Chaque caractère de la chaîne signifie le nombre de threads à utiliser. Image prise sur Intel Core i3 (2 cœurs / 4 threads).
Edit : version plus golfée (322 caractères), même fonctionnalité:
la source
C, 78 octets
Vous n'avez jamais dit que nous ne pouvions pas accepter les entrées de l'utilisateur, sooo ..
Ce programme lit en standard et chaque fois qu’il lit un caractère, il exécute une perte de temps CPU gratuite, puis appelle de nouveau principal. Vous contrôlez la quantité de temps CPU utilisé en envoyant un spam à la touche Entrée à différentes vitesses.
Je l'ai couru sur un Intel i3 4130T, qui est un processeur raisonnablement nouveau. Toutefois, votre kilométrage peut varier. Si vous utilisez plus de temps processeur que vous ne pouvez le faire, essayez de jouer avec la quantité de décalage dans la boucle de délai.
Mon programme est génial car il:
Après quelques essais, j'ai créé un graphique ressemblant à ceci:
la source
taskset -c 1 [file]
yes | [program]