Роздрукуйте втрачені номери


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 - це 2D мова, де вказівник починається де завгодно , рухаючись у будь-якому напрямку. Це, як правило, призводить до багаторазової перевірки того, що покажчик не вводив розділ на початку.

...>>>>>>>>>>  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) на основі індексів 154 , 21 , 74 і 171 в кодової сторінці Jelly, так що вони кодують ціле число 2503154+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 Ах, приємно! Спасибі.
Kevin Cruijssen

6

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

_=>eval(atob`NjUwNTgxMDErNDEqKjY`)

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

Це розшифровує та оцінює вираз "65058101+41**6", який не містить жодної цифри, кодированої один раз у базі-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 символи можуть бути автозапущені до цілих чисел, що містять їхнє значення unicode. На жаль, максимально підтримуваний унікод для символів є 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
Мені це подобається. Досить короткий за те, що є Java :)
Emigna

@Emigna Дякую Це занадто погано, що він вимагає віддати роль longі не підтримує дуже великих символів Unicode. Якби не два згадані обмеження, достатньо було б 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.|.

Пояснення

Ми спостерігали цю послідовність чисел раніше, в Automate Saving the World , яка стосувалася друку цифр через регулярні проміжки часу, що робило її цікавою через необхідність використання дуже старої мови. Набагато новіші мови можуть мати свої повороти, що робить цей виклик цікавим. (Так, цей абзац, і насправді причина, чому я почав писати цю відповідь, - це фактично лише спосіб зв'язати всі пов'язані з цим проблеми на бічній панелі; зазвичай це роблять люди, використовуючи коментарі, але мені не вистачає реп. .)

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

Відповідь "не зовсім". Найпроблемніша частина - це друге число 8,. 7 програм написано в восьмериці; немає такої кількості, як 8. Отже, для початку запуску рядка доведеться друкувати інакше.

Таким чином, база програми базується на 7 програмі "Привіт, світ":

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

Ахей (езотоп) , 45 байт (15 символів) * 0,5 = 22,5 балів

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

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


Пояснення:

Дивіться також це; Довідник Aheui ( англійська )

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в рядку (або масиві) можна використовувати для отримання необхідних чисел.
гість271314

Ваш рахунок143*0.7=100.1
Jo King

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;
Jo King

1
ОП не відповів, чим ми можемо опустити роздільники чи ні; але так. Чому не тільки 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 і Sдорівнює 0

Після цього він просто надрукується за допомогою TNST:

  • TN: Увімкнути введення / виведення
  • S: Виведіть верхню частину стека
  • T: Як кількість

Чи просто натискання самого числа довше, ніж отримання додаткових інструкцій множення та натискання цілих чисел?
Джо Кінг

@JoKing Я зазвичай використовую онлайн-компілятор Whitespace онлайн 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. Якби я хотів перетворити все число з рядка базового 256, мені потрібно було б використовувати два ", а рядок був би 5 символів. Таким чином я зберігаю 2 байти, але втрачаю один байт, маючи в кінці кінця оператора подвоєння.





1

Befunge-98 (FBBI) , 15 байт / 2 = 7,5 балів

"*H/!k-"*.*+..@

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

Пояснення:

Спочатку натисніть значення ASCII символів '* + H /! K- (42, 72, 47, 33, 107, 45) у цьому порядку до стеку. Потім обчислити4815=45107 і 1623 рік=3347+72, та вихід.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.