Jawne zdzierstwo z rip-off . Głosujcie za tymi!
Twoim zadaniem, jeśli chcesz to zaakceptować, jest napisanie programu / funkcji, która wypisuje / zwraca liczbę całkowitą / argument. Problem polega na tym, że jeśli odwrócę kod źródłowy, wynikiem musi być zanegowana oryginalna liczba całkowita.
Przykłady
Powiedzmy, że twój kod źródłowy jest, ABC
a jego dane wejściowe to 4
. Jeśli CBA
zamiast tego napiszę i uruchomię, wynik musi być następujący -4
.
Powiedzmy, że twój kod źródłowy jest, ABC
a jego dane wejściowe to -2
. Jeśli CBA
zamiast tego napiszę i uruchomię, wynik musi być następujący 2
.
Dane wejściowe 0
mogą dać 0
lub -0
, jeśli jednak obsługujesz podpisane zero, -0
powinny dać 0
.
Odpowiedzi:
PowerShell ,
1814 bajtówWypróbuj online! ! enilno ti yrT
Pierwsza z trywialnych odpowiedzi na nadużywanie komentarzy
źródło
J , 3 bajty
Wypróbuj online!
-&0
to „argument minus 0”0&-
to „0 minus argument”źródło
][-
itp.JavaScript, 11 bajtów
Wypróbuj online! | Wywrócony
źródło
kod maszynowy x86, 3 bajty
Powyższe bajty kodu definiują funkcję, która nie działa: po prostu zwraca kontrolę nad dzwoniącym. Po tej funkcji następują dwa bajty śmieci, które nie zostaną wykonane, ponieważ przychodzą po powrocie - znajdują się w „ziemi niczyjej”. W mnemonikach asemblera:
Okej, więc teraz pojawia się troll i odwraca kolejność bajtów:
Te bajty definiują teraz funkcję, która przyjmuje do
EAX
rejestru argument liczby całkowitej , neguje go i zwraca kontrolę do obiektu wywołującego. W mnemonikach asemblera:Więc… to było proste. :-)
Zauważ, że możemy sprawić, by instrukcja „negacja” była czymkolwiek chcemy, ponieważ nigdy nie jest wykonywana w orientacji „do przodu” i tylko w orientacji „odwróconej”. Dlatego możemy postępować według tego samego schematu, aby robić dowolnie bardziej skomplikowane rzeczy. Na przykład tutaj bierzemy argument liczby całkowitej w innym rejestrze (powiedzmy,
EDI
aby postępować zgodnie z konwencją wywoływania Systemu V powszechnie stosowaną w systemach * nix), negować go i zwracać doEAX
rejestru konwencjonalnego :↓ ↓
źródło
Galaretka , 2 bajty
Wypróbuj online! i odwrotnie .
źródło
ḷN
, bez potrzeby logiki OR. : DNa
, słowa dająaN
efekt estetyczny :)Haskell , 8 bajtów
Anonimowa funkcja tożsamości, zmieniająca się w odejmowanie
0
po odwróceniu.Wypróbuj online!
Wywrócony:
Wypróbuj online!
źródło
Biała spacja , 48 bajtów
Litery
S
(spacja),T
(tab) iN
(nowa linia) dodane tylko jako wyróżnienia.Niewielka modyfikacja mojej odpowiedzi w Whitespace dla I odwracam kod źródłowy, negujesz wynik! wyzwanie .
Wypróbuj online lub wypróbuj online w odwrotnej kolejności (tylko z surowymi spacjami, tabulatorami i nowymi wierszami).
Wyjaśnienie:
Wykorzystanie wbudowanego programu Exit będącego krótkim palindromem
NNN
.Zwykły program będzie:
Program zwrotny:
Małe dodatkowe wyjaśnienie wypychania liczby:
S
: włącz manipulację stosemS
: Wciśnij liczbę na stosS
lubT
: odpowiednio pozytywny / negatywnyS
/T
po których następuje znak końcowyN
: liczba binarna, gdzieS=0
iT=1
To znaczy
SSTTSTSN
popycha-10
. Do0
tego nie potrzebujemy wyraźnegoS=0
, więc po prostuSSSN
lubSSTN
wystarczy.źródło
Perl 6 / Raku, 3 bajty
Wypróbuj online!
Tworzy dowolny blok kodu. Normalnie wczytywany jest jego standardowy odpowiednik bloku
-> \x {x - 0}
, ale staje się odwrotnie-> \x {0 - x}
.źródło
C (brzęk) , 23 bajty
Wypróbuj online!
źródło
Brain-Flak , 7 bajtów
Wypróbuj online!
Wywrócony:
Wypróbuj online!
Uwaga: Działa tylko w tłumaczach obsługujących komentarze (np. Działa w Rain-Flak, ale nie w BrainHack)
Jeśli zamienimy również nawiasy otwierające / zamykające zamiast po prostu odwrócić bajty, możemy to zrobić w 8 bajtach bez użycia komentarzy:
Wypróbuj online!
Spróbuj odwrócić!
źródło
#
Rozpoczyna komentarz, więc nawiasy w oryginalnej wersji są ignorowane.Labirynt / sześciokąt , 6 bajtów
Labirynt:
Wypróbuj online! i odwrotnie .
Sześciokąty:
Wypróbuj online! i odwrotnie .
W jaki sposób?
źródło
Python 3 , 22 bajty
Wypróbuj online!
Lambda, która implementuje funkcję tożsamości (lub negację)
źródło
MarioLANG , 22 bajty
Wypróbuj online!
Po prostu wprowadza i podaje numer, zanim spadnie do EOF
wywrócony:
Wypróbuj online!
Pętli, aż wartość wejściowa wynosi 0, a wartość wyjściowa to -input, mówi liczbę.
źródło
R , 23 bajty
Postanowiłem spróbować bez komentowania.
Naprzód
Wypróbuj online!
Rewers
Wypróbuj online!
W wersji forward
+
działa operator binarny i-
jest operatorem jednoargumentowym.Z drugiej strony
+
staje się jednoargumentowy, a-
dwójkowy. Tak więc funkcja skanowania przyjmuje argumenty:file=""
co oznacza stdin iwhat=0
, które są również domyślnymi. Tak więc, gdy+
argument jest jednostkowy, pierwszy argument znajduje się po prawej stronie, a gdy jest binarny, pierwszy argument znajduje się po lewej stronie.The
część kodu nie robi nic naprawdę przydatnego, więc w pewnym sensie mój kod nie jest tak naprawdę bardziej poprawny niż użycie sztuczki komentowania.
źródło
+
redefinicja ma być używana jako jednoargumentowa i binarna. Zrozumienie, w jaki sposób zostało to przeanalizowane, zajęło mi minutę… Żadna inna nazwa operatora nie wykonałaby tego zadania.Haskell, 12 bajtów
Wypróbuj online! Rewers:
Wypróbuj online!
Nie tak krótki jak odpowiedź Ørjana Johansena , ale bez komentarzy.
źródło
Perl 5 (
-p
),76 bajtów-1 dzięki @primo
TIO
Komentarz nie zmienia danych wejściowych
Neguj dane wejściowe
TIO
źródło
$_*=$#
TIO . Zauważ, że#
musi to być ostatni bajt programu, w przeciwnym razie będzie interpretowany jako zmienna$#
, a nie jako ostatni indeks tablicy o nazwie <pusty>.$#
powoduje błąd (jeśli # nie jest ostatnim znakiem) lub nic-p
lub-n
. Podejrzewam, że płyta kotłowa ma z tym coś wspólnego ...-p/-n
dodaje;
kod po. Co oznacza, że$#
tak naprawdę jest to$#;
: rozmiar tablicy@;
. Jeśli rozmiar@;
zmian, wynik nie jest już poprawny ( TIO ). W każdym razie jest to super sprytne, dobrze zrobione! :)perl -MO=Deparse -p <(echo -n '$_*=$#')
, ponieważ wydaje się, żeperl -MO=Deparse -pe '$_*=$#'
dodaje nową linięGaia , 2 bajty
Wypróbuj online!
Wywrócony:
źródło
Backhand ,
65 bajtówWypróbuj online! Spróbuj dwukrotnie!
Zrobiono trochę skomplikowane ze względu na charakter wskaźnika w Backhand.
Nie sądzę, że można uzyskać krótsząhaha, okazuje się, że się myliłem. Nie powiela to instrukcji i ponownie wykorzystuje polecenia wejścia, wyjścia i zakończenia między dwoma programami. Teraz uważam, że jest optymalny, ponieważ potrzebujesz wszystkichIO-@
poleceń do działania, aw programie 4-bajtowym możesz wykonać tylko dwa z tych poleceń.Wyjaśnienie:
Wskaźnik w Backhand przesuwa się o trzy komórki tyknięciem i odbija się od granic komórki, co oznacza, że ogólna logika nakłada się. Można jednak manipulować tą prędkością za pomocą
v
i^
poleceń .Oryginalny program wykonuje instrukcje
IO-@
, które są wprowadzane jako liczba, wyprowadzane jako liczba, odejmowanie, kończenie. Oczywiście odejmowanie jest zbędne. W kodzie są to:Odwrócony program jest wykonywany
v-I-vO-@
.v
Zmniejsza działania wskaźnika pomiędzy kleszczy i-
odejmuje od spodu stosu, który jest pośrednio zero. Dodatkowe-
polecenia nic nie robią. Program działa jakźródło
Wolfram Language (Mathematica) , 9 bajtów
Wypróbuj online!
Przekaż: czytaj
((1)&*0+#-0)&*1
=#&
Wstecz: czytaj
((1)&*0-#+0)&*1
=-#&
źródło
R , 14 bajtów
Wypróbuj online!
Pełny program, który odczytuje liczbę lub odczytuje i neguje liczbę. Odwrotna funkcjonalność jest chroniona przez wbudowany komentarz
źródło
Python 3 ,
2214 bajtówWypróbuj online!
Używa konstruktora
int
klasy i wbudowanej metody pseudo-prywatnej.źródło
0.
będzie interpretowany jako liczba, po której następuje symbol05AB1E , 2 bajty
Wypróbuj online!
Wywrócony
źródło
Befunge-98 (FBBI) , 6 bajtów
Wypróbuj online! Spróbuj odwrócić!
źródło
APL (Dyalog Unicode) ,
133 bajtówWypróbuj online!
Trywialna odpowiedź. Zwraca
arg
lub¯arg
.Zaoszczędzono 10 bajtów, nie będąc głupcem (dzięki Adám).
Zmieniono wynikowy 3-bajtowy na bardziej dopasowaną funkcję.
źródło
Język maszyny Turinga , 39 bajtów
Pozytywny
Negatyw
Ten był nieco trudniejszy niż myślałem, głównie dlatego, że musiałem pozbyć się uprzedzeń do posiadania kodu, który działa z błędami „kompilacji”.
źródło
> <> ,
54 bajtówużywa inicjalizacji stosu z
-v
opcją, umieść tam zmienną wejściową.Wypróbuj online!
Lub spróbuj odwrócić
Wyjaśnienie
źródło
Stack Cats
-mn
, 2 bajtyWypróbuj online!
Spróbuj na odwrót!
Wyjaśnienie
Okazuje się, że jest to o wiele łatwiejsze niż poprzednie wyzwanie w Stack Cats. Pełny program (po złożeniu wniosku
-m
) tutaj-X-
.X
służy do zamiany stosów po lewej i prawej stronie głowicy taśmy, tzn. nie wpływa w ogóle na początkowy stos, więc możemy go zignorować. Ale wtedy program jest właściwie sprawiedliwy--
(dwukrotnie neguje górę stosu), co nic nie robi.W przypadku programu odwrotnego zastosowanie
-m
dajeX-X
. PonownieX
nic nie robi, więc program jest właściwie sprawiedliwy-
, co neguje górę stosu.Jedyne inne rozwiązanie 2-bajtowe jest
-=
, ale jest praktycznie takie samo. Jedyna różnica polega na tym=
zamienia się tylko wierzchołki sąsiednich stosów, a nie całe stosy.Ale znowu używanie
-m
czuje się trochę jak oszukiwanie, dlatego poniżej znajduje się rozwiązanie, które wykorzystuje w pełni dublowany program.Stack Cats
-n
, 7 bajtówWypróbuj online!
Spróbuj na odwrót!
Wyjaśnienie
Nadal obowiązują rozważania z poprzedniej odpowiedzi : każde poprawne rozwiązanie wymaga użycia sparowanych znaków i
I
. Sześć możliwych rozwiązań (zawartych w łączu TIO) jest praktycznie takich samych.-
i_
są równoważne w tym programie i:
mogą być zastąpione przez|
lubT
(które robią to samo dla wejść niezerowych i jednocześnie działają również dla wejść zerowych). Właśnie wybrałem ten do wyjaśnienia, ponieważ jest to najłatwiejsze.Pamiętaj więc, że początkowy stos zawiera dane wejściowe na górze
-1
(na nieskończenie wielu zerach), podczas gdy wszystkie inne stosy wzdłuż taśmy zawierają tylko zera. Stack Cats ma również właściwość polegającą na tym, że żaden program o parzystej długości nic nie robi (pod warunkiem, że się zakończy, ale i tak nie możemy użyć pętli do tego wyzwania). To samo dotyczy oczywiście każdego programu o nieparzystej długości, którego środkowa postać nic nie robi ... zobaczmy:Dlatego druga połowa programu dokładnie cofa pierwszą połowę i ponownie otrzymujemy dane wejściowe na początku
-1
.Program odwrotny to
:I>-<I:
. Zobaczmy, jak to zmienia rzeczy:źródło
Partia, 34 bajty
Echa (
ECHO.
) wejście (%1
). Reszta pierwszego wiersza technicznie przekierowujeSTDERR
do pliku o nazwieMER@
, ale nie ma to wpływu.Drugi wiersz jest skomentowany (
REM...
).Wywrócony
Używa trybu arytmetycznego polecenia set (
SET /a
) do odejmowania (-=
) input (%1
) od niezdefiniowanej zmiennej (a
), która jest równoważna z0 - input
. Ponownie, reszta pierwszego wiersza technicznie przekierowujeSTDERR
do pliku o nazwieMER@
, ale to nie ma wpływu.Drugi wiersz jest skomentowany (
REM...
).źródło
Brachylog , 2 bajty
Brachylog domyślnie wkłada z lewej strony i wychodzi z prawej.
&
ignoruje cokolwiek po lewej i przekazuje dane wejściowe do funkcji w prawo.ṅ
ogranicza każdą ze stron, aby były zaprzeczonymi wersjami.Wypróbuj online
źródło
Trójkątny ,
87 bajtówWypróbuj online!
Nie golfowany:
Wywrócony:
Wypróbuj online!
Poprzednia wersja (8 bajtów):
źródło