Поліглот Анаграми Розбійник


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 Іншим рішенням слід використовувати всі ті ж символи, що й оригінали, але переставлені в іншому порядку.
Пшеничний майстер

Без додаткових символів?
Буфер над

@TheBitByte так і не видаляючи жодних символів
Wheat Wizard

Відповіді:


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

2-разовий , 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-х мінний, Conor O'Brien , A000290

~*

Спробуйте в Інтернеті!

Я не знаю, як це працює, насправді є лише одна програма, яка відповідає вимогам, і я просто змушений знайти мову, на якій працював.

Переглянувши документи, я можу придумати пояснення:

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

5

Піт , 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
Це круто! Хороша ідея. Вибачте, що не повідомляєте про це безпосередньо ... Занадто мало представників.
алекс

Без проблем! Поздоровлення
Стівен Х.

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 - s=1/(801**.5-28)- стає s=801**.5-28, зберігаючи символи 1/().

Коефіцієнт [-1] в оновленні а - 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в ініціалізації з . Це коштує цих чотирьох символів, але ми можемо взяти з коментаря.0==000

Поки ми маємо наступний код.

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-2a[-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 байт, тускіоми , 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 байт, Conor O'Brien , A000290

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

Спробуйте в Інтернеті!


Пояснення

Це засновано на тріщині Еміньї тут .

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

Я відредагував свою відповідь із запланованим рішенням. хороша робота! Мені доведеться переосмислити свій підхід ...
Conor O'Brien




2

Dip , 9 байт, Kritixi Lithos

Однозначно не призначена відповідь.

1^,-$)×1*

Пояснення:

1$^,-)×   # Basically does nothing
       1* # Repeat "1" n times

Тепер все, що мені залишилося, - це також зламати вашу відповідь A000042!
Kritixi Lithos


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 Час між відповідями є непристойним: с.
Аднан

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 - це езоланг, створений Олівером.

Тестові випадки та запуск з командного рядка

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



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 Дякую! Я додав це у своїй останній
редакції

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

@GamrCorps Як це зараз?
Kritixi Lithos
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.