Зламати в лотерею


44

Нещодавно ви зареєстрували обліковий запис на химерному азартному сайті, де за плату в 25 доларів вони повернуть вам випадкову суму від 0 до 50 доларів. Отримавши двічі 5 доларів, ви вирішили довести, що сайт - це афера. Після доступу до їх зовнішнього брандмауера з паролем за замовчуванням, ви знаходите свій шлях до їх сервера баз даних і знаходите, де містяться значення мінімальної та максимальної кількості. Ви вирішили підключити 25 '9' як максимальне значення, але отримаєте повідомлення про помилку, в якому сказано, що максимальне значення має бути типу 'uint64'. Однак зараз ви помітили, що деякі цифрові клавіші не здаються правильно введеними у віддалену консоль. Виклик постає перед вами майже так, ніби набраний на сайті Q + A.

використовуючи лише зручно встановлені програми для тестування та виконання вашої конкретної мови, виведіть максимальний розмір неподписаного 64-бітового цілого значення, проте майже все, крім інструментів програмування, зламано на цій машині, залишивши вас без використання цифр 1, 2,4,6,8 - або в вихідному коді, або в літералі, ви також помічаєте, що, здається, потрібно тривати експоненціально довший проміжок часу для виконання програми для кожного додаткового фрагмента коду, тому вам краще, щоб він був коротким, якщо ви хочете розбагатіти перед малюнком!


Змагання

  • Напишіть програму, яка виводить 18446744073709551615 максимальне значення безпідписаного 64-бітового цілого числа, як число, або один рядок.

  • Ваш вихідний код не може містити жодного символу "1", "2", "4", "6" або "8"

  • якщо у вашій мові немає непідписаного 64-розрядного цілого чи іншого еквівалента, вихід може бути у строковому форматі чи іншим способом, але повинен бути вищевказаним номером.

  • це тому найкоротший код на кожній мові виграє!


14
заздалегідь задані значення. pfft
Matthew Roh

Вихід може бути шістнадцятковим числом?
користувач902383

1
@ user902383 має бути в точному форматі, сміливо розбирайте його як шістнадцятковий номер, якщо вихідний сигнал є у звичайному десятковому позначенні.
colsw

10
Я люблю історію, хаха. Більше викликів потребує подібної історії
Cruncher

2
Тож, коли є багато рішень на вибір, чи був азартний сайт шахрайством?
Томинатор

Відповіді:


20

Бджолиний віск , 3 байти

_M{

Пояснення:

_   # Create a bee going horizontally across the line, reading the code
 M  # Decrement the bee's counter, which starts at 0.
    # This will set the counter to 2^64-1, because as bees don't have a concept of
    # negative numbers, all values that are negative are translated to 2^64-n,
    # and in this case, n = -1, as we are calculating 0 - 1.
  { # Print the value

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

Ця мова ідеально підходить для цього завдання.

Ось витяг зі сторінки Esolang на бджолиному воску :

Як всім відомо, у бджіл немає поняття від’ємних чисел, але вони виявили, що вони можуть використовувати найважливіший біт адреси для подолання цього. Таким чином, координати відносно положення бджоли реалізуються доповненнями двох координат. Таким чином, половина 64-бітного адресного простору доступна для локальної адресації без обгортання в кожному напрямку.

Максимальна додаткова 64-розрядна адреса комплементу - 9223372036854775807 або 0x7fffffffffffffffffff в 64-бітній шістнадцятковій версії. Усі значення від 0 до цього значення ідентично переводяться на те саме 64-бітове значення. Усі значення n у зворотному (негативному) напрямку переводяться на 2 ^ 64-n. Наприклад: n = -1 адресовано 18446744073709551615. n = -9223372036854775808 адресовано 9223372036854775808.

Це в основному неподписані довги.

EDIT: Я все ще очікую, що Денніс перевершить мене за допомогою 2-байтного рішення.


Не потрібно друкувати його, якщо форма поверне значення. Дивіться інші відповіді.
MatthewRock

41

C, 26 байт

main(){printf("%lu",~0l);}

Друкує unsigned longзначення.

Потрібен розмір longдо 64 біт.


Хороший. Практично те ж саме в Perl: print~0.
Дада

2
~0lповинні працювати.
Крістоф

11
@AnixPasBesoin це маленький регістр 'L' :)
Квентін

2
Ви припускаєте sizeof(long) * CHAR_BIT == 64. Обгрунтоване припущення для гольфу, але варто зазначити
Рей

1
@Chris це побитовий не оператор.
Вен


28

64-бітний SBCL Common Lisp, 18 байт

most-positive-word

Найбільш позитивне слово на 64-розрядному компіляторі - 64uint. Це щось.


7
Найкращий синтаксис :))
seshoumara

1
Робить мене дуже щасливим
Stan Strum

22

Python3 REPL, 12 байт

В REPL: ~-(~-3<<9*7)

Поза REPL: print~-(~-3<<9*7)<--> Python2!

Ось ще один в 17 байт: ~-(~-3<<ord("?")).

Пояснення

Нічого супер фантазії. Ось це розбито:

~-           | Subtract 1 from the next value.
  (          | 
   ~-3       | Subtract 1 from 3, resulting in 2
      <<     | Binary shift 2's digits to left,
        9*7  | by 9*7 (63).
           ) | The value inside the parentheses is now 2**64.

Отриманий вираз приблизно (але не зовсім) ~-(2<<63)-> (2**64)-1. Тут я двічі використовую оператора пуголовка . Порада з гольфу про це є тут .

У sys.maxintPython2 є також який можна використовувати, але я не буду на це дивитись.

repl.it <- посилання для тестування.


Чому цей код схожий на кота, який з'їв іншого кота?
OldBunny2800

@ OldBunny2800 Це ~-(~частина очей першого кота? Я не можу добре бачити другу кішку ...
Yytsi

16

до н.е., 15 13 байт

Збережено 2 байти завдяки маневреній роботі.

(a=9+7)^a-3/3

Нічого фантазійного, просто (16 ^ 16) -1.


2
Ласкаво просимо до PPCG!
ETHproductions

1
(a=9+7)^a-3/3
манатура

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

13

постійного струму , 7 байт

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

AZ5E^z-

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

Він обчислює (2 64 - 1), використовуючи кілька прийомів:

  • 2задається як число цифр ( Z), знайдене в цілому 10 ( A)
  • 64дається як 5E. За замовчуванням dc використовує 10 в якості вхідного радіусу. Незважаючи на це, він може приймати числа в шістнадцятковій нотації, але вони будуть перетворені інакше, ніж ви очікували. Приклад: (5E) за замовчуванням = (5E) (вхідний радіус = 10) = (5 * 10 1 ) + (14 (Е) * 10 0 ) = 50 + 14 = 64

  • 1задається як глибина стека ( z), оскільки тоді була присутня лише (2 64 )

Альтернативна історія:

Однак зараз ви помітили, що деякі цифрові клавіші не здаються правильно введеними у віддалену консоль. Ви робите глибокий вдих і починаєте тестувати кожну цифрову клавішу. Це гірше, ніж ти думав! Жоден з них не працює, і вам залишається завдання створити бажане ціле число, використовуючи лише букви та символи.

Рішення в постійному струмі: обчислення (16 16 - 1), ще 7 байт!

Fz+d^z-          # push 15, push 1, add, duplicate, exponentiate, push 1, subtract

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


2
Чудова альтернативна історія
каскадний стиль


10

05AB1E , 4 байти

žJn<

Пояснення:

žJ   # Push 4294967296
  n  # Squared
   < # Decreased by one

Нарешті! Шанс використати 05AB1Eвбудовані вбудовані для потужності два!

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

Ще 4 байтові відповіді:

žxo<

Пояснення:

  o  # 2 to the power of
žx   # 64
   < # Decreased by one

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

(якщо хтось цікавиться, це питання є старшим за всі інші 4-байтні відповіді)


Я відчуваю, що існує коротше рішення, 64o<але я ще не знайшов його. Щось на кшталт '@Ço<креативного 64 push ... Якщо вам вдасться натиснути 64 на 1 байт, ви можете отримати 3 - це пункт, який я намагаюся зробити.
Magic Octopus Urn

10

MATLAB / Октава, 5 байт

@Sanchises опублікував чудову відповідь MATLAB, однак цей підхід є значно іншим, тому я все-таки опублікую його:

tic/0

У MATLAB ticповертає кількість минулих мілісекунд з моменту відкриття програми. Найважливіше значення, яке воно повертає, - це uint64тип. Це відходить від необхідності uint64додавати номер до типу MATLAB за замовчуванням double.

Будь-яке число, поділене на 0 в MATLAB, розглядається як нескінченність, яке для типів без плаваючої точки MATLAB представляє це як максимальне ціле значення для цього типу.


Це також працює з Octave, хоча залежно від того, який інтерпретатор ви використовуєте, він також може виплюнути попередження "поділ на нуль". Ви можете спробувати код в Інтернеті тут, хоча, як я кажу, ви отримуєте попередження / 0, яке не відображається в MATLAB.


Дійсно розумний підхід, приємний.
colsw

Я зараз бачу цю відповідь. Дуже розумний! (звичайно, це не працює, якщо ви виконаєте це на дуже швидкому комп’ютері, таким чином, tic==0при запуску 😉)
Sanchises


7

PHP, 16 байт

Це дуже схоже на відповідь від Ven: https://codegolf.stackexchange.com/a/110751/38505

printf("%u",~0);

https://repl.it/Frcy/0

Для цього вам потрібно мати 64-бітну архітектуру. Це тому, що ~ 0 дорівнює -1, що є 1111111111111111111111111111111111111111111111111111111111‌ 1111 у двійковій формі, у 64 біти, порівняно з 1111111111111111111111111111111111 в 32 бітах, а цифри залежать від платаформи - Ісмаел Мігель


1
Лол. Це працює bashтакож: printf %u $[~0].
манатура

Ага, приємно @manatwork
1717

Це залежить від архітектури, воно не працює на i386.
пт

1
@pts Очевидно! i386 - 16/32-біт. PHP дуже прискіпливий до цього. Для цього вам потрібно мати 64-бітну архітектуру. Це тому, що ~0є -1, що є 1111111111111111111111111111111111111111111111111111111111111111в двійковій формі, у 64 бітах, порівняно з 1111111111111111111111111111111132-бітною, і числа залежать від платаформи.
Ісмаель Мігель

@ ʰᵈˑВи вітаєте Треба визнати, що я трохи розслабився. Я приклеював 32 1-х копії. Якщо хочете, ви можете трохи виправити свою граматику на своїй відповіді.
Ісмаїл Мігель

6

MATLAB / Октава, 22 байти

eye(['~rw}?='-9 ''])/0

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

eyeвикористовується для створення одиничної матриці (матриця з 1по діагоналі, нуль інакше). Без аргументів це створює 1x1одиничну матрицю, або іншими словами, просто a 1. Він займає необов'язковий аргумент, який є типом даних ('class' у термінології MATLAB) створеної матриці. Таким чином, ми запитуємо 1клас uint64та поділяємо його на нуль, що призводить Infдо отримання MATLAB, який потрапляє на intmax('uint64').

Вектор ['~rw}?='-9 '']оцінює до 'uint64'. Об'єднання порожнього знака з вектором на 1 байт коротше, ніж використання char('~rw}?='-9).

Обґрунтування цієї відповіді: вбудований intmaxсумно оцінює максимум 32-бітове ціле число, підписане. Очевидним наступним варіантом є те uint64(), що містить заборонені символи. Альтернативою є використання функції, яка приймає рядок як тип даних. Очевидними кандидатами є intmaxі cast, але альтернативи включають zeros, onesі eye.

eye(['~rw}?='-9 ''])/0    % Winning version! 22 bytes.
intmax(['~rw}?='-9 ''])   % Obvious candidate. 23 bytes.
1/zeros(['~rw}?='-9 ''])  % 24 bytes
cast(Inf,['~rw}?='-9 '']) % 25 bytes. Also an obvious candidate, but actually very long.

Примітка: MATLAB встановлюється за замовчуванням практично на всіх химерних сайтах азартних ігор.


6

JavaScript, 39 38 33 32 байт

alert(0xafebff0+'737095'+0xc99f)

Редагувати: Збережено 5 байт завдяки @Arnauld.


2
Видаліть попередження, оскільки це може працювати в консолі.
Алексіс Тайлер

6

Java 8, 30 байт

()->Long.toUnsignedString(~0L)

Тестуйте онлайн


Відсутня Java «котельня» та частина system.out.print
Віктор Меллгрен

2
@ViktorMellgren Це оголошує лямбда-вираз, що цілком чудово.
Санчіз

Для цього потрібна Java 8
mbomb007

20
Так, java 8 і вище, більше не бойлер! Побоюйтесь кодеголовців! Java - справжній супермаркет. Це час, коли ви всі так злякалися, вся ваша мова кодового гольфу ні за що! О, почекайте ще 30 байт, ... ховається
dwana

5
Безумовно, "коротше рішення" використовує незаконні символи 1846.
Ніл

5

BF, 108 байт

-[----->+<]>--.+++++++.----..++.+.---..----.+++++++.----.++++.-------.+++++++++.----..----.+++++.-----.++++.

Якщо кожна команда розглядається як 3 біти, це потенційно 41 байт.


3
Кожна команда - один байт. Не 3 біти.
mbomb007

Ну так, тому я поставив це як 108 байт ...
Timtech

Так, але ви сказали "це потенційно 41 байт", що це не так.
mbomb007

Інтерпретатора можна було б інтерпретувати 3-бітні групи як одну з восьми команд+-<>[].,
Timtech

Це вже існує. Це називається esolangs.org/wiki/Binaryfuck
mbomb007

5

Сітківка , 28 27 байт

Збережено 1 байт завдяки Kritixi Lithos


bieegheeahdhajffbgbf
T`l`d

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

Пояснення


bieegheeahdhajffbgbf

Замінює неіснуючий / порожній вхід цим рядком. Цей конкретний рядок був породжений "оберненою" цією програмою. Він кодує aчерез , jяк 0наскрізний 9, відповідно.

T`l`d

Це Tетап ранзування. lІ dнабори символів , що використовуються для транслітерації. lпредставляє алфавіт з малі літери, d- це всі цифри. Отже, вона abcdefghijповертається до карт 0123456789.


tio.run/nexus/retina#@8/l5Onq6u7h6uro4eLh6OXm5uTu5MYVkuCTkPL/… на 1 байт коротший (я використовував dзамість EO)
Kritixi Lithos,

@KritixiLithos О так. Я досі не повністю прокинувся: P
Business Cat

5

C ++, 46 байт.

int m(){std::cout<<unsigned long long(5+3-9);}

Вперше коли-небудь робив кодовий гольф, але я досить задоволений собою. З радістю прийму будь-яку критику / пропозиції :)


5

Мозг-Флак , 64, 62, 58 , 54 байти

(((((()()()()){}){}){}){}){({}<(({}()){}[()])>[()])}{}

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

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

Чотири байти збережено завдяки @Riley!

Пояснення:

#Push a 64
(((((()()()()){}){}){}){})

#While true
{

  #Pop the top of the stack. We'll store this value for later, but first
  ({}

  #Before pushing the value
  <

    #Push (N + 1) * 2 - 1
    # (where N is the number underneath, originally 0)
    (({}()){}[()])

  >

  #And push the TOS minus one back on
  [()])

#endwhile
}

#Pop the zero left over
{}

#And decrement the number underneath
({}[()])

Для запису я спробував натиснути на 32 і вчетверо, але це те саме число байтів.


Ви можете зберегти 4 байти, скориставшись одним із ()s з 64, щоб натиснути на 1:((((((())()()()){}){}){}){})
Райлі,

@ Райлі Ага, звичайно! Дякую
DJMcMayhem



Гм, ти не можеш просто зробити це N*2+1замість (N+1)*2-1?
Джо Кінг

4

C # 6, 31 байт

()=>System.Console.Write(~0UL);

Приблизно те саме, що і Java.

C # 5, 56 байт

class P{static void Main(){System.Console.Write(~0UL);}}

Відповідь C # 6 - це лише анонімні дії, які також присутні у C № 5.
TheLethalCoder

Також виклик вимагає лише вивести число, щоб ви могли скласти його Func<ulong>як:()=>~0UL;
TheLethalCoder

Він також не говорить про те, що ви не можете використовувати будь-який вхід, щоб ви могли компілювати в a, Func<int, ulong>щоб зберегти байт: _=>~0UL;і я думаю, він би все ще був дійсним.
TheLethalCoder

4

Четвертий (gforth), 11 9 7 байт

true U.

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

trueте саме, що -1. U.друкує число як непідписане ціле число.

Це працює на TIO, можливо, тому що він має 64-бітну архітектуру? Я не впевнений. Якщо я -1 U., наприклад, працюю на repl.it, отримую 2 ** 32-1. Якщо repl.it підтримує цілі числа подвійної довжини, виводить їх UD.замість цього.


Ви можете, мабуть, зменшити це до-3 3 / U.
zeppelin

Або, ще краще: true U. (що також непогано ритмує)
цепелін

О, я забуваю true, бо я так звик користуватися 0і 1. Дякую.
mbomb007

4

Python3 REPL, 11 байт

~0^~0>>~077

Як це працює

  • ~ 0 - -1 (два доповнення, нескінченна послідовність '1')
  • 077 - 63 у восьмериці, тому ~ 077 - -64
  • Зсув праворуч з від'ємним параметром - це зсув вліво
  • Збираючи всі разом, -1 xor (-1 << 64) - це число, яке ми шукаємо

4

PowerShell , 29 14 байт

0xC000PB/3-3/3

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

Дякуємо @ n0rd за те, що по суті пограв це в два рази.

Це використовує вбудований одинарний PBоператор, який в основному функціонує як "помножити попереднє число на 1125899906842624" (тобто, скільки байтів знаходиться в пебібайті). Це в поєднанні з шестигранною 0xC000, або 49152, так 49152 pebibytes. Ми ділимо це на 3, поступаючись 18446744073709551616і віднімаючи, 3/3щоб отримати остаточне значення.


"0x$(7-3)000PB-9/9"|iex
n0rd

2
0xC000PB/3-3/3
n0rd

@ n0rd О, це хитро розумно, використовуючи PBтак. Дякую!
AdmBorkBork

@ n0rd дуже вражаючий, ласкаво просимо до PPCG!
colsw


3

x64 Збірка, 7 байт

шістнадцятковий (зібраний): 4831C048FFC8C3

розібрали, прокоментували:
XOR RAX,RAX ;Zero the value of 64 bit register RAX DEC RAX ;Decrement the value of RAX RET ;Return this value

RAX - це 64-бітний регістр, і найчастіше використовується для повернення цілих аргументів (наприклад, C). Декрементуючи 1, його значення перекидається від 0 до ... 2 ^ 64-1, що саме потрібно.
Хоча зібраний двійковий файл містить одиниці і четвірки, і вісімки, збірка не робить, але зібраний файл зараховується у збірку, так чи вважається він? Ой, моя голова.
Також вихідний показник - це повернене значення в цьому випадку.


3

Мозг-Флак , 223 193 байт

Включає +1 за -A
-30 завдяки DJMcMayhem

((((((((((((((((((((((((()()()){}){}()){}){}())[()()()()])[][]())[[]()()])[]))()()()())[[]()()])[][()])[()()()()])()()()())[(()()()){}()])()()()()))()()())[()])[()()]))()()()())[(()()()){}()])

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

Це просто висунуло значення ASCII та друкує як символи.

Для довідки потрібно 338 байт для генерування фактичного числа за допомогою мета-гольфера Integer .

((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()()()){}()){}){}()){}()){({}[()])}{}()){}()){}())){}{})){}{})()){}{})){}{})){}{})()){}{})){}{})){}{}){}){}())){}{}){}())()){}{})){}{}){}){}){}())()){}{})()){}{})){}{}){}())){}{})()){}{})){}{})){}{})){}{})()){}{})()){}{})){}{}){}())){}{}){}){}())()){}{})()){}{})){}{})

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


Ви можете врятувати купу, якщо скористаєтесь верхом висоти стека []. Наприклад: ((((((((((((((((((((((((()()()){}){}()){}){}())[()()()()])[][]())[[]()()])[]))()()()())[[]()()])[][()])[()()()()])()()()())[(()()()){}()])()()()()))()()())[()])[()()]))()()()())[(()()()){}()])(Можливо, більше мені не вистачає)
DJMcMayhem

Крім того , я думаю , ви можете додати один байт для -Aтак стандартний виклик вже включає в себе -f, так що це тільки один проти зробити -fAзамість
DJMcMayhem

@DJMcMayhem Коли ми почали використовувати +1 для аргументів? Я не задумувався над тим, що []я на це подивлюсь, коли отримаю можливість. Дякую.
Райлі

3

MATL, 8 байт

l_5Z%EZD

Можливо, це можна вдосконалити, але я ще не знайомий з рядками та типами в MATL.

Спробуйте це на сайті matl.suever.net

Пояснення:

l       % push 1
_       % unary minus
5       % push 5, corresponds to type 'uint64'
Z%      % convert 1 to this type
E       % double
ZD      % display as a string

Потрібно бути YY5Z% ZD, щоб змусити тип uint64, але я не знаю, чому використання 1 5Z% замість цього просто працює ...
B. Mehta,

Ви не можете використовувати 8.
xnor

@xnor На жаль, виправлено.
Б. Мехта

Чи можете ви додати демо-посилання, використовуючи matl.suever.net або matl.tryitonline.net ?
Suever

1
@ LuuMendo Ах, звичайно - я думав, що castйого використовували, але є сенс, якщо typecastвін використовується. Дякуємо, що очистили це.
Санчіз

3

Javascript 55 байт

alert(""+(590300>>5)+(59530-3>>3)+7370955+(3*59*73>>3))

код генерує, а потім попереджає рядок 18446744073709551615, використовуючи побітові операції

590300 >> 5 18446
59530-3 >> 3 7440
7370955
3 * 59 * 73 >> 3 1615


Показує 2588673709551615для мене ...
n0rd

alert(0xafebff0+'7370955'+(3*59*73>>3))працює чудово
n0rd

Я залишаю це так, як заради збереження використовуваного методу, а не просто копіювання когось іншого.
fəˈnɛtɪk


2

TI-Basic, 10 байт

9+7
Ans^Ans-0!

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