Twoim zadaniem, jeśli chcesz to zaakceptować, jest napisanie programu, który wyświetli liczbę niezerową (może być liczbą całkowitą lub zmiennoprzecinkową). Problem polega na tym, że jeśli odwrócę kod źródłowy, wynikiem musi być zanegowana oryginalna liczba całkowita.
Zasady
Musisz zbudować pełny program . Oznacza to, że wyjście musi zostać wydrukowane do STDOUT.
Obie liczby muszą znajdować się w bazie 10 (przekazywanie ich do jakiejkolwiek innej bazy lub z notacją naukową jest zabronione).
Wyprowadzanie liczb ze spacjami końcowymi / wiodącymi jest dozwolone.
To jest golf golfowy, więc wygrywa najkrótszy (oryginalny) kod w każdym języku!
Obowiązują domyślne luki.
Przykład
Powiedzmy, że twój kod źródłowy jest, ABC
a odpowiadający mu wynik to 4
. Jeśli CBA
zamiast tego napiszę i uruchomię, wynik musi być następujący -4
.
źródło
-
(0x45 = 0b00101101) działa w galaretce --
daje -1, ponieważ definiuje literał -1, podczas gdyṆ
(0xB4 = 0b10110100) daje 1, ponieważ wykonuje logiczne nie niejawnego wejścia wynoszącego zero. (OczywiścieṆ
działa równie dobrze: p)Odpowiedzi:
05AB1E , 2 bajty
Wypróbuj online!
! enilno ti yrT
źródło
JavaScript (V8) , 19 bajtów
Wypróbuj online!
prawie identyczny z ...
C # (interaktywny kompilator Visual C #) , 19 bajtów
Wypróbuj online!
(dzięki @someone za wskazanie tego)
nadal prawie tak samo w ...
Lua , 19 bajtów
Wypróbuj online!
ale krótszy w ...
Python 2 , 15 bajtów
Wypróbuj online!
Jeszcze krótszy w PHP, ponieważ ma to magiczne narzędzie do drukowania:
<?=
...PHP , 12 bajtów
Wypróbuj online!
Nawet krótszy w Rubim, ponieważ możesz
inspect
zamiast drukowaćRubinowy , 8 bajtów
Wypróbuj online!
źródło
Print(1)//)-1(tnirP
. ( Spróbuj online! )class A{static void Main(){System.Console.Write(1);}}//}};)1-(etirW.elosnoC.metsyS{)(niaM diov citats{A ssalc
1<!--!<1-
(9 bajtów) za pomocą HTML, który zostanie-1<!--!<1
odwrócony. Robi dokładnie to samo co twoja odpowiedź.print(1)--)1-(tnirp
PowerShell ,
43 bajtyWypróbuj online! lub ! enilno ti yrT
Gra w golfa przy użyciu arytmetyki zamiast formatu numer-komentarz-liczba.
Jest to najwyraźniej to samo, co jshell (na Sam ) i jq (na manatwork -
1-0
i0-1
).źródło
1-0
0-1
/// , 4 bajty
Wyjścia
9
.Wypróbuj online!
Wywrócony:
Wyjścia
-9
.Wypróbuj online!
Wszystko przed
/
drukowaniem, a reszta jest ignorowana (tak naprawdę nie używa się ukośników, więc nie wiem dokładnie, co się dzieje, ale nic nie wyświetla).źródło
/
Rozpoczyna proces wzór czytaniu, a więc znaki po jego odczytany do wzorca, nie wychodzącego./\-//1-
i pomyślałem, że jestem sprytny. : DKlein 011, 5 bajtów
Wypróbuj online!
Wywrócony
Wypróbuj online!
Wykorzystują one unikalną topologię Kleina, w szczególności prawdziwą płaszczyznę projekcyjną. (Chociaż indywidualnie każda odpowiedź wymaga tylko butelki Kleina).
źródło
Biała spacja , 21 bajtów
Litery
S
(spacja),T
(tab) iN
(nowa linia) dodane tylko jako wyróżnienia.Wyjścia
1
/-1
.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
.źródło
T-SQL, 16 bajtów
Wybrano 4, ponieważ 1 jest nadużywane :)
źródło
select 1#1-tceles
(17 bajtów). Możesz sprawdzić wynik na sqlfiddle.com/#!9/9eecb/107825 .Japt , 2 bajty
Każda pojedyncza cyfra całkowitą
>0
można stosować w miejsce2
, jak to możliweA-G
,H
,I
,J
iL
(10-16
,32
,64
,-1
i100
, odpowiednio).Przetestuj | Wywrócony
n
Sposób w zastosowaniu do liczby całkowitej, odejmowania, że liczba całkowita z argumentu przekazywane do niego, które domyślnie0
. Podczas uruchamiania do przodun
metoda jest uruchamiana na niejawnym pierwszym wejściu, który również jest domyślnie ustawiony na0
.Alternatywnie
g
zamiast tego można zastosować metodęn
, która daje znak wyniku odjęcia jej argumentu od liczby całkowitej, do której jest stosowana.źródło
Haskell bez komentarzy, 41 bajtów
Przesyła wydruki
1
+ nowa linia:Wypróbuj online!
Odwrócone wydruki
-1
bez znaku nowej linii (które można dodać kosztem 2 bajtów):Wypróbuj online!
-1
ciągów wyjściowych służy unikanie nawiasów.$!
(ścisła aplikacja) zamiast spacji pozwala, aby odwrócona linia była prawidłową definicją operatora!$
(po prostu$
nie zrobiłoby tego, ponieważ redefinicja przerwałaby użycie).niam
jest zdefiniowana dla ostatniej linii.!$
, który nie jest używany, ale musi poprawnie parsować i sprawdzać typ.źródło
PHP ,
1513 bajtówWersja PHP bez nadużywania komentarzy.
ohce
jest niezdefiniowaną stałą, więc będzie równa wartości ciągu jej nazwy. W rezultacie spróbuje wydrukować+1-'ohce'
lub-1+'ohce'
po odwróceniu. Ponieważ'ohce'
jest to wartość nienumeryczna, w operacjach arytmetycznych zostanie użyte 0, a tylko1
lub-1
zostaną wydrukowane.Wypróbuj online!
Wypróbuj online!
źródło
Google , 3 bajty
Wypróbuj online!
! enilno ti yrT
źródło
Galaretka , 2 bajty
Wypróbuj online!
N
przykładowo, powoduje0
, a następnieC
uzupełnia, powoduje1-0
=1
.Wypróbuj online!
C
uzupełnienie, powoduje1-0
=1
.N
przykładowo, wyniki w-1
.źródło
K (ngn / k) , 3 bajty
Wypróbuj online!
czy coś mi brakuje? wydaje się oczywiste dla języków REPL
źródło
Cubix ,
765 bajtówSpróbuj tutaj
Odwrócony
Wyjaśnienie
Cubified:
Rozwijając przepływ sterowania, wykonujemy
)O(@
przyrosty, wyjścia, dekrecje i wyjścia.Odwrócone i skostniałe:
Rozwijając przepływ sterujący, wykonujemy
(O)@
, które zmniejszają, generują, zwiększają i wychodzą.Poprzednia wersja
Spróbuj tutaj
Odwrócony
Nie tak krótki, ale estetyczny.
źródło
@)O(@
za 5 bajtów i przywrócenie symetrii :)Runiczne Zaklęcia , 4 bajty
Wypróbuj online! Spróbuj cofnąć!
Nie mogłem znaleźć sposobu na ponowne użycie
1
polecenia, nawet kosztem jednego lub dwóch bajtów.1@ɩ
działa również, ale ma taką samą liczbę bajtów.źródło
APL (Dyalog Unicode) ,
43 bajtyWypróbuj online!
Trywialna odpowiedź. Drukuje
1
po uruchomieniu i¯1
po odwróceniu.źródło
Stack Cats
-mn
, 4 bajtyWypróbuj online! W stopce zamieściłem wszystkie pozostałe 4-bajtowe rozwiązania. (Stack Cats ignoruje wszystko po pierwszym wysunięciu linii).
Spróbuj na odwrót!
Wyjaśnienie
Te
-n
zakręty flag na wyjściu numerycznej (i wejścia, ale nie mają żadnych), a-m
flaga jest zazwyczaj tylko wygoda golfa, który pozwala uniknąć niepotrzebnego część kodu źródłowego. Jest tak, ponieważ każdy program Stack Cats musi mieć lustrzaną symetrię. Z-m
flagą dajesz jej tylko pierwszą połowę (plus środkową postać). Tak więc rzeczywisty program, tutaj jest:Jak widać na pierwszym łączu TIO, jest mnóstwo 4-bajtowych rozwiązań, ale wybrałem to ze względu na jego prostotę. Stack Cats jest oparty na stosie, a ten program używa tylko początkowego stosu. Ponieważ nie mamy żadnych danych wejściowych, zawiera on pojedynczy
-1
(znacznik EOF) na nieskończonej studzience zer. Trzy polecenia w programie mają następujące znaczenie:Oto, w jaki sposób program modyfikuje stos (stany i polecenia są rozmieszczone naprzemiennie, aby wskazać, w jaki sposób każde polecenie zmienia stos z jednego stanu na drugi):
Jak się okazuje, jedynym poleceniem, które naprawdę tu robi cokolwiek, jest zmiana
_
znacznika EOF w1
. Dane wyjściowe na końcu programu są niejawne, a znacznik EOF jest opcjonalny, więc po prostu drukuje to,1
co otrzymujemy.Teraz, jeśli odwrócimy kod źródłowy, z powodu niejawnego dublowania, rzeczywisty program staje się:
To robi coś zupełnie innego:
Tym razem dolna część stosu jest nadal,
-1
więc działa jak znacznik EOF i-1
drukowana jest tylko jego górna część....
Teraz, gdy już to wszystko zostało powiedziane, ponieważ Stack Cats ma tak wyjątkowy związek z kodem cofania, uważam, że używanie
-m
jest trochę oszustwem. Zwykle ma to na celu zaoszczędzenie bajtów poprzez pominięcie zbędnej części kodu źródłowego, ale tutaj w rzeczywistości sprawia, że wyzwanie jest o wiele łatwiejsze, a nawet pełny program krótszy. Wynika to z faktu, że odwrócenie pełnego programu zmieni program tylko, jeśli zawiera którykolwiek<>[]
, co oznacza również, że program używa wielu stosów (Stack Cats faktycznie ma taśmę stosów, gdzie wszystkie oprócz początkowej są wypełnione tylko z zerami na początek). Co więcej, odwrócenie go powoduje zamianę par<>
i[]
, co nadal sprawia, że wykonanie jest symetryczne. Jedynym sposobem na przełamanie tej symetrii jest użycie tego,I
co robi-]
lub-[
lub nic w zależności od znaku górnej części stosu. Więc...Stack Cats
-n
, 11 bajtówWypróbuj online! Stopka ponownie zawiera wszystkie inne alternatywy o tej samej liczbie bajtów. Niektóre z tych wyjść 1 / -1 i niektóre 2 / -2, jak wskazano po każdym programie. Wybrałem ten, aby wyjaśnić trochę losowo jako jeden z tych, które generują 2.
Spróbuj na odwrót!
Wyjaśnienie
Jak powiedziałem, ten jest trochę dłuższy. Nawet jeśli użyjemy
-m
do tego zapisu, ważyłby 6 bajtów zamiast powyższych 4.Tym razem używane polecenia:
Pierwszy program wykorzystuje tylko dwa stosy. To trochę niechlujne w sztuce ASCII, ale postaram się jak najlepiej. Nawiasy kwadratowe wskazują, na którym stosie znajduje się głowica taśmy, i umieszczę polecenia między każdą parą stanów stosu.
Teraz
-1
działa jak znacznik EOF i2
drukuje się.Drugi program jest taki sam, dopóki
[
. Do drugiej sekundy jest praktycznie tak samoI
. Technicznie będziemy na innym stosie, ale bez wartości, wszystkie są nierozróżnialne. Ale wtedy różnica międzyI[
iI]
kończy się bez znaczenia:I tym razem nie mamy znacznika EOF, ale program nadal wyświetla
-2
.źródło
Zsh , 12 bajtów
Wypróbuj online!
Podstawowa metoda przekazywania, komentowania i odwracania.
Jeśli I / O jest mniej restrykcyjne, możliwe jest bardziej interesujące rozwiązanie 11-bajtowe dzięki Zsh obsługującemu ujemne kody powrotu:
Odwrócony,
721- nruter
kończy działanie z kodem127
(nie znaleziono polecenia).exit -127
nie może być użyty, byłby rzutowany nau8
. Wypróbuj online!źródło
CJam , 3 bajty
Wypróbuj online!
Jak oni pracują
Wersja normalna:
Wersja odwrócona: masz pomysł.
źródło
MATL , 3 bajty
Wypróbuj online!
Jak oni pracują
Normalna:
Wywrócony:
źródło
Wolfram Language (Mathematica) ,
2118 bajtówWypróbuj online!
-3 dzięki Martinowi Enderowi
źródło
Sześciokąt , 5 bajtów
Wypróbuj online!
Każdy prawidłowy program musi:
@
lub:
). Ta ostatnia różni się tylko w przypadku pierwszej, gdy istnieje polecenie ruchu wskaźnika pamięci. Również to polecenie nie może znajdować się na pierwszym lub ostatnim bajcie.!
,;
jest również możliwe, ale prawdopodobnie zajmie więcej bajtów)Dlatego dwubajtowy program jest oczywiście niemożliwy. Program 3-bajtowy jest niemożliwy, ponieważ drugi bajt musi być poleceniem kończącym, a pierwszy bajt nie może być poleceniem lustrzanym / manipulacyjnym IP, dlatego można wykonać tylko 1 bajt.
Myślę, że 4-bajtowy program nie jest możliwy. Taki program musi mieć postać
a@bc
z sześciokątną siatkąDlatego
a
musi być poleceniem przekierowania IP. Jednak niemożliwe jest wygenerowanie zarówno dodatniej, jak i ujemnej liczby za pomocą tylko 1 polecenia manipulacji pamięcią.źródło
Haskell , 28 bajtów
Wypróbuj online!
Spróbuj enilno!
źródło
Trójkątny , 4 bajty
Wypróbuj online!
Wyjścia 1.
Nie golfowany:
Wywrócony:
Wypróbuj online!
Wyjścia -1.
źródło
Java 5 lub 6,
12767 bajtówWyjścia
9
/-9
.Brak kompilatora online, ponieważ Java 5 lub 6 nie jest nigdzie dostępna.
Możesz jednak wypróbować 127 bajtów odpowiednika Java 8:
Wypróbuj online lub wypróbuj online w odwrotnej kolejności .
Wyjaśnienie:
Java 5 i 6 zawierały błąd pozwalający na utworzenie bloku kodu w wyliczeniu, aby coś zrobić, pomimo pominięcia obowiązkowej metody głównej programu. Spowoduje to błąd:
Ale nadal wyświetli to, co chcielibyśmy STDOUT, więc możemy to zignorować .
źródło
Golang , 109 bajtów
I odwrotnie:
Wypróbuj online!
źródło
Println
Może byćPrint
, iimport "fmt";
nie potrzebuje miejsca:import"fmt";
. :)Perl 5 (-p), 12 bajtów
Wypróbuj online!
! enilno ti yrT
}{
Pseudo-operator naprawdę przydaje.Perl 5 (-M5.010), 9 bajtów
Dostarczone przez Nahuel Fouilleul w komentarzu
Wypróbuj online!
! enilno ti yrT
źródło
say 1#1-yas
say+1-yas
isay-1+yas
Siatkówka , 6 bajtów
Wydruki
1
.Wypróbuj online!
Wydruki
-1
.Wypróbuj online!
Wyjaśnienie:
1
To ... nic nie robi. Z
`
tego powodu jest to podstawienie z<
na-
(z konfiguracją-
, która nic nie robi), ale dane wejściowe są puste, więc dane wyjściowe są również puste.I ten drugi etap dopasowuje puste wyrażenie regularne do pustych danych wejściowych i zlicza liczbę dopasowań, która wynosi dokładnie 1. Wynik jest niejawny.
Wyjaśnienie:
-1
Tym razem zastępujemy puste wyrażenie regularne
-
. To rzeczywiście zamienia puste wejście w jeden-
.Tutaj konfiguracja faktycznie coś robi:
<
drukuje dane wejściowe stołu montażowego przed wykonaniem stołu montażowego, więc drukujemy-
. Następnie-
zlicza myślniki w danych wejściowych stołu montażowego, które są ponownie 1. Ze względu na niejawne dane wyjściowe, to wypisuje1
po-
, dając nam-1
w razie potrzeby.źródło
źródło
pieprzenie mózgu , 156 bajtów
Wypróbuj online! / Weryfikator do przodu / do tyłu w Bash
Drukuje do
-1
przodu i\n1
do tyłu.Pomimo tego, że jest prawie banalna, uważam, że jest to optymalne rozwiązanie dla tej konkretnej stałej wydajności.
Dowód:
Program nie może mieć
[
lub]
.Dlatego program musi mieć formę
<A> . <B> . <C>
.Każdy
,
może zostać zastąpiony wystarczającą liczbą<
bez zwiększania liczby+
lub-
.Każdy z nich
+
jest użyteczny tylko w programie do przodu lub do tyłu, nigdy w obu.Dowód:
+
w części A jest oczywiście przydatny tylko w programie do przodu,+
aw części C jest oczywiście użyteczny tylko w programie do tyłu.Oznacz
shift(P)
= liczba<
w P - liczba>
w P. Rozważmy program<B> = <D> + <E>
,+
środek jest przydatny w programie do przodushift(E) = 0
, podobnie jest przydatny w programie wstecznymshift(D) = 0
. Jeśli jednakshift(D) = shift(E) = 0
program zostanieB
wykonany do przodu lub do tyłu, doda drugą wartość do bieżącej komórki przed wydrukowaniem za drugim razem, co nie może mieć miejsca, ponieważord('1') - ord('\n') != ord('1') - ord('-')
.Dlatego program potrzebuje co najmniej
ord('-')+ord('1')+ord('\n')+ord('1') = 153
+
s, 2.
si co najmniej a<
>
lub,
ponieważshift(B) != 0
.źródło