Plus lub minus poligloty!


14

Twoje zgłoszenie musi zawierać listę liczb (w dowolnym formacie listy obsługiwanym przez Twój język lub przy użyciu wielu parametrów funkcji / wiersza poleceń) lub ciąg liczb oddzielonych dowolnymi znakami, które nie są 0123456789. W jednym języku musi dodać je wszystkie i wygenerować sumę. W innym języku musi wyprowadzać je odejmowane od siebie w kolejności. Przykład:

12
5
7
2

W jednym języku musi generować 26, aw innym musi generować -2. Zauważ, że wszystkie wprowadzone liczby będą dodatnimi liczbami całkowitymi mniejszymi niż 100. Nigdy nie będzie więcej niż20 liczb, więc nigdy nie wydasz więcej niż 2000lub mniej niż -1899. Jakieś pytania? Komentarz poniżej!


Czy dozwolone są końcowe białe znaki w danych wyjściowych?
Business Cat

Czy dozwolone są dwie różne wersje tego samego języka? Zobacz odpowiedź Pythona 2/3 HyperNeutrino
Mr. Xcoder

@ Mr.Xcoder jest dozwolony.
programator5000

2
@BetaDecay uważasz, że to jest problem, sprawdź kod-golfa!
programista

1
@ programmer5000 Masz na myśli [code-golf] -[polyglot]?
Erik the Outgolfer

Odpowiedzi:


14

Galaretka / 05AB1E , 3 bajty

00000000: c6 71 53                                         .qS

To jest zrzut heksadecymalny (xxd) przesłanego programu.

Wypróbuj online!

Galaretka: Suma

Galaretka używa strony kodowej Galaretka , więc widzi następujące znaki.

İqS

Wypróbuj online!

Jak to działa

İqS  Main link. Argument: A (array)

İ    (ignored)
 q   Unrecognized token. This breaks the link; nothing to the left is executed.
  S  Take the sum of A.

05AB1E: Różnica

05AB1E używa Windows-1252 , więc widzi następujące znaki.

ÆqS

Wypróbuj online!

Jak to działa

Æ     Take the difference of the input.
 q    Quit.
  S   (ignored)

22

Python 2/3, 52 bajty

lambda l:sum(l[:1]+[x*int(1-(1/2)*4)for x in l[1:]])

int(1-(1/2)*4)zwraca 1w Pythonie 2, ponieważ 1/2najpierw ocenia 0, a potem 0 * 4 = 0.

int(1-(1/2)*4)zwraca -1w Pythonie 3, ponieważ 1/2najpierw ocenia 0.5, a potem int(0.5 * 4) = int(2.0) = 2.


1
Czy używanie tego samego języka, a inne wersje są w ogóle dozwolone?
Pan Xcoder,

3
@ Mr.Xcoder Nie rozumiem, dlaczego nie, widziałem inne języki używające różnych wersji C, Java, Python i Befunge. Zapytam jednak meta lub zobaczę, czy mogę znaleźć pokrewny post z meta.
HyperNeutrino

Jednak dobre wykorzystanie sztuczek matematycznych ze względu na zmiany wersji.
Pan Xcoder,

1
@ Mr.Xcoder Thanks! Zadałem pytanie dotyczące meta tutaj ; Mam nadzieję, że wkrótce otrzymam odpowiedź.
HyperNeutrino

1
@ programmer5000 Podział liczb całkowitych.
HyperNeutrino

14

C i C ++ (oba z GCC), 81 75 73 bajtów

int c;int f(int*a,int l){auto d=.5;c=*a++;for(;--l;a++)c+=*a-4*d**a;c=c;}

Pobiera wskaźnik do tablicy i długości.

Objaśnienie: nadal używa wyjaśnienia @Steadybox ': p W C,auto d=.5 deklaruje zmienną całkowitą z klasą auto storage (która jest wartością domyślną), która jest następnie inicjowana na 0, podczas gdy w C ++ 11 deklaruje podwójną, która jest inicjowana do 0,5.

C - plus język: Wypróbuj online!

C ++ - minus language: Wypróbuj online!


11

05AB1E / galaretka , 5 bajtów

00000000: 4f71 7f5f 2f                             Oq._/

Wypróbuj online! (05AB1E)
Wypróbuj online! (Galareta)

05AB1E widzi :

Oq? _ /
Wyjaśnienie:

Argument domyślny Oq? _ / 1.
O Weź sumę pierwszego elementu wejściowego.
 q Wyjdź.
  ?_/ Nie funkcjonuje.

Galaretka widzi :

Oq
_ /
Wyjaśnienie:

_ / Główny link. Argumenty: z
_ / Odejmij elementy z po kolei.

Łącze pomocnika Oq. Nie funkcjonuje.

Czy używa to strony kodowej Jelly?
programista

@ programmer5000 Jest to surowy bajt, który używa CP-1252 dla 05AB1E i JELLY dla Galaretki. Stąd 7f.
Erik the Outgolfer

Och, nie zdawałem sobie z tego sprawy!
programista

8

Właściwie / galaretka , 4 bajty

00000000: e4 81 5f 2f                                      .._/

To jest zrzut heksadecymalny (xxd) przesłanego programu. Nie można go przetestować w surowej postaci online; TIO nie obsługuje kodowania CP437.

Właściwie: Suma

Właściwie używa CP 437 , więc widzi następujące znaki.

Σü_/

Wypróbuj online!

Jak to działa

Σ     Take the sum on the input.
 ü    Print and empty the stack.
  _   Natural logarithm. Ignored since the stack is empty.
   /  Float division. Ignored since the stack is empty.

Galaretka: różnica

Galaretka używa strony kodowej Galaretka , więc widzi następujące znaki.

ỵ¹_/

Wypróbuj online!

Jak to działa

ỵ¹_/  Main link. Argument: A (array)

ỵ     Unrecognized token. Splits the link.
 ¹    Identity; yield A.
  _/  Reduce (/) A by subtraction (_).

Przeczytałem to jako actually, Jelly.:)
programista


1
@EriktheOutgolfer Mniej więcej. Szczerze mówiąc, nie jestem do końca pewien, co robią nierozpoznane tokeny.
Dennis

Po namyśle myślę, że właśnie wybrałeś Właściwie tylko dlatego, że üprzypisał on idealną funkcję> _>
Erik the Outgolfer

@ programmer5000 It's jelly, actually.
Arjun,


7

CJam / Galaretka , 6 bajtów

q~:-
S

CJam

q~    e# Read a list from input
:-    e# Reduce by subtraction
S     e# Push a space
      e# Implicit output

Wypróbuj online!

Galareta

(używając UTF-8, a nie strony kodowej Jelly)

q~:-jest linkiem pomocniczym. Ponieważ nie można go wywołać, tak naprawdę nie ma znaczenia, co robi.Soblicza sumę tablicy.

Wypróbuj online!


5
Dżem i galaretka. Sensowne jest użycie dwóch podobnych rzeczy razem.
mbomb007 18.04.17

1
To jest nieprawidłowe Galaretka ma 0x7f dla nowej linii, to ma 0x0a dla nowej linii. W Galaretce jest to w rzeczywistości to samo co q~:-½S. Niestety fix ( q~:-e#\x7fS) jest większy. Wypróbuj online! (CJam) i wypróbuj online! , każdy z własnym kodowaniem do przetestowania na własną rękę.
Erik the Outgolfer,

2
Alternatywnie możesz użyć kodowania UTF-8 dla Galaretki, co sprawia, że ​​jest to aktualne, ale proszę je podać.
Erik the Outgolfer

5

JavaScript / Cubix, 36 bajtów

//.!v+u;$I^@O<.Iu
a=>eval(a.join`-`)

Spróbuj!

Funkcję JavaScript można przetestować za pomocą poniższego fragmentu, program Cubix można przetestować tutaj .

Jak to działa?

JavaScript

Pierwszy wiersz jest komentarzem do kodu JavaScript, ponieważ zaczyna się od dwóch ukośników, więc JavaScript widzi tylko dolną linię ( a=>eval(a.join`-`)), która pobiera tablicę jako dane wejściowe, łączy ją ze znakami minus pomiędzy nimi, a następnie uruchamia ją jako kod, w wyniku czego odejmowanie wszystkich elementów w tablicy.

let f=
//.!v+u;$I^@O<.Iu
a=>eval(a.join`-`)

console.log(f([1,2,3,4,5]))
console.log(f([3,1,4,1,5]))

Cubix

Cubix widzi następujący sześcian (zauważ, że Cubix ignoruje wszystkie białe znaki):

      / / .
      ! v +
      u ; $
I ^ @ O < . I u a = > e
v a l ( a . j o i n ` -
` ) . . . . . . . . . .
      . . .
      . . .
      . . .

Początek

Adres IP zaczyna się na trzeciej linii, wskazując na wschód. Uderza w 'I'polecenie, które pobiera liczbę z wejścia i wypycha ją na stos. Następnie jest przekierowywany '^'do pętli sumowania.

Pętla sumy

Usunąłem wszystkie znaki nie będące częścią pętli sumy i zastąpiłem je no-ops ( '.'). IP początkowo dociera do drugiej linii, wskazując na wschód.

      . . .
      ! v +
      u ; $
. . . . . . I u . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
      . . .
      . . .
      . . .

Najpierw '!'polecenie sprawdza górny element. Jeśli tak jest 0(tzn. Osiągnęliśmy koniec wejścia), wykonywana jest następna instrukcja ( 'v'), odzwierciedlająca adres IP poza pętlą. Jeśli nie osiągnęliśmy jeszcze końca danych wejściowych, dodajemy razem dwa górne elementy ( '+', drugi element jest sumą do tego momentu, górny element to nowe dane wejściowe). Następnie IP zawija się do innej powierzchni sześcianu, w 'u'znak, co powoduje, że IP wykonuje zawracanie i wykonuje 'I'polecenie (czytaj kolejną liczbę całkowitą), wskazując na północ. Adres IP wraca do górnej powierzchni, pomija ( '$') instrukcję usuwania (';' ) i wykonuje kolejny zwrot w tył, do punktu, w którym zaczęliśmy.

Koniec

Jeśli adres IP jest odzwierciedlany poza pętlą, wykonywane są następujące znaki:

      . . .
      . v .
      . ; .
. . @ O < . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
      . . .
      . . .
      . . .

Instrukcje te usuwają górny element (który jest zero), a następnie wypisują górny element (sumę) jako liczbę całkowitą. Następnie '@'polecenie zostaje osiągnięte, więc program się kończy.


4

Python 2 i 3, 33 bajty

lambda l,*r:l+sum(r)*(1/2>0 or-1)

Traktuje dane wejściowe jako osobne parametry.


Python 2.
Python 3.


lambda l,*r:l+sum(r)*(1/2-.5)*2dla 31 bajtów
ovs

@ovs Celowo unikałem zwracania liczby zmiennoprzecinkowej. Jeśli możesz, *(1/2*4-1)to bajt jest mniejszy niż twój.
Veedrac

Myślę, że typ zwrotu nie ma znaczenia, dopóki wartość jest poprawna
dniu

4

JS (ES6), CGL (CGL Golfing Language) , 32 26 bajtów

 x=>eval(x.join`-`)
//-⨥

JS wykonuje odejmowanie, a CGL dodaje.

JS:

x=>eval(x.join`-`)

Anonimowa funkcja, która odejmuje każdy element w tablicy za pomocą Array#reduce .

//-⨥

Komentarz.

CGL

 x=>eval(x.join`-`)

To, co wygląda na spację w pierwszym wierszu, jest w rzeczywistości spacją nierozdzielającą, komentarzem w CGL. Pierwszy wiersz jest ignorowany.

//-⨥

Do /s nic nie robić. Zmniejsza -bieżący wskaźnik stosu, aby wskazywał na dane wejściowe. dodaje razem bieżący stos (dane wejściowe), wypycha go do następnego stosu i zwiększa bieżący stos. Jest niejawnie wyprowadzony.


1
Możesz skrócić wersję JS, używając x=>eval(x.join`-`), zapisując 5B
Łukasz


@ Adám masz rację. Naprawiony.
programista

4

JavaScript (ES6) / QBasic, 84 83 bajty

'';f=x=>eval(x.join`+`)/*
INPUT a
FOR i=1 TO 2
i=0
INPUT n
a=a-n
PRINT a
NEXT i
'*/

Kolejne rozwiązanie z dodaniem komentarza!

JavaScript oblicza sumę. Pobiera tablicę zawierającą liczby jako dane wejściowe. Wyjścia jako funkcja return. Możesz wywołać funkcję jak alert(f([10,20,30])).

QBasic oblicza różnicę. Wielokrotnie prosi o dane wejściowe. Jak tylko wpiszesz wartość, wyświetli różnicę wszystkich wprowadzonych liczb do momentu uderzenia Enteri ponownie poprosi o wprowadzenie. Robi to samo do końca wszystkiego.


Jak to działa?

W QBasic (język ustrukturyzowanej rodziny BASIC; nie wymaga numerów linii), 'oznacza początek komentarza, który trwa do końca linii. Natomiast w JavaScript oznacza początek łańcucha. Tak więc cały pierwszy wiersz jest oznaczony jako komentarz w QBasic, ale w JavaScript wiersz jest wykonywany (i ten wiersz zawiera część JavaScript, która dodaje liczby, a także/* na końcu, który rozpoczyna komentarz w celu ukrycia reszty kodu QBasic z interpretera JavaScript).

Kod z drugiej linii do drugiej ostatniej linii zawiera kod QBasic do obliczenia różnicy wszystkich liczb wejściowych (kod jest bardzo zrozumiały).

Ostatni wiersz zawiera '*/. 'powoduje, że interpreter QBasic interpretuje następujący kod jako komentarz, podczas gdy w JavaScript nie ma żadnego efektu, ponieważ jest częścią komentarza (który został uruchomiony na końcu pierwszego wiersza). Poniższy kod ( */) powoduje, że JavaScript kończy komentarz, który został uruchomiony w pierwszym wierszu, ale nie jest wykonywany w QBasic, ponieważ QBasic uważa, że ​​jest to część komentarza.


Przypadki testowe

JavaScript (dodaje):

'';f=x=>eval(x.join`+`);/*
INPUT a
FOR i=1 TO 2
i=0
INPUT n
a=a-n
PRINT a
NEXT i
'*/
console.log(f([12,5,7,2]));

QBasic (odejmuje):

Przejdź do tej strony . Skopiuj wklej następujący kod w ich edytorze tekstu:

1 '';f=x=>eval(x.join`+`);/*
2 INPUT a
3 FOR i=1 TO 2
4 i=0
5 INPUT n
6 a=a-n
7 PRINT a
8 NEXT i
9 '*/

Powodem, dla którego numery linii są wymagane, jest to, że wspomniana strona internetowa obsługuje tylko nieustrukturyzowane języki BASIC. I ta strona internetowa jest jedynym przyzwoitym tłumaczem BASIC, jaki udało mi się znaleźć. Jednak uruchomienie kodu znajdującego się w górnej części postu (kod bez numerów linii) powinno działać dobrze w każdym dobrym interpreterie QBasic, który obsługuje ustrukturyzowany język BASIC i 'jako narzędzie do komentowania (choć niewielu tego nie robi, większość jednak).


Notatki

  • To mój pierwszy post z ! Mam nadzieję, że to dobry!
  • Część kodu QBasic nie wymaga, ENDponieważ interpreter nigdy go nie osiągnie! (Na zawsze utknie w nieskończonej pętli; zawsze prosi o więcej danych wejściowych.)

3

Brain-Flak / Brain-Flueue , 20 bajtów

({}<([({{}})]){}>{})

Wypróbuj online! (Brain-Flak) (plus)

Wypróbuj online! (Brain-Flueue) (minus)

Wyjaśnienie

Jedyną różnicą między Brain-Flak i Brain-Flueue jest to, że Brain-Flueue zastępuje dwa stosy (ostatni na pierwszym wyjściu) użyte w Brain-Flak na dwie kolejki (pierwsze na pierwszym wyjściu). Oczywiście ten program wykorzystuje tę różnicę.

Kod z adnotacjami

(                  ) Push the sum of...
 {}                   the first input,
   <            >     zero,
                 {}   the remaining sum (see below)
    ([      ])       Push the of below line
      ({{}})         Pop all the input sans first, push the sum
              {}     Pop (in Brain-Flak, this discards the negative sum,
                            in Brain-Flueue, the positive)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.