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


14

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

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

Ми також можемо мати перестановки на нескінченних множинах, візьмемо N як приклад: Функція π:x↦x−1+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.