Полиглот Анаграмма Нить грабителей


22

Это нить грабителей этого вызова

Полицейские выберут последовательность OEIS и напишут две полные программы на двух разных языках, которые производят этот n-й элемент в последовательности, когда ему дают n через STDIN. Две программы должны быть анаграммами друг друга, то есть каждая из них может быть переставлена ​​по буквам другой.

Они представят номер OEIS, исходный код и название одного языка, на котором он находится.

Вы должны найти анаграмму представления оригинального полицейского, которая работает на языке, отличном от того, который использует полицейский. Чтобы взломать ответ, вы должны найти только любой язык и программу, которая производит последовательность и представляет собой анаграмму оригинала, а не обязательно ответ, о котором думал полицейский.

Вы можете выводить код символа или включать STDERR в свое решение, но только если коп указал, что их скрытое решение делает это. Десятичный вывод в STDOUT всегда является допустимым треском.

Таким образом, у копов есть стимул сделать все возможное, чтобы найти любой язык, который выполняет задачу, используя их список символов.

счет

Человек с наибольшим количеством трещин будет победителем в этом разделе. Только первая трещина для каждого решения засчитывается в счет.

Лидер Доска

Большое спасибо всем, кто принял участие в этом соревновании.

Вот таблица лидеров в ее нынешнем виде

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

Не уверен, что я понимаю часть "анаграммы", не могли бы вы уточнить немного?
Переполнение буфера

@TheBitByte Другое решение должно использовать все те же символы, что и оригинал, но переставить в другом порядке.
Wheat Wizard

Без каких-либо дополнительных символов?
Переполнение буфера

@TheBitByte да и без удаления каких-либо символов
Мастер пшеницы

Ответы:


9

05AB1E , 38 байт, Loovjo , A000290

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

Попробуйте онлайн!

Скорее всего, не предполагаемое решение, но оно работает.

объяснение

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? Не могли бы вы уточнить?
ETHproductions

1
@ETHproductions: функция is_numberпроверяет, состоит ли только число 0-9. Поскольку .это не число, оно становится ложным. Функция могла бы использовать более описательное имя :)
Emigna

8

Джольф, 15 байт, Аднан , A000290

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

Попробуй это здесь! Определенно не предполагаемое решение, но эй, это работает.

объяснение

*&"?!#$|<=@\^{}
*                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 байтов, Kritixi Lithos , A005843

Код:

r^#ei2*

Объяснение:

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.

Попробуйте онлайн!


Удивительно, как фактический код занимает всего 2 байта!
Kritixi Lithos

6

Гексагония , 13 байт, Аднан , A002378

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

Попробуйте онлайн!

Развернутая:

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

Не на 100% ли это оригинал, потому что верхний левый \не используется.

Это <\>всего лишь зеркала, поэтому программа на самом деле полностью линейна:

?"&)}=*!@

?          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 байт, DJMcMayhem , A002275

v!:x]''"
@ai1

Попробуйте онлайн!

Это может быть первое решение на языке, который задумал автор.


объяснение

v!:x]''"   Does nothing
@ai1       inserts 1 a times

Возможно, вы должны сообщить DJMcMayhem, что вы взломали его? ;)
ETHproductions

@ETHproductions Я сказал ему в чате, я, вероятно, скажу ему снова в комментариях.
Пшеничный волшебник

1
This might be the first solution in the language the author intended.Пятно на. :)
DJMcMayhem

5

2сабель, Конор О'Брайен , A000290

~*

Попробуйте онлайн!

Я не знаю, как это работает, на самом деле есть только одна программа, которая отвечает требованиям, и я просто грубо вынужден найти язык, на котором она работает.

Просматривая документы, я могу найти объяснение:

~         Push Input OR Input (always pushes the input)
 *        Multiply that by Input 

5

Pyth , 26 байтов, Стивен Х. , A023443

Код:

tQ.qly 7:esau0euii s uxC !

Попробуйте онлайн .

Довольно просто:

 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
Предполагаемое решение! (минус карабкаться, конечно.)
Стивен Х.

1
Это потрясающе! Хорошая идея. Извините, что не дал вам знать напрямую ... Слишком маленькая репутация.
Алекс

Нет проблем! Congrats.
Стивен Х.

5

Python 3, 118 байт, 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|

Проверьте это на Ideone .

Представление мента

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|

Чем отличается

Представление полицейского не работает в Python 3 по двум причинам.

  • Функция ввода Python 2 автоматически обнуляет одну строку ввода, в то время как аналог Python 3 просто возвращает строку в виде строки. Мы можем просто вызвать int, чтобы это исправить.

  • print было утверждение в Python 2, но это функция в Python 3. В частности, это означает, что мы должны заключить его аргумент в круглые скобки.

Это означает, что нам нужно int()и (), но эти символы не все являются частью комментария. Это означает, что мы должны внести некоторые изменения.

Вместо дроби s мы отслеживаем 1 / с .

Инициализация s - s=1/(801**.5-28)- делается s=801**.5-28, сохраняя символы 1/().

Коэффициент [-1] в обновлении a - int(s)- становится int(1/s)равным стоимости символов 1/.

Обновление s - s=1/(s-int(s))- становится s=1/s-1//s, стоит символов 1//, но сохраняет символы (int()).

Сохраненные символы ()(int())покрывают те, которые нам были необходимы для переноса кода на Python 3, но их получение стоило нам 1//. Мы можем взять //из комментария, но нам придется сохранить в 1другом месте.

Один из способов (единственный?) Для сохранения необходимого 1- заменить 1в инициализации a на 0==0. Это стоит этих четырех символов, но мы можем взять 00из комментария.

Пока у нас есть следующий код.

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|

Чтобы восстановить одну из тех, которые =мы теперь «должны», мы можем переписать инициализацию s и a с одним присваиванием: s,a=801**.5-28,[0,0==0]Кроме того, это экономит a ;и затраты a ,, которые можно добавлять к комментарию и удалять из него.

Второе =можно сохранить, не сохраняя ввод в переменной, т.е. записывая range(int(input()))вместо этого, сохраняя символы в i=. Мы также используем i после цикла, но i- й элемент a является вторым справа, поэтому мы можем заменить iна -2. По той же причине a[-2]в теле цикла можно заменить на i.

Теперь у нас есть перестановка в рабочий код 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|

Тем не менее, этот код также работает в Python 2! Один из способов крепления это заменить print(a[-2])с (print(a[-2]),); у нас есть символы, которые нам нужны в комментарии. Как упоминалось ранее, print - это функция в Python 3, поэтому она создает кортеж ( None ,) . Однако оператор печати Python 2 - это ошибка SyntaxError внутри литерала кортежа.


Черт, хорошо ... может, мне стоило потратить немного больше времени на написание версии без комментариев. Я опубликую свое предполагаемое решение.
ETHproductions

Я создал модифицированную версию моей программы, которая работает как в Python 2, так и в 3, не использует комментариев и имеет совсем другое (предполагаемое) решение. Стоит ли публиковать отдельный ответ?
ETHproductions

Если он работает как в Python 2, так и в 3, это недопустимое решение. Трещина не может работать на языке оригинала.
Денис

Я не понимаю Предполагаемая трещина не в Python.
ETHproductions

О, ты имеешь в виду новое представление полицейского . Я думал, что мы говорим о другом крэке к этому ... Конечно, продолжайте и отправьте это.
Деннис



3

05AB1E , 12 байтов, tuskiomi , A000012

1,(FI1=1=1,)

Попробуйте онлайн!

объяснение

1,            # print 1
  (           # negate input
   F          # that many times do (i.e. no times)
    I1=1=1,)  # the rest of the code

Веселая. У меня не было второй программы для этого, потому что я не понимал, что такое полицейские и грабители (упс). хорошая работа, изобретательная!
Tuskiomi

3

05AB1E , 38 байт, Конор О'Брайен , A000290

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

Попробуйте онлайн!


объяснение

Это основано на кряке Эминьи здесь .

n   #Squares the number
 2i #Runs the rest of the code if 2==1

Я отредактировал свой ответ с помощью предполагаемого решения. хорошая работа! Мне придется пересмотреть мой подход ...
Конор О'Брайен






1

05AB1E , 25 байтов, Mego , A000583

Код:

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

Объяснение:

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

Попробуйте онлайн!


О, давай, ты побил меня на 12 секунд :)
Emigna

@Emigna Время между ответами странно: с.
Аднан

1
Это не регистрировалось в первый раз, когда я нажал на сообщение, так что они были бы почти мгновенными :)
Emigna

1

Dip , 8 байтов, Оливер , A000042

(1J&F},1

объяснение

              #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

Самое смешное, что это был намеченный язык! Dip - это esolang, созданный Оливером.

Тестовые случаи и запуск Dip из командной строки

$python3 dip.py
Dip v1.0.0 by Oliver Ni.
>>> (1J&F},1
> 4
1111
>>> (1J&F},1
> 7
1111111

1

2sable, 14 байтов, Dopapp , A121377

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

Попробуйте онлайн.

Как это работает (более или менее):

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 байтов, Оливер , A000012

`¸WW/

Последовательность просто печатает 1независимо от того, что ввод. Ответ Оливера печатает 1.0. Эта программа также печатает1.0 . По-видимому, это и есть предполагаемое решение.

объяснение

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

Альтернативное решение (любезно предоставлено @milk)

Выпуклый , 5 байт

WW¸`/

Попробуйте онлайн!

объяснение

                  // 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
Альтернативная трещина в выпуклом: WW¸` /
молоко

@milk Спасибо! Я добавил это в своем последнем редакторе
Kritixi Lithos

Ваша выпуклая программа вроде не работает так, как вы думаете. На данный момент, он нажимает -1 дважды, LCMs их (который был бы 1), находит строковое представление и, наконец, разрезает строку (которая будет "1") по каждому [input]символу (так как ввод - число.
GamrCorps

@GamrCorps Как это сейчас?
Kritixi Lithos
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.