शेष बैटरी प्रदर्शित करें


26

शेष बैटरी चार्ज को अधिकतम चार्ज के प्रतिशत के रूप में प्रदर्शित करें

याद रखें कि यदि आप फोन, कैलकुलेटर आदि पर अपना कोड नहीं चला सकते हैं, तो आप कम से कम लैपटॉप पर अपना वातावरण स्थापित कर सकते हैं। यदि आप बैटरी वाले उपकरण पर पूरी तरह से नहीं चल सकते हैं, तो दुर्भाग्य से आपकी भाषा योग्य नहीं है क्योंकि आपके पास प्रिंट करने के लिए कोई उपयोगी मूल्य नहीं है।

आपको स्क्रीन पर परिणाम प्रदर्शित करने होंगे। यह सैद्धांतिक रूप से उपयोगकर्ता के लिए बैटरी की जांच करने के लिए एक उपयोगी उपयोगिता माना जाता है। किसी फ़ाइल में बैटरी प्रतिशत लिखना बहुत अधिक कठिन होता है, जिसके लिए उपयोगकर्ता को फ़ाइल की जाँच करने की आवश्यकता होती है। इसलिए ऑन-स्क्रीन प्रदर्शित करना विनिर्देश का एक हिस्सा है जिसे डिफ़ॉल्ट IO द्वारा ओवरराइड नहीं किया जा सकता है। उस ने कहा, आप मान सकते हैं कि कुछ भी नहीं है जैसे कि STDOUT जैसी चीजों को सामान्य तरीके से स्क्रीन पर प्रदर्शित किया जा रहा है।

यदि बैटरी का प्रतिशत ओएस पर हर समय स्क्रीन पर पहले से ही प्रदर्शित होता है, जैसे कि कई फोन, तो इसका मतलब यह नहीं है कि आपको शून्य-बाइट समाधान मिल गया है। आपको यह मान लेना चाहिए कि बिल्ट-इन डिस्प्ले मौजूद नहीं है, और बैटरी प्रतिशत को फिर से कहीं और प्रदर्शित करें।

संपादित करें: आउटपुट स्वरूप खोला जा रहा है। आप प्रतिशत के केवल अंकों या कुछ अतिरिक्त आउटपुट के साथ अंकों को प्रदर्शित करने के लिए स्वतंत्र हैं।

Edit2: प्रतिशत का प्रतिनिधित्व करने वाले अंक आउटपुट के भीतर एक ज्ञात स्थान में दिखाई देने चाहिए, आउटपुट के अंत से 50 से अधिक लाइनें नहीं हैं, और उस स्थान को इनवोकेशन के बीच नहीं बदलना चाहिए। प्रतिशत का प्रतिनिधित्व करने वाले अंकों को प्रत्येक तरफ कम से कम एक गैर-अंक वाले चरित्र द्वारा अन्य आउटपुट से अलग किया जाना चाहिए।

यहां संदर्भ के लिए परिवर्तन से पहले पुराना आउटपुट प्रारूप है:

Remaining battery is ddd% या Remaining battery is ddd percent


11
यह एक अनोखी चुनौती है क्योंकि चुनी गई भाषा काफी हद तक पर्यावरण पर निर्भर करती है और सबसे अच्छा गोल्फ उस वातावरण में प्रस्तुत एपी पर बहुत भरोसा करने वाला है। यकीन नहीं होता कि यह अच्छा या बुरा है, हा
प्रोक

4
बैटरी प्रतिशत को किस रूप में परिभाषित किया गया है? मैं वास्तव में परिचित नहीं हूं कि हार्डवेयर कैसे काम करता है, लेकिन मैं हमेशा इस धारणा के तहत था कि बैटरी प्रतिशत अनुमानित उपयोग के संदर्भ में किसी तरह का hueristic था।
गेहूं जादूगर

3
आउटपुट स्वरूप इतना सख्त क्यों है?
ओकेक्स

1
@ मुझे लगता है कि मैंने फोन को 'प्रतिशत' के रूप में प्रदर्शित करते हुए सुना है। वे निश्चित रूप से, यह केवल भ्रामक और उपयोगकर्ता के लिए कृपालु नहीं होना चाहिए। लेकिन लोगों को एक नए हार्डवेयर-स्तरीय डिवाइस ड्राइवर को गोल्फ के लिए कहने के लिए, मैं ओएस या सिस्टम-स्तरीय एपीआई को देने वाले किसी भी% को स्वीकार करने के लिए तैयार हूं।
जारेड के

2
@ user202729 वह इलेक्ट्रॉनिक्स। एस उत्तर आंतरिक माप के बारे में है, लेकिन उपयोगकर्ता के सामने जो बात सामने आती है, वह अक्सर एक सिद्धांतबद्ध संख्या होती है - ली-आयन बैटरियां जितनी अधिक चार्ज होती हैं, उतनी ही तेजी से निकल जाती हैं (या क्या यह दूसरा तरीका है?), लेकिन डिवाइस (आमतौर पर) इसके लिए समायोजित करता है कि बैटरी प्रतिशत में कुछ हद तक रैखिक परिवर्तन दिखाने के लिए क्योंकि यह हमारे उपयोगकर्ताओं के लिए अधिक अनुमानित है।
सूंदर -

जवाबों:


43

बैश, 70 67 50 46 43 16 बाइट्स

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

आउटपुट: <battery 0-100>: command not found

फ़ाइल पढ़ता है /sys/class/power_supply/BAT1/capacity

लेनोवो इडिपैड 500 पर उबंटू 18.04 का उपयोग करके परीक्षण किया गया।

कुछ समय लगता है (क्योंकि यह संपूर्ण फाइलसिस्टम को खोजता है) - लेकिन यह एक बाइट बचाता है!

पुराना उत्तर:

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

38
कुछ समय लगता है (क्योंकि यह संपूर्ण फाइलसिस्टम को खोजता है) - लेकिन यह एक बाइट बचाता है! - कि आप के लिए कोड गोल्फ है!
स्टिव ग्रिफ़िन

11
हम्म, मुझे यकीन नहीं है कि यह गारंटी दी जा सकती है कि कोई फ़ाइल नहीं है /so/apes/yadayada/Brunch/calamity
निकोलग्राफ जूल

4
@EriktheOutgolfer मुझे बताया गया है कि मैं एक नई स्थापना मान सकता हूं।
ओकेक्स

11
@EriktheOutgolfer मुझे बहुत खुशी है कि दुनिया खत्म होने से पहले ब्रंच परोसा जाता है।
mbomb007

1
@algmyr उस बिंदु पर मैं भी कर सकता हूंecho {0.100}
ओक्सएक्स

13

जावास्क्रिप्ट (ब्राउज़र), 78 77 50 बाइट्स

( बेनो एस्नार्ड के लिए -1 बाइट का धन्यवाद )

(-27 बाइट्स क्योंकि आउटपुट फॉर्मेट अब लचीला है)

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

एक वादा वापस करके जावास्क्रिप्ट (ब्राउज़र), 46 बाइट्स

( झबरा द्वारा सुझाया गया , शीर्ष लेख और पाद लेख की आवश्यकता है)

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


नोट: केवल Google Chrome> = 38 (डेस्कटॉप और एंड्रॉइड) या किसी अन्य ब्राउज़र पर काम करता है जो बैटरी एपीआई का समर्थन करता है । फ़ायर्फ़ॉक्स ने गोपनीयता की चिंताओं के कारण इस एपीआई को हटा दिया है।

Android पर उदाहरण (पुराना आउटपुट स्वरूप):

यहाँ छवि विवरण दर्ज करें

Windows लैपटॉप (पुराने आउटपुट स्वरूप) पर उदाहरण:

यहाँ छवि विवरण दर्ज करें


आप ES6 स्ट्रिंग टेम्प्लेट का उपयोग करके एक बाइट बचा सकते हैं:`Remaining battery is ${b.level*100}%`
बेनोइट एस्नर्ड

@ बीनिट एस्नर्ड: अच्छा विचार है! धन्यवाद ...
नाइट 2

2
मुझे कभी नहीं लगा कि आप किसी वेबपेज में उपयोगकर्ता का बैटरी स्तर प्राप्त कर सकते हैं। मैं नहीं सोच सकता कि जब यह सुविधा वास्तव में एक उपयोगकर्ता के लिए उपयोगी होगी।
नंबरमान जूल

2
@numbermaniac बैक इन दिनों, PoC ने ऐसी वेबसाइटें दिखाईं, जिनमें डिवाइस के बैटरी स्तर के आधार पर एक कम-शक्ति मोड शामिल था। बहुत बुरा लगा कि उन्हें नहीं लगता कि यह सब आपको कुकीज़ की आवश्यकता के बिना ट्रैक करने के लिए भी इस्तेमाल किया जा सकता है ।
एलेक्सिस फेस

4
@numbermaniac: यूजर्स की बैटरी कम होने पर यूजेज में से एक है ऑटो को सेव करना। लेकिन इसके लिए कई दुरुपयोग हो सकते हैं और यही कारण है कि फायरफॉक्स ने इसे हटा दिया है।
रात 2

12

पॉवरशेल , 28 बाइट्स

-26 (!) AdmBorkBork के लिए धन्यवाद। पिछले संस्करण -3 कोल्स के लिए धन्यवाद।

((gwmi win32_battery)|% e*g)

यहाँ छवि विवरण दर्ज करें

gwmi के लिए छोटा है Get-WmiObject

|%पैटर्न लेता है e*gऔर एकमात्र मिलान गुण पाता है;estimatedChargeRemaining


1
इस टिप का उपयोग करके , आप लंबी संपत्ति के नाम को नीचे कर सकते हैं - ((gwmi win32_battery)|% e*g)
AdmBorkBork

@AdmBorkBork फिर से धन्यवाद। जैसा कि आप बता सकते हैं, मैं पॉवरशेल गोल्फर (या यहां तक ​​कि उपयोगकर्ता) नहीं हूं। बस थोड़ा सा गूगल-फू का इस्तेमाल किया ...
Adám

यदि डिवाइस में एक से अधिक बैटरी है, तो यह कुछ इस तरह प्रदर्शित करता हैRemaining battery is 98 96%
वासिली अलेक्सई

@VasilyAlexeev ओपी लगता है कि हम एक उपयुक्त उपकरण चुन सकते हैं।
Adám

कुछ और बचाने के "abc"+(def)+"ghi"लिए बदलें "abc$(def)ghi"
Colsw

10

बैश + एकपी, 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%

मुझे मत पूछो क्यों सेट इस तरह काम करता है, लेकिन यह करता है।


आपने इस पर क्या परीक्षण किया? Ubuntu या इसी तरह मैं अनुमान लगा रहा हूं? उदाहरण के लिए, यह मैक पर काम नहीं करता है।
नंबरमान जूल

फेडोरा पर काम करता है, लेकिन यह आउटपुट के सिंटैक्स पर निर्भर करता है (यह संदर्भ के लिए मैक पर क्या है? @Numbermaniac)
विल्फ

मुझे लगता है कि यह सबसे लिनक्स डिस्ट्रोस के लिए उपलब्ध है। एसपीआई आउटपुट स्वरूप मैक पर शायद अलग है (एसपीआई भी वहां उपलब्ध है)?
algmyr

@Wilf acpiबस वहाँ पर नहीं है MAC ऐसा लगता है।
नंबर

इसे कुछ लिनक्स डिस्ट्रोस पर अलग से स्थापित किया जा सकता है, मैक की संभावना है कि इसके बराबर ड्राइवर और कमांड हैं।
विल्फ

6

पायथन 3.6 + psutil, 80 बाइट्स

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

इसे ऑनलाइन आज़माएं!

यदि मशीन में बैटरी नहीं है (जैसे TIO पर), तो प्रोग्राम एक त्रुटि फेंक देगा, क्योंकि psutil.sensors_battery()रिटर्न None

स्ट्रिंग इंटरपोलेशन के लिए इसे पायथन 3.6 की आवश्यकता होती है


1
Idk। यह TIO पर शामिल है। मैं मॉड्यूल के लिए एक लिंक शामिल करूंगा।
mbomb007

मैंने गोगल किया और उसी लाइब्रेरी को पाया लेकिन मेरा पायथन 2 का उत्तर स्ट्रिंग इंटरपोल के साथ आपका उतना स्मार्ट नहीं था। स्वयं पर ध्यान दें: अजगर 3.6 में जाना चाहिए और तेजी से जवाब देना चाहिए। +1
एलपेड्रो

5

सी (win32, gcc i686-w64-mingw32), 78 बाइट्स

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

GetSystemPowerStatus()स्टैक पर "कहीं" लिखने की अनुमति देकर win32 एपीआई का दुरुपयोग करता है , दिलचस्प सदस्य SYSTEM_POWER_STATUSसंरचना के अनुसार तीसरे बाइट में है ।

दुर्भाग्य से, #includeलगता है की जरूरत है, शायद सम्मेलनों को बुलाने के कारण।

उदाहरण आउटपुट:

> bat.exe
90

255बैटरी के बिना सिस्टम पर प्रदर्शित करता है।


यदि आप शामिल को छोड़ देते हैं तो क्या होता है?
रुस्लान

1
@Ruslan लिंकर को प्रतीक नहीं मिलता है kernel32.dll। इसलिए मुझे लगता है कि यह कॉलिंग कन्वेंशन है, win32 एपीआई फ़ंक्शन "मानक" का उपयोग नहीं करते हैं cdecl। इसलिए भले ही मैं लिंकर को किसी भी तरह से छल सकता हूं, कोड शायद किसी भी तरह से काम नहीं करेगा।
फेलिक्स पालमेन

क्या आपने /Gz(डिफ़ॉल्ट से __stdcall) संकलन करने का प्रयास किया ?
नील

@ नहीं, नहीं, gcc / mingw के पास एक समान विकल्प है या क्या मुझे उसके लिए msvc का उपयोग करना है? और यह printf()एक प्रोटोटाइप के बिना नहीं टूटेगा ?
फेलिक्स पाम्स

क्षमा करें, मैंने आपके हेडर को ध्यान से नहीं पढ़ा था। मुझे लगता है कि मिंगव संस्करण है -mrtd, लेकिन मुझे नहीं पता कि क्या होगा printf(); हो सकता है कि इसके लिए कोई छोटा शामिल हो?
नील

4

एक्सेल VBA, 150 बाइट्स

32-बिट विंडोज कार्यालय में प्रतिबंधित है, क्योंकि विंडोज़ कर्नेल 32 कॉल 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 बाइट्स लचीले आउटपुट के लिए धन्यवाद

-7 बाइट्स 2 बाइट्स के बजाय एक इंट का उपयोग करने के लिए @ निल का धन्यवाद


2
64-बिट सूचक सुरक्षित नहीं है? क्या? यह हास्यास्पद है, Microsoft।
user253751

@immibis ने संस्करणों के बीच एक अंतर के साथ क्या किया है - यदि आप कार्यालय के 64 बिट इंस्टाल का उपयोग कर रहे हैं तो कॉल सिर्फ परिवर्तन के लिए होता हैDeclare PtrSafe Sub GetSystemPowerStatus Lib"kernel32"(f As t)
टेलर स्कॉट

क्या आप संरचना के बजाय बाइट सरणी का उपयोग नहीं कर सकते हैं?
नील

@ नील - दुर्भाग्य से, लीब कॉल _SYSTEM_POWER_STATUSसंरचना के एक सूचक को f प्रदान करता है , जो बाइट और डॉर्ड मान दोनों को धारण करता है, जिसका अर्थ है, इस स्थिति में, संरचना को vba के भीतर से उत्सर्जित किया जाना है, और एक बाइट का उपयोग नहीं किया जा सकता है ।
टेलर स्कॉट

यदि आप किसी सरणी का उपयोग नहीं कर सकते हैं, तो क्या आप कम से कम दो एकल बाइट्स के बजाय अपने पैडिंग के रूप में दो-बाइट प्रकार का उपयोग नहीं कर सकते हैं?
नील

3

Android के लिए QPython , 133 बाइट्स

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

कोड स्क्रीन

आउटपुट स्क्रीन

यह +"%"कड़ाई से आवश्यक नहीं है क्योंकि यह वैसे भी नए अधिक लचीले आउटपुट प्रारूप का उपयोग करता है, लेकिन यह सिर्फ +4 बाइट्स में थोड़ा अच्छे आउटपुट के लिए बनाता है।


[ d.notify(बनाने अधिसूचना चेतावनी) बनाने और संवाद प्रदर्शित की तुलना में काफी कम हो गया होता, लेकिन किसी कारण यह काम नहीं करता, के लिए अपने डिवाइस (संभवतः, यह नए Android एपीआई के लिए अद्यतन नहीं किया गया) पर कम से कम।]
सूंदर -

यह 130 बाइट्स के लिए काम करता है।
12

2

एमएसीएस लिस्प, 9 बाइट्स

(battery)

--batchइस तरह के प्रारूप में नीचे (या का उपयोग करते समय stdout करने के लिए ) नीचे मिनी बफर में वर्तमान बैटरी की स्थिति से पता चलता है Power N/A, battery Unknown (99.1% load, remaining time N/A):।

विंडोज, ओएसएक्स, बीएसडी और लिनक्स पर काम करना चाहिए।



1

जावा, 546 बाइट्स (विंडोज एक्सपी या उच्चतर)

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

ईमानदारी से मुझे यह देखने में अधिक दिलचस्पी थी कि क्या यह जावा में भी संभव था।


बाहरी कमांड को उस तरह से कॉल करना, फिर किसी फाइल से बाहरी कमांड के परिणाम पढ़ना ... फिर प्रतिशत की गणना स्वयं करना। और इसलिए क्रिया। यह भयानक है मैं इसे प्यार करता हूँ। मुझे खुशी है कि लोग इन चीजों को बीमार-अनुकूल भाषाओं में आज़माते हैं, यह बहुत मजेदार है। +1
जेरेड के

1
@ जारेडके मैं जावा "गोल्फिंग" का आनंद लेता हूं, लेकिन केवल उन सवालों पर जहां लोग सोचते हैं, "हे भगवान नहीं, जावा में क्या कभी मोरोन यह कोशिश करेगा? यह सिर्फ समझ में नहीं आएगा।" विडंबना की तरह।
मैजिक ऑक्टोपस Urn

कभी-कभी मुझे लगता है कि जावा को गोल्फिंग संस्करण प्राप्त करना चाहिए, जैसे कि कैसे जेटिंग गोल्फिंग के लिए जाप बनाया गया था।
जेरेड के

@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}
मैजिक ऑक्टोपस Urn
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.