Перестановка источников


14

Перестановка из множества S={s1,s2,…,sn} является биективен функция π: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имеет кодовую точку 100 , pi(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)
  • для целей этой задачи N вовсе не содержит 0
  • перестановка должна нетривиально переставлять бесконечное подмножество N
  • вашей функции / программе не разрешено читать собственный источник

счет

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

Представление с наименьшим счетом выигрывает, связи нарушаются при более раннем представлении.


  1. За исключением перестановок, которые переставляют только конечное подмножество N , что означает, что множество {x|π(x)≠x} должно быть бесконечным.

  2. Если это улучшает ваш счет, вы можете, например, использовать кодировку Jelly в кодировке UTF-8 вместо обычной SBCS.


1
@JoKing «нулевые байты не могут быть частью исходного кода» re: второй вопрос
— только ASCII

Ответы:


6

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

-38 спасибо Эрику Аутгольферу!

C-*+

Меняется даже с нечетным.

Счет 67+45+44+43=199 - см. Самооценку здесь .

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


По-видимому, у Лики Нун -*ạесть оценка 300 ... однако, -*_@есть оценка 250. Возможно, я должен опубликовать это как мой собственный, хотя это та же самая перестановка.
— Эрик Outgolfer

Ах, хорошее наблюдение Лики Нун, так что -*N+оценка 212
— Джонатан Аллан

Это не было наблюдением, это был ответ на его (теперь довольно старый) вызов . ;-)
— Эрик Outgolfer

3
C-*+звучит как какой-то будущий вариант C++.
— говорит


4

Perl 6 , оценка: 201

*-!0+^40+!0

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

Порт Арнаулда ответ . Это дает преимущество xor ( +^), имеющему тот же приоритет, что -и+ , и от использования лямбды-бы то ни было для уменьшения общих символов. Кроме этого, я не мог найти способ представить это по-другому, чтобы получить лучший результат.

Perl 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-я кодовая точка - !это самая низкая кодовая точка в моем коде.


О_о, это значительное улучшение
— только ASCII

4

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

lambda a:a^96or~~96

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

-44 балла благодаря Орджану Йохансену; -4 балла спасибо xnor.


Эрджан Йохансен: исправлено (и это спасло мне 44 байта!)
— Час Браун

Хорошее сохранение (хотя это не байты)
— Орджан Йохансен

Это щедрое кредитование!
— Эрджан Йохансен

Не отредактировал бы, если бы вы не указали на недостаток :)
— Chas Brown

Это дешевле заменить пробел перед 96с ~~.
— xnor

2

Сетчатка 0.8.2 , 6 байт, оценка 260

T`O`RO

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


2

C # (интерактивный компилятор Visual C #) , 22 байта, оценка 247 245

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

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

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


Что не так с предыдущей версией A=>A<66?66-A:A?
— Джо Кинг,

2
@JoKing За исключением перестановок, которые переставляют только конечное подмножествоNЭто означает, что множество {Икс|π(Икс)≠Икс}должен быть бесконечным. Набор не бесконечен, поскольку единственными значениями в наборе являются 1-65, так как выше 65 все значения A отображаются на A
— Воплощение Невежества

О черт, я этого не заметил. Это означает, что мой собственный ответ тоже недействителен :(
— Джо Кинг,

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.