Роздрукуйте Золоте співвідношення


26

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

Змагання

Надрукуйте якомога більше цифр Золотого Коефіцієнта φ. Золоте співвідношення визначається як число, яке задовольняє φ = (φ + 1) / φ, і перші 100 цифр задаються:

1.6180339887498948482045868343656381177203091798057628621354486227052604628189024497072072041893911375 ...

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

Обмеження

Сама по собі надрукувати цифри φ було б занадто просто, тому ось такі правила:

  1. Ви повинні побудувати число в порядку зліва направо , друкуючи його по частинах або будуючи рядок зліва направо і друкуючи його в кінці - ви навіть можете генерувати масив знакових знаків, а потім приєднуватися до нього та друкуйте його, доки ви робите це в порядку. У наступних правилах "print" та "output" можуть посилатися на будь-який із цих процесів (наприклад, якщо ви будуєте рядок, а рядок містить такі, 1.6які вважаються 1.6вже надрукованими).
  2. За свій код ви отримуєте бюджет 15 символів на цифру . Період не враховується до цього бюджету, але його також слід надрукувати. Зауважте, що обмеження діє лише на загальний розмір коду: ви можете використовувати більше 15 символів для будь-якої цифри, доки в середньому ви не використовуєте більше. Насправді ви можете створити "борг" в символах і "погасити його" пізніше. Наприклад, для друку у 1.618вас є 60 символів.
  3. Стандартна бібліотека включає / імпорт не враховується до розміру коду. Але ви не можете безкоштовно надавати ці включає стенографічні псевдоніми!
  4. Ви не повинні використовувати цифру, яку ви зараз генеруєте, а також будь-яку, яку ви вже надрукували. Наприклад, 1ніде у вихідному коді немає, оскільки це найперша цифра. Код, який виводить 8в, 1.618може використовувати будь-яку чи всі цифри [0234579], але жодна з [168]. З цією метою всі літерали, еквівалентні одній цифрі, трактуються як ця цифра . Тож якщо ваша мова може представляти себе так, 9як '\t'вам заборонено використовувати це де завгодно, де ви не можете використовувати 9замість цього.
  5. Ви не повинні створювати кілька цифр одночасно. Слід чітко розділити код на шматки, які генерують одну цифру за раз.
  6. Ви не повинні посилатися на будь - яку вбудовану функцію, математичний / булевий / біт-мудрий / рядковий оператор, змінну або константу, яку ви використовували в коді, що генерував попередню цифру. Виняток становлять цілі рядки для перетворення рядків, об'єднання рядків та функції друку, які можуть знадобитися для кожної цифри. Зауважте, що не має значення, під яким іменем ви посилаєтесь на будь-який вбудований: тільки тому, що ви псевдонім вбудований PIдля обох, pі qне означає, що ви отримаєте використовувати pодин раз і qраз. Крім того, ви маєте право використовувати ім'я двічі , якщо це відноситься до двох різних вбудованим функціям, як рядок lengthі масив length.

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

  7. Подання має бути написане однією мовою. Тож жоден виконавець іншої мови не перекладач, щоб отримати доступ до вбудованих даних цієї мови.

Наслідки

Наступні моменти мають на увазі вищезазначені правила, але я додаю їх сюди, щоб уникнути питань, які вже виникли в пісочниці:

  • Вам заборонено перезаписувати частини виводу, друкуючи деякі зворотні простори (як правило '\b') між ними.
  • Цикли, які генерують / виводять кілька цифр, заборонені. (Хоча петлі, які обчислюють одну цифру, добре.)
  • Використовувати припущену версію (1 + √5)/2або ділити числа Фібоначчі для отримання більше однієї цифри заборонено.
  • Ви не можете заздалегідь обчислити 10 цифр і зберегти їх у 10 змінних, а потім просто посилатися на них, тому що ці посилання змінних не ' генерують цифру - код, який заповнює змінну, так що це порушення правила 6.
  • Насправді, ви не можете повторно використовувати будь-які попередні (або проміжні результати), оскільки це означатиме, що дві цифри поділять код для створення .
  • В іншому випадку ви можете використовувати будь-які засоби (які не повинні мати суто математичний характер) для отримання цифр. (І ти повинен!)
  • Насправді немає необхідності нічого обчислювати, якщо ви можете витягнути правильні цифри з багатьох місць, використовуючи стандартну бібліотеку.
  • Ви можете використовувати оператора кілька разів під час генерування однієї цифри, тому 2+2+2справедлива гра для отримання першої 6(хоча це навряд чи найкоротша).
  • Ви можете використовувати будь-який буквальний стільки разів, скільки вам потрібно, оскільки вони не є вбудованими константами. Отже, поки вам не доведеться друкувати 5, ви можете скільки завгодно 5s у своєму коді.
  • Ви не можете жорстко кодувати вихід, тому що це передбачає використання цифр, які ви виводите.

Коротше кажучи: не використовуйте жодного способу отримання цифр двічі і не використовуйте цифру, яку ви виводите в даний момент, або будь-яку, яка вже надрукована.

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

Оцінка балів

Виграє програма, яка надрукує найбільшу кількість цифр. У разі краватки, коротший код розривається.

Будь-ласка, додайте коментовану версію, яка не використовується, яка визначає, яка частина вашого коду генерує цю цифру.

PS: Якщо хтось переміг на 100 цифр вище, ось ще кілька .


Коментарі вичищені; повідомте мене про будь-яку можливу втрачену інформацію.
Дверна ручка

"Використання прихованої версії ..." Це просто використання квадратичної формули на x = (x+1)/x(або x^2 = x+1) (або x^2-x+1).
Коул Джонсон

.... Чи можу я звертатися до визначеного реалізацією оператора не раз?
Стек

Також чи можу я повторно використати завдання?
Стек

Відповіді:


18

PHP, 100 цифр

Я, мабуть, тут трохи згинаю правила, але PHP має десятки констант на вибір:

<?php
echo TRUE . '.' . PM_STR . DNS_A . MSG_EOR . LC_ALL . T_FMT . LOCK_UN . SQL_DATE
. E_NOTICE . IMG_WBMP . INI_ALL . E_PARSE . SOCKET_EBADF . LOG_USER .
IMAGETYPE_JPC . IMG_PNG . GLOB_MARK . LOCK_NB . LOG_NDELAY . D_FMT . PHP_ZTS .
GLOB_ERR . AM_STR . SQL_DOUBLE . SOL_TCP . FILE_APPEND . LOG_ERR . SORT_ASC .
SOCK_RAW . LOG_INFO . LC_TIME . SQL_FLOAT . SORT_DESC . INFO_MODULES . E_ERROR .
IMG_GIF . SQL_REAL . LOG_DEBUG . DNS_NS . CODESET . CAL_FRENCH . CURLE_OK .
LDAP_OPT_RESTART . LOCK_SH . XML_PI_NODE . SQLITE_INTERRUPT . MYSQLI_ASYNC .
CURLM_OK . SNMP_NULL . SQLITE_NOMEM . LC_MESSAGES . IMG_JPG . SO_KEEPALIVE .
SOCKET_ENXIO . LOCK_EX . D_T_FMT . ENT_QUOTES . LOG_NOTICE . SOCK_RDM .
INPUT_ENV . CURLAUTH_NTLM . INPUT_SESSION . AF_INET . IMG_JPEG . SQL_CONCURRENCY
. SEEK_SET . SOCKET_EIO . LC_CTYPE . PHP_URL_QUERY . LOG_KERN . INI_SYSTEM .
IMAGETYPE_BMP . SEEK_END . JSON_HEX_QUOT . LOG_PID . LIBXML_DTDATTR .
XML_DOCUMENT_NODE . PHP_DEBUG . LOG_CRIT . ENT_IGNORE . LC_NUMERIC .
DOM_NOT_SUPPORTED_ERR . PHP_URL_FRAGMENT . FILE_TEXT . IMAGETYPE_TIFF_II .
LOG_CONS . LOG_EMERG . UPLOAD_ERR_CANT_WRITE . MSG_PEEK . SQLITE_OK . FNM_PERIOD
. AF_UNIX . CURLPROTO_FTPS . STREAM_NOTIFY_FAILURE . MYSQL_BOTH .
CURLE_FTP_ACCESS_DENIED . MSG_OOB . FTP_TEXT . LC_MONETARY .
CURLE_COULDNT_CONNECT . SQLITE_BUSY . "\n";

Це, мабуть, не дуже портативний код, але він прекрасно працює в моїй системі. Ось код, який його створив:

<?php
$phi = "6180339887498948482045868343656381177203091798057628621354486227052604628189024497072072041893911375";
echo "<?php\necho TRUE . '.' . ";
$consts = get_defined_constants();
foreach($consts as $k=>$v) if (preg_match('/\d|TRUE|PHP_EOL/',$k)) unset($consts[$k]);
for ($p=0;$p<strlen($phi);$p++) {
  $d = ord($phi[$p]) - 48;
  $min = 999;
  foreach($consts as $k=>$v) {
    if (strlen("$v")==1 && $v==$d && strlen($k)<$min) {
      $min = strlen($k);
      $maxk = $k;
    }
  }
  if ($min==999) break;
  echo "$maxk . ";
  unset($consts[$maxk]);
}
echo "\"\\n\";\n";

Гм, мушу визнати, що це, мабуть, справедливо. Єдине, на що воно може потрапити - це "кілька імен, що посилаються на одну і ту ж константу", але я фактично не мав наміру цю формулювання висвітлювати цю справу. У відповіді Керні я пояснив, що це буде недійсним лише в тому випадку, якщо насправді вказується на те саме ціле число, але я думаю, що це малоймовірно. Те, що багато чого залежить від вашої системи, прикро, але теж не є частиною правил. Тому, якщо хтось інший не зможе помітити проблему тут, я мушу визнати, що ваша відповідь абсолютно вірна. ;)
Мартін Ендер

<?for(;;);використовує 9 Мб пам'яті. Тепер я знаю, чому ... Мені подобається самонав’язане обмеження № 7 від Kernigh, яке закриває подібну лазівку. Крім того, для чого це варто, вихід у моїй системі такий: codepad.org/wSrtJBco
primo

Хоча, запускаючи генератор, дійсно створюється дійсне представлення, тому +1 для цього;) Версія, яка працює на сервері кодової панелі
primo

2
З повагою, ви зламали виклик. ;) ... Насправді ... ця відповідь дещо не відповідає дійсному виклику, але, наскільки я бачу, це в межах правил, тому мені доведеться визнати поразку і прийняти її. :)
Мартін Ендер

11

Perl - 37 цифр

use Math::Trig;
use POSIX;

print
  !0,'.',chop$=||$=,A==A,2**3,$|,++$^F,75/5/5,pi*pi%\_,4+4,a^Y,w&'?',~"\xcb",$^=~y/_//c,
  ord"\b",unpack(h,"\t").@{[c,c,c,c]},$#{[b..j]},"$^W"|'$',$^H>>log$^H,cos()- -cos,$[,
  $-=sqrt%SIG,$%=$],$+[*$=~/($)/],split('',$~).map(glob,"{,,,}{,}"),index(\L,L),
  exp(exp)<<exp,ceil(sinh acosh$^C).keys{stat$0},rindex(\R,R),($s=ssssss)=~s/s//g,
  $?=acos(--$z),$^T=pack(u,$^T.$^T.TTTT),B~~B,C<=C,length$^V,

Зараз 392 байти (10,6 на цифру).

Вихід:

1.618033988749894848204586834365638117

Самообмеження

Я додав кілька додаткових обмежень, щоб обмежити використання мовних функцій, які б породжували проблему. Наприклад, відмітка масиву @{...}та кінцевий індекс масиву $#{...}використовуються лише один раз. Кожен масив використовується генерується іншим способом (порівняйте [c,c,c,c], [b..j], split('',$~), map(glob,"{,,,}{,}")). Крім того, жоден символ або барево не використовуються більше одного разу, хоча це прямо в описі виклику дозволено. Я думаю, що це гарна ідея для perl (або будь-якої мови зі спеціальними змінними, що містять лише int (чи є інші?)), Оскільки це обмежує кількість неявних int-перетворень.


Шматки

!0                       # returns 1
'.'
chop$=||$=               # $= is 60, chop the 0, returns 6
A==A                     # returns 1 (because 0==0)
2**3                     # returns 8
$|                       # auto flush, returns 0
++$^F                    # max system filehandle pre-incremented, returns 3
75/5/5                   # returns 3
pi*pi%\_                 # pi² mod a large value, returns 9
4+4                      # returns 8
a^Y                      # bitwise 'a' xor 'Y', returns 8
w&'?'                    # bitwise 'w' and '?', returns 7
~"\xcb"                  # bitwise inversion of char 203, returns 4
$^=~y/_//c               # count non-underscores in $^, returns 9

ord"\b"                  # returns 8
unpack(h,"\t")           # unpack "\t" as a hex nibble, returns 9
@{[c,c,c,c]}             # anonymous array, returns 4 in scalar context
$#{[b..j]}               # final index of the range b..j, returns 8
"$^W"|'$'                # bitwise '0' or '$', returns 4
$^H>>log$^H              # $^H is 256, log$^H is ~5, returns 8
cos()- -cos              # cos(undef) is 1, subtract -1, returns 2
$[                       # array start index, returns 0

$-=sqrt%SIG              # set $- to sqrt(23), returns 4
$%=$]                    # set $% to the version number, returns 5
$+[*$=~/($)/]            # match end on *$ (aka *main::$), returns 8
split('',$~)             # split "STDOUT" into chars, returns 6 in scalar context
map(glob,"{,,,}{,}")     # an array of 8 empty strings, returns 8 in scalar context
index(\L,L)              # finds 'L' in 'SCALAR(...)', returns 3

exp(exp)<<exp            # 2.718281828 << 1, returns 4
ceil(sinh acosh$^C)      # ceil(2.30129...), returns 3
keys{stat$0}             # stat$0 is an array with 13 entries, which has 6 keys when
                         # interpreted as a hash, returns 6 in scalar context
rindex(\R,R)             # finds 'R' in 'SCALAR(...)' in reverse, returns 5
($s=ssssss)=~s/s//g      # replace the every 's' in 'ssssss' with nothing, returns 6

$?=acos(--$z)            # set $? to 3.14159... implicit int conversion, returns 3
$^T=pack(u,$^T.$^T.TTTT) # set $^T to "8,30P,...", returns 8
B~~B                     # returns 1 (because B represents the same thing as B)
C<=C                     # returns 1 (because 0<=0)
length$^V                # string length of $^V, returns 7

8

Python 2.7, 19 цифр, 231 відповідні символи

from math import ceil, pi, trunc, gamma, sin

print ''.join(map(str,
[33-32,
chr(46),
~-7,
8>>3,
trunc(gamma(4.3)),
'x'.find('x'),
22/7,
range(4).pop(),
len('am I phi?'),
52%44,
2*4,
5|2,
ord('/'),
'\b',
5+2+2,
2<<2,
eval("5+2+2"),
ceil(pi),
'\b',
'\b',
str(sin(5))[5],
5&52]))

Ця відповідь була розміщена до закриття лазівки. Оскільки це досить розумна хитрість і не є шкідливою для виклику в даному випадку (а оскільки ця відповідь насправді вказала мені на лазівку), ця відповідь може залишитися такою, що є - тому, будь ласка, не оскаржуйте її виходячи з цього, скоріше підкреслити це за кмітливість. :)
Мартін Ендер

6

Ruby 2.1 для 54 цифр, 808 символів

#!ruby -rdate -rdigest -ropenssl -rprime -rset -rsocket
print 2/2,?.,9-3,3&5,2*4,2^2,7%4,55>>4,5+4,2<<2,-~7,5|2,2**2,(2r+2+5).to_i,(2.2+5).ceil,(55r/5-2).floor,(2.2*2).to_i,(2r*2*2).ceil,(2.2**2).floor,2.to_bn<<2,__LINE__,$<.to_i,IO::LOCK_NB,Errno::EIO::Errno,File::APPEND,'aaaaaa'.size,?a.encoding.name.sub(/\D+/,''),%w[a a a].size,%w[a b c d].to_set.size,%w[a a a].count,Socket::AF_NS,Date.jd(Date::ITALY).wday,*Digest::MD5.digest(?j).scan(/\d/),Set[?a,?b,?c].count,SignalException.new('FPE').signo,Float::ROUNDS,begin
exit false
rescue Object
$!.status
end,Process::RLIMIT_NPROC,:aaaaaaa.size,Prime.first,?/.next,{a:p,b:p,c:p}.size,STDIN.lineno,?a.crypt('at')[/\d/],{a: :a}.find_index([:a,:a]),/b/=~'aaaaaaaaab',[?a,?b].index(?b),:aaaaaaab=~/b/,?\t.ord,'aaaaaaaab'=~/b/,open(?/).pos,'aaaaab'.index(?b),?\a.bytes{|b|break b},'aaaaaaa'.rindex(?a),%w[a a].map.size

Ця програма працює з ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-openbsd]. Системи, відмінні від OpenBSD 5.5, можуть мати різні значення для кількох цифр.

Тлумачення

Обмеження цього виклику, особливо обмеження 6, для Рубі не є точними. Тому я додаю власні інтерпретації:

  1. Дужки, крапка та двокрапка - не оператори. Дужки просто змінюють порядок операцій. Точка називає методи, як у $<.fileno, а подвійна двокрапка отримує константи, як у IO::LOCK_NB. Назва методу або константи є частиною операції. Оскільки () . ::це не оператори, я не застосовую до них обмеження 6. Я можу використовувати їх повторно, щоб отримати більше цифр.
  2. Метод з іншою реалізацією - це інший метод. Наприклад, Array#countі Enumerable#countне є однаковою функцією для обмеження 6. Обидва способи діють однаково, але Array#countпереосмислюють Enumerable#countрізну реалізацію. Якщо я користуюсяArray#count генерувати одну цифру, я можу використовуватиEnumerable#count для генерації іншої цифри.
  3. Клас № new - це один метод. В Ruby Mutex.new, Random.new, Time.newі так далі ставляться до тієї ж методі, Class#new. Я використовую SignalException.newдля створення однієї цифри. Через обмеження 6 я більше ніколи не можу використовуватиClass#new .
  4. Константи для класів або модулів все ще є константами. У Ruby назви класів люблять Floatі IOє константами! Я використовую IO::LOCK_NBдля створення однієї цифри. Через обмеження 6 я більше ніколи не можу використовувати IO. Це тлумачення пов'язує лише Ruby, а не інші мови, де назви пакетів не є константами.
  5. Літерали - не константи. Хоча 2 - математична константа (незалежна від будь-яких змінних), вона не є константою в Ruby. Я не застосовую обмеження 6 до літералів, і я можу використовувати повторно 2 для більш ніж однієї цифри.
  6. Літерали - не оператори. Я не застосовую обмеження 6 до дужок або лапок, які утворюють буквальні масиви, хеші, регулярні вирази або рядки, як у [] {} // ''. Я завжди можу використовувати такі літерали для отримання більшої кількості цифр.
  7. Дві константи з однаковим значенням - однакова константа. File::APPENDі IPSocket::LOCK_UNє двома іменами для одного і того ж числа 8. Обмеження 6 говорить: "Не має значення, під яким іменем ви посилаєтесь на будь-який вбудований". Оскільки File::APPENDі IPSocket::LOCK_UNвідрізняються лише назвою, вони повинні бути однаковими постійними, тому я не можу використовувати їх для двох цифр.
  8. Двозначні цифри можуть не посилатися на одну глобальну змінну. Це закриває лазівку. Обмеження 6 стосується лише функцій, операторів та констант. Обмеження 4 стосується лише літералів. $SAFEце вбудована глобальна змінна, а не функція, оператор, константа, ні буквальна. $SAFEмає значення 0. За допомогою лазівки я можу повторно використовувати $SAFEдля створення кожної цифри 0 в програмі. Я закриваю лазівку, інтерпретуючи обмеження 6, щоб також обмежувати глобальні змінні.

Коментарі

Перший рядок є #!ruby -rdate -rdigest -ropenssl -rprime -rset -rsocket. Ruby розбирає цей рядок і завантажує шість частин його стандартної бібліотеки, начебто require 'date', require 'digest'тощо. Я не рахую цих 56 символів, тому що обмеження 3 виключає "стандартний імпорт / включення бібліотеки".

Решта програми викликає printдовгий список аргументів, щоб перетворити їх у рядки та надрукувати їх по порядку. Аргументи такі:

  1. 1від 2/2: поділ Fixnum # /
    . від ?.: буквальний односимвольний рядок
  2. 6від 9-3: віднімання Fixnum # -
  3. 1від 3&5: порозрядно і Fixnum # &
    • В інтерпретації 5 я можу 3знову використовувати .
  4. 8від 2*4: множення Fixnum # *
  5. 0від 2^2: порозрядне ексклюзивне або Fixnum # ^
  6. 3від 7%4: модуль Fixnum #%
  7. 3від 55>>4: зсув правого Fixnum # >>
  8. 9від 5+4: додавання Fixnum # +
  9. 8від 2<<2: зсув зліва Fixnum # <<
  10. 8від -~7: заперечення комплементу Fixnum # - @ Fixnum # ~
    • Віднімання Fixnum # - і заперечення Fixnum # - @ - це різні методи.
  11. 7від 5|2: порозрядне або Fixnum # |
  12. 4від 2**2: експоненція Fixnum # **
  13. 9від (2r+2+5).to_i: раціональне доповнення Раціональне # + Раціональне # до_і
    • За інтерпретацією 2, Fixnum # + і Rational # + - це різні методи. Вони обидва додають номери, але вони мають різні реалізації, починаючи від різних типів для лівого числа.
    • Раціональні літерали начебто 2rнові в Ruby 2.1. 2r+2викликає Rational # + і повертає інше раціональне; 2r+2+5знову викликає Раціональний № + .
    • Ruby друкує раціональні матеріали, як 2/1і плаває, як 2.0. Щоб виправити це, я перетворюю на ціле число: to_i раунди до нуля, стелі округлення вгору, підлогу округлює вниз.
  14. 8від (2.2+5).ceil: поплавок додавання Float # + Float # ceil
    • В інтерпретації 1 я можу знову використовувати дужки ()та крапки ..
  15. 9від (55r/5-2).floor: раціональне ділення і віднімання Раціональне # / Раціональне # - Раціональне # пол
  16. 4від (2.2*2).to_i: float множення Float # * Float # to_i
  17. 8від (2r*2*2).ceil: раціональне множення Раціональне # * Раціональне # перекриття
  18. 4від (2.2**2).floor: раціональна експозиція Раціональна № **
  19. 8з 2.to_bn<<2: ліва зміна з великою кількістю OpenSSL Fixnum # to_bn OpenSSL :: BN # <<
  20. 2 з __LINE__ : магічна константа для поточного номера рядка
  21. 0від $<.to_i: дескриптор файлу стандартного вводу IO # to_i
  22. 4 з IO::LOCK_NB : прапор для блокування блокування файлів
    • Це перша з багатьох констант, що залежать від системи. У OpenBSD є 4.
    • Тлумаченням 4 я більше не можу використовувати IO. В інтерпретації 7 я більше не можу використовувати будь-яку константу зі значенням 4.
  23. 5 з Errno::EIO::Errno : число для помилки вводу / виводу
  24. 8 з File::APPEND : прапор для додавання до файлу
    • Це лазівка ​​в інтерпретації 4. Я не можу використовувати IO, але Fileуспадковує константи IO, тому File::APPENDце інший спосіб отримати IO::APPEND.
  25. 6from 'aaaaaa'.size: довжина рядка String # size
  26. 8від ?a.encoding.name.sub(/\D+/,''): частина імені кодування String # кодування Кодування # name String # sub
    • В інтерпретації 6 я можу знову використати рядкові лапки.
    • Оскільки Ruby 2.0, кодування за замовчуванням - UTF-8. Я беру назву "UTF-8" і замінюю / \ D + /, що відповідає "UTF-", порожнім рядком. Це дає «8».
  27. 3from %w[a a a].size: довжина масиву # size
  28. 4from %w[a b c d].to_set.size: кількість елементів у наборі Array # to_set Встановити # розмір
  29. 3від %w[a a a].count: підрахувати всі елементи Масив # кол
    • Різниця між масивом # масиву і числом масиву # полягає в тому, що останній приймає необов'язкові аргументи, щоб вибрати, які елементи підрахувати. Я не передаю жодних аргументів, тому він рахує всі елементи.
  30. 6від Socket::AF_NS: номер для сімейства адрес NS
  31. 5від Date.jd(Date::ITALY).wday: номер вихідного дня для п’ятниці 15 жовтня 1582 р., коли Італія перейшла на григоріанський календарний день :: jd дата # wday
  32. 6від *Digest::MD5.digest(?j).scan(/\d/): перша цифра ASCII у двійковому дайджесті MD5 дайджесту "j" Дайджест :: MD5 :: Дайджест String # scan
    • String # scan повертає масив усіх збігів. *Передає елементи масиву в якості аргументів print. Цей масив є ["6"].
  33. 3від Set[?a,?b,?c].count: підрахувати всі елементи Set :: [] Численні # count
    • За інтерпретацією 2, Array # count та Unumerable # count - це різні методи.
  34. 8від SignalException.new('FPE').signo: номер класу SIGFPE # новий SignalException # signo
  35. 1 з Float::ROUNDS : режим округлення, тут 1 для округлення до найближчого
  36. 1з begin(новий рядок) exit false(новий рядок) rescue Object(новий рядок)$!.status (newline) end: статус виходу за збій
    • Це те саме значення, що і SystemExit.new(false).status, але, тлумачивши 3, я більше не можу називати Клас # новим . Натомість я піднімаю та рятую SystemExit.
  37. 7 з Process::RLIMIT_NPROC : номер для обмеження ресурсів для кількості процесів для одного користувача
  38. 7від :aaaaaaa.size: довжина символу символ # розмір
  39. 2від Prime.first: перший простий номер Численні # перші
  40. 0з ?/.next: наступний рядок після "?"Рядок # наступний
  41. 3від {a:p,b:p,c:p}.size: довжина хешу Hash # розмір String # p
  42. 0від STDIN.lineno: номер поточного рядка для стандартного введення IO # lineno
    • Тлумачення 8 я не можу повторно використовувати $<. Я використовую STDIN. Різниця в тому, що $<це глобальна змінна і STDINє постійною. Програма може встановлювати $<інший вхід, але STDINзавжди є вихідним значенням $<.
  43. 3від ?a.crypt('at')[/\d/]: перша цифра ASCII в зашифрованому паролі String # crypt String # []
    • Система з різною функцією crypt () дасть різний результат.
  44. 0від {a: :a}.find_index([:a,:a]): індекс першого ключа: a, значення: a в хеші Численні # find_index
    • Я використовую хеш, а не масив, тому що Array # find_index - псевдонім для масиву # індекс , який я планую використовувати незабаром.
  45. 9з /b/=~'aaaaaaaaab': індекс, де рядок відповідає / b / Regexp # = ~
  46. 1from [?a,?b].index(?b): індекс першого "b" в масиві # index
  47. 7from :aaaaaaab=~/b/: індекс, де символ відповідає / b / Symbol # = ~
  48. 9від ?\t.ord: ASCII значення вкладки "\ t" Рядок № ord
  49. 8від 'aaaaaaaab'=~/b/: індекс, де рядок відповідає / b / string # = ~
    • За інтерпретацією 2, Regexp # = ~ і String # = ~ - це різні методи.
  50. 0from open(?/).pos: позиція у файлі після відкриття кореневого каталогу "/" як файл Kernel # open IO # pos
  51. 5from 'aaaaab'.index(?b): індекс першого "b" у рядку String # index
  52. 7від ?\a.bytes{|b|break b}: ASCII значення попередження "\ a" Рядок № байтів
    • Це працює за допомогою ітерації байтів у "\ a", але розбиття циклу шляхом повернення першого байта.
  53. 6from 'aaaaaaa'.rindex(?a): індекс останнього "a" у рядку String # rindex
  54. 2від %w[a a].map.size: розмір перечислювача, який відображає масив масиву # map Enumerator # size

Вражає! Більшість ваших тлумачень так чи інакше відповідають правилам. 1. Я ніколи не планував обмежувати операторів виклику, перенаправлення та доступу, тому я сказав операторів "математичних, булевих, бітових та рядкових". 2. Застосовується за правилом 6. 3. Повторне використання нового було б чудово в інших мовах, оскільки це звичайно оператор - його просто не можна повторно використовувати для одного класу, оскільки він викликає конструктор (вбудована функція). Як це в Рубі? Чи newсправді завжди називає одне і те ж імплікація або це перекрито в підкласах? [ctd.]
Мартін Ендер

4. Мені б добре, якби ви зробили там виключення для Рубі, але дякую за ваше спортивне майстерність. ;) 5. і 6. Ні, їх немає, тому деякі правила викладені такими, якими вони є. 7. Це хороший тонкий момент, про який я не думав. Технічно, якщо вони не посилаються на ті самі 8, було б непогано використовувати обидва. 8. Добре, що я не думав про вбудовані змінні. Я перевірю, чи не суттєво порушує будь-яке інше подання, і поправлю правило 6. Дякую, що ви граєте чесно! :)
Мартін Ендер

Я не міг знайти жодного порушення правил у цій відповіді, тому прийняв його. Однак я хотів би нагородити вашу відповідь, оскільки це, безумовно, найдовший, який насправді грає те, як було призначено виклик. Тому я запропоную винагороду за цей виклик. Хоча баунті буде тривати сім днів, і якщо прийде відповідь, яка б'є твоїх "чесним" способом, я нагороду отримаю відповідно. (Звичайно, ти можеш випробувати будь-яких претендентів;). Сподіваюсь, що з цим все гаразд!
Мартін Ендер

5

Java, 21 цифра, 276 символів

class C{public static void main(String[]a){System.out.print((3&5)+"."+(2|4)+Byte.BYTES+2*4+"".length()+(7-4)+~-4+(7+2)+(2<<2)+(int)Math.sqrt('@')+(2^5)+(int)Math.pow(2,2)+32%23+Byte.SIZE+('$'>>2)+Float.BYTES+Long.BYTES+Integer.BYTES+Double.BYTES+Short.BYTES+Math.round(.2));}}

class C {
  public static void main(String[] a) {
    System.out.print(
      (3&5)+       // 1
      "."+         // .
      (2|4)+       // 6
      Byte.BYTES+  // 1
      2*4+         // 8
      "".length()+ // 0
      (7-4)+       // 3
      ~-4+         // 3
      (7+2)+       // 9
      (2<<2)+      // 8
      (int)Math.sqrt('@')+  // 8
      (2^5)+       // 7
      (int)Math.pow(2,2)+   // 4
      32%32+       // 9
      Byte.SIZE    // 8

      // rest of explanation to come later today
    );
  }
}

Ха, мені подобається 7-4& -4+7, це розумно! :)
Мартін Ендер

розумний, але я думаю, що це порушує правило про повторне використання констант (позитивне 7 використовується в обох)
неправильно

1
@rangu 7- не константа, а буквальна
Мартін Ендер

То чому ти там зупинився?
Валентин Грегоар

4

Рубін, 74 символи, 10 цифр

Це лише початок; Я маю йти, тому згодом це вдосконалю.

$><<[3-2,?.,3+3,?..size,2**3,$*.size,24/8,7%4,[*7..77][2],2*4,7.next].join

У мене збережено 76 символів на потім, коли це стане складніше!


Це вдалий старт! Нарешті відповідь у дусі питання. :)
Мартін Ендер

3

Рубі, 17 цифр, 168 байт

$><<[-~0,'.',9-3,3/3,2**3,$.,25%22,'   '=~/$/,2+7,2<<2,"10".oct,2|5,[2,2,2,2].size,[*$....2*5].last,(2^5).succ,'a'.to_i(25).pred,'aaaa'.count('a'),eval(55.chr.next)]*''

Безголівки:

$><<[
  -~0,                # 1
  '.',                # .
  9-3,                # 6
  3/3,                # 1
  2**3,               # 8
  $.,                 # 0
  25%22,              # 3
  '   '=~/$/,         # 3
  2+7,                # 9
  2<<2,               # 8
  "#{'a'.hex}".oct,   # 8
  2|5,                # 7
  [2,2,2,2].size,     # 4
  [*$....2*5].last,   # 9
  (2^5).succ,         # 8
  'a'.to_i(25).pred,  # 9
  'aaaa'.count('a'),  # 4
  eval(55.chr.next)   # 8
]*''

Мене ще не примушували робити щось особливо розумне, я можу повернутися і додати цифри.


1
"Ще не змушені були робити щось особливо розумне". Так, я вважав, що Рубі, Перлу та звичайним підозрюваним не буде справді важкого часу з 15 символами на цифру, але я хотів залишити місце для таких речей, як C-похідні та Mathematica з великими стандартними бібліотеками, але більш складними іменами.
Мартін Ендер

"Якщо вони справді лише псевдоніми, ні [ви не можете їх використовувати]." succі nextє псевдонімами.
Дверна ручка

1
Перший викликається Fixnum, другий - String, тому я не думаю, що вони вважаються одним і тим же методом.
гістократ

Ах, хороший пункт. Однак питання також говорить: "Ви не повинні посилатися на будь-яку ... константу, яку ви використовували в коді, що генерував попередню цифру", і ви використовуєте $.двічі. Хоча, треба кохати$.... : D
Doorknob

2

Гольфскрипт , 17 цифр

Відверта спроба. Гольфскрипт може мати безліч буквено-цифрових вбудованих літер, але він не має багатьох вбудованих модулів у цілому!

".",                         # 1: string length (separate from array length)
'.'    
3 3+                         # 6: addition
''[49]+                      # 1: string concatenation
-9~                          # 8: bitwise not
2!                           # 0: boolean not
7 4%                         # 3: modulus
4(                           # 3: decrement
7))                          # 9: increment
257 2/2/2/2/2/               # 8: division
4 2*                         # 8: multiplication
22 5- 5- 5-                  # 7: subtraction
2 2?                         # 4: power
[2 5] 2 base                 # 9: base conversion
[2 2 2 2 2 2 2 2],           # 8: array length (separate from str length)
[2 2 2 2 2 2 2 2 2 5]5?      # 9: array.find()
2 2+                         # 4: addition
"2 2*2*"~                    # 8: eval

2
Я думаю, ви могли б продовжити 5,)\; # range, right uncons, flip, and pop.
Пітер Тейлор

1

Баш, 5 цифр у 65 символів

Я скоро це оновлю! Наразі він просто друкує 1.6180та не містить жодних цифр.

false
tr -d ' '<<<$?.`wc -c<<<abcde``nl<<<' '``kill -l FPE`$(())

Пояснення

Для отримання цифр використовуються такі методи:

1: статус виходу false

6: довжина рядка

1: nl зловживання

8: kill номери сигналів

0: числове значення порожнього виразу


1

Математика 9 8 цифр, в 86 83 78 символів.

10`8FromDigits@#/10^Length@#&@{a/a,3!,-I I,2π/(45°),#&''[],Prime@2,Sqrt@9,4+5}

Вихід:

1.6180339

Ах, я знав, що я десь помилився. Позначення виправлень не зовсім працює в цьому випадку. Використання unicode Pi та Degree, здається, все ще працює.
Tally

Так, цей # & '' [] генерує помилку від пропущеного вводу, тоді як у цій формі він ігнорує, що він не ввів. Все ще не виправдовує мене не використовувати його там, де він працює.
Tally

1
Дякую. Я особисто любив # & '' [] (в основному друга похідна від f [x] = x
Tally

(Підчищу коментарі.) Те є досить добре, але ви могли б , ймовірно , зберегти характер, шляхом заміни #з дозволеною цифрою і відкиданням одного з рисок.
Мартін Ендер

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

1

Джулія - ​​23 цифри в 345 символів (15 точно на цифру)

print(div(2,2),'.','/'+7,length(" "),2^3,size([])[end],isqrt(9),int(cbrt(27)),54-45,'h'$'P',[2:22][7],endof("2222222"),count(isodd,[5,5,5,5]),search("Hello man",'n'),nextpow2(5),rsearch("Love boat",'t'),sizeof('й'),("I"summary(b"H"))[22],iceil(float(pi)),iround(cosh(e)),ifloor(exp(catalan)),cmp(5,5),itrunc(5sin(one(Int))),uint(erfcx(-ones())))

Вихід: 1,6180339887498948482045

Я інтерпретував символи та рядки як корисні, до тих пір, поки я не використовував певний символ чи рядок (символи в рядку можна було повторно використовувати, доки рядок не був); однак я не дозволяв собі безпосередньо використовувати значення int символу. Є один символ, який не є ASCII (й).

Більш зрозумілим способом (не фактичним кодом):

1> div(2,2)
.> '.'
6> '/'+7
1> length(" ")
8> 2^3
0> size([])[end]
3> isqrt(9)
3> int(cbrt(27))
9> 54-45
8> 'h'$'P'
8> [2:22][7]
7> endof("2222222")
4> count(isodd,[5,5,5,5])
9> search("Hello man",'n')
8> nextpow2(5)
9> rsearch("Love boat",'t')
4> sizeof('й')
8> ("I"summary(b"H"))[22]
4> iceil(float(pi))
8> iround(cosh(e))
2> ifloor(exp(catalan))
0> cmp(5,5)
4> itrunc(5sin(one(Int)))
5> uint(erfcx(-ones()))

0

C ++ 12,4 символів на рядок, було 14 знаків на рядок для кожної цифри

Виправлена ​​моя помилка повторного використання операторів.

#include <iostream>
#include <math.h>
#define S std::string
#define C(x) std::cout<<x
int main()
{
C(cos(0));
C(char(46));
C('j'%'d');
C('\0'+3-2);
C(sqrt('@'));
C(log(1));
C('c'/'!');
S s("xyz");
C(s.size());
return 0;
}

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

#include <iostream>
#define C(x) std::cout<<x
int main()
{
C('b'-'a');//1
C(char(46));//.
C('g'-'a');//6
C('b'-'a');//1
C('i'-'a');//8
C('a'-'a');//0
C('d'-'a');//3
C('d'-'a');//3
C('j'-'a');//9
//etc
return 0;
}

Буквене позначення добре (оскільки вони не еквівалентні одноцифровим числам), але ви продовжуєте повторно використовувати -оператора. Також мені подобається, як ви порахували коментар за довжину рядка. : D
Мартін Ендер

Так, це виглядає набагато краще, але ви використовуєте 1для створення 0(що заборонено, тому що 1з'явилося раніше в золотому співвідношенні). Також вам потрібно порахувати #define S(не інший), оскільки це не включення, а просто визначення псевдоніму скорочень.
Мартін Ендер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.