Każdy znak Unicode ma nazwę, na przykład „LATIN CAPITAL LETTER A”. Nazwa znaku Unicode może zawierać tylko wielkie litery, białe znaki i znak minus.
Napisz program, który odczytuje tekst i wyświetla nazwy każdego znaku w nowym wierszu. Na przykład, jeśli dane wejściowe to „Hello, World!”, Dane wyjściowe to
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
- Dane wejściowe powinny pochodzić z pliku lub danych użytkownika, a nie tylko z ciągu znaków w kodzie.
- Dane wyjściowe należy zapisać do pliku lub standardowego wyjścia lub wydrukować na ekranie.
- Internet i biblioteki zewnętrzne nie są dozwolone, wszystkie niezbędne dane powinny znajdować się w kodzie.
- Załóżmy, że dane wejściowe zawierają tylko drukowalne znaki ASCII w zakresie podstawowego kodu łacińskiego 32-126. Możesz zignorować końcowy znak nowej linii.
- Wszystkie języki programowania są dozwolone. Najkrótszy kod w bajtach wygrywa.
Oficjalne nazwy znaków Unicode można znaleźć tutaj . Innych źródeł:
- http://www.w3schools.com/charsets/ref_utf_basic_latin.asp
- http://www.ssec.wisc.edu/~tomw/java/unicode.html#x0000
To jest moje pierwsze pytanie, więc byłbym wdzięczny za wszelkie sugestie, czy można to poprawić.
Na potrzeby tego wyzwania poniższa lista ma charakter normatywny.
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
ja i mój kot
źródło
źródło
C:\Windows\System32\getuname.dll
. Czy to również liczy się jako „biblioteka zewnętrzna”, nawet jeśli jest wbudowana w system Windows?Odpowiedzi:
Java - 113 bajtów (152, jeśli odczytane z wiersza poleceń)
Edycja: usunięto bezużyteczne nawiasy klamrowe.
Edycja2: usunięto niepotrzebną zmienną.
Edycja3: Zamiast Character.getName () używam c.getName ().
Edycja4: Przekazywanie ciągu jako argumentu wiersza poleceń.
Z argumentem wiersza poleceń (113 bajtów):
Z linią odczytu (152 bajty):
Java ma wszystko, czego potrzeba. Jestem pewien, że można to zagrać w golfa.
źródło
x[0].chars().forEach(i->System.out.println(Character.getName(i)));
Zapisuje 2 znaki w porównaniu do rozwiązania argumentów wiersza poleceń (przez zastąpieniefor
-loop).x[0].chars().map(' '::getName).forEach(System.out::println);
Python 3, 56 bajtów
Używa wbudowanej funkcji
unicodedata.name()
, więc może nie być kompetentna. Odpowiedź Java zrobiła to samo, więc pomyślałem, że przynajmniej warto było to opublikować.źródło
for i in input():print(unicodedata.name(i))
jest krótszy?import unicodedata
, więc to już dłużej .JavaScript (ES6) 594
618 626Uwaga : Mógłbym zaoszczędzić ~ 30 bajtów na kompresji długiego łańcucha za pomocą atob / btoa, ale znak utf8 powyżej „~” nie jest dobrze akceptowany przez edytor postów Stack Exchange. Zamiast tego wolę zachować działający fragment kodu.
Edytuj 8 znaków zapisanych dzięki @Ypnypn
Oczywista kompresja powtarzających się słów. Nowa linia w backticks jest znacząca i liczona.
Przetestuj uruchomienie fragmentu w przeglądarce Firefox.
źródło
R,
54 bajty62Edycja: na komentarz @flodels, muszę go najpierw przeczytać z połączenia, więc musiałem dodać
scan
. Jest to również prawdopodobnie rozwiązanie niekompetentne, zgodne ze wszystkimi zasadami.Stosowanie
Możesz także zawinąć w funkcję dla wygodniejszego użytkowania
Zatem użycie jest po prostu
źródło
Perl 6 , 21 bajtów
Nie widziałem reguły wyraźnie przeciwnej użyciu wbudowanej metody uzyskiwania nazw Unicode.
(Również odpowiedź Java, która jest obecnie najwyżej oceniana, robi to samo)
źródło
Perl (+ coreutils) , 563 bajty
Uwaga : poniżej nie będzie działać tak, jak jest, należy je odtworzyć z
xxd
zrzutu poniżej! Próbowałem przekazać nieprzetworzone dane od razuzcat
, ale to się nie udało. Mogę po prostu użyć natywnego modułu Perl Gzip, ale to na pewno jutro!Aby odtworzyć plik, wykonaj:
wklej zrzut heksowy i naciśnij Enter, a następnie Ctrl+ D.
Uruchom jako:
Poprzednia czysta wersja Perla, 893 bajty
źródło
awk -
794739Żartowałem; D
Działa z stdin / stdout.
Bardziej „czytelny”:
źródło
C ++ 11, 739 bajtów
Oparty na rozwiązaniu sweerpotato, ale mocno zmodyfikowany.
źródło
C, 644
656Pełny program, odczyt ze standardowego wejścia
Testuj na Ideone
Jest to przeniesienie mojej odpowiedzi JavaScript do C. Język C jest dobry w manipulowaniu pojedynczymi znakami jako liczbami (bez potrzeby
.toUpperCase
i tym podobnych), ale jest słabszy w manipulowaniu ciągami.Mniej golfa
źródło
Common Lisp (SBCL),
5279Jest to wbudowane i zależy od implementacji, więc możesz zignorować go przy wyborze akceptowanej odpowiedzi. Niestety nie wystarczy to do pokonania Pythona . Zaktualizowana wersja jest zgodna z oczekiwanymi danymi wyjściowymi (muszę zastąpić podkreślenia spacjami).
Przykład
źródło
Pyth, 41
Używa tego samego wbudowanego, co odpowiedź python mbomb007 . Pamiętaj, że nie można tego wykonać online, ponieważ
$
operator jest niebezpieczny.źródło
C ++ 14,
10431000998996972 bajtówRozwiązanie groteskowe w C ++ 14:
Dzięki kirbyfan64sos za grę w golfa poza dwoma bajtami
źródło
*s
zamiasts[0]
?CJam, 517
Wersja online
Próbowałem różnych rozwiązań, ale po prostu przechowywanie wszystkich nazw w ogromnej tablicy wydaje się najbardziej wydajne.
Nawiasem mówiąc, to mój pierwszy prawdziwy program CJam.
źródło
C ++ 14
716706704Wersja na żywo .
Z pewnymi odstępami:
Skompresowany ciąg
a
dekompresuje się do:Podczas dekompresji
}
jest zastępowane przez\0
,|
z(spacja) oraz
{
z-
i małe litery są konwertowane na wielkie.Łańcuch jest skompresowany w stylu LZ jako dosłowne
[a-~]
lub dwuznakowe przesunięcie / długość w stosunku do dopasowania wcześniejszego ciągu.źródło
Clojure, 56 bajtów
Zainspirowany odpowiedzią @ peter. Używa Clojure do interakcji Java.
źródło
Perl - 894 bajtów
Pięknie wykonane ręcznie. Po raz pierwszy gra w golfa w Perlu, więc wszelkie wskazówki są mile widziane.
źródło
Współczynnik, 58 bajtów
Dość proste; robi dokładnie to samo, co odpowiedzi Java i Perl 6.
źródło
PHP> = 7, 54 bajtów, które nie są kompetentne
IntlChar :: charName
źródło