배터리 잔량 표시


26

배터리 잔량을 최대 충전량의 백분율로 표시

전화, 계산기 등에서 코드를 실행할 수없는 경우 적어도 랩톱에 환경을 설치할 수 있습니다. 배터리가 장착 된 장치에서 절대 실행할 수없는 경우 인쇄 할 가치가 없기 때문에 언어를 사용할 수 없습니다.

화면에 결과를 표시해야합니다. 이것은 이론적으로 사용자가 배터리를 확인할 수있는 편리한 유틸리티입니다. 배터리 백분율을 파일에 쓰는 것이 너무 복잡하여 사용자가 파일을 확인해야합니다. 따라서 화면에 표시하는 것은 기본 IO로 재정의 할 수없는 사양의 일부입니다. 즉, STDOUT과 같은 것들이 일반적인 방식으로 화면에 표시되는 것을 막을 수 있다고 가정 할 수는 없습니다.

많은 전화와 같이 OS에 의해 배터리 비율이 이미 화면에 항상 표시 되어도 0 바이트 솔루션이 있다는 의미는 아닙니다. 내장 디스플레이가 존재하지 않는다고 가정하고 배터리 어딘가에 다른 퍼센트를 다시 표시하십시오.

편집 : 출력 형식이 열려 있습니다. 백분율의 자릿수 또는 약간의 추가 출력이있는 자릿수만큼 자유롭게 표시 할 수 있습니다.

Edit2 : 백분율을 나타내는 숫자는 출력 끝에서 50 줄을 넘지 않는 출력 내의 알려진 위치에 나타나야하며 호출간에 위치가 바뀌지 않아야합니다. 백분율을 나타내는 숫자는 각면에서 하나 이상의 숫자가 아닌 문자로 다른 출력과 분리해야합니다.

다음은 변경 전의 이전 출력 형식입니다.

Remaining battery is ddd% 또는 Remaining battery is ddd percent


11
선택한 언어는 환경에 크게 의존하고 최고의 골프는 해당 환경에 제시된 API에 크게 의존하기 때문에 이는 독창적 인 과제입니다. 그것이 좋은지 나쁜지 확실하지 않습니다, ha
Poke

4
배터리 비율은 무엇입니까? 나는 하드웨어가 어떻게 작동하는지는 잘 모르지만 배터리 사용률은 예측 된 사용의 관점에서 일종의 hueristic이라는 인상을 항상 받았다.
밀 마법사

3
출력 형식이 왜 그렇게 엄격한가?
Okx

1
@WW 전화가 '백분율'로 표시된다고 들었습니다. 물론 사용자에게 오해의 소지가 있고 혼동해서는 안됩니다. 그러나 사람들에게 새로운 하드웨어 수준의 장치 드라이버를 제공하라고 요구하지 않는 한, OS 또는 시스템 수준 API가 제공하는 %를 받아들이고 자합니다.
Jared K

2
@ user202729 그 electronics.SE의 대답은 내부 측정에 관한 것이지만, 사용자에게 노출되는 것은 종종 의사의 수입니다. 리튬 이온 배터리는 충전량이 많을수록 더 빨리 소모됩니다 (또는 다른 방법입니까?). (보통) 사용자에게 더 예측 가능하기 때문에 배터리 비율이 약간 선형으로 변경되도록 조정합니다.
sundar-복원 모니카

답변:


43

배쉬, 70 67 50 46 43 16 바이트

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

출력 : <battery 0-100>: command not found

파일을 읽습니다 /sys/class/power_supply/BAT1/capacity.

LENOVO ideapad 500에서 Ubuntu 18.04를 사용하여 테스트했습니다.

전체 파일 시스템을 검색하기 때문에 시간이 걸리지 만 바이트를 절약합니다!

이전 답변 :

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

38
전체 파일 시스템을 검색하기 때문에 시간이 걸리지 만 바이트를 절약합니다! -그건 당신을위한 코드 골프입니다!
Stewie Griffin

11
흠, 파일이 없다고 확신 할 수 있는지 확실하지 않습니다 /so/apes/yadayada/Brunch/calamity.
Outgolfer 에릭

4
@EriktheOutgolfer 나는 새로 설치한다고 가정합니다.
Okx

11
@EriktheOutgolfer 세계가 끝나기 전에 브런치가 제공되어 기쁩니다.
mbomb007

1
@algmyr 그 시점에서 나는 또한 할지도 모른다echo {0.100}
Okx

13

자바 스크립트 (브라우저), 78 77 50 bytes

( Benoit Esnard 덕분에 1 바이트 )

(현재 출력 형식이 유연하므로 -27 바이트)

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

약속을 반환하여 JavaScript (브라우저), 46 바이트

( Shaggy 제안 , 머리글 및 바닥 글 필요)

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


참고 : Chrome> = 38 (데스크톱 및 Android) 또는 Battery API 를 지원하는 다른 브라우저에서만 작동 합니다 . FireFox는 개인 정보 보호 문제로 인해이 API를 제거했습니다.

Android의 예 (이전 출력 형식) :

여기에 이미지 설명을 입력하십시오

Windows 랩톱의 예 (이전 출력 형식) :

여기에 이미지 설명을 입력하십시오


ES6 문자열 템플릿을 사용하여 1 바이트를 절약 할 수 있습니다.`Remaining battery is ${b.level*100}%`
Benoit Esnard

@Benoit Esnard : 좋은 생각입니다! 감사합니다 ...
Night2

2
나는 당신이 웹 페이지에서 사용자의 배터리 수준을 얻을 수 있다는 것을 결코 깨닫지 못했습니다. 그 기능이 실제로 사용자에게 언제 유용한 지 생각할 수 없습니다.
numbermaniac

2
@numbermaniac 요즘 PoC에는 장치의 배터리 수준에 따라 저전력 모드가 포함 된 웹 사이트가있었습니다. 너무 안타깝게도 쿠키 없이도이 모든 정보를 추적 할 수 있다고 생각하지 않았습니다 .
Alexis Facques

4
@numbermaniac : 사용법 중 하나는 사용자의 배터리가 부족할 때 양식을 자동 저장하는 것입니다. 그러나 오용이 많을 수 있으므로 FireFox가이를 제거했습니다.
Night2

12

PowerShell , 28 바이트

AdmBorkBork 덕분에 -26 (!). colsw 덕분에 이전 버전 -3.

((gwmi win32_battery)|% e*g)

여기에 이미지 설명을 입력하십시오

gwmi 짧다 Get-WmiObject

|%패턴을 가져 와서 e*g일치하는 유일한 속성을 찾습니다.estimatedChargeRemaining


1
이 팁을 사용 하면 긴 속성 이름 인-를 사용할 수 있습니다 ((gwmi win32_battery)|% e*g).
AdmBorkBork

@AdmBorkBork 다시 감사합니다. 당신이 알 수 있듯이, 나는 Powershell 골퍼 (또는 심지어 사용자)가 아닙니다. 방금 Google-fu를 사용했습니다…
Adám

장치에 둘 이상의 배터리가있는 경우 다음과 같이 표시됩니다.Remaining battery is 98 96%
Vasily Alexeev

@VasilyAlexeev OP는 적절한 장치를 선택할 수있는 것처럼 들립니다.
Adám

변경 "abc"+(def)+"ghi"하는 "abc$(def)ghi"좀 더 저장합니다.
colsw

10

Bash + acpi, 43 4 바이트

새로운 규칙

acpi

양식에 출력

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

규칙 변경으로 인해 더 흥미로운 것이 있는지 확실하지 않으면 유효한 출력이 될 모든 문자열 0 ~ 100을 포함하는 텍스트를 덤프 할 수 없습니까? 그렇다면 원래 의도를 잃어버린 것 같습니다.

오래된 규칙

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

양식에 출력

Remaining battery is 92%

왜 세트가 이런 식으로 작동하는지 묻지 마십시오.


무엇을 테스트 했습니까? 우분투 또는 비슷한 것 같아요? 예를 들어 Mac에서는 작동하지 않습니다.
numbermaniac

fedora에서 작동하지만 출력 구문에 크게 의존합니다 (참조를 위해 mac에서 무엇입니까? @numbermaniac)?
Wilf

나는 그것이 대부분의 리눅스 배포판에서 사용할 수 있다고 가정합니다. Mac에서 acpi 출력 형식이 다를 수 있습니까?
algmyr

@Wilf는 acpi단순히 Mac에없는 것 같습니다.
numbermaniac

일부 Linux 배포판에 별도로 설치할 수 있습니다. mac에는 자체적으로 동등한 드라이버와 명령이 내장되어 있습니다.
Wilf

6

파이썬 3.6 + psutil, 80 바이트

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

온라인으로 사용해보십시오!

기계에 배터리가없는 경우 (예 : TIO) psutil.sensors_battery()는을 반환 하므로 프로그램에서 오류가 발생 합니다 None.

문자열 보간을 위해서는 Python 3.6이 필요합니다 .


1
Idk. TIO에 포함되어 있습니다. 모듈에 대한 링크를 포함하겠습니다.
mbomb007

나는 같은 라이브러리를 찾았지만 파이썬 2 답변은 문자열 보간을 사용하는 것만 큼 똑똑하지 않았습니다. 자기주의 사항 : Python 3.6에 들어가서 더 빨리 대답해야합니다. +1
ElPedro

5

C (win32, gcc i686-w64-mingw32), 78 바이트

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

structGetSystemPowerStatus() 에 따르면 스택에 "어딘가"를 쓰 도록하여 win32 API를 남용합니다 . 흥미로운 멤버는 SYSTEM_POWER_STATUSstruct 에 따라 세 번째 바이트에 있습니다.

불행히도 #include전화 규칙 때문에 아마도 필요한 것 같습니다.

출력 예 :

> bat.exe
90

255배터리가없는 시스템에 표시 됩니다.


포함을 생략하면 어떻게됩니까?
Ruslan

1
@Ruslan 링커가에서 기호를 찾지 못했습니다 kernel32.dll. 그것이 내가 호출 규칙 이라고 생각 하는 이유입니다 . win32 API 함수는 "standard"를 사용하지 않습니다 cdecl. 따라서 어떻게 든 링커를 속일 수는 있지만 코드가 작동하지 않을 수 있습니다.
Felix Palmen

/Gz(기본값은 __stdcall) 으로 컴파일을 시도 했습니까 ?
Neil

@Neil 아니요, gcc / mingw에 비슷한 옵션이 있습니까? 아니면 msvc를 사용해야합니까? 그리고 그것이 printf()프로토 타입 없이는 깨지지 않습니까?
Felix Palmen

죄송합니다. 헤더를 충분히 읽지 못했습니다. mingw 버전은이라고 생각 -mrtd하지만 어떻게 될지 모르겠습니다 printf(). 아마도 더 짧은 포함이 있습니까?
Neil

4

Excel VBA, 150 바이트

32 비트 Windows로 제한됨 Windows Kernel32 호출은 64 비트 포인터 안전이 아니기 때문에 사무실 설치.

A1ActiveSheet 의 셀로 출력합니다 .

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 바이트

2 바이트 대신 Int를 사용하는 @Neil 덕분에 -7 바이트


2
64 비트 포인터 안전하지 않습니까? 뭐? 말도 안돼, 마이크로 소프트
user253751

@immibis 버전 간 차이와 관련이 있습니다. 64 비트 Office 설치를 사용하는 경우 전화는 다음과 같이 변경됩니다.Declare PtrSafe Sub GetSystemPowerStatus Lib"kernel32"(f As t)
Taylor Scott

구조 대신 바이트 배열을 사용할 수 없습니까?
Neil

@Neil-불행히도 Lib 호출은 _SYSTEM_POWER_STATUS구조 의 포인터에 f를 할당합니다 . 이는 바이트와 dword 값을 모두 보유합니다.이 경우 구조는 vba 내에서 에뮬레이션되어야하며 바이트 배열을 사용할 수 없습니다 .
Taylor Scott

배열을 사용할 수 없다면 적어도 2 바이트 유형을 2 바이트 단일 바이트 대신 패딩으로 사용할 수 없습니까?
Neil

3

Android 용 QPython , 133 바이트

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

코드 화면

출력 화면

+"%"어쨌든 새로운 더 유연한 출력 형식을 사용하기 때문에 반드시 필요한 것은 아니지만, 그냥 4 바이트에서 약간 더 좋은 출력한다.


[ d.notify(알림 알림 생성)은 대화 상자를 생성하고 표시하는 것보다 훨씬 짧았지만 어떤 이유로 든 적어도 내 장치에서 작동하지 않을 수 있습니다 (아마도 최신 Android API 용으로 업데이트되지 않았을 수 있음).
sundar-복원 모니카

이것은 130 바이트에서 작동합니다.
ovs

2

이맥스 리스프, 9 바이트

(battery)

하단의 미니 버퍼 (또는 사용시 표준 출력 --batch)에 현재 배터리 상태 를 다음과 같은 형식으로 표시합니다 Power N/A, battery Unknown (99.1% load, remaining time N/A).

Windows, OSX, BSD 및 Linux에서 작동해야합니다.



1

Java, 546 바이트 (Windows XP 이상)

powercfg 유틸리티가 WindowsXP에서 사용되었으므로 이전에는 어떤 유틸리티가 사용 가능한지 잘 모르겠습니다. 또한 관리자 권한으로 실행해야합니다. 이것은 신의 위엄이며 나는 극단적 인 골프 시도를하지 않았다 ...

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

형식화 / 댓글 ...

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

솔직히 Java에서도 가능한지 더 관심이있었습니다.


그런 외부 명령을 호출 한 다음 파일에서 외부 명령의 결과를 읽은 다음 직접 백분율을 계산해야합니다. 그리고 너무 장황하다. 내가 그것을 사랑하는 것이 끔찍하다. 사람들이 적합하지 않은 언어로 이런 것들을 시험 해보니 너무 기쁩니다. +1
Jared K

1
@JaredK 나는 Java "golfing"을 좋아하지만 사람들이 "오, 그렇습니다. 어떤 moron이 Java로 이것을 시도할까요?" 아이러니의 종류.
Magic Octopus Urn

때로는 자바가 골프 자바 스크립트를 위해 Japt을 만든 것과 같은 골프 버전을 가져와야한다고 생각합니다.
Jared K

@JaredK는 Groovy 또는 Clojure를 살펴보면 슈퍼 열심히 시도하면 100 바이트 그루비 답변으로 바꿀 수 있습니다.
매직 문어 Urn

@JaredK 여기 그루비에서이 같은 대답의 근사치입니다 :{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}
매직 문어 항아리
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.