Visualizza la percentuale di batteria rimanente


26

Visualizza la carica residua della batteria, come percentuale della carica massima

Ricorda che se non riesci a eseguire il codice su un telefono, una calcolatrice, ecc., Probabilmente puoi installare il tuo ambiente almeno su un laptop. Se non puoi assolutamente correre su un dispositivo che ha una batteria, sfortunatamente la tua lingua non è idonea poiché non hai un valore utile da stampare.

È necessario visualizzare i risultati sullo schermo. Questo dovrebbe teoricamente essere un'utilità utile per l'utente di controllare la batteria. Scrivere la percentuale di batteria in un file è troppo ingombrante, richiedendo all'utente di controllare il file. La visualizzazione sullo schermo fa quindi parte delle specifiche che non possono essere ignorate dall'IO predefinito. Detto questo, non puoi presumere che nulla impedisca che cose come STDOUT vengano visualizzate sullo schermo nel solito modo.

Se la percentuale della batteria è già visualizzata sullo schermo continuamente dal sistema operativo, come su molti telefoni, ciò non significa che hai una soluzione a zero byte. È necessario supporre che il display integrato non esista e visualizzare nuovamente la percentuale della batteria da qualche altra parte.

Modifica: il formato di output è in fase di apertura. Sei libero di visualizzare solo le cifre della percentuale o anche quelle con un output extra.

Modifica2: le cifre che rappresentano la percentuale devono apparire in una posizione nota all'interno dell'output, a non più di 50 righe dalla fine dell'output, e tale posizione non dovrebbe cambiare tra le chiamate. Le cifre che rappresentano la percentuale devono essere separate dall'altro output di almeno un carattere non numerico su ciascun lato.

Per riferimento qui è il vecchio formato di output precedente alla modifica:

Remaining battery is ddd% o Remaining battery is ddd percent


11
Questa è una sfida unica perché la lingua scelta dipende in gran parte dall'ambiente e il miglior golf farà affidamento sull'api presentato in quell'ambiente. Non sono sicuro che sia buono o cattivo, ah
Poke

4
Come viene definita la percentuale di batteria? Non ho molta familiarità con il funzionamento dell'hardware, ma ho sempre avuto l'impressione che la percentuale della batteria fosse una sorta di uristica in termini di utilizzo previsto.
Mago del grano

3
Perché il formato di output è così rigoroso?
Okx,

1
@WW Penso di aver sentito parlare di telefoni che lo visualizzano come "percentuale". Ovviamente non dovrebbero essere fuorvianti e condiscendenti per l'utente. Ma a meno di chiedere alle persone di giocare a golf con un nuovo driver di dispositivo a livello hardware, sono disposto ad accettare qualsiasi% che il sistema operativo o l'API a livello di sistema offre.
Jared K,

2
@ user202729 Quella risposta electronics.SE riguarda la misurazione interna, ma ciò che è esposto all'utente è spesso un numero ridotto: le batterie agli ioni di litio si scaricano più velocemente più carica hanno (o è il contrario?), ma il dispositivo (di solito) regola per mostrare un cambiamento un po 'lineare nella percentuale della batteria poiché sembra più prevedibile per noi utenti.
Sundar - Ripristina Monica il

Risposte:


43

Bash, 70 67 50 46 43 16 byte

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

Uscite: <battery 0-100>: command not found

Legge il file /sys/class/power_supply/BAT1/capacity.

Testato usando Ubuntu 18.04 su un LENOVO ideapad 500.

Richiede un po 'di tempo (poiché cerca l'intero filesystem) - ma salva un byte!

Vecchia risposta:

echo Remaining battery is `</*/*/*/B*/c*y`%

38
Richiede un po 'di tempo (poiché cerca l'intero filesystem) - ma salva un byte! - questo è il codice golf per te!
Stewie Griffin,

11
Hm, non sono sicuro che si possa garantire che non ci sia un file chiamato /so/apes/yadayada/Brunch/calamity.
Erik the Outgolfer

4
@EriktheOutgolfer Mi è stato detto che posso assumere una nuova installazione.
Okx,

11
@EriktheOutgolfer Sono così felice che il brunch venga servito prima della fine del mondo.
mbomb007

1
@algmyr A quel punto potrei anche fareecho {0.100}
Okx

13

JavaScript (browser), 78 77 50 byte

(-1 byte grazie a Benoit Esnard )

(-27 byte poiché il formato di output è flessibile ora)

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

JavaScript (browser), 46 byte, restituendo una promessa

(Suggerito da Shaggy , richiede intestazione e piè di pagina)

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


Nota: funziona solo su Google Chrome> = 38 (desktop e Android) o qualsiasi altro browser che supporti l' API Batteria . FireFox ha rimosso questa API a causa di problemi di privacy.

Esempio su Android (vecchio formato di output):

inserisci qui la descrizione dell'immagine

Esempio su un laptop Windows (vecchio formato di output):

inserisci qui la descrizione dell'immagine


È possibile salvare un byte utilizzando i modelli di stringa ES6:`Remaining battery is ${b.level*100}%`
Benoit Esnard

@Benoit Esnard: bella idea! Grazie ...
Night2

2
Non ho mai capito che puoi ottenere il livello della batteria di un utente in una pagina web. Non riesco a pensare a quando quella funzionalità sarebbe effettivamente utile per un utente.
numbermaniac

2
@numbermaniac Ai tempi, PoC presentava siti Web che includevano una modalità a basso consumo basata sul livello della batteria del dispositivo. Peccato che non pensassero che tutto ciò potesse essere usato anche per rintracciarti senza la necessità di cookie.
Alexis Facques,

4
@numbermaniac: uno degli usi è di salvare automaticamente un modulo quando la batteria dell'utente è scarica. Ma ci possono essere molti abusi per questo ed è per questo che FireFox lo ha rimosso.
Night2

12

PowerShell , 28 byte

-26 (!) Grazie ad AdmBorkBork. Versione precedente -3 grazie a colsw.

((gwmi win32_battery)|% e*g)

inserisci qui la descrizione dell'immagine

gwmi è l'abbreviazione di Get-WmiObject

|%prende il modello e*ge trova l'unica proprietà corrispondente;estimatedChargeRemaining


1
Usando questo suggerimento , puoi giocare a golf lungo il nome della proprietà - ((gwmi win32_battery)|% e*g).
AdmBorkBork,

@AdmBorkBork Grazie ancora. Come puoi dire, non sono un giocatore di golf Powershell (o anche un utente). Ho appena usato un po 'di Google-fu ...
Adám,

Se il dispositivo ha più di una batteria, viene visualizzato qualcosa del genereRemaining battery is 98 96%
Vasily Alexeev

@VasilyAlexeev OP sembra che potremmo scegliere un dispositivo appropriato.
Adám,

Passa "abc"+(def)+"ghi"a "abc$(def)ghi"per salvarne ancora.
domenica

10

Bash + acpi, 43 4 byte

Nuove regole

acpi

output sul modulo

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

non sei sicuro che la modifica della regola renda le cose più interessanti, non potresti scaricare qualsiasi testo che contenga tutte le stringhe da 0 a 100 che sarebbe un output valido? Sembra perdere l'intento originale in tal caso.

Vecchie regole

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

output sul modulo

Remaining battery is 92%

Non chiedermi perché set funzioni in questo modo, ma funziona.


Su cosa l'hai provato? Ubuntu o simili sto indovinando? Non funziona su Mac, ad esempio.
numbermaniac

Funziona su fedora, ma dipende fortemente dalla sintassi dell'output (che cos'è Mac per riferimento? @Numbermaniac)?
Wilf

Presumo sia quello disponibile per la maggior parte delle distribuzioni Linux. Il formato di output di acpi è forse diverso su Mac (acpi è disponibile anche lì)?
algmyr,

@Wilf acpisemplicemente non c'è su Mac, a quanto pare.
numbermaniac

Può essere installato separatamente su alcune distribuzioni di Linux, mac probabilmente ha i suoi driver e comandi equivalenti.
Wilf

6

Python 3.6 +psutil , 80 byte

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

Provalo online!

Se la macchina non ha la batteria (come su TIO), il programma genererà un errore, perché psutil.sensors_battery() ritorna None.

Ciò richiede Python 3.6 per l'interpolazione di stringhe .


1
Idk. È incluso in TIO. Includerò un collegamento al modulo.
mbomb007,

Ho cercato su Google e ho trovato la stessa libreria ma la mia risposta di Python 2 non era intelligente come la tua con interpolazione di stringhe. Nota per sé: deve entrare in Python 3.6 e rispondere più velocemente. +1
ElPedro

5

C (win32, gcc i686-w64-mingw32), 78 byte

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

Abusa dell'API win32 lasciando GetSystemPowerStatus()scrivere "da qualche parte" nello stack, il membro interessante si trova nel terzo byte, secondo la SYSTEM_POWER_STATUSstruttura .

Sfortunatamente, il #include sembra essere necessario, probabilmente a causa delle convenzioni di chiamata.

Esempio di output:

> bat.exe
90

Viene visualizzato 255su sistemi senza batteria.


Cosa succede se si omette l'inclusione?
Ruslan,

1
@Ruslan il linker non trova il simbolo in kernel32.dll. Ecco perché penso che sia la convenzione di chiamata, le funzioni API di win32 non usano lo "standard" cdecl. Quindi, anche se potessi ingannare il linker in qualche modo, il codice probabilmente non funzionerebbe comunque.
Felix Palmen,

Hai provato a compilare con /Gz(impostazione predefinita __stdcall)?
Neil

@Neil no, gcc / mingw ha un'opzione simile o devo usare msvc per questo? E ciò non spezzerebbe il printf()senza prototipo?
Felix Palmen,

Scusa, non avevo letto abbastanza bene la tua intestazione. Penso che la versione di Mingw sia -mrtd, ma non so cosa succederebbe printf(); forse c'è un'inclusione più breve per questo?
Neil,

4

Excel VBA, 150 byte

Limitato alle installazioni di Office a 32 bit di Office, poiché la chiamata Kernel32 di Windows non è sicura per il puntatore a 64 bit.

Emette nella cella A1sul foglio attivo.

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 byte grazie all'output flessibile

-7 byte grazie a @Neil per l'utilizzo di un Int invece di 2 byte


2
Il puntatore a 64 bit non è sicuro? Che cosa? È ridicolo, Microsoft.
user253751

@immibis ha a che fare con una differenza tra le versioni - se stai usando un'installazione a 64 bit di Office, la chiamata cambia solo per essereDeclare PtrSafe Sub GetSystemPowerStatus Lib"kernel32"(f As t)
Taylor Scott

Non puoi usare un array di byte invece di una struttura?
Neil,

@Neil - sfortunatamente no, la chiamata Lib assegna f a un puntatore della _SYSTEM_POWER_STATUSstruttura , che contiene sia i valori byte che dword, il che significa che, in questo caso, la struttura deve essere emulata dall'interno di vba e non è possibile utilizzare un array di byte .
Taylor Scott,

Se non è possibile utilizzare un array, non è possibile utilizzare almeno un tipo a due byte come riempimento anziché due singoli byte?
Neil,

3

QPython per Android , 133 byte

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

Code screen

Output screen

Non +"%"è strettamente necessario poiché utilizza comunque il nuovo formato di output più flessibile, ma rende l'output leggermente più bello a soli +4 byte.


[ d.notify(creare un avviso di notifica) sarebbe stato molto più breve rispetto alla creazione e alla visualizzazione della finestra di dialogo, ma per qualche motivo non funziona, almeno sul mio dispositivo (probabilmente, non è stato aggiornato per le nuove API Android).]
Sundar - Ripristina Monica il

Questo funziona per 130 byte.
Ovs

2

Emacs Lisp, 9 byte

(battery)

Mostra lo stato corrente della batteria nel mini-buffer nella parte inferiore (o allo stdout durante l'utilizzo --batch ) in un formato come:Power N/A, battery Unknown (99.1% load, remaining time N/A) .

Dovrebbe funzionare su Windows, OSX, BSD e Linux.



1

Java, 546 byte (Windows XP o versione successiva)

L'utility powercfg è entrata in gioco per WindowsXP, non ho idea di quali utilità fossero disponibili prima di questo. Devo anche essere eseguito come amministratore. È terribile e non ho fatto un tentativo estremo di golf ...

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);}}

Formattato / commentato ...

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 %.
    }
}

Sinceramente ero più interessato a vedere se fosse possibile anche in Java.


Dover chiamare un comando esterno come quello, quindi leggere i risultati del comando esterno da un file ... quindi dover calcolare tu stesso la percentuale. E così prolisso. È terribile, lo adoro. Sono contento che le persone provino queste cose in lingue inadatte, è così divertente. +1
Jared K

1
@JaredK Mi piace il "golf" di Java, ma solo su domande in cui la gente pensa: "oddio no, che idiota avrebbe mai provato questo in Java? Semplicemente non avrebbe senso". Una specie di ironico.
Magic Octopus Urn

A volte penso che Java dovrebbe ottenere una versione per il golf come Japt è stata creata per il golf Javascript.
Jared K,

Se guardo Groovy o Clojure, probabilmente JJ potrebbe trasformarlo in una risposta groovy da 100 byte se provassi in modo super duro.
Magic Octopus Urn,

@JaredK ecco un'approssimazione di questa stessa risposta 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.