您的任务是构建一个程序(仅使用可打印的ASCII字符和/或制表符和换行符),以完全打印出可打印的ASCII空间(0x20
到0x7e
)中未出现在程序源代码中的字符(以任何顺序排列)很多次)。
以任何语言执行此操作的最短代码都会胜出。
您的任务是构建一个程序(仅使用可打印的ASCII字符和/或制表符和换行符),以完全打印出可打印的ASCII空间(0x20
到0x7e
)中未出现在程序源代码中的字符(以任何顺序排列)很多次)。
以任何语言执行此操作的最短代码都会胜出。
Answers:
#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字节,或在此处突出显示和解释。
"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
可以将a视为an 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}
简单地检查自己。手动删除重复字符。
感谢Josh保存了4个字符,并感谢minitech保存了5个字符!
(?!..?~).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字符和/或制表符和换行符)
天哪,您为APL付出了很多努力(这值得商lib吗?)
因此,我决定忽略所有规则!
⎕AV
打印原子向量(包括所有可打印的ASCII字符)
原来我完全忘记了“没有”部分...
但这很容易解决
⎕AV~'AV'''
~'AV'''
表示排除(~
)字符A,V和单引号(转义为双引号)
关于打印非ASCII,我将忽略所有规则。
0x20
至0x7e
)”我相信输出可能不包含可打印ASCII空间之外的字符(“完全”为关键字) ,并且您的程序包含“ A”和“ V”,因此不应打印它们。
~
到排除字符集。;-)顺便说一句,类似的J解决方案将是a.-.'a.-'''
+++++[->++++++<]>>>++[------<+>]<++++>>----[----<+>]>-[-------<+>]>-[---<+>]<------->>-[---<+>]<+++++++++>>--[-----<+>]<+++++>>+[---------<++>]+++++++++++++[<[.+<]>[>]<-]\=,
很长一段时间,我可能稍后再试。
编辑:啊,忘了 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
是的十进制等效项0x20..0x7e
,因此创建了我们要查找的十进制ASCII代码数组。
[char[]]
获取下一个对象的内容,并将它们放入数组中,将其分解并将其转换为ASCII字符。因此,我们现在有两个ASCII字符数组-一个从此脚本中提取,另一个由质询条件定义。
-Pa
设置Compare-Object
为“ Passthru”格式,因此只有在输入之间发现不同的项目才会在控制台上输出-哪些项目属于哪些输入的指示符仍存储在对象数据中,但不会显示。
|?{$_.SideIndicator-eq'=>'}
将Compare-Object
输出的管道传递到Where-Object
,将其过滤到仅第二个输入专有的项目。
<? //A"$%&'()*+[,.]0123456789:=-@ABCDEFGHIJKLMNOPQRSTUVWYZ\^_`abcdefghijklmopqrstuvwxyz{|}~#
输出:
没有
OP要求打印所有未使用的字符,嗯,我只用它们
<?='A"$%&\'()*+[,.]/0123456789:=-@ABCDEFGHIJKLMNOPQRSTUVWYZ\^_`abcdefghijklmopqrstuvwxyz{|}~#'
呢
!;>Xn
Javascript,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的冗长性,大多数小写字母仅用于样板。同样,{
和}
是平凡的Java程序,因为样板需要他们。
|
可以在有or条件的情况下使用,但是我找不到一种方法来利用导致一个较短程序的方法,而不仅仅是|
用作按位运算符。这|0
让我感到有点脏,因为这是唯一可以使角色进入其中的动作。
~0
收益-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
将-
in“ 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
“找不到模块'列表'” 时,它似乎不起作用。我注意到我会错误地计算字符数,因此我进行了更正。
(u:32+i.97)-.1!:1<":5
将此写入5
当前目录中的文件。然后加载执行脚本0!:1<'5'
或25个没有文件把戏的:
(-.~".)'(":u:32+i.0-~95)'
'
,不会从输出中删除。
Clojure(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 { < | = } > ^ ? _}
在其本身上运行字符串,该字符串是可评估的clojure代码。字符串末尾有一些注释,以获取字符串外使用的字符(主要方法等)
for x in range(38):print chr(x+59)#!"$%&'*,-./012467bdjklmqsuvwyz{|}~
我使用最长的(我能找到的)连续字符序列,可以打印出来并将其他字符添加为代码后的注释。
0x20
到0x7e
,这被定义为“可打印的ASCII字符”。从技术上讲,制表符和换行符实际上是控制字符。