Sprzeczne poligloty

19

Cóż, wszyscy kochają Polyglots . Otrzymasz dwie liczby całkowite, w dowolnej standardowej formie wprowadzania (bez kodowania twardego). Twoim zadaniem jest napisanie poliglota, który znajdzie minimalną wartość w języku i maksymalną wartość między dwiema liczbami w innym języku, i wykona następujące operacje:

  • Kod, który znajdzie wartość maksymalną, musi również obliczyć ich sumę.
  • Program, który znajdzie wartość minimalną, musi również obliczyć wynik ich odejmowania ( max - min)
  • Oto „trudna część” : jeśli dwie liczby są równe, oba programy nie mogą niczego wysyłać / zwracać (zarówno do, jak STDOUTi do STDERRdowolnej innej returnmetody)
  • Patrz wyjście specyfikacje sekcję uzyskać więcej informacji na temat formatowania

Wejście

Jak wspomniano powyżej, dwie liczby całkowite pobrane jako dane wejściowe w dowolnej standardowej metodzie , wspólnej dla obu języków.

Dane wyjściowe

  • Dla programu, który znajdzie max, format powinien mieć:max_value, addition result
  • Dla programu, który znajdzie min, format powinien wynosićmin_value, subtraction result (max - min)
  • Wyniki mogą być drukowane, z wyraźnego separatora ( , \n, ,lub cokolwiek innego chcesz), powrócił z funkcji jako ciąg znaków zawierający dwa oczekiwane wartości z ogranicznikiem lub jako lista numerów (np [max_value,sum])

Przykłady:

Input   || Max Language Output || Min Language Output

100, 40 || 100, 140            || 40, 60
63, 67  || 67, 130             || 63, 4
-45, -5 || -5, -50             || -45, 40
21, 21  ||                     ||
-1, 1   || 1, 0                || -1, 2 

Punktacja:

To jest , więc spróbuj napisać najkrótszy kod, aby uzyskać pożądane wyniki, zwracając uwagę, że standardowe luki są surowo zabronione. Musisz użyć dwóch różnych języków, a nie innych wersji tego samego języka (np .: Python 2- Python 3pary są nieprawidłowe)

Pan Xcoder
źródło
@downvoter dlaczego to było?
Pan Xcoder,
6
Polecam trzymanie pytań w piaskownicy przez co najmniej kilka dni, aby uzyskać wystarczającą uwagę przed opublikowaniem na main. Nie przegłosowałem.
Erik the Outgolfer
Goddammit, napisał odpowiedź Py2 / Py3 i tak jak miałem zamiar napisać, zobaczyłem zasadę. 30 minut, nigdy nie odzyskam Haha.
sagiksp

Odpowiedzi:

6

05AB1E / galaretka , 21 20 bajtów

-1 bajt po prośbie o pomoc - dzięki Emigna! ( `będzie push(uwrapped(pop())))

Surowe bajty (zrzut po prawej pokazuje, co wyświetla mój komputer z systemem Windows):

60 ca 69 b9 5a 73 4f 29 71 93 18 fa 2c d3 f7 d3    `Êi¹ZsO)q..ú,Ó÷Ó
cd 04 18 2f                                         Í../

Oba pobierają dane wejściowe ze STDIN i dane wyjściowe do STDOUT jako reprezentację listy [x, y].

Maksymalny język to 05AB1E:

`Êi¹ZsO)q“.ú,Ó÷ÓÍ../

Gdzie .reprezentują bajty niedrukowalne na stronie kodowej ( cp1252 ) i prawdopodobnie tutaj, w czymkolwiek używacie (0x18 = CANi 0x04 = EOT).

Wypróbuj wersję 05AB1E

Minimalny język to Jelly:

İ__iỤZs0)qƓð«,ạẋạṠ¥ð/

Wypróbuj wersję Jelly .

W jaki sposób?

05AB1E:

`Êi¹ZsO)q“.ú,Ó÷ÓÍ../ - parsed left to right, executed as parsed
                     - implicit input taken
  i                  - If:
`                    -     push(unwrapped(pop()))
 Ê                   -     push(pop()!=pop())
                     - ...Then:
   ¹                 -     push(1st item from input history)
    Z                -     push(max(top of stack))
     s               -     push(reverse(pop(),pop()))
      O              -     push(sum(pop()))
       )             -     wrap(pop())
        q            -     quit - implicit print of top of stack
         “.ú,Ó÷ÓÍ../ - unexecuted and unparsed string

Galareta:

`ȮiỤZs0)qƓð«,ạẋạṠ¥ð/ - parsed left to right, not executed until parsed
`ȮiỤZs0              - a dyadic chain which would error if executed (monad from dyad, index of, grade up, transpose, split into chunks of length 0)
       )q            - currently unassigned code points each currently creates a new link
         Ɠ           - read and evaluate a line of input
          ð       ð  - dyadic chain separations
                   / - reduce by:
           «         -     minimum(left, right)
             ạ       -     absolute difference(left, right)
            ,        -     pair(result)
                 ¥   -     last two links as a dyad:
               ạ     -         absolute difference(left, right)
                Ṡ    -         sign(result) (i.e. {0:0, +x:1, -x:-1} but -x never happens)
              ẋ      -     repeat list left right times
                     - implicit print
Jonathan Allan
źródło
18

C i C ++ (gcc), 117 107 bajtów

-10 bajtów dzięki @Steadybox!

#include<stdio.h>
int f(int a,int b){auto c=.5;a-b&&printf("%d %d",c?b<a?b:a:a>b?a:b,c?a-b>0?a-b:b-a:a+b);}

Objaśnienie: W Cauto c=.5 deklaruje zmienną całkowitą z klasą automatycznego przechowywania (która jest domyślną), która jest następnie inicjowana na 0, podczas gdy w C ++ 11 deklaruje podwójną, która jest inicjowana na 0,5. Tak więc wartość zmiennej będzie prawdziwa w C ++, a fałsz w C.

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

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

betseg
źródło
2
Bardzo inteligentne rozwiązanie. Podoba mi się to, że nie użyto żadnych komentarzy.
Pan Xcoder,
5
Aby zapisać kilka bajtów, możesz zadeklarować zmienną auto c=.5, a następnie użyć czamiast sizeof'a'-1. W C auto c=.5deklaruje zmienną całkowitą z klasą automatycznego przechowywania (która jest domyślną), która jest następnie inicjowana na 0, podczas gdy w C ++ 11 deklaruje podwójną, która jest inicjowana na 0,5. Tak więc wartość zmiennej będzie prawdziwa w C ++, a fałsz w C.
Steadybox
9

Python 3 / Jelly , 42 bajty

Używanie strony kodowej Jelly do kodowania pliku.

Surowe bajty:

6c 61 6d 62 64 61 20 78 2c 79 3a 5b 6d 61 78 28    lambda x,y:[max(
78 2c 79 29 2c 78 2b 79 5d 2a 28 78 21 3d 79 29    x,y),x+y]*(x!=y)
0a 23 7f fa 2c d3 f7 d3 cd 04                      .#.ú,Ó÷ÓÍ.

Oba definiują nienazwaną funkcję dyadyczną.

Python (maksymalny język) widzi:

lambda x,y:[max(x,y),x+y]*(x!=y)
#\x7fú,Ó÷ÓÍ\x04

Testuje jako Python .

Jelly (minimalny język) widzi:

lambda x,y:[max(x,y),x+y]*(x!=y)½#
«,ạẋạṠ¥

Testuje jak galaretka .

W jaki sposób?

Galaretka interpretuje 0x0a jako ½atom pierwiastka kwadratowego, podczas gdy Python interpretuje go jako nową linię. W Jelly 0x7f jest interpretowane jako separacja linków (funkcji) i jest reprezentowane przez znak nowej linii lub pilcrow na swojej stronie kodowej. Dla Galaretki ostatni link jest główną funkcją - tutaj nie wywołuje powyższego linku (który interpreter nadal musi poprawnie parsować). W Pythonie 0x23 #instruuje, że cokolwiek po nim i przed 0x0a, nowa linia, jest komentarzem.

Kod Python, który zostanie wykonany:

lambda x,y:[max(x,y),x+y]*(x!=y)
lambda x,y:                      - A function taking two inputs, x and y
           [        ,   ]        - A list with two items
            max(x,y)             - take the maximum of x and y
                     x+y         - x plus y
                           x!=y  - x not equal to y?
                         *(    ) - multiply - True is treated as if it were 1, False as if it were 0

Wykonany kod Jelly:

«,ạẋạṠ¥ - A dyadic link (function of two variables): x, y
«       - minimum(x, y)
  ạ     - absolute difference(x, y)
 ,      - pair left with right (creating a list)
      ¥ - last two links as a dyad:
     ạ  -     absolute difference(x, y)
    Ṡ   -     sign(result) (i.e. {0:0, +x:1, -x:-1} but -x never happens)
   ẋ    - repeat the list to the left right times (either the same list or an empty list)
        - return the result
Jonathan Allan
źródło
Ciekawy wybór języka
Mr. Xcoder
Niemal na pewno można połączyć kod Jelly z innym językiem golfa, aby odliczyć bajt.
Jonathan Allan
Umm ... twoje fragmenty kodu wyglądają inaczej.
Erik the Outgolfer
1
@EriktheOutgolfer te bloki kodu są tylko reprezentacjami surowych bajtów (stąd \x7fi \x04dla niedrukowalnych w Pythonie).
Jonathan Allan
1
@JonathanAllan Nie, to znaczy, że twoje fragmenty są naprawdę różne. Po prostu zobacz kod Pythona dla każdego z nich.
Erik the Outgolfer
8

Ruby / Python 3, 102 bajty

Ruby zwraca max / sumę, Python zwraca min / różnicę. Dane wejściowe to obiekt tablicy odczytany ze STDIN.

a=eval((0and gets or input()))
b=a.sort()
x,y=(b or a)
z=0 or 1
x==y or print([[y,x][z],[x+y,y-x][z]])

Wypróbuj online: Ruby

Wypróbuj online: Python

Głównym dziwactwem używanym tutaj jest użycie prawdy 0w Ruby, co w Pythonie jest fałszem. Inną rzeczą, o której warto wspomnieć, jest to, że sortfunkcja Pythona modyfikuje listę w miejscu i zwraca None, podczas gdy Ruby nie i zwraca posortowaną tablicę, stąd potrzeba użyciab or a aby uzyskać min / max.

Python 3 jest wymagany, ponieważ Python 2 narzeka, jeśli spróbujesz zadzwonić printpo orinstrukcji w ostatnim wierszu.

Wartość tuszu
źródło
To sprytne! +1
Arjun
4

Java / AWK , 219 217 212 196 bajtów

/*#\/* /
{$0=((x=$1)<y=$2)?x" "y-x:y" "x-y}x!=y
#*/interface B{static void main(String[]A){Integer x=Integer.parseInt(A[0]);int y=x.parseInt(A[1]);System.out.print(x==y?"":(x<y?y:x)+" "+(x+y));}}

Wypróbuj online!

Java wyprowadza maksimum i sumę, AWK wyprowadza min i różnicę. Brak danych wyjściowych dla, jeśli dane wejściowe są identyczne.

To mój pierwszy poliglot i pierwszy TIO :)

Robert Benson
źródło
3

JavaScript (ES6) / QBasic, 172 171 bajtów

'';f=x=>{m=Math.max(...x);s=Math.min(...x);if(x[0]!=x[1])alert([m,m-s])}/*
INPUT c
LET m=c
LET s=c
INPUT n
IF n>c THEN m=n
IF n<c THEN s=n
IF n<>c THEN PRINT m,m+s
END
'*/

Na podstawie tego mojego rozwiązania podobnego pytania na temat .

W tym rozwiązaniu również należy stosować podejście komentowania!

JavaScript to minimalny język. Pobiera tablicę zawierającą liczby jako dane wejściowe. Wypisuje dwie liczby oddzielone przez ,(1. liczba jest najmniejszą wartością tablicy wejściowej, a 2. liczba jest różnicą największej i najmniejszej wartości tablicy wejściowej) przez alert()ing. Nie ma znaczenia alert(), jeśli liczby są równe. Możesz wywołać funkcję jakf([100,40]) .

QBasic jest językiem max. Wielokrotnie prosi o dane wejściowe, dwukrotnie. Wyświetla największą liczbę liczb wejściowych, a także sumę największych i najmniejszych liczb wejściowych. Nie ma znaczenia PRINT, jeśli liczby są równe.


Jak to działa?

W QBasic (język ustrukturyzowanej rodziny BASIC; nie wymaga numerów wierszy), 'oznacza początek komentarza, który trwa do końca wiersza. Natomiast w JavaScript oznacza początek łańcucha. Tak więc cała pierwsza linia jest oznaczona jako komentarz w QBasic, ale w JavaScript linia jest wykonywana (i ta linia zawiera część JavaScript, która oblicza najmniejszą liczbę i różnicę największych i najmniejszych liczb, a także/* na końcu który rozpoczyna komentarz w celu ukrycia reszty kodu QBasic przed interpretatorem JavaScript).

Kod z drugiej linii do drugiej ostatniej linii zawiera kod QBasic do obliczenia największej liczby oraz sumy największej i najmniejszej liczby (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 (min. Język):

'';f=x=>{m=Math.max(...x);s=Math.min(...x);if(x[0]!=x[1])alert([m,m-s])}/*
INPUT c
LET m=c
LET s=c
INPUT n
IF n>c THEN m=n
IF n<c THEN s=n
IF n<>c THEN PRINT m,m+s
END
'*/

f([100,40]);

QBasic (maks. Język):

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

1 '';f=x=>{m=Math.max(...x);s=Math.min(...x);if(x[0]!=x[1])alert([m,m-s])}/*
2 INPUT c
3 LET m=c
4 LET s=c
5 INPUT n
6 IF n>c THEN m=n
7 IF n<c THEN s=n
8 IF n<>c THEN PRINT m,m+s
9 END
10 '*/

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 interpretera QBasic, który obsługuje ustrukturyzowany język BASIC i 'jako narzędzie do komentowania (choć niewielu tego nie robi, większość jednak tak robi)

Arjun
źródło