Wątek rabusiów Polyglot Anagrams

22

To jest nić rabusiów tego wyzwania

Gliniarze wybiorą sekwencję OEIS i napiszą dwa pełne programy w dwóch różnych językach, które produkują ten n-ty element w sekwencji, gdy otrzymają n przez STDIN. Oba programy muszą być wzajemnie anagramami, co oznacza, że ​​każdy z nich może być przestawiony z liter drugiego.

Przedstawią numer OEIS, kod źródłowy i nazwę jednego języka, w którym się znajduje.

Musisz znaleźć anagram pisma oryginalnego gliniarza, który działa w języku innym niż ten używany przez gliniarza. Do zgryzienia odpowiedź trzeba tylko znaleźć dowolny język i program, który generuje sekwencję i to anagram od oryginału, niekoniecznie odpowiedź policjant myślał o.

Możesz generować kod znakowy lub dołączyć STDERR do swojego rozwiązania, ale tylko wtedy, gdy policjant zaznaczy, że ukryte rozwiązanie to robi. Wyjście dziesiętne do STDOUT jest zawsze poprawnym pęknięciem.

W ten sposób policjantów zachęca się do jak najtrudniejszego znalezienia języka, który wykona zadanie, używając ich listy symboli.

Punktacja

Zwycięzcą tego odcinka będzie osoba z największą liczbą pęknięć. Tylko pierwszy crack dla każdego rozwiązania będzie się liczył do wyniku.

Tablica liderów

Ogromne podziękowania dla wszystkich, którzy wzięli udział w tym wyzwaniu.

Oto tabela liderów w obecnej formie

Place  User             Score
-----------------------------
1      Adnan            3
1      Kritixi Lithos   3
1      Emigna           3
1      milk             3
5      Steven H.        2
5      Wheat Wizard     2
5      jimmy23013       2
8      ETH Productions  1
8      Dennis           1
8      alleks           1
8      Martin Ender     1
8      Oliver           1
8      Conor O'Brien    1
Kreator pszenicy
źródło
Nie jestem pewien, czy rozumiem część „anagramową”, czy mógłbyś trochę rozwinąć?
Bufor przekroczony Przeczytaj
@TheBitByte Drugie rozwiązanie musi wykorzystywać wszystkie te same znaki, co oryginał, ale ułożone w innej kolejności.
Wheat Wizard
Bez dodatkowych znaków?
Bufor przekroczony Przeczytaj
@TheBitByte tak i bez usuwania znaków
Wheat Wizard

Odpowiedzi:

9

05AB1E , 38 bajtów, Loovjo , A000290

nXtdief e():return X*X
pr e(input())##

Wypróbuj online!

Prawdopodobnie nie jest to zamierzone rozwiązanie, ale działa.

Wyjaśnienie

n      # square input
 X     # push 1
  t    # push sqrt(1)
   d   # push is_number(1.0)
    i  # if true do the rest of the code (1.0 is not a number so it will never execute)
Emigna
źródło
1
1.0 is not a number? Czy mógłbyś proszę opracować?
ETHprodukcje
1
@ETHproductions: funkcja is_numbersprawdza, czy składa się tylko z liczby 0-9. Ponieważ .nie jest liczbą, staje się fałszem. Funkcja mogłaby użyć bardziej opisowej nazwy :)
Emigna,
8

Jolf, 15 bajtów, Adnan , A000290

*&"?!#$|<=@\^{}

Wypróbuj tutaj! Zdecydowanie nie jest to zamierzone rozwiązanie, ale hej, to działa.

Wyjaśnienie

*&"?!#$|<=@\^{}
*                multiply
 &               the two inputs to this func, x, y: x && y
                 returns y if x and y, or the falsey argument.
  "?!#$|<=@\^{}  this string is always truthy, so the second arg is used.
                 two implicit inputs are taken, both equal to the first arg
                 so, this corresponds to *xx, which is x^2.
Conor O'Brien
źródło
7

05AB1E , 49 bajtów, Kreator pszenicy , A000290

Właściwie to samo podejście, co crack Emigny: str.

n4i<({({)({[()]){))()()()turpetne/"*"*splint>}}}}

Wyjaśnienie:

n          # Square the input
 4i        # If 4 == 1, do the following...
   <({...

Wypróbuj online!

Adnan
źródło
1
Nie było to rozwiązanie, którego szukałem, ale i tak +1
Wheat Wizard
7

05AB1E , 35 bajtów, Oliver , A000290

Policjanci powinni przestać wysyłać n^2wyzwania w pythonie ...

n0iprt(input()**(1+1))
"'1°3¢','m'"

Wypróbuj online!

Wyjaśnienie

n    # square input
 0i  # if 0 == 1 do the rest of the code
Emigna
źródło
6

2sable , 7 bajtów, Kritixi Lithos , A005843

Kod:

r^#ei2*

Wyjaśnienie:

r         # Reverse the stack, which is a no-op
 ^        # XOR the input with itself, always leading to 0
  #       # If 1, break (which stops the program)
   e      # Compute input nPr input, which always leads to 1
    i     # If equal to one, do the following..
     2*   #   Multiply the input by 2.

Wypróbuj online!

Adnan
źródło
To wspaniałe, że rzeczywisty kod ma tylko 2 bajty!
Kritixi Lithos
6

Sześciokąt , 13 bajtów, Adnan , A002378

?"&\>=})\*!@<

Wypróbuj online!

Rozłożony:

  ? " &
 \ > = }
) \ * ! @
 < . . .
  . . .

Nie w 100%, czy jest to oryginał, ponieważ lewy górny \nie jest używany.

<\>Są tylko lustra, więc program jest rzeczywiście całkowicie liniowa:

?"&)}=*!@

?          Read input.
 "         Move back and left.
  &        Copy input.
   )       Increment copy.
    }=     Move forward and right and turn around (to face the n and n+1 edges).
      *    Multiply.
       !   Print.
        @  Terminate.
Martin Ender
źródło
5

V , 13 bajtów, DJMcMayhem , A002275

v!:x]''"
@ai1

Wypróbuj online!

To może być pierwsze rozwiązanie w języku zamierzonym przez autora.


Wyjaśnienie

v!:x]''"   Does nothing
@ai1       inserts 1 a times
Kreator pszenicy
źródło
Może powinieneś poinformować DJMcMayhem, że go złamałeś? ;)
ETHprodukcje
@ETHproductions Powiedziałem mu na czacie, że prawdopodobnie powiem mu w komentarzach.
Wheat Wizard
1
This might be the first solution in the language the author intended.Spot on. :)
DJMcMayhem
5

2sable, Conor O'Brien , A000290

~*

Wypróbuj online!

Nie wiem, jak to działa, tak naprawdę jest tylko jeden program, który spełnia wymagania i po prostu jestem brutalnie zmuszony do znalezienia języka, w którym pracował.

Po przejrzeniu dokumentacji jestem w stanie znaleźć wyjaśnienie:

~         Push Input OR Input (always pushes the input)
 *        Multiply that by Input 
Steven H.
źródło
5

Pyth , 26 bajtów, Steven H. , A023443

Kod:

tQ.qly 7:esau0euii s uxC !

Wypróbuj online .

Dość proste:

 Q                            Reads input
t                             Substracts 1 from it
  .q                          Quits program (implicit print)
    ly 7:esau0euii s uxC !    None of this ever plays a part...
                                I just thought it'd be fun to scramble it.
alleks
źródło
2
Zamierzone rozwiązanie! (bez pomieszania, oczywiście.)
Steven H.,
1
To cudownie! Dobry pomysł. Przepraszam, że nie poinformowałem Cię bezpośrednio ... Zbyt mało przedstawicieli.
alleks
Nie ma problemu! Gratulacje.
Steven H.,
5

Python 3, 118 bajtów, ETHproductions, A042545

s,a=801**.5-28,[0,0==0]
for i in range(int(input())):a+=[a[i]+a[-1]*int(1/s)];s=1/s-1//s
(print(a[-2]),) #.0fhlmop|

Przetestuj na Ideone .

Składanie gliny

i=input();s=1/(801**.5-28);a=[0,1]
for p in range(i):a+=[a[-2]+a[-1]*int(s)];s=1/(s-int(s))
print a[i]#,,,.//000fhlmo|

Co za różnica

Składanie policjantów nie działa w Pythonie 3 z dwóch powodów.

  • Funkcja wprowadzania w Pythonie 2 automatycznie analizuje jeden wiersz danych wejściowych, podczas gdy odpowiednik w Pythonie 3 po prostu zwraca wiersz jako ciąg znaków. Możemy po prostu wywołać int, aby to naprawić.

  • print była instrukcją w Pythonie 2, ale jest funkcją w Pythonie 3. W szczególności oznacza to, że musimy otoczyć jej argument nawiasami.

Oznacza to, że potrzebujemy int()i (), ale te postacie nie są częścią komentarza. Oznacza to, że musimy wprowadzić pewne zmiany.

Zamiast ułamków s śledzimy 1 / s .

Inicjalizacja s - s=1/(801**.5-28)- staje się s=801**.5-28zapisaniem znaków1/() .

Współczynnik [-1] w aktualizacji a - int(s)- staje się int(1/s)kosztem postaci 1/.

Aktualizacja s - s=1/(s-int(s))- staje się s=1/s-1//skosztem postaci 1//, ale ratowaniem postaci (int()).

Zapisane znaki ()(int())obejmują te, których potrzebowaliśmy do przeniesienia kodu do Pythona 3, ale ich uzyskanie nas kosztowało 1//. Możemy wziąć //z komentarza, ale będziemy musieli zapisać 1gdzie indziej.

Jednym ze sposobów (jedyna?) Ratowania konieczne 1jest zastąpienie 1w inicjalizacji z . To kosztuje te cztery postacie, ale możemy wziąć0==000 z komentarza.

Do tej pory mamy następujący kod.

i=int(input());s=801**.5-28;a=[0,0==0]
for p in range(i):a+=[a[-2]+a[-1]*int(1/s)];s=1/s-1//s
print(a[i]) #,,,.()0fhlmo|

Aby odzyskać jeden z =„teraz zawdzięczamy”, możemy przepisać inicjalizację s i a z pojedynczym przypisaniem: s,a=801**.5-28,[0,0==0]Dodatkowo oszczędza to a ;i kosztuje a ,, które można dodać i usunąć z komentarza.

Drugi =można zapisać, nie zapisując danych wejściowych w zmiennej, tj. range(int(input()))Zamiast tego zapisując, zapisując znaki w i=. Używamy I po pętli, a także, ale ja th element jest właśnie drugi z prawej strony, więc możemy wymienić z . Z tego samego powodu w pętli można zastąpić ciało .i-2a[-2]i

Mamy teraz permutację do działania kodu Python 3:

s,a=801**.5-28,[0,0==0]
for i in range(int(input())):a+=[a[i]+a[-1]*int(1/s)];s=1/s-1//s
print(a[-2]) #,.()0fhlmop|

Jednak ten kod działa również w Pythonie 2! Jednym ze sposobów naprawienia tego jest zastąpienie print(a[-2])go (print(a[-2]),); mamy znaki, których potrzebujemy w komentarzu. Jak wspomniano wcześniej, print jest funkcją w Pythonie 3, więc konstruuje krotkę ( Brak ,) . Jednak instrukcja print Python 2 jest składnią błędu w krotce literału.

Dennis
źródło
Cholera, fajnie ... może powinienem poświęcić trochę więcej czasu na pisanie wersji bez komentarzy. Zamieszczę zamierzone rozwiązanie.
ETHproductions
Stworzyłem zmodyfikowaną wersję mojego programu, który działa zarówno w Pythonie 2, jak i 3, nie używa komentarzy i ma zupełnie inne (zamierzone) rozwiązanie. Czy warto pisać jako osobną odpowiedź?
ETHprodukcje
Jeśli działa zarówno w Pythonie 2, jak i 3, nie jest to prawidłowe rozwiązanie. Pęknięcie nie działa w oryginalnym języku.
Dennis
Nie rozumiem. Zamierzonego crack nie ma w Pythonie.
ETHprodukcje
Och, masz na myśli oświadczenie nowego gliniarza . Myślałem, że rozmawiamy o innym crackie do tego ... Jasne, śmiało i opublikuj to.
Dennis
4

Pyth, 7 bajtów, Luis Mendo , A000217

x:{ps}1

Zgodnie z żądaniem program kończy działanie z błędem po pzredagowaniu poprawnej odpowiedzi.

Wypróbuj online tutaj !

Steven H.
źródło
3

05AB1E , 12 bajtów, tuskiomi , A000012

1,(FI1=1=1,)

Wypróbuj online!

Wyjaśnienie

1,            # print 1
  (           # negate input
   F          # that many times do (i.e. no times)
    I1=1=1,)  # the rest of the code
Emigna
źródło
Zabawny. Nie miałem do tego drugiego programu, ponieważ nie rozumiałem, co to byli gliniarze i rabusie (ups). dobra robota to pomysłowość!
tuskiomi
3

05AB1E , 38 bajtów, Conor O'Brien , A000290

n2iJ=>eval(Array(J).fill(J).jo`+`)|-2;

Wypróbuj online!


Wyjaśnienie

Jest to oparte na pęknięciu Emigny tutaj .

n   #Squares the number
 2i #Runs the rest of the code if 2==1
Kreator pszenicy
źródło
Zredagowałem swoją odpowiedź z zamierzonym rozwiązaniem. dobra robota! Będę musiał przemyśleć moje podejście ...
Conor O'Brien
3

05AB1E, 27 bajtów, Boboback , A000012

1 1pif:
    if :
        rint( '1' )

Wypróbuj online

Jak to działa:

1                     # push 1
  1                   # push 1
   p                  # pop (1), push is_prime(1)
    i                 # pop (is_prime(1), false), if is false so don't execute rest
mleko
źródło
2

CJam, 70 bajtów, shebang , A000217

ri),:+








e#|  d00->1@@@++-^,[o=input(v=0i=1whil o v=i i+=1pnt v

Wypróbuj tutaj.

jimmy23013
źródło
Bałem się rozwiązania CJam;)
Kade
2

Wypukły , 75 bajtów, Boboback , A004526

2/Q2 2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2*2*2*; 2*;                 2; 2; 2;

Wypróbuj online

Jak to działa:

2  e# push 2
 / e# pop first 2, divide, push result
   e# push a bunch of garbage but discard it all with semi-colons (;)
  Q2 2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2*2*2*; 2*;                 2; 2; 2;
mleko
źródło
2

Dip , 9 bajtów, Kritixi Lithos

Zdecydowanie nie zamierzona odpowiedź.

1^,-$)×1*

Wyjaśnienie:

1$^,-)×   # Basically does nothing
       1* # Repeat "1" n times
Oliver Ni
źródło
Teraz pozostaje mi tylko złamać twoją odpowiedź A000042!
Kritixi Lithos
2

Pip , 6 bajtów, DLosc , A000012

.()49o

Pomyślałem, że najpierw spróbuję esolangu OP ;-)

Wypróbuj online.

ETHprodukcje
źródło
Byłem naprawdę ciekawy, czy byłby inny, w którym to działałoby. :) Ale dobra robota.
DLosc 11.11.16
1

05AB1E , 25 bajtów, Mego , A000583

Kod:

nnYi=put("");prit`Y**4`,X

Wyjaśnienie:

n       # Square the input
 n      # Square the squared input
  Y     # Constant that pushes 2
   i    # If equal to 1, do the following:
    =put...

Wypróbuj online!

Adnan
źródło
Och, daj
spokój
@Emigna Czas między odpowiedziami jest niesamowity: str.
Adnan
1
Nie zarejestrował się też za pierwszym razem, gdy nacisnąłem post, więc byłyby prawie natychmiastowe
Emigna,
1

Dip , 8 bajtów, Oliver , A000042

(1J&F},1

Wyjaśnienie

              #Implicit Input
(             #Start range loop
 1            #Push 1 to the stack
  J           #Join all the elements in the stack
   &          #End program
    F},1      #These are ignored

Zabawne jest to, że to był zamierzony język! Dip to esolang stworzony przez Olivera.

Testuj przypadki i uruchamiaj dip z wiersza poleceń

$python3 dip.py
Dip v1.0.0 by Oliver Ni.
>>> (1J&F},1
> 4
1111
>>> (1J&F},1
> 7
1111111
Kritixi Lithos
źródło
1

2sable, 14 bajtów, Dopapp , A121377

Q@5 2*%6 8*+.&

Wypróbuj online.

Jak to działa (mniej więcej):

Q@
  5              # Push 5
    2            # Push 2
     *           # Pop (2), pop (5), push 5*2=10
      %          # Pop (10), pop (input), push input%10
       6         # Push 6
         8       # Push 8
          *      # Pop (8), pop (6), push 8*6=48
           +     # Pop (48), pop (input), push input+48
            .&
mleko
źródło
1

05AB1E , 4 bajty, Oliver , A000012

p¥_1

Wypróbuj online!

To jest sekwencja 1s.

              # Implicit input
p¥_           # Does nothing
   1          # Pushes 1 to the stack
              # Implicit output

Wyprowadza to 1bez względu na wejście.

Kritixi Lithos
źródło
1

Dip , 5 bajtów, Oliver , A000012

`¸WW/

Sekwencja po prostu drukuje 1bez względu na wejście. Odpowiedź Olivera drukuje a 1.0. Ten program drukuje również 1.0. To najwyraźniej jest zamierzonym rozwiązaniem.

Wyjaśnienie

`¸                  # push character `¸`
  W                 # pushes 1000000
   W                # pushes 1000000 also
    /               # divides the last two items in stack resulting in 1.0
                    # implicit output (1.0)

Alternatywne rozwiązanie (dzięki uprzejmości @milk)

Wypukły , 5 bajtów

WW¸`/

Wypróbuj online!

Wyjaśnienie

                  // implicit input
W                 // pushes -1
 W                // pushes -1 also
  ¸               // calculates the LCM of the two numbers (which evaluates to 1)
   `              // finds its string representation
    /             // slices the string (so that it would evaluate to "1")
                  // implicit output
Kritixi Lithos
źródło
1
Alternatywne pęknięcie w wypukłym: WW¸` /
mleku
@ mleko Dzięki! Dodałem go w mojej najnowszej edycji
Kritixi Lithos
Twój program wypukły nie działa tak, jak myślisz. W tej chwili przesuwa -1 dwukrotnie, LCM je (co byłoby 1), znajduje reprezentację ciągu, a na koniec kroi ciąg (który byłby "1") według wszystkich [input]znaków (ponieważ wejście jest liczbą
GamrCorps
@GamrCorps Jak tam teraz?
Kritixi Lithos