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

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)

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.



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!


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.

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

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 

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.

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.


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



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

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, 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


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;



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!


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

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
            .&


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

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
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.