連結カウント


29

あなたの課題は、書くことですNのあなたが最初に連結する際に、というようなコードのスニペットK ≥1一緒に、彼らは数を生み出すKをNが高いほど良い。キャッチは次のとおりです。スニペットで文字を複数回使用することはできません。

ルール

  • 1つのスニペットで同じ文字を複数回使用できます。
  • これらのスニペットは、スキップせずに、提示された順序で連結する必要があります。
  • 少なくとも2つのスニペットを作成する必要があります。
  • すべてのスニペットは同じ言語である必要があります。
  • 注意:スニペット完全なプログラムや機能である必要はなく、独自に機能する必要もありません。-1Javaの有効なスニペットです。たとえば
  • 結果の連結はすべて、それぞれのK値を出力する必要があります。
  • 勝者は最高のN値を持つ人です。タイブレーカーは、バイト単位のプログラム全体の最短の長さです。

スニペットたと仮定しADxc123、と;l。次に:

  • AD 生産すべき 1
  • ADxc 生産すべき 2
  • ADxc123 生産すべき 3
  • ADxc123;l生成する必要があり4ます。

このプログラムのスコアは4です。


4
それらはスニペットでなければならないので、スタックベースの言語では、数字をスタックにプッシュするだけですよね?
完全に人間の

完全に人間の質問に追加するために、スタックベースの言語では、スタックの最上位が重要な唯一の価値ですか?つまり、dcの最初の2つのスニペットは1「2 」ですか?
brhfl

@totallyhumanいいえ。スタックベースの環境では、スタックに複数の値がある場合、要求された1つの整数ではなく、複数の値を「生成」します。
コナーオブライエン

@brhfl上記を参照してください。
コナーオブライエン

@ ConorO'Brienスタックの最上部のみを出力と見なすことができますか?「そうでなければ、暗黙のIOのないスタックベースの言語では事実上不可能です
...-完全に人間の

回答:


10

Python 3、1 112 056スニペット、4 383 854バイト

これは、@ WheatWizardのPython 2 answerに非常に似ています。投稿する少し前にこの作業を始めましたが、非ASCII文字と長い行に関するPythonの癖を整理するには時間がかかりました。Pythonは一度に8191バイトの行を読み取り、それらの8191バイトにマルチバイト文字の一部しか含まれていない場合、PythonはSyntaxErrorをスローすることを発見しました。

最初のスニペットは、チューリングの完全性のために最少(区別)文字からのエンコードを使用します。

exec('%c'%(111+1)+'%c'%(111+1+1+1)+'%c'%(11+11+11+11+11+11+11+11+11+1+1+1+1+1+1)+'%c'%(11+11+11+11+11+11+11+11+11+11)+'%c'%(111+1+1+1+1+1)+'%c'%(11+11+11+1+1+1+1+1+1+1)+'%c'%(11+11+11+11+11+11+11+11+11+1+1+1+1+1+1+1+1+1)+'%c'%(11+11+11+11+11+11+11+11+11+1+1)+'%c'%(11+11+11+11+11+11+11+11+11+11)+'%c'%(11+11+11+1+1+1+1+1+1+1)+'%c'%(111)+'%c'%(111+1)+'%c'%(11+11+11+11+11+11+11+11+11+1+1)+'%c'%(11+11+11+11+11+11+11+11+11+11)+'%c'%(11+11+11+1+1+1+1+1+1+1)+'%c'%(11+11+11+11+11+11+11+11+1+1+1+1+1+1+1)+'%c'%(11+11+11+11+11+11+11+11+1+1+1+1+1+1+1)+'%c'%(11+11+11+11+11+11+11+11+11+1+1+1)+'%c'%(11+11+11+11+11+11+11+11+11+1+1+1+1+1+1)+'%c'%(11+11+11+11+11+11+11+11+11+1+1+1+1+1+1+1+1+1)+'%c'%(11+11+11+11+11+11+11+11+11+1+1)+'%c'%(11+11+11+11+11+11+11+11+1+1+1+1+1+1+1)+'%c'%(11+11+11+11+11+11+11+11+1+1+1+1+1+1+1)+'%c'%(11+11+11+1+1+1+1+1+1+1+1)+'%c'%(11+11+11+11+1+1)+'%c'%(111+1+1+1)+'%c'%(11+11+11+11+11+11+11+11+11+1+1)+'%c'%(11+11+11+11+11+11+11+11+1+1+1+1+1+1+1+1+1)+'%c'%(11+11+11+11+11+11+11+11+11+1)+'%c'%(11+11+11+1+1+1+1+1+1+1)+'%c'%(11+11+11+1+1+1+1+1+1+1+1)+'%c'%(11+11+11+1+1+1+1+1+1+1+1)+'%c'%(11+11+11+11+1)+'%c'%(11+11+11+11+1+1+1+1+1)+'%c'%(11+11+11+11+1+1+1+1+1+1)+'%c'%(11+11+11+11+11)+'%c'%(11+11+11+11+1+1+1+1)+'%c'%(11+11+11+1+1+1+1+1+1+1++++++++++1))

この怪物は、単に次の文字列を作成して実行します。

print(len(open(__file__).read())-1260)

次のスニペットはすべて1文字の長さです。次の3つの文字は\n\r#。残りのすべてのUnicode文字(サロゲートを除く)は特定の順序で続くため、8191バイトの境界に揃えられます。

次のスクリプトは、入力のための適切なプログラム生成Kとの間の1および1112056を

j = 4
s = "exec('%c'%(111+1)+'%c'%(111+1+1+1)+'%c'%(11+11+11+11+11+11+11+11+11+1+1+1+1+1+1)+'%c'%(11+11+11+11+11+11+11+11+11+11)+'%c'%(111+1+1+1+1+1)+'%c'%(11+11+11+1+1+1+1+1+1+1)+'%c'%(11+11+11+11+11+11+11+11+11+1+1+1+1+1+1+1+1+1)+'%c'%(11+11+11+11+11+11+11+11+11+1+1)+'%c'%(11+11+11+11+11+11+11+11+11+11)+'%c'%(11+11+11+1+1+1+1+1+1+1)+'%c'%(111)+'%c'%(111+1)+'%c'%(11+11+11+11+11+11+11+11+11+1+1)+'%c'%(11+11+11+11+11+11+11+11+11+11)+'%c'%(11+11+11+1+1+1+1+1+1+1)+'%c'%(11+11+11+11+11+11+11+11+1+1+1+1+1+1+1)+'%c'%(11+11+11+11+11+11+11+11+1+1+1+1+1+1+1)+'%c'%(11+11+11+11+11+11+11+11+11+1+1+1)+'%c'%(11+11+11+11+11+11+11+11+11+1+1+1+1+1+1)+'%c'%(11+11+11+11+11+11+11+11+11+1+1+1+1+1+1+1+1+1)+'%c'%(11+11+11+11+11+11+11+11+11+1+1)+'%c'%(11+11+11+11+11+11+11+11+1+1+1+1+1+1+1)+'%c'%(11+11+11+11+11+11+11+11+1+1+1+1+1+1+1)+'%c'%(11+11+11+1+1+1+1+1+1+1+1)+'%c'%(11+11+11+11+1+1)+'%c'%(111+1+1+1)+'%c'%(11+11+11+11+11+11+11+11+11+1+1)+'%c'%(11+11+11+11+11+11+11+11+1+1+1+1+1+1+1+1+1)+'%c'%(11+11+11+11+11+11+11+11+11+1)+'%c'%(11+11+11+1+1+1+1+1+1+1)+'%c'%(11+11+11+1+1+1+1+1+1+1+1)+'%c'%(11+11+11+1+1+1+1+1+1+1+1)+'%c'%(11+11+11+11+1)+'%c'%(11+11+11+11+1+1+1+1+1)+'%c'%(11+11+11+11+1+1+1+1+1+1)+'%c'%(11+11+11+11+11)+'%c'%(11+11+11+11+1+1+1+1)+'%c'%(11+11+11+1+1+1+1+1+1+1++++++++++1))"
l = 1
c = \
        [
                None,
                [n for n in range(0x80) if chr(n) not in "\n\r#%'()+1cex"],
                [*range(0x80, 0x800)],
                [*range(0x800, 0xd800), *range(0xe000, 0x10000)],
                [*range(0x10000, 0x110000)]
        ]

k = int(input())
assert k in range(1, 1112057)
s += '\n\r#'[:k - 1]
k -= 4

while j:
                while k > 0 and c[j] and l + j < 8191:
                        s += chr(c[j].pop())
                        l += j
                        k -= 1
                if k < 1:
                        print(end = s)
                        break
                elif c[j] == []:
                        j -= 1
                else:
                        s += chr(c[8191 - l].pop())
                        print(end = s)
                        k -= 1
                        s = ''
                        l = 0

4
負けたことはありますか?
パトリックロバーツ

256点以上を獲得した方法について私は混乱しています。異なるUnicode文字は異なる文字ですか?もしそうなら、発音区別記号の組み合わせを使用して無限のスコアを取得しないのはなぜですか?
小麦ウィザード


その定義により、発音区別記号を組み合わせてより高いスコアを取得できるようです。
小麦ウィザード

@WheatWizardいいえ、文字と発音区別符号の組み合わせは2つのUnicode文字です。
デニス

13

Perl 5、50、091 151個のスニペット

最初のスニペット:

use utf8; print length A

2〜26番目のスニペット:BZ

27〜46番目のスニペット:az、「長さ」の文字を除く

47〜56番目のスニペット:09

57番目のスニペット: _

残りのスニペットは、Perlが「単語」文字と見なす50,105個の個々のUnicode文字であり、最初のスニペットの14個の異なる単語文字を任意の順序で除外します。

まあ、それはいい考えでしたが、一定の長さの後、Perlが "identifier too long"エラーを与えることがわかりました。これは、Perlで消化できる最長の結合プログラムです。

use utf8; print length A012345679BCDEFGHIJKLMNOPQRSTUVWXYZ_abcdjkmoqsvwxyzĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľĿŀŁłŃńŅņŇňʼnŊŋŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞşŠšŢţ

perldiagのマニュアルページには、「Perlの将来のバージョンはこれらのarbitrary意的な制限を排除する可能性が高い」と書かれていますが、私のPerl 5.18はそうしていません。

説明:

非厳密モードでは、Perl 5は引用符で囲まれていない単語文字列を「ベアワード」として解釈し、基本的にそれらを自動的に引用します。通常は回避するのが最善ですが、ここで確実に役立ちます!


4
あなたのa-zスニペットは、最も可能性の高いあなたの最初のスニペットから文字を使用します。
ジョナサンフレッチ

はい、確かにありがとう。一定。
ショーン

ゼリー、pyth、など- -この動作を持っている私は、あなたが「ショーケース」様の答え、(エキソ)langsほぼすべてのために作ることを示唆している
ロッド

「ショーケースのような答え」の意味がわかりません。
ショーン

1
@Sean Plentyはesolangs.orgで見つけることができます。このアプローチは動作するために完全な理解を必要としないため、サイトから必要なものを学ぶことができます。さらに、多くの非エソランがこの動作を示します。たとえば、TI-BASICの最初のスニペットはになりますlength("length(
Khuldraeseth na'Barya

10

Python 2、スコア32

for r in range(32):locals()[''.join(map(chr,range(65,66+r)[:26]+range(117,92+r)))]=r+1
print A

その後のスニペットではBCD、... YZuvwxyz

劇的な皮肉なことに、Python 3はUnicode識別子をサポートしているため、このトリックを使用すると非常にばかげたものになりますがprint、括弧なしでは不可能です。識別子に数字を詰め込むこともできますが、このアプローチはもっと絞り出すのにとても楽しいとは思いません。

オンラインでお試しください!

Python 2、スコア18、チートyが少ない

print 0x10-1&0x1
print 0x10-1&0x12
print 0x10-1&0x123
print 0x10-1&0x1234
print 0x10-1&0x12345
print 0x10-1&0x123456
print 0x10-1&0x1234567
print 0x10-1&0x12345678
print 0x10-1&0x123456789
print 0x10-1&0x123456789A
print 0x10-1&0x123456789Ab
print 0x10-1&0x123456789Abc
print 0x10-1&0x123456789Abcd
print 0x10-1&0x123456789AbcdE
print 0x10-1&0x123456789AbcdEf
print 0x10-1&0x123456789AbcdEf^((()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==()))
print 0x10-1&0x123456789AbcdEf^((()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==()))|[[[]]>[]][[]>[]]
print 0x10-1&0x123456789AbcdEf^((()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==())+(()==()))|[[[]]>[]][[]>[]]<<False**False

オンラインでお試しください!


10

JavaScript(ES6、V8 6.x)、52 50298 119526 119638 119683 128781スニペット、88 149147 575179 575631 576121 612789バイト

さらに下にあるのは、完全なプログラムを生成し、評価し、ファイルのダウンロードリンクを作成するスタックスニペットです。新しいスニペットは、新しいバージョンのJavaScriptが新しい有効な識別子を言語に追加する新しいバージョンのJavaScriptによってサポートされるため、より良い回答を生成し続けます。

ASCIIのみを使用する

console.log(new Proxy({},{get:(n,{length:e})=>e>>(e/e)}).nn$$00112233445566778899AABBCCDDEEFFGGHHIIJJKKLLMMNNOOQQRRSSTTUUVVWWXXYYZZ__aabbccddffiijjkkmmppqqssuuvvzz)

説明

これは、メタプログラミングの技術を使用してProxy有効にするGETハンドラトラップを識別子のを返す、文字列としてオブジェクトとアクセスにプロパティ名をlength / 2その値としてを。

で始まる最初のスニペットではnew Proxy({},{get:(n,{length:e})=>e>>(e/e)}).nn、追加されるスニペットが追加されるたびに、それぞれのコードポイントが2バイトutf-16文字に対して2回、4バイトutf-16文字に対して1回確認length2れることにより、識別子の文字列が増加します.repeat()

JavaScriptの識別子

ECMAScriptの仕様IdentifierName以下の文法で定義されています。

IdentifierName::
  IdentifierStart
  IdentifierName IdentifierPart

IdentifierStart::
  UnicodeIDStart
  $
  _
  \UnicodeEscapeSequence

IdentifierPart::
  UnicodeIDContinue
  $
  _
  \UnicodeEscapeSequence
  <ZWNJ>
  <ZWJ>

UnicodeIDStart::
  any Unicode code point with the Unicode property “ID_Start”

UnicodeIDContinue::
  any Unicode code point with the Unicode property “ID_Continue”

答えを生成する

最初に「ID_Continue」Unicodeプロパティを使用して、完全な回答を生成するNode.jsスクリプトを作成しました。これは、単純なクライアント側のスクリプトでeval()、有効な文字をテストするためにナイーブを使用し、代わりにすべてのUnicodeコードポイントを反復処理します。

// first snippet
let answer = 'new Proxy({},{get:(n,{length:e})=>e>>(e/e)}).nn'

const used = Array.from(
  answer,
  c => c.codePointAt(0)
).sort(
  (a, b) => a - b
)

// create a O(1) lookup table for used characters in first snippet
const usedSet = Array.from(
  { length: Math.max(...used) + 1 }
)

for (const codePoint of used) {
  usedSet[codePoint] = true
}

// equal to 1 for first snippet
let snippets = eval(answer)
let identifier = ''

for (let codePoint = 0, length = 0x110000; codePoint < length; codePoint++) {
  const character = String.fromCodePoint(codePoint)

  // if unused
  if (usedSet[codePoint] === undefined) {
    // if valid `IdentifierPart`
    try {
      eval(`{let _${character}$}`)
    } catch (error) {
      // console.log(character)
      continue
    }

    // repeat so that `snippet.length === 2`
    identifier += character.repeat(2 / character.length)
    snippets++
  }
}

// number of snippets generated
console.log(`snippets: ${snippets}`)

const program = `console.log(${answer + identifier})`

// output of program to validate with
eval(program)

// download link to check number of bytes used
dl.href = URL.createObjectURL(new Blob([program], { type: 'text/javascript' }))
<a id=dl download=answer.js>Click to Download</a>

実行stat -f%z answer.jsするとバイト数は612802にconsole.log(なりますが、13バイトを差し引い)て実際の送信をラップします。

エンコーディング

ソースはutf-8として保存され、回答の膨大なバイトカウントに反映されます。これは、Node.jsがutf-8でエンコードされたソースファイルのみを実行できるためです。

JavaScriptはutf-16エンコーディングで文字列を内部に保存するため、JavaScriptで返される文字列「文字の長さ」は、実際にはutf-16でエンコードされた文字列のバイト数のちょうど半分です。


たとえば、のx代わりにを使用$して、余分な識別子文字として解放しませんか?
ニール

@Neil少し前に気づいた。私は現在、119519のスコアになるはずの回答に取り組んでいます。今のところ、エンコーディングを適切にトラバースするだけの問題です。
パトリックロバーツ

たまたま横になっているSpidermonkey JSシェルのコピーを試しました。50466個の異なる識別子文字のみをサポートしていました。(最初のスニペットで12を使用しているため、スコアは50455です。)
ニール

さて、大幅なオーバーホールを行わずに、スコアは50297でなければならないようです。今すぐ答えを書きます。明らかに、ユニコード10.0.0仕様を使用したES6 +には128,096個のサポートされる識別子がありますが、そのうち、言及した数値の文字列の長さは1のみです。それは私がハングアップしていたことです。
パトリックロバーツ

1
@PatrickRoberts申し訳ありませんが、これを読んでいる間、最後のテキストがテキストを消すまですべてのテキストを想定していました。私の目はその部分をスキップしたに違いない。
コナーオブライエン

6

Python 2、スコア6 10

pizzapants184のおかげで+3 WheatWizardの
おかげで+1

4/4
*2
-~0
+1
|5
^3
&776%6
and 8
if[]else[9][9>9]
.__xor__((""=="").__xor__((""=="")<<(""=="")))

オンラインでお試しください!


あなたが変更した場合print int(True)だけに4/4、あなたが追加することができand 7、あなたは番号を印刷する必要がないことを考えると、7のために単に「プロデュース」は
pizzapants184


を追加する&2と、の&優先順位が高いため、スコアが1増加しますが^、なんとか2にする必要があります。(使用できます[[]==[]][[]<[]]<<[[]==[]][[]<[]]
小麦ウィザード

1
@ pizzapants184かかわらず、10のためにこの作品
小麦ウィザード

1
@ pizzapants184はとord競合していましたがand、それを修正しました
ロッド

6

TI-Basic(83シリーズ、OSバージョン1.15以降)、スコア:17 18 19 24

(タイブレーカー:53バイト。)

いつものように文字列の長さを乱用することで非常に大きなスコアを得ることができます:(@Scroobleが指摘するように)で始まり、末尾に単一トークンスニペットを追加し続けます。TI-Basicには700を超えるものがあるため、実際にはかなりうまく機能します。しかし、別のアプローチがあります:length("A length("length(

int(log(11
2
3
4
5
6
7
8
9
0
Xmax
Ymax
nMax
abs(Xmin
Ymin
ππ
eee
³
²
₁₀^(₁₀^(X
+e^(⁻e^(Y))))
/√(sub(Z!
°
randrandrand

TI-基本は、(例えば)ので、トークン化されていることを注意e^(コマンドは、文字のいずれかを使用していませんe^(

sub(コマンドの文書化されていない機能に依存しています。部分文字列の検索に加えて、数値を100で除算するためにも使用できます。

これは、作品、私たちがそれを前提とすることができます新鮮な電卓、上で実行している場合はXYZ電卓はラジアンモードであること、そしてことを、ウィンドウの変数は、その標準値に設定されていることを、すべてゼロでrand初の3つの出力は約になります0.9430.9080.146


4

PowerShell、25バイト、スコア5

' '.count*2+!""-(-1)|%{5}

スニペット1:' '.count出力1。これは.count、文字列を1つだけ使用しているため、文字列を取得することでこれを行います。オンラインでお試しください!

スニペット2:*2出力は、前のスニペットから2取得1して2倍するためです。オンラインで試してください!

スニペット3:空の文字列のブール値ではなくブール値を追加して+!""出力3します。これにより、暗黙的に空の文字列が$trueにキャストされ1ます。これは再び暗黙的ににキャストされるため、1つ追加しますオンラインで試してみてください!

スニペット4:負の値を単純に差し引くことで-(-1)出力4ますオンラインで試してみてください!

スニペット5:前の番号をループに入れて|%{5}出力5し、そのループの各反復(入力番号が1つしかないため1つだけです)出力5 オンラインで試してみてください!

考え出すための代替手段4と考え出す巧妙な方法のためにヤンに感謝し5ます。


どの程度' '.count*2+!""-(-1)|%{5}5のスコアのために?
1

@Jan Oh、そうですね、実際には、$_inside を使用する必要はありません|%{ }。ありがとう!
AdmBorkBork

4

C、10個のスニペット、45バイト

sizeof(char)              // sizeof(char) = 1
<<9/9                     // Multiply by two.
|1                        // 2 or 1 = 3
,4                        // Discard previous expression, return 4.
+!!8                      // Add one.
^3                        // 5 xor 3 = 6
&66                       // 3 and 66 = 2, 5 xor 2 = 7 (& has higher precedence)
??'0xF                    // Trigraph for '^'. 7 xor 15 = 8
-~-2                      // ~-2 = 1, 7 xor 14 = 9
*57%5                     // 1*57%5 = 2, 7 xor 13 = 10

オンラインでお試しください!


4

MATL、スコア8 15、64の 123バイト

rg             % 1 Random number, make boolean (1)
Q              % 2 Increment
Yq             % 3 Nth prime
a,E]           % 4 any (convert to boolean 1. Do twice: Multiply by 2
T+             % 5 Add True
F~_-           % 6 Subtract negative (not(false)) = 6-(-1)
:sI/           % 7 Range 1:6, sum (21), divide by 3
A8*            % 8 All elements (True). Multiply by 8
d9             % 9 Clear stack, push 9
x10            % 10 Clear stack, push 10
WBPf           % 11 Raise 2^10. Convert to binary [1 0 ... 0], flip [0 0 ... 1]. Find
23ZP           % 12 Push 23, and calculate the distance between 11 and 23
yyyyyyyyyyyyyyyyyyyyyyyyhhhhhhhhhhhhhhhhhhhhhhhhz  % 13. Duplicate and count elements
tttttttttttttvvvvvvvvvvvn  % 14 Duplicate and count elements
OOOOOOOOOOOOOON&           % 15 Add bunch of zeros, output size of stack
  • Luis Mendoの助けを借りて12に到達しました!スニペット7 11,23ZPでの変更3とともに、使用することが彼のアイデアでしたI
  • ルイスの助けを借りて15に到達しました。OO...N&彼のアイデアでした。

もっと来て。私はMATLの機能を心から知らないので、ドキュメントを行き来する必要がありました... :)

オンラインでお試しください!


ああ、5Yyいいです!私はすでにY2番目の素数を取得するために3で使用します:(
Stewie Griffin

でもう1つ入手できると思いますOOOOOOON&。あなたが他の人を追加する場合、これはおそらくで、最後でなければなりません&
ルイスMendo

ルイス、ありがとう!また、なぜ私はすっごく多くを必要としたのyyyyyyyy...ですか?y12倍にするには24 倍になりましたが...?
スティーヴィーグリフィン

@Stewie複製している要素の半分がによって生成された空の配列だからだと思いますd。私は今モバイルにいX#ますが、スタックをデバッグ印刷しようとしています
ルイスメンドー


2

ゼリー、253バイト、スコア250

L}“L

後続の1文字のスニペット:

¡¢£¤¥¦©¬®µ½¿€ÆÇÐÑ×ØŒÞßæçðıȷñ÷øœþ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|~¶°¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ƁƇƊƑƓƘⱮƝƤƬƲȤɓƈɗƒɠɦƙɱɲƥʠɼʂƭʋȥẠḄḌẸḤỊḲḶṂṆỌṚṢṬỤṾẈỴẒȦḂĊḊĖḞĠḢİĿṀṄȮṖṘṠṪẆẊẎŻạḅḍẹḥịḳḷṃṇọṛṣṭụṿẉỵẓȧḃċḋėḟġḣŀṁṅȯṗṙṡṫẇẋẏż

注:に置き換えることもでき\nます。これらはJellyのコードページの同じバイトです。

これらのスニペットをすべて追加したら、2文字のスニペットを追加できます”‘

デニスのおかげで+1 。

オンラインでお試しください!


2

言語、1 112 064スニペット

N 番目のスニペットから成る2 3N-1の繰り返しN 番目含む非サロゲートUnicode文字まで、および1 112 064 番目と現在のユニコード規格の最後の非サロゲート文字。

出力は、単純化のために単項形式(数字としてヌルバイトを使用)です。10進数も可能ですが、プログラムがさらに長くなります。単項式を使用すると、最初のプログラムをテストできます。

以下のためのn = 1、我々が得る4回の繰り返しU + 0000。これは.、nullバイトを1つ出力するbrainfuckプログラムと同等です。

以下のために、N = 2、我々は、取得し32回の繰り返しU + 0001の、合計36の文字。これは..、2つのNULLバイトを出力するbrainfuckプログラムと同等です。

以下のためのn = 3、我々が得る256回の繰り返しU + 0002の合計のため、292個の文字を。これは...、nullバイトを3つ出力するbrainfuckプログラムと同等です。

など、n = 1 112 064まで


同等のものを10進数で実証または議論できますか?単項出力に関するコンセンサスについては確信がありませんが、少なくとも10進数の概念を欠いている言語のためだと思います
Conor O'Brien

10進数の概念を欠いている言語向けだと思います。はい、そしてLenguageには10進数のI / Oがないので、それは問題ないと思いました。とにかく、nの'+'*(48 + d) +'.>' 10進数ごとにBrainfuckプログラムをエンコードすると、同じスコアが得られます。説明するのはかなり難しいです。
デニス

そうですか。同じことだけ長く。
コナーオブライエン

2

BASIC(ZX Spectrum)、スコア244(新しいスコア247)[これは不正行為ですか?]

スニペット1:

2356 PRINT PEEK (PEEK 23635+256*PEEK 23636+2)+256*PEEK (PEEK 23635+256*PEEK 23636+3)-56-66

スニペット2: :

スニペット3: REM

スニペット4-244:スニペット1、2、および3にないすべての文字を使用する単一文字スニペット。

説明

キャラクターズ

SpectrumではPRINT、単一の文字(コード245)です。1つの用途をスニペット11種類の文字:2356+-*()PRINTおよびPEEKスペースは文字の一部であるとして何を参照してくださいPRINTPEEKスペース自体が使用されていないので、。これらはコードに存在する唯一の数字であるため、行番号2356を指定することにしました。

文字13および14は使用できません。ことを意味スニペット2から244のために残さ243個の文字で始まる、がある:REMエラーが発生するか、他の何かをするだろうコードを避けるために。

使い方

これが、この答えが本によるものかどうかわからない理由です。

23635は、16ビットシステム変数PROGのメモリ位置で、LHとして保存されます。(値は通常23755です。しかし、間違った結果が発生する場合は別として、この番号を直接使用すると、コードが短くなりますが、余分な数字がかかります。)PROGの値はメモリの場所ですプログラム自体が保存されている場所。最初の2バイトはHLとして保存されている行番号で、次の2バイトはLHとして保存されている行の長さです。それはプログラムが独自の行の長さを調べる方法ですので、適切なものを引く必要があります

キャラクターを保存する

数字の格納方法を考慮すると、スニペット1が1を生成するように、行が-114で終わっている可能性があります。しかし、余分な数字を使用したくなかったため、代わりに2桁の数字を2つ削除しました。 122へ。56と66はうまくいきました。

コードは、すべてのネストとPROG(PEEK 23635+256*PEEK 23636)の値の2回の計算で少しbitいです。しかし、保存してから保存した値を使用すると、余分な文字/スニペットがかかります-行は次のように開始できます

2356 LET p=PEEK 23635+256*PEEK 23636: PRINT PEEK (s+2)...

4つの追加の文字を使用している:LETp=:

たぶん、これを設計して、すべての数字が1桁のみを使用して3つのスニペットを獲得する数字から計算されるようにします。

編集:

新しいスニペット1は次のとおりです(これは、Spectrum上で長い単一行がラップ表示される方法です。したがって、コードをテストする場合は、正しく入力したかどうかを確認するのに役立ちます)。

1111 PRINT +PEEK (PEEK (11111+11
111+1111+(1+1+1)*(111-11)+1+1)+(
111+111+11+11+11+1)*PEEK (11111+
11111+1111+(1+1+1)*(111+1-11))+1
+1)+(111+111+11+11+11+1)*PEEK (P
EEK (11111+11111+1111+(1+1+1)*(1
11-11)+1+1)+(111+111+11+11+11+1)
*PEEK (11111+11111+1111+(1+1+1)*
(111+1-11))+1+1+1)-111-111-111-1
11-111-111

を避けることで別のスニペットを得ることができ+、ちょうど間に合わせます-。私はそれを試すつもりはありません、これは試練の十分でした。


2

クライン011、9スニペット

スニペット1

!@1!aaaaaaaaaaaaaaaaaaaaa/a

オンラインでお試しください!

スニペット2

2((2|bbb0b2bbbb4bbbbbbbb

オンラインでお試しください!

スニペット3


c\*3ccccccccccccccccccccc\ccccccccc3c6cccc9
c\

オンラインでお試しください!

スニペット4

ddddddddddddddddddddddd>$d:d:++-$:+:+++$:?:-$-+++

オンラインでお試しください!

スニペット5

ee

オンラインでお試しください!

スニペット6

fff

オンラインでお試しください!

スニペット7

ggggg

オンラインでお試しください!

スニペット8

hh

オンラインでお試しください!

スニペット9

iiiii

オンラインでお試しください!

説明

これはクラインにとって本当に楽しいチャレンジでした。クラインのユニークなトポロジーにより、多くの興味深いことができます。お気づきかもしれませんが、回答5-9はコードにフィラーを追加するだけで(Kleinでは何もしないのでフィラーとして使用します)、境界ボックスを広げます。これにより、Kleinの一意のトポロジにより、IPはコードの初期部分を通る別のパスを取ります。

後で詳細に説明しますが、ここでは、すべての文字を.sに置き換えたプログラムの理解しやすいバージョンを示します。

!@1!...................../.2((2|...0.2....4........
.\*3.....................\.........3.6....9
.\.......................>$.:.:++-$:+:+++$:?:-$-+++.................

オンラインでお試しください!


2

> <>、スコア:無限大 1,112,064-6 = 1,112,058

スニペット1(6バイト)

"l4-n;

このスニペットは、;の後の文字数を出力します。一を足す。これは、ように拡張することができます無限の 1文字ごとのスニペットの非常に大きな金額を。簡単なグーグルは、1,112,064個のユニコード文字があり、すでに使用した6文字を差し引いていることを教えてくれます。

試してみてください それを オンライン


1

R、スコア:79

功績ショーンのPerlの答えインスピレーションを得るため。これは、Rインタープリターのいくつかの癖を乱用します。

最初のスニペット:

nchar(scan(,""))
a

後続のスニペットは次の文字です:

bdefgijklmopqtuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789`~!@$%^&*_+|\[]{}:?><;

オンラインでお試しください!

このscan関数は、""デフォルトのファイルからデータを読み取りますstdin()

のドキュメントは次のstdin()ことを示しています。

Rがファイルからスクリプトを読み取る場合、ファイルは「コンソール」です。これは、インラインデータを許可するための従来の使用方法です(例については、「Rの概要」を参照)。

したがって、後続のデータはファイルになります。これは簡単に拡張でき、複数の異なるエンコーディングで機能します。


1

Pyke、256バイト、スコア254

これらは空白バイトで区切られているため、スペースで区切られた実際のバイトの16進コードであることに注意してください\x00

スニペットの開始:

6C 22 00

後続の1文字のスニペット:

01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63 64 65 66 67 68 69 6A 6B 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF

ここで試してみてください!


1

Java 8、7スニペット(19バイト)

1
*2
-~0
>4?4:4
|5
^3
7%7

ほんの始まり、それに取り組んでいきます。

ここで試してみてください。

説明:

括弧を追加すると、おそらく実行の優先順位がより明確になります。

((1*2)-~0)>4?4:4|(5^(37%7))
  • a*b:乗算ab
  • ~a-a-1
  • a>b?x:yif(a>b){ x }else{ y }
  • a|b:ビット-OR ab
  • a^b:ビットごとのXOR ab
  • a%baモジュロb

1

Python 2、110スニペット

完全なスニペットは次のとおりです。

print((((len(open(__file__).read())-44.))))

#	 !"$%&'*+,/012356789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^`bcghjkmqsuvwxyz{|}~

オンラインでお試しください!

最初のスニペットは

print((((len(open(__file__).read())-44.))))

そして、次の109個のスニペットは次の109バイトです。

Lynnが言うように、これはかなり「ごまかし」です。最初のスニペットはファイルを開き、その長さから44を減算します。その後、各スニペットは、プログラム全体のロジックを変更することなく、ファイルの長さに1を加算します。したがって、出力の結果が1増加します。


1

dc、スコア13、58バイト

I3%                   #I is the default input radix, 10, mod 3 yields 1
1+                    #Add one
2^2^2^Z               #2^8=256, Z pushes the number of digits to the stack
6*v                   #Square root of 18 = ~4.24, at precision 0 we get 4
c5                    #Start getting lazy, clear the stack and push 5
_F-E-                 #Subtract negative 15, then subtract 14
ss7                   #Lazy, 'drop' the value by storing it, push 7
SS8                   #Lazy, 'drop' the value by storing it, push 8
d::9                  #Lazy, 'drop' the value by storing it, push 9
;;kA                  #Recall element 9 from nonexistant array ; which is zero, set precision, push A (10)
iB                    #Set input radix to 10, push B (11)
oD                    #Set output radix to 11, push D (13, or 12 in base 11)
 4CCCCCCr/4C/CC/4/    #We have division and the digits 4 and C left, this might not be the optimal way to get us to 13 but it does the job

オンラインでお試しください!(注、TIOバージョンはf各スニペットの後にスタック全体を印刷するために追加し、各スニペットはスタックに単一の値のみを残すことを示します。また、最後のスニペットの先頭スペースを忘れてしまいましたが、それらは機能的には重要ではありません改行で区切られていますが、私のキャラクターの使用にはカウントされます)

スニペットを追加するたびに、スタックには目的の値と目的の値のみが残ります。12を打った後、私はスタックを食べる方法を使い果たしました。スタックをむさぼり食うので、早い段階で数学演算を使用しようとしましたが、数値が大きくなると、そのように管理するのが難しくなります。すべてを言い終えると、0の数字だけが残っており、スタックポップの方法はほとんどないので、13はほぼ限界に近づいていると思います。DCでこれを達成するための多くの類似した(そしておそらくより短い)方法があると確信しています。cygwinは、DCのほとんどのバージョンとは異なる方法で0〜9と混在するAFを処理し、cygwin 44C4r/CC 4//の最終スニペットで機能することに注意してください。


0

Pyth、124スニペット

l"x00x01x03x04x05x06x07x08
x0bx0c
x0ex0fx10x11x12x13x14x15x16x17x18x19x1ax1bx1cx1dx1ex1f !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijkmnopqrstuvwxyz{|}~x7f

オンラインでお試しください!

3つの印刷可能文字(x..)を使用してエスケープされた印刷不能文字。最初のスニペットの長さは3バイトで、その後のスニペットはすべて1バイトずつ長くなります。


0

Beatnik、22バイト、スコア20

K A
E
I
L
N
O
R
S
T
U
a
e
i
l
n
o
r
s
t
u

「スニペット」という単語を使用すると、スタックに値をプッシュできます。


0

オクターブ、スコア86

nnz n

に続く:

!$&()*+./0123456789:<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmopqrstuvwxy{|}~

これは、Octaveが関数名の後のすべてを文字列入力として扱うという事実を利用します。したがってnnz n、文字列内の非ゼロ要素の数を返します'n'。他の印刷可能なASCII文字を追加すると、86になります。',"%#動作しません。



0

ジュリア0.6、111217

次のスクリプトは、完全なプログラムを作成します。

A = "macro length(a);length(string(a))end;@length a"
B0 = join(([Char(x) for x in Iterators.flatten((0x000001:0x00d7ff, 0x00e000:0x10ffff)) if Base.isvalid(Char(x)) && Char(x) ∉ A && Base.isidentifier("a$(Char(x))") ]));
B = normalize_string(B0, stripmark=true, decompose=true);
B = join(unique(b for b in B))
while (n = search(B, '·')) > 0
    B = B[1:prevind(B,n)]*B[nextind(B,n):end]
end
while (n = search(B, '`')) > 0
    B = B[1:prevind(B,n)]*B[nextind(B,n):end]
end

open("concount.jl", "w") do f
    write(f, A)
    write(f, B)
end

説明

マクロ

 macro length(a);length(string(a))
 end
 @length a

その後に識別子で許可されているすべての個別のUnicode文字が続きisidentifierます。いくつかのdiacritialマークがカウントを混乱させるので、それらを削除しました。


0

TeX、スコア61(おそらく190)

最初のスニペット:

\def\len#1{\expandafter\glen\string#1=}
\def\glen#1{\tlen}
\def\tlen#1{\if#1=\let\tlen\end\number\count1\else\advance\count1by1\fi\tlen}
\count1=-1
\catcode33=11
\catcode34=11
\catcode36=11
\catcode37=11
\catcode'46=11
\catcode40=11
\catcode41=11
\catcode42=11
\catcode43=11
\catcode44=11
\catcode45=11
\catcode46=11
\catcode47=11
\catcode56=11
\catcode57=11
\catcode'72=11
\catcode'73=11
\catcode60=11
\catcode62=11
\catcode63=11
\catcode64=11
\catcode'133=11
\catcode'135=11
\catcode'136=11
\catcode'137=11
\catcode'140=11
\catcode124=11
\catcode126=11
\len\t

その他の60個のスニペット:任意の順序で、それぞれに1つの文字が含まれています

!"$%&()*+,-./:;<>?@[]^_`|~89ABCDEFGHIJKLMNOPQRSTUVWXYZhjkqwz

説明:\len、最後に呼び出され、制御シーケンスを文字列に変換します。各文字(を含む\)は、その文字列の1文字のトークンです。次に、\glenトークンをゴブルし\\tlen残りのトークンをカウントします。したがって、その制御シーケンスの長さを出力します(を含まない\)。

他のスニペットからの文字は、最初はちょうどである制御シーケンスを拡張し\tます。複数文字の制御シーケンスは文字のみで構成する必要がありますが、すべてカテゴリコード11が割り当てられているため(文字自体が最初のスニペットに表示されないようにASCIIコードを使用)、すべて文字としてカウントされます。

いくつかの文字に8進コードを使用することにしました'が、これには1 つのシンボルが必要でしたが、2桁の8と9を節約したため、1つのスニペットが得られました。もし必要がなければ、おそらくさらに数を得たかもしれません\expandafter

出力

可能な変更:出力が出力に入らず、代わりにコンソール出力とに出力\number\count1される\message{}ようにラップします。余分な文字はかかりません。.dvi.log

190

残念ながらTeXはUnicodeではなくASCIIで動作します(または、現在は動作しますか?)が、私のソリューションを拡張して、コード127-255の文字を含む129個の単一文字スニペットを含めることができます。おそらく32文字より前の文字もあります。32文字(スペース)は機能しませんでした。そうでなければ、スニペットにも入れました。最初のスニペットでは必要ありませんでした。もちろん、これらの追加文字はそれぞれ\catcode、最初のスニペットの文字に変換する必要があります。


0

ピップ、57バイト、スコア= 16

!u
2
RT9
#m
5
(EX3Y8)
7
y
A'<tab>
t
11
+o
-v
PI@`\...`@`..$`
"F"FB:4*4
Ok=k6

<tab>リテラルのタブ文字(ASCII 9)を表すことに注意してください。オンラインでお試しください!

各スニペットは、目的の数を出力する完全なプログラムです。それらのほとんどは、Pipプログラムの最後の式が自動印刷されるという原則に基づいて動作します。たとえば、スニペット5では、前のコードが評価されますが、重要な部分はのみ5です。これの例外は次のとおりです。

  • スニペット3はRT9(9の平方根)として単独で正常に動作しますが、スニペット2の後に来ると、実際には2RT9(9の2番目のルート)として解析されます。これはもちろん同じことです。
  • スニペット6は、e ^ 3の8番目の文字(0から始まる)を取得します。これはたまたま6ですが、数字8をy変数にヤンクします。次に、スニペット8はの値を出力しますy
  • スニペット12は、前のスニペットから11をo取得して追加します(1に事前初期化されています)。スニペット13はその結果を取り、減算しますv(-1に事前初期化されています)。
  • スニペット16は1、改行なしで出力します(Ok=kここでk=k、デフォルトの真理値1 に評価されます)6。次にautoprintsします。

他の興味深いもの:

  • スニペット14は、正規表現操作を使用14してpiの値から抽出します。
  • スニペット15は、文字列"F"を16進数から変換します。

0

Zsh、スコア> 50 000(1 112 046?)、16 +Σ(UTF-8コードポイント長)バイト

exec echo   $((${#:-$(<$0)}-33))
#

Zshはデフォルトでマルチバイトエンコーディングを処理します。基本スニペットには18の一意の文字があり、合計34です。他のすべてのコードポイント(nullバイトを保存)をこれに追加できます。私がこれを書いているとき、これらをテストするスクリプトは、コードポイント〜50 000、合計ファイルサイズ150K、約30スニペット/秒で実行されます。ここで自分で完全なテストスクリプトを実行します。後のコードポイントで開始するように調整することもできます。

オンラインで最初の2000スニペットをお試しください!

この手法を使用すると、さらに多くのスニペットが可能です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.