Tell me my screen resolution!

Output the device's screen resolution in the specific format of [width]x[height](without the brackets). For example, an output could be 1440x900.

Here's an online tester that you can use to check your own screen resolution.

• The specific output format is no fun, but it's probably too late to change now – Luis Mendo May 2 '17 at 13:29
• What should the behaviour be if multiple displays are connected? – Jonathan Allan May 2 '17 at 13:40
• I suppose we're not allowed to first change your resolution and then tell you those values, right? – Engineer Toast May 2 '17 at 15:12
• APL\360 (can only be run on IBM/360 typewriter environment), 5 bytes: '0x0' – Adám May 2 '17 at 16:14
• I like that this one disqualifies most golfing languages and encourages people to explore the limits of practical ones. – robbie May 4 '17 at 14:31

JavaScript (ES6), 32 bytes

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


Outputs as function return. Add f= at the beginning and invoke like f(). Uses parameter-initializing to initialize the parameter _ to screen object. The rest is self-explanatory.

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

Note: Passing an argument to this function will cause it to fail.

JavaScript (Previous Solution), 35 bytes

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

Never thought I will one day use with! I don't think this can be golfed further.

• If REPLs are allowed, s=screen,s.width+"x"+s.height (29 characters) also works. – Kobi May 3 '17 at 12:35
• Oooh. Good use of default argument value. – Matthew Roh May 3 '17 at 12:54
• The 35-byte solution can save five bytes by not bothering to alert: with(screen)(width+'x'+height) just returns the appropriate string. – KRyan May 4 '17 at 1:58
• This answer is fundamentally flawed. I can cheat it by zooming my browser in and out! – user64742 May 4 '17 at 16:12
• Come on, are you guys even trying: _=screen,_.width+"x"+_.height, 29 bytes – M28 May 7 '17 at 6:38

TI-BASIC, 3032 29 bytes (non-competing?)

*sigh* TI-BASIC takes an extra byte for every lowercase letter.

+2 thanks to @Timtech

-3 thanks to @Timtech

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


This only works because TI-BASIC can only be run on calculators with two different screen resolutions: 96 by 64 and 320 by 240. I just test to see which screen I have by setting the Zoom to something that is different depending on screen resolution then outputting the correct resolution.

I'm marking this as non-competing for now, since it is hard coded.

• Thats a clever abuse ;) – Matthew Roh May 2 '17 at 15:38
• You can save by not using ZDecimal and then using a different Xmax comparison, at least one byte. Also, I think you need to use lowercase x which is two bytes (x2) instead of the one-byte uppercase equivalent. – Timtech May 2 '17 at 18:22
• @Timtech I have to use a two byte Zoom (like ZDecimal) because the default zoom (ZStandard) is the same on both calculators. I'll fix the capitalization, though. – Scott Milner May 2 '17 at 22:47
• Oh, I see what you mean. If you use ZStandard though, would ΔX be different then between the calculators? Also, ZDecimal is only one byte, so this is 31 bytes. – Timtech May 3 '17 at 10:18
• For some reason, my instant reaction is "that's valid, but wouldn't be valid if there were only one possible screen resolution", but that point of view seems internally inconsistent. So I'm really unsure as to whether this is cheating or not. – user62131 May 4 '17 at 1:08

JavaScript (ES6), 32 bytes

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


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

• the lambda version is acceptable – Felipe Nardi Batista May 2 '17 at 14:35
• _=>(s=screen).width+'x'+s.height saves a byte – Felipe Nardi Batista May 2 '17 at 14:38
• @FelipeNardiBatista Thanks, the thought just occurred to me as well :) – SethWhite May 2 '17 at 14:40
• Good job! +1 :) – Arjun May 2 '17 at 14:42
• I love how all the JS entries have been consistently shorter than a large number of the other answers. Almost never happens. – Draco18s no longer trusts SE May 2 '17 at 17:29

/*/*/sy*r SPDisplaysDataType|awk '/so/{print$2$3$4}'  Runs system_profiler, gets the SPDisplaysDataType information, searches for the first so in Resolution, and prints the screen resolution. For multiple screens, this prints all resolutions. The prior, malcompliant variant: /*/*/sy*r SPDisplaysDataType|grep so|tr -d 'R :a-w'  • I just ran this on my MacBook Pro with a second display attached. I got 2880x1800\n1920x1080@60Hz (two lines). I don't know if that disqualifies this... or? – Floris May 2 '17 at 16:15 • @Floris did OP specify how to behave when there are multiple screens? – Captain Man May 2 '17 at 16:26 • No - but the format @60Hz is clearly not in spec. – Floris May 2 '17 at 16:28 • I guess you could tack on a |sed 1q, bringing the byte count up to 58 bytes. – zgrep May 2 '17 at 20:33 • I fixed the non-compliance by switching to awk and having one extra byte. :) – zgrep May 2 '17 at 20:52 Javascript, 36 bytes s=screen;alert(s.width+"x"+s.height) Processing 3, 37 bytes fullScreen();print(width+"x"+height);  fullScreen() causes the app to launch with the maximum dimensions - the display resolution. One byte less than the obvious print(displayWidth+"x"+displayHeight);  AutoHotKey, 34 bytes SysGet,w,0 SysGet,h,1 Send,%w%x%h%  Save this in a file with extension .AHK and run it from a command prompt • Why not use Send rather than MsgBox? – Engineer Toast May 2 '17 at 14:57 • @EngineerToast thanks! That saved two bytes – jmriego May 2 '17 at 15:01 C (Windows), 7978 77 bytes Thanks to @Johan du Toit for saving a byte! #import<windows.h> #define G GetSystemMetrics f(){printf("%dx%d",G(0),G(1));}  • I was still messing around with 'GetDeviceCaps' until I saw your answer :-) You can still save 1 byte by using the following: #define G GetSystemMetrics f(){printf("%dx%d",G(0),G(1));} – Johan du Toit May 3 '17 at 18:45 PowerShell, 6760 55 Bytes -7 thanks to Martin Ender -5 (actually 12!) from Leaky Nun , Regex wizardry is beyond me. This is long but not longer than the horrendous System.Windows.Forms.SystemInformation.PrimaryMonitorSize solution (gwmi win32_videocontroller|% v*n)-replace" |x \d+\D+$"


first we Get-WmiObject(gwmi) to retrieve the Win32_VideoController object, which contains a member named VideoModeDescription, which is a string in the format of 1920 x 1080 x 4294967296 colors, then I run a regex replace to get correct format.

PS H:\> (gwmi win32_videocontroller|% v*n)-replace" |x \d+\D+$" 1920x1080  • I think (gwmi win32_videocontroller|% v*n)-replace" |x[^x]+$" shaves a couple of bytes by tweaking the regex. – TessellatingHeckler May 11 '17 at 16:49

Mathematica, 51 bytes

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


This may not work for you depending on what devices you have connected (I don't know). This should always work (assuming you have at least one screen hooked up):

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


Explanation

SystemInformation[] returns an expression of the form

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


We are interested in "Devices", which can be accessed directly as SystemInformation["Devices"] or as SystemInformation[][[1,5,2]]. The result will be a list of the form

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


We want "ScreenInformation", which can be accessed either as SystemInformation["Devices","ScreenInformation"] or more succinctly as SystemInformation[][[1,5,2,1,2]]. The result will be of the form

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


The length of the list will be the number of screens you have connected. The first screen is SystemInformation[][[1,5,2,1,2,1]] and the width and height can be extracted as SystemInformation[][[1,5,2,1,2,1,2,2,;;,2]] Then we just insert an Infix x for the output format.

Java 7, 123 114 bytes

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


This method will not work in a headless installation of Java (like on TIO) because it uses the awt libraries. Under the hood, calling getScreenSize uses the Java Native Interface to call out (typically into a C library) for the screen width and screen height.

-9 bytes thanks to Olivier Grégoire for reminding me that I can return the string instead of printing it.

• I was just about to post... – Leaky Nun May 2 '17 at 13:24
• @LeakyNun You and me both. +1 Poke. – Kevin Cruijssen May 2 '17 at 13:46
• Too bad the output is restricted to ...x..., because void f(){System.out.print((java.awt.Toolkit.getDefaultToolkit().getScreenSize()+"").replaceAll("[^\\d,]",""));} which outputs 1920,1200 is shorter.. – Kevin Cruijssen May 2 '17 at 14:21
• @KevinCruijssen yeah I did try playing with that as well. The real "too bad" is that using regex in java is so heavy in terms of byte count. – Poke May 2 '17 at 14:56
• @Poke You're indeed right. I have been able to use that what I show above with an x instead of , by using some regex replacement, but it's five bytes more than your current answer: void f(){System.out.print((java.awt.Toolkit.getDefaultToolkit().getScreenSize()+"").replaceAll("[^\\d,]","").replace(",","x"));} or void f(){System.out.print((java.awt.Toolkit.getDefaultToolkit().getScreenSize()+"").replaceAll(".*?(\\d+).*?(\\d+).*","$1x$2"));} Ah well, what isn't heavy in Java.. ;p – Kevin Cruijssen May 2 '17 at 15:02

C#, 10195 89 bytes

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


-6 bytes thanks to @TheLethalCoder by reminding me OP didn't mention about printing, so returning a string is also fine. And an additional -6 bytes by changing it to a lambda.

• You can save 11 bytes by compiling to a Func<string>: ()=>{var s=System.Windows.Forms.Screen.PrimaryScreen.Bounds;return s.Width+"x"+s.Height;};. However, you have a return of void but you are returning a string so you need to add 2 bytes for that. – TheLethalCoder May 3 '17 at 9:48
• The challenge also doesn't state that you can't take input so you could add an unused input to save another byte i.e. _=>{var s=System.Windows.Forms.Screen.PrimaryScreen.Bounds;return s.Width+"x"+s.Height;}; – TheLethalCoder May 3 '17 at 9:49
• Oh ignore the return comment you're writing the result out, you can save 6 bytes by returning it. – TheLethalCoder May 3 '17 at 9:49
• And unless you can think of a way to get it shorter var s=System.Windows.Forms.Screen.AllScreens[0].Bounds; would also be the same count but you could golf it with that idea in mind. – TheLethalCoder May 3 '17 at 9:52

Bash + xrandr, 44 characters

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


xrandr belongs to the X server, on Ubuntu is provided by x11-xserver-utils package.

Sample run:

bash-4.3$read -aa<<<xrandr;echo${a[7]}x${a[9]::-1} 1920x1080  xrandr + grep + util-linux, 30 characters xrandr|grep -oP '\d+x\d+'|line  Thanks to: Sample run: bash-4.3$ xrandr|grep -oP '\d+x\d+'|line
1920x1080

• I have no bash with a display, would xrandr|grep * work? – Jonathan Allan May 2 '17 at 13:13
• Sure. But for now the my grep and sed attempts to parse xrandr's output (pastebin.com/uTVcjWCq) were longer. – manatwork May 2 '17 at 13:15
• Maybe xrandr|grep *|cut -d' ' -f1? (using the matching line from your paste @TIO) – Jonathan Allan May 2 '17 at 13:29
• Ah, you mean to pick the resolution from the list by the “*” mark? Thought to that possibility, but I am not sure whether would work with multiple displays connected. As I remember, that would list each connected display's current resolution. – manatwork May 2 '17 at 13:36
• Ah yes it would, not sure what the OP wants in such a scenario though! – Jonathan Allan May 2 '17 at 13:37

Python 2, 73 bytes

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

• print u(0),'x',u(1) is smaller and his example (link) allows it – Felipe Nardi Batista May 2 '17 at 14:20
• To clarify, If it's equivalent to the output from What is my screen resolution, It's valid. in that website, there is space between each part – Felipe Nardi Batista May 2 '17 at 14:22
• @FelipeNardiBatista Updated, thanks. – Neil May 2 '17 at 14:24

Octave, 41 bytes

Thanks to @Arjun and @StephenS for corrections.

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


0 is a handle to the root graphics object. Its property 'ScreenSize' contains the coordinates of the screen in pixels. The third and fourth entries give the desired information.

APL (Dyalog), 23 bytes

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


⎕WG'DevCaps'Window Get Device Capabilities

⊃ pick the first property (height, width)

⌽ reverse

⍕ format as text

' '⎕R'x'Replace spaces with "x"s

• "substitute with an "x" at position 5 (the space)" this would cause problems on a small screen, e.g. 640x480 (which VMs use) – Baldrickk May 2 '17 at 13:55

Japt, 24 bytes

OxØP(s×Çn)±d+"x"+ight


Test it online!

The compressed string represents with(screen)width+"x"+height. Ox evaluates this as JavaScript, and the result is implicitly printed.

C (SDL2 library) 11388 84

(-4 chars due to @AppleShell 's help)

Yes. it compiles.

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


Run with : gcc snippet.c -lSDL2 && ./a.out

• I think you can shorten this by making m global and omitting int: m[3];main(){... – Appleshell May 2 '17 at 15:39
• accessing by m+1 should be shorter than m[1] right? or isn't that possible in C but only in C++? surely printf has some dereference token – Gizmo May 3 '17 at 9:34
• @gizmo unfortunately AFAIK there is no printf specifier that does such thing .. – dieter May 3 '17 at 11:26

Python 2, 61 49 bytes

Thanks @Jonathan-allan, @felipe-nardi-batista

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


For single display setups, this matches the output from the site. This gives entire resolution for multiple displays.

• print'x'.... saves a byte – Felipe Nardi Batista May 3 '17 at 10:52
• v=Tk().maxsize(), print'%sx%s'%v saves 9 bytes. – Jonathan Allan May 3 '17 at 13:04
• oops, and then print'%sx%s'%Tk().maxsize() saves another 4 >_< – Jonathan Allan May 3 '17 at 13:14

bash + xdpyinfo 42 31 bytes

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


From man page:

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


@Floris @manatwork Thanks for saving a few bytes!

• Crossed out 4 is still 4 :( – Christopher May 2 '17 at 15:22
• There is no need for spaces around the pipes; I think is safe to search for “dim” only; you can write -d\  instead of -d' '. Then when it comes to both grep for a line and cut a part of that line, usually is shorter with a single awk call: xdpyinfo|awk '/dim/&&$0=$2'. – manatwork May 2 '17 at 15:32
• I suspect you can grep something shorter than dimensions but I don't have xdpyinfo on my system... – Floris May 2 '17 at 16:27

xrandr + awk, 25 bytes

xrandr|awk /\*/{print$1}  • This doesn't work. grep * expands the asterisk to all files in the directory. – Jens May 3 '17 at 8:07 • @Jens Corrected. Thanks for pointing out – Pandya May 3 '17 at 8:56 • Thanks; another hint: the proper spelling for grep|cut is awk. – Jens May 3 '17 at 9:11 • It still doesn't work. It outputs *0. My xrandr output is *0 3360 x 1050 ( 889mm x 278mm ) *0. – Jens May 3 '17 at 9:15 • @Jens then you need -f2 Btw, Can you check xrandr|awk '/\*/{print 2}'? – Pandya May 3 '17 at 9:29 ZX Spectrum Basic, 10 bytes just for completeness: PRINT "256x192"  outputs 256x192. The Spectrum has a fixed hardwired screen resolution. • ...and uses a single byte for keywords like PRINT. – Jens Oct 18 '19 at 8:11 Processing, 51 bytes void setup(){fullScreen();print(width+"x"+height);}  This outputs in this format: width height. Also, the program creates a window that is the size of the screen you are using (because every Processing program creates a window by default) and this program just outputs the height and the width of this window/sketch. • Oh, the format is WIDTHxHEIGHT. – Matthew Roh May 2 '17 at 15:27 • @SIGSEGV Just noticed it – user41805 May 2 '17 at 15:27 xdpyinfo + awk, 28 bytes  xdpyinfo|awk /dim/{print$2}
3360x1050


Tested on Cygwin with dual heads.

• xdpyinfo|awk /dim/{print\$2} takes 28 bytes not 24 – Pandya May 3 '17 at 9:55 • @Pandya I need new glasses :-) – Jens May 3 '17 at 11:18 Tcl/Tk, 40 puts [winfo screenw .]x[winfo screenh .]  Lithp, 116 bytes ((import html-toolkit) (htmlOnLoad #::((var S(index(getWindow)screen)) (print(+(index S width)"x"(index S height))))))  (Line breaks added for readability) Try it online! Finally, my html-toolkit module gets some use! Only works in the Try it Online link, will not work from command line. A few bytes could be saved if 1024 x 768 could be valid output. We just use (+ .. "x" .. ) to avoid print's implicit spacing. • Hmm. I tried it online, but it says 2048x1080 for a true 4K screen that's actually 4096x2160. Any idea why? Firefox 52.0 on FreeBSD 11. – Jens May 3 '17 at 17:25 • No idea. I'm merely grabbing window.screen and getting the width and height attributes from it. I imagine if you opened up the Firefox console and typed in window.screen you'll see the apparently incorrect 2048x1080. – Andrakis May 4 '17 at 0:28 Lua (löve framework),116 bytes 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  The programm changes first to fullscreen then it gets the width and height and prints it then :) xrandr and sh, 23 bytes $ set xrandr;echo $6x$8
3360x1050


Tested on a CentOS 5 box with display redirected to a Cygwin machine with two monitors. Here the full xrandr output is

\$ 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


Ruby + xrandr, 37 bytes

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


Alternate solution (52 bytes):

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


Red, 26 Bytes

system/view/screens/1/size


Outputs for example:

1920x1080


The code is pretty self explanatory. The 1` refers to the first screen