소수점 이하 두 자릿수 형식으로 출력 터미널 치수 (열 및 행) *. 예를 들어, 출력은입니다 80x25.
영감 . 프롬프트 .
* 출력은 하나 또는 두 개의 연속 라인에서 두 측정 값을 가져야하며, 하나 이상의 선행 및 / 또는 후행 출력 라인이있을 수 있습니다 (선택적으로 개행). (최대 4 줄)은 max (cols, 1 + len (str (cols)) + len (str (rows))보다 길지 않아야합니다.
소수점 이하 두 자릿수 형식으로 출력 터미널 치수 (열 및 행) *. 예를 들어, 출력은입니다 80x25.
영감 . 프롬프트 .
* 출력은 하나 또는 두 개의 연속 라인에서 두 측정 값을 가져야하며, 하나 이상의 선행 및 / 또는 후행 출력 라인이있을 수 있습니다 (선택적으로 개행). (최대 4 줄)은 max (cols, 1 + len (str (cols)) + len (str (rows))보다 길지 않아야합니다.
답변:
stty size
산출:
97 364
sh명칭은 실제로 의미가 없습니다.
가시적 인 출력이 없기 때문에 실제로 경쟁하지는 않습니다. 이것은 인쇄에 필요한 상용구 코드없이 현재 화면 크기를 찾는 가장 짧은 방법을 보여줍니다.
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
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? 가 필요할 것이라고 확신합니다 . 또한, 당신이 clobber 할 수 있는지 확실하지 않습니다 ds. 함수가 두 번 이상 작동하므로 원하지 않는 부작용이 있기 때문에 메타로 가져와야 할 수도 있습니다.
RET함수의 끝에서 명령 을 깰 까요?
INT 20h가 아닌을 통해 RET종료됩니다 RET.
echo $COLUMNS $LINES
덕분에 :
샘플 실행 :
bash-4.3$ echo $COLUMNS $LINES
80 24
echo $COLUMNS\x$LINES있으면 o / p 가능80x24
특정 형식이 필요하지 않으므로 다음의 resize(6 문자) 명령을 간단히 사용할 수 있습니다 xterm.
$ resize
COLUMNS=120;
LINES=31;
export COLUMNS LINES;
#xterm, 6 bytes.
os?
import os및 os.보다 짧은 from....
short m[4];main(){ioctl(0,21523,m);printf("%dx%d",*m,m[1]);}
m[0]에 의해 *m.
mmain의 인수를 사용하여 1 바이트를 절약 할 수 있습니다 .main(short m){ioctl(0,21523,&m);printf("%dx%d",m,(&m)[1]);}
main(int m){ioctl(0,21523,&m);printf("%x",m);}크기는 기본 16으로 인쇄되고 열과 행 사이에 구분 기호 (가능한 선행 0 제외)가없는 46 바이트입니다.
using c=System.Console;_=>c.WindowWidth+"x"+c.WindowHeight;
Func<int, string그러나로 컴파일 하면 입력이 사용되지 않습니다.
> s=process.stdout;console.log(s.columns,s.rows)
80 25
process.stdouts columns와 rows값을 사용 합니다.
console.log([s.columns,s.rows]).
with(process.stdout)console.log(columns,rows)
with(process.stdout)write(columns+[rows]). 또는 계산에 포함되지 않는 경우 :with(process.stdout)write(columns+' '+rows)
명령 행 플래그로 실행 -rio/console
p IO.console.winsize
이것이 나의 첫번째 루비 골프이다. 그래서 내가 더 잘 할 수있는 것이 있는지 말해주세요.
SztupY 덕분에 5 바이트 절약
manatwork 덕분에 2 바이트 절약
이렇게하면 높이와 너비가 길이 2 목록으로 출력됩니다.
출력 예 :
[25, 80]
io/console하지 않으며 따옴표가 없으면 쉘이 원치 않는 확장을 수행하지 않습니다.
현재 형식으로는 출력이 허용되지 않을 수 있습니다.
이 mode명령은 기본 Windows 유틸리티입니다
mode지정하지 않고 사용에 관한 메타 포스트con
(mode)[3,4]
모드의 출력을 얻습니다.
<Whitespace>
Status for device CON:
----------------------
Lines: 3000
Columns: 120
Keyboard rate: 31
Keyboard delay: 1
Code page: 850
그런 다음 네 번째 및 다섯 번째 줄 ( [3,4])이 출력됩니다.
PS H:\> (mode)[3,4]
Lines: 3000
Columns: 120
(mode)[3,4]-replace"\D"
(mode con)[3..4]
con필요합니까? 이것은 첫 번째 줄을 절대적으로 얻습니다. 그리고 나는 con항상 첫 번째 줄을 믿 습니까? 나는 standard시스템이 모드에 대해 하나의 출력만을 가질 것이라고 말하고 싶습니다 .
"find"명령으로 직접 파이핑하여 6 바이트를 절약했습니다. Adám / OP
덕분에 1 바이트를 절약했습니다 . OP의 의견
덕분에 1 바이트를 절약 했습니다 .
mode con|find "n"
echo가 켜져 있기 때문에 명령 자체가 출력되지만 OP 에 의해 주석 처리 된 것처럼 선행 행이 정상입니다.
설정에 따라 13 바이트로만 작동 할 수 있습니다. 그러나 COM 포트를 사용하는 것이 있으면 자세한 출력이 발생하는 것으로 보입니다.
mode|find "n"
s:→ n.
modecon을 추가하는 것이 두 개의 다른 문자 집합을 찾는 것보다 짧다는 것을 알았습니다 findstr.
()=>System.Console.Write(System.Console.WindowWidth+"x"+System.Console.WindowHeight);
전체 응용 프로그램 코드를 원한다면 115 101 94 바이트가 있습니다 .
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);
또는 전체 응용 프로그램 코드로 (분명히 115 101 94 바이트 ) :
using C=System.Console;class P{static void Main()=>C.Write(C.BufferWidth+"x"+C.BufferHeight);}
Caius Jard의 도움으로 전체 애플리케이션 코드에서 14 바이트 절약
using c=System.Console;class P{static void Main(){c.WriteLine(c.WindowWidth);c.Write(c.WindowHeight);}}
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]);}}
언 골프 드 :
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.
cmd/c의 결과 CreateProcess error=2. :(
Anders Tornblad의 의견에 따라 수정되었습니다.
con:size? .s
스택 내용을 인쇄하는 콘솔의 현재 크기를 행과 열로 반환합니다.
산출:
2 n: 000000000285e5e0 1 300
1 n: 000000000285e4c0 1 90
swap합니까?
interface B{static void main(String[] a)throws Exception{new ProcessBuilder("stty","size").inheritIO().start();}}
언 골프 드 :
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 디자이너가 편의를 위해 과부하를 추가하지 않으려는 명백한 결과로 길고 복잡한 호출을 통해 생성하는 것보다 훨씬 짧습니다 .
ProcessBuilderWindows에서 작동하기를 원하지만 mode명령은 4 줄 이상을 출력합니다 :(
?"40x25
C64에는 40 x 25 자의 고정 크기 텍스트 콘솔이 있습니다. 콘솔 크기를 쿼리 할 필요는 없습니다. 콘솔을 쿼리 할 방법이 없기 때문에 좋습니다.
{print(jline.TerminalFactory.get().run{"$width $height"})}
왜 안돼? 표준 lib는 실제로 콘솔 크기를 결정할 수있는 방법이 없으므로 다른 프로세스를 시작하고 입력 스트림을 파싱하지 않으려면 라이브러리를 가져와야합니다. 누군가 그렇게하면 부끄러운 일입니다.
@dieter에 의해 https://codegolf.stackexchange.com/a/118696/42186에서 영감을
main(m){ioctl(0,21523,&m);write(1,&m,4);}
크기를 이진 데이터로 출력합니다. 이것이 "모든 형식"으로 계산되는지 확실하지 않습니다. 사람이 읽을 수있게하려면 추가 (약간, hexdump, od, ascii 테이블) (또는 자동으로이를 수행하는 난해한 터미널 에뮬레이터)가 필요합니다. 사용법 예 :
$ ./a.out | od -sAn
58 204
터미널 크기는 204 열 x 58 열입니다.
od대신에 @ Random832을 사용해 주셔서 감사합니다 hexdump.