Odwróć i odwróć ciąg
Wyzwanie
W tym wyzwaniu. Będziesz pisać program, który wyświetli lub zwróci dane wejściowe, odwrócony i odwrócony.
Po pierwsze, każdy znak należy przekonwertować na kod znaku. Następnie należy to przekonwertować na base-2. Następnie ciąg powinien zostać odwrócony. Następnie ciąg powinien zostać odwrócony (1 -> 0 i 0 -> 1). Na koniec należy to przekonwertować z powrotem na bazę 2, a następnie z powrotem na postać. Jeśli znak jest niemożliwy do wydrukowania, możesz go opcjonalnie wypisać, ale nie trzeba go usuwać.
H -> 72 -> 1001000 -> 0001001 -> 1110110 -> 118 -> v
e -> 101 -> 1100101 -> 1010011 -> 0101100 -> 44 -> ,
l -> 108 -> 1101100 -> 0011011 -> 1100100 -> 100 -> d
l -> 108 -> 1101100 -> 0011011 -> 1100100 -> 100 -> d
o -> 111 -> 1101111 -> 1111011 -> 0000100 -> 4 -> (unprintable)
, -> 44 -> 101100 -> 001101 -> 110010 -> 50 -> 2
-> 32 -> 100000 -> 000001 -> 111110 -> 62 -> >
W -> 87 -> 1010111 -> 1110101 -> 0001010 -> 10 -> (newline)
o -> 111 -> 1101111 -> 1111011 -> 0000100 -> 4 -> (unprintable)
r -> 114 -> 1110010 -> 0100111 -> 1011000 -> 88 -> X
l -> 108 -> 1101100 -> 0011011 -> 1100100 -> 100 -> d
d -> 100 -> 1100100 -> 0010011 -> 1101100 -> 108 -> l
! -> 33 -> 100001 -> 100001 -> 011110 -> 30 -> (unprintable)
Punktacja
Najkrótszy kod w bajtach wygrywa.
-15% Premia: jeśli twój program usunie z wydruku nie dające się wydrukować. Musi to być co najmniej wszystkie znaki poniżej 32, z wyjątkiem znaków nowej linii (znak 10)
GBktnkZs
0010000
, to należy go traktować10000
tak, jak na odwrót00001
Odpowiedzi:
CJam, 14
Wypróbuj online
Wyjaśnienie:
Całkiem proste:
Wersja „do wydruku”, 20–15% = 17
źródło
Pyth, 14 bajtów
Wypróbuj online.
Jak to działa
źródło
smCi!MvM_.Bd2z
smCi.r_.Bd`T2z
smCiqR\0_.Bd2z
Perl,
5751 znaków(Kod 50 znaków + opcja wiersza poleceń 1 znak).
Przykładowy przebieg:
źródło
-p
s/./$_=unpack b8,$&;s|0+$||;"chr 0b".y|10|01|r/gee
.unpack b8,$&
jest krótszy niżsprintf'%b',ord$&
i dodatkowo dekoduje w odwrotnej kolejności. Niestety generuje również końcowe zera, które należy usunąć.unpack
wciąż jest dla mnie nieodkrytym terenem.-p
s/./"chr 0b".unpack(b8,~$&)=~s|1+$||r/gee
. Odwróć znak, bez konieczności transliteracji;)JavaScript (
ES6ES7),119114108 bajtówOkazało się to znacznie dłużej niż oczekiwano :(
Dzięki @vihan za 5 bajtów zapisanych! Dzięki @ETHProductions zaoszczędzono kolejne 6 bajtów!
Aby przetestować: uruchom poniższy fragment kodu, wprowadź dane podobne do
"Hello, World!"
i kliknij Testuj!źródło
parseInt
z+('0b'+<code>)
opisanym tutaj, a innym, używającw^1
zamiast+!+w
x=>String.fromCharCode(...[for(y of x)if((c=+('0b'+[...y.charCodeAt().toString(2)].reverse().map(z=>z^1).join``)) >31||c==10)c])
(127 - 15% = 107,95) Może to jednak nie jest legalne; obsługuje tylko10 == \n
, a nie13 == \r
. @ Vɪʜᴀɴ jaka jest twoja opinia?Unexpected token '>'
gdy próbuję uruchomić fragment kodu.JavaScript (ES7), 126 bajtów - 15% = 107,1
Bawiłem się tą odpowiedzią, aby zobaczyć, czy bonus był tego wart. Najwyraźniej tak jest. Zestaw testowy został skradziony z tej samej odpowiedzi, ale dodałem własny zwrot akcji: pełne wsparcie 15% premii! :)
źródło
getScore()
funkcję, która sprawdzaHello, World!
zgodność testu (zawiera dogodnie zarówno znaki nowej linii, jak i znaki niedrukowalne) i zwraca wynik pomnożony przez 0,85 lub 1, w zależności od wyniku. I tak, dostęp do nie zminimalizowanego fragmentu byłby świetny. :)PHP -
187182163 bajtówPodaj wartość jako
GET["s"]
.array_map zwraca tablicę ze wszystkimi elementami drugiego parametru (tablica) po zastosowaniu funkcji wywołania zwrotnego (pierwszy parametr) do wszystkich z nich.
Nie jestem pewien, czy powinienem wziąć 15% zniżki, ponieważ
echo
nie wyświetla znaków niedrukowalnych, ale ich nie usunąłem.Cieszę się, że skończyłem, ponieważ to pierwsze wyzwanie, które biorę.
źródło
$m='array_map';echo join($m("chr",$m("bindec",$m(function($v){return strtr($v,[1,0]);},$m("strrev",$m("decbin",$m("ord",str_split($s))))))));
.STDIN
. Nawiasem mówiąc, nie trzeba używać cudzysłowu wokół sznurka ("chr"
,"bindec"
...) ponieważ nie dbają o ostrzeżeniach. To powinno ci zaoszczędzić 12 bajtów.str_split($s)
zstr_split(fgets(STDIN))
na przykład.K5, 28 bajtów
Jest to trochę niewygodne, ponieważ
decode
operator K5 wykonuje konwersję bazy o stałej szerokości, więc aby zachować zgodność z opisem problemu, muszę przyciąć początkowe zera. Lambda{x@&|\x}
dokonuje tego kroku.Rozmaz:
Zbierać:
Wybierz:
Cały program w akcji:
Wierzę , że naturalne zachowanie OK przy drukowaniu sprawia, że kwalifikuje się to do -15%, co daje wynik 28 * 0,85 = 23,8 .
źródło
Julia, 77 bajtów - 15% = 65,45
Tworzy to nienazwaną funkcję, która akceptuje ciąg i zwraca ciąg. Znaki niedrukowalne są usuwane, co kwalifikuje to do otrzymania premii.
Nie golfowany:
źródło
filter(isprint,)
i tylko 11,55 bajtów zapisanych dzięki premii.s->map(c->Char(parse(Int,join(1-digits(Int(c),2)),2)),s)
(dla 56 bajtów)filter(isprint,)
obu kwalifikuje go do premii i sprawia, że jest zgodny z zasadami.\x04
i tym podobne), wtedyprint()
kosztuje siedem, co doprowadziłoby do 56 do 63.PowerShell
199 175(171 - 15%) = 145.35Korzysta
z niefortunnej ilościniektórych wywołań / wbudowanych platform .NET, coznacznierozszerza kod.Wyjaśnił:
Pobiera dane wejściowe
param(..)
i przekazuje je jakochar[]
, abyśmy mogli odpowiednio je przepracować.Następny bit
(..)-join''
zbiera i łączy nasze wyniki razem.Wewnątrz tych parenów iterujemy z
$a|%{..}
pętlą foreach.Wewnątrz pętli:
$b
, który jest naszą literą wejściową rzutowaną jako int+$_
i[convert]
ed do bazy2
$c
, jest trudna, więc zacznijmy od środka i wyjdźmy$b
pomocą(-join$b[$b.length..0])
"$(..)"
[convert]
SToInt32
od podstawy2
, która jest przechowywana w końcu, że w$c
$c
jest większy31
lub równy10
, rzutujemy go jako char, a ta wartość pozostaje w potoku dla wyniku (który jest gromadzony i-join''
edytowany razem, powyżej), w przeciwnym razie nic nie pozostanie w tej konkretnej iteracjiUff
Kwalifikuje się również do premii -15%.
Przykład
źródło
Funkcja C, 63
źródło
𝔼𝕊𝕄𝕚𝕟, 39 znaków / 73 bajty
Try it here (Firefox only).
źródło
Minkolang 0.11 , 26 bajtów
Wypróbuj tutaj.
Wyjaśnienie
źródło
MATLAB, 60 bajtów
Zasadniczo każdy znak z kolei jest konwertowany na ciąg binarny (bez zer wiodących). Tablica jest odwrócona i jest odejmowana od 97 („0” + „1”), co odwraca znak. To jest przeliczane z powrotem na dziesiętne. Po przetworzeniu wszystkich znaków cała tablica jest następnie przekształcana z powrotem w znaki, zanim zostaną zwrócone.
źródło
Python 3,
9591Prosta implementacja.
Nie golfowany:
źródło
Ruby, 62 znaki
Samply run:
źródło
C #, 156 bajtów - 15% = 132,6
Wcięcia i nowe linie dla przejrzystości:
źródło
JavaScript 123 bajty
źródło
Retina ,
1107629 bajtów - 15% = 534,65 (niekonkurujące)Wykorzystuje funkcje dodane po dacie wyzwania. (Niejawny zachowanie
$*
,¶
sortowania)Retina nie ma wbudowanego narzędzia do konwersji postaci na numer porządkowy ASCII lub na odwrót ... więc zobacz jej błyszczącą długość. Obsługuje drukowalne ASCII i usuwa zarówno niedrukowalne, jak i nowe wiersze. Liczba bajtów zakłada kodowanie ISO 8859-1.
Kod zawiera znaki niedrukowalne.
Wypróbuj online
Jeśli zapoznasz się z samouczkiem Retina dotyczącym arytmetyki jednorzędowej , rozpoznasz kilka różnych fragmentów mojego kodu jako pochodzących z tego miejsca.
Podziękowania dla Martina za grę w golfa na setkach bajtów
źródło
Java, 205 - 15% = 174,2
Nie golfowany:
Myślę, że to rozwiązanie jest nieco interesujące pod względem wykorzystania
Integer
metodInteger.reverse
iInteger.numberOfLeadingZeros
które działają tak, jak brzmią, i przesunięcie-1 >>> s
gdzies
jest liczba wiodących zer, aby maska maskowała wysokie bity, których nie chcemy. Żałuję tylko, że nazwa tej drugiej metody jest tak cholernie gadatliwa, ale to właśnie dostaję do gry w golfa w Javie.Wydajność:
źródło
Japt, 25 bajtów
Chcesz stworzyć golfowy program JavaScript, ale najkrótsza metoda wymaga wielu długich nazw funkcji? Po to został stworzony Japt. :)
Wypróbuj w tłumaczu online !
Jak to działa
Używając bieżącej wersji Japt (od wersji 1.4.4), liczbę bajtów można zmniejszyć do 14:
Przetestuj online!
źródło
Haskell, 167 bajtów
Niestety, Haskell staje się bardzo gadatliwy, kiedy musi czytać / drukować w innej bazie…
źródło
Perl 6, 66 bajtów
Wyjście na całość poprzez usunięcie niedrukowalnych znaków kontrolnych prowadzi mnie do (83 + 1) -15% = 71,4
Jeśli usunę kod usuwający znaki kontrolne, zaoszczędzę sporo 65 + 1 = 66
(Użyłem
»
zamiast>>
dla jasności)źródło
Galaretka , 6 bajtów (niekonkurencyjna)
Wypróbuj online!
Wyjaśnienie:
źródło
Rakieta 250 15% bonus = 212 bajtów
Nie golfowany:
Testowanie:
Wydajność:
źródło
PHP, 80 bajtów
pobiera dane wejściowe z STDIN; biegać z
-R
.wersja bonusowa,
97110 bajtów -> wynik 93,5drukuje ASCII 10 i 32 do 126 (nowa linia i drukowalne)
podział, TiO i jeśli to możliwe, nastąpi gra w golfa; Jestem teraz zmęczony.
źródło