Распечатать потерянные номера


16

Как большой поклонник сериала « Потерянные» , я всегда был заинтригован последовательностью чисел, которая повторяется в эпизодах. Эти цифры:

4,8,15,16,23,42 ( A104101 )

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

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

  • Кратчайший ответ выигрывает

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

  • Вы не можете разделять цифры одного номера. - правильный ответ, а - нет.48_15162342481_5162342

  • Вы должны уважать порядок.

  • Если в вашем коде нет ни одного числа из последовательности, уменьшите ваш счет на 30%. Это правило позволяет вводить цифры отдельно. Например:

    abcde1fg5h
    

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

  • Если код вообще не содержит цифр, уменьшите ваш счет на 50%. Другие символы, такие как ¹ , ² или ³ , по-прежнему действительны для этого бонуса.


2
Связанный, закрытый вопрос: codegolf.stackexchange.com/q/23808/67312
Джузеппе

2
Смутно связаны: вы уже потерялись?
Деннис

1
Должны ли мы печатать их в таком порядке?
Тит

6
Для дальнейшего использования у нас есть restricted-sourceтег, который можно было бы использовать здесь: хотя большинство ответов избегают очевидных решений, я думаю, что вызов был бы немного более интересным, если бы использование цифр было запрещено вообще.
Арно

Ответы:


31

Потерянный , 29 27/2 = 13,5 байт

%?\>>>>>>>>>>
>>\"*"@"

Попробуйте онлайн! или убедитесь, что это детерминированный

Похоже, правильный язык для использования.

Объяснение:

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

...>>>>>>>>>>  These arrows filter all pointers that appear on the top line
.............  Or going vertically


%............  This flips the flag so that the program can end
.............  This stops premature termination

.?\..........  Clear the stack by skipping if a value popped from the stack is positive
.............  When the stack is empty, the \ directs the pointer down

.............  The \ directs the pointer right
..\"*"..  The string literal pushes all the Lost values to the stack

..\..........  The @ terminates the program if the % flag is switched
>>\........@.  Otherwise it clears the stack and repeats

.............  The quote here is to prevent the pointer getting stuck
............"  This happens when the pointer starts between the other quotes

11

Желе , 7/2 = 3,5 байта

“ƲÞIȥ’Ḥ

Печатает числа без разделителя, т. Целое число .4815162342

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

Как это устроено

“ƲÞIȥ’является биективным основанием-целочисленным литералом 250.
Ʋ, Þ, I, И ȥимеют ( на основе 1) индексы , , и в кодовой странице Jelly, так что они кодируют целое число .15421741712503154+250221+25074+171знак равно2407581171

Наконец, (unhalve) удваивает целое число, получая .22407581171знак равно4815162342

Удвоение необходимо, потому что кодирование вывода непосредственно приводит к тому “¡9)Ƙ[’, что содержит цифру.



6

05AB1E , оценка: 10 9 7 байт / 2 = 3,5

•‘o]Ê•·

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

Или 7 байтов альтернативы :

•’µ[%•R

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

Оба выводят целое число 4815162342.

Объяснение:

•‘o]Ê•     # Compressed integer 2407581171
      ·    # Doubled

•’µ[%•     # Compressed integer 2432615184
      R    # Reversed

Посмотрите эту подсказку 05AB1E (раздел Как сжимать большие целые числа? ), Чтобы понять, почему •‘o]Ê•есть 2407581171и •’µ[%•есть 2432615184.


Старый 9-байтовый ответ выводит список [4,8,15,16,23,42]:

•ΓƒÇ²•т;в

-1 байт (и, следовательно, -0,5 балла) благодаря @Emigna .

Дольше, чем другой ответ 05AB1E , но выводит список [4,8,15,16,23,42]вместо целого числа 4815162342.

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

Объяснение:

•ΓƒÇ²•       # Compressed integer 1301916192
      т;     # Integer 50 (100 halved)
        в    # Convert the first integer to Base-50 (arbitrary): [4,8,15,16,23,42]

Посмотрите этот мой совет 05AB1E (разделы Как сжимать большие целые числа? И Как сжимать целочисленные списки? ), Чтобы понять, почему •ΓƒÇ²•есть 1301916192и •ΓƒÇ²•50весть [4,8,15,16,23,42].


1
Вы можете получить •ΓƒÇ²•т;вза 4,5, так как номера после сценария в порядке для бонуса.
Emigna

@ Emigna Ах, хорошо! Благодарю.
Кевин Круйссен

6

JavaScript (ES7), 34/2 = 17 байт

_=>eval(atob`NjUwNTgxMDErNDEqKjY`)

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

Это декодирует и оценивает выражение "65058101+41**6", которое не содержит ни одной цифры, однажды закодированной в base-64.

65058101+416знак равно65058101+4750104241знак равно4815162342


JavaScript (ES6), 13 байт

Скучное очевидное решение.

_=>4815162342

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


6

Python 3 , 25 байт, 12,5 балла

print(*map(ord,'ዏٗ*'))

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

𩦦 (髒, ⿰ 馬 葬), 𧨦 (謚, ⿰ 言 ⿱⿵ 八一 皿) стоят 4 байта, но U + 0657 стоит всего 2 байта ...


Python 3 , 29 байт, 14,5 балла

print(ord('𩦦')*ord('湡'))

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

𩦦 (⿰ 馬 葬) - вариант символа 髒, что означает «грязный». 湡 это название реки. И они никак не связаны с этим вопросом, как мне известно.


Я спросил о правилах разделителя, и мы можем использовать любой отдельный разделитель, который делает 4815 162342действительным. Таким образом, print(*map(ord,'ዏ𧨦'))экономит 1,5 балла :) ( print(*map(ord,'밗'))сэкономит 2 балла, но был указан как недействительный).
Джонатан Аллан


4

Java 8, оценка: 12 11,9 (70% из 17 байт)

v->767*6277917L+3

-0,1 балла благодаря @RickHitchcock .

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

Объяснение:

v->               // Method with empty unused parameter and long return-type
  767             //  767
     *6277917L    //  multiplied by 6277917 (as long)
              +3  //  And then 3 is added

Старый ответ со счетом: 12 (50% из 24 байтов):

v->(long)''*'Ⓥ'*'䧶'

Содержит непечатный символ 0x1B.

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

Объяснение:

v->                   // Method with empty unused parameter and long return-type
  (long)              //  Cast the character (and therefore the result) to a long
        ''            //  27
           *'Ⓥ'       //  Multiplied by 9419
                *'䧶'  //  Multiplied by 18934

В Java символы могут автоматически помещаться в целые числа, содержащие их значение в Юникоде. К сожалению, максимальный поддерживаемый юникод для символов равен 65,535, поэтому я не могу использовать только два символа для умножения (поскольку самые большие два числа, которые делят ожидаемое 4,815,162,342, 56,802и 84,771где, к 84,771сожалению, превышает максимальный 65,535.
Кроме того, поскольку максимальный размер intравно 32 2 -1 ( 2,147,483,647) и результат 4,815,162,342больше этого, требуется явное приведение к long, которое может содержать до 64 2 -1 ( 9,223,372,036,854,775,807).


Скучный ответ был бы 14 байтов без каких-либо бонусов:

v->4815162341L

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


1
Мне нравится этот. Довольно коротко для того, чтобы быть Явой :)
Emigna

@ Emigna Спасибо. Жаль, что требуется приведение к типу longи не поддерживаются очень большие символы Юникода. Если бы не эти два упомянутых ограничения, было бы достаточно v->'𩦦'*'湡'(15 байт, оценка 7,5). Но это все еще очень коротко. :) Хотя у Java в основном есть много-много недостатков в плане кодгольфинга (дух ...), вычисление с использованием символов, потому что нам не разрешено использовать цифры, является одной из его сильных сторон. Был также довольно полезен в этом довольно похожем моем ответе .
Кевин Круйссен

1
11,9 байта: v->767*6277917L+3
Рик Хичкок

3
@RickHitchcock Не каждый день мы видим экономию 0,1 байта. ;)
Арно

@RickHitchcock Спасибо! И я согласен с комментарием Арно выше. : D
Кевин Круйссен

4

R 18x0,7 = 12,6 балла

cat(9*2*267509019)

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


4

7 , 10 байтов, 27 символов

115160723426754314105574033

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

Упакованное представление этой программы на диске ( xxdформат):

00000000: 269c 3a71 6f63 308b 7c0d                 &.:qoc0.|.

объяснение

Мы видели эту последовательность чисел ранее, в статье «Автоматизация спасения мира» , где речь шла о печати чисел через равные промежутки времени, что делает ее интересной, поскольку требует использования очень старого языка. Тем не менее, гораздо более новые языки могут иметь свои собственные особенности, которые делают этот вызов интересным. (Да, этот абзац, и фактически причина, по которой я начал писать этот ответ, по сути, является просто способом отображения всех связанных проблем вместе на боковой панели; обычно люди делают это с помощью комментариев, но у меня недостаточно представителя .)

Первое, на что следует обратить внимание, это то, что 7 состоит из цифр, поэтому получение бонусов здесь вряд ли сработает (хотя если рассматривать программу как последовательность октетов, ни один из них не соответствует представлениям ASCII любого из исходных чисел , так что вы можете претендовать на бонус в этом смысле). Следующее, что следует отметить, это то, что 7 имеет команды для воссоздания последовательности команд, которая, вероятно, создала определенный фрагмент данных; можно ли интерпретировать потерянные числа 4815162342как часть самой 7-й программы?

Ответ "не совсем". Самая проблемная часть - это второй номер 8. 7 программ написаны в восьмеричном виде; такого числа, как 8., нет, поэтому само начало строки должно быть напечатано иначе.

Таким образом, база программы основана на программе "Hello world", которая представлена ​​в следующем разделе:

5431410557403
543141055          string literal
         7         separate data from code
          4        rearrange stack: {program's source}, empty element, {literal}
           0       escape {the literal}, appending it to {the empty element}
            3      output {the escaped literal}, pop {the program's source}

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

5                  output format: US-TTY using pairs of digits in the string
 43                select character set: digits and common symbols
   14              "4"
     10            "8"
       55          forget the set output format

После этого прибывает дополнительный 3, который выводит оставшийся элемент стека (и выходит из-за недостаточного оставшегося стека). Этот элемент указывается в начале программы, и чтобы избежать несоответствия 6(которое работает немного как закрывающая скобка), мы генерируем его, используя код, а не записываем его непосредственно как данные. (Обратите внимание, что 7в начале программы есть два подразумеваемых символа, которые здесь важны):

{77}115160723426
 7                 empty stack element
  7 11516          append "1151"
         0         append "6"
          723246   append "2324"

Это производит следующий литерал:

115162324
1                  set output format: literally as octal
 15162324          "15162324"

который распечатывается.


Кажется странным, что у вас нет репутации, несмотря на то, что выкладываете довольно хорошие ответы. Я прочитал ваши аргументы в пользу публикации только ответов сообщества, и я полностью поддерживаю вас в этом, но иногда это должно раздражать, чтобы вы не могли комментировать:(
Джо Кинг,

@JoKing: Ну, это вдохновило меня опубликовать ответ на этот вопрос, и он оказался гораздо интереснее, чем я ожидал. Поэтому я думаю, что это еще одно доказательство моей гипотезы о том, что если вы не ищете репутацию, ваш вклад в конечном итоге окажется более полезным для сайта, чем в противном случае. (На самом деле, я очень разочарован тем, что навсегда застрял на 11 репутации, что я не могу предлагать правки в Meta, то есть, если я вижу там дезинформацию, у меня нет возможности ее исправить.)
ais523


3

MASM 8088 Источник сборки (93 байта - 50%) = 46,5 байта

Не используя номера или последовательность в источнике:

MOV AH,'P'-'G'
LEA DX,L
INT '!'
RET
T EQU '-'-'+'
L DW 'ph'/T,'jb'/T,'lb'/T,'fd'/T,'dh'/T,'$'

Выход:

A>LOST.COM
4815162342


2

Aheui (эзотоп) , 45 байтов (15 символов) * 0,5 = 22,5 балла

반밤밪박밭빠따받발따밣뱣히망어

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


Объяснение:

Смотрите также это; Aheui Reference ( английский )

Aheui program starts with default stack '아'(or none)

반: push 2, move cursor right by 1(→).
밤: push 4, →
밪: push 3, →
박: push 2, →
밭: push 4, →
빠: dup, →
따: pop 2, push mul result(16).
받: push 3, →
발: push 5, →
따: pop 2, push mul result(15).
밣: push 8, →
뱣: push 4, move cursor right by 2(→→).
히: end.
망: pop 1, print, → (if stack is empty, move cursor left by 1.)
어: move cursor left by 1(←).

Обратите внимание, что ㅁ (инструкция печати) перемещает курсор в обратном направлении, если стек (или очередь) пуст.




2

naz , 46 байт, оценка 32.2

2a2a1o2m1o7s1o5m1o2s2s1o6m1o2s2s1o1a1o1a1o2s1o

Просто выводит каждую цифру по 4815162342одной за раз.


1

JavaScript, 143 байта (не знаю, как оценить)

(g=`${2*2}`)=>g.repeat(6).replace(/(.)/g,(m,p,i,k='')=>
  (k=m*[g-3,g-2,g,g,+g+2,g*3-1][i]
  ,RegExp(`${g-2}|${g}`).test(i)?k-1:i==+g+1?k-(g/2):k))

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

Начните с шести 4, умножьте, сложите, вычтите на, 4чтобы получить вывод.


2
Хорошо, вы пытались получить бонус, но с кодом такого размера это не компенсировало. Почему не просто «4815162342»?
Эдуардо Хофел

@EduardoHoefel Не набирали систему «счет» или «бонус», не пытались получить бонус, просто пытались не использовать ни одно из чисел, требуемых при выводе. Код выводит числа без жесткого кодирования любого из чисел. Число 4, с добавлением, вычитанием, умножением и индексом числа 4в строке (или массиве) может использоваться для получения требуемых чисел.
guest271314

Ваш счет143*0.7=100.1
Джо Кинг

1

PHP, 35/2 = 17,5

<?=zzzzzzzzzzzzzzz^NVBVKOVKLVHIVNH;

цифровой подход: 40 * .7 = 28

<?=2+2,_,5+3,_,17-2,_,17-1,_,17+6,_,7*6;

без цифр, без строк: 68/2 = 34

<?=$p++,!$p++,$p+=$p,_,$p+=$p,_,~-$q=$p+$p,_,$q,_,--$p+$q,_,$p*~-$p;

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


1
Или только 14 байтов для<?=4815162342;
Джо Кинг

1
OP не ответил, можем ли мы опустить разделители или нет; но да Почему не только 10 байт: 4815162342. Или <?=~+ 10 непечатаемых -> 15/2 = 7,5
Тит

1

JavaScript (SpiderMonkey), 67 байт / 2 = 33,5 60 байт / 2 = 30 58 байт / 2 = 29 48 байт / 2 = 24

-7 байтов / 3,5 , -2 байта / 1 предоставлено @JoKing, -10 байтов / 5 предоставлено @tsh

print(a=-~-~-~-~[],a+=a,b=a+~-a,a+a,a+b,--b+b+b)

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


1
print(a=-~-~-~-~[],a+=a,b=a+~-a,a+a,a+b,--b+b+b)
TSH

2
Или только print(4815162342)для 17 байтов
Джо Кинг



1

Пробел , оценка: 49 41 байт / 2 = 20,5

[S S S T    S S S T T   T   T   T   S S S S S S S T T   S S S T S T T   T   T   T   S S T   T   S N
_Push_4815162342][T N
S T _Print_number]

Буквы S(пробел), T(табуляция) и N(новая строка) добавляются только как подсветка.
[..._some_action]добавлено только в качестве объяснения.

Попробуйте онлайн (только с пробелами, вкладками и новыми строками).

Псевдо-код:

Integer i = 4815162342
Print i as number to STDOUT

Объяснение:

В пустом месте число выдвигается следующим образом:

  • S: Включить управление стека
  • S: Нажмите номер
  • S/ T: Положительный / отрицательный соответственно
  • Некоторые T/ Sсопровождаемые одним N: десятичное число в двоичном виде, где T1 и S0

После этого он просто печатается с TNST:

  • TN: Включить ввод / вывод
  • S: Выводить верх стека
  • T: Как число

Является ли просто нажатие самого числа длиннее, чем использование дополнительных команд умножения и целочисленного ввода?
Джо Кинг

@JoKing Я обычно использую онлайн-компилятор пробелов vii5ard , так как он имеет подсветку и показывает команды слева. Но, очевидно, он работает аналогично целым числам Java в том, что максимум составляет 32 бита, и он оборачивается до отрицательного значения выше этого. Таким образом, число было слишком большим, чтобы его можно было нажать за один раз. Когда я нажимаю число в TIO, оно работает нормально, теперь я понимаю.
Кевин Круйссен

1

F #, 45 байт = 22,5 балла

Просто обычный forцикл, который печатает цифры:

for c in"DHOPWj"do printf"%d"(int c-int '@')

Выше приведена полная программа, которую можно скомпилировать в исполняемый файл.

В REPL (цикл чтения-оценки-печати), например, FSI (F # Interactive), будет работать следующая более короткая версия, поскольку REPL выведет представление оцениваемого выражения; имеет 35 байтов = 17,5 балла:

[for c in"DHOPWj"->int c-int '@'];;

1

Пайк , 3 очка

77 91 f8 86 98 06

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

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

Наконец, 32 вычитается из результата (по историческим причинам).

Это позволяет генерировать большие числа в очень небольших количествах пространства


1

MathGolf , 7 байтов * 0,5 = 3,5

ÿ≤┼ÇÅ$∞

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

объяснение

Обратите внимание, что этот код еще не работает на TIO. Недавно я внес некоторые изменения в MathGolf, включая добавление $оператора. Как только он будет загружен в TIO, вы можете запустить его там, я обновлю этот ответ. Отлично работает в терминале

ÿ≤┼ÇÅ     Push "≤┼ÇÅ"
     $    pop(a), push ord(a) (pushes 2407581171)
      ∞   pop a, push 2*a

Я использую тот факт, что MathGolf имеет 1-байтовые литералы для создания строк длиной до 4. Если бы я хотел преобразовать все число из строки base-256, мне нужно было бы использовать два ", и строка была бы 5 персонажи. Таким образом, я экономлю 2 байта, но теряю один байт, имея в конце оператор удвоения.





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