Строка капсули в часі 2016: Підніміться цілою драбиною


28

Використання 74 символів з рядка капсули часу 2016 року

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

записати фрагменти N коду всією тією ж мовою, де:

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

"Фрагмент коду" визначається як будь-який із них:

  • Повна програма без необхідного введення, яка нормально виводить число .
  • Функція без необхідних аргументів, яка нормально виводить / повертає число .
  • Реплєї вираз, значення якого числа.

(Ви можете змішувати ці три варіанти у своїх N фрагментах.)

Символи, які ви можете використовувати в комбінованому наборі N фрагментів, - це точно 74 символи часової капсули, а також floor(N/2) додаткові байди "wildcard", які ви можете використовувати будь-де.

Наприклад, часова капсула містить три символи, @тому у ваших 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?
Емінья

1
Мені насправді -n
непомітно,

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

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

Замінні картки:

568BBCDEFGJK

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


Які символи використовували?
Rɪᴋᴇʀ

@EasterlyIrk Edit. У відповіді Денніса ви також можете використовувати лічильник підстановок .
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. 0xA0новим символом для дозволу на досягнення 10)
Арнольд

Ви можете зробити (Q=!``)|Qза 1, щоб отримати 1десь додатковий . Не впевнений, чи допоможе це
ETHproductions

4

Pyth, 12 фрагментів, 20 байт (6 макіяжів)

f@

Знайдіть перше число, де root (n, n) є truthy, починаючи з 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

Pushy , 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.