符号与字母


17

符号与字母

ASCII字符已经分裂一次一次!您的设置是字母符号

这些信

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

符号

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

任务是编写两个程序:

  1. 准确打印每个字母一次,而无需在程序中使用它们。

  2. 每个符号仅打印一次,而无需在程序中使用它们。

规则

  • 空格可能出现在您的程序或输出中。
  • 不允许使用非ASCII字符。
  • 输出以文件的内容或名称的形式输出到标准输出或文件中。
  • 无输入。
  • 输出只能包含一组或另一组的ASCII字符。
  • 程序可以用不同的语言或相同的语言编写,但有一个例外:
  • 空白语言仅可用于项目之一。
  • 有标准漏洞

计分

# of characters in program 1 +# of characters in program 2 =Score

最低分获胜!

注意:

为了鼓励更多的投稿,您仍然可以仅针对其中一个程序发布答案并提供解决方案。您将无法取胜,但仍然可以炫耀一些炫酷的东西。

感谢加尔文的兴趣爱好启发了他先前的问题


4
这在大多数语言中都是不可能的...例如,在Haskell =中不可避免:
骄傲的haskeller 2014年

1
@proudhaskeller面临的挑战之一是选择一种可能的语言。
hmatt1 2014年

(我知道当问题在沙箱中时我应该已经想到了这一点,但是)鉴于“空格可能出现在输出中”规则,这是否意味着(字母)的顺序无关紧要?
FireFly 2014年

@FireFly任何命令都可以。
hmatt1 2014年

程序中是否可以包含控制字符(代码点0到31和127)?
2014年

Answers:


7

总计:53个字符

单一语言的总计:230个字符,Pyth

第1部分:Golfscript,15岁

91,65>123,97>++

输出:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

说明:

91,           Make the list, [0 1 .. 90]
65>           Take elements after the 65th, [65 66 .. 90]
123,97>       Same, but [97 98 .. 122]
+             Add the list above to the newline character that is automatically pushed to 
              the stack. List + str coerces to string by ascii encoding.
+             Same, for the other list.

第2部分:Pyth,38岁

JhCeGLjkmCdbsrCdCPhGsrhCPeGChGsrJhhhhJ

输出:

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

说明:

G = "abcdefghijklmnopqrstuvwxyz"   Implicit.
k = ""                             Implicit.
d = " "                            Implicit.
JhCeG                              J = 1 + chr(end(G))          # J = 123
L                                  def d(b): return
 jk                                                k.join(
   m                                                      map(lambda d:
    Cd                                                                 chr(d),
    b                                                                  b))
s                                  print(s(                    #print is implicit.
 rCd                               range(chr(d),                 # chr(d) = 32
 CPhG                                    chr(upper(head(G))))    # chr("A") = 65
srhCPeGChG                         print(s(range(1+chr(upper(end(G))),chr(head(G)))
srJhhhhJ                           print(s(range(J, 1+1+1+1+J)))

奖励解决方案:

第1部分:Pyth,192

%*$"%\143"$52(65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122

说明:

$"%\143"$=>“%c”。$在Python解析样式之间切换,并且在Python字符串解析中,\143是的八进制转义序列c。因此,此答案等效于以下Python样式的代码:

("%c" * 52) % (65, 66, 67, ...)

当然,这在Python中不起作用,因为在Python中打印使用print,但是在Pyth中打印是隐式的,因此可以使用。


自问问题以来,Pyth解决方案不使用任何添加的功能。


我在哪里学习Pyth?从例子?
Soham Chowdhury 2014年

@SohamChowdhury示例是一个很好的起点。阅读文档可能是下一步-主目录中的doc.txt。最后一步是使用-d(调试)标志自己开始玩游戏。该软件非常新,因此没有更好的东西了。据我所知,只有3个人曾经使用过它,而我是唯一定期使用它的人。祝你好运,享受。
isaacg 2014年

23

Python(Symbols,87 82)

from string import punctuation
from string import digits
print digits
print punctuation

我只是喜欢Python的字符串模块...

编辑:

from string import punctuation as p
from string import digits as d
print d
print p

输出:

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

FALSE(21个字母) DUP(20个字母):

假解决方案:

65[$91\>][$,$32+,1+]#

DUP解决方案(缩短1个字符)

65[$91<][$,$32+,1+]#

输出(两者):

AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz

FALSE的译员。


合计:102


1
喔不错哟!我见过人们说这不能用python完成,做得很好。
hmatt1 2014年

from string import*同样有效,并减少了字节数。
aglasser 2014年

5
@aglasser ...但用*在这种情况下禁止...
ɐɔıʇǝɥʇuʎs

4
你是对的,不敢相信我忘记了*是一个象征哈哈。这就解释了为什么您都不这样做from string import punctuation, digits。遵循规则的不错的解决方案。对不起,我的错!
aglasser 2014年

13

GolfScript(14个字符)+ Deadfish x(116个字符)= 130个字符

91,65>{.32+}%+

xxcxxcdddKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKDxxxccxxxxxxxxxxKxKxKxKxKxKDxxxcxxcxxKxKxKxK

2
到目前为止,四个帖子中的第一个是+1,实际上回答了这两个部分。
Geobits,2014年

10

Ruby 2中的第1部分和第2部分:56 + 484 = 540

第1部分:

__=->_{(91..96)===_||$><<(''<<_);_>121||__[-~_]}
__[65]

有关这种样式的Ruby的更多信息,请查看 narfnme

第2部分(此位仅适用于Ruby 2.0+,与ruby-2.1.0完美配合,但在早期版本中可能会发出警告):

class Fixnum
def c
String def a
end
end
def b
String def A
end
end
def x
String def z
end
end
def y
String def Z
end
end
def inspect
case chr
when c
when b
when y
p succ
else
print chr
p succ
end
p
rescue
p
end
end
def x
String def z
end
end
def y
String def Z
end
end
class String
def inspect
p size
p
end
end
p String p
class String
def inspect
p ord
p
end
end
p y
class Fixnum
def inspect
case chr
when x
p succ
else
send chr
print chr
p
end
p
rescue
print chr
p succ
p
end
end
p x

那个很难。调用诸如chrsucc之类的内置Fixnum方法需要打开Fixnum类并重新定义inspect,因为我可以触发对x.inspectwith 的调用p x。我需要检查返回,nil以便p仅打印换行符,任何字符串都将用双引号引起来。但作为副作用,它会循环。我可以使用字符串比较来终止第一个循环和第二个循环,以查看何时达到字母范围,但是由于我无法编写字符串文字,因此我需要通过调用String()返回的符号来获得一个字符串(在Ruby 2中)通过def关键字。由于这是一种多行语法,因此我只能通过case,它不能采用多行表达式,我需要将文字包装在方法中(因为我显然不能进行赋值)。最后一个循环很难终止。我需要停下来~。幸运的是,在该范围内的ascii字符中,字符用来检测何时结束并停止循环。~ 是唯一可以在没有参数的情况下调用Fixnum而不引起错误的函数,因此我可以使用 send chr

这不是该线程中的最高分,但到目前为止,这是唯一在两个部分使用相同语言的得分。耶·露比


1
甚至在您的第二个答案之前+1,因为'知道会来。尊重将Ruby的灵活性推向极限。
2014年

+1(以相同语言提供两个程序的第一个/唯一答案)。到目前为止,这是IMO的明显赢家。我尚未安装Ruby 2,但请相信它能正常工作。
Digital Trauma 2014年

8

Applescript的第2部分,第654页

等待...“ Applescript打高尔夫球的技巧 ”页面在哪里

global a
global b
global c
global s
on f at n
set end of b to a
end
on g at n
f at a
f at a
end
on h at n
g at a
g at a
end
on i at n
h at a
h at a
end
on j at n
repeat with t in system info
f at a
end
end
on m at n
set end of b to a
set c to count of b
set end of s to ASCII character c
end
on n at n
m at a
m at a
m at a
end
on o at n
repeat with t in system info
m at a
end
end
set a to random number
set b to a as list
j at a
j at a
set c to count of b
set s to ASCII character c
set s to s as list
o at a
n at a
n at a
n at a
n at a
n at a
j at a
i at a
g at a
f at a
n at a
m at a
m at a
j at a
i at a
g at a
n at a
m at a
display dialog s as text

输出:

在此处输入图片说明


1
我知道会有Applescript解决方案。在这里,+ 1。
ɐɔıʇǝɥʇuʎs

4

CJam + AlphaBeta,62个字节


字母CJam,12个字节

"[{"{,-26>}/

在线尝试!

输出量

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

怎么运行的

"[{"{     }/   For each of the characters "[" and "{",
     ,         push an array of all ASCII characters before it
      -26>     and discard all but the last 26 characters.

符号,AlphaBeta,50字节

ZaaAccctFUaCLOrEbbCLbCLbCLbCLdddACLbCLbCLgDLgDLgDL

在线尝试!

官方的C ++解释器有一个错误,该错误使循环变得不可能,而且我不知道如何使用Lua解释器。我修复了该错误。您可以通过运行EsoLang页面中的示例程序来验证它是否按预期工作。

输出量

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

怎么运行的

Z      Switch register 4 to the position register.
aa     Set registers 1 to 2.
A      Copy the value from register 1 to register 2.
ccc    Add 30 to register 1 (result: 31).
tF     Set register 2 to the product of registers 1 and 2 (result: 64).
U      Add 10 to the position register (result: 10, i.e., the position of the next byte).
aCL    Add 1 to register 1 and print the corresponding ASCII character.
O      If register 1 != register 2, go to the position in the position register.
rEb    Set register 1 to the sum of registers 1 and 2 minus 1 (result: 127).
bCL    Subtract 1 from register 1 and print the corresponding ASCII character.
bCL    Subtract 1 from register 1 and print the corresponding ASCII character.
bCL    Subtract 1 from register 1 and print the corresponding ASCII character.
bCL    Subtract 1 from register 1 and print the corresponding ASCII character.
ddd    Subtract 30 from register 1 (result: 93).
A      Copy the value from register 1 to register 2.
CL     Print the ASCII character corresponding to register 1.
bCL    Subtract 1 from register 1 and print the corresponding ASCII character.
bCL    Subtract 1 from register 1 and print the corresponding ASCII character.
gDL    Add 1 to register 2 and print the corresponding ASCII character.
gDL    Add 1 to register 2 and print the corresponding ASCII character.
gDL    Add 1 to register 2 and print the corresponding ASCII character.

3

BrainFuck的第1部分:80 74字节

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

您可能>由于缺少代码缩进而丢失了第一个。因此,它被呈现为报价。
Falko 2014年

@Falko感谢您的注意,我错过了。
spocot

3

总共318个字节

我真的很希望能用相同的语言找出两个程序的答案,但到目前为止还没有。这里是这样:

第1部分:纯bash,129个字节

_0=`$ 2>&1`
_0=${_0##*:}
_1=${_0:5:1}
_5=${_0:1:1}$_1${_0:11:1}
. <($_5<<<_2=\({${_1^}..$_1}\))
_3=${_2[@]:0:26}
$_5<<<$_3${_3,,}

输出:

$ ./letsym.sh
A B C D E F G H I J K L M N O P Q R S T U V W X Y Za b c d e f g h i j k l m n o p q r s t u v w x y z
$ 

第2部分:GNU dc,189个字节

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzzzzzzzzzzzzzzzzzzzzzzzzzzzPzzPzzPzzPzzPzzPzzBDPBEdPBFPdkvZP

输出:

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

2

好吧,你知道,有人应该去做。

BrainFuck的第1部分:174个字节

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+++++++
.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.

1

第1部分:Ruby,45个字节

_=[*?@...?[,*?`...?{]
_[0],_[27]=*$_
$><<_*''

说明

  • 使用splat运算符(?@...?[),包含z()的Range和包含AZ(?`...?{)的Range 成为数组的元素_*),。
  • 数组的第0个元素("@")和第27个元素("`"_设置为nil
  • 使用将该阵列_连接在一起Array#*并打印到stdout($>

您可以*$_在第二行替换为p(或[])。
约旦
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.