Ти можеш перевершити мене? (Розділ грабіжників)


43

Розділ розбійників

Розділ копів можна знайти тут .

Виклик

Ваше завдання - перевершити подання копів однією мовою та тією ж версією (наприклад, 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).

У цьому випадку ви зламали подання.

Оцінка балів

Людина, з якою зламали найбільше заяв, є переможцем.

Правила

  • Подання тріщини має бути тією ж мовою, що і подання поліцейського.
  • Один і той же вхід повинен призвести до того ж виходу (тому (2) = 4 має залишитися 4).
  • Для таких мов, як Python, ви можете імпортувати бібліотеки, стандартно включені в мову. (Отже, ніяких нуд / симпатій тощо)
  • Введення та вихід виводяться у десятковій частині (основа 10).

Примітка

Це завдання закінчено. Переможець секції " Розбійники " - феерсум . Кінцеві показники для CnR наведені нижче:

  • feersum : 16 тріщин
  • Денніс : 12 тріщин
  • Просочена монашка : 6 тріщин
  • Лінн : 4 тріщини
  • милі : 3 тріщини
  • Мартін Ендер : 2 тріщини
  • Емінья : 2 тріщини
  • jimmy23013 : 1 тріщина
  • Sp3000 : 1 тріщина
  • випадкова група : 1 тріщина
  • алефалфа : 1 тріщина
  • німі : 1 тріщина
  • Руйнуючий кавун : 1 тріщина
  • Дом Гастінгс : 1 тріщина

Відповіді:


8

Чеддар, 7 6 байт, пуховик

(<<)&1

Здається, це працює, але завжди можливо, що я неправильно розумію мову.


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

@Dennis (**)&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.

Діаграми, створені за допомогою HexagonyColorer та EsotericIDE від Timwi .


Свята корова! Я очікував, що тебе поб'ють, але не так сильно! 0.o
Синій

@Blue Ви плануєте додати пояснення до свого? Мені було б цікаво, як це працює. :) До цього я рано чи пізно додам пояснення, але я не впевнений, що знайду час сьогодні.
Мартін Ендер

Так, шахта використовує більш традиційний метод розрахунку. Я повністю забув про &, що могло врятувати кілька байт
Blue


7

Стек котів, 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

Приємно, ти навіть коротший за мою оригінальну версію для гольфу.
Leaky Nun

Це обчислює 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^
Синій

Ах, ~oакуратно. Я поняття не маю, що все-таки SDmX^робить.
Денніс

В основному він використовує змішану базову розмову на 1-індексованому діапазоні проти цього квадрата. Не щось на OEIS
Синій

О, це mвпливає лише на, Xа не на ^? Це багато що пояснює.
Денніс

Так, mі подібні використовують лише наступний вузол. Будь-які коментарі до моїх документів тощо?
Блакитний

4

05AB1E , 7 4, Емінья

LnOx

З формули для суми квадратів натуральних чисел 1 ^ 2 + 2 ^ 2 + 3 ^ 2 + ... + n ^ 2 = n (n + 1) (2 * n + 1) / 6, якщо помножити обидві сторони по 2 отримуємо суму_ {k = 0..n} 2 * k ^ 2 = n (n + 1) (2 * n + 1) / 3, що є альтернативною формулою для цієї послідовності. - Майк Уорбертон (mikewarb (AT) gmail.com), 08 вересня 2007 року


Я щасливий, що ти зламав це в 4, оскільки відбулася банальна модифікація моєї публічної, яку я пропустив. Приємно!
Емінья

4

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

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

Я провів кілька годин за читанням вихідного коду Jelly для останнього, тож я міг би також використати цю "навичку" для використання. Я сподіваюся, що @Dennis поділиться з нами своїми математичними відкриттями, що дозволяють скоротити формулу (якщо припустити, що є щось, а не тільки дивні хитрощі желей!).


Для порівняння, у мене було: `` Ḥc_ × c @ + ¥ \ nr0ç @ €: '+ \ S
Sp3000

@ Sp3000 О, ну чому ти не опублікував це?
feersum

Більше часу, щоб подумати про 6, перш ніж Денніс відправиться в M: P
Sp3000

4

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

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

Це обчислює добуток у вигляді суми квадратних чисел Фібоначчі, які обчислюються як сума біноміальних коефіцієнтів.

На щастя, сам @miles опублікував код, щоб сформувати цифри Фібоначчі в цьому коментарі .


4

Acc !! , 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

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

YftdAwg_p*

Замість того, щоб робити -1 ^ length (масив), він перетворює елементи в булеві значення (які завжди є 1), заперечує їх і приймає добуток елементів.




3

Брахілог, 11 10 байт, Fatalize

yb:AcLrLc.

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

Пояснення

Брахілог - це мови, що походять від Prolog, найбільшою здатністю яких є доведення речей.

Ось ми доводимо ці твердження:

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

QBasic, 30 29 байт, DLosc

INPUT n:?(n MOD 2)*(n+.5)+n/2

Приємно! (Хоча не зовсім те, що у мене було.)
DLosc
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.