用不打孔的方法写出整个孔


55

十进制代码33至126 的ASCII字符为:

!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

请注意,在大多数字体中,这些字符中的25个在其中带有“孔” :(您可能会说大于0

#$%&04689@ABDOPQRabdegopq

其他68个“空洞的”字符是:

!"'()*+,-./12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\]^_`cfhijklmnrstuvwxyz{|}~

您的任务是编写仅使用不打孔的字符的最短程序,该字符将以任何顺序将每个带孔字符精确输出一次。

由于空格,制表符和换行符(换行和/或回车符)为空白,因此它们可能会出现在程序或其输出中。它们仍然计入字符数。可能不使用其他ASCII字符(当然也不能使用非ASCII字符)。

笔记

  • 您不必使用所有无用的字符,也不必只使用每个。
  • 输出中不得包含无用字符。
  • 空白语言也可以使用。
  • 输出应转到stdout或可以转到文件。应该没有输入。

奖励:只是为了好玩,尝试使用带孔的字符打印所有不打孔的字符。我怀疑是否可以使用现有语言来完成。


9
+1标题。我们爱做的东西像这样
2014年

1
Perl解决方案在哪里?
皮埃尔·阿洛德

4
好吧,Haskell或C中没有解决方案。如果是您想要的程序,则需要拼写main
Rhymoid

2
奖金可以使用空格来完成。
2014年

1
没人会注意到我忘记了~吗?
加尔文的爱好2015年

Answers:


18

Pyth43个 35个字符

tTFk"*+,-7;=?GHIKVWXYhiklnvwx"C-Ck7

在这里尝试。

按顺序打印字符,除了开始处9以外,换行符分隔。

字符串包含的所有字符都比所需的大7个字符,除了9将变成@之外,因此是特殊情况。算法得益于@Howard。

说明:

tT                print(10-1)                T=10, t(x)=x-1 if x is an int.
Fk"<string>"      for k in "<string>":
C-Ck7             print(chr(ord(k)-7))       Note that C is overloaded as ord and chr.

24

GolfScript,37个36个字符

[":=<?)-/! YX[]VIHKx{}|~vih"{25^}/]+

这里尝试代码。

该字符串包含与25异或的禁止字符。幸运的是,所有字符都映射为有效字符。


22

笨蛋119

--[------->++<]>-.+.+.+.++++++++++.++++.++.++.+.+++++++.+.+.++.+++++++++++.+.+.+.[------>+<]>--.+.++.+.++.++++++++.+.+.

呃,--开始时...您是否正在循环回到初始寄存器上的254?
WallyWest

1
是的:)使循环缩短至36(以达到35)
Teun Pronk,2014年

好吧,它的确击败了我的275 ...做得好...
WallyWest

@Calvin的业余爱好,我敢肯定,不允许输入任何内容,对不起。OP可能想澄清一下。
isaacg 2014年

@isaacg我知道,这就是为什么我的主代码没有输入并且最后一个例子不是认真的例子的原因:)
Teun Pronk

20

奖励-DC,179个字符

哦好,P允许在另一个受限字符集挑战中使用。

6A44469PD684P44D4898PDB99P4008D0BP486B48BPA60BPD096P4A68666P460A0D4P690490AP8084088P6B6AB66P6BBB608P80D4BAAPA046PBAD4P60A6668P480DD96P4A040BBP848BP40DD8D0P46840B6P696B48BP48D64BAP

既然dc显然已经足够晦涩,需要解释(对我来说,考虑到这里的怪异事物,这很奇怪!),这里是一个概述:

它主要是具有任意精度算术的RPN计算器。但是对于这个挑战,我使用了P命令,该命令将数字解释为以256为基数的一系列字符并打印出来。示例:65 P打印A(ASCII代码65)。16706 P打印AB(16706 = 65 * 256 + 66)。

除此之外,唯一有趣的功能是0-9A-F即使所有十六进制数字都不包含在十六进制数字中,它也可以识别所有十六进制数字。十进制输入是默认的,所以输入令牌999装置9 hundreds + 9 tens + 9ABC装置10 hundreds + 11 tens + 12使之相当于1122

使用ABD十进制数字的能力部分弥补了无法使用12357的麻烦,其余的选择是排序和分组。(如果我需要一些数字xyz和它们不与允许的数字所能表述的,然后我尝试代表x*256*256+y*256+z来代替。)

通过使用较大的组,该程序可能会变得稍微短一些。我没有超过每个数字3个字节。


1
@DigitalTrauma相反的是问题陈述末尾的奖金

哈!我错过了!优秀的!+1
数字创伤

你能解释一下吗?还有一个可以运行此功能的地方吗?
加尔文的爱好

4
一个可以运行的地方?dc并不是为制作难以阅读的程序而设计的愚蠢语言,而是一种严肃的计算器。在任何UNIX机器(或cygwin)上运行它。en.wikipedia.org/wiki/Dc_(computer_program)

@ Calvin'sHobbies如果您几乎可以访问任何Linux或Unix计算机(包括OSX),只需将其另存为文本文件(例如bonus.dc),然后运行即可dc bonus.dc。dc是世界上最古老的语言之一,并且在* nix中永久存在数十年。不过,它并不为人所知,可能是由于其奥秘和RPN语法不太可读。伟大的,但一些代码高尔夫球挑战;-)
数字创伤

12

Bash + coreutils,56个字节

tr \(-y \!-r<<<'*+,-7;=?GHIKVWXYhiklnvwx'
tr C-F 7-:<<<E

幸运的是,在带孔字符的ascii值上加上7将产生所有空洞字符(“ 9”除外)。因此,我们只需要反向进行此转换,然后进行类似的转换(从“ E”中减去12)即可得出“ 9”。

输出:

#$%&0468@ABDOPQRabdegopq
9

7
我喜欢第一行从一串字符中减去7,并且-7在标点符号之间包含明显显示的字符,而这两个事实彼此无关。

@ WumpusQ.Wumbley我什至都没有注意到:)
Digital Trauma

6

Perl-49字节

symlink".",':=<?)-/! YX[]VIHKx{}|~vih'^chr(25)x25

这几乎是霍华德解决方案的Perl版本。将字符串与25进行XOR。输出是名称为的文件#$%&04689@ABDOPQRabdegopq。我有使用的主意,symlink并且将文件名用作输出格式,因为其他所有内容均被禁止。

这是我想到的另一个Perl解决方案。它可能会改进很多,而且很长,所以我现在以可读的格式离开。

until(y/1/1/>32){s//1/}
until(y/1/1/>125+1){
    if(chr(y/1/1/)!~/[!"'()*+,-.\/12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\\\]^_`cfhijklmnrstuvwxyz{|}~]/) {
        symlink".",chr y/1/1/;
    }
    s/^/1/
}

这个输出多个文件,每个文件的名称都是字符之一。我不知道如何在不使用禁止字符的情况下追加字符串。

forwhilemapsayprintevals///e,和不能使用任何变量名称(变量开始@$在Perl)作出这个困难。

希望文件名可以作为输出格式,因为我很确定其他所有输出信息的方式都可以使用其中一个禁止的字符。


我将为您提供+1的创造力!非常巧妙的使用代码!
WallyWest

我知道这已经很老了,但是可以将输出打印到屏幕上,并使用-pflag和*_=\(... 保存一些字节)::在线尝试!
唐·黑斯廷斯

@DomHastings酷!我认为该-p标志将被禁止,因为该标志p有一个洞。
hmatt1

5

MATLAB,36字节

非常接近....仅比当前获胜者(isaacg)多1个字节!经过进一步检查,我已经做了我打算做的事情。好吧,重塑车轮无害...

我知道这是一个古老的挑战,但我只意识到,以后我感兴趣。

['*+,-7;=?GHIKVWXYhiklnvwx'-7,57,'']

如果只有我能使MATLAB理解我想要一个没有单独的字符串''...建议,有人吗?


4

Brainfuck 303 275

++++++++[>+>++>+++>++++>+++++>++++++>+++++++>++++++++>+++++++++>++++++++++>+++++++++++>++++++++++++>+++++++++++++>++++++++++++++>+++++++++++++++>++++++++++++++++<<<<<<<<<<<<<<<<-]>>>>+++.--->----.+.+.++>.>----.++.++.+.->.+.+.-->----.++++>-.+.+.+.-->>+.+.-->----.+.++.+>-.+.+.

Brainfuck,终极不为人知的深奥语言(除了Whitespace之外;)


1
请删除旧的片段,请勿删除。
isaacg 2014年

2
我看到您在代码段中使用了引号thingies(不知道真实姓名)。可能更容易选择代码,然后按Ctrl+ K:)
Teun Pronk

@isaacg完成。TeunPronk,完成了!
WallyWest 2014年

6
或者如果只是一两行,只需按一下空格键4次。@TeunPronk这吗?`这是一个倒钩。(也叫作严重的口音,尽管“ quoting somethingies ”对我来说是新的:P)
Doorknob

1
@Doorknob然后我们俩今天都学到了一些东西,尽管无论如何您学到的东西都是错误的:P
Teun Pronk

4

JS-196- 试试

h=(c=!1+[])[1];i=c[2*2];j=(f=[]+{})[1];this[i+'v'+h+'l'](h+'l'+i+'rt('+h+'t'+j+f[2]+'("Iy\x51lJj\\x'+2*2+'1\\x3'+~-1+'Nj\\x'+2*3+'75\x51EFC\x52E\\x3'+3*3+'\x51UVJhYm\x52lZ2\\x3'+3*3+'wc\x51=="))')

1
天哪,这太疯狂了。似乎Js是最易受虐待的语言之一)
更加模糊的2014年

可虐待是的,但是与我的条目相比,这只是一个斑点……对不起,@ bebe,但是这次我超越了你……
WallyWest 2014年

1
@WallyWest我宣战。
bebe 2014年

1
217h=1-1;j=3+3;k='\\x';m=!i+k;c=m[1];f=m[i=2+2];l=k+3;n=k+j;r=k+i;this[f+'v'+c+'l'](c+'l'+f+'rt("\\x23\\x2'+i+k+25+k+2+j+l+h+l+i+l+j+l+2*i+l+3*3+r+h+r+1+r+2+r+i+r+'f\\x5'+h+k+51+k+52+c+n+2+n+i+f+n+7+n+'f\\x7'+h+k+'71")')-内联l,缩短mi首次使用时声明,为重复模式创建了一些额外的变量(您可以通过调整输出字符的顺序来改善此变量,但这超出了我的耐心:P)。
Alconja 2014年

2

GolfScript,89个字符

71 22+,{33+}/]''+'!"\'()*+,-./12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\]^_`cfhijklmnrstuvwxyz{|}'-

只需构建一个包含所有ASCII字符的数组,并从中减去非“空位”字符。

71 22+,  # Builds array of 0..93
{33+}/]  # Converts to 33..126
''+      # Convert ASCII codes to string
'stuff'- # Subtracts "stuff" (the non-holed characters) from the string

2

Befunge 98-69字节

"()+ijWI=*">:5j2 ,-5_"157:h">:5j2 ,-1_"=>?LMN^_lmn">:5j2 ,+3_"?"1+s <

它分为3部分。一个无孔字符值与有孔字符的差异为5,然后有孔字符的差异为1,最后是与有孔字符的差异为3的无孔字符的列表。Befunge中的终止程序指令为“ @”(字符值64),因此最后我加载“?”。(字符值63)加1,然后将其与指令“ s”一起放入代码中。

通过合并这三个,我也许可以更多地打高尔夫球

>:5j2 ,(differ value)_

部分,但可能不会太多。


2

JavaScript的240 228

首次提交:

z=(!1+"")[1];y=(!!1+"")[3];x={}+"";w=x[1];v=x[2];u=z+"t"+w+v;1[_="c\157nstruct\157r"][_](z+'l'+y+'rt('+u+'("Iy\x51lJj"+'+(t=u+'("\x51\x51==")')+'+'+u+'("M"+'+t+'+"==")+"Nj"+'+u+'("Zw==")+"5\x51EFC\x52E\71\x51UVJhYm\x52lZ2\71wc\x51=="))')()

现在,这是一个很好的开始,下面是它的分解方法...

z=(!1+"")[1];        // assigns "a" to z, !1+"" === "false"
y=(!!1+"")[3];       // assigns "e" to y, !!1 === "true"
x={}+"";             // assigns "[object Object]" to x
w=x[1];v=x[2]        // assigns "o" to w, and "b" to v
u=z+"t"+w+v;         // creates the mystical "atob" command, yes, I'm gonna use it!
1[_="c\157nstruct\157r"][_] // sets up the primitive to a number object... this acts similar to the "window" primitive object so that I can play off functions...
z+'l'+y+'rt(         // starts creating an alert call
'+u+'("Iy\x51lJj"+'+(t=u+'("\x51\x51==")')+'+'+u+'("M"+'+t+'+"==")+"Nj"+'+u+'("Zw==")+"5\x51EFC\x52E\71\x51UVJhYm\x52lZ2\71wc\x51=="))')()
// Above line abuses atob command with a couple of nested instances of the command, also using hex and octal equivalents of characters

然后我想...“一定有更简单的方法...”

修改后的提交: z=(!1+"")[1];y=(!!1+"")[3];x={}+"";w=x[1];v=x[2];u=z+"t"+w+v;this[y+"v"+z+"l"](z+'l'+y+'rt('+u+'("Iy\x51lJj"+'+(t=u+'("\x51\x51==")')+'+'+u+'("M"+'+t+'+"==")+"Nj"+'+u+'("Zw==")+"5\x51EFC\x52E\71\x51UVJhYm\x52lZ2\71wc\x51=="))')

看到我可以使用eval (将它们拼凑起来,从@bebe那里得到灵感;比使用constructora constructor的a 更快number),我将其向下钻取到228 ...我知道它可能无法赢得这个特殊的高尔夫挑战赛,但这只是我展示您可以滥用JavaScript多少并仍然获得预期结果的方式...


2

主要- 失眠,50

FFy~~jF~y<={*n<<ztf>={.f=(tHL~k<yf={*n>Lj(FunLn<j~

它输出:

abdegopq04689@ABDOPQR#$%&

奖励-失眠268

ogeeoddp@poe@ggep@oe@opge@gee@%d@p@gqeo@p@ge@e9de49ed9e4dppe@%e@geee@ge@p%ee@%e@dp@%ep@%ee@%d@%eeee@%e@%ee@%e@geee@%e@gee@ggopop@peo@ggep@p@ge@ggeep@ge@gee@%e@geee@ge@gee@ge@ppoep@%ee@%edep@gepe@ge@%ee@%e@geee@ge@%ee@%%eeoe@ge@pep@%gep@p@%e@%%eep@%e@gee@e%e@oe@%gep@p@

它输出:

!"'()*+,-./12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\]^_`cfhijklmnrstuvwxyz{|}~

我认为如果重新排列输出,应该可以减少程序的长度,但是我需要修改搜索程序来做到这一点。

只是为了说明情况,另一种语言可以使用有限数量的字符进行操作。顺便说一句,它几乎可以在源中只包含3个唯一字符的任何输出中写入。

当前,这是在所有现有答案中既可以完成主要挑战又可以实现奖励的唯一语言。

失眠译员


1

Befunge 98-46字节

isaacg的Pyth条目的真菌化版本:

"xwvnlkihYXWVKIHG?=;7-,+*">:5j2 ,-7_"?"1+:,s <

1

Japt,33个字节

7+2+"*+,-7;=?GHIKVWXYhiklnvwx"c-7

在线尝试!

isaacg的Pyth提交算法相同,只是在Japt中更短。

这个怎么运作

7+2+"*+,-7;=?GHIKVWXYhiklnvwx"c-7

7+2           Obviously the number 9
    "..."c-7  Apply -7 on each char's charcode of this string
   +          String concatenation

是的,它是JS,它是最易滥用的语言之一,只是更短(而且您不需要alertconsole.log在这里)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.