Schreiben Sie ein Programm, das die aktuelle Systemzeit als analoge Uhr mit ASCII-Grafiken anzeigt. Die Uhr muss mindestens die Stunden- und Minutenzeiger anzeigen und eine ausreichende Auflösung von mindestens 5 Minuten haben.
Das Display kann so klein und hässlich sein, wie Sie es wünschen, aber die angezeigte Zeit sollte leicht erkennbar sein.
Das Programm muss kontinuierlich ausgeführt werden und seinen Status aktualisieren. Wenn Ihr System den Bildschirm löschen kann, verwenden Sie ihn. Andernfalls reicht es aus, die Uhr neu zu lackieren, wenn sich ihr Status ändert.
Sie erhalten einen Bonus von -20% auf die Anzahl der Charaktere, wenn die Uhr eine Auflösung von mindestens 1 Minute hat.
Antworten:
Mathematica 207 - 42 = 165
Die Häkchen und Stundenbezeichnungen werden auf dem Einheitskreis platziert.
H
undM
drehen sich um die Uhrmitte und zeigen die Gesamtzahl der abgeschlossenen Stunden bzw. Minuten an.S
aktualisiert seine Position mehrmals pro Sekunde.Es werden zwei Versionen angezeigt: eine Version, die Text in der kartesischen Ebene darstellt, und eine andere, die Textzeichen in einem Raster anzeigt.
Diese Version zeichnet die Zeichen in die kartesische Ebene.
Die Uhr unten zeigt die Zeit 3:08:17 .
Terminal- oder Grid-Version :
430316 Zeichen (253 mit Bonusrabatt)Diese Version funktioniert ähnlich, platziert die Zeichen jedoch nicht in der kartesischen Ebene, sondern in einem 61 x 61-Zellenraster. Es könnte noch ein bisschen Golf gespielt werden, aber ich wollte in Mathematica nur eine (schlampigere) Terminal-ähnliche Ausgabe zeigen .
Die Uhr unten zeigt 11:06 an .
Nur zum Spaß:
Hier ist eine Nicht-Ascii-Version der analogen Uhr. (60 Zeichen) Es wurden keine externen Bibliotheken verwendet.
quelle
Javascript 370 - 74 = 296
http://jsfiddle.net/wBKQ6/7/
(Dies funktioniert nur in Chrome, da ich die Tatsache missbrauche, dass dem globalen Bereich Element-IDs hinzugefügt werden.)
Golfen (370):
Beispielausgabe (in der Demo viel komprimierter):
quelle
Python, 328 - 65 = 263
Druckt jede Sekunde eine neue Uhr, wobei der Minutenzeiger jede Minute aktualisiert wird.
Die Uhren, die es druckt, sehen so aus (es ist in meinem Terminal nicht so gespannt):
quelle
Nur 100% reine Bash ! Ohne Gabel!
Eine finalisierte und aktualisierte Version finden Sie dort oder auf dieser Seite: ascii-clock for geeks . Aber benutze es nicht! Lesen Sie den Hinweis am Ende dieser Antwort, Sie wurden gewarnt! Verwenden Sie stattdessen diese Perl-Version !
Erste einfache Uhr ohne zweiten Haken.
Skalierbar und bearbeitbar:
Zeichnen Sie eine 21x21 (10x2 + 1) Uhr um 10H10 in weniger als einer Sekunde.
Dies akzeptiert 3 Argumente:
Usage: ascii-clock.sh [ray of clock] [Hour] [Min]
Wenn der Standardstrahl 12 ist, ist das Zeichnen der Uhr die2 x ray + 1
Höhe der Linien und die doppelte Breite, da Platz hinzugefügt wird, um eine runde Form zu erhalten.Wenn das Skript mit
0
oder als1
Argument aufgerufen wird , wird es in einer Schleife jede Minute neu gezeichnet. Andernfalls, wenn mindestens eine Stunde (zweiter Parameter) angegeben ist, wird nur einmal gezeichnet und beendet.Der
H
Marker befindet sich bei 70% des Strahls und derM
Marker befindet sich bei 90% des Strahls.Keine Verwendung von externen Binaries wie
date
oderbc
für die Verlosung!(Danke an @manatwork für das eingebaute
read -t
wenn/bin/sleep
).All dies wird also durch eingebaute Shell-Befehle erledigt .
Es wird eine ANSI- Sequenz verwendet, jedoch nur für Schleifen und um Markierungen fett zu machen.
Dies könnte folgendermaßen aussehen:
Dies erzeugt so etwas wie:
Oder könnte ausgeführt werden als:
Alternative: Mit vollständiger Pfadzeichnung:
könnte produzieren:
oder
Letzte Version mit Sekunden tickt Rendering und Nanoschlaf um zu synchronisieren.
Dies funktioniert nur unter neueren Linux-Versionen, da
/proc/timer_list
hiermit der Sekundenbruchteil berechnet wird, der zwischen den einzelnen Aktualisierungen benötigt wird.Verschleiertere Version (2702 Bytes):
Wie von @manatwork gefordert , gibt es eine Golfversion .
Diese Version ist koloriert und zeigt die digitale Zeit in den Ecken.
Hinweis: Verwenden Sie dies sowieso nicht!
Da dies ein Bash- Programm ist und Bash keine Programmiersprache ist, ist dies für eine Weile nicht gut zu gebrauchen.
Es gibt eine kleine Demonstration des Speicherverbrauchs in nur 5 Stunden mit einer Zeichnung von 7 Zeichen Länge:
Der Hauptvorteil davon ist, dass ich, wenn ich Speicher benötige, nur die Uhr töten muss.
( Anmerkung: Ich habe diese, die Perl-Version und eine Javascript- Version derselben auf Ascii-Clock für Geeks zusammengeführt ;-)
quelle
bash
4.1 ausprobiert . Auf 4.2 läuft das ja ununterbrochen und benötigt keine Kommandozeilenparameter.bash
Können zu erreichen, ist eine Demonstration von großem Können. (Ich nehme seinen Hut ab und klicke auf den Upvote-Link.) Aber diese 2529 Zeichen könnten im Geiste der Code-Golf- Herausforderungen immer noch reduziert werden : „Code-Golf ist ein Wettbewerb, um ein bestimmtes Problem in den wenigsten Bytes des Quellcodes zu lösen. ”Python 2 - 207
Es ist sehr hässlich, aber lesbar. Druckt alle 9 Sek. (Sie können auf 1 Sek. Umschalten, wenn Sie es vorziehen), wird alle 5 Minuten aktualisiert. Ich habe nicht viel Erfahrung mit Code Golfing in Python, daher erwarte ich, dass es verbessert werden kann.
Beispielausgabe:
quelle
Perl 5 x 65 = 325 - 65 (20%) = 260 Zeichen !!
Sauber, kreisförmig, mit einem zweiten Häkchen und alle Sekunden aktualisiert.
Auf einer 24-Zeilen-Konsole sehen Sie gut aus (es ist 00:12:56 ):
Und es gibt eine farbige, schönere und intelligentere Version:
Diese Version ist stark mit dieser anderen Antwort verknüpft , mit dem Hauptvorteil: Sie könnten dies für eine Weile ruhig laufen lassen! Sie können dort oder auf dieser Ascii-Clock für Geeks- Webseite eine aktualisierte Version finden .
Um zu demonstrieren, dass ungefähr dasselbe in Perl weniger Ressourcen erfordert:
Für ungefähr die gleichen Funktionen:
s
Punkt für den Second-Handler.S
oben links beim Schlafen (Unterschied zur Bash- Version suchen )Plus
-a
zum Zeichnen von Stunden- und Minutenpfaden in Bruchteilen (11h59 Ortsstundenpfad ca. um 12h).Lassen Sie eine andere Perl-Version !!!
Mit dem folgenden (schönen) Bild:
Dann könnten Sie einfach:
Ok, dafür muss gd2-perl installiert sein. Aber man konnte ersetzen
curl
durchwget -O -
;-)(Hinweis: Dieses Bild ist in der Nähe von 1,5 kb ich eine andere gebaut haben. Gleiche Bild, aber 900 Bytes Länge Sie dieses Bild finden kann, auch eine. Javascript - Version derselben bei ascii-Uhr für Geeks :-)
quelle
eval
durch zu ersetzenprint
;-)Tcl, 288
Ok, hier eine Erklärung:
while 1 {...}
- Ok, vergiss die Erklärung.regsub -all \ +|. "oaosocowoeouooovoioxozom r n\n" \ {&} p
Ersetzt+|.
mit_{\0}
und speichert das Ergebnis inp
.p
ist eigentlich ein durcheinander gebrachtes Wörterbuch, in dem der erste Schlüssel fehlt (oder nur eine Liste mit einer ungeraden Anzahl von Elementen).lset p [set h [expr $h%12*2]] h
Stellt die Stunde in der Ersatzliste einlset p [set m [expr $m/5*2]] [expr $h-$m?"m":"x"]
Stellt die Minute ein. Wenn Stunde und Minute identisch sind, verwenden Siex
stattdessen.string map /\ $p {rr/nrzmrann xrrr snnimrrrcnn vrrr wnnromrenrru}
/\ $p
ist gleich"/ $p"
, also füge ich den ersten Schlüssel (/
) hinzu. Danach ersetze ich jedes Vorkommen eines Schlüsselsrr/nrzmrann xrrr snnimrrrcnn vrrr wnnromrenrru
durch seinen Wert.Die übliche Karte ist
(Lesen Sie als "Ersetzen
/
durcho
, Ersetzena
durcho
... Ersetzenm
durch___
(das sollten Leerzeichen sein))Ich Repace eine
o
mith
und eine andere mitm
,m
,r
undn
sind nur die Ausgabezeichenfolge Shoren (I mehrere Räume mit einem von ihnen ersetzt, auch\n
mitn
). Ich füge das erste Element später hinzu, damit ich h * 2 anstelle von h * 2 + 1 für den Index verwenden kann, den ich ersetze. (spart 2 Zeichen)Einige Notizen:
{}
. Ok, es ist ein wenig komplexe zB Sie den Leerraum mit einem entkommen können\
, aber solche Details sind dokumentiert woanders .key1 value1 key2 value2
quelle
Javascript 2169 - 434 = 1735
Ok, es ist eine Menge, aber sie sind in Ordnung und funktionieren genauso wie meine vorherige Variante in früheren Beiträgen ( Bash und Perl ).
Diese Version ist mehr verschleiert als die, die Sie auf meiner Ascii-Uhr für Geeks finden können
quelle
Python, 259 - 52 = 207
Beispielausgabe:
quelle
Ruby:
230228 Zeichen - 46 = 182(Hinweis:
^[
ist ein einzelnes Zeichen.)Probelauf (um 21:19:33):
"So hässlich, wie Sie es wünschen" -Version:
191181 Zeichen - 36 = 145(Kleinere Größe, geringere Präzision, keine Sekunden, identischer Radius, schreckliches Flackern.)
Probelauf (um 21:19 Uhr):
Trigonometrielose Version:
130125 Zeichen (kein Bonus)(Inspiriert von Johannes Kuhn ‚s Tcl Lösung . Nicht sicher , wie viel, wie ich immer noch nicht seinen Code entschlüsselt.)
Probelauf (um 21:19 Uhr):
quelle
tr': can't convert Fixnum into String (TypeError)”? Now that you mentioned the error I dug for a version 1.8.7 and received the above error of that. Works fine on 1.9.2 and 1.9.3. Seems that
? M" wurde in älteren Versionen als Fixnum interpretiert und erst später in String geändert.HTML & JS:
397 - 20% = 317.6 characters
Meine erste Iteration. Ich bin nicht sehr zufrieden damit, aber es funktioniert und es zeigt die Zeit auf sehr klare Weise.
quelle
Ti-Basic 84, 587 - 20% = 469,6
Die Ausgabe ist sehr hübsch und detailliert.
quelle
C, 554 Bytes, Aktualisierung ungefähr einmal pro Sekunde.
Ergebnis:
quelle