귀하의 작업은 프로그램의 소스 코드에 나타나지 않는 인쇄 가능한 ASCII 공간 ( 0x20
~ 0x7e
) 의 문자를 순서대로 인쇄하는 프로그램 (인쇄 가능한 ASCII 문자 및 / 또는 탭 및 줄 바꿈 만 사용 )을 작성하는 것입니다. 여러 번 당신이 원하는).
어떤 언어로든 이것을 수행하는 가장 짧은 코드가 이깁니다.
귀하의 작업은 프로그램의 소스 코드에 나타나지 않는 인쇄 가능한 ASCII 공간 ( 0x20
~ 0x7e
) 의 문자를 순서대로 인쇄하는 프로그램 (인쇄 가능한 ASCII 문자 및 / 또는 탭 및 줄 바꿈 만 사용 )을 작성하는 것입니다. 여러 번 당신이 원하는).
어떤 언어로든 이것을 수행하는 가장 짧은 코드가 이깁니다.
답변:
#undef X;A!"$%&'()*+-[,.]/0123456789:<=>?@BCDEFGHIJKLMNOPQRSTUVWYZ\^_`abcghijklmopqrstvwxyz{|}~
tclsh
, bash
, sh
, ksh
, 등)main()
필요 하지 않은 경우. 소변기 덕분에아무것도하지 않습니다.
#undef X;whatever junk you want
작동합니다.
#
Ruby 및 Perl과 같은 주석에 사용 하기 때문에 )
<?<<
에 NYUIOMK()'DEAQRWVX[Z]\^@CBGFJqwv{z}|~`bgfkj203547698;=>!#"%$&+*-.php
어딘가에 파일로 저장하십시오 /home
. short_open_tag
에 있어야 On
합니다 php.ini
.
출력은 다음과 같습니다.
PHP Parse error: syntax error, unexpected T_SL in /home/wherever/NYUIOMK()'DEAQRWVX[Z]\^@CBGFJqwv{z}|~`bgfkj203547698;=>!#"%$&+*-.php on line 1
:
출력에서 a 를 발견 할 수 있습니다 .
alert("BCDFGHIJKMNPQUVXYZ".toLowerCase())// !#$%&'*+,-0123456789:;<=>?@[\]^_`{|}~AERTOWS
"bcdfghijkmnpquvxyz"인쇄
"!#$%&*+,-13:<=>?@[\]^_`{|}~AERTOWS";alert('BCDFGHIJKMNPQUVXYZ'.toLowerCase()+95*72)
왜냐하면 95*72
= 6840
및 낭비 된 문자를 문자열로 이동하면 따옴표를 낭비하지 않고 사용할 수 있습니다. 게다가 댓글에 문자를 숨기는 것은 기분이 좋지 않습니다.
가장 짧지는 않지만 아마도 가장 간단한 논리를 가지고 있습니다 (실제로 루프 일뿐입니다).
여기에 S는 공간이고 T는 탭이고 L은 줄 바꿈입니다.
SSSTSSSSSL # push 0x20
LSSSL # label S
SSSTL # push 1
TSSS # add
SLS # duplicate top of stack
SLS # duplicate again
TLSS # output ASCII character
SSSTTTTTTSL # push 0x7E
TSST # subtract (result - 0x7E)
LTTSL # branch to label S if top of stack is negative
LLL # end
위의 수정 (분기 명령에 여분의 사본이 필요함) 및 더 적은 수의 스택에 대한 @res 덕분입니다.
SSSTSSSSSL LSSSL SSSTL TSSS SLS SLS TLSS SSSTTTTTTSL TSST LTTSL LLL
.
LSSSL
하게 LSSL
하고 LTTSL
이된다 LTTL
)과 끝 (세에서 출구를 제거 LLL
). 온라인으로 원시 52 바이트 또는 강조 표시 및 설명 으로 시도해보십시오 .
main(z) {for(;++z<96;"\33iE!vk?}GkRP8z"[z/7]&1<<z%7&&putchar(z+32));}
실제로 80 자 미만으로 줄이려고했지만 그럴 수 없었습니다. 나는 내가 (또는 다른 사람이) 이것을 게시하고 10 분 후에 79 자 해결책을 알아낼 것이라는 가정하에 내가 가진 것을 게시하기로 결정했습니다. 좋아요, 10 분이 아니었지만 원칙적으로 효과가있었습니다.
소스 코드에 여유 공간이 필요하지 않은 버전을 게시하고 싶었지만 그 중 하나는 이상한 해결책 궤도에 들어서서 소수의 솔루션 사이에서 튀어 나왔습니다. 그중 하나를 안정적인 솔루션으로 쏟아 부 으려고 몇 분 동안 나는 공간을 포기하고 추가했습니다.
"126,32>''+".~\-'.~\-"'-
범위 생성 스크립트를 가져 와서 복제하고 실행 한 다음 결과에서 빼고 결과 빼기 코드와 다른 따옴표 문자를 뺍니다.
''+
빼기 전에 프로그램을 제거 하고 제거하십시오 . noop을 입력하십시오 .;
(점을 덮는 더 좋은 방법을 찾지 못함). 문자열 대신 코드 블록을 사용하십시오-> {126,33>`-.;}.~
16 자입니다
컨테스트에서 이기지 못한다는 것을 알고 있습니다. 난 그냥 차기 위해 일반적으로 사용되지 않는 언어로 시도하고 싶었습니다.
class a{public static void main(String[]a){for(char c=0;;c++)System.out.print("publicas{tvodmn(Srg[])h=0;w+ye.\"\\xO<?:}".indexOf(c)<0?c:"");}}
줄 바꿈 및 탭 사용
class a{
public static void main(String[]a) {
for(char c=0;;c++)
System.out.print("publicas{tvodmn(Srg[])h=0;w+ye.\"\\xO<?:} ".indexOf(c)<0?c:"");
}
}
다음을 실행하면주의하십시오 : 프로그램이 종료되지 않습니다. 하하
설명
for(char c=0;;c++)
: char
는로 취급 될 수 있기 때문에 int
가능한 모든 값을 통해 증가시키기 위해 여기에서 이점을 사용합니다 c
. 프로그램을 종료해야한다고 지정되지 않았기 때문에 문자를 절약하기 위해 루프 (두 세미콜론 사이에있는 것)에서 종료 조건을 생략합니다. :)"publicas{tvodmn(Srg[])h=0;w+ye.\"\\xO<?:} ".indexOf(c)<0?c:""
슬프게도, 매우 우아한 접근 방식은 아니지만 작업이 완료됩니다. 소스 코드에있는 모든 문자를 String
리터럴 로 수동으로 나열한 다음 로 해당 문자에서 현재 char c
발생 하는지 확인하십시오 indexOf()
. 경우 indexOf()
호출이 반환 -1
, 그것은 존재하지 않기 때문에 우리는 그것을 인쇄해야합니다. 나머지는 삼항 연산자를 사용하여 문자와 공간을 절약합니다.(?!..?~).map{|a|$><<a if/[()ifmap{}|?!.~\/\\\[\]$><]/!~a}
간단히 확인하십시오. 중복 문자가 수동으로 제거되었습니다.
4자를 저장 한 Josh와 5자를 저장하는 minitech에게 감사드립니다!
(?!..?~).map{|x|$><<x if/[()ifmap{}|x?!.~\/\\\[\]$><]/!~x}
(?!..?~).map{|a|$><<a if/[()ifmap{}|?!.~\/\\\[\]$><]/!~a}
$><<((32..126).map(&:chr)-IO.read(__FILE__).chars).join
다른 접근 방식을 사용하는 55 바이트.
그리 심각하지는 않지만 나는 가야했습니다.
원본 출처 :
for(x=0x7e;x>0x19;x--){
console.log(String.fromCharCode(x).replace(/[\[\]!\+\(\)]/ig, ''))
}
() + []를 제외한 모든 문자를 인쇄합니다 !
(x)
<=> [x][+[]]
이면 코드 크기는 증가하지만 알파벳은 더 작게 만듭니다.
당신의 임무는 프로그램을 작성하는 것입니다 (인쇄 가능한 ASCII 문자 및 / 또는 탭과 줄 바꿈 만 사용)
아이쿠, 당신은 (? 그 delibarate가)는 APL 하드 만든
그래서하기로 결정 모든 규칙을 무시 !
⎕AV
원자 벡터 (인쇄 가능한 모든 ASCII 문자 포함)를 인쇄합니다
"without"부분에 대해 완전히 잊어 버린 것으로 밝혀졌습니다 ...
그러나 그것은 쉬운 해결책입니다.
⎕AV~'AV'''
~'AV'''
~
문자 A, V 및 작은 따옴표 (이중 작은 따옴표로 이스케이프 됨)를 제외 ( ) 함을 의미 합니다.
비 ASCII 인쇄에 관해서는 모든 규칙을 무시하고 있습니다.
0x20
~ 0x7e
) 의 문자를 정확하게 인쇄 하십시오."출력에 인쇄 가능한 ASCII 공간 이외의 문자가 포함되어 있지 않을 수 있다고 생각합니다 (키워드 인 "정확하게"). 프로그램에 'A'와 'V'가 포함되어 있으므로 인쇄해서는 안됩니다.
~
제외 된 문자 집합에 추가하고 싶을 것 입니다. ;-) Btw, 비슷한 J 솔루션은 다음과 같습니다.a.-.'a.-'''
"),@`^^32>#.~".~
정확성 검사를 수행하고 오류가있는 문자 수를 출력하는 추가 행이있는 온라인 데모 .
(동일한 다양한 대안이 있습니다. ; @`^
로 대체 가능 \\`
; 또는 #
로 대체 가능 `
또는 로 대체 가능 ]
. 백 슬래시는 문자열 리터럴에서와 같은 방식으로 블록에서 이스케이프 처리 할 필요가 없기 때문에 Howard의 트릭으로 올바른 조합을 사용하여 점수 15와 동일하게 사용할 수 있습니다. {),\`^32>].~}.~
그러나 하워드는 그 트릭에 대한 크레딧을받을 자격이 있습니다).
}~
-코드 블록에 대해 더 좋았습니다. 새로운 답변을보십시오. ;-)
+++++[->++++++<]>>>++[------<+>]<++++>>----[----<+>]>-[-------<+>]>-[---<+>]<------->>-[---<+>]<+++++++++>>--[-----<+>]<+++++>>+[---------<++>]+++++++++++++[<[.+<]>[>]<-]\=,
꽤 오랜 시간이 지난 후에 다시 시도 할 수 있습니다.
편집 : Duh, 잊어 버렸습니다 e.
'''(-@.e#[)~95{32}a'(-.@e.#[)~95{.32}.a.
구 버전:
(>@(*/@('(>@*/''&~:).#]32{95}a'&~:)&.>)#])95{.32}.a.
다른 변형 (길이는 같지만 출력은 적음) :
([#~*/"1@('([#~*/"1@''&:0)95{.32}a'&~:"0))95{.32}.a.
x=r"print(*set(map(chr,range(32,127)))-set(x+'=\"'))"
exec(x)
... 개선을위한 @WolframH 덕분에.
exec(x)
새로운 라인과 저장 ;
에를 x
. 또한 Python 3에서는 x=r"print(*set(map(chr,range(32,127)))-set(x+'=\"'))"\nexec(x)
61 문자를 사용할 수 있습니다 (여러 공백을 인쇄하여 허용됨).
저장하고 스크립트로 실행해야합니다.
diff([char[]](gc $MyInvocation.InvocationName))([char[]](32..126))-Pa|?{$_.SideIndicator-eq'=>'}
diff
에 대한 기본 제공 별칭입니다 Compare-Object
.
gc
에 대한 기본 제공 별칭입니다 Get-Content
.
$MyInvocation.InvocationName
실행중인 스크립트의 전체 경로를 가져옵니다.
32..126
는에 해당하는 10 진수 0x20..0x7e
이므로 찾고있는 10 진수 ASCII 코드 배열을 만듭니다.
[char[]]
다음 객체의 내용을 가져 와서 배열에 넣고,이를 분리하여 ASCII 문자로 변환합니다. 따라서 이제 두 개의 ASCII 문자 배열이 있습니다. 하나는이 스크립트에서 가져온 것이고 다른 하나는 챌린지 기준에 의해 정의 된 것입니다.
-Pa
Compare-Object
"Passthru"형식으로 설정 되므로 입력간에 서로 다른 항목 만 콘솔에 출력됩니다. 입력 된 항목의 항목 표시기는 여전히 개체의 데이터에 저장되지만 표시되지는 않습니다.
|?{$_.SideIndicator-eq'=>'}
pipes Compare-Object
's output to으로 Where-Object
, 두 번째 입력 전용 항목으로 필터링합니다.
<? //A"$%&'()*+[,.]0123456789:=-@ABCDEFGHIJKLMNOPQRSTUVWYZ\^_`abcdefghijklmopqrstuvwxyz{|}~#
산출:
아무것도
OP는 사용되지 않은 모든 문자를 인쇄하도록 요청합니다.
<?='A"$%&\'()*+[,.]/0123456789:=-@ABCDEFGHIJKLMNOPQRSTUVWYZ\^_`abcdefghijklmopqrstuvwxyz{|}~#'
?
!;>Xn
자바 스크립트, 92
(function f(){for(i=32;126>i++;)!~(""+f).indexOf(c=String.fromCharCode(i))&&console.log(c)})()
최소화 :
class hjq{public static void main(String...w){for(char z='"'|0;++z!='a';)if("'()+.0;=OS".indexOf(z)==~0)System.out.print(z);}}
최소화되지 않은 :
class hjq {
public static void main(String... w) {
for (char z = '"'|0; ++z != 'a';) {
if ("'()+.0;=OS".indexOf(z) == ~0) {
System.out.print(z);
}
}
}
}
개별 토큰은 문자를 재사용하기 때문에 더 긴 형식의 이점을 얻을 수 있기 때문에 이것은 흥미로운 문제입니다. 예를 들어, 일반적 String[]
으로 더 짧지 만 String...
조건부 문자열에서 대괄호가 필요하지 않습니다.
트릭은 범위의 시작과 끝에서 문자를 사용하고 사용하여 루프 시작과 끝을 변경하여 출력에서 제외 할 수 있다는 것을 알았습니다.
Java의 경우 제외 할 핵심 문자는 "
입니다. 문자열에서 이를 제외 하려면 이스케이프가 필요하므로 \
프로그램에 추가 되고 문자열로 이동해야합니다 \\
. "
조건부 문자열에서 제거 하여 4자를 제거합니다. 이것은 당신이 사용하도록하여 달성 할 수 및
!
및에서 루프를 시작 #
.
모든 소문자 만에, 범위의 끝 근처에 나타납니다 {
, |
, }
그리고 ~
그 이후에 오는. Java의 자세한 설명으로 인해 대부분의 소문자는 상용구에만 사용됩니다. 마찬가지로, {
및 }
상용구이 그들을 필요로하기 때문에, 자바 프로그램에 대한 사소한 있습니다.
|
또는 조건이있는 경우 사용할 수 있지만 |
비트 연산자로 사용하는 것보다 프로그램이 짧은 프로그램을 활용할 수있는 방법을 찾지 못했습니다 . 는 |0
그냥 거기에 문자를 얻을 수있는 NOP의 유일한 부분이기 때문에 내가 조금 더러운 느낌.
~0
yields -1
는 이것이 우리가 확인해야하기 때문에 편리합니다 indexOf
. 이것을 !=
루프 조건부 사용과 결합 하면 <
문자가 완전히 제거 되므로 조건부 문자열 내부로 들어갈 필요가 없습니다.
tr</dev/urandom -cd \[:print:]|tr -d "`cat $0`"
자기 참조 방식을 사용합니다. /dev/urandom
결국 모든 옥텟을 적어도 한 번 출력 한다고 가정합니다 . 종료하지 않습니다.
man
설치 되었다고 가정 하면 ascii(7)
맨 페이지를 사용 하여 종료 프로그램 을 사용할 수 있습니다 ( 44 자, @fennec 덕분에).
man ascii|tr -cd \[:print:]|tr -d "`cat $0`"
man
및 zsh
설치, man zshall
기준에 맞는 것 같다. 변형으로 추가 할 수 있습니다.
tr
것을 사용하고 있습니까? GNU tr
는 -
" cat $0
"를 범위 연산자로 취급 하여 출력을 차단합니다.
ascii
프로그램이 설치되어 있으면 대신 사용할 수 있습니다 man ascii
.
BitShift는 만 지원 언어 0
및 1
구문한다. 나는 다른 모든 문자를 인쇄하는 것이 쉬울 것이라고 생각했지만 실제로 루핑을 지원하지 않기 때문에 여전히 1038 바이트를 거쳤습니다.
그러나 나는 이것보다 더 작게 갈 수는 없다고 생각합니다.
101001100101011011010100110111010100100101011001101111010100100101011001000101011011010100101100110110101001001010110010001010110110101000001101010010010101100100010101101101010000010000011001010110110101000010000101011011010100110111010100100101011111100101011011010100110111010100100101011001101111010100100101011001000101011011010100000000011010100100101011001000101011011010100110010000101011011010100110111010100100101011001101001101010010010101100100010101101101010011001000010101101101010011011101010010010101111011111110010101101101010011011101010010010101100101100101011011010100010001010110110101001000010101101101010011011101010010010101110111110010101101101010011011101010010010101111111100101011011010100110111010100100101011111011110101001001010110010001010110110101001000100000101011011010100110111010100100101011111010011010100100101011001000101011011010100100000101011011010100110111010100100101011001101111010100100101011001000101011011010100010000010101101101010011011101010010010101101001101101010010010101101001101010
인쇄물
!"#$%&'()*+,-./23456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
여기 사용해보십시오
확실히 가장 긴 해결책이지만 Lino로 코딩하는 것은 항상 재미 있습니다.
"libraries"/arch/cpu/base;/hmi/conout;/data/bytes;/data/string/t2s;/data/heap;/data/heap/connect/mgrab;"stockfile"a;"directors"displaystatus=engage;"injection"c=524;b<-bytes.bytesizeconvert:c;b<-heap.alloc:b;a<-heap.alloc:c;[filecommand]=readfile;[filename]=stockfile;[fileposition]=0;[fileblocksize]=c;[fileblockpointer]=b;arch.fileread;[string.psource]=b;[string.ptarget]=a;string.t2s;b<-heap.alloc:7fh;c=32;d=b;"f"[d_32]=c;+c;+d;?c<7fh>f;"w"d=[a];+a;?d=0>y;?d<32>w;?d>7eh>w;e=b;e+d;[e]=33;^w;"y"b+32;"v"conout.say:b;bye;
주석이 없으며 바이너리로 컴파일 된 소스를 읽습니다. 다른 이름으로 저장 a.txt
하지 않으면 컴파일되지 않습니다!
++++++++++++++++[->++++++>++>+++>++++>++<<<<<]>-->>->->+[---<.+.+<.+<.+<.+.+.+>>>>]++[-<.+.+.+<.+>>]<+.<+.<++.
이전 솔루션으로 조금 더 어설프게 (아래는 더 작다는 것을 알기 전에-이것이 약간의 최적화를하기 전에 있었지만). 이것은 4 세트의 ASCII 숫자를 저장하고 까다로운 루핑으로 인쇄 한 다음 누락 된 문자 (즉 잘못된 ASCII 숫자 사이에있는 문자)를 제공하여 작동합니다.
원본 제출
>>+++++++++++[<+<+>>->++>+++<<]<++>>++++++>>+++++[-<<<++++++>>>]<<<+<<[->>+.<<]>>++.++<[->+.<]>++.+>[-<+.>]<++.+>>[-<<+.>>]
다음을 수행합니다.
import Data.List
main=putStrLn$[' '..'~']\\" \\\"$'.=DLS[]aimnoprstu~"
보링 프로그램에서 문자열의 중복 문자, 범용 세트에서 빼기 솔루션. 코드 골프 선수와는 거리가 멀지 만 놀랍게도 길이가 길기 쉽습니다.
(이제 filter
/ 대신 목록 빼기 기능이 notWith
있습니다.)
import Data.List
에import List
runhaskell
"모듈 '목록'을 찾을 수 없습니다."로 시도해도 작동하지 않는 것 같습니다 . 그래도 문자 수를 잘못 세는 것을 알았으므로 수정했습니다.
클로저 (142, 106, 103)
(defn -main[](let[c"(fn[l](pr(reduce disj(set(map char(range 32 126)))l)));-\\\"o"]((load-string c)c)))
형식화 :
(defn -main []
(let [c "(fn[l](pr(reduce disj(set(map char(range 32 126)))l)));-\\\"o"]
((load-string c) c)))
이것이 가능하다고 생각하면 약간의 조정이 필요할 수 있습니다. 산출:
#{@ ` ! A B b # C $ D % E & F ' G H I * J + K k , L M . N / O 0 P Q q R S 4 T 5 U V v 7 W w 8 X x 9 Y y : Z z { < | = } > ^ ? _}
평가 가능한 클로저 코드 인 문자열을 자체적으로 실행합니다. 문자열은 문자열 밖에서 사용되는 문자를 얻기 위해 끝에 주석이 있습니다 (주요 방법 등)
for x in range(38):print chr(x+59)#!"$%&'*,-./012467bdjklmqsuvwyz{|}~
나는 연속 문자의 가장 긴 (찾을 수있는) 시퀀스를 인쇄하고 코드 뒤에 주석으로 다른 문자를 추가 할 수 있습니다.
0x20
을0x7e
은 "인쇄 가능한 ASCII 문자"로 정의된다. 기술적으로 탭과 줄 바꿈은 실제로 제어 문자입니다.