Подскажите мое разрешение экрана!


33

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

Вот онлайн-тестер, который вы можете использовать для проверки собственного разрешения экрана.


17
Конкретный формат вывода
Луис Мендо,

3
Каково должно быть поведение, если подключено несколько дисплеев?
Джонатан Аллан

4
Я полагаю, нам не разрешено сначала изменять разрешение, а затем сообщать вам эти значения, верно?
Тост инженера

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

4
Мне нравится, что этот дисквалифицирует большинство языков игры в гольф и побуждает людей исследовать границы практических языков.
Robbie

Ответы:


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. Я просто проверяю, какой у меня экран, установив Zoom на что-то, что отличается в зависимости от разрешения экрана. вывод правильного разрешения.

Я отмечаю это как неконкурентный на данный момент, так как это жестко закодировано.


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 Спасибо, эта мысль тоже пришла мне в голову :)
SethWhite

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(две строки). Я не знаю, дисквалифицирует ли это это ... или?
Флорис,

@ Флорис, ОП указал, как вести себя, когда есть несколько экранов?
Капитан Мэн

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

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

Я исправил несоответствие, переключившись на 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));}
Johan du Toit

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

Mathematica, 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 для вызова (обычно в библиотеку C) ширины и высоты экрана.

-9 байт, спасибо Оливье Грегуару за напоминание, что я могу вернуть строку вместо ее печати.


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

@ LeakyNun Вы и я, оба. +1 тыкай .
Кевин Круйссен

Жаль, что выход ограничен ...x..., потому что void f(){System.out.print((java.awt.Toolkit.getDefaultToolkit().getScreenSize()+"").replaceAll("[^\\d,]",""));}какие выходы 1920,1200короче ..
Кевин Круйссен

1
@KevinCruijssen да, я тоже попробовал поиграть с этим. На самом деле «слишком плохо» заключается в том, что использование регулярных выражений в java настолько тяжело с точки зрения количества байтов.
Poke

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 , напомнив, что OP не упоминал о печати, поэтому возвращать строку тоже хорошо. И дополнительные -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

Благодаря:

  • Markasoftware для регулярного выражения (-11 символов)

Образец прогона:

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

У меня нет баш с дисплеем, будет xrandr|grep *работать?
Джонатан Аллан

Конечно. Но пока что my grepи sedпопытки разбора xrandrвывода ( pastebin.com/uTVcjWCq ) были длиннее.
manatwork

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

Ах, вы хотите выбрать разрешение из списка знаком «*»? Подумал о такой возможности, но я не уверен, будет ли работать с несколькими подключенными дисплеями. Насколько я помню, это будет список текущего разрешения каждого подключенного дисплея.
manatwork

Ах да, было бы, не уверен, что ОП хочет в таком сценарии, хотя!
Джонатан Аллан

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 (которые используют виртуальные
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глобальный и опуская int:m[3];main(){...
Appleshell

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

@gizmo к сожалению AFAIK нет спецификатора printf, который делает такую ​​вещь ..
dieter

4

Python 2, 61 49 байт

Спасибо @ Джонатан-Аллан, @ Фелипе-Нарди-Батиста

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

С man-страницы:

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'.
manatwork

Я подозреваю, что вы можете получить что-то короче, dimensionsно у меня нет xdpyinfoв моей системе ...
Флорис

3

xrandr + awk, 25 байт

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

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


1
Это не работает grep *расширяет звездочку на все файлы в каталоге.
Йенс

@Jens Исправлено. Спасибо за указание
Pandya

Благодарность; еще один намек: правильное написание для grep|cutIS awk.
Йенс

Это все еще не работает. Это выводит *0. Мой вывод xrandr есть *0 3360 x 1050 ( 889mm x 278mm ) *0.
Йенс

@ Дженс, тогда тебе нужно, -f2кстати, ты можешь проверить xrandr|awk '/\*/{print $2}'?
Pandya

3

ZX Spectrum Basic, 10 байтов

просто для полноты:

PRINT "256x192"

выходы 256x192. Spectrum имеет фиксированное разрешение экрана.


... и использует один байт для ключевых слов, таких как 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

@Pandya Мне нужны новые очки :-)
Jens


1

Lithp , 116 байт

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

(Разрывы строк добавлены для удобства чтения)

Попробуйте онлайн!

Наконец, мой модуль html-toolkit получает некоторое применение! Работает только по ссылке Try it Online, не будет работать из командной строки.

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


Хм. Я попробовал это онлайн, но это говорит 2048x1080о настоящем 4K экране, который на самом деле 4096x2160. Есть идеи почему? Firefox 52.0 на FreeBSD 11.
Jens

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

1

Lua (Löve Framework), 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.