Biorąc pod uwagę ciąg wejściowy, napisz program, który wypisuje całkowitą liczbę linii i krzywych.
Wyzwanie
- Pobierz dane wejściowe z
STDIN
dowolnej innej metody. - Dane wyjściowe
STDOUT
lub dowolna inna metoda danych wyjściowych, łączna liczba linii i krzywych zawartych w ciągu, w tej kolejności , na podstawie poniższej tabeli we fragmencie kodu. - Wszelkie znaki niealfanumeryczne należy zignorować.
- Standardowe luki są zabronione.
- To jest golf-golf, więc najkrótszy kod wygrywa.
Wyjaśnienia
- Linie i krzywe są określane przez czcionkę używaną w Stackexchange dla
code blocks
. - Koła (jak
O, o, 0
) i kropki (i, j
) są uważane za 1 krzywą. - Dane wejściowe mogą być ciągiem znaków, listą znaków, strumieniem znaków, kodami bajtowymi itp.
- Wyjście może być tablicą liczb całkowitych, krotką liczb całkowitych, oddzielonych przecinkami ciąg itp Oba numery muszą być oddzielone, więc
104
nie jest ważna, ale10,4
,10 4
,10\n4
,[10,4]
,(10, 4)
, i tak dalej jest. - Nagłówek i końcowe białe znaki są całkowicie dopuszczalne.
Przykładowe wejście i wyjście
# Format: str -> line, curve
hi -> 4, 2
HELLO WORLD -> 20, 4
l33+ 5pEak -> 13, 8
+=-_!...?~`g@#$%^ -> 1, 2
9001 -> 5, 3
O o O o O o -> 0, 6
Tablica znaków
Char | Lines | Curves
0 | 1 | 1
1 | 3 | 0
2 | 1 | 1
3 | 0 | 2
4 | 3 | 0
5 | 2 | 1
6 | 0 | 1
7 | 2 | 0
8 | 0 | 2
9 | 0 | 1
A | 3 | 0
B | 1 | 2
C | 0 | 1
D | 1 | 1
E | 4 | 0
F | 3 | 0
G | 2 | 1
H | 3 | 0
I | 3 | 0
J | 1 | 1
K | 3 | 0
L | 2 | 0
M | 4 | 0
N | 3 | 0
O | 0 | 1
P | 1 | 1
Q | 0 | 2
R | 2 | 1
S | 0 | 1
T | 2 | 0
U | 0 | 1
V | 2 | 0
W | 4 | 0
X | 4 | 0
Y | 3 | 0
Z | 3 | 0
a | 0 | 2
b | 1 | 1
c | 0 | 1
d | 1 | 1
e | 1 | 1
f | 1 | 1
g | 1 | 2
h | 1 | 1
i | 3 | 1
j | 1 | 2
k | 3 | 0
l | 3 | 0
m | 3 | 2
n | 2 | 1
o | 0 | 1
p | 1 | 1
q | 1 | 1
r | 1 | 1
s | 0 | 1
t | 1 | 1
u | 1 | 1
v | 2 | 0
w | 4 | 0
x | 4 | 0
y | 1 | 1
z | 3 | 0
s
2 krzywe czy 1? Czy trzon maj
zarówno linię, jak i krzywą? Byłoby najlepiej, gdybyś mógł po prostu podać wymagane wartości dla wszystkich liter.o
powinno być 0 linii, 1 krzywaOdpowiedzi:
Haskell,
214199188175 bajtówWypróbuj online!
Liczby linii i krzywych są cyframi liczb podstawowych 5 i są przechowywane jako liczby podstawowe 16. Funkcja
g
przekłada się z powrotem na base-5.Edycja: -13 bajtów dzięki @cole.
źródło
05AB1E ,
786965 bajtów-4 bajty dzięki Kevinowi Cruijssenowi, idź i sprawdź jego jeszcze lepszą odpowiedź 05AB1E
Wypróbuj online!
Dane wyjściowe jako [Krzywa, linia]
Jestem naprawdę zły w 05AB1E, właśnie się dowiedziałem. Zdecydowanie mogę zapisać więcej bajtów, jeśli uda mi się zrobić 05AB1E
è
na mojej liście listWyjaśnienie
źródło
line curve
, niecurve line
.Output to STDOUT, or any other output method, the total number of lines and curves contained in the string, in that order
. Uwagain that order
, więcline curve
.[Line, Curve]
jako z kolejnością wyjściową, chociaż jest to przypadek i nie jest zamierzone).Galaretka , 45 bajtów
Monadyczny link akceptujący listę znaków, który daje listę (dwóch) liczb całkowitych.
Wypróbuj online! Lub zobacz pakiet testowy .
W jaki sposób?
źródło
Scala , 235 bajtów
Wypróbuj online!
Nie tak mały, prawdopodobnie można go jeszcze pograć w golfa.
Uwaga: 52-znakowy literał łańcuchowy jest jak słownik, który odwzorowuje znak na inny znak, który oznacza liczbę linii i krzywych zgodnie z poniższą tabelą:
źródło
Python 2 ,
159154 bajtówDla każdej postaci
lines*4 + curves
podaje wartość od 0 do 16. Do zakodowania tych wartości służy Base-36 (1 znak = 1 wartość).-5 bajtów dzięki @Chas Brown
Wypróbuj online!
Python 2 , 141 bajtów
To jest port mojego rozwiązania Python3. Ta wersja wyświetla listę długich liczb całkowitych, więc wygląda na to, że
[4L, 2L]
zamiast[4, 2]
.Wypróbuj online!
źródło
'/'<x<'{'
zamiastx.isalnum()
.'/'<x<'{'
, ale starałam się wyrazić to także, aby się go pozbyćif
.Galaretka , 51 bajtów
Wypróbuj online!
Łącze monadyczne, które pobiera ciąg wejściowy i zwraca listę liczb całkowitych jako
[lines, curves]
źródło
JavaScript (Node.js) ,
251 219217 bajtów-34 bajtów z @Expired Data : o
Wypróbuj online!
źródło
Retina 0.8.2 , 160 bajtów
Wypróbuj online! Link zawiera przypadki testowe. Wyjaśnienie:
Zduplikuj ciąg wejściowy.
Policz linie każdego znaku w pierwszej linii.
Policz krzywe każdej postaci w drugiej linii.
Sumuj cyfry osobno w każdym wierszu.
źródło
R ,
164153 bajtyWypróbuj online!
Miałem taki sam pomysł jak odpowiedź nich przy użyciu kodowania base 5, ale koduje jako znaki ASCII zamiast base 16. Używa
nomatch = 0
wmatch
celu wyeliminowania znaków innych niż alfanumeryczne.Powraca
curves lines
.źródło
Węgiel , 60 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Jest to tablica dwóch ciągów
13103202000101111131333201110112441331014323313243010202024433
i10120110212111112112002111111110001002110010010000112110100000
. Ciągi są następnie mapowane.Elementy wejściowe są filtrowane według tego, czy są zawarte w (62) znakach domyślnego podstawowego alfabetu konwersji.
Pozostałe elementy są następnie konwertowane z bazy (62), a następnie indeksowane do odwzorowanego ciągu.
Cyfry są sumowane i rzutowane z powrotem na ciąg znaków w celu niejawnego drukowania.
źródło
Python 3 ,
165159148146 bajtówDla dowolnego znaku (w tym niealfanumerycznego)
lines*3 + curves
podaje wartość od 0 do 12, więc możemy użyć długiej liczby podstawowej 13 do kodowania danych. Aby był krótszy, jest konwertowany na base-36.Dzięki @Chas Brown za świetne porady.
-2 bajty poprzez konwersję lambda na program.
Wypróbuj online!
źródło
Python 2 ,
179166165163 bajtówWypróbuj online!
Zwraca listę
[curves, lines]
.źródło
Python 2 , 525 bajtów
Wypróbuj online!
Podobne podejście do realizacji odniesienia, ale nieco krótsze.
źródło
Perl 5
-MList::Util=sum -p
, 180 bajtówWypróbuj online!
źródło
05AB1E , 53 bajty
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
Zobacz moją wskazówkę 05AB1E (sekcje Jak kompresować duże liczby całkowite? I Jak kompresować listy liczb całkowitych? ), Aby zrozumieć, dlaczego
•xþ¢*>ÌŸÑå#÷AUI'@æýXÁи<¥èå–ΘηžÎà₅åǚĕ
jest101629259357674935528492544214548347273909568347978482331029666966024823518105773925160
i•xþ¢*>ÌŸÑå#÷AUI'@æýXÁи<¥èå–ΘηžÎà₅åǚĕ5в
jest[1,0,2,0,0,2,1,0,1,2,0,3,2,0,1,1,0,3,1,1,0,3,0,3,0,4,0,4,0,2,1,0,0,2,1,0,1,2,2,0,1,1,1,0,0,3,0,4,0,2,0,3,1,1,0,3,0,3,1,2,0,3,0,4,1,1,1,0,2,1,0,3,0,3,1,1,0,4,0,4,0,2,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,2,2,3,0,3,0,3,2,1,1,3,1,1,2,1,1,1,1,1,1,1,1,0,1,1,2,0]
.źródło
Python 3 , 697 bajtów
Prosta pierwsza próba. Umieściłem tabelę w słowniku, zapętliłem łańcuch, zwiększyłem liczniki i zwróciłem krotkę. Dane wejściowe to ciąg znaków.
Wypróbuj online!
źródło
C # (interaktywny kompilator Visual C #) , 157 bajtów
Wypróbuj online!
źródło