¡Dime mi resolución de pantalla!

33

Imprima la resolución de pantalla del dispositivo en el formato específico de [width]x[height](sin los corchetes). Por ejemplo, una salida podría ser 1440x900.

Aquí hay un probador en línea que puede usar para verificar su propia resolución de pantalla.

Matthew Roh
fuente
17
El formato de salida específico no es divertido, pero es probable que sea demasiado tarde para cambiar ahora
Luis Mendo
3
¿Cuál debería ser el comportamiento si hay varias pantallas conectadas?
Jonathan Allan
44
Supongo que no se nos permite cambiar primero su resolución y luego decirle esos valores, ¿verdad?
Engineer Toast
3
APL \ 360 (solo se puede ejecutar en un entorno de máquina de escribir IBM / 360), 5 bytes:'0x0'
Adám
44
Me gusta que este descalifique a la mayoría de los idiomas de golf y aliente a las personas a explorar los límites de los prácticos.
robbie

Respuestas:

38

JavaScript (ES6), 32 bytes

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

Salidas como función return. Agregue f=al principio e invoque como f(). Utiliza la inicialización de parámetros para inicializar el parámetro _al screenobjeto. El resto se explica por sí mismo.

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

Nota: Pasar un argumento a esta función hará que falle.


JavaScript (solución anterior), 35 bytes

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

¡Nunca pensé que algún día lo usaría with! No creo que esto pueda jugarse más.

Arjun
fuente
Si se permiten REPL, s=screen,s.width+"x"+s.height(29 caracteres) también funciona.
Kobi
Oooh Buen uso del valor de argumento predeterminado.
Matthew Roh
La solución de 35 bytes puede ahorrar cinco bytes al no molestarse en alert: with(screen)(width+'x'+height)solo devuelve la cadena adecuada.
KRyan
2
Esta respuesta es fundamentalmente defectuosa. ¡Puedo engañarlo al acercar y alejar mi navegador!
The Great Duck
1
Vamos, ¿lo están intentando ?: _=screen,_.width+"x"+_.height29 bytes
M28
33

TI-BASIC, 30 32 29 bytes (¿no compite?)

* suspiro * TI-BASIC toma un byte extra por cada letra minúscula.

+2 gracias a @Timtech

-3 gracias a @Timtech

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

Esto solo funciona porque TI-BASIC solo puede ejecutarse en calculadoras con dos resoluciones de pantalla diferentes: 96 por 64 y 320 por 240. Solo pruebo para ver qué pantalla tengo configurando el Zoom en algo diferente dependiendo de la resolución de la pantalla. dando salida a la resolución correcta.

Estoy marcando esto como no competitivo por ahora, ya que está codificado.

Scott Milner
fuente
66
Eso es un abuso inteligente;)
Matthew Roh
1
Puede guardar no utilizando ZDecimaly luego utilizando una Xmaxcomparación diferente , al menos un byte. Además, creo que debe usar minúsculas, xque son dos bytes (x2) en lugar del equivalente en mayúsculas de un byte.
Timtech
@Timtech Tengo que usar un zoom de dos bytes (como ZDecimal) porque el zoom predeterminado ( ZStandard) es el mismo en ambas calculadoras. Sin embargo, arreglaré la capitalización.
Scott Milner
1
Oh, ya veo lo que quieres decir. Sin ZStandardembargo, si lo usa , ¿ ΔXsería diferente entre las calculadoras? Además, ZDecimales solo un byte, por lo que son 31 bytes.
Timtech
2
Por alguna razón, mi reacción instantánea es "eso es válido, pero no sería válido si hubiera una sola resolución de pantalla posible", pero ese punto de vista parece internamente inconsistente. Así que no estoy seguro de si esto es trampa o no.
20

JavaScript (ES6), 32 bytes

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

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

SethBlanco
fuente
2
la versión lambda es aceptable
Felipe Nardi Batista
66
_=>(s=screen).width+'x'+s.heightguarda un byte
Felipe Nardi Batista
@FelipeNardiBatista Gracias, también se me ocurrió la idea :)
SethWhite
1
¡Buen trabajo! +1 :)
Arjun
55
Me encanta cómo todas las entradas de JS han sido consistentemente más cortas que una gran cantidad de las otras respuestas. Casi nunca pasa.
Draco18s
11

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

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

Carreras system_profiler, obtiene la SPDisplaysDataTypeinformación, busca la primera soen Resolution, e imprime la resolución de la pantalla. Para múltiples pantallas, esto imprime todas las resoluciones.

Ejemplo del comando en ejecución.


La variante anterior, mal compatible:

/*/*/sy*r SPDisplaysDataType|grep so|tr -d 'R :a-w'
zgrep
fuente
Acabo de ejecutar esto en mi MacBook Pro con una segunda pantalla conectada. Tengo 2880x1800\n1920x1080@60Hz(dos líneas). No sé si eso descalifica esto ... o?
Floris
@Floris ¿OP especificó cómo comportarse cuando hay varias pantallas?
Capitán Man
No, pero el formato @60Hzclaramente no está en las especificaciones.
Floris
Supongo que podría agregar un |sed 1q, lo que elevaría el número de bytes hasta 58 bytes.
zgrep
Solucioné el incumplimiento al cambiar awky tener un byte adicional. :)
zgrep
9

Javascript, 36 bytes

s=screen;alert(s.width+"x"+s.height)

Monja permeable
fuente
9

Procesando 3, 37 bytes

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

fullScreen()hace que la aplicación se inicie con las dimensiones máximas: la resolución de pantalla. Un byte menos que lo obvio

print(displayWidth+"x"+displayHeight);
dzaima
fuente
8

AutoHotKey, 34 bytes

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

Guarde esto en un archivo con extensión .AHK y ejecútelo desde un símbolo del sistema

jmriego
fuente
1
¿Por qué no usar en Sendlugar de MsgBox?
Engineer Toast
@EngineerToast gracias! Eso salvó dos bytes
jmriego
7

C (Windows), 79 78 77 bytes

¡Gracias a @Johan du Toit por guardar un byte!

#import<windows.h>
#define G GetSystemMetrics
f(){printf("%dx%d",G(0),G(1));}
Steadybox
fuente
2
Todavía estaba jugando con 'GetDeviceCaps' hasta que vi su respuesta :-) Todavía puede guardar 1 byte usando lo siguiente:#define G GetSystemMetrics f(){printf("%dx%d",G(0),G(1));}
Johan du Toit
7

PowerShell, 67 60 55 bytes

-7 gracias a Martin Ender

-5 (¡en realidad 12!) De Leaky Nun , la magia de Regex me supera.

Esto es largo pero no más largo que la System.Windows.Forms.SystemInformation.PrimaryMonitorSizesolución horrenda

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

primero Get-WmiObject( gwmi) para recuperar el Win32_VideoControllerobjeto, que contiene un miembro llamado VideoModeDescription, que es una cadena en el formato de 1920 x 1080 x 4294967296 colors, luego ejecuto un reemplazo de expresiones regulares para obtener el formato correcto.

PS H:\> (gwmi win32_videocontroller|% v*n)-replace" |x \d+\D+$"
1920x1080
colsw
fuente
Creo que (gwmi win32_videocontroller|% v*n)-replace" |x[^x]+$"reduce un par de bytes ajustando la expresión regular.
TessellatingHeckler
6

Mathematica, 51 bytes

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

Es posible que esto no funcione para usted dependiendo de los dispositivos que haya conectado (no lo sé). Esto siempre debería funcionar (suponiendo que tenga al menos una pantalla conectada):

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

Explicación

SystemInformation[] devuelve una expresión de la forma

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

Estamos interesados "Devices", a los que se puede acceder directamente como SystemInformation["Devices"]o como SystemInformation[][[1,5,2]]. El resultado será una lista del formulario.

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

Queremos "ScreenInformation", al que se puede acceder como SystemInformation["Devices","ScreenInformation"]o más sucintamente como SystemInformation[][[1,5,2,1,2]]. El resultado será de la forma

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

La longitud de la lista será la cantidad de pantallas que haya conectado. La primera pantalla es SystemInformation[][[1,5,2,1,2,1]]y el ancho y la altura se pueden extraer como SystemInformation[][[1,5,2,1,2,1,2,2,;;,2]]Luego, simplemente insertamos un Infix xpara el formato de salida.

ngenisis
fuente
6

Java 7, 123114 bytes

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

Este método no funcionará en una instalación sin cabeza de Java (como en TIO) porque usa las bibliotecas awt. Bajo el capó, las llamadas getScreenSizeutilizan la interfaz nativa de Java para llamar (generalmente a una biblioteca C) para el ancho y la altura de la pantalla.

-9 bytes gracias a Olivier Grégoire por recordarme que puedo devolver la cadena en lugar de imprimirla.

Meter
fuente
2
Estaba a punto de publicar ...
Leaky Nun
@LeakyNun Tú y yo los dos. +1 empuje .
Kevin Cruijssen
Lástima que la salida esté restringida ...x..., porque void f(){System.out.print((java.awt.Toolkit.getDefaultToolkit().getScreenSize()+"").replaceAll("[^\\d,]",""));}las salidas 1920,1200son más cortas ...
Kevin Cruijssen
1
@KevinCruijssen, sí, también intenté jugar con eso. La verdadera "lástima" es que usar regex en java es tan pesado en términos de conteo de bytes.
Poke
1
@Poke Tienes razón. He podido usar eso que muestro arriba con un en xlugar de ,usar algún reemplazo de expresiones regulares, pero es cinco bytes más que su respuesta actual: void f(){System.out.print((java.awt.Toolkit.getDefaultToolkit().getScreenSize()+"").replaceAll("[^\\d,]","").replace(",","x"));}o void f(){System.out.print((java.awt.Toolkit.getDefaultToolkit().getScreenSize()+"").replaceAll(".*?(\\d+).*?(\\d+).*","$1x$2"));}Ah, bueno, lo que no es pesado en 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 gracias a @TheLethalCoder recordándome que OP no mencionó sobre la impresión, por lo que devolver una cadena también está bien. Y un -6 bytes adicionales al cambiarlo a lambda.

Kevin Cruijssen
fuente
Puede guardar 11 bytes mediante la compilación de un Func<string>: ()=>{var s=System.Windows.Forms.Screen.PrimaryScreen.Bounds;return s.Width+"x"+s.Height;};. Sin embargo, tiene un retorno de voidpero está devolviendo un, stringpor lo que debe agregar 2 bytes para eso.
TheLethalCoder
1
El desafío tampoco establece que no pueda tomar una entrada, por lo que podría agregar una entrada no utilizada para guardar otro byte, es decir_=>{var s=System.Windows.Forms.Screen.PrimaryScreen.Bounds;return s.Width+"x"+s.Height;};
TheLethalCoder
1
Oh, ignore el comentario de retorno que está escribiendo el resultado, puede guardar 6 bytes devolviéndolo.
TheLethalCoder
Y a menos que se te ocurra una forma de acortarlo var s=System.Windows.Forms.Screen.AllScreens[0].Bounds;, también sería lo mismo, pero podrías jugarlo con esa idea en mente.
TheLethalCoder
6

Bash + xrandr, 44 caracteres

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

xrandrpertenece al servidor X, en Ubuntu es proporcionado por el paquete x11-xserver-utils .

Ejecución de muestra:

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

xrandr + grep + util-linux, 30 caracteres

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

Gracias a:

Ejecución de muestra:

bash-4.3$ xrandr|grep -oP '\d+x\d+'|line
1920x1080
hombre trabajando
fuente
No tengo golpe con una pantalla, ¿ xrandr|grep *funcionaría?
Jonathan Allan
Seguro. Pero por ahora el my grepy los sedintentos de analizar xrandrla salida ( pastebin.com/uTVcjWCq ) fueron más largos.
manatwork
Tal vez xrandr|grep *|cut -d' ' -f1? (usando la línea correspondiente de su pegar @ TIO )
Jonathan Allan
Ah, ¿quieres elegir la resolución de la lista con la marca "*"? Pensé en esa posibilidad, pero no estoy seguro de si funcionaría con múltiples pantallas conectadas. Como recuerdo, eso enumeraría la resolución actual de cada pantalla conectada.
manatwork
¡Ah, sí, no estoy seguro de lo que quiere el OP en este escenario!
Jonathan Allan
5

Python 2, 73 bytes

from ctypes import*
u=windll.user32.GetSystemMetrics;
print u(0),'x',u(1)
Neil
fuente
print u(0),'x',u(1)es más pequeño y su ejemplo ( enlace ) lo permite
Felipe Nardi Batista
1
To clarify, If it's equivalent to the output from What is my screen resolution, It's valid.en ese sitio web, hay espacio entre cada parte
Felipe Nardi Batista
@FelipeNardiBatista Actualizado, gracias.
Neil
5

Octava , 41 bytes

Gracias a @Arjun y @StephenS por las correcciones.

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

0es un identificador para el objeto gráfico raíz. Su propiedad 'ScreenSize'contiene las coordenadas de la pantalla en píxeles. Las entradas tercera y cuarta dan la información deseada.

Luis Mendo
fuente
5

APL (Dyalog) , 23 bytes

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

⎕WG'DevCaps'W indow G et Dev ice Cap abilitie s

 elige la primera propiedad (altura, ancho)

 marcha atrás

 formatear como texto

' '⎕R'x'R espacios EColoque con s "x"

Adán
fuente
"sustituir con una" x "en la posición 5 (el espacio)" esto causaría problemas en una pantalla pequeña, por ejemplo, 640x480 (que usan las máquinas virtuales)
Baldrickk
4

Japt , 24 bytes

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

¡Pruébelo en línea!

La cadena comprimida representa with(screen)width+"x"+height. Oxevalúa esto como JavaScript, y el resultado se imprime implícitamente.

Oliver
fuente
4

C (biblioteca SDL2) 113 88 84

(-4 caracteres debido a la ayuda de @AppleShell)

Sí. Se compila.

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

Corre con : gcc snippet.c -lSDL2 && ./a.out

dieter
fuente
3
Creo que puede acortar esto haciendo mglobal y omitiendo int:m[3];main(){...
Appleshell
el acceso por m+1debe ser más corto que el m[1]correcto? ¿o no es eso posible en C pero solo en C ++? seguramente printf tiene algún token de desreferencia
Gizmo
@gizmo desafortunadamente AFAIK no existe un especificador printf que haga tal cosa ..
dieter
4

Python 2, 61 49 bytes

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

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

Para configuraciones de pantalla única, esto coincide con la salida del sitio. Esto proporciona una resolución completa para múltiples pantallas.

Kyle
fuente
print'x'....guarda un byte
Felipe Nardi Batista
v=Tk().maxsize(), print'%sx%s'%vahorra 9 bytes.
Jonathan Allan
Uy, y luego print'%sx%s'%Tk().maxsize()guarda otros 4> _ <
Jonathan Allan
3

bash + xdpyinfo 42 31 bytes

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

Desde la página del manual:

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

@Floris @manatwork ¡Gracias por guardar algunos bytes!

Abel Tom
fuente
Tachado 4 sigue siendo 4 :(
Christopher
No hay necesidad de espacios alrededor de las tuberías; Creo que es seguro buscar solo "tenue"; puedes escribir en -d\ lugar de -d' '. Luego, cuando se trata tanto grepde una línea como de cutuna parte de esa línea, generalmente es más corta con una sola awkllamada:xdpyinfo|awk '/dim/&&$0=$2' .
manatwork
Sospecho que puedes agarrar algo más corto que dimensionsyo, pero no tengo xdpyinfoen mi sistema ...
Floris
3

xrandr + awk, 25 bytes

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

ingrese la descripción de la imagen aquí

Pandya
fuente
1
Esto no funciona grep *expande el asterisco a todos los archivos en el directorio.
Jens
@Jens corregido. Gracias por señalar
Pandya
Gracias; Otra pista: la ortografía adecuada grep|cutes awk.
Jens
Aún no funciona. Genera *0. Mi salida xrandr es *0 3360 x 1050 ( 889mm x 278mm ) *0.
Jens
@Jens, entonces necesitas -f2Btw, ¿puedes verificar xrandr|awk '/\*/{print $2}'?
Pandya
3

ZX Spectrum Basic, 10 bytes

solo para completar:

PRINT "256x192"

salidas 256x192 . El Spectrum tiene una resolución de pantalla fija fija.

Radovan Garabík
fuente
... y usa un solo byte para palabras clave como PRINT.
Jens
2

Procesamiento, 51 bytes

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

Esto genera en este formato: width height. Además, el programa crea una ventana que es del tamaño de la pantalla que está utilizando (porque cada programa de procesamiento crea una ventana por defecto) y este programa solo muestra la altura y el ancho de esta ventana / boceto.

Kritixi Lithos
fuente
Oh, el formato es WIDTHxHEIGHT.
Matthew Roh
@SIGSEGV Lo acabo de notar
Kritixi Lithos
2

xdpyinfo+ awk, 28 bytes

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

Probado en Cygwin con cabezales dobles.

Jens
fuente
1
xdpyinfo|awk /dim/{print\$2}toma 28 bytes, no 24
Pandya
@Pandya Necesito gafas nuevas :-)
Jens
1

Tcl / Tk, 40

puts [winfo screenw .]x[winfo screenh .]
sergiol
fuente
1

Lithp , 116 bytes

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

(Saltos de línea añadidos para facilitar la lectura)

Pruébalo en línea!

¡Finalmente, mi módulo html-toolkit se usa! Solo funciona en el enlace Pruébelo en línea, no funcionará desde la línea de comandos.

Se podrían guardar algunos bytes si 1024 x 768pudiera ser una salida válida. Solo usamos (+ .. "x" .. )para evitar printel espacio implícito.

Andrakis
fuente
Hmm Lo probé en línea, pero dice que 2048x1080en realidad es una pantalla 4K real 4096x2160. ¿Alguna idea de por qué? Firefox 52.0 en FreeBSD 11.
Jens
Ni idea. Simplemente estoy agarrando window.screeny obteniendo los atributos widthy height. Me imagino que si abres la consola de Firefox y escribes window.screen, verás lo aparentemente incorrecto 2048x1080.
Andrakis
1

Lua (marco de löve), 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

El programa cambia primero a pantalla completa, luego obtiene el ancho y la altura y luego lo imprime :)

Lycea
fuente
1

xrandr y sh, 23 bytes

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

Probado en una caja CentOS 5 con pantalla redirigida a una máquina Cygwin con dos monitores. Aquí la xrandrsalida completa es

$ 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
fuente
1

Ruby + xrandr, 37 bytes

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

Solución alternativa (52 bytes):

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

Rojo , 26 bytes

system/view/screens/1/size

Salidas por ejemplo:

1920x1080

El código se explica por sí mismo. El se 1refiere a la primera pantalla

Geek I
fuente