Строка капсулы времени 2016: Поднимитесь по целочисленной лестнице


28

Использование 74 символов из строки времени 2016 года

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

написать N фрагментов кода на одном языке, где:

  • 1-й фрагмент кода 1.
  • 2-й фрагмент кода 2.
  • 3-й фрагмент кода 3.
  • ... так далее. ...
  • Вывод N-го фрагмента N(число, а не буквенная буква).

«Фрагмент кода» определяется как любой из них:

  • Полная программа без обязательного ввода, которая обычно выводит число .
  • Функция без обязательных аргументов, которая обычно выводит / возвращает число .
  • РЕПЛ выражение, значение которого числа.

(Вы можете смешивать и сочетать эти три варианта в своих N фрагментах.)

Символы, которые вам разрешено использовать в объединенном наборе из N фрагментов, - это точно 74 символа временной капсулы плюс floor(N/2) дополнительные байты «подстановочных знаков», которые вы можете использовать где угодно.

Например, временная капсула содержит три @единицы, поэтому во всех ваших N фрагментах может присутствовать только три @, если вы не решите использовать некоторые из своих floor(N/2)подстановочных байтов для дополнительных @.

Таким образом, не считая подстановочных знаков, объединенный набор символов в ваших N фрагментах должен быть подмножеством 74 символов временной капсулы. Их общая длина не может превышать 74. Вы не можете повторно использовать символы временной капсулы или подстановочные байты между фрагментами.

Заметки

  • Других ограничений на длину фрагмента или на количество подстановочных знаков, которые можно использовать на фрагмент, нет.

  • Вы должны записать все фрагменты от 1 до N. Это не от 0 до N-1, не от k до N + k-1.

  • Фрагменты должны быть индивидуальными, а не один фрагмент, который выводит список 1, 2, 3, ..., N.

  • Выходные данные могут быть плавающими, как 3.0вместо, 3и вы можете использовать основание, отличное от десятичного, если это естественная база вашего языка . Вы должны использовать одну и ту же базу для всех фрагментов.

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

  • Вы можете использовать подстановочные байты для многобайтовых символов. Например , обычно это три байта, так что вы можете использовать его во фрагменте, но это будет стоить три floor(N/2)байта с подстановочными знаками.

  • Новые строки, такие как, \r\nможно считать одним байтом.

пример

В Python N = 4 возможно только при использовании REPL. Есть floor(4/2) = 2подстановочные знаки.

  1. 1из капсулы времени это выражение, которое уклоняется от 1.

  2. 2состоит из одного шаблона, а именно 2. Пороки к 2.

  3. 3также состоит из одного подстановочного знака. Пороки к 3. Нет больше подстановочных знаков.

  4. 4к счастью в капсуле времени, и это уклоняется от 4.

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

(Пять и более в Python, безусловно, возможны, но я оставлю это профессионалам.)

счет

Ответ с наибольшим N выигрывает; то есть тот, который поднимается вверх по целочисленной лестнице.

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


1
Если язык программирования не имеет REPL, можем ли мы по-прежнему передавать выражение на этом языке, если оно соответствует соответствующему значению? (Например, 4допустимый фрагмент, который возвращает 4, в более старых версиях Perl, у которых нет REPL?)

1
Да, и еще один вопрос: в языке с не-ASCII-совместимой кодировкой мы рассматриваем символы капсулы времени как символы (переводя их в кодировку языка) или как байты (при написании программы, которая рассматривает программу как ASCII казалось бы, содержаться целиком из символов капсулы времени)? В некоторых языках со странными наборами символов большинство символов капсулы времени даже не входит в набор символов, что затрудняет их использование как есть.

1
Как насчет ведущих нулей? Это так 07 же, как 7?
Emigna

1
Меня действительно беспокоит, что строка не содержит ни, -ни n...
devRicher

1
Могут ли "фрагменты" в языках на основе стека оставить свои значения в стеке?
FlipTack

Ответы:


10

CJam , 25 фрагментов, 12 подстановочных знаков, 64 байта

1
Q!)
Z
4
5
6
L``(*$)#
8
9
T!T
B
C
D
E
F
G
H
I
J
K
O`e`~~!!
B`:)
Q``$e`~~@~@=~+
Q!)4
Amf

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

Wildcards:

568BBCDEFGJK

Я чувствую, что я должен опубликовать быстро, прежде чем Деннис перехитрил меня.


Какие подстановочные знаки вы использовали?
Rɪᴋᴇʀ

@EasterlyIrk Редактировать. Вы также можете использовать счетчик подстановочных знаков в ответе Денниса .
jimmy23013

Работа в процессе: tio.run/nexus/jelly#FczNCoJAFIbh/…
jimmy23013


5

JavaScript, 10 цифр, 5 символов подстановки

Остальные персонажи: !!#$$%&())))*...:=@@@HILOQQQTTZ\^```eefmpy{|||~~~~~~~~~

Используется 5/5 бонусных символов: 37680

Программы:

  1. 1
  2. ! `` +! ``
  3. 3
  4. 4
  5. 4|!``
  6. 6
  7. 7
  8. 8
  9. 9
  10. 0xA

Я надеялся, что одна из строк, которую я смог бы использовать, \xABбудет числом, но, к сожалению, ни одна из комбинаций, которые я пробовал, не дала бы никакой. Символ ^(XOR) также было бы интересно использовать, но в настоящее время я не вижу возможности использовать его для получения достаточно большого числа.

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

Редактировать: Добавлено # 10 благодаря Арно


1
Я думаю, что вы можете добавить 10. 0xA( 0будучи новым подстановочным знаком для достижения 10)
Арно

Вы можете сделать (Q=!``)|Qза 1, чтобы получить дополнительный 1где-нибудь. Не уверен, что это поможет, хотя
ETHproductions

4

Pyth, 12 фрагментов, 20 байтов (6 символов подстановки)

f@

Найдите первое число, где root (n, n) истинно, начиная с 1. Выходные данные: 1

y!H

Двойной нет {}. Выход: 2

3

Подстановочный знак № 1. Выход: 3

4

Выход: 4.

5

Подстановочный знак № 2. Выход: 5

6

Подстановочный знак № 3. Выход: 6

7

Подстановочный знак № 4. Выход: 7

8

Подстановочный знак № 5. Выход: 8

9

Выход: 9

T

Преинициализированная переменная. Выход: 10

+T!Z

Десять плюс не ноль. Выход: 11

12

Подстановочный знак № 6 ( 2). Выход: 12


4

Октава, 6 цифр, 3 символа подстановки

1: ~~I          % not(not(sqrt(-1))) evaluates to true (or 1)
2: 2            % Wildcard
3: 3            % Wildcard
4: 4
5: (T=4)+~~T    % Create a variable T=4, then add not(not(T)) which evaluates to 1.
6: 6            % Wildcard

Я до сих пор 1, 9и *ушел, но я не знаю , если это поможет мне много. Я посмотрю, что я могу сделать с ними :)

Нелегко набрать много номеров, если не использовать Esolang. Я надеюсь, что смогу получить еще один или два, но я думаю, что это будет трудно.


2

Напористый , 10 номеров (4 подстановочных знака)

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

A(      \ 1:  Get alphabet and check that 'Z' >= 'Y'. Results in 1 (True)
x&+     \ 2:  Check stack equality (True - both are empty) then duplicate and sum.
3       \ 3:  Push 3 (1 wildcard)
4       \ 4:  Push 4
1 4+    \ 5:  1 + 4 in postfix, leaves 5 on the stack (1 wildcard)
`L`T%   \ 6:  Get character code of 'L' and modulo by T (ten) - leaves 6 on the stack
7       \ 7:  Push 7 (1 wildcard)
8       \ 8:  Push 8 (1 wildcard)
9       \ 9:  Push 9
T       \ 10: Push 10

Этот ответ еще не закончен - хотя вряд ли я добьюсь большего.


1

05AB1E, 12 цифр, 6 символов подстановки

 1:    1                                   -> 1
 2:    )O!x                                -> sum([])!*2
 3:    4L`\                                -> 2nd_last(range(1...4))
 4:    4                                   -> 4
 5:    5        # wildcard 1 = 5           -> 5
 6:    6        # wildcard 2 = 6           -> 6
 7:    Tf`~                                -> or(last2(prime_factors(10)))
 8:    8        # wildcard 3 = 8           -> 8
 9:    9                                   -> 9
10:    T                                   -> 10
11:    A`Q!T+   # wildcard 4 = T           -> (y==z)!+10
12:    TÌ       # wildcard 5,6 = T,Ì       -> 10+2

1

Гексагония , 6 цифр, 3 символа подстановки, 23 байта

1!@
))!@
)|\@$!
4!%
4)!:
6!@

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

Вся шестая программа состоит из подстановочных знаков.

Единственный действительно интересный 3. Хотя я мог бы сделать это как 4(!@, это оставило бы меня без, 4чтобы генерировать 5легко, поэтому я пошел вместо этого:

 ) |
\ @ $
 ! .

Ввиду того |, что )первая строка запускается дважды, до того, как IP переходит в правый угол. $пропускает @, а затем \перенаправляет IP через )третий раз. IP переносится в левый нижний угол, !печатает 3и@ завершает программу.

Я не думаю, что возможно более 6 фрагментов, потому что есть только 5 команд печати ( !!!!!) и 5 ​​команд, которые можно использовать для завершения программы ( @@@%:). Итак, после пятого фрагмента нам понадобится как минимум два символа подстановки на каждый фрагмент. Следовательно, даже если бы мне удалось получить 6без использования подстановочного знака для него, не было бы достаточно подстановочных знаков, чтобы перейти к фрагменту семь.


1

JavaScript, 8 цифр, 4 символа подстановки

 1: 1
 2: -~!``
 3: 4+~!$
 4: ~!``*~!``
 5: 4|!$
 6: 0xf^9
 7: 7
 8: 8

Я мог бы повторить попытку позже - я как бы трачу персонажей на 2 и 6, когда вы приступаете к этому.


0

Befunge-98, 4 фрагмента, 18 байтов, 2 символа подстановки

!.@
!:+.@
41-.@    wildcard 1 = -
4.#A9H   wildcard 2 = .

Осталось символов: !!!$$%&())))*=ILOQQQTTZ\^`````````eefmpxy{||||~~~~~~~~~

Я сомневаюсь, что больше возможно, так как каждая дополнительная программа потребует формы вывода, и все ., уже израсходованы. Если я смогу найти способ сделать 3 и 5 без подстановочного знака, то это возможно.

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


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

Вы можете просто прекратить с помощью %хотя.
Мартин Эндер

@MartinEnder 00%действителен в Befunge-98 и приводит к 0 (или запрашивает у пользователя результат в Befunge-93.
PurkkaKoodari

@MartinEnder Кроме того , последняя программа будет в конечном итоге прекратить предполагая конечную память. Спецификация Funge-98 упоминает, что {может измениться, если ей не хватает памяти; ничего не сказано о нормальном проталкивании, и все интерпретаторы, по-видимому, терпят неудачу в OOM, но ясно, что в спецификации языка рассматриваются ограничения памяти
PurkkaKoodari

Я думаю, что это может быть улучшено (возможно ???) из-за присутствия pперсонажа, но это потребует некоторой работы. Вы могли бы сделать, e%9чтобы получить 5, но вам нужно было бы как распечатать его, так и завершить программу, так что я сомневаюсь в этом
MildlyMilquetoast

0

SmileBASIC, 12 фрагментов, 5 символов подстановки, 31 байт

!.     '. is parsed as the number 0.0; taking the logical not gives 1
!.+!.  'Previous value added to itself
@Q||Q  '@Q is a label string and Q is a variable. For some reason, certain comparison/logical operations between strings and numbers return 3 rather than 1 or 0. 
4      '4
#TLIme 'Constant for the text color lime green, value is 5.
6      '6 (wildcard)
7      '7 (wildcard)
8      '8 (wildcard)
9      '9
&HA    'Hexadecimal A
11     '11 (one of them is a wildcard)
4*3    '4 multiplied by 3 (3 is wildcard)

Я мог бы также использовать переменную вместо .(переменные начинаются с 0) и строковую переменную (например,Q$ ) вместо@Q

Используемые символы: !!!#&*+...1449@AHILQQTem||

Подстановочные знаки используются: 67813

неиспользуемые символы: !!$$%()))):=@@OQTZ\\^`````````efpxy{||~~~~~~~~~

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.