打印字符名称


42

每个Unicode字符都有一个名称,例如“拉丁文大写字母A”。Unicode字符名称只能包含大写字母,空格和减号。

编写一个程序,该程序读取文本并在新行上输出每个字符的名称。例如,如果输入为“ Hello,World!”,则输出为

LATIN CAPITAL LETTER H
LATIN SMALL LETTER E
LATIN SMALL LETTER L
LATIN SMALL LETTER L
LATIN SMALL LETTER O
COMMA
SPACE
LATIN CAPITAL LETTER W
LATIN SMALL LETTER O
LATIN SMALL LETTER R
LATIN SMALL LETTER L
LATIN SMALL LETTER D
EXCLAMATION MARK
  • 输入应该来自文件或用户输入,而不仅仅是代码中的字符串。
  • 输出应写入文件或标准输出或打印到屏幕上。
  • 不允许使用Internet和外部库,所有必需的数据都应包含在代码中。
  • 假定输入仅包含基本拉丁语代码范围32-126中的可打印ASCII字符。您可以忽略尾随换行符。
  • 允许所有编程语言。以字节为单位的最短代码获胜。

官方Unicode字符名称可在此处找到。其他来源:

这是我的第一个问题,因此,如果可以改善此问题,我将不胜感激。

就本挑战而言,以下列表应为规范性列表。

    32  0020        SPACE
!   33  0021        EXCLAMATION MARK
"   34  0022        QUOTATION MARK
#   35  0023        NUMBER SIGN
$   36  0024        DOLLAR SIGN
%   37  0025        PERCENT SIGN
&   38  0026        AMPERSAND
'   39  0027        APOSTROPHE
(   40  0028        LEFT PARENTHESIS
)   41  0029        RIGHT PARENTHESIS
*   42  002A        ASTERISK
+   43  002B        PLUS SIGN
,   44  002C        COMMA
-   45  002D        HYPHEN-MINUS
.   46  002E        FULL STOP
/   47  002F        SOLIDUS
0   48  0030        DIGIT ZERO
1   49  0031        DIGIT ONE
2   50  0032        DIGIT TWO
3   51  0033        DIGIT THREE
4   52  0034        DIGIT FOUR
5   53  0035        DIGIT FIVE
6   54  0036        DIGIT SIX
7   55  0037        DIGIT SEVEN
8   56  0038        DIGIT EIGHT
9   57  0039        DIGIT NINE
:   58  003A        COLON
;   59  003B        SEMICOLON
<   60  003C        LESS-THAN SIGN
=   61  003D        EQUALS SIGN
>   62  003E        GREATER-THAN SIGN
?   63  003F        QUESTION MARK
@   64  0040        COMMERCIAL AT
A   65  0041        LATIN CAPITAL LETTER A
B   66  0042        LATIN CAPITAL LETTER B
C   67  0043        LATIN CAPITAL LETTER C
D   68  0044        LATIN CAPITAL LETTER D
E   69  0045        LATIN CAPITAL LETTER E
F   70  0046        LATIN CAPITAL LETTER F
G   71  0047        LATIN CAPITAL LETTER G
H   72  0048        LATIN CAPITAL LETTER H
I   73  0049        LATIN CAPITAL LETTER I
J   74  004A        LATIN CAPITAL LETTER J
K   75  004B        LATIN CAPITAL LETTER K
L   76  004C        LATIN CAPITAL LETTER L
M   77  004D        LATIN CAPITAL LETTER M
N   78  004E        LATIN CAPITAL LETTER N
O   79  004F        LATIN CAPITAL LETTER O
P   80  0050        LATIN CAPITAL LETTER P
Q   81  0051        LATIN CAPITAL LETTER Q
R   82  0052        LATIN CAPITAL LETTER R
S   83  0053        LATIN CAPITAL LETTER S
T   84  0054        LATIN CAPITAL LETTER T
U   85  0055        LATIN CAPITAL LETTER U
V   86  0056        LATIN CAPITAL LETTER V
W   87  0057        LATIN CAPITAL LETTER W
X   88  0058        LATIN CAPITAL LETTER X
Y   89  0059        LATIN CAPITAL LETTER Y
Z   90  005A        LATIN CAPITAL LETTER Z
[   91  005B        LEFT SQUARE BRACKET
\   92  005C        REVERSE SOLIDUS
]   93  005D        RIGHT SQUARE BRACKET
^   94  005E        CIRCUMFLEX ACCENT
_   95  005F        LOW LINE
`   96  0060        GRAVE ACCENT
a   97  0061        LATIN SMALL LETTER A
b   98  0062        LATIN SMALL LETTER B
c   99  0063        LATIN SMALL LETTER C
d   100 0064        LATIN SMALL LETTER D
e   101 0065        LATIN SMALL LETTER E
f   102 0066        LATIN SMALL LETTER F
g   103 0067        LATIN SMALL LETTER G
h   104 0068        LATIN SMALL LETTER H
i   105 0069        LATIN SMALL LETTER I
j   106 006A        LATIN SMALL LETTER J
k   107 006B        LATIN SMALL LETTER K
l   108 006C        LATIN SMALL LETTER L
m   109 006D        LATIN SMALL LETTER M
n   110 006E        LATIN SMALL LETTER N
o   111 006F        LATIN SMALL LETTER O
p   112 0070        LATIN SMALL LETTER P
q   113 0071        LATIN SMALL LETTER Q
r   114 0072        LATIN SMALL LETTER R
s   115 0073        LATIN SMALL LETTER S
t   116 0074        LATIN SMALL LETTER T
u   117 0075        LATIN SMALL LETTER U
v   118 0076        LATIN SMALL LETTER V
w   119 0077        LATIN SMALL LETTER W
x   120 0078        LATIN SMALL LETTER X
y   121 0079        LATIN SMALL LETTER Y
z   122 007A        LATIN SMALL LETTER Z
{   123 007B        LEFT CURLY BRACKET
|   124 007C        VERTICAL LINE
}   125 007D        RIGHT CURLY BRACKET
~   126 007E        TILDE

4
嗨,我已经继续编辑您的问题,如果您不同意,请回滚。您不需要更多的信息源,而是问题中的一个规范性版本,以避免出现差异问题。我选择ssec.wisc.edu/~tomw/java/unicode.html#x0000是最简洁的。除此之外,+ 1
Level River St St

感谢您编辑@steveverrill,我懒得自己做。
我和我的猫

显然,这些值可作为Windows的一部分在中使用C:\Windows\System32\getuname.dll。即使它内置在Windows中,这也算作“外部库”吗?
lc。

6
我刚学了固结这个词。
路加福音

Answers:


31

Java-113字节(如果从命令行读取则为152)

编辑:删除了无用的花括号。

Edit2:删除了不必要的变量。

Edit3:我使用c.getName()代替Character.getName()。

Edit4:将字符串作为命令行参数传递。

带命令行参数(113字节):

class Z{public static void main(String[]x){for(Character c:x[0].toCharArray())System.out.println(c.getName(c));}}

使用读取行(152字节):

class Z{public static void main(String[]x){for(Character c:new java.util.Scanner(System.in).nextLine().toCharArray())System.out.println(c.getName(c));}}

Java具有所需的一切。我敢肯定这可能会失败。


7
该死的!一个内置的!为了使这成为一个有趣的挑战,我认为这与“所有必要的数据都应包含在代码中”不符。不过非常聪明。
级圣河

1
@steveverrill哦:)。我已经看到了另一个挑战,常见的口吻做了类似的事情(如果我没记错的话,从1到100)。
彼得·伦克菲

6
哇,这次Java有机会击败许多高尔夫语言。
vsz 2015年

4
替代Java 8解决方案:x[0].chars().forEach(i->System.out.println(Character.getName(i)));与命令行参数解决方案相比,这节省了2个字符(通过替换for-loop)。
hjk

3
也许x[0].chars().map(' '::getName).forEach(System.out::println);
埃里克(Eric)

18

Python 3,56个字节

使用内置函数unicodedata.name(),因此可能不兼容。Java答案也是如此,因此我认为至少值得发布。

from unicodedata import*
for i in input():print(name(i))

我也想在python中发布一个,但是我的java答案足够狡猾:)。
彼得·伦克菲

1
当然for i in input():print(unicodedata.name(i))短吗?
埃里克(Eric)

1
@Eric否。您必须这样做import unicodedata,所以时间更长
mbomb007'9

17

的JavaScript(ES6)594 618 626

注意我可以节省大约30个字节,用atob / btoa压缩长字符串,但是Stack Exchange后期编辑器不能很好地接受“〜”上方的utf8字符。我宁愿保留一个正在运行的代码段。

编辑保存的8个字符thx @Ypnypn

重复单词的明显压缩。反引号内的换行符很重要且已计算在内。

测试在Firefox中运行该代码段。

// TEST SUITE
// for testing purpose, redefine alert() to write inside the snippet body
alert=x=>O.innerHTML=x
// for testing purpose, redefine prompt() to have a default text containing all characters
_prompt=prompt
prompt=(i,s)=>{
  for(s='',i=32;i<127;i++)s+=String.fromCharCode(i);
  return _prompt("Insert your message or keep the default",s);
}  
  
// That's the answer code:
z='SPACE/EXCLAMA0QUOTA0NUMBER1DOLLAR1PERCENT1AMPERSAND/APOSTROPHE3242ASTERISK/PLUS1COMMA/HYPHEN-MINUS/FULL STOP/78ZERO8ONE8TWO8THREE8FOUR8FIVE8SIX8SEVEN8EIGHT8NINE86SEMI6LESS-THAN1EQUALS1GREATER-THAN1QUES0COMMERCIAL AT3SQUARE5REVERSE 7/4SQUARE5CIRCUMFLEX9/LOW LINE/GRAVE93CURLY5VERTICAL LINE/4CURLY5TILDE'.replace(/\d/g,c=>'TION MARK/, SIGN/,PARENTHESIS/,/LEFT ,RIGHT , BRACKET/,COLON/,SOLIDUS,/DIGIT , ACCENT'.split`,`[c]).split`/`,alert([...prompt()].map(c=>(q=c.charCodeAt()-32)<33?z[q]:q<59?'LATIN CAPITAL LETTER '+c:q<65?z[q-26]:q<91?'LATIN SMALL LETTER '+c.toUpperCase():z[q-52]).join`
`)
<pre id=O></pre>


9

R,54字节 62

library(Unicode)
cat(u_char_name(utf8ToInt(scan(,""))),sep="\n")

编辑:根据@flodels注释,我需要先从连接中读取它,因此必须添加scan。根据所有规则,这也可能是不称职的解决方案。

用法

> cat(u_char_name(utf8ToInt(scan(,""))),sep="\n")
1: 'Hello, World!'
2: 
Read 1 item
LATIN CAPITAL LETTER H
LATIN SMALL LETTER E
LATIN SMALL LETTER L
LATIN SMALL LETTER L
LATIN SMALL LETTER O
COMMA
SPACE
LATIN CAPITAL LETTER W
LATIN SMALL LETTER O
LATIN SMALL LETTER R
LATIN SMALL LETTER L
LATIN SMALL LETTER D
EXCLAMATION MARK

您也可以将其包装为一个函数,以方便使用

UNI <- function(x)cat(paste0(u_char_name(utf8ToInt(x)),"\n"))

然后,用法就是

UNI("Hello, World!")

1
您的字节数正确:)
Beta Decay'9

1
欢迎来到PPCG!:D
Beta Decay's

对您有内置的任务很好,但是输出不是所请求的-4列表而不是1列表。我认为您应该添加一些内核以获得正确的输出
edc65

@ edc65很容易修复,我只是认为这是一个奖励。
David Arenburg

@ edc65修复了它。
David Arenburg


6

Perl (+ coreutils),563字节

注意:以下内容无法按原样工作,需要从xxd下面的转储中复制!我试图将原始数据直接传递到zcat,但是失败了。我可能只使用本地的Perl Gzip模块,但是肯定会明天!

use MIME::Base64;$x=encode_base64(join'',<DATA>);print eval(`base64 -D<<<'$x'|zcat`)->[-32+ord$_].$/for<>=~/./g
__END__
.....x.U.._.u.[r. .@.._~.E(X.i..............J_....1..N......7K......|ih....P...a7......,a.....o.!.=N.K.i.....$..vFv.Pv..........*o...=..|o..O.B..c%2\bj1Gr...nr.|c.{...q......3......aw;b\1...C.Yp..l..K...bB..2C...K..O8e.v...."..C..
.s; .}Oj.....JC..-`@.gMXM..@M...41k.i.K..M.&.&.&.&.&.MdM.&.;..X5q..M.wM|o....3.s.{....MJf4.h>G..B...~$....w...WC.q.2..b.o..Hh.7|.... c..(.I......d|.1...8.8.8.x.q.1.X..*.U.W..d|.....f..4f...l..g'>..oUq4.....j.jU...
0000000: 7573 6520 4d49 4d45 3a3a 4261 7365 3634  use MIME::Base64
0000010: 3b24 783d 656e 636f 6465 5f62 6173 6536  ;$x=encode_base6
0000020: 3428 6a6f 696e 2727 2c3c 4441 5441 3e29  4(join'',<DATA>)
0000030: 3b70 7269 6e74 2065 7661 6c28 6062 6173  ;print eval(`bas
0000040: 6536 3420 2d44 3c3c 3c27 2478 277c 7a63  e64 -D<<<'$x'|zc
0000050: 6174 6029 2d3e 5b2d 3332 2b6f 7264 245f  at`)->[-32+ord$_
0000060: 5d2e 242f 666f 723c 3e3d 7e2f 2e2f 670a  ].$/for<>=~/./g.
0000070: 5f5f 454e 445f 5f0a 1f8b 0808 ff78 ec55  __END__......x.U
0000080: 0003 5f00 7594 5b72 eb20 0c40 b7c2 5f7e  .._.u.[r. .@.._~
0000090: da45 2858 b669 c4c3 089c a49d ee7f 1b17  .E(X.i..........
00000a0: 92b1 9df4 4a5f 96ce d180 3192 7f4e 9cc0  ....J_....1..N..
00000b0: e2e9 e384 374b e0a1 b818 8c87 7c69 68a9  ....7K......|ih.
00000c0: b1bc 8150 fd19 b361 3785 960d 9108 f62c  ...P...a7......,
00000d0: 61b6 18ca 9682 6f80 210c 3d4e 914b 8e69  a.....o.!.=N.K.i
00000e0: eefb 108e c524 c8ad 7646 76dc 5076 d3fc  .....$..vFv.Pv..
00000f0: 9701 17cc 8efb ae89 2a6f cbda e83d b4e7  ........*o...=..
0000100: 7c6f ab85 4fef 42ed d563 2532 5c62 6a31  |o..O.B..c%2\bj1
0000110: 4772 c383 0e6e 72c5 7c63 8e7b 1203 ee71  Gr...nr.|c.{...q
0000120: b91e bccc 190f 33c6 9a8f c4ad 8761 773b  ......3......aw;
0000130: 625c 31ec 19f6 43ec 5970 8f8d 6ca4 d84b  b\1...C.Yp..l..K
0000140: 18bd db62 42e6 cf32 43d8 ce84 4b05 da4f  ...bB..2C...K..O
0000150: 3865 8476 f4b7 8aa5 22bf de43 ff0a ed73  8e.v...."..C...s
0000160: 3b20 037d 4f6a b714 8c85 e44a 4384 a52d  ; .}Oj.....JC..-
0000170: 6040 1367 4d58 4d0c 9a40 4d8c 9a98 3431  `@.gMXM..@M...41
0000180: 6bc2 69e2 4b13 174d 9026 bc26 8226 a226  k.i.K..M.&.&.&.&
0000190: 9226 164d 644d b026 d43b af9a 5835 71d5  .&.MdM.&.;..X5q.
00001a0: c44d 1377 4d7c 6fd3 cdad a133 9a73 067b  .M.wM|o....3.s.{
00001b0: c1fe aeb9 4d4a 6634 c768 3e47 febf 42eb  ....MJf4.h>G..B.
00001c0: b2ad 7e24 bc19 b0fd 77d2 978c 5743 cf71  ..~$....w...WC.q
00001d0: 9a32 acf8 621e 6fc1 1e48 68fa 377c 96b1  .2..b.o..Hh.7|..
00001e0: 95f1 2063 94f1 28e3 49c6 b38c 9d8c bf64  .. c..(.I......d
00001f0: 7c91 31c9 d8cb 38c8 38ca 38c9 7891 7196  |.1...8.8.8.x.q.
0000200: 31cb 58b9 cb2a e355 c657 19df 647c 97f1  1.X..*.U.W..d|..
0000210: dec2 b666 babf 3466 ebdf e26c eff5 6727  ...f..4f...l..g'
0000220: 3efb f76f 5571 34e0 e9f7 1fe2 6a1f 6a55  >..oUq4.....j.jU
0000230: 0700 00                                  ...

要复制文件,执行:

xxd -r > 57413.pl

粘贴hexdump并按Enter,然后按Ctrl+ D

运行方式:

perl 57413.pl <<< 'Hello, World!'
LATIN CAPITAL LETTER H
LATIN SMALL LETTER E
LATIN SMALL LETTER L
LATIN SMALL LETTER L
LATIN SMALL LETTER O
COMMA
SPACE
LATIN CAPITAL LETTER W
LATIN SMALL LETTER O
LATIN SMALL LETTER R
LATIN SMALL LETTER L
LATIN SMALL LETTER D
EXCLAMATION MARK

以前的纯Perl版本,893字节

print[SPACE,'EXCLAMATION MARK','QUOTATION MARK',NUMBER.($s=" SIGN"),DOLLAR.$s,PERCENT.$s,AMPERSAND,APOSTROPHE,LEFT.($p=" PARENTHESIS"),RIGHT.$p,ASTERISK,PLUS.$s,COMMA,'HYPHEN-MINUS','FULL STOP',$d=SOLIDUS,($d="DIGIT ").ZERO,$d.ONE,$d.TWO,$d.THREE,$d.FOUR,$d.FIVE,$d.SIX,$d.SEVEN,$d.EIGHT,$d.NINE,COLON,SEMICOLON,"LESS-THAN$s",EQUALS.$s,"GREATER-THAN$s",'QUESTION MARK','COMMERCIAL AT',($b=($a=LATIN)." CAPITAL ".($l="LETTER ")).A,$b.B,$b.C,$b.D,$b.E,$b.F,$b.G,$b.H,$b.I,$b.J,$b.K,$b.L,$b.M,$b.N,$b.O,$b.P,$b.Q,$b.R,$b.S,$b.T,$b.U,$b.V,$b.W,$b.X,$b.Y,$b.Z,'LEFT SQUARE '.($e=BRACKET),"REVERSE $d","RIGHT SQUARE $e",'CIRCUMFLEX ACCENT','LOW LINE','GRAVE ACCENT',($m="$a SMALL $l ").A,$m.B,$m.C,$m.D,$m.E,$m.F,$m.G,$m.H,$m.I,$m.J,$m.K,$m.L,$m.M,$m.N,$m.O,$m.P,$m.Q,$m.R,$m.S,$m.T,$m.U,$m.V,$m.W,$m.X,$m.Y,$m.Z,"LEFT CURLY $e",'VERTICAL LINE',"RIGHT CURLY $e",TILDE]->[-32+ord$_].$/for<>=~/./g

5

AWK - 794 739

     1个拉丁文大写字母B
     2个拉丁文大写字母E
     3个拉丁文大写字母G
     4拉丁文大写字母I
     5个拉丁文大写字母N
     6左卷曲支架 
     7个拉丁文小写字母S
     8个拉丁文小写字母P
     9拉丁文小写字母L
    10拉丁文小写字母I
    11拉丁文小写字母T
    12左上肢 
    13引号 
    14拉丁文小写字母I
    15逗号 
    16个拉丁文大写字母L
    17拉丁文小写字母V
    18 COMMA 
    19个拉丁文大写字母S
    20拉丁文小写字母V
    21逗号 
    22拉丁文小写字母A
    23拉丁文小写字母X
    24个逗号 
    25个圆音 
    26拉丁文小写字母X
    27逗号 
    28左方括号 
    29拉丁文小写字母X
    30个逗号 
    31拉丁文大写字母Q
    32个逗号 
    33拉丁文大写字母O
    34 COMMA 
    35拉丁文小写字母T
    36拉丁文大写字母K
    37 COMMA 
    38拉丁文小写字母C
    39拉丁文大写字母K
    40个逗号 
    41拉丁文大写字母V
    42个逗号 
    43拉丁文小写字母Q
    44拉丁文小写字母X
    45逗号 
    46拉丁文小写字母G
    47逗号 
    48拉丁文大写字母I
    49逗号 
    50个拉丁文小写字母W
    51拉丁文小写字母U
    52个逗号 
    53拉丁文大写字母X
    54 COMMA 
    55拉丁文小写字母B
    56拉丁文小写字母Y
    57逗号 
    58拉丁文小写字母B
    59左卷曲的支架 
    60个逗号 
    61拉丁文小写字母B
    62拉丁文小写字母Z
    63 COMMA 
    64拉丁文小写字母B
    65拉丁文小写字母D
    66逗号 
    67拉丁文小写字母B
    68拉丁文小写字母P
    69逗号 
    70拉丁文小写字母B
    71拉丁文小写字母R
    72个逗号 
    73拉丁文小写字母B
    74正确卷曲的支架 
    75 COMMA 
    76拉丁文小写字母B
    77拉丁文小写字母K
    78逗号 
    79拉丁文小写字母B
    80拉丁文小写字母L
    81逗号 
    82拉丁文小写字母B
    83拉丁文小写字母O
    84 COMMA 
    85拉丁文小写字母E
    86 COMMA 
    87拉丁文大写字母P
    88 COMMA 
    89拉丁文大写字母R
    90拉丁文小写字母X
    91逗号 
    92低线 
    93拉丁文小写字母X
    94逗号 
    95拉丁文大写字母J
    96拉丁文小写字母X
    97 COMMA 
    98拉丁文大写字母U
    99拉丁文小写字母V
   100个逗号 
   101个拉丁文大写字母M
   102波浪号 
   103 COMMA 
   104空间 
   105拉丁文小写字母T
   106重音 
   107拉丁文大写字母Y
   108 COMMA 
   109拉丁文大写字母Z
   110拉丁文大写字母X
   111逗号 
   112拉丁文小写字母C
   113重音 
   114拉丁文大写字母Y
   115 COMMA 
   116拉丁文大写字母N
   117反实线 
   118反向实心 
   119逗号 
   120垂直线 
   121拉丁文小写字母S
   122 COMMA 
   123拉丁文小写字母M
   124反实线 
   125 RESOLE SOLIDUS 
   126 COMMA 
   127空间 
   128拉丁文小写字母T
   129拉丁文小写字母H
   130拉丁文大写字母Y
   131 COMMA 
   132拉丁文大写字母T
   133拉丁文小写字母S
   134 COMMA 
   135拉丁文小写字母C
   136拉丁文小写字母H
   137拉丁文大写字母Y
   138 COMMA 
   139拉丁文小写字母F
   140空间 
   141拉丁文大写字母H
   142拉丁文大写字母Y
   143个拉丁文大写字母P
   144个拉丁文大写字母H
   145个拉丁文大写字母E
   146拉丁文大写字母N
   147减号 
   148拉丁文大写字母M
   149拉丁文大写字母I
   150个拉丁文大写字母N
   151拉丁文大写字母U
   152拉丁文大写字母S
   153空间 
   154个拉丁文大写字母G
   155个拉丁文大写字母R
   156拉丁文大写字母E
   157个拉丁文大写字母A
   158拉丁文大写字母T
   159拉丁文大写字母E
   160拉丁文大写字母R
   161减号 
   162拉丁文大写字母T
   163个拉丁文大写字母H
   164个拉丁文大写字母A
   165拉丁文大写字母N
   166空间 
   167拉丁文大写字母P
   168个拉丁文大写字母A
   169拉丁文大写字母R
   170拉丁文大写字母E
   171拉丁文大写字母N
   172拉丁文大写字母T
   173个拉丁文大写字母H
   174个拉丁文大写字母E
   175拉丁文大写字母S
   176拉丁文大写字母I
   177拉丁文大写字母S
   178空间 
   179个拉丁文大写字母E
   180个拉丁文大写字母X
   181个拉丁文大写字母C
   182个拉丁文大写字母L
   183个拉丁文大写字母A
   184个拉丁文大写字母M
   185个拉丁文大写字母A
   186个拉丁文大写字母T
   187拉丁文大写字母I
   188拉丁文大写字母O
   189拉丁文大写字母N
   190空间 
   191个拉丁文大写字母C
   192个拉丁文大写字母O
   193个拉丁文大写字母M
   194拉丁文大写字母M
   195拉丁文大写字母E
   196拉丁文大写字母R
   197拉丁文大写字母C
   198拉丁文大写字母I
   199个拉丁文大写字母A
   200个拉丁文大写字母L
   201空间 
   202拉丁文大写字母C
   203拉丁文大写字母I
   204拉丁文大写字母R
   205拉丁文大写字母C
   206拉丁文大写字母U
   207拉丁文大写字母M
   208个拉丁文大写字母F
   209拉丁文大写字母L
   210拉丁文大写字母E
   211拉丁文大写字母X
   212空间 
   213拉丁文大写字母A
   214个拉丁文大写字母P
   215拉丁文大写字母O
   216个拉丁文大写字母S
   217拉丁文大写字母T
   218个拉丁文大写字母R
   219拉丁文大写字母O
   220个拉丁文大写字母P
   221拉丁文大写字母H
   222拉丁文大写字母E
   223空间 
   224拉丁文大写字母S
   225个拉丁文大写字母E
   226拉丁文大写字母M
   227拉丁文大写字母I
   228拉丁文大写字母C
   229拉丁文大写字母O
   230拉丁文大写字母L
   231拉丁文大写字母O
   232拉丁文大写字母N
   233空间 
   234个拉丁文大写字母A
   235拉丁文大写字母M
   236拉丁文大写字母P
   237拉丁文大写字母E
   238拉丁文大写字母R
   239拉丁文大写字母S
   240个拉丁文大写字母A
   241拉丁文大写字母N
   242拉丁文大写字母D
   243空间 
   244个拉丁文大写字母L
   245拉丁文大写字母E
   246拉丁文大写字母S
   247拉丁文大写字母S
   248减号 
   249拉丁文大写字母T
   250个拉丁文大写字母H
   251个拉丁文大写字母A
   252拉丁文大写字母N
   253空间 
   254拉丁文大写字母Q
   255拉丁文大写字母U
   256个拉丁文大写字母O
   257拉丁文大写字母T
   258个拉丁文大写字母A
   259拉丁文大写字母T
   260拉丁文大写字母I
   261拉丁文大写字母O
   262拉丁文大写字母N
   263空间 
   264个拉丁文大写字母V
   265拉丁文大写字母E
   266拉丁文大写字母R
   267拉丁文大写字母T
   268拉丁文大写字母I
   269拉丁文大写字母C
   270个拉丁文大写字母A
   271拉丁文大写字母L
   272空间 
   273拉丁文大写字母Q
   274拉丁文大写字母U
   275拉丁文大写字母E
   276拉丁文大写字母S
   277拉丁文大写字母T
   278拉丁文大写字母I
   279拉丁文大写字母O
   280拉丁文大写字母N
   281空间 
   282个拉丁文大写字母A
   283拉丁文大写字母S
   284拉丁文大写字母T
   285个拉丁文大写字母E
   286拉丁文大写字母R
   287拉丁文大写字母I
   288个拉丁文大写字母S
   289拉丁文大写字母K
   290空间 
   291个拉丁文大写字母C
   292拉丁文大写字母A
   293拉丁文大写字母P
   294拉丁文大写字母I
   295拉丁文大写字母T
   296拉丁文大写字母A
   297拉丁文大写字母L
   298空间 
   299拉丁文大写字母S
   300个拉丁文大写字母O
   301拉丁文大写字母L
   302拉丁文大写字母I
   303拉丁文大写字母D
   304拉丁文大写字母U
   305拉丁文大写字母S
   306空间 
   307个拉丁文大写字母B
   308拉丁文大写字母R
   309拉丁文大写字母A
   310拉丁文大写字母C
   311拉丁文大写字母K
   312拉丁文大写字母E
   313拉丁文大写字母T
   314空间 
   315拉丁文大写字母R
   316拉丁文大写字母E
   317拉丁文大写字母V
   318拉丁文大写字母E
   319拉丁文大写字母R
   320个拉丁文大写字母S
   321拉丁文大写字母E
   322空间 
   323拉丁文大写字母P
   324拉丁文大写字母E
   325拉丁文大写字母R
   326拉丁文大写字母C
   327拉丁文大写字母E
   328拉丁文大写字母N
   329拉丁文大写字母T
   330空间 
   331拉丁文大写字母A
   332拉丁文大写字母C
   333拉丁文大写字母C
   334拉丁文大写字母E
   335拉丁文大写字母N
   336拉丁文大写字母T
   337空间 
   338拉丁文大写字母L
   339拉丁文大写字母E
   340拉丁文大写字母T
   341拉丁文大写字母T
   342拉丁文大写字母E
   343拉丁文大写字母R
   344空间 
   345拉丁文大写字母D
   346拉丁文大写字母O
   347拉丁文大写字母L
   348拉丁文大写字母L
   349拉丁文大写字母A
   350个拉丁文大写字母R
   351空间 
   352拉丁文大写字母E
   353拉丁文大写字母Q
   354拉丁文大写字母U
   355拉丁文大写字母A
   356拉丁文大写字母L
   357拉丁文大写字母S
   358空间 
   359拉丁文大写字母S
   360拉丁文大写字母Q
   361拉丁文大写字母U
   362拉丁文大写字母A
   363拉丁文大写字母R
   364拉丁文大写字母E
   365空间 
   366拉丁文大写字母N
   367拉丁文大写字母U
   368拉丁文大写字母M
   369个拉丁文大写字母B
   370个拉丁文大写字母E
   371拉丁文大写字母R
   372空间 
   373拉丁文大写字母D
   374拉丁文大写字母I
   375拉丁文大写字母G
   376拉丁文大写字母I
   377拉丁文大写字母T
   378空间 
   379拉丁文大写字母R
   380拉丁文大写字母I
   381拉丁文大写字母G
   382拉丁文大写字母H
   383拉丁文大写字母T
   384空间 
   385拉丁文大写字母T
   386拉丁文大写字母H
   387拉丁文大写字母R
   388个拉丁文大写字母E
   389拉丁文大写字母E
   390空间 
   391个拉丁文大写字母C
   392拉丁文大写字母O
   393拉丁文大写字母L
   394拉丁文大写字母O
   395拉丁文大写字母N
   396空间 
   397拉丁文大写字母T
   398拉丁文大写字母I
   399拉丁文大写字母L
   400拉丁文大写字母D
   401拉丁文大写字母E
   402空间 
   403拉丁文大写字母C
   404拉丁文大写字母O
   405拉丁文大写字母M
   406拉丁文大写字母M
   407拉丁文大写字母A
   408空间 
   409个拉丁文大写字母C
   410拉丁文大写字母U
   411拉丁文大写字母R
   412拉丁文大写字母L
   413拉丁文大写字母Y
   414空间 
   415拉丁文大写字母S
   416拉丁文大写字母P
   417拉丁文大写字母A
   418拉丁文大写字母C
   419拉丁文大写字母E
   420空间 
   421拉丁文大写字母S
   422拉丁文大写字母M
   423拉丁文大写字母A
   424拉丁文大写字母L
   425拉丁文大写字母L
   426空间 
   427拉丁文大写字母S
   428拉丁文大写字母E
   429拉丁文大写字母V
   430拉丁文大写字母E
   431拉丁文大写字母N
   432空间 
   433拉丁文大写字母E
   434拉丁文大写字母I
   435拉丁文大写字母G
   436拉丁文大写字母H
   437拉丁文大写字母T
   438空间 
   439拉丁文大写字母G
   440拉丁文大写字母R
   441拉丁文大写字母A
   442拉丁文大写字母V
   443拉丁文大写字母E
   444空间 
   445拉丁文大写字母L
   446拉丁文大写字母A
   447拉丁文大写字母T
   448拉丁文大写字母I
   449拉丁文大写字母N
   450空间 
   451拉丁文大写字母N
   452拉丁文大写字母I
   453拉丁文大写字母N
   454拉丁文大写字母E
   455空间 
   456拉丁文大写字母F
   457拉丁文大写字母O
   458拉丁文大写字母U
   459拉丁文大写字母R
   460空间 
   461拉丁文大写字母P
   462拉丁文大写字母L
   463拉丁文大写字母U
   464拉丁文大写字母S
   465空间 
   466个拉丁文大写字母F
   467拉丁文大写字母I
   468拉丁文大写字母V
   469拉丁文大写字母E
   470空间 
   471拉丁文大写字母L
   472拉丁文大写字母I
   473拉丁文大写字母N
   474拉丁文大写字母E
   475空间 
   476拉丁文大写字母L
   477拉丁文大写字母E
   478拉丁文大写字母F
   479拉丁文大写字母T
   480空间 
   481个拉丁文大写字母S
   482拉丁文大写字母T
   483拉丁文大写字母O
   484拉丁文大写字母P
   485空间 
   486拉丁文大写字母M
   487拉丁文大写字母A
   488拉丁文大写字母R
   489拉丁文大写字母K
   490空间 
   491拉丁文大写字母F
   492拉丁文大写字母U
   493拉丁文大写字母L
   494拉丁文大写字母L
   495空间 
   496拉丁文大写字母S
   497拉丁文大写字母I
   498拉丁文大写字母G
   499拉丁文大写字母N
   500空间 
   501拉丁文大写字母Z
   502拉丁文大写字母E
   503拉丁文大写字母R
   504拉丁文大写字母O
   505空间 
   506拉丁文大写字母T
   507拉丁文大写字母W
   508拉丁文大写字母O
   509空间 
   510拉丁文大写字母O
   511拉丁文大写字母N
   512个拉丁文大写字母E
   513空间 
   514拉丁文大写字母L
   515拉丁文大写字母O
   516拉丁文大写字母W
   517空间 
   518个拉丁文大写字母S
   519拉丁文大写字母I
   520个拉丁文大写字母X
   521空间 
   522拉丁文大写字母A
   523拉丁文大写字母T
   524引号 
   525 COMMA 
   526拉丁文小写字母W
   527右上肢 
   第528章 
   529拉丁文小写字母Y
   530等号 
   531拉丁文小写字母W
   532左方括号 
   533数字二 
   534右方括号 
   第535章 
   536拉丁文小写字母F
   537拉丁文小写字母O
   538拉丁文小写字母R
   539左心病 
   540拉丁文小写字母X
   541等号 
   542拉丁文小写字母W
   543左方括号 
   544数字一 
   545右方括号 
   第546章 
   547拉丁文小写字母I
   548加号 
   549加号 
   550小于标牌 
   551数字二 
   552数字六 
   第553章 
   554拉丁文小写字母X
   555等号 
   556拉丁文小写字母X
   557引号 
   558拉丁文小写字母N
   559拉丁文大写字母W
   560右方括号 
   第561章 
   562引号 
   563右上肢 
   564拉丁文小写字母Y
   565等号 
   566拉丁文小写字母Y
   567引号 
   568拉丁文小写字母N
   569拉丁文小写字母J
   570右方支架 
   571 COMMA 
   572引号 
   第573章 
   574拉丁文小写字母F
   575拉丁文小写字母O
   576拉丁文小写字母R
   577左心病 
   578拉丁文小写字母S
   579拉丁文小写字母P
   580拉丁文小写字母L
   581拉丁文小写字母I
   582拉丁文小写字母T
   583左上肢 
   584拉丁文小写字母X
   585空间 
   586拉丁文小写字母Y
   587空间 
   588拉丁文小写字母W
   589左方括号 
   590数字三 
   591右方括号 
   第592章 
   593拉丁文小写字母B
   594逗号 
   595引号 
   596逗号 
   597引号 
   598右上肢 
   第599章 
   600拉丁文小写字母J
   601加号 
   602加号 
   603小于标牌 
   604数字一 
   605数字二 
   606数字六 
   第607章 
   608个拉丁文大写字母F
   609拉丁文大写字母S
   610等号 
   611低线 
   612正确的家长 
   613拉丁文小写字母D
   614左方括号 
   615拉丁文小写字母S
   616拉丁文小写字母P
   617拉丁文小写字母R
   618拉丁文小写字母I
   619拉丁文小写字母N
   620拉丁文小写字母T
   621拉丁文小写字母F
   第622节 
   623引号 
   624百分号 
   625拉丁文小写字母C
   626引号 
   627 COMMA 
   628拉丁小写字母J
   629正确的理解 
   630右方括号 
   631等号 
   632拉丁小写字母J
   633正确卷曲的支架 
   634左卷曲的支架 
   635拉丁文小写字母F
   636拉丁文小写字母O
   637拉丁文小写字母R
   638左上肢 
   639拉丁文小写字母K
   640等号 
   641数字零 
   第642章 
   643拉丁文小写字母K
   644加号 
   645加号 
   646少号 
   647拉丁文大写字母N
   648拉丁文大写字母F
   第649章 
   650拉丁文小写字母P
   651拉丁文小写字母R
   652拉丁文小写字母I
   653拉丁文小写字母N
   654拉丁文小写字母T
   655空间 
   656拉丁文小写字母I
   657相等的标志 
   658低线 
   659右上肢 
   660拉丁文小写W
   661拉丁文小写字母H
   662拉丁文小写字母I
   663拉丁文小写字母L
   664拉丁文小写字母E
   665左上肢 
   666拉丁文小写字母I
   667加号 
   668加号 
   669小于标牌 
   670拉丁文小写字母S
   671拉丁文小写字母P
   672拉丁文小写字母L
   673拉丁文小写字母I
   674拉丁文小写字母T
   675左心病 
   676拉丁文小写字母B
   677左方括号 
   678拉丁文小写字母D
   679左方括号 
   680美元符号 
   681拉丁文小写字母K
   682右方支架 
   683减号 
   684数字三 
   685数字一 
   686右方支架 
   687 COMMA 
   688拉丁文小写字母Q
   689右上肢 
   690右上肢 
   691拉丁文小写字母P
   692拉丁文小写字母R
   693拉丁文小写字母I
   694拉丁文小写字母N
   695拉丁文小写字母T
   696拉丁文小写字母F
   697左上肢 
   698拉丁文小写字母Z
   699相等的标志 
   700拉丁文小写字母W
   701左方括号 
   702拉丁文小写字母D
   703左方括号 
   704拉丁文小写字母Q
   705左方括号 
   706拉丁文小写字母I
   707右方括号 
   708右方支架 
   709减号- 
   710数字六 
   711数字九 
   712右方支架 
   713右上肢 
   714引号 
   715空间 
   716引号 
   717左上肢 
   718拉丁文小写字母Z
   719波浪号 
   720 SOLIDUS 
   721拉丁文大写字母T
   722拉丁文大写字母T
   723 SOLIDUS 
   724问号 
   725拉丁文小写字母T
   726拉丁文小写字母O
   727拉丁文小写字母U
   728拉丁文小写字母P
   729拉丁文小写字母P
   730拉丁文小写字母E
   731拉丁文小写字母R
   732左上肢 
   733美元符号 
   734拉丁文小写字母K
   735右上肢 
   736冒号 
   737低线 
   738正确的家长 
   739正确的卷曲的支架

开玩笑的; D

BEGIN{split("i,Lv,Sv,ax,^x,[x,Q,O,tK,cK,V,qx,g,I,wu,X,by,b{,bz,bd,bp,br,b},bk,bl,bo,e,P,Rx,_x,Jx,Uv,M~, t`Y,ZX,c`Y,N\\,|s,m\\, thY,Ts,chY,f HYPHEN-MINUS GREATER-THAN PARENTHESIS EXCLAMATION COMMERCIAL CIRCUMFLEX APOSTROPHE SEMICOLON AMPERSAND LESS-THAN QUOTATION VERTICAL QUESTION ASTERISK CAPITAL SOLIDUS BRACKET REVERSE PERCENT ACCENT LETTER DOLLAR EQUALS SQUARE NUMBER DIGIT RIGHT THREE COLON TILDE COMMA CURLY SPACE SMALL SEVEN EIGHT GRAVE LATIN NINE FOUR PLUS FIVE LINE LEFT STOP MARK FULL SIGN ZERO TWO ONE LOW SIX AT",w);x=w[1];for(y=w[2];C++<26;x=x"nW],")y=y"nj],";for(split(x y w[3],b,",");j++<126;FS=_)d[sprintf("%c",j)]=j}{for(k=0;k++<NF;print i=_)while(i++<split(b[d[$k]-31],q))printf(z=w[d[q[i]]-69])" "(z~/TT/?toupper($k):_)}

与stdin / stdout一起使用。

更“可读”:

BEGIN{

  # This string (508 bytes) holds a representation of the character names in 
  # the right order, plus a list of the used words.

    split("i,Lv,Sv,ax,^x,[x,Q,O,tK,cK,V,qx,g,I,wu,X,by,b{,bz,bd,bp,br,b},bk,bl,bo,
    e,P,Rx,_x,Jx,Uv,M~, t`Y,ZX,c`Y,N\\,|s,m\\, thY,Ts,chY,f HYPHEN-MINUS GREATER-T
    HAN PARENTHESIS EXCLAMATION COMMERCIAL CIRCUMFLEX APOSTROPHE SEMICOLON AMPERSA
    ND LESS-THAN QUOTATION VERTICAL QUESTION ASTERISK CAPITAL SOLIDUS BRACKET REVE
    RSE PERCENT ACCENT LETTER DOLLAR EQUALS SQUARE NUMBER DIGIT RIGHT THREE COLON
    TILDE COMMA CURLY SPACE SMALL SEVEN EIGHT GRAVE LATIN NINE FOUR PLUS FIVE LINE
     LEFT STOP MARK FULL SIGN ZERO TWO ONE LOW SIX AT",w);

  # Since the letters each appear 26 times I construct that part at runtime.
  # The array b will hold the coded combinations of which words need to
  # be printed for each input character.

    x=w[1];
    for(y=w[2];C++<26;x=x"nW],")
        y=y"nj],";

  # The array d is an ASCIICodeFromChar function replacement.
  # I set the field separator to empty, so each character of the input is
  # an input field. That's why using a BEGIN part was mandatory.

    for(split(x y w[3],b,",");j++<126;FS=_)
        d[sprintf("%c",j)]=j
}

  # Here I go through the element of b that matches the input and print
  # the requested words, using the input to produce a capital letter if
  # needed. I excluded these from the word list to save another 26 bytes

{
    for(k=0;k++<NF;print i=_)
        while(i++<split(b[d[$k]-31],q))
            printf(z=w[d[q[i]]-69])" "(z~/TT/?toupper($k):_)
}

5

C ++ 11,739字节

#include<iostream>
#define D,"DIGIT "
#define G" SIGN",
int main(){std::string a=" BRACKET",s="SQUARE"+a,c="CURLY"+a,t="TION MARK",p="PARENTHESIS",l="LEFT ",r="RIGHT ",x="LATIN ",y="L LETTER ",z[]{"SPACE","EXCLAMA"+t,"QUOTA"+t,"NUMBER"G"DOLLAR"G"PERCENT"G"AMPERSAND","APOSTROPHE",l+p,r+p,"ASTERISK","PLUS"G"COMMA","HYPHEN-MINUS","FULL STOP","SOLIDUS"D"ZERO"D"ONE"D"TWO"D"THREE"D"FOUR"D"FIVE"D"SIX"D"SEVEN"D"EIGHT"D"NINE","COLON","SEMICOLON","LESS-THAN"G"EQUALS"G"GREATER-THAN"G"QUES"+t,"COMMERCIAL AT",l+s,"REVERSE SOLIDUS",r+s,"CIRCUMFLEX ACCENT","LOW LINE","GRAVE ACCENT",l+c,"VERTICAL LINE",r+c,"TILDE"};getline(std::cin,s);for(char c:s)std::cout<<(c<65?z[c-32]:c<91?x+"CAPITA"+y+c:(c-=32,c<65?z[c-26]:c<91?x+"SMAL"+y+c:z[c-52]))+"\n";}

基于sweerpotato的解决方案,但进行了大量修改。


做得好:〜)!
sweerpotato

5

C,644656

完整程序,从标准输入读取

测试Ideone

这是我的JavaScript对C语言的移植。C语言擅长将单个字符作为数字来处理(不需要.toUpperCase等),但在字符串处理方面较弱。

char*s,*p,*q,b[999],*d=b+99,c,*l[129];
main(k){for(k=32,p="/SPACE/EXCLAMAaQUOTAaNUMBERbDOLLARbPERCENTbAMPERSAND/APOSTROPHEdcecASTERISK/PLUSbCOMMA/HYPHEN-MINUS/FULL STOP/hiZEROiONEiTWOiTHREEiFOURiFIVEiSIXiSEVENiEIGHTiNINE/gSEMIgLESSnbEQUALSbGREATERnbQUESaCOMMERCIAL ATdkfREVERSE h/ekfCIRCUMFLEXj/LOWmGRAVEjdlfVERTICALmelfTILDE/";
c=*p;p++)c>96?q?(p=q,q=0):(q=p,p=strchr("aTION MARK/b SIGN/cPARENTHESIS/d/LEFT eRIGHT f BRACKET/gCOLON/hSOLIDUSi/DIGIT j ACCENTkSQUARElCURLYm LINE/n-THANz",c)):c-47?*d++=c:(*d++=0,l[k++]=d);
for(;~(k=getchar());puts(k<65?l[k]:(k&31)<27?b:l[k<97?k-26:k-52]))sprintf(b,"LATIN %s LETTER %c",k<91?"CAPITAL":"SMALL",k&95);}

少打高尔夫球

char *all = "/SPACE/EXCLAMAaQUOTAaNUMBERbDOLLARbPERCENTbAMPERSAND/APOSTROPHEdcecASTERISK/PLUSbCOMMA/HYPHEN-MINUS/FULL STOP/hiZEROiONEiTWOiTHREEiFOURiFIVEiSIXiSEVENiEIGHTiNINE/gSEMIgLESSnbEQUALSbGREATERnbQUESaCOMMERCIAL ATdkfREVERSE h/ekfCIRCUMFLEXj/LOWmGRAVEjdlfVERTICALmelfTILDE/";
char *subs = "aTION MARK/b SIGN/cPARENTHESIS/d/LEFT eRIGHT f BRACKET/gCOLON/hSOLIDUSi/DIGIT j ACCENTkSQUARElCURLYm LINE/n-THANz";

main(int k)
{
    char c, *s, *p, *q=0, 
    b[999], // work buffer
    *d = b+99, // first part of buffer is used later
    *l[129]; // characters descriptions (used 32 to 126)

    // Uncompress the descriptions of all char except letters
    for(k = 32, p = all; c = *p; ++p)
    {
       c >= 'a' // substitution word are marked as lowercase letters
        ? q  
           ? (p = q, q = 0)
           : (q = p, p = strchr(subs, c))
        : c != '/'
           ? *d++ = c 
           : (*d++ = 0, l[k++] = d); // end char description
    }
    // Scan the input string and print each char description
    for(; (k=getchar()) != -1; )
    {
       sprintf(b,"LATIN %s LETTER %c", k<91 ? "CAPITAL":"SMALL", k & 95);
       puts( k<65 ? l[k] : k<91 ? b : k<97 ? l[k-26] : k<123 ? b : l[k-52]);
    }
}

4

普通Lisp(SBCL), 52 79

(map()(lambda(y)(format t"~:@(~A~)~%"(substitute #\  #\_(char-name y))))(read))

这是内置的并且与实现有关,因此您在选择接受的答案时可能希望忽略它。不幸的是,这还不足以击败Python。更新的版本符合预期的输出(我必须用空格替换下划线)。

CL-USER> (map()(lambda(y)(format t"~:@(~A~)~%"(substitute #\  #\_(char-name y))))(read))
"(λ(r)(* 2 ᴨ r))"
LEFT PARENTHESIS
GREEK SMALL LETTER LAMDA
LEFT PARENTHESIS
LATIN SMALL LETTER R
RIGHT PARENTHESIS
LEFT PARENTHESIS
ASTERISK
SPACE
DIGIT TWO
SPACE
GREEK LETTER SMALL CAPITAL PI
SPACE
LATIN SMALL LETTER R
RIGHT PARENTHESIS
RIGHT PARENTHESIS


4

C ++ 14、1043 1000 998 996 972字节

C ++ 14中的怪异解决方案:

#include<iostream>
#include<map>
#define b cout
#define d string
#define e },{
using namespace std;char l='\n';d s[]{"DIGIT ","LATIN CAPITAL LETTER ","LATIN SMALL LETTER "};map<char, d> m{{' ',"SPACE"e'!',"EXCLAMATION MARK"e'\"',"QUOTATION MARK"e'#',"NUMBER SIGN"e'$',"DOLLAR SIGN"e'%',"PERCENT SIGN"e'&',"AMPERSAND"e'\'',"APOSTROPHE"e'(',"LEFT PARENTHESIS"e')',"RIGHT PARENTHESIS"e'*',"ASTERISK"e'+',"PLUS SIGN"e',',"COMMA"e'-',"HYPHEN-MINUS"e'.',"FULL STOP"e'/',"SOLIDUS"e':',"COLON"e';',"SEMICOLON"e'<',"LESS-THAN SIGN"e'=',"EQUALS SIGN"e'>',"GREATER-THAN SIGN"e'?',"QUESTION MARK"e'@',"COMMERCIAL AT"e'[',"LEFT SQUARE BRACKET"e'\\',"REVERSE SOLIDUS"e']',"RIGHT SQUARE BRACKET"e'^',"CIRCUMFLEX ACCENT"e'_',"LOW LINE"e'`',"GRAVE ACCENT"e'{',"LEFT CURLY BRACKET"e'|',"VERTICAL LINE"e'}',"RIGHT CURLY BRACKET"e'~',"TILDE"}};int main(){d str;getline(cin,str);for(char c:str){islower(c)?b<<s[2]<<(char)(c-32):isupper(c)?b<<s[1]<<c:isdigit(c)?b<<*s<<c:b<<m.at(c);b<<l;}}

感谢kirbyfan64sos打高尔夫球的两个字节


你能*s代替s[0]吗?
kirbyfan64sos

当然可以!完全错过了
sweerpotato

3

果酱,517

l{i32-["SPACE""EXCLAMA""TION MARK":T+"QUOTA"T+"NUMBER DOLLAR PERCENT"{S/" SIGN"am*~}:H~"AMPERSAND""APOSTROPHE""LEFT PARENTHESIS":L"RIGHT ":R1$5>+"ASTERISK""PLUS"H"COMMA""HYPHEN-MINUS""FULL STOP""SOLIDUS":D"DIGIT "a"ZERO ONE TWO THREE FOUR FIVE SIX SEVEN EIGHT NINE"S/m*~"COLON""SEMI"1$+"LESS-THAN EQUALS GREATER-THAN"H"QUES"T+"COMMERCIAL AT""CAPITA"{["LATIN "\"L LETTER "]a'[,65>m*~L5<}:Z~"SQUARE BRACKET":Q+"REVERSE "D+RQ+"CIRCUMFLEX ACCENT""LOW LINE""GRAVE"2$A>+"SMAL"Z"CURLY"33$B>+:C+"VERTICAL LINE"RC+"TILDE"]=N}/

在线版

我尝试了不同的解决方案,但是简单地将所有名称存储在一个巨大的数组中似乎是最有效的。

顺便说一句,这是我第一个真正的CJam程序。


3

C ++ 14 716 706 704

#include<iostream>
char*q,x,b[584],*t=b,a[]=R"(space}exclamation|mark}quot"-number|sign}dolla!apercent!mam"%sand}apostrophe}left|par%3hesis}righ"Wasterisk}plus*<comma}hy)#n{minus}full|stop}solid"Ldigit|zero!Tone!Gtw"kthre#&four!Uiv#&six!Heve>^!_e6r!ani,1colon}semi!Fless{than8Eequal:$grea<s$2quesMj>EJoial|at}lQ9n|capit"?let('|Jes+\re|bracket}r5urse|C5M?%2circumflex|acXR}low|l:bgrave#'0=smaNy0+curly*s/Ytic4z)$/\$itilde)",*s=a;int c,z,l='{';int main(){for(;x=*s++;)if(z=x-32,x>96)*t++=x<l?z:"- "[x%l];else for(c=z*95+*s++-32,q=t-c/13,x=3+c%13;x--;)*t++=*q++;while(std::cin.get(x)){for(s=b,z=0,c=x<65?x-32:x<91?z=33:x<97?x-57:x<l?z=40:x-82;c--;)while(*s++);auto&o=std::cout<<s;(z?o.put(x&~32):o)<<"\n";}}

现场版

带有一些空格:

#include <iostream>

// a is compressed using an LZ like compression scheme
char *q, x, b[584],
    *t = b,
    a[] =
        R"(space}exclamation|mark}quot"-number|sign}dolla!apercent!mam"%sand}apostrophe}left|par%3hesis}righ"Wasterisk}plus*<comma}hy)#n{minus}full|stop}solid"Ldigit|zero!Tone!Gtw"kthre#&four!Uiv#&six!Heve>^!_e6r!ani,1colon}semi!Fless{than8Eequal:$grea<s$2quesMj>EJoial|at}lQ9n|capit"?let('|Jes+\re|bracket}r5urse|C5M?%2circumflex|acXR}low|l:bgrave#'0=smaNy0+curly*s/Ytic4z)$/\$itilde)",
    *s = a;

int c, z, l = '{';

int main() {
    // Decompress from a into b
    for (; x = *s++;)
        if (z = x - 32, x > 96)
            *t++ = x < l ? z : "- "[x % l];
        else
            for (c = z * 95 + *s++ - 32, q = t - c / 13, x = 3 + c % 13; x--;) *t++ = *q++;

    // Process input a char at a time, performing a lookup into b for the c'th null separated string
    while (std::cin.get(x)) {
        for (s = b, z = 0,
            c = x < 65 ? x - 32 : x < 91 ? z = 33 : x < 97 ? x - 57 : x < l ? z = 40 : x - 82;
             c--;)
            while (*s++)
                ;
        auto& o = std::cout << s;
        (z ? o.put(x & ~32) : o) << "\n";
    }
}

压缩后的字符串a解压缩为:

}} ||}固相线}数字|零}数字|一}数字|两个}数字|三}数字|四}数字|五}数字|六}数字|七}数字|八}数字|九}冒号}分号}小于{符号}等于|符号}更大{大于|符号}问题|标记}商业|在}拉丁语|资本|字母|}左|方|括号}反向|固结}右|方|括号}抑扬音|重音}下|线}重音|重音|拉丁语|小|字母|}左|弯曲|括号}垂直|线}右|弯曲|括号}波浪线

和解压缩过程中}被替换\0|(空间),并{-和小写字母被转换成大写。

字符串是LZ样式的压缩形式,可以是文字形式,也可以是[a-~]两个字符编码的偏移量/长度,以匹配字符串中较早的位置。


3

Clojure,56个字节

(doseq[c(read-line)](println(Character/getName(int c))))

受@peter的答案启发。将Clojure用于Java互操作。


3

Perl-894字节

手工精心打造。第一次在Perl打高尔夫球,因此任何技巧都值得赞赏。

$_=$ARGV[0];s/(.)/$1\n/g;s/([A-Z])/& CAPITAL' $1/g;s/([a-z])/& SMALL' \U$1/g;s/,/COMMA/g;s/& /LATIN /g;s/' / LETT, /g;s/&/AMP,SAND/g;s/'/APOSTROPHE/g;s/ \n/SPACE\n/g;s/\*/AST,ISK/g;s/-/HYPHEN-MINUS/g;s/\./FULL STOP/g;s/@/COMM,CIAL AT/g;s/~/TILDE/g;s/:/&/g;s/;/SEMI&/g;s/&/COLON/g;s/\|/V,TICAL&/g;s/_/LOW&/g;s/&/ LINE/g;s/\^/CIRCUMFLEX&/g;s/`/GRAVE&/g;s/&/ ACCENT/g;s/\//&/g;s/\\/REV,SE &/g;s/&/SOLIDUS/g;s/!/!&/g;s/"/"&/g;s/\?/?&/g;s/!/EXCLAMA/g;s/"/QUOTA/g;s/\?/QUES/g;s/&/TION MARK/g;s/#/NUMB,&/g;s/\$/DOLLAR&/g;s/%/P,CENT&/g;s/\+/PLUS&/g;s/</LESS-THAN&/g;s/=/EQUALS&/g;s/>/GREAT,-THAN&/g;s/&/ SIGN/g;s/\(/<&/g;s/\)/>&/g;s/&/ PARENTHESIS/g;s/\[/<&/g;s/\]/>&/g;s/&/ SQUARE'/g;s/{/<&/g;s/}/>&/g;s/&/ CURLY'/g;s/'/ BRACKET/g;s/</LEFT/g;s/>/RIGHT/g;s/0/&Z,O/g;s/1/&ONE/g;s/2/&TWO/g;s/3/&THREE/g;s/4/&FOUR/g;s/5/&FIVE/g;s/6/&SIX/g;s/7/&SEVEN/g;s/8/&EIGHT/g;s/9/&NINE/g;s/&/DIGIT /g;s/,/ER/g;print;

1

因子58字节

[ readln [ char>name "-"" " replace >upper print ] each ] 

很简单;与Java和Perl 6的答案完全相同。


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.