Ekran çözünürlüğümü söyle!


33

Cihazın ekran çözünürlüğünü belirli bir biçimde [width]x[height](parantez olmadan) çıkarın . Örneğin, bir çıktı olabilir 1440x900.

İşte kendi ekran çözünürlüğünüzü kontrol etmek için kullanabileceğiniz çevrimiçi bir test cihazı.


17
Özel çıktı formatı eğlenceli değil, ama şimdi değiştirmek için muhtemelen çok geç
Luis Mendo

3
Birden fazla ekran bağlıysa, davranış ne olmalıdır?
Jonathan Allan,

4
Sanırım ilk önce çözünürlüğünüzü değiştirmemize ve ardından size bu değerleri söylememize izin verilmedi.
Mühendis Toast,

3
APL \ 360 (yalnızca IBM / 360 daktilo ortamında çalıştırılabilir), 5 bayt:'0x0'
16

4
Bunun çoğu golf dilini diskalifiye etmesini ve insanları pratik dillerin sınırlarını keşfetmeye teşvik etmesini seviyorum.
robbie

Yanıtlar:


38

JavaScript (ES6), 32 bayt

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

İşlev olarak çıktı verir return. f=Başlangıçta ekleyin ve benzeri çağırır f(). Parametresi başlatmak için parametre başlatılıyor kullanır _için screennesne. Gerisi kendi kendini açıklayıcıdır.

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

Not: Bu işleve bir argüman iletmek başarısız olmasına neden olur.


JavaScript (Önceki Çözüm), 35 bayt

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

Bir gün kullanacağımı asla düşünmedim with! Bunun daha fazla golf oynayabileceğini sanmıyorum.


REPL'lere izin verilirse, s=screen,s.width+"x"+s.height(29 karakter) da çalışır.
Kobi

Oooh. Varsayılan argüman değerinin iyi kullanımı.
Matthew Roh

35 baytlık çözüm, rahatsız etmeden beş byte tasarruf sağlayabilir alert: with(screen)(width+'x'+height)sadece uygun dizeyi döndürür.
KRyan

2
Bu cevap temelde hatalı. Tarayıcımı yakınlaştırıp uzaklaştırarak hile yapabilirim!
Büyük Ördek

1
Hadi, siz bile çalışıyor musunuz _=screen,_.width+"x"+_.height
,:

33

TI-BASIC, 30 32 29 bayt (rekabet etmeyen?)

* sigh * TI-BASIC, her küçük harf için fazladan bir bayt alır.

@Timtech sayesinde +2

-3 @Timtech sayesinde

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

Bu sadece işe yarar, çünkü TI-BASIC yalnızca iki farklı ekran çözünürlüğüne sahip hesap makinelerinde çalıştırılabilir: 96 x 64 ve 320 x 240. doğru çözünürlük çıktı.

Zor kodlanmış olduğu için bunu şimdilik rakipsiz olarak işaretliyorum.


6
Bu akıllıca bir suistimal;)
Matthew Roh

1
ZDecimalFarklı bir Xmaxkarşılaştırma yapıp kullanmayarak ve en az bir bayt kullanarak tasarruf edebilirsiniz . Ayrıca, xbir bayt büyük harf yerine iki bayt (x2) olan küçük harf kullanmanız gerektiğini düşünüyorum .
Timtech

@Timtech ZDecimalVarsayılan yakınlaştırma ( ZStandard) her iki hesap makinesinde de aynı olduğundan, iki baytlık bir Yakınlaştırma (gibi ) kullanmam gerekiyor . Yine de büyük harfleri düzelteceğim.
Scott Milner

1
Ne demek istediğini anlıyorum. ZStandardYine de kullanırsanız ΔX, hesap makineleri arasında daha farklı olurdu ? Ayrıca, ZDecimalsadece bir bayt, bu yüzden bu 31 bayttır.
Timtech

2
Bazı nedenlerden dolayı, anında verdiğim tepki "geçerli, ancak yalnızca bir ekran çözünürlüğü varsa geçerli olmaz" dır, ancak bu bakış açısı dahili olarak tutarsız görünmektedir. Bu yüzden, bunun hile yapıp yapmadığından emin değilim.

20

JavaScript (ES6), 32 bayt

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

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


2
lambda sürümü kabul edilebilir
Felipe Nardi Batista

6
_=>(s=screen).width+'x'+s.heightbir bayt kazandırır
Felipe Nardi Batista

@FelipeNardiBatista Teşekkürler, düşünce de başıma geldi :)
SethWhite

1
Aferin! +1 :)
Arjun

5
Tüm JS girişlerinin tutarlı bir şekilde diğer cevapların sayısından kısaltılmış olmasını seviyorum. Neredeyse asla olmaz.
Draco18

11

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

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

Çalışır system_profiler, SPDisplaysDataTypebilgi alır, ilk sogirişi arar Resolutionve ekran çözünürlüğünü yazdırır. Birden fazla ekran için bu, tüm çözünürlükleri yazdırır.

Example of the command running.


Önceki, uygun olmayan değişken:

/*/*/sy*r SPDisplaysDataType|grep so|tr -d 'R :a-w'

Bunu MacBook Pro'muzda ikinci bir ekran eklenmiş olarak koştum. Ben aldım 2880x1800\n1920x1080@60Hz(iki satır). Bunun diskalifiye edilip edilmediğini bilmiyorum ... veya?
Floris

@ Floris, çoklu ekranlar olduğunda nasıl davranacağını belirtti mi?
Kaptan Adam

Hayır - ancak biçim @60Hzaçıkça spesifik değil.
Floris

Sanırım, bir |sed 1qbayt sayısı 58 bayta kadar getirerek uğraşabilirsiniz.
zgrep

Uyumsuzluğa geçerek düzeltdim awk bir ekstra bayta ve alarak düzeltdim. :)
zgrep


9

İşlem 3, 37 bayt

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

fullScreen()Uygulamanın en yüksek boyutta başlatmasına neden olur - ekran çözünürlüğü. Bir bayt açıktan daha az

print(displayWidth+"x"+displayHeight);

8

AutoHotKey, 34 bayt

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

Bunu .AHK uzantılı bir dosyaya kaydedin ve komut isteminden çalıştırın


1
Neden kullanmak Sendyerine kullanmıyorsun MsgBox?
Mühendis Toast

@EngineerToast teşekkürler! Bu iki bayt kurtardı
jmriego

7

C (Windows), 79 78 77 bayt

Bir bayt tasarrufu için @Johan du Toit için teşekkürler!

#import<windows.h>
#define G GetSystemMetrics
f(){printf("%dx%d",G(0),G(1));}

2
Cevabınızı görene kadar hala 'GetDeviceCaps' ile uğraşıyordum :-) Aşağıdakileri kullanarak hala 1 byte tasarruf edebilirsiniz:#define G GetSystemMetrics f(){printf("%dx%d",G(0),G(1));}
Johan du Toit

7

PowerShell, 67 60 55 Bayt

-7 Martin Ender'e teşekkürler

-5 (aslında 12!) Leaky Rahibe'den Regex büyücüsü benden öte.

Bu uzun ama korkunç System.Windows.Forms.SystemInformation.PrimaryMonitorSizeçözümden daha uzun değil

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

ilk önce Get-WmiObject( gwmi) biçimindeki bir dize olan Win32_VideoControllerbir üyeyi içeren nesneyi almak için , sonra doğru formatı elde etmek için bir regex değiştirme çalıştırıyorum.VideoModeDescription1920 x 1080 x 4294967296 colors

PS H:\> (gwmi win32_videocontroller|% v*n)-replace" |x \d+\D+$"
1920x1080

Bence (gwmi win32_videocontroller|% v*n)-replace" |x[^x]+$"regex tweaking birkaç byte tıraş.
TessellatingHeckler

6

Mathematica, 51 bayt

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

Hangi cihazları bağladığınıza bağlı olarak bu sizin için çalışmayabilir (bilmiyorum). Bu her zaman çalışmalıdır (bağlı en az bir ekranınız varsayarak):

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

açıklama

SystemInformation[] formun bir ifadesini döndürür

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

"Devices"Doğrudan SystemInformation["Devices"]veya olarak erişilebilen, ilgileniyoruz SystemInformation[][[1,5,2]]. Sonuç, formun bir listesi olacaktır

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

Biz istiyoruz "ScreenInformation"kadar ya erişilebilir olan SystemInformation["Devices","ScreenInformation"]veya daha özlü olarak SystemInformation[][[1,5,2,1,2]]. Sonuç formda olacak

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

Listenin uzunluğu bağladığınız ekran sayısı olacaktır. İlk ekran SystemInformation[][[1,5,2,1,2,1]]ve genişlik ve yükseklik şu şekilde çıkarılabilir. SystemInformation[][[1,5,2,1,2,1,2,2,;;,2]]Sonra sadece Infix xçıktı formatı için bir tane ekleriz.


6

Java 7, 123 114 bayt

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

Bu yöntem awt kütüphanelerini kullandığından başsız bir Java kurulumunda çalışmaz (TIO'da olduğu gibi). Kaputun altında, arayarakgetScreenSize yapmak, ekran genişliği ve ekran yüksekliği için çağrı yapmak için Java Native Interface'i kullanır (tipik olarak bir C kütüphanesine).

-9 bayt, Olivier Grégoire sayesinde bana ipi basmak yerine iade edebileceğimi hatırlattı.


2
Ben sadece göndermek üzereydim ...
Leaky Nun

@LeakyNun İkimiz de. +1 Poke .
Kevin Cruijssen

Çıktının kısıtlanması çok kötü ...x..., çünkü void f(){System.out.print((java.awt.Toolkit.getDefaultToolkit().getScreenSize()+"").replaceAll("[^\\d,]",""));}hangi çıktılar 1920,1200daha kısa ..
Kevin Cruijssen

1
@KevinCruijssen evet ben de onunla oynamayı denedim. Asıl "çok kötü", java'da regex kullanmanın bayt sayısı açısından çok ağır olmasıdır.
Poke

1
@Poke Gerçekten haklısın. Bazı regex yerine kullanarak göstermek xyerine yukarıda gösterdiğim şeyi kullanabildim ,, ancak şu anki yanıtınızdan beş byte daha fazla: void f(){System.out.print((java.awt.Toolkit.getDefaultToolkit().getScreenSize()+"").replaceAll("[^\\d,]","").replace(",","x"));}ya da void f(){System.out.print((java.awt.Toolkit.getDefaultToolkit().getScreenSize()+"").replaceAll(".*?(\\d+).*?(\\d+).*","$1x$2"));}Ah, Java'da ağır olmayan ne var ..; p
Kevin Cruijssen

6

C #, 101 95 89 bayt

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

-6 bayt @TheLethalCoder sayesinde bana OP'nin baskıdan bahsetmediğini hatırlattı, bu yüzden bir string döndürmek de iyi. Ve bir -6 bayt lambda değiştirerek.


Bir Func<string>: için derleyerek 11 bayt kaydedebilirsiniz ()=>{var s=System.Windows.Forms.Screen.PrimaryScreen.Bounds;return s.Width+"x"+s.Height;};. Bununla birlikte, bir geri dönüşünüz var voidancak geri döndürüyorsunuz, stringbu nedenle 2 bayt eklemeniz gerekir.
TheLethalCoder

1
Buradaki zorluk aynı zamanda girdi alamayacağınızı da belirtmiyor, bu yüzden başka bir bayttan tasarruf etmek için kullanılmayan bir giriş ekleyebiliyorsunuz_=>{var s=System.Windows.Forms.Screen.PrimaryScreen.Bounds;return s.Width+"x"+s.Height;};
TheLethalCoder

1
Sonuç yazdığınız geri dönüş yorumunu yoksay, geri göndererek 6 bayt tasarruf edebilirsiniz.
TheLethalCoder

Ve onu kısaltmanın bir yolunu düşünemezseniz var s=System.Windows.Forms.Screen.AllScreens[0].Bounds;, aynı sayım da olacaktır, ancak bunu aklınızdan çıkarmadan golf oynayabilirsiniz.
TheLethalCoder

6

Bash + xrandr, 44 karakter

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

xrandrX sunucusuna ait, Ubuntu'da x11-xserver-utils tarafından sağlanmaktadır paketi .

Örnek çalışma:

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

Sayesinde:

Örnek çalışma:

bash-4.3$ xrandr|grep -oP '\d+x\d+'|line
1920x1080

Ekranı olan hiçbir bash yok, xrandr|grep *işe yarar mı?
Jonathan Allan,

Emin. Şimdi benim için Ama grepve sedgirişimleri ayrıştırmak için xrandr'ın çıkışı ( pastebin.com/uTVcjWCq ) uzun idi.
Manatwork

Belki xrandr|grep *|cut -d' ' -f1? (Yapıştırmanızdaki @ TIO satırındaki eşleşen satırı kullanarak )
Jonathan Allan

Ah, çözünürlüğü listeden “*” işaretiyle seçmek mi istiyorsun? Bu olasılığı düşündüm, ama bağlı birden fazla ekranla çalışıp çalışmayacağından emin değilim. Hatırladığım kadarıyla, her bağlı ekranın o andaki çözünürlüğünü listeler.
Manatwork

Ah evet, OP'nin böyle bir senaryoda ne istediğinden emin değil!
Jonathan Allan,

5

Python 2,73 bayt

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

print u(0),'x',u(1)daha küçük ve onun örneği ( link ) izin veriyor
Felipe Nardi Batista

1
To clarify, If it's equivalent to the output from What is my screen resolution, It's valid.Bu web sitesinde, her bölüm arasında boşluk var
Felipe Nardi Batista

@FelipeNardiBatista Güncelleme, teşekkürler.
Neil

5

Octave , 41 bayt

Düzeltmeler için @Arjun ve @ StephenS'e teşekkürler .

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

0kök grafik nesnesinin bir tanıtıcısıdır. Özelliği 'ScreenSize', ekranın koordinatlarını piksel cinsinden içerir. Üçüncü ve dördüncü girişler istenen bilgileri verir.


5

APL (Dyalog) , 23 bayt

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

⎕WG'DevCaps'Beyaz Doq G ve Dev buz kap abilitie s

 ilk özelliği seç (yükseklik, genişlik)

 ters

 metin olarak biçimlendir

' '⎕R'x'R ' "x", s eplace alanlarda


"5" (boşluk) konumundaki "x" yerine "bu" küçük bir ekranda sorunlara neden olur, örneğin 640x480 (VM'lerin kullandığı)
Baldrickk

4

Japt , 24 bayt

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

Çevrimiçi test edin!

Sıkıştırılmış dize temsil eder with(screen)width+"x"+height. Oxbunu JavaScript olarak değerlendirir ve sonuç örtük olarak basılır.


4

C (SDL2 kütüphanesi) 113 88 84

(@AppleShell'in yardımından dolayı -4 karakter)

Evet. derler.

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

Çalıştır: gcc snippet.c -lSDL2 && ./a.out


3
Sanırım bunu mküreselleştirerek ve ihmal ederek kısaltabilirsiniz int:m[3];main(){...
Appleshell

erişerek sağdan m+1kısa m[1]mı olmalı ? veya bu C'de değil, sadece C ++ 'da mı mümkün? elbette printf'in bazı haklı göstergeleri var
Gizmo

@gizmo ne yazık ki AFAIK böyle bir şey yapan bir printf özelliği yoktur ..
dieter

4

Python 2, 61 49 bayt

Teşekkürler @ Jonathan-allan, @ felipe-nardi-batista

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

Tekli ekran kurulumları için bu, sitedeki çıktıyla eşleşir. Bu, birden fazla ekran için tam çözünürlük verir.


print'x'....bir bayt kaydeder
Felipe Nardi Batista

v=Tk().maxsize(), print'%sx%s'%v9 bayt kaydeder.
Jonathan Allan,

oops, sonra bir tane daha print'%sx%s'%Tk().maxsize()kaydetti 4> _ <
Jonathan Allan

3

bash + xdpyinfo 42 31 bayt

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

Man sayfasından:

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

@Floris @manatwork Birkaç byte kaydettiğiniz için teşekkür ederiz!


Geçti 4 hala 4 :(
Christopher

Borular etrafındaki boşluklara gerek yoktur; Bence sadece “dim” aramak güvenlidir; -d\ yerine yazabilirsiniz -d' '. Her iki gelince Sonra grepbir hat ve için cuto çizginin bir parçası, genellikle tek olan kısadır awkçağrı: xdpyinfo|awk '/dim/&&$0=$2'.
Manatwork

Şundan daha kısa bir şey bulabileceğinden şüpheliyim dimensionsama xdpyinfosistemimde yok ...
Floris

3

xrandr + awk, 25 bayt

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

enter image description here


1
Bu işe yaramıyor. grep *yıldız işaretini dizindeki tüm dosyalara genişletir.
Jens

@Jens Düzeltildi. Gösterdiğiniz için teşekkürler
Pandya

Teşekkürler; Başka ipucu: için Doğru yazım grep|cutDİR awk.
Jens

Hala çalışmıyor. Çıktıları *0. Benim xrandr çıktım *0 3360 x 1050 ( 889mm x 278mm ) *0.
Jens

@Jens sonra Btw'ye ihtiyacınız var -f2, kontrol edebilir misiniz xrandr|awk '/\*/{print $2}'?
Pandya

3

ZX Spectrum Basic, 10 bayt

sadece bütünlüğü için:

PRINT "256x192"

çıktılar 256x192. Spectrum'un sabit bir kablolu ekran çözünürlüğü var.


... ve PRINT gibi anahtar kelimeler için tek bir bayt kullanır.
Jens

2

İşlem, 51 bayt

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

Bu, bu formatta verir: width height. Ayrıca, program kullandığınız ekranın boyutunda bir pencere oluşturur (çünkü her İşleme programı varsayılan olarak bir pencere oluşturur) ve bu program sadece bu pencerenin / çizimin yüksekliğini ve genişliğini verir.


Ah, format WIDTHxHEIGHT.
Matthew Roh

@SIGSEGV Sadece farkettim
Kritixi Lithos

2

xdpyinfo+ awk, 28 bayt

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

Çift başlı Cygwin'de test edilmiştir.


1
xdpyinfo|awk /dim/{print\$2}24 değil 28 bayt alır
Pandya

@Pandya Yeni gözlüklere ihtiyacım var :-)
Jens

1

Tcl / Tk, 40

puts [winfo screenw .]x[winfo screenh .]

1

Lithp , 116 bayt

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

(Okunabilirlik için satır sonları eklendi)

Çevrimiçi deneyin!

Sonunda, html-toolkit modülüm biraz kullanım alıyor! Yalnızca Çevrimiçi Deneyin bağlantısında çalışır, komut satırından çalışmayacaktır.

1024 x 768Geçerli çıktı olabilirse birkaç bayt kaydedilebilir . Sadece örtülü boşluklardan (+ .. "x" .. )kaçınmak için kullanıyoruz print.


Hmm. Çevrimiçi denedim, ancak 2048x1080gerçek bir 4K ekran için aslında 4096x2160. Neden bir fikrin var mı? FreeBSD 11'deki Firefox 52.0
Jens

Fikrim yok. Ben sadece atlayacağım window.screenve alma widthve heightondan özelliklerini. Firefox konsolunu window.screenaçtıysanız ve yazdığınızda , görünüşte yanlış olduğunu göreceksiniz 2048x1080.
Andrakis

1

Lua (löve çerçevesi), 116 bayt

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

Program ilk önce tam ekrana geçer, sonra genişlik ve yüksekliği alır ve sonra yazdırır :)


1

xrandr ve sh, 23 bayt

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

İki monitörlü bir Cygwin makinesine yönlendirilmiş ekranı olan bir CentOS 5 kutusunda test edildi. İşte tam xrandrçıktı

$ 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

1

Ruby + xrandr, 37 bayt

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

Alternatif çözüm (52 ​​bayt):

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

1

Kırmızı , 26 Bayt

system/view/screens/1/size

Örneğin çıktılar:

1920x1080

Kod oldukça açıklayıcı. 1Birinci ekranına karşılık gelir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.