Napisz program, który tłumaczy tekst ASCII na wynik brajla . Wymagania:
- Dane wejściowe mogą pochodzić ze standardowego wejścia, wiersza poleceń lub innego zewnętrznego źródła wejściowego.
- Wyjście powinno być rozpoznawalne jako Braille'a, forma wyjścia zależy od Ciebie. Przykładem może być
o
podniesiona kropka i.
niewy podniesiona kropka. Tekstowa reprezentacja wzoru, taka jak,1-3-4
jest niedopuszczalna. Zawijanie długich linii nie jest wymagane. - Minimalne rozwiązanie wymaga tylko 26 znaków alfabetu i spacji. Wszystkie znaki wejściowe nie obsługiwane przez twoje rozwiązanie powinny zostać zignorowane.
Punktacja zależy od liczby znaków w kodzie źródłowym. Kary i bonusy to:
- +50 kar za użycie znaków brajlowskich Unicode jako danych wyjściowych.
- -50 premii za obsługę wielkich liter, cyfr i interpunkcji.
-200 premii za wsparcie ligatur i skurczów literowych z alfabetu Braille'a w języku angielskim (stopień 2) .(Sprawi, że będzie to osobne wyzwanie, ponieważ jest to zupełnie inny problem).
Przykładowe wywołanie i wyjście (minimalne rozwiązanie):
$ braille Hello world
o . o . o . o . o . . . . o o . o . o . o o
o o . o o . o . . o . . o o . o o o o . . o
. . . . o . o . o . . . . o o . o . o . . .
Odpowiedzi:
Python, 162
Obecnie obsługuje małe litery i niektóre znaki interpunkcyjne, ale wciąż jest w toku.
Przykład:
źródło
Python -
9075 + 50 = 125Używaj małych liter.
One-liner (dzięki ɐɔıʇǝɥʇuʎs)
źródło
for l in input():print("⠀⠁⠃⠉⠙⠑⠋⠛⠓⠊⠚⠅⠇⠍⠝⠕⠏⠟⠗⠎⠞⠥⠧⠺⠭⠽⠵"[max(0,ord(l)-96)],end="")
75 znaków.max
sztuczce. Dziękujęfor l in input():print((" "*97+"⠁⠃⠉⠙⠑⠋⠛⠓⠊⠚⠅⠇⠍⠝⠕⠏⠟⠗⠎⠞⠥⠧⠺⠭⠽⠵")[ord(l)],end="")
C 269
Ta implementacja wymaga, aby jej argument, jeśli zawiera spacje, musiał być cytowany:
źródło
BBC Basic 103 znaki ASCII lub 92 tokeny
Być może nie do końca to, co zamierzał PO, to na nowo definiuje czcionkę dla małych liter.
VDU 23,n,a,b,c,d,e,f,g,h
przypisuje bitmapę 8x8 do znaku n, składającego się z ośmiu bajtów. Następowanie parametru średnikiem zamiast przecinkiem powoduje, że jest on traktowany jako dwubajtowa liczba little-endian.Wzory brajla dla liter
a
przechodzącychz
są przechowywane w A $, zgodnie z następującym wzorem bitowym. Jest to wyodrębniane przez maski z 9 = binarne1001
i przesunięcia w prawo (dzielenie przez 2 i 4 jest używane, ponieważ standardowy BBC basic nie ma operatora shift).Nieskluczony kod
Przykład użycia
Odbywa się to w trybie ekranowym 6 dla przejrzystości (wpisz MODE6, jak tylko otworzysz emulator wiersza poleceń).
W rzeczywistości po uruchomieniu kodu wszystkie małe litery (w tym klawiatura) pojawiają się w brajlu.
Emulator na stronie http://bbcbasic.co.uk/bbcwin/bbcwin.html .
Zobacz także moją podobną odpowiedź: /codegolf//a/28869/15599
źródło
Bash + coreutils
Minimalne rozwiązanie - tylko małe litery, 83 (33 znaki Unicode + 50 punktów karnych):
Wielkie litery, cyfry i znaki interpunkcyjne, 120 (120 znaków Unicode + 50 kar - 50 bonusów):
Przykładowe dane wyjściowe:
źródło
PHP, 331
Na razie brak bonusów.
źródło
<?
zamiast<?php[SPACE]
zapisać 4 znaki.JavaScript - 286
Pierwsze podejscie. Brak bonusów.
źródło
w=prompt().split("");for(i=0;i<w.length;i++)z=w[i],o="o",p=".",b=[1,5,3,11,9,7,15,13,6,14],e=[c="",1,3],g=z.charCodeAt(0)-97,22<g&&g--,f=e[g/10|0],d=b[g%10],22==g&&(d=14,f=2),c+=d&1?o:p,c+=d&2?o:p,c+="\n",c+=d&4?o:p,c+=d&8?o:p,c+="\n",c+=f&1?o:p,c+=f&2?"o\n":".\n",console.log(c)
CJam - 51
Wypróbuj na http://cjam.aditsu.net/
Przykładowe dane wejściowe:
Przykładowe dane wyjściowe:
Obsługuje tylko małe litery i spacje. Inne znaki są mapowane na obsługiwane znaki (w szczególności wielkie litery na małe).
Wyjaśnienie:
Znaki brajlowskie są kodowane za pomocą 1 dla podniesionej kropki i 0 dla niewy podniesionej kropki, od lewej do prawej i od góry do dołu. Daje to 6 cyfr bazowych 2; 1 jest poprzedzany, aby uniknąć usuwania zer wiodących, następnie liczba jest konwertowana na podstawę 10, a następnie na odpowiedni znak ASCII.
Przykład: t -> ⠞ -> 01/11/10 -> 1011110 -> 94 -> ^
Program konwertuje każdy znak z powrotem na triplet par bitów (np.
[[0 1][1 1][1 0]]
) Uzyskując macierz par bitów. Macierz jest następnie transponowana i dodawane są separatory (spacje w wierszach, znaki nowej linii między wierszami).q
wczytuje dane wejściowe do ciągu = tablica znaków{…}%
stosuje blok do każdego znakui32%
pobiera kod ASCII mod 32 (spacja-> 0, a-> 1, b-> 2, z-> 26)"@`hptdx|lX\bjrvfz~nZ^ck]swg"
to ciąg zawierający znaki brajla kodowany jak wyjaśniono wcześniej,=
pobiera odpowiednii2b
kod brajlowski z ciągu, pobiera kod ASCII, a następnie konwertuje na bazę 2 (uzyskując tablicę 7 cyfr)1>
usuwa 1 cyfrę wiodącą2/
dzieli tablicę na (3) paryz
transponuje macierzeSf*
łączy każdy wiersz z spacjeN*
łączą rzędy z nowymi liniamiźródło
C
249244Dane wejściowe to argument wiersza polecenia, który musi być poprzedzony znakiem zapytania lub cytatem, jeśli ciąg zawiera spacje. Obsługiwane znaki to małe litery i spacja. Nieobsługiwane postacie są po cichu usuwane.
Edycja: Ogolono 5 bajtów, upraszczając warunek
źródło
perl, 195 + 2-50 = 147
To obsługuje kapitał, liczbę i interpunkcję, bez polegania na Unicode (195 bajtów + 2 bajty (za
-pl
) - 50 premii)Z wcięciem:
Próbka wyjściowa
źródło
JavaScript ES6 -
282309297283270 - 50 =232259233220 bajtówByłoby to krócej, ale sprawdzanie wielkich liter boli .
EDYCJA: Dzięki mbomb007 za zaoszczędzenie mi dwóch bajtów - niestety, odkryłem, że trochę poprzedniej gry w golfa zrujnowało wszystko, więc musiałem ponownie dodać 27 znaków.
EDYCJA: Aa i 12 bajtów zapisanych przez przesunięcie spacji.
EDYCJA: Uświadomiłem sobie, że głupio było wypisywać jako znaki i zapisałem sporo bajtów. Zapisałem także kilka znaków, zamieniając k = (a, b) => a% (2 * b)> b-1? 1: 0 dla k = (a, b) => a% b> ~ -b / 2? 1: 0.
źródło
string.toLowerCase
do zmiennej?1-9-->a-i
i0-->j