Dis-moi ma résolution d'écran!

33

Afficher la résolution de l'écran du périphérique au format spécifique de [width]x[height](sans les crochets). Par exemple, une sortie pourrait être 1440x900.

Voici un testeur en ligne que vous pouvez utiliser pour vérifier votre propre résolution d'écran.

Matthew Roh
la source
17
Le format de sortie spécifique n'est pas amusant, mais il est probablement trop tard pour le changer maintenant
Luis Mendo
3
Quel devrait être le comportement si plusieurs écrans sont connectés?
Jonathan Allan
4
Je suppose que nous ne sommes pas autorisés à modifier d'abord votre résolution, puis à vous communiquer ces valeurs, n'est-ce pas?
Ingénieur Toast
3
APL \ 360 (ne peut être exécuté que sur l'environnement IBM / 360 typewriter), 5 octets:'0x0'
Adám
4
J'aime que celui-ci disqualifie la plupart des langues de golf et encourage les gens à explorer les limites des langues pratiques.
robbie

Réponses:

38

JavaScript (ES6), 32 octets

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

Sorties en fonction return. Ajouter f=au début et invoquer comme f(). Utilise l'initialisation des paramètres _pour initialiser le paramètre à l' screenobjet. Le reste est explicite.

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

Remarque: le fait de passer un argument à cette fonction entraînera son échec.


JavaScript (solution précédente), 35 octets

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

Jamais pensé que je vais utiliser un jour with! Je ne pense pas que cela puisse être joué plus loin.

Arjun
la source
Si les REPL sont autorisés, s=screen,s.width+"x"+s.height(29 caractères) fonctionne également.
Kobi
Oooh. Bonne utilisation de la valeur d'argument par défaut.
Matthew Roh
La solution de 35 octets peut économiser cinq octets en ne se souciant pas de alert: with(screen)(width+'x'+height)renvoie simplement la chaîne appropriée.
Kryan
2
Cette réponse est fondamentalement imparfaite. Je peux le tromper en zoomant sur mon navigateur!
Le grand canard
1
Allez, vous êtes même en train d'essayer _=screen,_.width+"x"+_.height:, 29 octets
M28
33

TI-BASIC, 30 32 29 octets (non concurrent?)

* sigh * TI-BASIC prend un octet supplémentaire pour chaque lettre minuscule.

+2 grâce à @Timtech

-3 grâce à @Timtech

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

Cela ne fonctionne que parce que TI-BASIC ne peut être exécuté que sur des calculatrices avec deux résolutions d'écran différentes: 96 sur 64 et 320 sur 240. afficher la résolution correcte.

Je marque ceci comme non compétitif pour le moment, car c'est codé en dur.

Scott Milner
la source
6
C'est un abus intelligent;)
Matthew Roh
1
Vous pouvez enregistrer en n'utilisant pas ZDecimal, puis en utilisant une Xmaxcomparaison différente , au moins un octet. De plus, je pense que vous devez utiliser des minuscules xqui sont deux octets (x2) au lieu de l'équivalent d'un octet majuscule.
Timtech
@ Timtech Je dois utiliser un zoom sur deux octets (comme ZDecimal) parce que le zoom par défaut ( ZStandard) est le même sur les deux calculatrices. Je vais réparer la capitalisation, cependant.
Scott Milner
1
Oh, je vois ce que tu veux dire. Si vous utilisez ZStandardbien, serait ΔXdifférent alors entre les calculatrices? En outre, il ZDecimalne s'agit que d'un octet, il s'agit donc de 31 octets.
Timtech
2
Pour une raison quelconque, ma réaction instantanée est "c'est valable, mais ne le serait pas s'il n'y avait qu'une seule résolution d'écran possible", mais ce point de vue semble contradictoire en interne. Donc, je ne sais vraiment pas si c'est de la triche ou non.
20

JavaScript (ES6), 32 octets

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

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

SethWhite
la source
2
la version lambda est acceptable
Felipe Nardi Batista
6
_=>(s=screen).width+'x'+s.heightsauve un octet
Felipe Nardi Batista
@FelipeNardiBatista Merci, cette pensée m'est aussi
venue à l'esprit
1
Bon travail! +1 :)
Arjun
5
J'adore la façon dont toutes les entrées JS ont été systématiquement plus courtes qu'un grand nombre d'autres réponses. Cela n'arrive presque jamais.
Draco18s
11

macOS, bash, awk, grep, tr, 51 52 octets

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

Fonctionne system_profiler, obtient les SPDisplaysDataTypeinformations, recherche le premier soenResolution , et imprime la résolution d'écran. Pour plusieurs écrans, cela imprime toutes les résolutions.

Example of the command running.


La variante antérieure non conforme:

/*/*/sy*r SPDisplaysDataType|grep so|tr -d 'R :a-w'
zgrep
la source
Je viens d'exécuter ceci sur mon MacBook Pro avec un deuxième écran attaché. J'ai eu 2880x1800\n1920x1080@60Hz(deux lignes). Je ne sais pas si cela disqualifie cela ... ou?
Floris
@ Floris OP at-il spécifié comment se comporter quand il y a plusieurs écrans?
Captain Man
Non, mais le format @60Hzn'est clairement pas dans les spécifications.
Floris
Je suppose que vous pouvez ajouter un |sed 1qnombre d’octets allant jusqu’à 58 octets.
Zgrep
J'ai corrigé le non-respect en basculant sur awket en ayant un octet supplémentaire. :)
Zgrep
9

Traitement 3, 37 octets

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

fullScreen()provoque le lancement de l’application avec les dimensions maximales - la résolution de l’affichage. Un octet de moins que l'évidence

print(displayWidth+"x"+displayHeight);
dzaima
la source
8

AutoHotKey, 34 octets

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

Enregistrez ceci dans un fichier avec l'extension .AHK et exécutez-le à partir d'une invite de commande.

jmriego
la source
1
Pourquoi ne pas utiliser Sendplutôt que MsgBox?
Ingénieur Toast
@ IngénieurToast merci! Cela a sauvé deux octets
jmriego
7

C (Windows), 79 78 77 octets

Merci à @Johan du Toit pour avoir sauvegardé un octet!

#import<windows.h>
#define G GetSystemMetrics
f(){printf("%dx%d",G(0),G(1));}
Steadybox
la source
2
J'étais encore en train de déconner avec 'GetDeviceCaps' jusqu'à ce que j'ai vu votre réponse :-) Vous pouvez encore économiser 1 octet en utilisant ce qui suit:#define G GetSystemMetrics f(){printf("%dx%d",G(0),G(1));}
Johan du Toit
7

PowerShell, 67 60 55 octets

-7 grâce à Martin Ender

-5 (en fait 12!) De Leaky Nun , la magie de Regex me dépasse.

C'est long mais pas plus long que la System.Windows.Forms.SystemInformation.PrimaryMonitorSizesolution épouvantable

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

d’abord nous Get-WmiObject( gwmi) pour récupérer l’ Win32_VideoControllerobjet, qui contient un membre nommé VideoModeDescription, qui est une chaîne au format 1920 x 1080 x 4294967296 colors, puis j’exécute un remplacement de regex pour obtenir le format correct.

PS H:\> (gwmi win32_videocontroller|% v*n)-replace" |x \d+\D+$"
1920x1080
Colsw
la source
Je pense que (gwmi win32_videocontroller|% v*n)-replace" |x[^x]+$"rase quelques octets en peaufinant la regex.
TessellatingHeckler
6

Mathematica, 51 octets

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

Cela peut ne pas fonctionner pour vous en fonction des appareils que vous avez connectés (je ne sais pas). Cela devrait toujours fonctionner (en supposant que vous ayez au moins un écran connecté):

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

Explication

SystemInformation[] retourne une expression de la forme

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

Nous sommes intéressés à "Devices", ce qui peut être consulté directement comme SystemInformation["Devices"]ou comme SystemInformation[][[1,5,2]]. Le résultat sera une liste du formulaire

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

Nous voulons "ScreenInformation", qui peut être consulté soit comme SystemInformation["Devices","ScreenInformation"]ou plus succinctement comme SystemInformation[][[1,5,2,1,2]]. Le résultat sera de la forme

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

La longueur de la liste sera le nombre d'écrans que vous avez connectés. Le premier écran est SystemInformation[][[1,5,2,1,2,1]]et la largeur et la hauteur peuvent être extraites en tant que SystemInformation[][[1,5,2,1,2,1,2,2,;;,2]]Ensuite, nous insérons simplement un Infix xpour le format de sortie.

ngenisis
la source
6

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.

Poke
la source
2
I was just about to post...
Leaky Nun
@LeakyNun You and me both. +1 Poke.
Kevin Cruijssen
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
1
@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
1
@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
6

C#, 101 95 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.

Kevin Cruijssen
la source
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
1
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
1
Oh ignore the return comment you're writing the result out, you can save 6 bytes by returning it.
TheLethalCoder
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
6

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
manatwork
la source
I have no bash with a display, would xrandr|grep * work?
Jonathan Allan
Sure. But for now the my grep and sed attempts to parse xrandr's output (pastebin.com/uTVcjWCq) were longer.
manatwork
Maybe xrandr|grep *|cut -d' ' -f1? (using the matching line from your paste @TIO)
Jonathan Allan
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
Ah yes it would, not sure what the OP wants in such a scenario though!
Jonathan Allan
5

Python 2, 73 bytes

from ctypes import*
u=windll.user32.GetSystemMetrics;
print u(0),'x',u(1)
Neil
la source
print u(0),'x',u(1) is smaller and his example (link) allows it
Felipe Nardi Batista
1
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
@FelipeNardiBatista Updated, thanks.
Neil
5

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.

Luis Mendo
la source
5

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

Adám
la source
"substitute with an "x" at position 5 (the space)" this would cause problems on a small screen, e.g. 640x480 (which VMs use)
Baldrickk
4

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.

Oliver
la source
4

C (SDL2 library) 113 88 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

dieter
la source
3
I think you can shorten this by making m global and omitting int: m[3];main(){...
Appleshell
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
@gizmo unfortunately AFAIK there is no printf specifier that does such thing ..
dieter
4

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.

Kyle
la source
print'x'.... saves a byte
Felipe Nardi Batista
v=Tk().maxsize(), print'%sx%s'%v saves 9 bytes.
Jonathan Allan
oops, and then print'%sx%s'%Tk().maxsize() saves another 4 >_<
Jonathan Allan
3

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!

Abel Tom
la source
Crossed out 4 is still 4 :(
Christopher
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
I suspect you can grep something shorter than dimensions but I don't have xdpyinfo on my system...
Floris
3

xrandr + awk, 25 bytes

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

enter image description here

Pandya
la source
1
This doesn't work. grep * expands the asterisk to all files in the directory.
Jens
@Jens Corrected. Thanks for pointing out
Pandya
Thanks; another hint: the proper spelling for grep|cut is awk.
Jens
It still doesn't work. It outputs *0. My xrandr output is *0 3360 x 1050 ( 889mm x 278mm ) *0.
Jens
@Jens then you need -f2 Btw, Can you check xrandr|awk '/\*/{print $2}'?
Pandya
3

ZX Spectrum Basic, 10 bytes

just for completeness:

PRINT "256x192"

outputs 256x192. The Spectrum has a fixed hardwired screen resolution.

Radovan Garabík
la source
...and uses a single byte for keywords like PRINT.
Jens
2

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.

Kritixi Lithos
la source
Oh, the format is WIDTHxHEIGHT.
Matthew Roh
@SIGSEGV Just noticed it
Kritixi Lithos
2

xdpyinfo + awk, 28 bytes

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

Tested on Cygwin with dual heads.

Jens
la source
1
xdpyinfo|awk /dim/{print\$2} takes 28 bytes not 24
Pandya
@Pandya I need new glasses :-)
Jens
1

Tcl/Tk, 40

puts [winfo screenw .]x[winfo screenh .]
sergiol
la source
1

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.

Andrakis
la source
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
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
1

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 :)

Lycea
la source
1

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
Jens
la source
1

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
dkudriavtsev
la source
1

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

Geeky I
la source