Prozentuale verbleibende Batterie anzeigen

26

Zeigt die verbleibende Akkuladung als Prozentsatz der maximalen Ladung an

Denken Sie daran, wenn Sie Ihren Code nicht auf einem Telefon, Taschenrechner usw. ausführen können, können Sie Ihre Umgebung wahrscheinlich zumindest auf einem Laptop installieren. Wenn Sie mit einem Gerät mit Akku absolut nicht arbeiten können, ist Ihre Sprache leider nicht geeignet, da Sie keinen sinnvollen Wert zum Drucken haben.

Sie müssen die Ergebnisse auf dem Bildschirm anzeigen. Dies soll theoretisch ein nützliches Hilfsmittel für den Benutzer sein, um die Batterie zu überprüfen. Das Schreiben des Batterieprozentsatzes in eine Datei ist zu umständlich, sodass der Benutzer die Datei überprüfen muss. Die Anzeige auf dem Bildschirm ist daher Teil der Spezifikation, die von Standard-E / A nicht überschrieben werden kann. Sie können jedoch davon ausgehen, dass nichts die normale Anzeige von STDOUT auf dem Bildschirm verhindert.

Wenn der Akku-Prozentsatz vom Betriebssystem bereits die ganze Zeit auf dem Bildschirm angezeigt wird, wie dies bei vielen Telefonen der Fall ist, bedeutet dies nicht, dass Sie eine Null-Byte-Lösung haben. Sie müssen davon ausgehen, dass das eingebaute Display nicht vorhanden ist, und den Akkuprozentsatz an einer anderen Stelle erneut anzeigen.

Bearbeiten: Das Ausgabeformat wird geöffnet. Es steht Ihnen frei, nur die Ziffern des Prozentsatzes oder die Ziffern mit einer zusätzlichen Ausgabe anzuzeigen.

Edit2: Die Stellen, die den Prozentsatz darstellen, müssen an einer bekannten Stelle in der Ausgabe erscheinen, nicht mehr als 50 Zeilen vom Ende der Ausgabe entfernt, und diese Stelle sollte sich zwischen den Aufrufen nicht ändern. Die Stellen, die den Prozentsatz darstellen, müssen auf jeder Seite durch mindestens ein nicht-stelliges Zeichen von der anderen Ausgabe getrennt sein.

Als Referenz dient hier das alte Ausgabeformat von vor der Änderung:

Remaining battery is ddd% oder Remaining battery is ddd percent

Jared K
quelle
11
Dies ist eine einzigartige Herausforderung, da die gewählte Sprache weitgehend von der Umgebung abhängt und das beste Golfspiel in hohem Maße von der in dieser Umgebung präsentierten API abhängt. Nicht sicher, ob das gut oder schlecht ist, ha
Poke
4
Wie ist der Batterieprozentsatz definiert? Ich bin nicht wirklich mit der Funktionsweise der Hardware vertraut, hatte aber immer den Eindruck, dass der prozentuale Anteil der Akkus in Bezug auf die prognostizierte Nutzung eine Art Hueristik darstellt.
Wheat Wizard
3
Warum ist das Ausgabeformat so streng?
Ok
1
@WW Ich glaube, ich habe von Telefonen gehört, die das als 'Prozent' anzeigen. Das sollte natürlich nicht nur irreführend und herablassend für den Benutzer sein. Aber abgesehen davon, dass die Leute gebeten werden, einen neuen Gerätetreiber auf Hardware-Ebene zu verwenden, bin ich bereit, alle Prozentangaben zu akzeptieren, die das Betriebssystem oder die API auf Systemebene enthalten.
Jared K
2
@ user202729 Bei dieser Elektronik.SE-Antwort geht es um die interne Messung, aber dem Benutzer wird häufig eine Arztnummer angezeigt - Li-Ionen-Akkus entleeren sich umso schneller, je mehr Ladung sie haben (oder ist es umgekehrt?), aber das Gerät Passt dies (normalerweise) an, um eine etwas lineare Änderung des Batterieprozentsatzes anzuzeigen, da dies für uns Benutzer vorhersehbarer erscheint.
Sundar - Reinstate Monica

Antworten:

43

Bash, 70 67 50 46 43 16 Bytes

`</*/*/*/B*/c*y`

Ausgänge: <battery 0-100>: command not found

Liest die Datei /sys/class/power_supply/BAT1/capacity.

Getestet mit Ubuntu 18.04 auf einem LENOVO-Ideapad 500.

Dauert eine Weile (da das gesamte Dateisystem durchsucht wird) - spart aber ein Byte!

Alte Antwort:

echo Remaining battery is `</*/*/*/B*/c*y`%
Okx
quelle
38
Dauert eine Weile (da das gesamte Dateisystem durchsucht wird) - spart aber ein Byte! - das ist Code Golf für Sie!
Stewie Griffin
11
Hm, ich bin mir nicht sicher, ob garantiert werden kann, dass es keine Datei mit dem Namen gibt /so/apes/yadayada/Brunch/calamity.
Erik der Outgolfer
4
@EriktheOutgolfer Mir wurde gesagt, ich kann von einer Neuinstallation ausgehen.
Okx
11
@EriktheOutgolfer Ich bin so froh, dass Brunch serviert wird, bevor die Welt untergeht.
mbomb007
1
@algmyr An diesem Punkt könnte ich genauso gut tunecho {0.100}
Okx
13

JavaScript (Browser), 78 77 50 Bytes

(-1 Byte dank Benoit Esnard )

(-27 Bytes, da das Ausgabeformat jetzt flexibel ist)

navigator.getBattery().then(b=>alert(b.level*100))

JavaScript (Browser), 46 Bytes, durch Rückgabe eines Versprechens

(Vorgeschlagen von Shaggy , erfordert Kopf- und Fußzeile)

f=
_=>navigator.getBattery().then(b=>b.level*100)
f().then(alert)


Hinweis: Funktioniert nur mit Google Chrome> = 38 (Desktop und Android) oder jedem anderen Browser, der Battery API unterstützt . FireFox hat diese API aus Datenschutzgründen entfernt.

Beispiel für Android (altes Ausgabeformat):

Bildbeschreibung hier eingeben

Beispiel auf einem Windows-Laptop (altes Ausgabeformat):

Bildbeschreibung hier eingeben

Night2
quelle
Sie können ein Byte speichern, indem Sie ES6-Zeichenfolgenvorlagen verwenden:`Remaining battery is ${b.level*100}%`
Benoit Esnard,
@Benoit Esnard: Gute Idee! Vielen Dank ...
Night2
2
Mir ist nie aufgefallen, dass Sie den Batteriestand eines Benutzers auf einer Webseite anzeigen können. Ich kann mir nicht vorstellen, wann diese Funktion für einen Benutzer tatsächlich nützlich sein würde.
Numbermaniac
2
@numbermaniac Früher gab es auf PoC-Websites einen Energiesparmodus, der vom Akkuladestand des Geräts abhängt. Schade, dass sie nicht dachten, all dies könnte auch verwendet werden, um Sie zu verfolgen, ohne Cookies zu benötigen.
Alexis Facques
4
@numbermaniac: Eine der Verwendungsmöglichkeiten ist das automatische Speichern eines Formulars, wenn der Akku des Benutzers schwach ist. Aber es kann viele Missbräuche geben und deshalb hat FireFox es entfernt.
Night2
12

PowerShell , 28 Byte

-26 (!) Dank AdmBorkBork. Vorherige Version -3 dank colsw.

((gwmi win32_battery)|% e*g)

Bildbeschreibung hier eingeben

gwmi Kurzform für Get-WmiObject

|%Nimmt das Muster e*gund findet die einzig passende Eigenschaft.estimatedChargeRemaining

Adam
quelle
1
Mit diesem Tipp können Sie den langen Eigenschaftsnamen - Golf spielen ((gwmi win32_battery)|% e*g).
AdmBorkBork
@AdmBorkBork Nochmals vielen Dank. Wie Sie sehen, bin ich kein Powershell-Golfer (oder gar Benutzer).
Adám
Wenn das Gerät mehr als eine Batterie hat, zeigt es etwas wieRemaining battery is 98 96%
Vasily Alexeev
@ VasilyAlexeev OP hört sich so an, als würden wir ein geeignetes Gerät auswählen.
Adám
Wechseln Sie "abc"+(def)+"ghi"zu "abc$(def)ghi", um weitere zu speichern.
Colsw
10

Bash + acpi, 43 4 Bytes

Neue Regeln

acpi

Ausgabe auf Formular

Battery 0: Charging, 92%, 00:05:37 until charged

Sie sind sich nicht sicher, ob die Regeländerung die Sache interessanter macht. Können Sie keinen Text ausgeben, der alle Zeichenfolgen von 0 bis 100 enthält, die eine gültige Ausgabe wären? Scheint die ursprüngliche Absicht zu verlieren, wenn dies der Fall ist.

Alte Regeln

set `acpi`;echo Remaining battery is ${4%,}

Ausgabe auf Formular

Remaining battery is 92%

Fragen Sie mich nicht, warum das Set so funktioniert, aber es funktioniert.

Algmyr
quelle
An was hast du das getestet? Ubuntu oder ähnliches schätze ich? Es funktioniert zum Beispiel nicht auf einem Mac.
Numbermaniac
Funktioniert auf Fedora, hängt aber stark von der Syntax der Ausgabe ab (was ist das auf einem Mac als Referenz? @Numbermaniac)?
Wilf
Ich gehe davon aus, dass es für die meisten Linux-Distributionen verfügbar ist. Unterscheidet sich das acpi-Ausgabeformat vielleicht auf einem Mac (ist acpi dort überhaupt verfügbar)?
Algmyr
@Wilf acpiist anscheinend nicht auf dem Mac verfügbar .
Numbermaniac
Es kann auf einigen Linux-Distributionen separat installiert werden. Mac verfügt wahrscheinlich über entsprechende Treiber und Befehle.
Wilf
6

Python 3.6 + psutil, 80 Bytes

import psutil
print(f"Remaining battery is {psutil.sensors_battery().percent}%")

Probieren Sie es online!

Wenn das Gerät keine Batterie hat (wie bei TIO), wird das Programm einen Fehler auslösen, da psutil.sensors_battery()zurückkehrt None.

Dies erfordert Python 3.6 für die String-Interpolation .

mbomb007
quelle
1
Idk. Es ist in TIO enthalten. Ich werde einen Link zum Modul hinzufügen.
mbomb007
Ich habe gegoogelt und dieselbe Bibliothek gefunden, aber meine Python 2-Antwort war nicht so intelligent wie Ihre mit String-Interpolation. Hinweis für sich selbst: Muss in Python 3.6 einsteigen und schneller antworten. +1
ElPedro
5

C (win32, gcci686-w64-mingw32), 78 Bytes

#include<windows.h>
main(s){GetSystemPowerStatus(&s);printf("%hhu",s>>16);}

Missbrauch der win32-API, indem GetSystemPowerStatus()"irgendwo" auf den Stack geschrieben wird, das interessante Mitglied befindet sich laut SYSTEM_POWER_STATUSStruktur im dritten Byte .

Leider #includescheint das nötig zu sein, wahrscheinlich wegen Aufrufkonventionen.

Beispielausgabe:

> bat.exe
90

Wird 255auf Systemen ohne Batterie angezeigt.

Felix Palmen
quelle
Was passiert, wenn Sie das Include weglassen?
Ruslan
1
@ Ruslan der Linker findet das Symbol nicht in kernel32.dll. Das ist, warum ich denke, dass es die aufrufende Konvention ist, verwenden Win32-API-Funktionen nicht den "Standard" cdecl. Selbst wenn ich den Linker irgendwie austricksen könnte, würde der Code wahrscheinlich sowieso nicht funktionieren.
Felix Palmen
Haben Sie versucht, mit /Gz(Standardeinstellung __stdcall) zu kompilieren ?
Neil
@Neil nein, hat gcc / mingw eine ähnliche Option oder muss ich dafür msvc verwenden? Und würde das nicht printf()ohne einen Prototyp brechen ?
Felix Palmen
Entschuldigung, ich habe Ihren Header nicht sorgfältig genug gelesen. Ich denke, die Mingw-Version ist -mrtd, aber ich weiß nicht, was passieren würde printf(); Vielleicht gibt es ein kürzeres Include dafür?
Neil
4

Excel VBA, 150 Byte

Beschränkung auf 32-Bit-Windows-Installationen von Office, da der Windows-Kernel32-Aufruf nicht 64-Bit-Zeigersicher ist.

Ausgabe in die Zelle A1im ActiveSheet.

Declare Sub GetSystemPowerStatus Lib"kernel32"(f As t)
Type t
i As Integer
b As Byte
End Type
Sub d
Dim e As t
GetSystemPowerStatus e
[A1]=e.b
End Sub

-26 Bytes dank flexibler Ausgabe

-7 Bytes Dank an @Neil für die Verwendung eines Int anstelle von 2 Bytes

Taylor Scott
quelle
2
Sind 64-Bit-Zeiger nicht sicher? Was? Das ist lächerlich, Microsoft.
user253751
@immibis es hat mit einem Unterschied zwischen den Versionen zu tun - wenn Sie eine 64-Bit-Installation von Office verwenden, ändert sich der Aufruf nur zuDeclare PtrSafe Sub GetSystemPowerStatus Lib"kernel32"(f As t)
Taylor Scott
Können Sie kein Byte-Array anstelle einer Struktur verwenden?
Neil
@Neil - leider nicht, der Lib-Aufruf weist f einem Zeiger der _SYSTEM_POWER_STATUSStruktur zu , der sowohl Byte- als auch Dword-Werte enthält, was bedeutet, dass in diesem Fall die Struktur aus vba emuliert werden muss und ein Byte-Array nicht verwendet werden kann .
Taylor Scott
Wenn Sie kein Array verwenden können, können Sie statt zwei Einzelbytes nicht mindestens einen Zwei-Byte-Typ als Auffüllung verwenden?
Neil
3

QPython für Android , 133 Byte

from androidhelper import*
d=Android()
d.batteryStartMonitoring()
d.dialogCreateAlert(str(d.batteryGetLevel()[1])+"%")
d.dialogShow()

Code-Bildschirm

Ausgabebildschirm

Dies +"%"ist nicht unbedingt erforderlich, da das neuere, flexiblere Ausgabeformat sowieso verwendet wird, aber es sorgt für eine etwas schönere Ausgabe bei nur +4 Bytes.

Sundar - Setzen Sie Monica wieder ein
quelle
[ d.notify(Benachrichtigung erstellen) wäre viel kürzer gewesen als das Erstellen und Anzeigen des Dialogfelds, aber aus irgendeinem Grund funktioniert es zumindest auf meinem Gerät nicht (möglicherweise wurde es nicht für neuere Android-APIs aktualisiert).]
Sundar - Reinstate Monica
Dies funktioniert für 130 Bytes.
Ovs
2

Emacs Lisp, 9 Bytes

(battery)

Zeigt die aktuelle Batteriestatus in Mini-Puffer am Boden (oder an stdout bei der Verwendung --batch) im Format wie zum Beispiel: Power N/A, battery Unknown (99.1% load, remaining time N/A).

Sollte unter Windows, OSX, BSD und Linux funktionieren.

Winny
quelle
1

Japt , 60 Bytes

Ox`nàÀÓ&.getBÂjry().È(x=>O.q("Rà@°á ßMy  "+L*x.¤vel+"%"))

Probier es aus

Zottelig
quelle
1

Java, 546 Byte (Windows XP oder höher)

Das Hilfsprogramm powercfg kam für Windows XP ins Spiel. Ich habe keine Ahnung, welche Hilfsprogramme zuvor verfügbar waren. Ich muss auch als Administrator ausgeführt werden. Das ist gottesfürchtig und ich habe keinen extremen Golfversuch gemacht ...

import java.io.*;import java.util.Scanner;public class J {public static void main(String[] args)throws Exception{Process p=Runtime.getRuntime().exec("powercfg energy");p.waitFor();Scanner s=new Scanner(new File("C:\\windows\\system32\\energy-report.html"));String x;double a=0,b=0;while(s.hasNextLine()){x=s.nextLine();if(x.contains("Design Capacity")){s.nextLine();b=Integer.parseInt(s.nextLine().replaceAll("\\D+",""));}else if(x.contains("Last Full Charge")){s.nextLine();a=Integer.parseInt(s.nextLine().replaceAll("\\D+",""));}}System.out.print(a/b*100);}}

Formatiert / kommentiert ...

import java.io.*;
import java.util.Scanner;

public class J {
    public static void main(String[] args) throws Exception {
        Process p = Runtime.getRuntime().exec("powercfg energy"); // Run CMD sys32 app.
        p.waitFor();                                              // Wait for it.
        Scanner s = new Scanner(new File(
                "C:\\windows\\system32\\energy-report.html"));    // Read output.
        String x;
        double a = 0, b = 0;
        while (s.hasNextLine()) {
            x = s.nextLine();
            if (x.contains("Design Capacity")) {                   // Find max capacity.
                s.nextLine();
                b = Integer.parseInt(s.nextLine().replaceAll("\\D+", ""));
            } else if (x.contains("Last Full Charge")) {           // Find current capacity.
                s.nextLine();
                a = Integer.parseInt(s.nextLine().replaceAll("\\D+", ""));
            }
        }
        System.out.print(a / b * 100); // Calculate %.
    }
}

Ehrlich gesagt war ich mehr daran interessiert zu sehen, ob es überhaupt in Java möglich war.

Magische Kraken-Urne
quelle
Sie müssen einen solchen externen Befehl aufrufen, dann die Ergebnisse des externen Befehls aus einer Datei lesen und dann den Prozentsatz selbst berechnen. Und so wortreich. Es ist schrecklich, dass ich es liebe. Ich bin froh, dass die Leute diese Dinge in ungeeigneten Sprachen ausprobieren, es macht so viel Spaß. +1
Jared K
1
@JaredK Ich mag Java "Golfen", aber nur bei Fragen, bei denen die Leute denken: "Oh Gott nein, welcher Idiot würde das jemals in Java versuchen? Es würde einfach keinen Sinn ergeben." Irgendwie ironisch.
Magic Octopus Urn
Manchmal denke ich, Java sollte eine Golfversion bekommen, wie sie Japt für das Golfen mit Javascript entwickelt hat.
Jared K
@JaredK in Groovy oder Clojure suchen, könnte dies wahrscheinlich in eine 100-Byte-Groovy-Antwort verwandeln, wenn ich mich super anstrengen würde.
Magic Octopus Urn
@ JaredK hier ist eine Annäherung an diese gleiche Antwort in groovy:{Runtime.getRuntime().exec("powercfg energy").waitFor();x=new XMLSlurper(new File("C:\\windows\\system32\\energy-report.html"));x.html.table.tr[#].span[0] as int/x.html.table.tr[#].span[0] as int}
Magic Octopus Urn