Утрачено при переводе


15

Это если вы не знакомы с форматом, щелкните тег, чтобы перейти в вики. На этот вопрос не будет ветки грабителей.

Менты

Ваша задача как копов состоит в том, чтобы выбрать две последовательности из онлайн-энциклопедии целочисленных последовательностей и написать программу, которая принимает n-й элемент одной последовательности в качестве входных данных и выводит n-й элемент второй последовательности. Затем вы делаете ответ, включая код и опуская выбранные последовательности. Грабители попытаются найти последовательности, которые вы выбрали, и, если вам удастся найти последовательности, которые вы имели в виду, или некоторые другие последовательности, для которых ваша программа, вы должны пометить свой ответ как Cracked . Если грабитель сообщает вам о кряке, который, по вашему мнению, недействителен, вы можете представить доказательство того, что это не кряк. В противном случае вы должны пометить это так.

Согласно обычным ответам, которые не были взломаны в течение 7 дней, они могут быть помечены как безопасные. Коп может пометить свой ответ как безопасный, раскрывая последовательности, которые они имели в виду. После того, как в безопасности, ответ больше не может быть взломан

Цель состоит в том, чтобы минимизировать количество байтов вашей программы, оставаясь без изменений.

пример

Следующий код Python переводит n-й элемент A000290 (квадратные числа) в A000217 (треугольные числа):

lambda x:sum(range(0,int(x**.5+1)))

Требования и требования

  • Если вы выбираете последовательность, которая не была доказана как конечная, вы должны вывести все термины, которые могут существовать, а не только те, которые перечислены на странице OEIS.

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

  • Размер вашей входной последовательности не должен быть меньше выходной последовательности.

  • Ваша входная последовательность не должна иметь повторяющихся элементов (в противном случае задача практически невозможна)

  • OEIS включает индекс на своей странице (первое число после заголовка «OFFSET») по умолчанию, это ваше смещение для n (n равно индексу для первого элемента в последовательности), если вы выбираете другой индекс, который вы должны указать в ваш ответ.

  • Если вы выберете смещение, отличное от указанного в OEIS, вы все равно должны отобразить все элементы в вашей входной последовательности на соответствующий элемент в вашей выходной последовательности.

  • Если ваша программа получает входные данные, которых нет в последовательности ввода, она может делать все, что пожелает (неопределенное поведение). Однако, вероятно, в ваших же интересах выводить целое число.

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

Грабители

Ваша задача как грабителей состоит в том, чтобы выбрать не взломанные, небезопасные ответы и найти последовательности, между которыми они отображаются. Если вы найдете решение, которое работает (не обязательно предполагаемое решение Копса), прокомментируйте последовательности в соответствующем ответе.

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


3
Как грабитель может быть уверен, что его ответ правильный для всех входов? Должны ли они это доказать математически?
Лев

1
@Leo Грабитель должен опубликовать решение, если оно соответствует всем записям в OEIS. Если это не та последовательность, которую имел в виду полицейский, он может предложить доказательство того, что это неверно, или пометить его как взломанный, если он не может его найти. Я обновлю ветку грабителя.
Пост Рок Гарф Хантер

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

1
У меня есть ощущение, что некоторые действительно хорошие решения могут быть безрассудно взломаны, как, например, oeis.org/A000004 -> oeis.org/A000012
Wolfram

2
@ Денис Я думаю, это хороший момент. Облом, однако, в том, что у людей нет возможности получить репутацию для поиска трещин, так как кажется, что это довольно сложно для этой задачи.
0 '

Ответы:


6

Желе , 14 байт (взломано @Wolfram)

+66%444µ111<µ¡

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

Должно быть достаточно очевидно, что это делает. На самом деле, в пользу пользователей, не являющихся желе, я даже дам объяснение:

объяснение

+66%444µ111<µ¡
       µ    µ¡  Run the transformation
+66%444           "add 66, then modulo 444"
        111<    once if 111 is less than the input, zero times otherwise 

Вопрос в том, почему он это делает?

трещина

Рассматриваемые последовательности были A201647 и A201647 . Они конечны и отличаются только последними 2 элементами:

  • 3, 5, 7, 9, 11, 15, 21, 165, 693
  • 3, 5, 7, 9, 11, 15, 21, 231, 315

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


@WheatWizard: Если вы думаете, что можете получить от этого преимущество, сделайте это. Но вам нужно быть быстрым, как если бы кто-то еще тестировал его с включенным кешем, они в конечном итоге будут загрязнять кеш для всех после них.

@WheatWizard отключает кэш вывода, гарантируя, что вы получите новый результат с сервера, но этот новый результат все равно будет кэшироваться.
Деннис

1
@WheatWizard Или добавьте прерыватель кеша при его тестировании: случайно выбранная строка как часть комментария или неиспользуемое поле ввода.
Деннис

+1 этот ответ действительно прост по своей природе, но все же представляет собой проблему для грабителей
Kritixi Lithos


3

Желе , 7 байт (взломано @JonathanAllan)

ÆFḅÆdÆẸ

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

Что оно делает

ÆFḅÆdÆẸ  Main link. Argument: n

ÆF       Factor n into prime-exponent pairs.
   Æd    Compute σ, the number of divisors of n.
  ḅ      Convert each pair from base σ to integer.
     ÆẸ  Yield the integer whose prime signature (infinite sequence of all prime
         exponents, including zeroes, in order) is equal to the result.

3
Вполне могут быть и другие допустимые отображения, но я думаю, что вы имели в виду простые числа - от A000040 до 2 ^ (2p + 1), p штрих - A100626 .
Джонатан Аллан

@JonathanAllan Я тоже пришел к A000040 -> A100626, хотя ты
бьешь

Мы также можем видеть , что он будет держать: когда вход простых числа p, ÆFвыходы (p,1)и Ædвыходы 2, поэтому получают нас 2p+1, что средства ÆẸдадут первый премьер, 2подняли к силе этого результата, 2^(2p+1).
Джонатан Аллан

@JonathanAllan Да, это то, к чему я стремился.
Деннис

2

Python 3, 256 байт ( взломан! )

from math import*
def p(i,m):
 r=0;d=floor(log(i))
 for y in range(d):r+=(pow(16,d-y-1)%(8*y+m))/(8*y+m)
 o=-1;y=d
 while r!=o:o=r;r+=pow(16,d-y-1)/(8*y+m);y+=1
 return r
def q(n):r=4*p(n,1)-2*p(n,4)-p(n,5)-p(n,6);return floor((1-(-r%1)if r<0 else r%1)*16)

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

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


Я предполагаю, что рассматриваемая функция q?
Пост Рок Гарф Хантер

Также переменная kкажется неиспользуемой, поэтому вы можете сохранить несколько байтов, удалив ее.
Пост Рок Гарф Хантер


@WheatWizard да, спасибо и да.
Betseg

2

Обработка , 184 байта, БЕЗОПАСНО!

int x(int y){int b=TRIANGLES-MITER;for(int i=OVERLAY/BURN;i>#fffffe;b*=(int)pow(y,(MOVE-HAND+0.)/(int)sqrt(red(color(-1<<16))/(int)log(color(0)*color(-1)))),i-=QUAD/DARKEST);return b;}

Функция, которая принимает int и возвращает int. Пока входной номер находится в intдиапазоне, программа должна работать нормально.

Это не медленно, просто нечитаемо. Удачи!


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

От A000578 до A000290

Другими словами: кубики на квадраты.

объяснение

Отвечая на вопрос « Нет строк (или чисел)» , я обнаружил список констант обработки, представляющих целые числа. Например, CORNERимеет значение 0. Полный список можно найти здесь . Чтобы найти значение константы, вы можете просто printэто.

Используя это, я решил поменять некоторые числа комбинациями этих констант, чтобы скрыть это. Итак, вот что вы получаете, когда подставляете константы их соответствующими значениями int.

int x(int y){int b=9-8;for(int i=512/8192;i>#fffffe;b*=(int)pow(y,(13-12+0.)/(int)sqrt(red(color(-1<<16))/(int)log(color(0)*color(-1)))),i-=16/16);return b;}

Даже сейчас, полный ясный код не раскрывается. Цвета остаются. В обработке переменные цвета имеют значения типа int, например, white ( #ffffff) есть -1, #fffffeесть -2, #fffffdесть -3и так далее. Это можно найти по printцвету. Итак, давайте упростим цвета.

int x(int y){int b=9-8;for(int i=512/8192;i>-2;b*=(int)pow(y,(13-12+0.)/(int)sqrt(red(color(-1<<16))/(int)log(-16777216*-1))),i-=16/16);return b;}

Мы на полпути :) Чтобы понять значения, нам нужно упростить числовые выражения.

int x(int y){int b=1;for(int i=0;i>-2;b*=(int)pow(y,(1.)/(int)sqrt(red(color(-65536))/(int)log(16777216))),i-=1);return b;}

Намного понятнее! Теперь давайте упростим логарифм.

int x(int y){int b=1;for(int i=0;i>-2;b*=(int)pow(y,(1.)/(int)sqrt(red(color(-65536))/(int)16.6...)),i-=1);return b;}


int x(int y){int b=1;for(int i=0;i>-2;b*=(int)pow(y,(1.)/(int)sqrt(red(color(-65536))/16)),i-=1);return b;}

Почти все! Теперь мы должны выяснить это (int)sqrt(red(color(-65536))/16)). color(-65536)красный, так rgb(255, 0, 0). Теперь red()функция возвращает значение красного компонента в аргументе (цвет). Так сколько красного в красном? Ответ есть 255. С этим мы получаем

(int)sqrt(255/16))
(int)sqrt(15)
(int)3.8...
3

Подстановка этого в программе приводит к:

int x(int y){int b=1;for(int i=0;i>-2;b*=(int)pow(y,(1.)/3),i-=1);return b;}

Да, это сделано!

int x(int y){                        // y is the cube
  int b=1;                           // variable that holds the final result
  for(int i=0;                       // for-loop that
          i>-2;                      // loops twice
          b*=(int)pow(y,(1.)/3),     // multiply b by the cube root of y
          i-=1);                     // decrement the looping variable
  return b;                          // finally return b
}

Подводя итог, можно получить квадрат (дважды умноженный в цикле for) корня куба входного числа.


0

Mathematica (или что-то еще) -  Cracked!

f[x_] := Quotient[ 366403414911466530559405368378193383110620062 - 
    755296348522256690003418238667147075159564695 x + 
    525778437135781349270885523650096958873079916 x^2 - 
    156594194215500250033652167655133583167162556 x^3 + 
    20861131421245483787723229627506507062999392 x^4 - 
    1181515772235154077024719095229309394979146 x^5 + 
    29382627265060088525632055454760915985604 x^6 - 
    308672970015057482559939241399297150364 x^7 + 
    1087516675449597417990589334580403666 x^8 - 
    312989984559486345089577524231879 x^9, 
  265451130886621254401938908479744271974400 ]

Я знаю, что Mathematica - это несвободное программное обеспечение, но эта функция тривиальна для портирования на любой любимый язык, на котором вы хотите ее запустить. Она буквально вычисляет значение заданного полинома степени 9, вычисленного по входному целому числу, а затем принимает целочисленное отношение этого значения и 42-значный номер в последней строке. Например, f[100]оценивает до -3024847237.


2
От A003173 до A165892 . Хотя на самом деле это не проблема программирования;)
Лев

2
Во всяком случае, так как mathematica не бесплатна, я написал это, чтобы превратить ее в функцию Python
Лев

@Leo: отличная работа! Там есть и пасхальное яйцо; ты нашел это? : D
Грег Мартин

Э-э-э ... Нет :(
Лев

Чтобы отобразить один набор из девяти элементов в другой набор из девяти элементов, мне понадобится только многочлен степени 8. Вы можете сделать (правильный) вывод, что есть еще одно входное значение, которое я сопоставил с конкретным выходным значением. Дайте мне знать, если (когда) вы найдете это :)
Грег Мартин
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.