Скажи мені мою роздільну здатність екрана!


33

Виведіть роздільну здатність екрана пристрою у визначеному форматі [width]x[height](без дужок). Наприклад, вихід може бути 1440x900.

Ось онлайн-тестер, за допомогою якого можна перевірити власну роздільну здатність екрана.


17
Конкретний вихідний формат - це не цікаво, але зараз, мабуть, пізно змінити
Луїс Мендо

3
Якою має бути поведінка, якщо підключено кілька дисплеїв?
Джонатан Аллан

4
Я думаю, нам не дозволяють спочатку змінити вашу резолюцію, а потім сказати вам ці значення, правда?
Інженер Тост

3
APL \ 360 (може бути запущено лише в машинописному середовищі IBM / 360), 5 байт:'0x0'
Adám

4
Мені подобається, що ця дискваліфікує більшість мов для гольфу та спонукає людей досліджувати межі практичних.
Роббі

Відповіді:


38

JavaScript (ES6), 32 байти

(_=screen)=>_.width+"x"+_.height

Виходи як функція return. Додайте f=на початку та посилайтеся на зразок f(). Використовує ініціалізацію параметра для ініціалізації параметра _до screenоб'єкта. Решта - сама роз'яснення.

f=(_=screen)=>_.width+"x"+_.height
console.log(f())

Примітка: Передача аргументу цій функції призведе до її відмови.


JavaScript (попереднє рішення), 35 байт

with(screen)alert(width+"x"+height)

Ніколи не думав, що буду використовувати один день with! Я не думаю, що це може бути далі для гольфу.


Якщо дозволено використання REPL, s=screen,s.width+"x"+s.height(29 символів) також працює.
Кобі

Ооо. Добре використовувати значення аргументу за замовчуванням.
Метью Роу

35-байтне рішення може зберегти п'ять байтів, не заважаючи alert: with(screen)(width+'x'+height)просто повертає відповідний рядок.
KRyan

2
Ця відповідь принципово хибна. Я можу обдурити це, збільшуючи чи зменшуючи свій браузер!
Велика качка

1
Давайте, ви, хлопці, навіть намагаєтеся:, _=screen,_.width+"x"+_.height29 байт
M28,

33

TI-BASIC, 30 32 29 байт (не конкурує?)

* зітхання * TI-BASIC займає додатковий байт для кожної малої літери.

+2 завдяки @Timtech

-3 завдяки @Timtech

:If ΔX>.1
:Then
:Disp "96x64
:Else
:Disp "320x240

Це працює лише тому, що TI-BASIC можна запускати лише на калькуляторах з двома різними роздільними здатностями екрана: 96 на 64 та 320 на 240. Я просто перевіряю, щоб побачити, який екран у мене є, встановивши масштаб на щось, що залежить від роздільної здатності екрана виведення правильної роздільної здатності.

Я зараз відзначаю це як неконкурентоспроможне, оскільки це важко закодовано.


6
То розумне зловживання;)
Метью Ро на

1
Можна зберегти, не використовуючи, ZDecimalа потім використовуючи інше Xmaxпорівняння, принаймні один байт. Крім того, я думаю, що вам потрібно використовувати малі регістри, xякі є двома байтами (x2) замість однобайтового верхнього регістру.
Timtech

@Timtech Я повинен використовувати двобайтовий зум (як ZDecimal), оскільки зум за замовчуванням ( ZStandard) однаковий для обох калькуляторів. Я все-таки виправлю капіталізацію.
Скотт Мілнер

1
О, я бачу, що ти маєш на увазі. Якщо ви користуєтесь, ZStandardоднак, чи ΔXне відрізнятиметься вона між калькуляторами? Також ZDecimalє лише один байт, тому це 31 байт.
Timtech

2
З якоїсь причини моя моментальна реакція "це справедливо, але не було б дійсним, якби була лише одна можлива роздільна здатність екрана", але ця точка зору здається внутрішньо непослідовною. Тож я справді не впевнений, чи це обман чи ні.

20

JavaScript (ES6), 32 байти

_=>(s=screen).width+'x'+s.height

console.log((_=>(s=screen).width+'x'+s.height)())


2
версія лямбда прийнятна
Феліпе Нарді Батіста

6
_=>(s=screen).width+'x'+s.heightрятує байт
Феліпе Нарді Батіста

@FelipeNardiBatista Спасибі, думка щойно мені
прийшла в голову

1
Хороша робота! +1 :)
Арджун

5
Мені подобається, що всі записи JS були постійно коротшими, ніж велика кількість інших відповідей. Майже ніколи не буває.
Draco18s

11

macOS, bash, awk, grep, tr, 51 52 байт

/*/*/sy*r SPDisplaysDataType|awk '/so/{print$2$3$4}'

Запускається system_profiler, отримує SPDisplaysDataTypeінформацію, шукає перший soв Resolutionі друкує роздільну здатність екрана. На кількох екранах це друкує всі роздільні здатності.

Приклад виконання команди.


Попередній, невідповідний варіант:

/*/*/sy*r SPDisplaysDataType|grep so|tr -d 'R :a-w'

Я просто запустив це на своєму MacBook Pro з доданим другим дисплеєм. Я отримав 2880x1800\n1920x1080@60Hz(два рядки). Я не знаю, чи це дискваліфікує це ... чи?
Флоріс

@Floris чи OP вказав, як поводитися, коли є кілька екранів?
Людина капітана

Ні - але формат @60Hzявно не є специфікацією.
Флоріс

Я думаю, ви могли би скористатись а |sed 1q, доводячи кількість байтів до 58 байт.
згреп

Я виправив невідповідність, перейшовши на awkодин додатковий байт і маючи його. :)
zgrep


9

Обробка 3, 37 байт

fullScreen();print(width+"x"+height);

fullScreen()викликає запуск програми з максимальними розмірами - роздільною здатністю дисплея. На один байт менше очевидного

print(displayWidth+"x"+displayHeight);

8

AutoHotKey, 34 байти

SysGet,w,0
SysGet,h,1
Send,%w%x%h%

Збережіть це у файлі з розширенням .AHK та запустіть його з командного рядка


1
Чому б не використовувати, Sendа не MsgBox?
Інженер Тост

@EngineerToast дякую! Це врятувало два байти
jmriego

7

C (Windows), 79 78 77 байт

Дякуємо @Johan du Toit за збереження байта!

#import<windows.h>
#define G GetSystemMetrics
f(){printf("%dx%d",G(0),G(1));}

2
Я все ще возився з "GetDeviceCaps", поки не побачив Вашу відповідь :-) Ви все одно можете зберегти 1 байт, скориставшись наступним:#define G GetSystemMetrics f(){printf("%dx%d",G(0),G(1));}
Йохан дю Тойт

7

PowerShell, 67 60 55 байт

-7 дякую Мартіну Ендеру

-5 (насправді 12!) Від Leaky Nun , майстер Regex - поза мною.

Це довго, але не довше, ніж жахливе System.Windows.Forms.SystemInformation.PrimaryMonitorSizeрішення

(gwmi win32_videocontroller|% v*n)-replace" |x \d+\D+$"

спочатку ми Get-WmiObject( gwmi) для отримання Win32_VideoControllerоб’єкта, який містить член з ім'ям VideoModeDescription, який є рядком у форматі 1920 x 1080 x 4294967296 colors, потім я запускаю заміни регулярного виразу, щоб отримати правильний формат.

PS H:\> (gwmi win32_videocontroller|% v*n)-replace" |x \d+\D+$"
1920x1080

Я думаю, (gwmi win32_videocontroller|% v*n)-replace" |x[^x]+$"голить пару байтів, підправляючи регулярний вираз.
TessellatingHeckler

6

Математика, 51 байт

SystemInformation[][[1,5,2,1,2,1,2,2,;;,2]]~Infix~x

Це може не працювати для вас залежно від того, які пристрої ви підключили (я не знаю). Це завжди має спрацювати (припустимо, що у вас підключений принаймні один екран):

Infix[Last/@("FullScreenArea"/.SystemInformation["Devices","ScreenInformation"][[1]]),x]

Пояснення

SystemInformation[] повертає вираз форми

SystemInformationData[{
  "Kernel" -> {__},
  "FrontEnd" -> {__},
  "Links" -> {__},
  "Parallel" -> {__},
  "Devices" -> {__},
  "Network" -> {__},
}]

Нас цікавить "Devices", до яких можна отримати доступ безпосередньо SystemInformation["Devices"]або як SystemInformation[][[1,5,2]]. Результатом буде список форми

{
  "ScreenInformation" -> {__},
  "GraphicsDevices" -> {__},
  "ControllerDevices" -> {__}
}

Ми хочемо "ScreenInformation", до яких можна отримати доступ як SystemInformation["Devices","ScreenInformation"]більш, так і більш лаконічно SystemInformation[][[1,5,2,1,2]]. Результат буде форму

{
  {
  "ScreenArea" -> {__},
  "FullScreenArea" -> {{0,w_},{0,h_}},
  "BitDepth" -> _,
  "Resolution" -> _
  },
  ___
}

Довжина списку буде кількістю підключених екранів. Перший екран є, SystemInformation[][[1,5,2,1,2,1]]і ширину та висоту можна отримати, оскільки SystemInformation[][[1,5,2,1,2,1,2,2,;;,2]]тоді ми просто вставляємо формат Infix xдля виводу.


6

Java 7, 123 114 байт

String f(){java.awt.Dimension s=java.awt.Toolkit.getDefaultToolkit().getScreenSize();return s.width+"x"+s.height;}

Цей метод не працюватиме в безголовій установці Java (як у TIO), оскільки він використовує бібліотеки awt. Під капотом для виклику getScreenSizeвикористовується внутрішній інтерфейс Java для виклику (як правило, у бібліотеку С) для ширини та висоти екрана.

-9 байт завдяки Олів'є Грегоару за те, що він нагадав мені, що я можу повернути рядок замість того, щоб роздрукувати її.


2
Я ось-ось збирався дописувати ...
Leaky Nun

@LeakyNun Ви і я обоє. +1 Пок .
Кевін Круїссен

Шкода, що вихід обмежений ...x..., тому void f(){System.out.print((java.awt.Toolkit.getDefaultToolkit().getScreenSize()+"").replaceAll("[^\\d,]",""));}що випуск 1920,1200коротший ..
Кевін Круїссен

1
@KevinCruijssen так, я теж намагався грати з цим. Справжнє "занадто погано" полягає в тому, що використовувати регулярний вираз в Java настільки важко з точки зору кількості байтів.
Поки

1
@ Poke Ти справді маєш рацію. Мені вдалося використати те, що я показую вище, xзамість того ,, щоб використовувати заміни регулярних виразів, але це на п’ять байтів більше, ніж ваша поточна відповідь: void f(){System.out.print((java.awt.Toolkit.getDefaultToolkit().getScreenSize()+"").replaceAll("[^\\d,]","").replace(",","x"));}або void f(){System.out.print((java.awt.Toolkit.getDefaultToolkit().getScreenSize()+"").replaceAll(".*?(\\d+).*?(\\d+).*","$1x$2"));}А ну, що на Java не важке ..; p
Кевін Крейсейсен,

6

C #, 101 95 89 байт

_=>{var s=System.Windows.Forms.Screen.PrimaryScreen.Bounds;return s.Width+"x"+s.Height;};

-6 байт завдяки @TheLethalCoder , нагадуючи мені, що ОП не згадував про друк, тому повернення рядка також чудово. І додаткові -6 байт, змінивши його на лямбда.


Ви можете заощадити 11 байт при компіляції до Func<string>: ()=>{var s=System.Windows.Forms.Screen.PrimaryScreen.Bounds;return s.Width+"x"+s.Height;};. Однак у вас є повернення, voidале ви повертаєте, stringтому для цього потрібно додати 2 байти.
TheLethalCoder

1
У виклику також не _=>{var s=System.Windows.Forms.Screen.PrimaryScreen.Bounds;return s.Width+"x"+s.Height;};
вказано,

1
О, ігноруйте коментар, який ви повертаєте, ви пишете результат, ви можете зберегти 6 байт, повернувши його.
TheLethalCoder

І якщо ви не можете придумати спосіб скоротити його, var s=System.Windows.Forms.Screen.AllScreens[0].Bounds;було б те ж число, але ви можете взяти участь у гольфі з цією ідеєю.
TheLethalCoder

6

Bash + xrandr, 44 символи

read -aa<<<`xrandr`
echo ${a[7]}x${a[9]::-1}

xrandrналежить X-серверу, на Ubuntu надається пакет x11-xserver-utils .

Проба зразка:

bash-4.3$ read -aa<<<`xrandr`;echo ${a[7]}x${a[9]::-1}
1920x1080

xrandr + grep + util-linux, 30 символів

xrandr|grep -oP '\d+x\d+'|line

Завдяки:

Проба зразка:

bash-4.3$ xrandr|grep -oP '\d+x\d+'|line
1920x1080

У мене немає баш з дисплеєм, буде xrandr|grep *працювати?
Джонатан Аллан

Звичайно. Але наразі мої grepта sedспроби розбору xrandrрезультатів ( pastebin.com/uTVcjWCq ) були довшими.
манастирські роботи

Можливо xrandr|grep *|cut -d' ' -f1? (використовуючи відповідний рядок із вашої пасти @ TIO )
Джонатан Аллан

А, ти маєш на увазі вибрати роздільну здатність зі списку позначкою «*»? Думав про таку можливість, але я не впевнений, чи працюватиме з підключеними кількома дисплеями. Як я пам’ятаю, це перераховувало б поточну роздільну здатність кожного підключеного дисплея.
манастирські роботи

Ага так, але не впевнений, чого хоче ОП у такому сценарії!
Джонатан Аллан

5

Python 2, 73 байти

from ctypes import*
u=windll.user32.GetSystemMetrics;
print u(0),'x',u(1)

print u(0),'x',u(1)менше, і його приклад ( посилання ) дозволяє
Феліпе Нарді Батіста

1
To clarify, If it's equivalent to the output from What is my screen resolution, It's valid.на цьому веб-сайті є пробіл між кожною частиною
Феліпе Нарді Батіста

@FelipeNardiBatista Оновлено, дякую.
Ніл

5

Октава , 41 байт

Дякуємо @Arjun та @StephenS за виправлення.

fprintf('%ix%i',get(0,'ScreenSize')(3:4))

0є ручкою до кореневого об’єкта графіки. Його властивість 'ScreenSize'містить координати екрана в пікселях. Третій та четвертий записи дають бажану інформацію.


5

APL (Dyalog) , 23 байти

' 'R'x'⍕⌽⊃⎕WG'DevCaps'

⎕WG'DevCaps'W indow G і ін Діви лід кришка abilitie з

 вибрати першу властивість (висота, ширина)

 реверс

 формат у вигляді тексту

' '⎕R'x'R eplace простору з «х» S


"заміна на" x "у позиції 5 (пробіл)" це спричинить проблеми на невеликому екрані, наприклад, 640x480 (який використовують VM)
Baldrickk


4

C (бібліотека SDL2) 113 88 84

(-4 знаки завдяки допомозі @AppleShell)

Так. вона компілює.

m[3];main(){SDL_Init(32);SDL_GetDesktopDisplayMode(0,m);printf("%dx%d",m[1],m[2]);}

Виконати з: gcc snippet.c -lSDL2 && ./a.out


3
Я думаю, ви можете скоротити це, зробивши mглобальний і intm[3];main(){...
пропустіть

доступ через m+1повинен бути коротшим, ніж m[1]правильно? чи це неможливо в C, але тільки в C ++? Напевно printf має деякий знак маркування
Gizmo

@gizmo, на жаль, AFAIK не існує специфікатора printf, який робить таке. ..
dieter

4

Python 2, 61 49 байт

Дякую @ Jonathan-allan, @ felipe-nardi-batista

from Tkinter import*
print'%sx%s'%Tk().maxsize()

Для одиночних налаштувань дисплея це відповідає результатам із сайту. Це дає повну роздільну здатність для декількох дисплеїв.


print'x'....рятує байт
Феліпе Нарді Батіста

v=Tk().maxsize(), print'%sx%s'%vекономить 9 байт.
Джонатан Аллан

ой, а потім print'%sx%s'%Tk().maxsize()зберігає ще 4> _ <
Джонатан Аллан

3

bash + xdpyinfo 42 31 байт

xdpyinfo|grep dim|cut -d' ' -f7

З чоловічої сторінки:

xdpyinfo - is  a utility for displaying information about an X server.

@Floris @manatwork Дякую за збереження кількох байтів!


Перекреслено 4 все ще 4 :(
Крістофер

Не потрібно місця в просторах навколо труб; Я думаю, що безпечно шукати лише "тьмяний"; ви можете писати -d\ замість -d' '. Тоді , коли мова йде як grepдля лінії і cutчастини цієї лінії, як правило , коротше , з одним awkвикликом: xdpyinfo|awk '/dim/&&$0=$2'.
манастирські роботи

Я підозрюю, що ти можеш зірвати щось коротше, dimensionsале я не маю xdpyinfoсвоєї системи ...
Флоріс

3

xrandr + awk, 25 байт

xrandr|awk /\*/{print\$1}

введіть тут опис зображення


1
Це не працює. grep *розширює зірочку на всі файли в каталозі.
Єнс

@Jens виправлено. Дякуємо, що
вказали

Спасибі; ще одна підказка: правильним написанням для grep|cutє awk.
Єнс

Це все ще не працює. Він виводить *0. Мій вихід xrandr *0 3360 x 1050 ( 889mm x 278mm ) *0.
Єнс

@Jens тоді вам потрібна Btw -f2, чи можете ви перевірити xrandr|awk '/\*/{print $2}'?
Пандія

3

ZX Spectrum Basic, 10 байт

тільки для повноти:

PRINT "256x192"

виходи 256x192. Спектр має фіксовану роздільну здатність екрану.


... і використовує один байт для ключових слів, таких як PRINT.
Єнс

2

Обробка, 51 байт

void setup(){fullScreen();print(width+"x"+height);}

Це виводить в наступному форматі: width height. Крім того, програма створює вікно, яке має розмір екрана, який ви використовуєте (оскільки кожна програма для обробки створює вікно за замовчуванням), і ця програма просто виводить висоту та ширину цього вікна / ескізу.


О, формат є WIDTHxHEIGHT.
Метью Роу

@SIGSEGV Щойно помітив це
Kritixi Lithos

2

xdpyinfo+ awk, 28 байт

$ xdpyinfo|awk /dim/{print\$2}
3360x1050

Випробуваний на Cygwin з подвійними головами.


1
xdpyinfo|awk /dim/{print\$2}займає 28 байтів, а не 24
Пандія

@Pandya Мені потрібні нові окуляри :-)
Jens


1

Літп , 116 байт

((import html-toolkit)
(htmlOnLoad #::((var S(index(getWindow)screen))
(print(+(index S width)"x"(index S height))))))

(Для читання додано розриви рядків)

Спробуйте в Інтернеті!

Нарешті, мій модуль html-інструментарію отримує деяке використання! Працює лише за посиланням "Спробуйте в Інтернеті", але не працює з командного рядка.

Кілька байтів можна зберегти, якщо 1024 x 768можна отримати дійсний вихід. Ми просто використовуємо, (+ .. "x" .. )щоб уникнути printнеявного інтервалу.


Хм. Я спробував це в Інтернеті, але він говорить 2048x1080про справжній 4K-екран, який є насправді 4096x2160. Будь-яка ідея чому? Firefox 52.0 на FreeBSD 11.
Єнс

Не маю уявлення. Я просто захоплення window.screenі отримання widthі heightатрибути з нього. Я думаю, якщо ви відкрили консоль Firefox і ввели її, window.screenви побачите, мабуть, неправильні 2048x1080.
Андракіс

1

Lua (löve frame), 116 байт

f,g=love.window.setFullscreen,love.graphics function love.draw()f(1)w,h=g.getDimensions()f(0>1)g.print(w.."x"..h)end

Програма спочатку змінюється на повноекранному, потім отримує ширину і висоту і друкує її потім :)


1

xrandr і sh, 23 байти

$ set `xrandr`;echo $6x$8
3360x1050

Тестували на коробці CentOS 5 з дисплеєм, перенаправленим на машину Cygwin з двома моніторами. Тут повний xrandrвихід

$ xrandr
 SZ:    Pixels          Physical       Refresh
*0   3360 x 1050   ( 889mm x 278mm )  *0
Current rotation - normal
Current reflection - none
Rotations possible - normal
Reflections possible - none

1

Ruby + xrandr, 37 байт

puts `xrandr`.split[7..9].join[0..-2]

Альтернативне рішення (52 байти):

puts `xrandr`.match(/t (\d+) (x) (\d+),/)[1..3].join

1

Червоний , 26 байт

system/view/screens/1/size

Наприклад, результати:

1920x1080

Код досить зрозумілий. 1Відноситься до першого екрану

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.