Пермутація джерела


14

Перестановка з безлічі S={s1,с2,,сн} є біектівен функція π:SS . Наприклад, якщо S={1,2,3,4} то функція є перестановкою:π:x1+(x+1mod4)

π(1)=3,π(2)=4,π(3)=1,π(4)=2

Ми також можемо мати перестановки на нескінченних множинах, візьмемо N як приклад: Функція π:xx1+2(xmod2) - перестановка, змінюючи заміну непарних і парних цілих чисел у блоках по два. Перші елементи наступні:

2,1,4,3,6,5,8,7,10,9,12,11,14,13,16,15,

Виклик

Ваше завдання для цього завдання - написати функцію / програму, що реалізує будь-яку 1 перестановку на додатних натуральних числах. Оцінка вашого рішення - це сума кодових точок після зіставлення їх з реалізованою перестановкою.

Приклад

Припустимо, ми беремо перелічену вище перестановку, реалізовану з Python:

def pi(x):
    return x - 1 + 2*(x % 2)

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

Символ dмає , . Якщо ми робимо це для кожного персонажа, ми отримуємо:100pi(100)=99

99,102,101,31,111,106,39,119,42,57,9,31,31,31,31,113,102,115,118,113,109,31,119,31,46,31,50,31,44,31,49,41,39,119,31,38,31,49,42

Сума всіх цих відображених символів становить , це буде оцінка за цю функцію.2463

Правила

Ви будете реалізовувати перестановку як функцію чи програмуπ

  • задане натуральне число , повернення / вихідxπ(x)
  • для цілей цього завдання має НЕ міститьN0
  • перестановка повинна нетривіально перетворювати нескінченну підмножинуN
  • вашій функції / програмі заборонено читати власне джерело

Оцінка балів

Оцінка визначається сумою всіх точок коду (нульові байти не можуть бути частиною вихідного коду) під цією перестановкою (кодові точки залежать від вашої мови 2 , ви можете вільно використовувати SBCS, UTF-8 тощо) ваша мова це підтримує).

Подача з найнижчою оцінкою виграє, зв'язки розриваються за допомогою раннього подання.


  1. За винятком перестановок, які перестановлюють лише кінцевий підмножина , це означає, що множина має бути нескінченним.N{x|π(x)x}

  2. Якщо це покращить ваш показник, ви можете, наприклад, використовувати UTF-8 з кодуванням подачі желе замість звичайної SBCS.


1
@JoKing "нульові байти не можуть бути частиною вихідного коду" повторно: друге питання
лише для ASCII

Відповіді:


6

Желе , оцінка  288 250 212  199

-38 дякує Еріку Побіжному!

C-*+

Зміна навіть з непарними.

Оцінка - 67+45+44+43=199 - дивіться тут самостійну оцінку .

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


Судячи -*ạз усього , Leaky Nun's має оцінку 300 ... однак -*_@має оцінку 250. Можливо, я повинен розмістити це як своє, хоча це та сама перестановка.
Ерік Аутгольфер

Ах, приємне спостереження від Leaky Nun, тому -*N+оцінка 212
Джонатан Аллан


3
C-*+звучать як деякі майбутні варіації C++.
Валь каже:


4

Перл 6 , Оцінка: 201

*-!0+^40+!0

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

Відповідь порту Арнальда . Це виграє від xor ( +^), який має той же пріоритет, що і xor ( )- і +, і використання лямбда Wither для зменшення загальних символів. Окрім цього, я не міг знайти спосіб представити його по-різному, що отримав би кращу оцінку.

Перл 6 , оцінка 804 702

{{(++$ords(q[!$%()+-2?[]_doqrsx{}∉])??++$+22-$++%2-$++%2!!++$)xx$_}()[-!$+$_]}

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

Перша відповідь типу quine-y тут, і я вважаю, що це досить добре.

Це створює послідовність 23,22,25,24... з органу запитання з діапазоном 1,2,3,4...21 вставленим в індекси унікальних відсортованих кодових точок коду. Наприклад, елементи з 30-ї по 35-й послідовності складають 50,53,52,1,55,54 оскільки 33-а кодова точка є !і це найнижча кодова точка в моєму коді.


O_o, це величезне поліпшення
лише ASCII,

4

Оцінка Python 2 : 742 698 694 балів

lambda a:a^96or~~96

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

-44 бали завдяки Ерджану Йохансену; -4 бали thx до xnor.


Ørjan Johansen: Виправлено (і це врятувало мене 44 байти!)
Chas Brown

Добре заощадити (хоча це не байти)
Ørjan Johansen

Ось яке щедре кредитування!
Ørjan Johansen

Не редагували б, якби не вказали на недолік :)
Chas Brown

Дешеше замінити простір 96на ~~.
xnor

2

Сітківка 0,8,2 , 6 байт, оцінка 260

T`O`RO

Спробуйте в Інтернеті! Посилання включає нижній колонтитул з самооцінкою. Просто поміняйте місцями цифри 1та 9та 3та 7в десяткових поданнях, щоб на ці числа, які не містять цифр 10, не впливають.


2

C # (Visual C # Interactive Compiler) , 22 байти, оцінка 247 245

A=>A>65?A-1+A%2*2:66-A

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

Просте, якщо менше 66, повертає 66 мінус введення, інакше використовуйте формулу у питанні, що підміняє парні і непарні числа.


Що не так з попередньою версією A=>A<66?66-A:A?
Джо Кінг

2
N{x|π(x)x}

О, чорт, я цього не помічав. Це означає, що моя власна відповідь також є недійсною :(
Jo King

2

TI-BASIC, 9 байт, оцінка 1088 1051 1000

Ans-cos(π2fPart(2⁻¹Ans

Зміна навіть з непарними. Навіть зіставляється Ans-1і непарні карти вAns+1 .

TI-BASIC є токенізованим, тому ця програма матиме такі шістнадцяткові значення:

Ans   -    cos(  π    2    fPart(  2   ⁻¹  Ans
72    71   C4    AC   32   BA      32  0C  72

113+114+195+171+49+185+49+11+113=1000

Програма виведення тесту:

For(I,1,10
I
Ans-cos(π2fPart(2⁻¹Ans
Disp Ans
Pause
End

Які виходи:

2
1
4
3
6
5
8
7
10
9

Примітки:

  • Значення токенів TI-BASIC можна знайти тут .

  • Pauseвикористовується у вихідній програмі для кращого перегляду перестановки, оскільки калькулятор має лише 8 рядків. Натисніть [ENTER], щоб переглянути наступну перестановку.


1

Вугілля деревне , 13 байт, оцінка 681

⁻⁺²³²ι⊗﹪⊖ι²³³

Спробуйте в Інтернеті! Посилання полягає у версії самокоригування з заголовком для відображення масиву байтових кодів. (У вугільному вугіллі є власна кодова сторінка, тому я вручну вставив правильні байтові коди у вхід.) Працює шляхом реверсування діапазонів 233 чисел, так що 117, 350, 583 ... не змінюються. Пояснення:

     ι          Value
 ⁺              Plus
  ²³²           Literal 232
⁻               Minus
         ι      Value
        ⊖       Decremented
       ﹪        Modulo
          ²³³   Literal 233
      ⊗         Doubled

1

Хаскелл, оцінка 985

(\((.),(-))->(.)*200+mod(-39+(-))200+1).(\(*)->divMod((*)-1)200)

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


Я не думаю, що це перестановка, оскільки додавання a*200не має ефекту по модулю 200, тому a це не має значення.
xnor

@xnor Хороший улов. Це повинно бути поза модом. У якийсь момент, займаючись гольфом, я, мабуть, зіпсував порядок операцій. Виправлено зараз, дякую!
Джозеф Сибл-

Я думаю, є ще одна проблема, що 40 відображає на 0, але для виклику потрібні цілі числа, що робить такі підходи складними.
xnor

1
Використання sum[1|...]понад if..then..elseповинно допомогти.
ბიმო


1

05AB1E , оцінка: 488 на кодовій сторінці 05AB1E

È·<-

Заміни непарні і навіть подібні до прикладної функції.

Спробуємо покращити бал звідси.

Спробуйте в Інтернеті з введенням в діапазоні[1, 100] або Спробуйте в Інтернеті з кодовими точками.

Пояснення:

È     # Check if the (implicit) input is even (1 if truthy; 0 if falsey)
 ·    # Double (2 if truthy; 0 if falsey)
  <   # Decrease by 1 (1 if truthy; -1 if falsey)
   -  # Subtract it from the (implicit) input (and output implicitly)

0

Brainfuck, 47 байт, оцінка 2988

,[-<+<+>>]<[->[>+<[-]]+>[<->-]<<]>[-<<++>>]<<-.

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

Я використовував перестановку, подану у вступі. Оскільки це біекція, ви можете використовувати її як просту симетричну шифру, схожу на ROT13 або Atbash. Моє рішення працює на безмежних клітинах. Однак, обмежившись 8-бітовими клітинками, ви можете зберегти 2 бали, замінивши [-]на [+].

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