黄金比を印刷する


26

これは楽しかった!しかし、たった3桁で、楽しみはすぐに終わりました。この課題は似ていますが、楽しみを続けていきます。

チャレンジ

黄金比 φを可能な限り多く印刷します。黄金比は、φ=(φ+ 1)/φを満たす数として定義され、最初の100桁は次の式で与えられます。

1.6180339887498948482045868343656381177203091798057628621354486227052604628189024497072072041893911375 ...

この課題は、φを計算することではありません2回行う方法を使用せずに、できるだけ多くの桁を印刷することです。可能な限り多くの創造的な方法で数字を取得してください!

制限事項

それ自体では、φの数字を印刷するのは少し単純すぎるので、ここに規則があります。

  1. 番号左から右に順番に作成する必要があります。1つずつ印刷するか、左から右に文字列を作成して最後に印刷します。数字文字の配列を生成して結合することもできます。順番どおりに行う限り、印刷してください。次の規則では、「印刷」および「出力」はこれらのプロセスのいずれかを指す場合があります(たとえば、文字列を作成し、その文字列に既に印刷済み1.6としてカウント1.6される場合)。
  2. コードの場合、1桁あたり15文字の予算があります。期間はその予算にカウントされませんが、同様に印刷する必要があります。制限はコードの合計サイズのみであることに注意してください。平均でこれ以上使用しない限り、任意の数字に15文字以上を使用できます。実際、キャラクターに「借金」を作り、後で「支払う」ことができます。たとえば、印刷1.618するには60文字が必要です。
  3. 標準ライブラリのインクルード/インポートは、コードサイズにカウントされません。しかし、これらのインクルードエイリアスを無料で提供することはできません!
  4. 現在生成している数字や、すでに印刷した数字は使用しないでください。たとえば1、ソースコードの最初の桁であるため、ソースコードのどこにも表示されない場合があります。8in を出力するコード1.618は、数字の一部またはすべてを使用できますが、のいずれも使用でき[0234579]ません[168]。この目的のために、1桁に相当するすべてのリテラルはその数字として扱わます。だからあなたの言語を表現することができる場合9として、'\t'あなたが使用することができませんでしつまりどこでも、使用することを許可されていない9代わりに。
  5. 一度に複数の数字を生成しないでください。コードを1桁ずつ生成するチャンクに明確に分割することができるはずです。
  6. 組み込み関数、数学/ブール/ビット単位/文字列演算子、以前の数字を生成したコードで使用した変数または定数を参照しないでください。例外は、整数から文字列への変換、文字列の連結、および1桁ごとに必要な印刷機能です。ビルトインをどの名前で参照するかは問題ではないことに注意してください。ビルトインPIを両方にエイリアスするからであり、一度だけ使用するわけではpありqません。同様に、あなたはしている、それは文字列のように、二つの異なる組み込みコマンドを参照している場合は二回名前を使用することができ、配列。pqlengthlength

    プログラミング言語に関数がない場合は、同等のものが何であるかについて最善の判断を下してください。たとえば、bashスクリプトの場合、他のプログラムを呼び出すには、関数に課せられた規則に従う必要があります

  7. 提出物は単一の言語で書かれている必要があります。そのため、他の言語のビルトインにもアクセスするために他の言語のインタープリターを実行する必要はありません。

含意

以下の点はすべて上記のルールによって暗示されていますが、サンドボックスですでに出てくる質問を避けるためにここにそれらを追加します。

  • '\b'その間にいくつかのバックスペース(通常は)を印刷することで、出力の一部を上書きすることはできません。
  • 複数の数字を生成/出力するループは禁止されています。(ただし、1桁を計算するループは問題ありません。)
  • 難読化されたバージョンを使用し(1 + √5)/2たり、フィボナッチ数を分割して1桁以上を取得することは禁止されています。
  • これらの変数参照は数字を生成しないため、10桁を事前に計算して10変数に格納し、それらを参照することはできません-変数を埋めるコードはそうするため、これはルール6の違反です。
  • 実際、以前の(または中間結果)を再利用することはできません。これは、生成されるコードが2桁で共有されるためです。
  • それ以外の場合は、数字を生成するためにあらゆる手段(純粋に数学的な必要はありません)を使用できます。(そして、あなたはすべきです!)
  • 実際、標準ライブラリを使用して多くの異なる場所から正しい数字を引き出すことができれば、何も計算する必要はありません。
  • 1桁の数字を生成するときに演算子を複数回使用することがあるため、2+2+2最初の数字を生成するのは公正なゲームです6(ただし、最短ではありません)。
  • あなたはあり、彼らがビルトインされていないため、定数、できるだけ頻繁にあなたが望むようリテラルを使用しています。したがって、印刷する必要がない限り、コード内で必要なだけs 5を使用でき5ます。
  • 出力をハードコーディングすることはできません。出力する数字を使用する必要があるためです。

要するに、数字を2回生成する方法を使用しないでください。また、現在出力している数字や既に印刷されている数字を使用しないでください。

(準)無限のスコアを得ることができる抜け穴を見つけた場合は、それを悪用して挑戦を台無しにしないでください、しかし、私に知らせてください。

得点

最高桁数を正しく印刷するプログラムが勝ちます。同点の場合、短いコードは同点を破ります。

コードのどの部分がどの桁を生成するかを特定するコメントなしのバージョンを追加してください。

PS:誰かが上記の100桁に勝ったら、ここにもう少しあります。


削除されたコメント。情報が失われる可能性がある場合は通知してください。
ドアノブ

「難読化されたバージョンの使用...」これは、x = (x+1)/x(またはx^2 = x+1)(またはx^2-x+1)で2次式を使用しているだけです。
コールジョンソン14年

....実装定義の演算子を複数回参照できますか?
Stackstuck

また、割り当てを再利用できますか?
Stackstuck

回答:


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";

うーん、それはおそらく有効だと認めざるを得ません。それが当てはまる唯一のものは「同じ定数を参照する複数の名前」ですが、実際にはこの言い回しがこのケースをカバーすることを意図していませんでした。私はkernighの答えで、これが実際に同じ整数を指している場合にのみ無効になることを明らかにしましたが、それはありそうにないと思います。これの多くがシステムに依存するという事実は残念ですが、ルールの一部でもありません。他の誰かがここで問題を発見できない限り、あなたの答えが完全に有効であることを認めなければなりません。;)
マーティン・エンダー

<?for(;;);9MBのメモリを使用します。理由はわかっていますが、@ kernighの自主規制#7が好きですが、これがこの種の抜け穴を塞いでいます。:また、どのようなことの価値のために、私のシステム上の出力はこれですcodepad.org/wSrtJBco
プリモ

ただし、ジェネレーターを実行すると有効な表現生成されるため、そのために+1;)コードパッドサーバーで実行されるバージョン:codepad.org/myBpc6cB
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バイト(1桁あたり10.6)。

出力:

1.618033988749894848204586834365638117

自主規制

問題を簡単にする言語機能の使用を制限するために、いくつかの追加の制限を追加しました。たとえば、配列の間接参照@{...}と配列の最終インデックス$#{...}は一度だけ使用されます。使用される各アレイは、異なるように生成される(比較します[c,c,c,c][b..j]split('',$~)map(glob,"{,,,}{,}"))。さらに、チャレンジの説明では明示的に許可されていますが、シンボルまたはベアワードは複数回使用されません。暗黙のint変換の数を制限するので、perl(または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

54桁、808文字のRuby 2.1

#!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は、Rubyにとって正確ではありません。そこで、独自の解釈を追加します。

  1. 括弧、ドット、および二重コロンは演算子ではありません。括弧は操作の順序を変更するだけです。ドットはのようにメソッドを呼び出し$<.fileno、二重コロンはのように定数を取得しIO::LOCK_NBます。メソッドまたは定数の名前は操作の一部です。() . ::演算子ではないため、制限6を演算子に適用しません。それらを再利用して、より多くの桁を生成できます。
  2. 実装が異なるメソッドは、異なるメソッドです。たとえば、Array#countおよびEnumerable#countは制限6の同じ関数ではありません。両方のメソッドは同じように動作しArray#countますEnumerable#countが、異なる実装でオーバーライドします。Array#count1つの数字を生成するために使用する場合、Enumerable#count別の数字を生成するために使用できます。
  3. Class#newは1つのメソッドです。Rubyでは、Mutex.newRandom.newTime.newというように、同じ方法を指しますClass#new。私はSignalException.new1桁を生成するために使用します。制限6のため、私はを二度と使用することはできませんClass#new
  4. クラスまたはモジュールの定数は依然として定数です。Rubyでは、クラス名は好きですFloatし、IO定数であります!私はIO::LOCK_NB1桁を生成するために使用します。制限6のため、私はを二度と使用することはできませんIO。この解釈はRubyのみをバインドし、パッケージ名が定数ではない他の言語はバインドしません。
  5. リテラルは定数ではありません。2は数学的な定数(変数に依存しない)ですが、Rubyでは定数ではありません。リテラルに制限6を適用せず、リテラル2を複数の数字に再利用できます。
  6. リテラルは演算子ではありません。のように、リテラル配列、ハッシュ、正規表現、または文字列を形成するブラケットまたは引用符に制限6を適用しません[] {} // ''。このようなリテラルを使用して、より多くの数字を生成できます。
  7. 同じ値を持つ2つの定数は同じ定数です。 File::APPENDそしてIPSocket::LOCK_UN、同じ数字8の2つの名前です。制限6は、「組み込みの名前をどの名前で参照してもかまいません」と述べています。File::APPENDとはIPSocket::LOCK_UN名前だけが異なるため、これらは同じ定数でなければならないため、2桁に使用することはできません。
  8. 2つの数字が同じグローバル変数を参照しない場合があります。これにより抜け穴が閉じられます。制限6は、関数、演算子、および定数にのみ適用されます。制限4はリテラルにのみ適用されます。$SAFEは組み込みのグローバル変数であり、関数、演算子、定数、リテラルではありません。$SAFE値が0です。抜け穴を使用$SAFEすると、プログラム内のすべての数字0を再生成できます。制限6を解釈してグローバル変数も制限することにより、抜け穴を閉じます。

コメント

最初の行は#!ruby -rdate -rdigest -ropenssl -rprime -rset -rsocketです。Rubyはによるかのように、このラインと負荷の標準ライブラリの6つの部分を解析しrequire 'date'require 'digest'そして上のようにします。制限3は「標準ライブラリのインポート/インクルード」を免除するため、これらの56文字はカウントしません。

プログラムの残りの部分は、print引数の長いリストで呼び出して、文字列に変換し、順番に出力します。引数は次のとおりです。

  1. 1from 2/2:除算Fixnum#/
    . from ?.:リテラルの1文字の文字列
  2. 6from 9-3:減算Fixnum#-
  3. 1from 3&5:ビット単位およびFixnum#&
    • 解釈5によって、私は3再び使用するかもしれません。
  4. 8from 2*4:乗算Fixnum#*
  5. 0from 2^2:ビット単位の排他的OR Fixnum#^
  6. 3from 7%4:モジュラスFixnum#%
  7. 3from 55>>4:右シフトFixnum#>>
  8. 9from 5+4Fixnum#+を追加
  9. 8from 2<<2:左シフトFixnum#<<
  10. 8from -~7:補数の否定Fixnum#-@ Fixnum#〜
    • 減算Fixnum#-と否定Fixnum#-@は異なる方法です。
  11. 7from 5|2:ビット単位またはFixnum#|
  12. 4from 2**2:べき乗Fixnum#**
  13. 9from (2r+2+5).to_i:合理的な追加Rational#+ Rational#to_i
    • 解釈2では、Fixnum#+Rational#+は異なる方法です。どちらも番号を追加しますが、左の番号の種類が異なるため、実装が異なります。
    • のような合理的なリテラル2rは、Ruby 2.1で新しく追加されました。Rational#+2r+2呼び出し、別の有理数を返します。Rational#+を再度呼び出します。2r+2+5
    • Rubyはのような有理数とのような2/1浮動小数点数を出力し2.0ます。これを修正するために、整数に変換します。to_iはゼロに丸め、ceilは切り上げ、floorは切り捨てます。
  14. 8from (2.2+5).ceil:floatの追加Float#+ Float#ceil
    • 解釈1により、括弧()とドットを.再び使用できます。
  15. 9from (55r/5-2).floor:合理的な除算と減算Rational#/ Rational#-Rational#floor
  16. 4from (2.2*2).to_i:浮動小数点乗算Float#* Float#to_i
  17. 8from (2r*2*2).ceil:有理乗算Rational#* Rational#ceil
  18. 4from (2.2**2).floor:有理累乗法Rational#**
  19. 8from 2.to_bn<<2:OpenSSLの大きな数字の左シフトFixnum#to_bn OpenSSL :: BN#<<
  20. 2from __LINE__:現在の行番号のマジック定数
  21. 0from $<.to_i:標準入力IO#to_iのファイル記述子
  22. 4from IO::LOCK_NB:非ブロックファイルロックのフラグ
    • これは、システムに依存する多くの定数の最初のものです。OpenBSDには4があります。
    • 解釈4により、を使用できなくなりますIO。解釈7により、値4の定数は使用できなくなります。
  23. 5from Errno::EIO::Errno:入出力エラーの番号
  24. 8from File::APPEND:ファイルに追加するフラグ
    • これは解釈4の抜け穴です。使用することはできませんがIOFile定数を継承するIOためFile::APPEND、取得する方法は異なりますIO::APPEND
  25. 6from 'aaaaaa'.size:文字列の長さString#size
  26. 8from ?a.encoding.name.sub(/\D+/,''):エンコーディングの名前の一部String#encoding Encoding#name String#sub
    • 解釈6では、文字列引用符を再度使用できます。
    • Ruby 2.0以降、デフォルトのエンコーディングはUTF-8です。名前を「UTF-8」とし、「UTF-」に一致する/ \ D + /を空の文字列に置き換えます。これにより、「8」が生成されます。
  27. 3from %w[a a a].size:配列の長さArray#size
  28. 4from %w[a b c d].to_set.size:set Array#to_set Set#sizeの要素数
  29. 3from %w[a a a].count:すべての要素を数えるArray#count
    • Array#sizeArray#countの違いは、後者がオプションの引数を使用して、カウントする要素を選択することです。引数を渡さないので、すべての要素をカウントします。
  30. 6from Socket::AF_NS:NSアドレスファミリの番号
  31. 5from Date.jd(Date::ITALY).wday:1582年10月15日金曜日の平日、イタリアがグレゴリオ暦に切り替えたときDate :: jd Date#wday
  32. 6from *Digest::MD5.digest(?j).scan(/\d/): "j"のバイナリMD5ダイジェストの最初のASCII数字Digest :: MD5 :: digest String#scan
    • String#scanは、一致したすべての配列を返します。*の引数として配列要素を通過しますprint。この配列は["6"]です。
  33. 3from Set[?a,?b,?c].count:すべての要素をカウントSet :: [] Enumerable#count
    • 解釈2では、Array#countEnumerable#countは異なるメソッドです。
  34. 8from SignalException.new('FPE').signo:SIGFPE クラスの#new SignalException#signo
  35. 1from Float::ROUNDS:丸めモード、ここでは最近傍への丸めの場合は1
  36. 1from begin(newline)exit false(newline)rescue Object(newline)$!.status(newline)end:失敗の終了ステータス
    • これはと同じ値ですSystemExit.new(false).statusが、解釈3により、Class#newを呼び出すことはできません。代わりに、SystemExitを上げて救助します。
  37. 7from Process::RLIMIT_NPROC:1ユーザーのプロセス数のリソース制限の数
  38. 7from :aaaaaaa.size:シンボルの長さSymbol#size
  39. 2from Prime.first:最初の素数Enumerable#first
  40. 0from ?/.next:「?」の後の次の文字列 文字列#次
  41. 3from {a:p,b:p,c:p}.size:ハッシュの長さHash#size String#p
  42. 0from STDIN.lineno:標準入力IO#linenoの現在の行番号
    • 解釈8では、再利用できません$<。を使用しますSTDIN。違いは$<、グローバル変数とSTDIN定数であるということです。プログラムは$<別の入力に設定できますが、STDIN常に元の値です$<
  43. 3from ?a.crypt('at')[/\d/]:暗号化されたパスワードの最初のASCII数字String#crypt String#[]
    • crypt()関数が異なるシステムでは、異なる結果が得られます。
  44. 0from {a: :a}.find_index([:a,:a]):最初のキーのインデックス:a、ハッシュの値:a Enumerable#find_index
    • Array#find_indexArray#indexのエイリアスであるため、配列ではなくハッシュを使用します。これはまもなく使用する予定です。
  45. 9from /b/=~'aaaaaaaaab':文字列が/ b /に一致するインデックスRegexp#=〜
  46. 1from [?a,?b].index(?b):配列Array#indexの最初の「b」のインデックス
  47. 7from :aaaaaaab=~/b/:シンボルが/ b /と一致するインデックスSymbol#=〜
  48. 9from ?\t.ord:タブ "\ t"のASCII値String#ord
  49. 8from 'aaaaaaaab'=~/b/:文字列が/ b /に一致するインデックスString#=〜
    • 解釈2では、Regexp#=〜String#=〜は異なる方法です。
  50. 0from open(?/).pos:ルートディレクトリ「/」をファイルとして開いた後のファイル内の位置Kernel#open IO#pos
  51. 5from 'aaaaab'.index(?b):文字列String#indexの最初の「b」のインデックス
  52. 7from ?\a.bytes{|b|break b}:アラートのASCII値 "\ a" String#bytes
    • これは、「\ a」のバイトを繰り返し処理しますが、最初のバイトを返すことでループを中断します。
  53. 6from 'aaaaaaa'.rindex(?a):文字列String#rindexの最後の "a"のインデックス
  54. 2from %w[a a].map.size:配列からマップする列挙子のサイズArray#map Enumerator#size

印象的!とにかく、あなたの解釈のほとんどは規則に沿っています。1.呼び出し、逆参照、およびアクセス演算子が制限されることを意図していなかったため、「数学、ブール、ビット単位、および文字列」演算子と言いました。2.ルール6でカバーされています。3.通常は演算子であるため、他の言語ではnewの再利用は問題ありません。コンストラクタ(組み込み関数)を呼び出すため、同じクラスで再利用することはできません。Rubyではどうですか?new本当にいつも同じimlpementationを呼び出すか、サブクラスでオーバーライドされましたか?[ctd。]
マーティン・エンダー

4. Rubyで例外を作成した場合は問題ありませんが、スポーツマンシップに感謝します。;)5.および6.いいえ、そうではありません。そのため、一部のルールはそのままの形で記載されています。7.それは私が考えなかった良い微妙な点です。技術的には、同じ 8を参照していない場合は、両方を使用しても問題ありません。8.良い点は、組み込み変数については考えていませんでした。それが他の提出物を実質的に破っていないかどうかを確認し、ルール6を修正します。:)
マーティンエンダー

この回答でルール違反を見つけることができなかったため、受け入れました。しかし、私はあなたの答えに報酬を与えたいと思います。それは、挑戦が意図された方法によって実際に演じる、これまでで一番長いものですから。したがって、私はこの挑戦に報奨金を提供します。バウンティは7日間続きますが、「フェア」な方法であなたを打ち負かす答えが出てきたら、それに応じてバウンティを授与します。(もちろん、他の候補を自由に試してみてください;)。)それでいいことを願っています!
マーティンエンダー

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
「ヘブンは特に賢い何かをすることを強制されていません。」ええ、Ruby、Perl、そして通常の容疑者は1桁あたり15文字で本当に苦労することはないだろうと思っていましたが、C派生物やMathematicaなど、大きな標準ライブラリでより複雑な名前を持つもののためのスペースを残したかったのです。
マーティンエンダー

「それらが本当にエイリアスのみである場合、いいえ(使用できません)。」succおよびnextエイリアスです。
ドアノブ

1
1つ目はFixnumで呼び出され、2つ目はStringで呼び出されるため、同じメソッドとは見なされません。
histocrat

ああ、良い点。ただし、この質問には「以前の数字を生成したコードで使用した定数を参照してはならない」とも記載されており、$.2回使用しています。しかし、愛を得なければならない$....:D
ドアノブ

2

Golfscript、17桁

簡単な試み。Golfscriptには、英数字以外の1文字のビルトインが多数含まれている場合がありますが、全体として多くのビルトインは含まれていません。

".",                         # 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

Bash、65文字で5桁

私はこれをすぐに更新します!今のところ、を出力するだけで1.6180、数字は含まれていません。

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

説明

次のメソッドは、数字を生成するために使用されます。

1:の終了ステータス false

6:文字列の長さ

1:nl虐待

8:killシグナル番号

0:空の式の数値


1

Mathematica 9 8桁、86 83 78文字。

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

出力:

1.6180339

ああ、私はどこかで間違いを犯したことを知っていました。この場合、プレフィックス表記はまったく機能しないようです。ユニコードPiとDegreeを使用しても、機能するようです。
タリー

ええ、その#& '' []は入力の欠落からエラーを生成しますが、この形式では入力がなかったことを無視します。それでも、動作する場所で使用しないことを許しません。
タリー

1
THX。私は個人的には#& '' []が大好きでした(基本的にf [x] = xの2次導関数
タリー

(コメントを整理しました。)それ非常に良いことですが#、許可された数字に置き換えてダッシュの1つをドロップすることにより、おそらく文字を保存できます。
マーティンエンダー

このように考えると、将来の使用に備えてその数字を保存できます。
タリー

1

ジュリア-345文字の23桁(1桁あたり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値を直接使用することは許可しませんでした。1つの非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 ++ 1行あたり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;
}

リテラルは問題ありません(1桁の数字と同等ではないため)が、-演算子を再利用し続けます。また、行の長さについてコメントを数える方法も気に入っています。:D
マーティンエンダー

はい、それははるかによく見えますが1、aを生成するために使用しています0(これは1、黄金比で先に現れたため許可されません)。また、#define S(もう一方ではなく)をカウントする必要があります。これは、インクルードではなく、省略形のエイリアスを定義するだけです。
マーティンエンダー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.