Вы можете превзойти меня? (Раздел грабителей)

43

Раздел грабителей

Раздел полицейских можно найти здесь .

Вызов

Ваша задача состоит в том, чтобы outgolf Доводы ментов на одном языке и той же версии (например, Python 3.5Python 3.4 , так что не допускается). Отправка лишается возможности, когда длина в байтах короче, чем исходная отправка. Вам нужно всего лишь убрать 1 байт , чтобы взломать заявку. Например, если задача состояла в том, чтобы выполнить 2 × n , и представление было следующим:

print(2*input())

Вы можете обойти копа, сделав следующее:

print 2*input()

Или даже это (так как лямбды разрешены):

lambda x:2*x

Отправьте это со следующим заголовком:

##{language name}, <s>{prev byte count}</s> {byte count}, {cop's submission + link}

Например:

Python 2, 16 12 байт, Adnan (+ ссылка на представление)

lambda x:2*x

Вычисляет A005843 , (смещение = 0).

В этом случае вы взломали представление.

счет

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

правила

  • Заявление о взломе должно быть на том же языке, что и представление от полицейского.
  • Один и тот же вход должен приводить к одному и тому же выходу (поэтому a (2) = 4 должно оставаться 4).
  • Для таких языков, как Python, вы можете импортировать стандартные библиотеки, включенные в язык. (Таким образом, нет NumPy / Симпи и т. Д.)
  • Вход и выход представлены в десятичном формате (основание 10).

Заметка

Этот вызов закончен. Победитель раздела « Грабители » - feersum . Окончательные оценки для CnR показаны ниже:

  • feersum : 16 трещин
  • Денис : 12 трещин
  • Утечка монахини : 6 трещин
  • Линн : 4 трещины
  • миль : 3 трещины
  • Мартин Эндер : 2 трещины
  • Эминья : 2 трещины
  • jimmy23013 : 1 трещина
  • Sp3000 : 1 трещина
  • рандомра : 1 трещина
  • алефальфа : 1 трещина
  • Nimi : 1 трещина
  • Разрушаемый Арбуз : 1 трещина
  • Дом Гастингс : 1 трещина
Аднан
источник

Ответы:

8

Чеддер, 7 6 байтов, Downgoat

(<<)&1

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

feersum
источник
В качестве альтернативы (**)&2. Я пытался 2&(**)и потерпел неудачу. :(
Денис
@ Денис (**)&2прекрасно работает для меня: / но это тоже работает.
Вниз
14

Желе ,54 байта , Джордж В. Уильямс

RÆḊḞ

Попробуй это здесь.

Скрытая особенность!

Если я правильно помню, ÆḊ(A) = sqrt (det (AA T )) равно n! раз п мерный мера Лебега из симплекса , образованного п входной точки и начало координаты в м - мерном пространстве. При n = 1 оно вырождается на евклидово расстояние. Не так уж и странно ...

jimmy23013
источник
1
Да, я сделал что-то странное с определителями ... Так хорошо спрятано, что я не смог найти это сам!
Деннис
@ Денис, я знаю это, потому что однажды я тоже попытался расширить определитель, и это то, что вы получите, если хотите, чтобы оно работало как перекрестный продукт. Но это заняло у меня много времени, потому что я думал, что это тоже может быть странно, и не ожидал, что кто-то придумает то же самое ...
jimmy23013
Можно ли их считать «байтами»? Кодовые точки для и находятся в диапазоне UTF-16. Это сделало бы это решение 6 байтами, предполагающими неоднородное кодирование, и 8 байтами, предполагающими однородное кодирование. Спрашиваю честно здесь.
Жюль
11

Гексагония , 91 33 байта, синий

1""?{\>{+/</+'+./_'..@'~&/!}'+=($

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

    1 " " ?
   { \ > { +
  / < / + ' +
 . / _ ' . . @
  ' ~ & / ! }
   ' + = ( $
    . . . .

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

Все еще выглядит несколько играбельно, но я решил опубликовать его до того, как FryAmTheEggman превзойдет меня. ;)

объяснение

Вот некоторые пути выполнения с цветовой кодировкой:

введите описание изображения здесь

Тем не менее, они излишне запутаны из-за игры в гольф. Вот точно такой же код с более разумным расположением:

введите описание изображения здесь

Так-то лучше. И, наконец, вот диаграмма памяти, где красная стрелка указывает начальное положение и ориентацию указателя памяти (MP):

введите описание изображения здесь

Суть в том , что я итеративно вычисления чисел Фибоначчи на трех ребер , меченных F (я) , е (г + 1) и F (I + 2) , сохраняя при этом итератора по краям A , B и C . При этом роли этих ребер циклически меняются после каждой итерации. Посмотрим, как это происходит ...

Код начинается с серого пути, который выполняет начальную настройку. Обратите внимание, что f (i) уже имеет правильное начальное значение 0.

1   Set edge f(i+1) to 1.
""  Move the MP to edge A.
?   Read input n into edge A.
)   Increment n.

Теперь зеленая дорожка - это основной цикл. _и >просто зеркала.

(     Decrement n.
<     If the result is zero or less, continue on the red path, otherwise
      perform another iteration of the main loop.
{     Move the MP to edge f(i+2).
+     Add edges f(i) and f(i+1) into this edge, computing the next Fibonacci number.
'     Move the MP to the edge opposite A.
~     Multiply by -1 to ensure that it's non-positive (the edge may have a positive
      value after a few iterations).
&     Copy the current value of n from A.
'     Move back and to the right again.
+     Copy n by adding it to zero. Since we know that the other adjacent edge
      is always zero, we no longer need to use ~&.
'+'+  Repeat the process twice, moving n all the way from A to B.
=     Reverse the orientation of the MP so that it points at f(i) which now
      becomes f(i+2) for the next iteration.

Таким образом, МП перемещается по внутреннему триплету ребер, вычисляя последовательные числа Фибоначчи, пока не nдостигнет нуля. Затем, наконец, красный путь выполняется:

{}    Move the MP to f(i).
!     Print it.
@     Terminate the program.

Диаграммы, сгенерированные с помощью Timwi HexagonyColorer и EsotericIDE .

Мартин Эндер
источник
Святая корова! Я ожидал, что вы будете побиты, но не так сильно! 0.o
Blue
@Blue Вы планируете добавить свое объяснение? Мне было бы интересно, как это работает. :) Рано или поздно я добавлю объяснение этому, но я не уверен, что найду время сегодня.
Мартин Эндер
Да, мой использует более традиционный метод расчета. Я полностью забыл о &, что могло бы спасти несколько байтов
Blue
7

Haskell, 5 4 байта, xnor

(^)1

Простое карри.

Дрянная Монахиня
источник
7

Stack Cats, 14 13 байтов, feersum

^]T{_+:}_

с -nmфлагами для +4 байта. Попробуйте онлайн!

Хорошо, эта петля была чокнутой. Я попробовал несколько подходов, таких как грубое форсирование по сокращенному алфавиту и грубое форсирование 3x+2или 5x+4и попытка его расширить, но я никогда не ожидал, что решение на самом деле будет содержать цикл.

Лучший способ увидеть, как это работает, - добавить Dфлаг для отладки (запускается с ним -nmD) и включить отладку для вышеуказанной ссылки TIO. {}Цикл запоминает вершину стека в начале цикла, и завершает работу , когда в верхней части стека является то , что значение снова. Внутренняя часть цикла делает забавные вычитания и циклические вычисления трех верхних элементов стека, и именно так цикл запускается на протяжении стольких итераций.

Sp3000
источник
6

Сесос, 14 11 байт, Лики Нун

Вычисляет n 2 . Попробуй это здесь.

Шестнадцатеричный дамп:

0000000: 16c0f7 959d9b 26e83e ce3d                         ......&.>.=

Из сборки:

set numin
set numout
get
jmp
  jmp, sub 1, fwd 1, add 1, fwd 1, add 2, rwd 2, jnz
  fwd 2, sub 1
  rwd 1, sub 1
  jmp, sub 1, rwd 1, add 1, fwd 1, jnz
  rwd 1
jnz
fwd 2
put
Линн
источник
Хорошо, ты даже ниже моей оригинальной версии для гольфа.
Утренняя монахиня
Это вычисляет 1 + 3 + … + (2n–1)вместо n × n:)
Линн
Я также использовал ваш подход
Leaky Nun
6

Горестно, 776 759 байт, разрушаемый арбуз

| |||||||| | |
|| |||||| |
||| |||| |
|||| || |
||||| || |
|||| |||| |
||| |||||| |
|| |||||||| |
| |||||||||| |
|| |||||||| |
||| ||||||| |
||||||||||| |
||||||||||| |
||||||||||| |
||||||||||| |
|||||||||| |
||||||||| |
||||||||| |
||||||||| |
||||||||| |
|||||||||| |
||||||||||| |
|||||||||||| |
||||||||||| |
|||||||||| |
||||||||| |
|||||||| |
||||||| |
|||||| |
||||| |
|||| |
||| |
|| |
| |
| |
| |
|| |
|| |
|| |
|| |
|| |
| |
| |
| |
|| |
||| |
|||| |
||||| |
|||||| |
||||||| |
|||||| |
||||||| |
|||||||| |
||||||||| |
|||||||||| |
||||||||||| |
|||||||||||| |
||||||||||| |
|||||||||| |
||||||||| |
|||||||| |
||||||| |
|||||| |
||||| |
|||| |
||| |
|| |
| |
| |
| |
| |
|| |
| |
|| |
||| |
||| |
|||| |
||| |
|| |
| |
| |
| |
|| |
|| |
|| |
|| |

Я пытался прочитать исходный код для этого языка, но это было слишком запутанным. Во-первых, ip[1]это номер строки, а номер ip[0]столбца, в то время как cpкоординаты используются наоборот. Тем не менее, иногда значение cpприсваивается ip. Я перестал пытаться понять, что делает программа, и нашел способ закодировать идентичную последовательность инструкций, используя меньшее количество тактов.

feersum
источник
5

Brachylog , 27 21 байт, Fatalize

yrb:1a:+a:[1]c*.
:2/.

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

Дрянная Монахиня
источник
Отлично сработано! Использование целочисленного деления определенно не является решением, которое я имел в виду (которое все еще короче), даже не задумываясь об этом tbh: p
Fatalize
5

J, 17 12 байт, миль

+/@(]!2*-)i:

Практически так же, как оригинал, просто больше в гольф. :)

i:Наличие +1диапазона по сравнению с i.полезно (и странно). Если вы используете i.здесь n=0будет неправильно, но, к счастью, i:решает это.

Попробуйте это онлайн здесь.

randomra
источник
Трюк с i:нулями для отрицательных значений. Моя версия была +/@(]!2*-)i.,].
миль
5

М, 10 6 байт, Денис

R×\³¡Ṫ

Учитывая n , он вычисляет n- й уровень факториала от n . Это было забавное упражнение!

Код может работать как Jelly, так что вы можете попробовать его онлайн .

объяснение

R×\³¡Ṫ  Input: n
R       Create the range [1, 2, ..., n]
   ³¡   Repeat n times starting with that range
 ×\       Find the cumulative products
     Ṫ  Get the last value in the list
        Return implicitly
миль
источник
5

Haskell, 15 14 байтов, xnor

until odd succ

Я потратил бесполезную пару часов на обучение расшифровке «бессмысленного» синтаксиса ... untilЯ нашел это вместо этого.

Или для менее медленных 13 байтов until odd(+1).

feersum
источник
Хорошо сделано, это то, что я имел в виду. Мне нравятся три слова.
xnor
4

Python 2, 43 40, xsot

g=lambda n:n<2or-~sum(map(g,range(n)))/3
feersum
источник
Интересно, это отличается от того, что у меня было изначально.
xsot
4

Пике, 11 9 байт, мутная рыба

hVoeX*oe+

Попробуй это здесь!

Как это работает

          Implicit input: n (accumulator), n (iterations)
h         Increment the number of iterations.
 V        Do the following n + 1 times.
  o         Iterator. Pushes its value (initially 0) and increments it.
   e        Perform integer division by 2.
            This pushes 0 the first time, then 1, then 2, etc.
    X       Square the result.
     *      Multiply the accumulator and the result.
      oe    As before.
        +   Add the result to the accumulator.
            This sets the accumulator to a(0) = 0 in the first iteration and
            applies the recursive formula in all subsequent ones.
Деннис
источник
Используя этот метод, вы можете получить 8 с hV~oX*o+. Мой 5-байтовый ответ былSDmX^
Blue
Ах, ~oэто аккуратно. Я понятия не имею, что SDmX^делает хотя.
Деннис
Он в основном использует смешанную базовую беседу в диапазоне с 1 индексом по отношению к этому квадрату. На OEIS ничего нет
Blue
О, это mвлияет только на, Xа не на ^? Это многое объясняет.
Деннис
Да, mи похоже использовать только следующий узел. Любые комментарии к моим документам и т. Д.?
Голубой
4

05AB1E , 7 4, Эминья

LnOx

Из формулы для суммы квадратов натуральных чисел 1 ^ 2 + 2 ^ 2 + 3 ^ 2 + ... + n ^ 2 = n (n + 1) (2 * n + 1) / 6, если умножить обе стороны на 2 мы получаем Sum_ {k = 0..n} 2 * k ^ 2 = n (n + 1) (2 * n + 1) / 3, что является альтернативной формулой для этой последовательности. - Майк Уорбертон (mikewarb (AT) gmail.com), 8 сентября 2007 г.

alephalpha
источник
Я рад, что вы взломали его в 4, так как была моя тривиальная модификация, которую я пропустил. Ницца!
Emigna
4

Желе, 22 21 байт, Денис

_²×c×Ḥc¥@÷⁸÷’{S
‘µR+ç

Я потратил несколько часов на чтение исходного кода Jelly для последнего, поэтому я мог бы также использовать этот «навык» для использования. Я надеюсь, что @Dennis поделится с нами своими математическими открытиями, позволившими укороченную формулу (при условии, что есть что-то, а не только странные трюки с желе!).

feersum
источник
Для сравнения у меня было: `'Ḥc_ × c @ + ¥ \ nr0ç @ €:' + \ S
Sp3000
@ Sp3000 Ой, ну почему ты не опубликовал это?
feersum
Больше времени подумать о 6 до
репостов
4

J, 20 19 байт, миль

[:+/2^~+/@(!|.)\@i.

Это вычисляет произведение как сумму квадратов чисел Фибоначчи, которые рассчитываются как сумма биномиальных коэффициентов.

К счастью, @miles сам разместил код для генерации чисел Фибоначчи в этом комментарии .

Деннис
источник
4

Точность !! , 526 525 байт, DLosc

N
Count x while _%60-46 {
(_+_%60*5-288)*10+N
}
_/60
Count i while _/27^i {
_+27^i*(_/27^i*26-18)
}
_*3+93
Count i while _/27^i/27%3 {
_-i%2*2+1
Count j while _/3^(3*j+2-i%2)%3 {
_+3^(1+i%2)
Count k while _/3^(3*k+1+i%2)%3-1 {
_+3^(3*k+1+i%2)*26
}
}
}
Count i while _/27^i/3 {
_-_/27^i/3%27*27^i*3+_/3^(3*i+1+_%3)%3*3
}
_/3
Count i while _/100^i {
_*10-(_%100^i)*9
}
Count i while _/100^i/10 {
_+_/100^i/10%10
Count j while i+1-j {
_+(_%10-_/100^(j+1)%10)*(100^(j+1)-1)
}
}
_/100
Count j while _/100^j {
Write _/100^j%10+48
}

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

24c24
< _+_/100^i*100^i*9
---
> _*10-(_%100^i)*9
Деннис
источник
Ах, стреляй. Я надеялся, что никто не поймает математический гольф, который я пропустил. +1
DLosc
4

Haskell, 10 байт, xnor

gcd=<<(2^)

Пример использования: map ( gcd=<<(2^) ) [1..17]-> [1,2,1,4,1,2,1,8,1,2,1,4,1,2,1,16,1].

Как это работает: С странице OEIS мы видим , что a(n) = gcd(2^n, n)и написано в синтаксисе Haskell: a n = gcd (2^n) n. Функции с шаблоном f x = g (h x) xмогут быть превращены в бессмысленные с помощью функции =<<:, f = g =<< hследовательно, gcd=<<(2^)которая переводится обратно в gcd (2^x) x.

Ними
источник
............... Как
TuxCrafting
3

Питон, 39 17 байт, разрушаемый арбуз

lambda n:n*-~n>>1
Дрянная Монахиня
источник
на самом деле очень хорошо, я на самом деле рад тому, что меня обошли стороной, чтобы увидеть это решение
Разрушаемый Лимон
Зачем усложнять простую формулу с правильным сдвигом?
xsot
@xsot Потому что я не знал, какую версию он использовал.
Утренняя монахиня
3

MATL, 11 10 байт, Луис Мендо

YftdAwg_p*

Вместо выполнения -1 ^ length (массив) он преобразует элементы в логические значения (которые всегда равны 1), отрицает их и получает произведение элементов.

feersum
источник
3

Brachylog, 11 10 байтов, Fatalize

yb:AcLrLc.

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

объяснение

Brachylog - это язык, основанный на Прологе, чья самая большая способность - доказывать вещи.

Здесь мы докажем эти утверждения:

yb:AcLrLc.
yb:AcL       Inclusive range from 1 to input, concatenated with A, gives L
     LrL     L reversed is still L
       Lc.   L concatenated is output
Дрянная Монахиня
источник
Это именно тот ответ, который я имел в виду, молодец!
Фатализировать
3

Желе, 9 8 байт, Денис

œċr0$L€Ḅ

Сожалею! Я не смог найти ваше намеченное решение.

Это зависит от того, C(n+k-1, k)сколько способов выбрать kзначения nс заменой.

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

Попробуйте онлайн или проверьте до n .

Позже я нашел еще одну 8-байтовую версию, которая достаточно эффективна для вычисления n = 1000. Это вычисляет значения с использованием биномиального коэффициента и позволяет избежать генерации списков.

Ḷ+c’Ṛ;1Ḅ

Попробуйте онлайн или проверьте до n .

объяснение

œċr0$L€Ḅ  Input: n
  r0$     Create a range [n, n-1, ..., 0]
œċ        Create all combinations with replacement for
          (n, n), (n, n-1), ..., (n, 0)
     L€   Find the length of each
       Ḅ  Convert it from binary to decimal and return

Ḷ+c’Ṛ;1Ḅ  Input: n
Ḷ         Creates the range [0, 1, ..., n-1]
 +        Add n to each in that range
   ’      Get n-1
  c       Compute the binomial coefficients between each
    Ṛ     Reverse the values
     ;1   Append 1 to it
       Ḅ  Convert it from binary to decimal and return
миль
источник
3

M, 9 8 байт, Dennis

Ḥrc’ḊḄḤ‘
feersum
источник
Хорошая идея с двойным + приращением
мили
3

QBasic, 30 29 байт, DLosc

INPUT n:?(n MOD 2)*(n+.5)+n/2
feersum
источник
Ницца! (Хотя не совсем то, что у меня было.)
DLosc