Katakan resolusi layar saya!

33

Keluarkan resolusi layar perangkat dalam format spesifik[width]x[height] (tanpa tanda kurung). Sebagai contoh, sebuah output bisa saja 1440x900.

Berikut adalah penguji online yang dapat Anda gunakan untuk memeriksa resolusi layar Anda sendiri.

Matthew Roh
sumber
17
Format output spesifik tidak menyenangkan, tetapi mungkin sudah terlambat untuk berubah sekarang
Luis Mendo
3
Apa yang seharusnya terjadi jika beberapa monitor terhubung?
Jonathan Allan
4
Saya kira kita tidak diizinkan untuk mengubah resolusi Anda terlebih dahulu dan kemudian memberi tahu Anda nilai-nilai itu, kan?
Engineer Toast
3
APL \ 360 (hanya dapat dijalankan di lingkungan mesin tik IBM / 360), 5 byte:'0x0'
Adám
4
Saya suka yang ini mendiskualifikasi sebagian besar bahasa golf dan mendorong orang untuk menjelajahi batas-batas bahasa praktis.
robbie

Jawaban:

38

JavaScript (ES6), 32 byte

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

Output sebagai fungsi return. Tambahkan f=di awal dan aktifkan like f(). Menggunakan inisialisasi parameter untuk menginisialisasi parameter _ke screenobjek. Sisanya cukup jelas.

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

Catatan: Melewatkan argumen ke fungsi ini akan menyebabkannya gagal.


JavaScript (Solusi Sebelumnya), 35 byte

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

Tidak pernah terpikir saya suatu hari akan menggunakan with! Saya tidak berpikir ini bisa bermain golf lebih lanjut.

Arjun
sumber
Jika REPL diizinkan, s=screen,s.width+"x"+s.height(29 karakter) juga berfungsi.
Kobi
Oooh. Baik penggunaan nilai argumen default.
Matius Roh
Solusi 35-byte dapat menghemat lima byte dengan tidak repot-repot untuk alert: with(screen)(width+'x'+height)hanya mengembalikan string yang sesuai.
KRyan
2
Jawaban ini secara mendasar cacat. Saya bisa menipu dengan memperbesar atau memperkecil peramban saya!
The Great Duck
1
Ayo, kalian bahkan mencoba _=screen,_.width+"x"+_.height
:,
33

TI-BASIC, 30 32 29 byte (tidak bersaing?)

* sigh * TI-BASIC membutuhkan byte ekstra untuk setiap huruf kecil.

+2 terima kasih kepada @Timtech

-3 terima kasih kepada @Timtech

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

Ini hanya berfungsi karena TI-BASIC hanya dapat dijalankan pada kalkulator dengan dua resolusi layar yang berbeda: 96 oleh 64 dan 320 oleh 240. Saya hanya menguji untuk melihat layar yang saya miliki dengan mengatur Zoom ke sesuatu yang berbeda tergantung pada resolusi layar kemudian menghasilkan resolusi yang benar.

Saya menandai ini sebagai non-bersaing untuk saat ini, karena sulit dikodekan.

Scott Milner
sumber
6
Itu penyalahgunaan yang cerdas;)
Matthew Roh
1
Anda dapat menyimpan dengan tidak menggunakan ZDecimaldan kemudian menggunakan Xmaxperbandingan yang berbeda , setidaknya satu byte. Juga, saya pikir Anda perlu menggunakan huruf kecil xyang dua byte (x2) bukan setara dengan huruf besar satu byte.
Timtech
@Timtech Saya harus menggunakan Zoom dua byte (seperti ZDecimal) karena zoom default ( ZStandard) sama pada kedua kalkulator. Saya akan memperbaiki kapitalisasi.
Scott Milner
1
Oh, aku mengerti maksudmu. Jika Anda menggunakannya ZStandard, apakah ΔXakan berbeda dengan kalkulator? Juga, ZDecimalhanya satu byte, jadi ini adalah 31 byte.
Timtech
2
Untuk beberapa alasan, reaksi instan saya adalah "itu valid, tetapi tidak akan valid jika hanya ada satu resolusi layar yang memungkinkan", tetapi sudut pandang itu tampaknya tidak konsisten secara internal. Jadi saya benar-benar tidak yakin apakah ini curang atau tidak.
20

JavaScript (ES6), 32 byte

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

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

SethWhite
sumber
2
versi lambda dapat diterima
Felipe Nardi Batista
6
_=>(s=screen).width+'x'+s.heightmenghemat satu byte
Felipe Nardi Batista
@FelipeNardiBatista Terima kasih, pikiran itu baru saja terjadi pada saya juga :)
SethWhite
1
Kerja bagus! +1 :)
Arjun
5
Saya suka bagaimana semua entri JS secara konsisten lebih pendek daripada sejumlah besar jawaban lainnya. Hampir tidak pernah terjadi.
Draco18s
11

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

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

Berjalan system_profiler, dapatkan SPDisplaysDataTypeinformasi, cari yang pertama somasuk Resolution, dan cetak resolusi layar. Untuk beberapa layar, ini mencetak semua resolusi.

Contoh dari perintah yang sedang berjalan.


Varian sebelumnya yang tidak memenuhi syarat:

/*/*/sy*r SPDisplaysDataType|grep so|tr -d 'R :a-w'
zgrep
sumber
Saya hanya menjalankan ini di MacBook Pro saya dengan layar kedua terpasang. Saya mendapat 2880x1800\n1920x1080@60Hz(dua baris). Saya tidak tahu apakah itu mendiskualifikasi ini ... atau?
Floris
@ Floris apakah OP menentukan cara berperilaku ketika ada beberapa layar?
Kapten Man
Tidak - tetapi formatnya @60Hzjelas tidak dalam spesifikasi.
Floris
Saya kira Anda bisa memakukan pada |sed 1q, membawa jumlah byte hingga 58 byte.
zgrep
Saya memperbaiki ketidakpatuhan dengan beralih ke awkdan memiliki satu byte tambahan. :)
zgrep
9

Javascript, 36 byte

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

Biarawati Bocor
sumber
9

Memproses 3, 37 byte

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

fullScreen()menyebabkan aplikasi untuk meluncurkan dengan dimensi maksimum - resolusi tampilan. Satu byte kurang dari yang jelas

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

AutoHotKey, 34 byte

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

Simpan ini dalam file dengan ekstensi .AHK dan jalankan dari prompt perintah

jmriego
sumber
1
Mengapa tidak menggunakan Senddaripada MsgBox?
Engineer Toast
@ EngineerToast, terima kasih! Itu menyelamatkan dua byte
jmriego
7

C (Windows), 79 78 77 byte

Terima kasih kepada @Johan du Toit karena telah menghemat satu byte!

#import<windows.h>
#define G GetSystemMetrics
f(){printf("%dx%d",G(0),G(1));}
Steadybox
sumber
2
Saya masih bermain-main dengan 'GetDeviceCaps' sampai saya melihat jawaban Anda :-) Anda masih dapat menyimpan 1 byte dengan menggunakan yang berikut:#define G GetSystemMetrics f(){printf("%dx%d",G(0),G(1));}
Johan du Toit
7

PowerShell, 67 60 55 Bytes

-7 Terima kasih kepada Martin Ender

-5 (sebenarnya 12!) Dari Leaky Nun , sihir Regex berada di luar jangkauanku.

Ini panjang tapi tidak lebih lama dari System.Windows.Forms.SystemInformation.PrimaryMonitorSizesolusi yang menghebohkan

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

pertama kita Get-WmiObject( gwmi) untuk mengambil Win32_VideoControllerobjek, yang berisi anggota bernama VideoModeDescription, yang merupakan string dalam format 1920 x 1080 x 4294967296 colors, kemudian saya jalankan ganti regex untuk mendapatkan format yang benar.

PS H:\> (gwmi win32_videocontroller|% v*n)-replace" |x \d+\D+$"
1920x1080
colsw
sumber
Saya pikir (gwmi win32_videocontroller|% v*n)-replace" |x[^x]+$"mencukur beberapa byte dengan mengubah regex.
TessellatingHeckler
6

Mathematica, 51 byte

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

Ini mungkin tidak berfungsi untuk Anda tergantung pada perangkat apa yang telah Anda hubungkan (saya tidak tahu). Ini harus selalu berfungsi (dengan asumsi Anda memiliki setidaknya satu layar terhubung):

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

Penjelasan

SystemInformation[] mengembalikan ekspresi formulir

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

Kami tertarik "Devices", yang dapat diakses secara langsung sebagai SystemInformation["Devices"]atau sebagai SystemInformation[][[1,5,2]]. Hasilnya akan berupa daftar formulir

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

Kami ingin "ScreenInformation", yang dapat diakses sebagai SystemInformation["Devices","ScreenInformation"]atau lebih ringkas seperti SystemInformation[][[1,5,2,1,2]]. Hasilnya akan berupa

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

Panjang daftar akan menjadi jumlah layar yang telah Anda hubungkan. Layar pertama adalah SystemInformation[][[1,5,2,1,2,1]]dan lebar dan tinggi dapat diekstraksi sebagai SystemInformation[][[1,5,2,1,2,1,2,2,;;,2]]Kemudian kita hanya memasukkan Infix xformat output.

ngenisis
sumber
6

Java 7, 123 114 byte

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

Metode ini tidak akan berfungsi pada instalasi Java tanpa kepala (seperti pada TIO) karena menggunakan pustaka awt. Di bawah tenda, panggilan getScreenSizemenggunakan Java Native Interface untuk memanggil (biasanya ke pustaka C) untuk lebar layar dan tinggi layar.

-9 byte terima kasih kepada Olivier Grégoire karena mengingatkan saya bahwa saya dapat mengembalikan string daripada mencetaknya.

Menyodok
sumber
2
Saya baru saja akan memposting ...
Leaky Nun
@ LeakyNun Anda dan saya berdua. +1 Poke .
Kevin Cruijssen
Sayang sekali outputnya terbatas ...x..., karena void f(){System.out.print((java.awt.Toolkit.getDefaultToolkit().getScreenSize()+"").replaceAll("[^\\d,]",""));}output mana 1920,1200yang lebih pendek ..
Kevin Cruijssen
1
@KevinCruijssen ya saya mencoba bermain dengan itu juga. "Terlalu buruk" sebenarnya adalah bahwa menggunakan regex di java sangat berat dalam hal jumlah byte.
Poke
1
@ Poke Kamu memang benar. Saya telah mampu menggunakan apa yang saya menunjukkan di atas dengan xbukannya ,dengan menggunakan beberapa pengganti regex, tapi lima byte lebih dari jawaban Anda saat ini: void f(){System.out.print((java.awt.Toolkit.getDefaultToolkit().getScreenSize()+"").replaceAll("[^\\d,]","").replace(",","x"));}atau void f(){System.out.print((java.awt.Toolkit.getDefaultToolkit().getScreenSize()+"").replaceAll(".*?(\\d+).*?(\\d+).*","$1x$2"));}Ah, apa yang tidak berat di Jawa ..; p
Kevin Cruijssen
6

C #, 101 95 89 byte

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

-6 byte terima kasih kepada @TheLethalCoder dengan mengingatkan saya OP tidak menyebutkan tentang pencetakan, jadi mengembalikan string juga baik-baik saja. Dan tambahan -6 byte dengan mengubahnya menjadi lambda.

Kevin Cruijssen
sumber
Anda dapat menyimpan 11 byte dengan menyusun ke Func<string>: ()=>{var s=System.Windows.Forms.Screen.PrimaryScreen.Bounds;return s.Width+"x"+s.Height;};. Namun, Anda memiliki pengembalian voidtetapi Anda mengembalikan stringsehingga Anda perlu menambahkan 2 byte untuk itu.
TheLethalCoder
1
Tantangannya juga tidak menyatakan bahwa Anda tidak dapat mengambil input sehingga Anda dapat menambahkan input yang tidak digunakan untuk menyimpan byte lain yaitu_=>{var s=System.Windows.Forms.Screen.PrimaryScreen.Bounds;return s.Width+"x"+s.Height;};
TheLethalCoder
1
Oh abaikan komentar balik yang Anda tulis hasilnya, Anda dapat menyimpan 6 byte dengan mengembalikannya.
TheLethalCoder
Dan kecuali Anda bisa memikirkan cara untuk membuatnya lebih pendek var s=System.Windows.Forms.Screen.AllScreens[0].Bounds;juga akan menjadi jumlah yang sama tetapi Anda bisa golf dengan ide itu dalam pikiran.
TheLethalCoder
6

Bash + xrandr, 44 karakter

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

xrandrmilik server X, pada Ubuntu disediakan oleh paket x11-xserver-utils .

Contoh dijalankan:

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

xrandr + grep + util-linux, 30 karakter

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

Terimakasih untuk:

Contoh dijalankan:

bash-4.3$ xrandr|grep -oP '\d+x\d+'|line
1920x1080
manatwork
sumber
Saya tidak memiliki bash dengan tampilan, apakah akan xrandr|grep *berfungsi?
Jonathan Allan
Yakin. Tetapi untuk saat ini saya grepdan sedupaya untuk mem xrandr- parsing keluaran ( pastebin.com/uTVcjWCq ) lebih lama.
manatwork
Mungkin xrandr|grep *|cut -d' ' -f1? (menggunakan garis yang cocok dari pasta Anda @ TIO )
Jonathan Allan
Ah, Anda bermaksud memilih resolusi dari daftar dengan tanda “*”? Berpikir untuk kemungkinan itu, tetapi saya tidak yakin apakah akan berfungsi dengan beberapa layar yang terhubung. Seingat saya, itu akan mencantumkan resolusi saat ini dari setiap layar yang terhubung.
manatwork
Ah ya itu akan, tidak yakin apa yang diinginkan OP dalam skenario seperti itu!
Jonathan Allan
5

Python 2, 73 byte

from ctypes import*
u=windll.user32.GetSystemMetrics;
print u(0),'x',u(1)
Neil
sumber
print u(0),'x',u(1)lebih kecil dan contohnya ( tautan ) memungkinkannya
Felipe Nardi Batista
1
To clarify, If it's equivalent to the output from What is my screen resolution, It's valid.di situs web itu, ada ruang di antara masing-masing bagian
Felipe Nardi Batista
@FelipeNardiBatista Diperbarui, terima kasih.
Neil
5

Oktaf , 41 byte

Terima kasih kepada @Arjun dan @StephenS untuk koreksi.

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

0adalah pegangan untuk objek grafis root. Properti ini 'ScreenSize'mengandung koordinat layar dalam piksel. Entri ketiga dan keempat memberikan informasi yang diinginkan.

Luis Mendo
sumber
5

APL (Dyalog) , 23 byte

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

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

 pilih properti pertama (tinggi, lebar)

 membalikkan

 format sebagai teks

' '⎕R'x'R ruang eplace dengan "x" s

Adm
sumber
"gantikan dengan" x "di posisi 5 (spasi)" ini akan menyebabkan masalah pada layar kecil, misalnya 640x480 (yang digunakan VM)
Baldrickk
4

Japt , 24 byte

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

Uji secara online!

String terkompresi mewakili with(screen)width+"x"+height. Oxmengevaluasi ini sebagai JavaScript, dan hasilnya dicetak secara implisit.

Oliver
sumber
4

C (perpustakaan SDL2) 113 88 84

(-4 karakter karena bantuan @AppleShell)

Iya nih. itu mengkompilasi.

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

Jalankan dengan: gcc snippet.c -lSDL2 && ./a.out

pelaku diet
sumber
3
Saya pikir Anda dapat mempersingkat ini dengan membuat mglobal dan menghilangkan int:m[3];main(){...
Appleshell
mengakses dengan m+1harus lebih pendek dari yang m[1]benar? atau tidakkah itu mungkin di C tetapi hanya di C ++? pasti printf memiliki token dereferensi
Gizmo
@ gadget sayangnya AFAIK tidak ada specifier printf yang melakukan hal seperti itu ..
pelaku diet
4

Python 2, 61 49 byte

Terima kasih @ Jonathan-allan, @ felipe-nardi-batista

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

Untuk pengaturan tampilan tunggal, ini cocok dengan output dari situs. Ini memberikan seluruh resolusi untuk beberapa tampilan.

Kyle
sumber
print'x'....menghemat satu byte
Felipe Nardi Batista
v=Tk().maxsize(), print'%sx%s'%vmenghemat 9 byte.
Jonathan Allan
oops, lalu print'%sx%s'%Tk().maxsize()simpan lagi 4> _ <
Jonathan Allan
3

bash + xdpyinfo 42 31 byte

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

Dari halaman manual:

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

@ Floris @ manatwork Terima kasih telah menyimpan beberapa byte!

Abel Tom
sumber
Dicoret 4 masih 4 :(
Christopher
Tidak perlu ruang di sekitar pipa; Saya pikir aman untuk mencari "redup" saja; Anda bisa menulis -d\ alih-alih -d' '. Kemudian ketika datang untuk kedua grepuntuk jalur dan cutbagian dari garis itu, biasanya lebih pendek dengan satu awkpanggilan: xdpyinfo|awk '/dim/&&$0=$2'.
manatwork
Saya curiga Anda dapat menangkap sesuatu yang lebih pendek daripada dimensionstetapi saya tidak memiliki xdpyinfopada sistem saya ...
Floris
3

xrandr + awk, 25 byte

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

masukkan deskripsi gambar di sini

Pandya
sumber
1
Ini tidak berfungsi. grep *memperluas tanda bintang ke semua file dalam direktori.
Jens
@ Jen Dikoreksi. Terima kasih telah menunjukkan
Pandya
Terima kasih; petunjuk lain: ejaan yang tepat grep|cutadalah awk.
Jens
Itu masih tidak berhasil. Ini menghasilkan *0. Output xrandr saya adalah *0 3360 x 1050 ( 889mm x 278mm ) *0.
Jens
@Jens maka Anda perlu -f2Btw, Bisakah Anda memeriksa xrandr|awk '/\*/{print $2}'?
Pandya
3

ZX Spectrum Basic, 10 byte

hanya untuk kelengkapan:

PRINT "256x192"

output 256x192. Spectrum memiliki resolusi layar bawaan yang telah diperbaiki.

Radovan Garabík
sumber
... dan menggunakan satu byte untuk kata kunci seperti PRINT.
Jens
2

Memproses, 51 byte

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

Ini output dalam format ini: width height. Juga, program membuat jendela dengan ukuran layar yang Anda gunakan (karena setiap program Pemrosesan membuat jendela secara default) dan program ini hanya menampilkan tinggi dan lebar jendela / sketsa ini.

Kritixi Lithos
sumber
Oh, formatnya WIDTHxHEIGHT.
Matius Roh
@SIGSEGV Hanya menyadarinya
Kritixi Lithos
2

xdpyinfo+ awk, 28 byte

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

Diuji pada Cygwin dengan kepala ganda.

Jens
sumber
1
xdpyinfo|awk /dim/{print\$2}membutuhkan 28 byte, bukan 24
Pandya
@ Pandya saya perlu kacamata baru :-)
Jens
1

Tcl / Tk, 40

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

Lithp , 116 byte

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

(Line break ditambahkan untuk dibaca)

Cobalah online!

Akhirnya, modul html-toolkit saya mulai digunakan! Hanya berfungsi di tautan Coba Online, tidak akan berfungsi dari baris perintah.

Beberapa byte dapat disimpan jika 1024 x 768bisa berupa output yang valid. Kami hanya menggunakan (+ .. "x" .. )untuk menghindari printjarak implisit.

Andrakis
sumber
Hmm. Saya mencobanya secara online, tetapi itu mengatakan 2048x1080untuk layar 4K yang sebenarnya 4096x2160. Ada yang tahu kenapa? Firefox 52.0 pada FreeBSD 11.
Jens
Tidak ada ide. Saya hanya mengambil window.screendan mendapatkan widthdan heightatribut dari itu. Saya membayangkan jika Anda membuka konsol Firefox dan mengetik window.screenAnda akan melihat yang tampaknya salah 2048x1080.
Andrakis
1

Lua (löve framework), 116 byte

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

Programm berubah pertama menjadi layar penuh kemudian mendapatkan lebar dan tinggi dan mencetaknya kemudian :)

Lycea
sumber
1

xrandr dan sh, 23 byte

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

Diuji pada kotak CentOS 5 dengan layar dialihkan ke mesin Cygwin dengan dua monitor. Di sini xrandroutput lengkapnya adalah

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

Ruby + xrandr, 37 byte

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

Solusi alternatif (52 byte):

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

Merah , 26 Bytes

system/view/screens/1/size

Output misalnya:

1920x1080

Kode ini cukup jelas. The 1mengacu pada layar pertama

Geeky I
sumber