บอกขนาดคอนโซลของฉันหน่อยสิ!


41

ขนาดเทอร์มินัลการส่งออก (คอลัมน์และแถว) ในรูปแบบเลขฐานสิบสองใด ๆ * 80x25ยกตัวอย่างเช่นการส่งออกอาจจะ


แรงบันดาลใจ รวดเร็ว
* เอาต์พุตต้องมีทั้งสองมาตรการในหนึ่งหรือสองบรรทัดติดต่อกันและอาจมีมากกว่าหนึ่งบรรทัดนำหน้าและ / หรือต่อท้ายบรรทัดของเอาต์พุต (ทางเลือกตามด้วยบรรทัดใหม่) บรรทัด (สูงสุดสี่) ต้องไม่เกิน max (cols, 1 + len (str (cols))) + len (str (ro‌ ws))


2
ฉันไม่เคยเห็นความท้าทาย upvoted ที่สั้นกว่านี้ ยินดีด้วย!
นาย Xcoder

13
@ Mr.Xcoder ฉันมีความเชี่ยวชาญในสายการบินหนึ่งเดียว ...
2017

คุณกำลังจะได้รับปริญญาในการโพสต์แบบแถวเดียว! คุณเป็นคนดีจริง ๆ ไม่เก่งมากในเรื่องนี้))) ...
นาย Xcoder

'รูปแบบที่สอดคล้อง' หมายความว่าอย่างไร
Felipe Nardi Batista

1
@FelipeNardiBatista ฉันจะบอกว่าใช่ตอนนี้ แต่เปลี่ยนกลับถ้าสิ่งนี้นำไปสู่ความไร้สาระ
2560

คำตอบ:


27

* sh, 9

stty size

เอาท์พุท:

97 364

ยังทำงานในทุบตี
numbermaniac

2
หรือเปลือกอื่น ๆ ในระบบเหมือน posix
mvds

1
ด้วยชื่อของบางภาษาที่เห็นบนเว็บไซต์นี้ใช้เวลานานกว่าที่จะเข้าใจว่า * sh ที่นี่หมายถึง "bash, zsh, csh, dash, ฯลฯ " มากกว่าภาษาที่มีชื่อประกอบด้วยเครื่องหมายดอกจันตามด้วยตัวอักษร s และ h :-)
ShreevatsaR

ในทางเทคนิคคุณไม่จำเป็นต้องมีเชลล์เพื่อใช้งานโปรแกรม ดังนั้นการshกำหนดจึงไม่สมเหตุสมผลจริงๆ
mvds

20

รหัสเครื่อง 8086, 11 ไบต์ (เป็นฟังก์ชั่นที่ไม่แข่งขัน)

ไม่ได้แข่งขันกันจริงๆเพราะมันไม่มีผลลัพธ์ที่มองเห็นได้ นี่เป็นเพียงการแสดงวิธีที่สั้นที่สุดในการค้นหาขนาดของหน้าจอปัจจุบันโดยไม่ต้องใช้รหัส boilerplate สำหรับการพิมพ์

00000000  6a 40 1f a0 84 00 40 8a  26 4a 00                 |j@....@.&J.|
0000000b

มันทำงานอย่างไร:

6a 40           |   push 0x40       ; bios data segment
1f              |   pop ds
a0 84 00        |   mov al, [0x84]  ; console rows - 1
40              |   inc ax
8a 26 4a 00     |   mov ah, [0x4a]  ; console columns

รหัสเครื่อง 8086, 48 ไบต์ (เป็นโปรแกรมที่สมบูรณ์)

00000000  1f bf 30 01 a0 84 04 40  e8 1a 00 b0 78 aa a0 4a  |..0....@....x..J|
00000010  04 e8 11 00 8d 8d d0 fe  8d 75 ff 06 1f fd ac cd  |.........u......|
00000020  29 e2 fb cd 20 d4 0a 0c  30 aa c1 e8 08 75 f6 c3  |)... ...0....u..|
00000030

มันทำงานอย่างไร:

                |   org 0x100
                |   use16
1f              |       pop ds              ; clear ds (the stack always contains 0 on entry)
bf 30 01        |       mov di, d           ; set destination ptr
a0 84 04        |       mov al, [0x484]     ; console rows - 1
40              |       inc ax
e8 1a 00        |       call to_ascii       ; convert to ascii
b0 78           |       mov al, 'x'
aa              |       stosb
a0 4a 04        |       mov al, [0x44a]     ; console columns
e8 11 00        |       call to_ascii
8d 8d d0 fe     |       lea cx, [di-d]      ; number of characters to print
8d 75 ff        |       lea si, [di-1]      ; set source ptr
06              |       push es
1f              |       pop ds
fd              |       std                 ; reverse direction flag
ac              |   @@: lodsb               ; load (al = *si--)
cd 29           |       int 0x29            ; print al to console, bypassing stdout
e2 fb           |       loop @b             ; repeat while (--cx != 0)
cd 20           |       int 0x20            ; terminate
                |   
                |   to_ascii:
d4 0a           |       aam 10              ; ah = (al / 10), al = (al % 10)
0c 30           |       or al, 0x30         ; convert al to ascii number
aa              |       stosb               ; store (*di++ = al)
c1 e8 08        |       shr ax, 8           ; shift ah to al
75 f6           |       jnz to_ascii        ; repeat if non-zero
c3              |       ret
                |   
                |   d rb 0

ฉันค่อนข้างมั่นใจว่าการส่งฟังก์ชั่นจะต้องมีret? dsนอกจากนี้ผมไม่แน่ใจว่าคุณได้รับอนุญาตให้ข่มขี่ สิ่งนี้อาจต้องใช้กับ Meta เนื่องจากฟังก์ชั่นนี้ทำงานมากกว่าหนึ่งครั้งมันแค่มีผลข้างเคียงที่ไม่ต้องการ

เหตุใด "สแต็กจึงมี 0 เมื่อเข้า" เสมอ ฉันไม่รู้กฎใด ๆ เลยว่าสแต็กจะได้รับค่าศูนย์ ฉันเดาว่าคุณกำลังพูดถึงการ popping ค่าตอบแทนและคิดว่าจะเป็น 0? สิ่งนี้รับประกันว่าจะเป็น COM ไบนารีหรือไม่
โคดี้เกรย์

@CodyGray: ในโปรแกรม COM สแต็กจะมีตัวชี้ใกล้ถึงจุดเริ่มต้นของ PSP (offset 0) ดังนั้น RET จะข้ามกลับไปเป็น PSP: 0 ซึ่งมีการเรียกไปยัง EXIT stackoverflow.com/a/12593311/371250
ninjalj

อ่าขอบคุณสำหรับความกระจ่าง, @ninjalj (คำตอบที่ยอดเยี่ยมที่คุณเชื่อมโยง BTW ฉันจะลืมรายละเอียดทั้งหมดเกี่ยวกับ PSP แม้ว่าจะมีวิศวกรรมย้อนกลับที่มีการใช้งานมาหลายปีแล้ว) แต่ถ้าคุณโผล่พอยเตอร์ตัวนั้นออกจากกองโดยไม่ผลักกลับ คุณเลิกRETคำสั่งเมื่อสิ้นสุดฟังก์ชันหรือไม่
โคดี้เกรย์

@CodyGray: คุณจะทราบว่าโปรแกรมออกจากผ่านINT 20hไม่ใช่ผ่านRETเพราะแน่นอนว่าหลังจากการออกจาก POPing ผ่านRETไม่ทำงานอีกต่อไป
ninjalj

18

Bash, 22 20 ตัวอักษร

echo $COLUMNS $LINES

ขอบคุณที่:

วิ่งตัวอย่าง:

bash-4.3$ echo $COLUMNS $LINES
80 24

ด้วยอีก 1 ไบต์echo $COLUMNS\x$LINESสามารถ o / p80x24
Pandya

@Pandya True แต่ไม่จำเป็น
อดัม

7
ไม่แน่ใจว่าสิ่งนี้สอดคล้องกับข้อกำหนดรูปแบบเอาต์พุตใหม่หรือไม่ แต่คุณสามารถมี $ COLUMNS \ x $ LINES เพื่อส่งออก "bash: 90x50: ไม่พบคำสั่ง" สมมติว่ามันใช้ไม่ได้กับการแปลภาษาท้องถิ่นหรือถ้าคำสั่งนั้นมีอยู่จริง!
Muzer

14

xterm, 6 ไบต์

เนื่องจากคุณไม่ต้องการรูปแบบเฉพาะคุณสามารถใช้resizeคำสั่ง (6 ตัวอักษร) ของxterm:

$ resize
COLUMNS=120;
LINES=31;
export COLUMNS LINES;

1
ดี #xterm, 6 bytesแต่คุณอาจต้องการที่จะเขียนหัวมาตรฐานเช่น
Adám

@ Adámเอาต์พุตประเภทนี้เป็นที่ยอมรับตามคำถามหรือไม่
Pandya

1
ใช่; codegolf.stackexchange.com/questions/118636/...
2560

@ Adám ok เพิ่งเพิ่มส่วนหัว :)
Pandya

นี่ไม่ใช่ xterm-specific โปรดทราบว่าผลลัพธ์ขึ้นอยู่กับเชลล์ของคุณ
celtschk

13

sh, 20 ไบต์

tput lines;tput cols

.. ชัดเจนเกินไปอาจจะ ..


3
tput cols; !: 0 cols บันทึกหนึ่งไบต์ใน bash
marcosm

@marcos คุณหมายถึงtput lines;!:0 colsใช่มั้ย
Dieter

12

Python 3 , 30 ไบต์

import os
os.get_terminal_size

เนื่องจากมันไม่ทำงานใน TIO จึงมีการใช้ทางเลือกอื่น:

ลองออนไลน์!


1
ทำไมไม่เป็นเช่นนั้นos?
Jonathan Allan

2
... มันจะไม่ทำงานบน TIO เนื่องจากระบบปฏิบัติการดังนั้นจำเป็นต้องระบุ มันไม่ทำงานบน Windows นอกจากนี้import osและจะสั้นกว่าos. from...
Jonathan Allan

ฉันสามารถยืนยันได้ว่าทำงานบน Window 10 ได้โดยไม่ต้องแก้ไขใด ๆ
Ferrybig

ทำงานบน mac ได้เช่นกัน
Mr. Xcoder

1
เทคนิค Python 3.3+
matsjoyce

11

C (ลินุกซ์เท่านั้น), 63 61

short m[4];main(){ioctl(0,21523,m);printf("%dx%d",*m,m[1]);}

4
คุณสามารถชนะไบต์ที่สองโดยการแทนที่โดยm[0] *m
YSC

คุณสามารถบันทึกหนึ่งไบต์ด้วยการmโต้แย้งหลัก:main(short m){ioctl(0,21523,&m);printf("%dx%d",m,(&m)[1]);}
mvds

main(int m){ioctl(0,21523,&m);printf("%x",m);}จะเป็น 46 ไบต์โดยมีขนาดที่พิมพ์ในฐาน 16 และไม่มีตัวคั่น (นอกเหนือจากศูนย์นำหน้าที่เป็นไปได้) ระหว่าง cols และแถว
mvds


8

C #, 59 ไบต์

using c=System.Console;_=>c.WindowWidth+"x"+c.WindowHeight;

คอมไพล์กับ a Func<int, stringอย่างไรก็ตามอินพุตไม่ได้ถูกใช้


ไม่สำเร็จ; ฉันพบว่าสิ่งนี้คืนขนาดของคอนโซลที่จะเรียกหาก AllocConsole () ถูกเรียกไม่ใช่ขนาดที่อินพุตและเอาต์พุตมาตรฐานของคอนโซลเชื่อมต่อจริง คำถามที่นี่: stackoverflow.com/questions/35688348/… สิ่งที่ฉันหยุดยั้งเมื่อถามคำถามคือฉันกำลังใช้งาน Windows ในสภาพแวดล้อมจริงโดย stdin & stdout เชื่อมต่อกับ ssh ไปป์ไลน์ การใช้งาน win32 ssh ไม่ได้ให้สิ่งที่จำเป็น
Joshua

7

NodeJS, 50 48 46 ไบต์

> s=process.stdout;console.log(s.columns,s.rows)
80 25

ใช้process.stdouts columnsและrowsค่า


@ETHproductions ขอบคุณเพิ่ม console.log เพื่อส่งออกไปยังคอนโซล :)
พีททีเอ็นที

ไม่มีปัญหา :-) เอาท์พุทสามารถอยู่ในรูปแบบที่สอดคล้องใด ๆ console.log([s.columns,s.rows])ดังนั้นผมคิดว่าคุณสามารถบันทึกไบต์คู่โดยการทำ
ETHproductions

5
1 ไบต์ออก:with(process.stdout)console.log(columns,rows)
Brian McCutchon

1
และอีกไม่กี่ไบต์ออก with(process.stdout)write(columns+[rows])(ถ้านับนี้): หรือหากไม่นับ:with(process.stdout)write(columns+' '+rows)
markasoftware

1
@ Markasoftware Ooh นั่นเป็นคนฉลาด ฉันไม่คิดว่าคนแรกควรนับแม้ว่า
Brian McCutchon

6

Ruby, 41 36 21 + 13 = 34 ไบต์

รันด้วยแฟล็กบรรทัดคำสั่ง -rio/console

p IO.console.winsize

นี่เป็นครั้งแรกของฉันทับทิมกอล์ฟดังนั้นบอกฉันว่ามีอะไรที่ฉันสามารถทำได้ดีกว่า

บันทึก 5 ไบต์ด้วย SztupY

บันทึกได้ 2 ไบต์ด้วยการจัดการข้อมูล


สิ่งนี้จะส่งออกความสูงและความกว้างเป็นความยาวสองรายการ

ตัวอย่างผลลัพธ์:

[25, 80]

คุณสามารถย้ายต้องการลงในพารามิเตอร์บรรทัดคำสั่ง -r ซึ่งเป็นเพียง 2 ไบต์พิเศษ
SztupY

ไม่จำเป็นต้องใช้เครื่องหมายอัญประกาศเดี่ยวรอบ ๆio/console, เชลล์จะไม่ทำการขยายที่ไม่พึงประสงค์หากไม่มีการอ้างอิง
จัดการ


4

C # 94 ไบต์ (ทั้งแอป)

คำตอบแอปทั้งหมดของ MetaColon นั้นสั้นมาก:

using c=System.Console;class P{static void Main(){c.Write(c.WindowWidth+' '+c.WindowHeight);}}

4

PowerShell + Mode, 11 Bytes?

ผลลัพธ์อาจไม่เป็นที่ยอมรับในรูปแบบปัจจุบัน

modeคำสั่งเป็นสาธารณูปโภคที่หน้าต่างเริ่มต้น

Meta Postเกี่ยวกับการใช้งานmodeโดยไม่ระบุcon

(mode)[3,4]

รับเอาท์พุทของโหมด:

<Whitespace>
Status for device CON:
----------------------
    Lines:          3000
    Columns:        120
    Keyboard rate:  31
    Keyboard delay: 1
    Code page:      850

จากนั้นบรรทัดที่ 4 และ 5 ( [3,4]) กำลังแสดงผล:

PS H:\> (mode)[3,4]
    Lines:          3000
    Columns:        120

บันทึกสองไบต์:(mode)[3,4]-replace"\D"
2560

เพื่อที่จะทำงานที่นี่ฉันจำเป็นต้องใช้(mode con)[3..4]
Felipe Nardi Batista

Ah @FelipeNardiBatista อาจจะใช่ที่คุณต้องการ
2560

1
@FelipeNardiBatista conจำเป็นหรือไม่ นี่จะเป็นบรรทัดแรกอย่างแน่นอนและฉันเชื่อว่าconจะเป็นอันดับแรกเสมอ? ฉันว่าstandardระบบจะมีเพียงหนึ่งเอาต์พุตสำหรับโหมดซึ่งเป็นสิ่งที่เราควรคิด?
colsw

1
@ConnorLSW มันเป็นเพียงว่าระบบของฉันทำงานดี แต่คำตอบของคุณก็ไม่ได้ทำงานที่นี่
เฟลิ Nardi บาติสตา

4

Swift, 99 ไบต์

import Foundation;var w=winsize();ioctl(STDOUT_FILENO,UInt(TIOCGWINSZ),&w);print(w.ws_col,w.ws_row)

ขอขอบคุณที่คนที่ไอของพวกเขาสำหรับแพคเกจคอนโซล


3

ชุด25 19 18 17 ไบต์

บันทึก 6 ไบต์โดยไพพ์โดยตรงไปยังคำสั่ง "find"
ที่บันทึกไว้ 1 ขอบคุณไบต์อดัม / OP
ที่บันทึกไว้ 1 ขอบคุณไบต์เพื่อแสดงความคิดเห็นโดย OP

mode con|find "n"

คำสั่งนี้จะส่งออกคำสั่งเองเนื่องจาก echo เปิดอยู่ แต่เมื่อคอมเม้นต์โดย OPแล้วบรรทัดนำจะเป็น OK


มันอาจใช้งานได้กับ 13 ไบต์เท่านั้น อย่างไรก็ตามดูเหมือนว่าการมีสิ่งใดก็ตามที่ใช้พอร์ต COM จะทำให้เกิดผลลัพธ์ที่ละเอียดเกินไป

mode|find "n"

บันทึกไบต์→s: n
Adám

1
@FelipeNardiBatista ใช่และของฉันบอกว่าฉันมี 9001 บรรทัด เป็นเพียงการตั้งค่า: คุณสมบัติ> โครงร่าง> ขนาดบัฟเฟอร์หน้าจอ
อดัม

@FelipeNardiBatista ขนาดของคอนโซล Windows ไม่เหมือนกับขนาดของหน้าต่าง นั่นเป็นสาเหตุที่แถบเลื่อนปรากฏขึ้นเมื่อคุณทำให้หน้าต่างเล็กลง สำหรับ OPวิธีการแก้ปัญหาที่แน่นอนนี้ก็โอเค
Engineer Toast

@ Adám Dangit ฉันค้นหาสตริงที่สั้นกว่าและไม่รู้ว่าฉันมองข้ามมันอย่างไร มันอาจจะเป็นเพราะผมเริ่มมีเพียงmodeแต่พบว่าการเพิ่ม `con` findstrสั้นกว่ามองหาสองชุดที่แตกต่างกันของตัวละครด้วย
Engineer Toast

@ อดัมบนพื้นฐานของความคิดเห็นของคุณนี้จะเป็นที่ถูกต้อง: @mode|find "L" /i? มันส่งคืน Lines, Columns และ Keyboard Delay ที่มี 17 ไบต์แทนที่จะเป็น 18 ด้านบน บรรทัดที่นำหน้า / ต่อท้ายนั้นต้องว่างเปล่าหรือไม่?
Engineer Toast

3

C #, 85 ไบต์

()=>System.Console.Write(System.Console.WindowWidth+"x"+System.Console.WindowHeight);

หากคุณต้องการรหัสแอปพลิเคชันทั้งหมดเรามี115 101 94 Bytes :

using C=System.Console;class P{static void Main()=>C.Write(C.WindowWidth+"x"+C.WindowHeight);}

อย่างไรก็ตามคุณอาจหมายถึงขนาดบัฟเฟอร์ด้วยเรามี85 ไบต์อีกครั้ง

()=>System.Console.Write(System.Console.BufferWidth+"x"+System.Console.BufferHeight);

หรือเป็นรหัสแอปพลิเคชันทั้งหมด (เห็นได้ชัดว่า101 101 94 ไบต์อีกครั้ง):

using C=System.Console;class P{static void Main()=>C.Write(C.BufferWidth+"x"+C.BufferHeight);}

บันทึก 14 ไบต์ในรหัสแอปพลิเคชันทั้งหมดด้วยความช่วยเหลือของ Caius Jard


1
แอพทั้งหมด 104 ไบต์บางทีคุณอาจขยายตรรกะไปสู่รูปแบบอื่น ๆ ของคุณ:using c=System.Console;class P{static void Main(){c.WriteLine(c.WindowWidth);c.Write(c.WindowHeight);}}
Caius Jard

(ฉันไม่แน่ใจว่าจะเล่นกอล์ฟอย่างไรถ้าฉันมีคำตอบสั้นลงฉันจะแก้ไขแสดงความคิดเห็นของคุณหรือโพสต์ของตัวเองได้ไหม)
Caius Jard

@CaiusJard คุณสามารถโพสต์คำตอบของคุณเองหรือแสดงความคิดเห็นการปรับปรุงและให้ผู้ตอบตัดสินใจว่าพวกเขาต้องการที่จะรวมหรือไม่
TheLethalCoder

ฉันต้องการเพียงแค่ไม่สามารถแก้ไขความคิดเห็นของฉันในเวลา ... โพสต์คำตอบของฉันเอง (ที่รวมไว้) เกือบจะพร้อมกัน แต่ฉันคิดว่าฉันไม่ได้รับแรงบันดาลใจจากคุณ :) ไม่แน่ใจเกินไปว่าฉันรู้สึกว่ามันเป็นการโกงที่จะเขียนฟังก์ชั่นที่ส่งคืนคำตอบแทนที่จะเป็นแอพทั้งหมด - คำตอบอื่น ๆ ทั้งหมดเป็นแอพทั้งหมดค่อนข้างมาก แต่แล้ว CSharppPad.com อีกครั้งจะยอมรับเวอร์ชั่น "ฟังก์ชั่นเดียว" ของคุณ และเรียกใช้มัน .. ควรค้นหากฎเกี่ยวกับการเล่นกอล์ฟฉันเดา
Caius Jard

@CaiusJard อนุญาตให้ใช้งานฟังก์ชัน / วิธีการโดยปริยายเว้นแต่จะไม่ได้รับอนุญาตอย่างชัดเจนในการท้าทาย ดังนั้นฟังก์ชั่นที่ไม่ระบุชื่อเป็นเรื่องปกติโปรดดูคำตอบสำหรับรุ่นที่ใช้งานได้ดี
TheLethalCoder

2

Java 8 (ไม่มีไลบรารี), Windows, 270 ไบต์

โพสต์แยกตามคำแนะนำของอดัม

interface B{static void main(String[] a)throws Exception{Object[]r=new java.io.BufferedReader(new java.io.InputStreamReader(Runtime.getRuntime().exec("cmd /c mode").getInputStream())).lines().toArray();System.out.print(r[3]+"\n"+r[4]);}}

Ungolfed:

interface B {
    static void main(String[] a) throws Exception {
        Object[] r = new java.io.BufferedReader(new java.io.InputStreamReader(
                Runtime.getRuntime().exec("cmd /c mode").getInputStream())
        ).lines().toArray();
        System.out.print(r[3] + "\n" + r[4]);
    }
}

ลองแทนcmd/c mode cmd /c mode
Conor O'Brien

เพียงแค่พยายาม Runtime.exec () ตีความว่าเป็นความพยายามในการดำเนินการที่เกิดขึ้นในcmd/c CreateProcess error=2:(
F. จอร์จ

2

8th , 24 16 12 bytes

แก้ไขหลังจากความคิดเห็น Anders Tornblad

con:size? .s

ส่งคืนขนาดปัจจุบันของคอนโซลในแถวและคอลัมน์ที่พิมพ์เนื้อหาสแต็ก

เอาท์พุท:

2  n: 000000000285e5e0 1   300
1  n: 000000000285e4c0 1   90

2
เนื่องจากคำถามอนุญาตรูปแบบผลลัพธ์ใด ๆ คุณต้องการจริงๆswapหรือไม่
Anders Tornblad

@Anders Tornblad - ขอบคุณสำหรับความคิดเห็นที่ฉลาดของคุณ ฉันปรับปรุงรหัสของฉัน
Chaos Manor

2

Java + * ระวัง, 113

interface B{static void main(String[] a)throws Exception{new ProcessBuilder("stty","size").inheritIO().start();}}

Ungolfed:

interface B{
    static void main(String[] a)throws Exception{
        new ProcessBuilder("stty","size").inheritIO().start();
    }
}

ProcessBuilder.inheritIOทำให้อินพุต / เอาต์พุตกระบวนการเด็กถูกสืบทอด นี้เป็นค่าเริ่มต้นใน C execกับ ใน Java ค่าเริ่มต้นคือ "piped" อย่างที่คุณเห็นนี่เป็นวิธีที่สั้นกว่าการใช้Runtime.getRuntime().exec()(ซึ่งเลิกใช้แล้ว) และสร้างการโทรBufferedReaderผ่านที่ยาวและซับซ้อนซึ่งเป็นผลมาจากความไม่เต็มใจที่ชัดเจนของนักออกแบบ Java API เพื่อเพิ่มโอเวอร์โหลดเพื่อความสะดวก


ฉันต้องการProcessBuilderทำงานบน Windows แต่modeคำสั่งส่งออกมากกว่า 4 บรรทัด :(
F. จอร์จ


1

Commodore 64 BASIC, 7 ไบต์

?"40x25

C64 มีคอนโซลข้อความขนาดคงที่ 40 x 25 ตัวอักษร ไม่จำเป็นต้องค้นหาขนาดคอนโซลซึ่งเป็นสิ่งที่ดีเนื่องจากไม่มีวิธีสอบถาม


ดูเหมือนว่าการโกงแม้ว่าจะยุติธรรมคำถาม (หรือแรงบันดาลใจ) ไม่ได้ห้ามอย่างเฉพาะเจาะจง
โคดี้เกรย์

2
เกี่ยวข้อง: codegolf.meta.stackexchange.com/a/1063/43319
2560

1

Kotlin + Jline 2 , 58 ไบต์

{print(jline.TerminalFactory.get().run{"$width $height"})}

เพราะเหตุใด กลายเป็น lib มาตรฐานจริง ๆ แล้วไม่มีทางกำหนดขนาดของคอนโซลได้ดังนั้นจึงจำเป็นต้องใช้การดึงไลบรารี่ในไลบรารีเพื่อมิให้คุณต้องการเปิดตัวอีกกระบวนการหนึ่งและแยกวิเคราะห์อินพุตสตรีม ... จะเป็นความอัปยศ


อย่าใส่คำตอบสองข้อในโพสต์เดียว
Adám

@ Adámมันมีความคิดมากกว่านี้ดังนั้นฉันคิดว่ามันดี คุณมีตัวแทนมากพอที่จะแก้ไขโดยตรงทำเช่นนั้นถ้าคุณเชื่อว่า 270b ที่มีข้อ จำกัด ทางโบราณคดีควรเป็นคำตอบที่แยกจากกัน
F. จอร์จ

การส่งแต่ละครั้งแข่งขันกับการส่งอื่น ๆ ในภาษาเดียวกัน Java นั้นมีความหมายชัดเจน แต่โดยปกติแล้วคุณจะเป็นภาษาจาวาที่สั้นที่สุด (เท่านั้น) นอกจากนี้ในขณะที่ฉันสามารถแก้ไขโพสต์ของคุณฉันไม่สามารถโพสต์คำตอบแยกต่างหากในชื่อของคุณ
Adám

ฉันกำลังบอกเป็นนัยว่าหากคุณลบคำตอบ Java ของฉันฉันจะโพสต์ใหม่ด้วยตัวเอง และในขณะที่คุณมีจุดที่คำตอบปัจจุบันเป็นคำตอบที่สั้นที่สุดของ Java มันถูกเข้ารหัสภายใต้ข้อ จำกัด ของการใช้ไม่มีห้องสมุดภายนอก เพื่อที่จะจัดการกับข้อโต้แย้งของคุณฉันจะทำเครื่องหมายว่าไม่ใช่การแข่งขันและรหัสคำตอบ Java ที่เหมาะสมในภายหลัง
F. George

โพสต์เป็นJava (ไม่มีไลบรารี่)และทำการส่งอื่นที่เรียกว่าJava ด้วย… . ที่จะให้คุณ upvotes สามจากฉัน
Adám

1

ซ้อนกัน , 7 ไบต์

termdim

ปล่อยเอาต์พุตบนสแต็กตามที่อนุญาตต่อค่าดีฟอลต์ ตัวอย่างการใช้งาน:

λ stacked -pe "termdim"
(117 26)

โบนัส: จะมีมันtermdim'x'#`117x26


1

C (linux, C89 เท่านั้น), 45 41

แรงบันดาลใจจากhttps://codegolf.stackexchange.com/a/118696/42186โดย @dieter

main(m){ioctl(0,21523,&m);write(1,&m,4);}

ขนาดเอาต์พุตเป็นข้อมูลไบนารี ไม่แน่ใจว่านี่จะนับเป็น "รูปแบบใด ๆ " คุณจะต้องการบางสิ่งที่พิเศษ (น้อยกว่า, hexdump, od, ascii table) (หรือเทอร์มินัลอีมูเลเตอร์จำลองที่ทำสิ่งนี้ให้คุณโดยอัตโนมัติ) เพื่อให้มนุษย์อ่านได้ ตัวอย่างการใช้งาน:

$ ./a.out | od -sAn
     58    204

ขนาดเทอร์มินัล 204 cols คูณ 58 แถว

ขอขอบคุณที่ @ Random832 สำหรับใช้แทนodhexdump


1
ฉันคิดว่าฐานสิบหกกำลังผลักดันมัน คำตอบอื่น ๆ ทั้งหมดใช้ทศนิยมดังนั้นฉันจะเพิ่มข้อกำหนดนี้ไปที่ OP ขอโทษ
Adám

1
od -s จะทำในรูปทศนิยมและสั้นกว่า hexdump
Random832

@ Random832 เยี่ยมไม่รู้ว่า +1! แต่คำตอบนี้ไม่ถูกต้องแล้วเมื่อกฎเปลี่ยนจาก "รูปแบบใด ๆ " เป็นรูปแบบที่เฉพาะเจาะจงมาก (เช่น: ฐาน 10 ใน ascii ในตัวจำลองเทอร์มินัลหลัก)
mvds
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.