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


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

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


В качестве альтернативы (**)&2. Я пытался 2&(**)и потерпел неудачу. :(
Денис

@ Денис (**)&2прекрасно работает для меня: / но это тоже работает.
Вниз

14

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

RÆḊḞ

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

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

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


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

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

^]T{_+:}_

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

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

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


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. Я перестал пытаться понять, что делает программа, и нашел способ закодировать идентичную последовательность инструкций, используя меньшее количество тактов.



5

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

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

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

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

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


Трюк с 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).


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

4

Python 2, 43 40, xsot

g=lambda n:n<2or-~sum(map(g,range(n)))/3

Интересно, это отличается от того, что у меня было изначально.
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 г.


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

4

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

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

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


Для сравнения у меня было: `'Ḥ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

на самом деле очень хорошо, я на самом деле рад тому, что меня обошли стороной, чтобы увидеть это решение
Разрушаемый Лимон

Зачем усложнять простую формулу с правильным сдвигом?
xsot

@xsot Потому что я не знал, какую версию он использовал.
Утренняя монахиня



3

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

YftdAwg_p*

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




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


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