Todo caractere Unicode tem um nome, como "LATIN CAPITAL LETTER A". Um nome de caractere Unicode pode conter apenas letras maiúsculas, espaços em branco e o sinal de menos.
Escreva um programa que leia um texto e emita os nomes de cada caractere em uma nova linha. Por exemplo, se a entrada fosse "Olá, Mundo!", A saída seria
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
- A entrada deve vir de um arquivo ou da entrada do usuário, não apenas de uma string no código.
- A saída deve ser gravada em um arquivo ou stdout ou impressa na tela.
- Internet e bibliotecas externas não são permitidas, todos os dados necessários devem estar no código.
- Suponha que a entrada contenha apenas caracteres ASCII imprimíveis no intervalo de código latino básico 32-126. Você pode ignorar uma nova linha à direita.
- Todas as linguagens de programação são permitidas. O menor código em bytes vence.
Os nomes oficiais dos caracteres Unicode podem ser encontrados aqui . Outras fontes:
- http://www.w3schools.com/charsets/ref_utf_basic_latin.asp
- http://www.ssec.wisc.edu/~tomw/java/unicode.html#x0000
Esta é a minha primeira pergunta, por isso gostaria de receber qualquer sugestão se isso puder ser melhorado.
Para os fins deste desafio, a lista abaixo deve ser normativa.
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
code-golf
kolmogorov-complexity
unicode
eu e meu gato
fonte
fonte
C:\Windows\System32\getuname.dll
. Isso também conta como uma "biblioteca externa", mesmo se incorporada ao Windows?Respostas:
Java - 113 bytes (152 se lido na linha de comandos)
Edit: removido colchetes inúteis.
Edit2: variável desnecessária removida.
Edit3: Em vez de Character.getName () eu uso c.getName ().
Edit4: Passando string como argumento de linha de comando.
Com argumento de linha de comando (113 bytes):
Com linha de leitura (152 bytes):
Java tem tudo o necessário. Tenho certeza que isso pode ser jogado para baixo.
fonte
x[0].chars().forEach(i->System.out.println(Character.getName(i)));
economiza 2 caracteres em comparação com a solução de argumento da linha de comandos (substituindo ofor
loop).x[0].chars().map(' '::getName).forEach(System.out::println);
Python 3, 56 bytes
Usa uma função interna
unicodedata.name()
, portanto, isso pode não ser competente. A resposta do Java fez da mesma forma, então achei que valeria a pena postar.fonte
for i in input():print(unicodedata.name(i))
é mais curto?import unicodedata
, então é mais tempo .JavaScript (ES6) 594
618 626Observe que eu poderia salvar ~ 30 bytes compactando a cadeia longa com atob / btoa, mas o caractere utf8 acima de '~' não é bem aceito pelo editor de postagem do Stack Exchange. Prefiro manter um snippet em execução.
Editar 8 caracteres salvos thx @Ypnypn
Compactação óbvia de palavras repetidas. A nova linha dentro dos backticks é significativa e contada.
Teste a execução do snippet no Firefox.
fonte
R,
54 bytes62Edit: por comentário @flodels, eu preciso lê-lo da conexão primeiro, então tive que adicionar
scan
. Esta também é provavelmente uma solução não competente de acordo com todas as regras.Uso
Você também pode agrupá-lo em uma função para um uso mais conveniente
Então, o uso é apenas
fonte
Perl 6 , 21 bytes
Não vi uma regra especificamente contra o uso de um método interno para obter os nomes unicode.
(Também a resposta Java, que atualmente é a mais votada, faz o mesmo)
fonte
Perl (+ coreutils) , 563 bytes
Nota : O abaixo não funcionará como está, ele precisa ser reproduzido no
xxd
despejo abaixo! Tentei passar os dados brutos diretamente parazcat
, mas isso falhou. Posso usar apenas um módulo Perl Gzip nativo, mas isso será amanhã com certeza!Para reproduzir o arquivo, execute:
cole o hexdump e pressione Enter, depois Ctrl+ D.
Correr como:
Versão Perl pura anterior, 893 bytes
fonte
awk -
794739Brincadeirinha; D
Funciona com stdin / stdout.
Mais "legível":
fonte
C ++ 11, 739 bytes
Baseado na solução da sweerpotato, mas modificado fortemente.
fonte
C, 644
656Programa completo, leitura da entrada padrão
Teste on Ideone
Esta é uma portabilidade da minha resposta JavaScript para C. A linguagem C é boa para manipular caracteres únicos como números (não é necessário
.toUpperCase
e assim por diante ), mas é mais fraca na manipulação de strings.Menos golfe
fonte
Lisp comum (SBCL),
5279Isso é interno e depende da implementação; portanto, você pode ignorá-lo ao escolher a resposta aceita. Infelizmente, isso não é suficiente para vencer o Python . A versão atualizada está de acordo com a saída esperada (eu tenho que substituir os sublinhados por espaços).
Exemplo
fonte
Pyth, 41
Usa o mesmo que a resposta python do mbomb007 . Observe que isso não pode ser executado online porque o
$
operador não é seguro.fonte
C ++ 14,
10431000998996972 bytesSolução grotesca em C ++ 14:
Agradecimentos a kirbyfan64sos por jogar fora dois bytes
fonte
*s
vez des[0]
?CJam, 517
Versão online
Eu tentei soluções diferentes, mas simplesmente armazenar todos os nomes em uma enorme variedade parece ser mais eficiente.
A propósito, este é o meu primeiro programa CJam real.
fonte
C ++ 14
716706704Versão ao vivo .
Com algum espaço em branco:
A cadeia compactada
a
descompacta para:E durante a descompressão
}
é substituído por\0
,|
por(espaço) e
{
por-
e letras minúsculas são convertidas em maiúsculas.A sequência é compactada no estilo LZ como um
[a-~]
deslocamento / comprimento literal ou codificado com dois caracteres para uma correspondência anterior na sequência.fonte
Clojure, 56 bytes
Inspirado pela resposta de @ Peter. Usa o Clojure para a interoperabilidade Java.
fonte
Perl - 894 bytes
Amorosamente trabalhada à mão. Golfe pela primeira vez em Perl, para que todas as dicas sejam apreciadas.
fonte
Fator, 58 bytes
Bem simples; faz exatamente a mesma coisa que as respostas Java e Perl 6.
fonte
PHP> = 7, 54 bytes não concorrente
IntlChar :: charName
fonte