Diga-me a minha resolução de tela!

33

Envie a resolução de tela do dispositivo no formato específico de [width]x[height](sem os colchetes). Por exemplo, uma saída poderia ser 1440x900.

Aqui está um testador online que você pode usar para verificar sua própria resolução de tela.

Matthew Roh
fonte
17
O formato de saída específico não é divertido, mas provavelmente já é tarde para mudar agora
Luis Mendo
3
Qual deve ser o comportamento se vários monitores estiverem conectados?
Jonathan Allan
4
Suponho que não temos permissão para alterar sua resolução e depois informar esses valores, certo?
Engineer Toast
3
APL \ 360 (pode ser executado apenas no ambiente de máquina de escrever IBM / 360), 5 bytes:'0x0'
Adám 2/17/17
4
Eu gosto que este desqualifique a maioria das línguas do golfe e incentive as pessoas a explorar os limites das línguas práticas.
Robbie

Respostas:

38

JavaScript (ES6), 32 bytes

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

Saídas como função return. Adicione f=no início e chame like f(). Usa a inicialização de parâmetro _para inicializar o parâmetro no screenobjeto. O resto é auto-explicativo.

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

Nota: Passar um argumento para esta função fará com que ela falhe.


JavaScript (solução anterior), 35 bytes

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

Nunca pensei que um dia usaria with! Eu não acho que isso possa ser jogado ainda mais.

Arjun
fonte
Se REPLs forem permitidos, s=screen,s.width+"x"+s.height(29 caracteres) também funcionará.
Kobi
Oooh. Bom uso do valor do argumento padrão.
Matthew Roh
A solução de 35 bytes pode salvar cinco bytes, não se incomodando em alert: with(screen)(width+'x'+height)apenas retorna a string apropriada.
KRyan #
2
Esta resposta é fundamentalmente falho. Eu posso trapacear com o zoom dentro e fora do meu navegador!
The Great Duck
1
Vamos lá, vocês estão tentando: _=screen,_.width+"x"+_.height29 bytes
M28 7/17
33

TI-BASIC, 30 32 29 bytes (não concorrente?)

* suspiro * O TI-BASIC leva um byte extra para cada letra minúscula.

+2 graças a @Timtech

-3 graças a @Timtech

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

Isso funciona apenas porque o TI-BASIC só pode ser executado em calculadoras com duas resoluções de tela diferentes: 96 por 64 e 320 por 240. Acabei de testar para ver qual tela tenho configurando o Zoom para algo diferente, dependendo da resolução da tela. produzindo a resolução correta.

Estou marcando isso como não competitivo por enquanto, pois é codificado.

Scott Milner
fonte
6
Isso é um abuso inteligente;)
Matthew Roh
1
Você pode salvar não usando ZDecimale, em seguida, usando uma Xmaxcomparação diferente , pelo menos um byte. Além disso, acho que você precisa usar letras minúsculas, xque são dois bytes (x2), em vez do equivalente em letras maiúsculas de um byte.
Timtech
@ Timtech Eu tenho que usar um zoom de dois bytes (como ZDecimal) porque o zoom padrão ( ZStandard) é o mesmo nas duas calculadoras. Eu vou consertar a capitalização, no entanto.
Scott Milner
1
Oh, entendo o que você quer dizer. Se você usar ZStandard, porém, seria ΔXdiferente entre as calculadoras? Além disso, ZDecimalé apenas um byte, portanto, são 31 bytes.
Timtech
2
Por alguma razão, minha reação instantânea é "válida, mas não seria válida se houvesse apenas uma possível resolução de tela", mas esse ponto de vista parece internamente inconsistente. Portanto, não tenho certeza se isso é trapaça ou não.
20

JavaScript (ES6), 32 bytes

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

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

SethWhite
fonte
2
a versão lambda é aceitável
Felipe Nardi Batista
6
_=>(s=screen).width+'x'+s.heightsalva um byte
Felipe Nardi Batista
@FelipeNardiBatista Graças, o pensamento me ocorreu também :)
SethWhite
1
Bom trabalho! +1 :)
Arjun
5
Eu amo como todas as entradas JS foram consistentemente mais curtas que um grande número de outras respostas. Quase nunca acontece.
Draco18s
11

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

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

Corridas system_profiler, recebe a SPDisplaysDataTypeinformação, pesquisas para o primeiro soem Resolution, e imprime a resolução da tela. Para várias telas, isso imprime todas as resoluções.

Exemplo do comando em execução.


A variante anterior, que não é compatível:

/*/*/sy*r SPDisplaysDataType|grep so|tr -d 'R :a-w'
zgrep
fonte
Acabei de executar isso no meu MacBook Pro com um segundo monitor conectado. Eu tenho 2880x1800\n1920x1080@60Hz(duas linhas). Não sei se isso desqualifica isso ... ou?
Floris 2/17
@Floris OP especificou como se comportar quando há várias telas?
Captain Man
Não - mas o formato @60Hzclaramente não está nas especificações.
Floris 2/17
Eu acho que você poderia usar um |sed 1q, aumentando a contagem de bytes até 58 bytes.
Zgrep 2/05
Corrigi a não conformidade mudando para awke tendo um byte extra. :)
zgrep
9

Javascript, 36 bytes

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

Freira Furada
fonte
9

Processando 3, 37 bytes

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

fullScreen()faz com que o aplicativo seja iniciado com as dimensões máximas - a resolução da tela. Um byte a menos que o óbvio

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

AutoHotKey, 34 bytes

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

Salve isso em um arquivo com a extensão .AHK e execute-o em um prompt de comando

jmriego
fonte
1
Por que não usar em Sendvez de MsgBox?
Engenheiro Toast
@EngineerToast thanks! Isso salvou dois bytes
jmriego 2/17
7

C (Windows), 79 78 77 bytes

Obrigado a @Johan du Toit por salvar um byte!

#import<windows.h>
#define G GetSystemMetrics
f(){printf("%dx%d",G(0),G(1));}
Steadybox
fonte
2
Eu ainda estava brincando com 'GetDeviceCaps' até ver sua resposta :-) Você ainda pode salvar 1 byte usando o seguinte:#define G GetSystemMetrics f(){printf("%dx%d",G(0),G(1));}
Johan du Toit
7

PowerShell, 67 60 55 bytes

-7 graças a Martin Ender

-5 (na verdade 12!) De Leaky Nun , a magia Regex está além de mim.

Isso é longo, mas não maior que a System.Windows.Forms.SystemInformation.PrimaryMonitorSizesolução horrenda

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

primeiro nós Get-WmiObject( gwmi) para recuperar o Win32_VideoControllerobjeto, que contém um membro chamado VideoModeDescription, que é uma string no formato de 1920 x 1080 x 4294967296 colors, então eu executo um regex replace para obter o formato correto.

PS H:\> (gwmi win32_videocontroller|% v*n)-replace" |x \d+\D+$"
1920x1080
colsw
fonte
Eu acho que (gwmi win32_videocontroller|% v*n)-replace" |x[^x]+$"raspa alguns bytes, ajustando o regex.
TessellatingHeckler
6

Mathematica, 51 bytes

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

Isso pode não funcionar para você, dependendo de quais dispositivos você conectou (não sei). Isso sempre deve funcionar (supondo que você tenha pelo menos uma tela conectada):

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

Explicação

SystemInformation[] retorna uma expressão do formulário

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

Estamos interessados "Devices", que podem ser acessados ​​diretamente como SystemInformation["Devices"]ou como SystemInformation[][[1,5,2]]. O resultado será uma lista do formulário

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

Queremos "ScreenInformation", que pode ser acessado de maneira SystemInformation["Devices","ScreenInformation"]mais ou mais sucinta SystemInformation[][[1,5,2,1,2]]. O resultado será da forma

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

O comprimento da lista será o número de telas que você conectou. A primeira tela é SystemInformation[][[1,5,2,1,2,1]]e a largura e a altura podem ser extraídas como SystemInformation[][[1,5,2,1,2,1,2,2,;;,2]]Então, basta inserir um Infix xpara o formato de saída.

ngenisis
fonte
6

Java 7, 123 114 bytes

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

Este método não funcionará em uma instalação decapitada de Java (como no TIO) porque usa as bibliotecas awt. Sob o capô, a chamada getScreenSizeusa a Java Native Interface para chamar (normalmente em uma biblioteca C) a largura e a altura da tela.

-9 bytes graças a Olivier Grégoire por me lembrar que eu posso retornar a string em vez de imprimi-la.

Cutucar
fonte
2
Eu estava prestes a post ...
Leaky Nun
@LeakyNun Você e eu. +1 puxão .
Kevin Cruijssen
Pena que a saída é restrita a ...x..., porque void f(){System.out.print((java.awt.Toolkit.getDefaultToolkit().getScreenSize()+"").replaceAll("[^\\d,]",""));}o que saídas 1920,1200é mais curto ..
Kevin Cruijssen
1
@KevinCruijssen sim, eu tentei brincar com isso também. O verdadeiro "muito ruim" é que o uso de regex em java é tão pesado em termos de contagem de bytes.
puxão
1
@ Poké Você realmente está certo. Eu pude usar o que mostro acima com um em xvez de ,usar alguma substituição de regex, mas são cinco bytes a mais do que sua resposta atual: void f(){System.out.print((java.awt.Toolkit.getDefaultToolkit().getScreenSize()+"").replaceAll("[^\\d,]","").replace(",","x"));}ou void f(){System.out.print((java.awt.Toolkit.getDefaultToolkit().getScreenSize()+"").replaceAll(".*?(\\d+).*?(\\d+).*","$1x$2"));}Ah, bem, o que não é pesado em 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 graças a @TheLethalCoder , lembrando-me de que o OP não mencionou sobre impressão, portanto, retornar uma string também é bom. E -6 bytes adicionais, alterando-o para um lambda.

Kevin Cruijssen
fonte
Você pode economizar 11 bytes por compilação a um Func<string>: ()=>{var s=System.Windows.Forms.Screen.PrimaryScreen.Bounds;return s.Width+"x"+s.Height;};. No entanto, você tem um retorno de, voidmas você está retornando um, stringentão você precisa adicionar 2 bytes para isso.
TheLethalCoder
1
O desafio também não diz que você não pode tirar a entrada para que você possa adicionar uma entrada não utilizada para salvar outro byte ie_=>{var s=System.Windows.Forms.Screen.PrimaryScreen.Bounds;return s.Width+"x"+s.Height;};
TheLethalCoder
1
Oh, ignore o comentário de retorno ao escrever o resultado; você pode salvar 6 bytes retornando-o.
TheLethalCoder
E a menos que você consiga pensar em uma maneira de reduzi-lo var s=System.Windows.Forms.Screen.AllScreens[0].Bounds;também seria a mesma contagem, mas você poderia jogar com essa ideia em mente.
TheLethalCoder
6

Bash + xrandr, 44 caracteres

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

xrandrpertence ao servidor X, no Ubuntu é fornecido pelo pacote x11-xserver-utils .

Exemplo de execução:

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

Graças a:

Exemplo de execução:

bash-4.3$ xrandr|grep -oP '\d+x\d+'|line
1920x1080
homem a trabalhar
fonte
Não tenho bash com uma tela, xrandr|grep *funcionaria?
Jonathan Allan
Certo. Mas, por enquanto, o my grepe as sedtentativas de analisar xrandra saída ( pastebin.com/uTVcjWCq ) foram maiores.
manatwork
Talvez xrandr|grep *|cut -d' ' -f1? (usando a linha correspondente da sua pasta @ TIO )
Jonathan Allan
Ah, você quer escolher a resolução da lista pela marca "*"? Pensei nessa possibilidade, mas não tenho certeza se funcionaria com vários monitores conectados. Pelo que me lembro, isso listaria a resolução atual de cada monitor conectado.
Manatwork
Ah sim, seria, não sei o que o OP quer em tal cenário!
Jonathan Allan
5

Python 2, 73 bytes

from ctypes import*
u=windll.user32.GetSystemMetrics;
print u(0),'x',u(1)
Neil
fonte
print u(0),'x',u(1)é menor e seu exemplo ( link ) permite
Felipe Nardi Batista
1
To clarify, If it's equivalent to the output from What is my screen resolution, It's valid.nesse site, há espaço entre cada parte
Felipe Nardi Batista
@FelipeNardiBatista Atualizado, obrigado.
Neil
5

Oitava , 41 bytes

Obrigado a @Arjun e @StephenS pelas correções.

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

0é um identificador para o objeto gráfico raiz. Sua propriedade 'ScreenSize'contém as coordenadas da tela em pixels. A terceira e quarta entradas fornecem as informações desejadas.

Luis Mendo
fonte
5

APL (Dyalog) , 23 bytes

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

⎕WG'DevCaps'W indow L et Dev gelo Tampão abilitie s

 escolha a primeira propriedade (altura, largura)

 marcha ré

 formatar como texto

' '⎕R'x'R espaços EColoque com "x" s

Adão
fonte
"substituto com um 'x' na posição 5 (o espaço)" esta causaria problemas que uma tela de pequeno, por exemplo, 640x480 (que VMs uso)
Baldrickk
4

Japt , 24 bytes

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

Teste online!

A sequência compactada representa with(screen)width+"x"+height. Oxavalia isso como JavaScript e o resultado é impresso implicitamente.

Oliver
fonte
4

C (biblioteca SDL2) 113 88 84

(-4 caracteres devido à ajuda do @AppleShell)

Sim. compila.

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

Correr com : gcc snippet.c -lSDL2 && ./a.out

dieter
fonte
3
Eu acho que você pode encurtar esta fazendo mglobal e omitindo int:m[3];main(){...
Appleshell
acessando por m+1deve ser mais curto que o m[1]certo? ou isso não é possível em C, mas apenas em C ++? certamente printf tem algum dereference token de
Gizmo
@gizmo infelizmente AFAIK não há nenhum especificador printf que faz tal coisa ..
dieter
4

Python 2, 61 49 bytes

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

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

Para configurações de exibição única, isso corresponde à saída do site. Isso fornece resolução completa para vários monitores.

Kyle
fonte
print'x'....salva um byte
Felipe Nardi Batista
v=Tk().maxsize(), print'%sx%s'%vsalva 9 bytes.
Jonathan Allan
Opa, e depois print'%sx%s'%Tk().maxsize()salva outro 4> _ <
Jonathan Allan
3

bash + xdpyinfo 42 31 bytes

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

Na página do manual:

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

@Floris @manatwork Obrigado por salvar alguns bytes!

Abel Tom
fonte
Riscado 4 ainda é 4 :(
Christopher
Não há necessidade de espaços ao redor dos canos; Eu acho que é seguro procurar apenas "escuro"; você pode escrever em -d\ vez de -d' '. Então, quando se trata de ambos greppara uma linha e cutuma parte dessa linha, geralmente é mais curto com uma única awkchamada: xdpyinfo|awk '/dim/&&$0=$2'.
Manatwork
Eu suspeito que você pode grep algo mais curto do que dimensions, mas eu não tenho xdpyinfono meu sistema ...
Floris
3

xrandr + awk, 25 bytes

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

insira a descrição da imagem aqui

Pandya
fonte
1
Isso não funciona. grep *expande o asterisco para todos os arquivos no diretório
Jens
@Jens Corrected. Obrigado por apontar
Pandya
Obrigado; outra dica: a grafia correta grep|cuté awk.
Jens
Ainda não funciona. Ele produz *0. Minha saída xrandr é *0 3360 x 1050 ( 889mm x 278mm ) *0.
Jens
@ Jens, então você precisa -f2Btw, você pode verificar xrandr|awk '/\*/{print $2}'?
Pandya
3

ZX Spectrum Basic, 10 bytes

apenas para completar:

PRINT "256x192"

saídas 256x192. O Spectrum possui uma resolução de tela fixa fixa.

Radovan Garabík
fonte
... e usa um único byte para palavras-chave como PRINT.
Jens
2

Processando, 51 bytes

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

Isso gera neste formato: width height. Além disso, o programa cria uma janela com o tamanho da tela que você está usando (porque todos os programas de processamento criam uma janela por padrão) e esse programa apenas exibe a altura e a largura dessa janela / esboço.

Kritixi Lithos
fonte
Oh, o formato é WIDTHxHEIGHT.
Matthew Roh
@SIGSEGV Acabei de notar
Kritixi Lithos #
2

xdpyinfo+ awk, 28 bytes

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

Testado em Cygwin com duas cabeças.

Jens
fonte
1
xdpyinfo|awk /dim/{print\$2}toma 28 bytes e não 24
Pandya #
@Pandya eu preciso de óculos novos :-)
Jens
1

Tcl / Tk, 40

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

Lit , 116 bytes

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

(Quebras de linha adicionadas para facilitar a leitura)

Experimente online!

Finalmente, meu módulo html-toolkit é útil! Funciona apenas no link Experimente online, não funcionará na linha de comando.

Alguns bytes podem ser salvos se houver 1024 x 768saída válida. Nós apenas usamos (+ .. "x" .. )para evitar printo espaçamento implícito.

Andrakis
fonte
Hmm. Eu tentei online, mas diz 2048x1080para uma tela 4K real que é realmente 4096x2160. Alguma idéia do porquê? Firefox 52.0 no FreeBSD 11.
Jens
Nenhuma idéia. Estou simplesmente pegar window.screene obter o widthe heightatributos dele. Eu imagino que se você abriu o console do Firefox e digitou, window.screenverá o aparentemente incorreto 2048x1080.
Andrakis 4/17/17
1

Lua (estrutura completa), 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

O programa muda primeiro para tela cheia, obtém a largura e a altura e as imprime :)

Lycea
fonte
1

xrandr e sh, 23 bytes

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

Testado em uma caixa CentOS 5 com tela redirecionada para uma máquina Cygwin com dois monitores. Aqui a xrandrsaída total é

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

Ruby + xrandr, 37 bytes

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

Solução alternativa (52 bytes):

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

Vermelho , 26 bytes

system/view/screens/1/size

Saídas por exemplo:

1920x1080

O código é bastante auto-explicativo. O 1refere-se à primeira tela

Geeky I
fonte