Строка Time Capsule 2016: насколько универсален ваш язык?

71

Примерно год назад, 31 декабря 2015 года, у меня возникла мысль, что:

Мы должны сделать строку времени капсулы. Каждый может добавить одного персонажа, и в следующие новые годы мы увидим, кто сможет сделать лучшую программу из всех персонажей с существующими тогда эзолангами.

Doorknob любезно собрал персонажей из сообщества PPCG и держал их в безопасности в течение года.

В нем приняли участие 74 человека, так что у нас есть 74 печатных символа ASCII для игры!

Вот 74 символа строки капсулы времени 2016 в том порядке, в котором они были отправлены:

H@~*^)$.`~+1A|Q)p~`\Z!IQ~e:O.~@``#|9@)Tf\eT`=(!``|`~!y!`) Q~$x.4|m4~~&!L{%

Вот 74 символа строки капсулы времени 2016 в порядке ASCII (обратите внимание на начальный пробел):

 !!!!!#$$%&())))*+...1449:=@@@AHILOQQQTTZ\\^`````````eefmpxy{||||~~~~~~~~~

Работать не так уж и много, но здесь нам нравится вызов.

Соревнование

Чтобы определить, какой язык «лучший» для строки временной капсулы, у нас будет 6 (на 201 6 ) испытаний, которые увеличиваются по сложности, в каждой из которых вы должны использовать поднабор из 74 символов временной капсулы.

Наличие 6 различных задач помогает обеспечить конкуренцию большему количеству языков, но только лучшие языки смогут ответить на все из них и набрать высокий балл.

Подсчет очков:

  • Каждое испытание будет оцениваться от 0 до 74 в зависимости от того, сколько символов используется.
  • Чем выше баллы, тем лучше.
  • Если ваш язык не может выполнить задание, ваш счет для этого задания равен 0.
  • Любое непустое подмножество задач может быть выполнено.
  • Ваш итоговый балл - это сумма баллов за все 6 испытаний.
  • Наилучшая возможная итоговая оценка - 6 × 74 или 444 .

Испытания

1. Беги

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

Напишите самую длинную полную программу (используя только 74 символа капсулы времени, помните), которая запускается / выполняется без ошибок во время компиляции или во время выполнения.

Не имеет значения, что делает программа, не имеет значения, имеет ли она ввод-вывод или входит в бесконечный цикл, важно только то, что она работает без ошибок. (Предупреждения в порядке, как и ошибки, вызванные неправильным пользовательским вводом.)

Комментарии разрешены, так что это может быть так просто, как

#H@~*^)$.`~+1A|Q)p~`\Z!IQ~e:O.~@``|9@)Tf\eT`=(!``|`~!y!`) Q~$x.4|m4~~&!L{%

в Python за 74 балла.

(Не бойтесь отвечать, если это единственная задача, которую может выполнить ваш язык, но также не ожидайте большого количества голосов.)

Оценка = продолжительность программы (чем длиннее программа, тем лучше)

2. I / O

Язык, который не имеет формы ввода или вывода, почти так же бесполезен, как и тот, который не может работать.

Если задан печатный символ ASCII от !(0x33) до }(0x7D) включительно, выведите печатный символ ASCII до и после него.

Вывод может быть длиной в две строки или списком, или символами, разделенными пробелом или новой строкой.

Например, если вход является }выходом, может быть |~или ["|", "~"]или | ~или или |\n~.

Аналогично, "является выходом для !и ACявляется выходом для B.

Score = 74 - длина программы (чем короче программа, тем лучше)

3. Ветвистость

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

Если задано положительное целое число, если оно заканчивается десятичными цифрами, 16измените на 6a 7и выведите результат; в противном случае выведите входные данные без изменений. Вы можете использовать строки для ввода / вывода, если хотите.

Примеры:

2016 -> 2017
16 -> 17
116 -> 117
1616 -> 1617
6 -> 6
15 -> 15
17 -> 17
106 -> 106
2106 -> 2106

Score = 74 - длина программы (чем короче программа, тем лучше)

4. Loopability

Язык, который не может делать циклы, будет порождать повторяющийся код, настолько утомительный, что вам потребуется некоторое время на перерыв в программировании.

Получив положительное целое число, выведите квадрат ASCII-искусства той длины стороны, заполненный узором из концентрических меньших квадратов, которые чередуются между любыми двумя различными печатными символами ASCII . Они не должны быть одинаковыми двумя символами для разных входов.

Например:

1    <- input
X    <- output

2
XX
XX

3
XXX
X-X
XXX

4
XXXX
X--X
X--X
XXXX

5
YYYYY
Y...Y
Y.Y.Y
Y...Y
YYYYY

6
XXXXXX
X----X
X-XX-X
X-XX-X
X----X
XXXXXX

7
ZZZZZZZ
Z-----Z
Z-ZZZ-Z
Z-Z-Z-Z
Z-ZZZ-Z
Z-----Z
ZZZZZZZ

Score = 74 - длина программы (чем короче программа, тем лучше)

5. Математика

Язык, который плохо разбирается в цифрах и математике, может быть и для гуманитарных специальностей.

Не принимайте никаких входных данных, но выведите 72 целочисленных делителя 2016 года , положительных и отрицательных, в любом порядке. Вывод может быть отформатирован в виде строки или списка разумным способом.

Пример:

-1, -2, -3, -4, -6, -7, -8, -9, -12, -14, -16, -18, -21, -24, -28, -32, -36, -42, -48, -56, -63, -72, -84, -96, -112, -126, -144, -168, -224, -252, -288, -336, -504, -672, -1008, -2016, 1, 2, 3, 4, 6, 7, 8, 9, 12, 14, 16, 18, 21, 24, 28, 32, 36, 42, 48, 56, 63, 72, 84, 96, 112, 126, 144, 168, 224, 252, 288, 336, 504, 672, 1008, 2016

Score = 74 - длина программы (чем короче программа, тем лучше)

6. Эзотеризм

(Нет, не что .) Мы в PPCG как наш эзотерический материал , и quines являются хорошим примером этого.

Напишите самую длинную квинну, которую вы можете, согласно обычным правилам квин . Quine - это программа, которая не требует ввода и выводит сама себя.

Оценка = продолжительность программы (чем длиннее программа, тем лучше)

Особые правила

  • В каждом из 6 заданий ваша программа должна быть подмножеством из 74 капсульных символов, переставленных так, как вам нравится. Это может быть пустое подмножество или неправильное подмножество , поэтому каждая из ваших программ может содержать от 0 до 74 символов.
  • Одиночный завершающий перевод строки в конце ввода / вывода / кода в любом месте в порядке, поскольку некоторые языки требуют этого, или его нельзя легко избежать.
  • Если не указано иное, каждый вызов может быть выполнен в виде функции или полной программы в соответствии с нашими значениями по умолчанию .
  • Все задачи должны быть выполнены на одном языке.
  • Вы должны использовать язык (или версию языка), созданный до 2017 года в любой точке Земли .
  • Любой желающий может ответить, независимо от того, добавили ли вы персонажа в капсулу времени или нет.

Не стесняйтесь использовать персонажей капсулы времени 2016 года в ваших собственных задачах.

Кальвин Хобби
источник
4
Yay: D вызов, где JavaScript может потенциально превзойти!
Вниз
1
Дискуссионный чат для совместной работы над некоторыми решениями.
user48538
6
Я уверен, что 6×74 or 444это невозможно, поскольку это означало бы пустые программы, которые как-то ведут себя по-разному. следовательно, 442 является фактическим минимумом, поскольку это означает, что в двух из 3 программ ввода данных есть символ
Destructible Lemon
7
Мой язык - Java. Я проигрываю по умолчанию: P
Weckar E.
2
Давайте сделаем это снова!
ev3commander

Ответы:

37

Глифо , 74 + (74 - 36) = 112

1. Выполнить (74 байта)

!!#%QTQT@=A@$!!$)()*!&))+...1449:@HILOQZ\\^`````````eefmpx|||{~~~~~~y~|~ ~

2. IO (36 байт)

!!!#!$!$4419TAHT\ee\OQQQ))*+)..)|~~~

объяснение

Glypho казался довольно хорошим выбором для этой задачи, потому что он не заботится о реальных используемых персонажах. Вместо этого он просматривает группы из четырех символов и выбирает команду на основе шаблона повторения этих четырех символов. Поскольку в строке временной капсулы много дубликатов, мы довольно гибки в программах, которые мы можем написать, за исключением того, что мы ограничены программами из 18 команд (что не так уж много в Glypho). Хотя это позволило мне решить первые две проблемы довольно легко, я сомневаюсь, что Glypho может запустить другие с таким количеством персонажей.

Я протестировал их с помощью интерпретатора Java, полученного в 2006-06-23 на машине обратного хода , которая использует немного другое отображение команд:

0000 n
0001 i
0010 >
0011 \
0012 1
0100 <
0101 d
0102 [
0110 +
0111 o
0112 *
0120 -
0121 ]
0122 !
0123 e

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

1d-+[...]

Где ...мусор, который я не потрудился перевести?

1      Push 1.
d      Duplicate.
-      Turn into -1.
+      Add. Gives 0.
[...]  Skip the rest because the top of the stack is zero.

Программа IO переводится как:

id1-+o1+o

Вот что это делает:

i   Read a character.
d   Duplicate.
1   Push 1.
-   Turn into -1.
+   Add to character, i.e. decrement it.
o   Output it.
1   Push another 1.
+   Add to character, i.e. increment it.
o   Output it.
Мартин Эндер
источник
24

CJam, 74 + (74 - 14) + (74 - 26) = 182 балла

1. Выполнить (74 байта)

e# !!!!!$$%&())))*+...1449:=@@@AHILOQQQTTZ\\^`````````efmpxy{||||~~~~~~~~~

Двигаясь e#вперед, комментирует всю строку.

2. Ввод / вывод (14 байтов)

9`)ZH*+~):Q(Q)

Денис спас 8 байтов.

Объяснение:

9`                   Push "9".
  )                  Extract character '9'.
   ZH*               Push 3 * 17 = 51.
      +              Add to get character 'l'.
       ~             Eval as CJam code. Command l reads a line.
        )            Extract the only character from the input line
         :Q(         Assign to Q and decrement
            Q)       Push Q and increment

3. Разветвленность (26 байт)

4`)4Z|`I!`|~^~~T$AT$*%H(=+

Объяснение:

4`)                            Push character '4'
   4Z|`                        Push 4 | 3 = 7, stringify
       I!`                     Push !18 = 0, stringify
          |~                   Setwise or and eval to get 70
            ^                  XOR to get 'r'
             ~                 Eval to read input
              ~                Eval the input as CJam code to turn
                               it into an integer
               T$              Duplicate it
                 A             Push 10
                  T$*          Duplicate that and multiply → 100
                     %         Mod the copy by 100
                      H(=      Compare to 17 - 1 = 16
                         +     Add the result (1 or 0) to the original

Я посмотрю на других позже. ( РЕДАКТИРОВАТЬ : я сомневаюсь, что они возможны, без блочных или строковых литералов ... может быть, математический?)

Линн
источник
Для # 2 вы можете использовать 9`)ZH*+~):Q(Q).
Деннис
11

J, оценка 71 + (74 - 19) = 126

Задача 1, длина 71

AHILO=:( |T`T`Z`e`e`f`m`p`x`y|.~~%~@{|~^|Q@Q@Q+.*.449!~!~!~!!#$$&1\\~~)

Это определяет глагол, AHILOчтобы быть внутри. Неиспользованные:

)))

Я не думаю, что есть какой-то способ получить больше, чем этот.

Задание 3, длина 19

+($#~$~4)=1e4|&%:*~

Способ выполнить эту задачу без ограничений заключается +16=100|]в следующем:

        ]  Input
    100|   mod 100
 16=       equals 16? (Evaluates to 1 or 0)
+          Add to input.

У нас есть +, =и несколько копий или |в нашем распоряжении, и это легко обойти ], но цифры являются более проблематичными. Вот первая часть, которая вычисляет вход по модулю 100:

1e4|&%:*~
       *~  Input squared (multiplied with itself).
1e4        The number 10000.
   |       Perform modulo
    &      on
     %:    their square roots.

После того, как мы закончим с этим, давайте сгенерируем число 16. Самый простой способ - с *~4(4 умножить на себя), но мы уже использовали, *так что это запрещено. Вместо этого мы сделаем некоторые манипуляции с массивами.

($#~$~4)
    $~4   Reshape 4 to shape 4, resulting in the array 4 4 4 4.
  #~      Replicate wrt itself: replace each 4 by four 4s.
 $        Take length.

работай

2

Это совершенно определенно невозможно. Единственными способами манипулирования значениями символов являются a.и u:, и у нас нет доступа ни к одному из них.

Теперь, если бы мы могли использовать aвместо, скажем A, то это было бы решением:

Q{~(*^.4%9 1)+I.~&Q=:a.

Самым сложным было заставить его работать с номером -1.

Q{~(*^.4%9 1)+I.~&Q=:a.
                     a.  The array of all bytes.
                  Q=:    Bind it to Q
              I.~&       and find the input's index in it.
   (        )+           Add the following array:
    *                    Signum of
     ^.                  logarithm of
       4%                4 divided by
         9 1             the array 9 1.
                         This evaluates to -1 1.
Q{~                      Index back into Q.

4

(*.1:"|~@+.)

Это создает форму шелухи, но я не могу найти способ генерировать символы. Увы.

5

По общему признанию, это кажется самой простой из задач, которые нужно выполнить в J. Однако без i.этого это будет довольно сложно.

6

Скорее всего, это невозможно без фальшивого квинета 449или чего-то подобного, потому что строка капсулы не содержит кавычек или какого-либо другого способа создания J-строк.

Conor O'Brien
источник
Для задачи 2 Q{~1+I.~&Q=:a.дает следующий символ: связать алфавит a.с Q, найти в нем индекс ввода I., добавить один и индексировать в Q. Попробуй. Единственная оставшаяся проблема - произвести -1...
Згарб
Кроме того , задача 3 может быть сделано без строковых функций: +16=100&|. Вам просто нужно как-то произвести 16 и 100.
Згарб
@Zgarb (1) Да ... (2) О! Это классно! Хммм не должно быть слишком сложно
Конор О'Брайен
Ха, я думаю, что я получил 3: +($@#~@$~4)=1e4|&%:*~Это было чрезвычайно раздражает, потому что у нас есть только один каждый (&=:+*и два 4с.
Згарб
А вот и 2: Q{~(*^.4%9 1)+I.~&Q=:a.Я понял, что логарифм ^.дает отрицательные числа для входных данных строго между 0 и 1, и мы имеем %для получения дробей и *для получения результатов до -1 и 1.
Згарб
8

PowerShell - Общая оценка: 74

1. Бег - Счет: 74

#~= `TeQ.)`~H|$QL4yA)\*`!^O$1)!Z`!`~|\`&T@!x+e(f|Q`.|!4%.{~`:~~)m@~`@p~I9~

Поскольку в PowerShell это чрезвычайно сложно (насколько я могу судить, любой возможный способ получения ввода невозможен с указанными символами), я по крайней мере решил рандомизировать первую задачу, поэтому мы не все копируем пример напрямую. из поста.

Итак, вот генератор ответов на случайный вызов 1 (для языков, где #есть комментарий):

'#'+$(-join([char[]]' !!!!!$$%&())))*+...1449:=@@@AHILOQQQTTZ\\^`````````eefmpxy{||||~~~~~~~~~'|Get-Random -Count 73))

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

briantist
источник
Я думаю, что вы правы. Самое близкое, что мы могли бы получить, $^- это «первый токен предыдущей строки в сеансе», который был бы чрезвычайно ограниченным и, скорее всего, серьезным отклонением от стандартных правил ввода-вывода.
AdmBorkBork
@TimmyD да, $^пусто в новой сессии в любом случае.
бриантист
8

мемы , оценка ( 62 65 + 70) 135

1: запустить

Я удалил все backticks ( `) и математические операторы. Они конфликтовали, потому что не было достаточно чисел, чтобы удовлетворить каждый унарный и бинарный оператор. Я оставил немного, в результате чего +3 байта . Результирующая программа:

 !!!!!#$$%&())))...+1^4*49:=@@@AHILOQQQTTZ\\eefmpxy{||||~~~~~~~~~

Я понятия не имею, почему и как это сработало. По крайней мере, он не генерирует никаких исключений во время выполнения C # и, следовательно, не вылетает.

6: Куайн

Знаете, если бы в этих 74 символах были -буквы или строчные буквы q, это было бы слишком просто. Я рад за Iоператора, по крайней мере.

1/4I

Этот код не совсем очевиден. Вот объяснение:

1    Set object to 1 (1)
/4   Divide by 4     (0.25)
I    Set object to a fraction string. (1/4)

Строки дроби (например 1/4) отображаются с I в конце, чтобы точно указать это. IОператор, как правило , бесполезно, я добавил его для других средств, но эй, это работает как это!

Код выше недействителен. Глупо я не видел, что 74 символа не содержат ни одного оператора деления, forwardwardslash ( /). Я придумал что-то еще, хотя:

True

Объяснение:

T    Set object to "true" (bool value)
rue  None of these are valid tokens, so they don't get interpreted.

Выходы True(из-за того, как C # обрабатывает Boolean.ToString()прописные, а не строчные буквы). Не уверен, что это правильная квина, а я все еще ломаю голову над настоящей, действительно правильной и интуитивно понятной.

Может также решить проблемы ввода-вывода и математики, но мне не хватает определенных токенов (символов), которые не включены в 74 символа.

devRicher
источник
8

Brainfuck, 74 байта

H@~*^)$.`~+1A|Q)p~`\Z!IQ~e:O.~@``#|9@)Tf\eT`=(!``|`~!y!`) Q~$x.4|m4~~&!L{%

Я просто должен был.

Объяснение:

Любой символ, который не является допустимым символом Brainfuck, рассматривается как комментарий. Единственный код, который действительно запускается, это:

.+..

Это не приводит к выводу на печать, поскольку ни 0, ни 1 не являются печатными символами в ASCII. Однако это не приводит к ошибке, поэтому мы успешно выполнили первую задачу.

Джулиан Лахниет
источник
3
Это на самом деле производит продукцию. Он производит эти символы. Они могут не быть «пригодными для печати» (читай: видимыми), но, тем не менее, они все равно отправляются на стандартный вывод.
mbomb007
7

Mathematica, оценка 62

Я был бы удивлен, если кто-то может сделать задачи 2-6 работы в Mathematica. Вот лучшее, что я сделал с задачей 1:

A:=1.`!#&@(4`+4.`*9.`^$$H~I~L~O~Q~Q~Q~T~T||Z||e@@efmpxy%)!!!!

Определяет довольно глупую функцию Aс постоянным значением. 12 неиспользованных символов:

)))\\`````{~
Грег Мартин
источник
6

Октава, оценка 74

1. Беги

x =@(AHILOQQQTTZeefmpy)+.1||!!!!!~~~~~~~~~4.^.4||9%#$$)))*@@\`````````{\&:

50 из этих символов являются частью функции, а остальные 24 - нет.

Что оно делает:

x =@(AHILOQQQTTZeefmpy)создает функцию, xкоторая может принимать переменную в AHILOQQQTTZeefmpyкачестве входных данных.

Чтобы понять остальное:

a||bвызывает функцию all()на обоих aи b. Если один или оба из них вернут true, ||оператор вернет true.

!aи ~aозначает то же самое здесь, они оба not(a).

a.^b стихийная сила (a(1)^b(1), a(2)^b(2) ...)

Продолжение объяснения

Я буду сокращать каждый из шагов по мере продвижения:

4.^.4||9  % This is 4 raised to the power of .4||9
          % .4||9 is true, since both .4 and 9 are true
          % true is evaluated to 1 when used in an expression
...       % 4 raised to the power of 1 is simply 4.
4         % The above expression simplified

А также:

!!!!!~~~~~~~~~4  % ! and ~ are the not() operator, so this is equivalent to:
not(not(not(not(not(not(not(not(not(not(not(not(not(not(4))))))))))))))

Существует четное число not, так что это эквивалентно тому, not(not(4))что trueили 1.

+.1||1      % This is equivalent to all(+.1) | all(1), which returns true

Остальное закомментировано.

Стьюи Гриффин
источник
6

*> <> , общий балл = 74

1. Беги, набери 74

f:4%*e+e14=p!Q H@~^)$.`~A|Q)~`\ZI~O.~@``#|9@)T\T`(!``|`~!y!`)Q~$x.|m~~&!L{

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

Это было чрезвычайно трудно сделать без ;персонажа. Я действительно думал, что это будет невозможно на пару мгновений, пока я не увидел %, что я в основном сдался.

Это также действительная> <> программа.

Объяснено (нерелевантные части опущены)

f:4%*e+e14=p!Q 

f:               copy 15
  4%             pop 15, push 15%4 (3)
    *            pop 15 and 3, push 15*3 (45)
     e+          pop 45, push 45+14 (59, ascii ";")
       e         push 14
        14=      push 0
           p     replace coord (14, 0) with ";"
            !Q   skip Q (this is just filler)
              ;  end execution

Проблемы, с которыми сталкиваются

Я мог бы попробовать другие вызовы ... они были бы чрезвычайно сложными и могли бы включать в себя странное изменение правил, но либеральное использование |зеркал и !батутов должно сделать возможным, по крайней мере, еще один вызов.

Эти проблемы особенно сложны, потому что нам не разрешены никакие выходные данные с *> <> ( oи n), или даже вызовы функций ( C), функции return ( R) или терминаторы программ ( ;). Несмотря на то, что нам также не хватает iввода, мы все равно можем поместить ввод в стек, что является плюсом. Еще одним плюсом является то, что мы получаем единственную pинструкцию, которая позволяет нам заменить инструкцию в кодовом поле. Возможно, это можно будет использовать несколько раз (пока не удалось найти практического решения), что может сделать другие программы более вероятными (поскольку мы сможем создать две или более инструкции).

redstarcoder
источник
5

Хаскелл, оценка 63

1. Запустите:

(!!!!!#$$%&*+...:@@@\\^||||~~~~~~~~~)fmpxyAHILOQQQTTZ e=14`e`49

Не используется в )))```````{. Комментарии в Haskell - это --или {- ... -}, так что нет простой версии для комментариев.

Этот код определяет инфиксный оператор, !!!!!#$$%&*+...:@@@\^||||~~~~~~~~~который принимает два аргумента:

  1. fmpxyAHILOQQQTTZ который игнорируется и поэтому может быть произвольного типа
  2. e, которая должна быть функцией, принимающей два числа

В теле функции eзатем применяется 14 и 49, используя `обозначение -infix.

Пример использования:

Prelude> () !!!!!#$$%&*+...:@@@\\^||||~~~~~~~~~ (*)
686

Оператор применяется к ()пустому кортежу и (*)оператору умножения, поэтому 14*49 = 686вычисляется.

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

Другие проблемы

Я сомневаюсь, что возможны любые другие проблемы, особенно из-за отсутствия возможных имен переменных, которые могут появляться дважды, а это только e(или что-то подобное eQT), потому что имена переменных не могут начинаться с заглавной буквы. Конечно, наличие только одного =не помогает.

Laikoni
источник
5

Pyth, 131 на данный момент (2 испытания завершены)

1. Бег, 74

# `````````!!!)!)!)*$AOeIefLmpxQ|Q|y|Q|~~~~~~~~~()${+%&\=@@@^\:.1.4.49TTZH

Эта программа не принимает ввод и не создает вывод.

Эта программа использует $$, что позволяет выполнять произвольный код, и поэтому запрещена в сети, поэтому эта программа работает в автономном режиме. Вот его результаты компиляции, так что вы можете увидеть, что на самом деле запускается:

while True:
 try:
  (repr(repr(repr(repr(repr(repr(repr(repr(repr(Pnot(Pnot(Pnot()))))))))))))
  imp_print(Pnot())
  imp_print(Pnot())
  imp_print(times(AOeIefLmpxQ|Q|y|Q|~~~~~~~~~(),uniquify(plus(mod(("=" and lookup(lookup(lookup(Ppow(":",.1),.4),.49),T)),T),Z))))
  imp_print(H)
 except Exception:
  break

Довольно сложно написать программу с произвольными символами, которая не содержит ошибок в Pyth. Я поставил перед собой дополнительную задачу, состоящую в том, чтобы программа работала без участия пользователя.

Первый шаг - использовать #все ошибки. Далее, нам необходимо , чтобы избежать ошибок , вызванных ~, Iи L, каждый из которых имеет свои собственные данные. Это достигается путем помещения их внутрь $$, что встраивает их в выходную компиляцию и, таким образом, подчиняет их правилам компиляции Python, а не Pyth. Наконец, чтобы избежать ввода пользователя, различные маркеры арности 0 (переменные и аналогичные) помещаются в конец, а Qs перемещаются внутри $$блока.

2. IO

Это будет невероятно сложно, если это вообще возможно. Ни одна из функций Pyth, которые создают произвольные строки или символы, не присутствует, за исключением того .f, что это действительно плохая работа по созданию произвольных символов.

3. Разветвленность: 74 - 17 = 57

|&x%Q*TTye|LZ9Q+1

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

Эквивалентная программа Pyth будет:

?n%Q100 16Q+1

Этот код принимает входной мод 100, сравнивает его с 16, а затем использует троичный для выбора между входом и входом плюс один. Из-за ограничений персонажа я сделал несколько замен:

  • Тогда вместо ?троичного, который я использовал |&, у которого та же функциональность, за исключением того, что он ломается, если ввод равен нулю, но, поскольку нам гарантирован положительный целочисленный ввод, это нормально. (Это можно исправить без дополнительных символов, но так проще.)orand

  • Вместо непосредственного сравнения двух чисел, я беру их XOR x, который равен нулю тогда и только тогда, когда они равны, как хотелось бы.

  • Вместо того, чтобы писать 100напрямую, я генерирую его с помощью *TT, поскольку Tинициализируется в 10.

  • Вместо того, чтобы писать 16напрямую, я генерирую это с помощью ye|LZ9. |LZпо существу, функционирует как функция диапазона, так что |LZ9дает [0, 1, 2, 3, 4, 5, 6, 7, 8]. eберет последний элемент списка, давая 8. yудваивает, давая 16по желанию. С дополнительным +или дополнительным *я мог бы сохранить персонажа, но они оба более полезны в другом месте.

Еще не все!

isaacg
источник
3

Рубин - Счет: 74

1. Беги

#H@~*^)$.`~+1A|Q)p~`\Z!IQ~e:O.~@``|9@)Tf\eT`=(!``|`~!y!`) Q~$x.4|m4~~&!L{%

Схватил от вызова.

dkudriavtsev
источник
1
То же самое для Питона
Даниил
3

JavaScript (ES6), оценка = 74

1. Выполнить, 74 байта

Z=` !!!!!#$$%())))...1449:@@@\AHILOQQQTT^\`eefmpxy{||||~~~~~~~~~`*``+``&``

6. Эзотеризм (недействительный)

Для записи, мой предложенный quine был:

1.4e+49

который оказался недействительным, как обсуждалось в комментариях ниже.

Arnauld
источник
Эта квинна действительна.
wizzwizz4
3
Хайн не действителен. Соответствующие правила связаны в вызове. В частности, любая квинна, основанная на одном литерале, не может кодировать часть источника в другой части источника. cc @ wizzwizz4
Мартин Эндер
@MartinEnder В моем браузере эта программа выводит свой исходный код буквально. Это утверждение, которое оценивает себя. Я не уверен, что вы говорите; нет другой части источника.
wizzwizz4
1
@ wizzwizz4 это сообщество предъявляет к квинам больше требований, чем просто «программа печатает свой собственный источник», потому что это допускает различные виды мошеннических решений, которые не соответствуют духу квин. Смотрите ссылку.
Мартин Эндер
1
@ wizzwizz4 из топового голосования с ответом «Должно быть возможно идентифицировать раздел программы, который кодирует другую часть программы. (« Разное »означает, что две части появляются в разных позициях.)« Что касается Гольфа, то вы - квин К счастью, задача (и связанный ответ) на несколько лет старше, чем связанная метапост.
Мартин Эндер
3

Сетчатка, оценка 74

1. Беги, набери 74

)))` !!!!!#$$%&()*.+..1449:=@@@AHILOQQQTTZ\\^````````eefmpxy{||||~~~~~~~~~

Я перенес дополнительные парены в конфиг, чтобы они могли балансировать в регулярном выражении. Я также перешел `сразу после них и перешел +.на .+.

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

Другие, скорее всего, невозможны, так как нет новых строк. Там также нет -для транслитерации или dдля класса символов цифр.

mbomb007
источник
3

Пип, оценка 74 + (74 - 19) = 129

Так много кавычек с ни одной кавычкой, будь то один или два!

Задача 1, оценка 74

`` `\``!!!!!`#$$%&())))*+...1449:=@@@ILOQQQTTZ\^efmpx{|||~~~~~~~~~`|`yeAH`

По сути, это просто серия шаблонных (регулярных выражений) литералов в обратных тегах, последний из которых напечатан. Поскольку существует нечетное количество обратных галочек, мы должны убрать один из них с обратной косой чертой ( `\``). Попробуйте онлайн с -wдобавленным флагом, чтобы доказать, что предупреждения не генерируются.

Задание 3, оценка 55 (длина 19)

e+!!e%(1.#x.!9)=4*4

Используя довольно странный метод ввода - пятый аргумент командной строки - это возможно. Попробуйте онлайн!

                     e is 5th cmdline arg; x is empty string
       1.#x.!9       Concatenate 1, 0 (length of x), and 0 (not 9)
    e%(       )      e mod 100...
               =4*4  ... equals 16?
  !!                 Logically negate twice
e+                   Add to e (+1 if number mod 100 is 16, +0 otherwise)
                     Expression is autoprinted

Другие задачи

Можно получить входные данные для задачи 2 тем же способом, что и для задачи 3 выше. Проблема заключается в преобразовании в код ASCII и обратно в символ. Первый может быть сделан с A, но последний требует C, или возможно индексация в PAпеременной. Создание и оценка кода не может быть сделано без V. Я не думаю, что задача возможна.

Задача 4 сложная даже без ограниченного набора символов. В предположении, это потребовало бы списков (без использования []разделителей или RL(повторный список) и только с одним шансом использовать AL(добавить список) - маловероятно) или возможно что-то с CG(координатная сетка) или MC( координаты карты), оба запрещены ,

Задача 5 находится на грани возможности. Циклы будут сложными, так как Fили и Map невозможны, а диапазоны не могут быть построены ,. Там может быть что-то, что можно сделать с Tбольным. Инкремент может быть x:x+1разнообразным (очевидно, с переменной, отличной от x, хотя). Проверки делимости можно использовать %. Тем не менее, я не думаю, что есть достаточно символов - особенно повторяющиеся буквы - чтобы сделать все, что должно произойти.

Задача 6 выглядит совершенно невозможной. Все известные Pip Quines есть "в них. Они также используют R(заменить), RP(repr) или V(eval), ни один из которых не доступен.

DLosc
источник
2

На самом деле, оценка (74 + 0 + 0 + 0 + 0 + 0 ) = 74

Да, строка капсулы будет работать с Actual, как и для Run, так как Actual отклоняет все ошибки, и каждая ошибка становится NOP.

H@~*^)$.~+1A|Q)p~\Z!IQ~e:O.~@#|9@)Tf\eT`=(!|~!y!) Q~$x.4|m4~~&!L{%( Попробуйте онлайн! )

Тем не менее, он будет выводить беспорядок (но также и один раз: 3).

Однако я буду работать над другими проблемами.

user48538
источник
1
Программа quine будет (надеюсь) довольно простой, если вы сможете превратить некоторые операции в noops.
wizzwizz4
1
Программа Quine не проста. Вы не можете использовать его Qвообще (так как это встроенный метод quining), двойных кавычек нет, поэтому вы не можете выполнять форматирование строк. Вчера я некоторое время работал над этим, и я вполне уверен, что другие программы невозможны только с 74 символами.
Mego
И , кажется, не быть наклонным е ... :(
user48538
2

05AB1E - Общий балл: 74

1. Выполнить, 74 байта

H@~*^)$.`~+1A|Q)p~`\Z!IQ~e:O.~@``#|9@)Tf\eT`=(!``|`~!y!`) Q~$x.4|m4~~&!L{%

Все, что вызывает ошибку, пропускается 05AB1E. Вся эта строка кода является NOP.

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

Аднан
источник
2

(оскорблено) PHP, 74 + 74 = 148

H@~*^)$.`~+1A|Q)p~`\Z!IQ~e:O.~@``#|9@)Tf\eT`=(!``|`~!y!`) Q~$x.4|m4~~&!L{%

Интерпретатор PHP просто сбрасывает исходный код до тех пор, пока не найдет a, <?так как нам не хватает <каждой перестановки этих символов в текущей квине. Я думаю, это не так уж и плохо, чем использование встроенной команды quine: P

Christoph
источник
9
Это не соответствует нашим спецификациям для Quines, смотрите здесь . Он не кодирует сам себя (то есть на самом деле он не печатает сам себя, он просто выводится из-за компилятора.
Rɪᴋᴇʀ
@ Восточно переводчик обрабатывает каждый символ output this charдо тех пор, пока он не встретит <. Я не говорю, что он способен работать с полезной нагрузкой или просто я говорю, что нет разницы в языке, в котором есть символ с надписью output the source. Если это неверный ответ для части 1, то любой язык, который принимает любые вводимые данные без ошибок, также не является правильным ответом. Я не думаю, что это более оскорбительно, чем большинство ответов здесь.
Кристоф
4
@Christoph, он действителен для первой части, но он не является действительным квинем по правилам, связанным в задании. Это сообщество считает квайн действительным, если вы можете идентифицировать раздел источника, который кодирует другую часть кода. В вашей программе каждый символ кодирует только себя.
Мартин Эндер
@MartinEnder: #! / Bin / cat ранее считался квайном.
Джошуа
@ Джошуа действительно, но в наши дни это не так, и кошка не считается языком программирования.
Мартин Эндер
2

Математика, оценка 68

`A: = .1% *. 44y # +. 9 ^` H @ `$ I @` L @ (`$ O ~` Q ~ `Q ~` Q ~ `T ~ T ~ Z ~ e ~ e | е | т | р | х) !!!!! & \

Обратите внимание на завершающий символ новой строки. Я не верю, что с Mathematica можно решить любую другую проблему.

LegionMammal978
источник
2

Лабиринт, оценка 74

AH)
IL)
OQ:
`=!)~`{+4.@ !!!$$%&(*..149@@TTZ\\^```eefmpxy||||~~~~~~~~
`Q#
`Q)
``!

Я почти уверен, что любой набор этих персонажей создает действительную программу Лабиринт, но чтобы сделать ее хотя бы немного интереснее, она печатает 2016цифра за цифрой. (В итоге: нажмите 2 2в стеке, вытолкните / распечатайте один, переместите другой в вспомогательный стек, напечатайте 0, нажмите 2 1в стеке, поп / распечатайте 1, увеличивайте, поразрядно нет, отрицайте (это последнее 1является 3в этой точке), сумма с 2из стека AUX, 5 * 10 + 4 = 54, печать в качестве значения ASCII, прекращать)

Большая часть длинной строки просто игнорируется, поскольку @завершает программу.

Испытания 2, 3 и 4 невозможны, поскольку ни одна из команд ввода Лабиринта не доступна ( ,или ?), и я ничего не придумал для 5 или 6.

SnoringFrog
источник
2

SmileBASIC, 48 баллов

Задача 1:

@LOQQQTTZ A$=H$+@efmy+@9414*!exp(!!.||!!.#||I%):

объяснение:

@LOQQTTZ 'label
A$= 'set value of A$ (string)
H$ 'string
+@efmy 'adds label, interpreted as string literal
+@9414 'adds label, interpreted as string literal
*!exp( 'multiplies by logical not e^x (= 0)
!!. 'not not 0.0 (= 0)
||!!.# 'or not not 0.0 converted to a float (= 0)
||I% 'or I% (integer variable)
: 'equivalent to a line break, does nothing here

другие:

Команды ввода / вывода недоступны, поэтому остальные невозможны.

Тем не менее, неплохо для реального языка без использования комментариев.

12Me21
источник
+1 действительно красиво. Мне было интересно, как я могу сделать что-нибудь из этого и никогда не мог получить это. Что это вообще делает?
улитка
1

MATL , общий балл 74

1. Беги, набери 74

`4.e4 1.$!!!!!T+Zyf9.)AH^ILx@Q@Q@Qm||||~~~~~~~~~:=Tp*O%#$&()))\\````````e{

Все до %актуального кода. %является символом комментария, поэтому символы справа от него игнорируются.

Программа выводит 1без ошибок.

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

Луис Мендо
источник
1

Баш, оценка 74

1: запустить. Мы можем запустить все 74

#H@~*^)$.`~+1A|Q)p~`\Z!IQ~e:O.~@``|9@)Tf\eT`=(!``|`~!y!`) Q~$x.4|m4~~&!L{%

6: Эзотеризм:

Пустая программа - это quine in bash.

Без каких-либо пробельных символов ничего в списке не может быть достигнуто. Ergo, у меня есть победная запись от bash.

Джошуа
источник
Примечание к правилу: если кто-то оспаривает, что пустое не является действительным квинэ и выигрывает, у меня все равно есть победная запись (без квин). Если, с другой стороны, я не ставлю это, а кто-то другой делает, и они выигрывают вызов, они бьют меня. Так что это остается.
Иисус Навин
1

Perl 6 , общий балл 74

1. Беги, набери 74

my @TOTAL=$!||(e*4...9^e)Z+1~4||!!Q`{fp)))\#\&`~Q!```HI````!~Q:x~~~$~@~@~%

Без комментариев.
(Просто поставить #перед, чтобы сделать комментарий тоже работает, но это веселее.)

работай

Это подмножество языка Perl 6, в котором используются только разрешенные символы:

Константы: е

Введите имена: IO

Функции: опыт

Методы:
    по типу IO: .e .f .x
    (... возможно больше.)

Операторы: | инфикс: | префикс:
    ----------- + ----------------------- + ---------
    числовой: | + * + ^ + | + &% | + + ^
    строка: | ~ х ~ ^ ~ | ~ & | ~
    логическое: | || ~~ | !
    перекрестки: | | & ^ |  
    разное: | =: = Z .. ... |  

синтаксис:
    числовые литералы: 1 4 9
    строковые литералы: Q` `Q! ! и т.п.
    Команды оболочки: Q: x` `Q: x! ! и т.п.
    Безотносительно звезды: *
    переменные: мой \ $ @ &
    группировка: ()
    комментарии: # # `()
    unspace: \

Непосредственное препятствие, мешающее вызовам 2-6, заключается в том, что, похоже, нет способа выполнить ввод / вывод:

  • Если мы предполагаем, что есть файл с именем f, мы могли бы использовать его, Q`f`.IO.eчтобы проверить, существует ли он, или Q`f`.IO.xпроверить, является ли он исполняемым. Но мы не можем ни читать, ни писать.

  • Мы могли бы использовать Q:x` `для запуска команды оболочки (при условии, что мы находим символы для одного). Но мы не можем ничего интерполировать в это, так что это будет полезно только для чтения, а не для записи.

  • Поскольку закрывающей скобки нет, мы не можем сделать лямбду-блок (например {1 + $_}), которая автоматически возвращает значение своего последнего оператора.

  • Мы могли бы использовать звездочку, чтобы сделать выражение лямбда (например 1+*), но тогда мы можем взять только один аргумент, ссылаться на этот аргумент только один раз и еще более ограничены в синтаксисе / операторах, которые мы можем использовать.

SMLS
источник
Отлично сделано, правда! :)
Дада
0

Луа, оценка 31

1. Бег (31 из 74 баллов)

AHILOQQQTTZeefmpxy=1.%4+(4.*9.)
Scribblemacher
источник
3
Вы пропустили пространство. variable =stuffна 1 байт длиннее.
devRicher
0

Желе , оценка 74

1. Бег , 74

 ||||!!!!!$$~~~~~~~~^@=@~%449:`e@`e`QAHILOQQTTZ{\\f`m`p`x`y`&`*.#1+.()))).

Не уверен, как это сделать другим.

Джонатан Аллан
источник
0

/// , Оценка: 146

1. Бег, оценка: 74

!!!!!#$$%&())))*+...1449:=@@@AHILOQQQTTZ\\^`````````eefmpxy{||||~~~~~~~~~

6. Куайн, Счет: 72

!!!!!#$$%&())))*+...1449:=@@@AHILOQQQTTZ^`````````eefmpxy{||||~~~~~~~~~

Да, когда в коде нет никаких прямых или обратных косых черт, он просто печатает сам.

Товарищ Спаркл Пони
источник