Verkettetes Zählen

29

Ihre Herausforderung besteht darin, N Codeausschnitte so zu schreiben, dass sie, wenn Sie das erste K ≥ 1 zusammenfügen, die Zahl K ergeben . Je höher N , desto besser. Hier ist der Haken: Sie dürfen keine Zeichen mehr als einmal in Ihren Snippets verwenden.

Regeln

  • Sie können dasselbe Zeichen in einem (und nur einem) Snippet mehrmals verwenden.
  • Diese Schnipsel müssen in der angegebenen Reihenfolge verkettet werden , ohne dass sie übersprungen werden.
  • Sie müssen mindestens zwei Ausschnitte schreiben.
  • Alle Snippets müssen in derselben Sprache sein.
  • Denken Sie daran: Snippets müssen weder vollständige Programme oder Funktionen sein, noch müssen sie eigenständig funktionieren. -1ist ein gültiges Java-Snippet, z
  • Alle resultierenden Verkettungen müssen den jeweiligen K- Wert ausgeben .
  • Der Gewinner ist die Person mit dem höchsten N- Wert. Tie-Breaker ist die kürzeste Gesamtprogrammlänge in Bytes.

Beispiel

Angenommen , Ihre Schnipsel waren AD, xc, 123, und ;l. Dann:

  • AD sollte produzieren 1
  • ADxc sollte produzieren 2
  • ADxc123 sollte produzieren 3
  • und ADxc123;lsollte produzieren 4.

Dieses Programm hätte eine Punktzahl von 4 .

Conor O'Brien
quelle
4
Da es sich in einer stapelbasierten Sprache um Schnipsel handeln muss, können die Zahlen einfach auf den Stapel verschoben werden, oder?
Totalhuman
In einer Stack-basierten Sprache ist Top-of-Stack der einzige Wert, der eine Rolle spielt. Das heißt, könnten die ersten beiden Ausschnitte in dc 1und `2` sein?
brhfl
@totallyhuman Ich würde nein sagen - in einer stapelbasierten Umgebung haben Sie, wenn Sie mehrere Werte auf dem Stapel hatten, mehr als einen Wert anstelle der angeforderten Ganzzahl "erzeugt".
Conor O'Brien
@brhfl Siehe oben.
Conor O'Brien
@ ConorO'Brien Könnte nur die Spitze des Stapels als Ausgabe betrachtet werden? Andernfalls ist es in einer Stack-basierten Sprache ohne implizites IO praktisch unmöglich ...
totalhuman

Antworten:

10

Python 3 , 1 112 056 Snippets, 4 383 854 Bytes

Dies ist der Antwort von @ WheatWizard auf Python 2 sehr ähnlich . Ich habe kurz vor der Veröffentlichung damit begonnen, aber das Aussortieren von Pythons Macken in Bezug auf Nicht-ASCII-Zeichen und lange Zeilen hat einige Zeit in Anspruch genommen. Ich habe festgestellt, dass Python Zeilen mit jeweils 8191 Bytes liest. Wenn diese 8191 Bytes nur einen Teil eines Mehrbytezeichens enthalten, gibt Python einen SyntaxError aus .

Das erste Snippet verwendet eine Kodierung aus den wenigsten (unterschiedlichen) Zeichen, um die Vollständigkeit zu überprüfen .

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))

Diese Monstrosität baut einfach den folgenden String auf und führt ihn aus.

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

Die folgenden Ausschnitte sind alle genau ein Zeichen lang. Die nächsten drei Zeichen sind \n, \rund #. Alle übrigen Unicode-Zeichen (außer Ersatzzeichen) folgen in einer bestimmten Reihenfolge, sodass sie an der 8191-Byte-Grenze ausgerichtet sind.

Das folgende Skript generiert die entsprechenden Programme für die Eingabe von k zwischen 1 und 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
Dennis
quelle
4
Verlierst du jemals?
Patrick Roberts
Ich bin verwirrt, wie Sie mehr als 256 Punkte erzielt haben. Sind verschiedene Unicode-Zeichen verschiedene Zeichen? Wenn ja, warum nicht kombinieren, um eine unendliche Punktzahl zu erhalten?
Weizen-Zauberer
@ WheatWizard Was ist ein Charakter?
Dennis
Anscheinend können Sie nach dieser Definition diakritische Zeichen kombinieren, um eine höhere Punktzahl zu erzielen.
Weizen-Assistent
@WheatWizard Nein, ein Buchstabe plus ein kombiniertes diakritisches Zeichen sind zwei Unicode-Zeichen.
Dennis
13

Perl 5, 50.091 151 Snippets

Erster Ausschnitt:

use utf8; print length A

2. bis 26. Schnipsel: BdurchZ

27. bis 46. Schnipsel: adurch z, ohne die Zeichen in "Länge"

47. bis 56. Schnipsel: 0durch9

57. Snippet: _

Die verbleibenden Ausschnitte sind die 50.105 einzelnen Unicode-Zeichen, die Perl als "Wort" -Zeichen ansieht, mit Ausnahme der 14 verschiedenen Wortzeichen im ursprünglichen Ausschnitt in beliebiger Reihenfolge.

Nun, es war ein netter Gedanke, aber es stellt sich heraus, dass Perl Ihnen nach einer bestimmten Länge den Fehler "Bezeichner zu lang" liefert. Dies ist das längste kombinierte Programm, mit dem ich Perl zum Verdauen bringen konnte:

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

Die perldiag-Handbuchseite besagt, dass "Zukünftige Versionen von Perl diese willkürlichen Einschränkungen wahrscheinlich beseitigen werden", aber mein Perl 5.18 hat dies nicht getan.

Erläuterung:

Im nicht strengen Modus interpretiert Perl 5 Zeichenfolgen ohne Anführungszeichen als "Barewords" und zitiert sie im Wesentlichen automatisch für Sie. Sie sind in der Regel am besten zu vermeiden, aber sie helfen hier sicher!

Sean
quelle
4
In Ihren a-zSnippets werden höchstwahrscheinlich Zeichen aus Ihrem ersten Snippet verwendet.
Jonathan Frech
Ja, danke. Fest.
Sean
Ich schlage vor, dass Sie eine "Schaufenster" -ähnliche Antwort geben, weil fast alle (exo) langs - Gelee, Pyth usw. - dieses Verhalten haben
Rod
Ich weiß nicht, was "showcase-like answer" bedeutet.
Sean
1
@Sean Plenty finden Sie auf esolangs.org. Da für diesen Ansatz kein gründliches Verständnis erforderlich ist, können Sie auf der Website erfahren, was Sie benötigen. Darüber hinaus weisen viele Nicht-Esolangs dieses Verhalten auf. Das erste Snippet von TI-BASIC wäre beispielsweise length("length(.
Khuldraeseth na'Barya
10

Python 2 , Punktzahl 32

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

Mit nachfolgenden Schnipseln B, C, D, ... Y, Z, u, v, w, x, y, z.

In einer Wendung dramatischer Ironie unterstützt Python 3 Unicode-Bezeichner, die uns bei diesem Trick sehr albern erscheinen lassen - aber nicht printohne Klammern. Ich könnte auch Ziffern in den Bezeichner stopfen, aber ich denke nicht, dass es sehr lustig ist, mehr herauszuholen.

Probieren Sie es online!

Python 2 , Punktzahl 18, weniger Cheat-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

Probieren Sie es online!

Lynn
quelle
10

JavaScript (ES6, V8 6.x), 52 50298 119526 119638 119683 128781 Snippets, 88 149147 575179 575631 576121 612789 Bytes

Weiter unten befindet sich ein Stack-Snippet, das das vollständige Programm generiert, es auswertet und einen Download-Link für die Datei erstellt. Dieses Snippet generiert weiterhin bessere Antworten, da neuere Versionen von Unicode von neueren Versionen von JavaScript unterstützt werden, die der Sprache neue gültige Bezeichner hinzufügen.

Nur ASCII verwenden

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

Erläuterung

Hierbei wird die Metaprogrammiertechnik verwendet Proxy, um eine Get-Handler-Trap für das Objekt zu aktivieren und auf den Eigenschaftsnamen als Zeichenfolge zuzugreifen, wobei der Bezeichner als length / 2Wert zurückgegeben wird.

Wenn das erste Snippet mit as beginnt new Proxy({},{get:(n,{length:e})=>e>>(e/e)}).nn, erhöht jedes hinzugefügte Snippet die Zeichenfolge lengthdes Bezeichners, indem 2sichergestellt wird, dass .repeat()der entsprechende Codepunkt zweimal für 2-Byte-UTF-16-Zeichen und einmal für 4-Byte-UTF-16-Zeichen angegeben wird.

Bezeichner in JavaScript

In der ECMAScript-Spezifikation ist eine IdentifierNamemit folgender Grammatik definiert:

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”

Die Antwort generieren

Anfangs habe ich die Unicode-Eigenschaft "ID_Continue" verwendet und ein Node.js-Skript geschrieben, das die vollständige Antwort generiert. Jetzt ist es nur ein clientseitiges Skript, das mit einer Naivität eval()auf gültige Zeichen überprüft und stattdessen alle Unicode-Codepunkte durchläuft:

// 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>

Das Ausführen stat -f%z answer.jsergibt eine Byteanzahl von 612802, aber wir subtrahieren 13 Bytes für die console.log(und schließen )die tatsächliche Übermittlung ab.

Codierung

Die Quelle wird als utf-8 gespeichert, was sich in der enormen Byteanzahl der Antwort widerspiegelt. Dies geschieht, weil Node.js nur Quelldateien ausführen kann, die in utf-8 codiert sind.

JavaScript speichert intern Zeichenfolgen mit UTF-16-Codierung, sodass die in JavaScript zurückgegebene Zeichenfolge "Zeichenlänge" nur halb so viele Byte wie die in UTF-16 codierte Zeichenfolge enthält.

Patrick Roberts
quelle
Warum nicht, sagen wir, xanstatt $es als zusätzliches Bezeichnerzeichen freizugeben?
Neil
@Neil Ich habe das vor einiger Zeit bemerkt. Ich arbeite derzeit an einer Antwort, die eine Punktzahl von ~ 119519 sein sollte. Im Moment geht es nur darum, die Kodierung richtig zu durchlaufen.
Patrick Roberts
Ich habe eine Kopie der Spidermonkey JS-Shell ausprobiert, die ich zufällig herumliegen hatte. Es werden nur 50466 verschiedene Bezeichnerzeichen unterstützt. (Da Sie in Ihrem anfänglichen Snippet 12 verwenden, erhalten Sie 50455 Punkte.)
Neil,
Nun, ohne eine Generalüberholung durchzuführen, muss die Punktzahl anscheinend 50297 betragen. Schreiben Sie jetzt die Antwort. Um es klar auszudrücken, gibt es in ES6 + tatsächlich 128.096 unterstützte Bezeichner, die die Unicode 10.0.0-Spezifikation verwenden, aber von diesen hat nur die von Ihnen erwähnte Zahl eine Zeichenfolgenlänge von 1. Andernfalls ist es viel schwieriger, die Anzahl der Zeichenfolgen zu ermitteln Daran wurde ich aufgehängt.
Patrick Roberts
1
@PatrickRoberts Entschuldigung, mein Fehler, beim Lesen habe ich den gesamten Text angenommen, bis der letzte Text nur durchgestrichen war. Meine Augen müssen diesen Teil übersprungen haben.
Conor O'Brien
6

Python 2 , Punktzahl 6 10

+3 dank pizzapants184
+1 dank WheatWizard

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

Probieren Sie es online!

Stange
quelle
Wenn Sie print int(True)zu "nur" wechseln 4/4, können Sie and 77 addieren , da Sie die Nummer nicht drucken müssen, sondern nur "produzieren"
pizzapants184
Punktzahl 9, 47 Bytes
Pizzapants184
Das Hinzufügen &2erhöht Ihre Punktzahl um eins, da es &eine höhere Priorität hat als ^, aber Sie müssen die Zahl 2 irgendwie machen. (Sie können verwenden [[]==[]][[]<[]]<<[[]==[]][[]<[]])
Weizen-Assistent
1
@ pizzapants184 Egal, das funktioniert für 10.
Weizen-Assistent
1
@ pizzapants184 ordwidersprach and, aber ich habe das behoben
Rod
6

TI-Basic (Serie 83, OS Version 1.15 oder höher), Punktzahl: 17 18 19 24

(Tiebreaker: 53 Bytes.)

Sie können eine sehr große Punktzahl erzielen, indem Sie die Länge der Zeichenfolge wie gewohnt missbrauchen: Beginnen Sie mit (wie @Scrooble hervorhebt) und fügen Sie am Ende immer einzelne Token-Schnipsel hinzu. TI-Basic hat über 700 davon, was eigentlich ganz gut funktioniert. Aber hier ist ein anderer Ansatz: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

Beachten Sie, dass TI-Basic Token versehen ist, so (zum Beispiel) der e^(Befehl nicht alle Zeichen verwenden e, ^, (.

Beruht auf einer undokumentierten Funktion des sub(Befehls: Neben der Suche nach Teilzeichenfolgen kann damit auch eine Zahl durch 100 geteilt werden.

Dies funktioniert , wenn es auf einem frischen Rechner laufen, was uns vermuten lässt , dass X, Y, Zalle Null sind , dass die Fenstervariablen auf ihre Standardwerte eingestellt sind, dass der Rechner im Bogenmaß - Modus ist, und dass rand‚s ersten drei Ausgänge über wird 0.943, 0.908, 0.146.

Mischa Lawrow
quelle
4

PowerShell , 25 Byte, Ergebnis 5

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

Snippet 1: ' '.countAusgaben 1. Dies geschieht durch die Verwendung .counteiner Zeichenfolge, da nur eine Zeichenfolge vorhanden ist. Probieren Sie es online!

Snippet 2: *2gibt aus, 2weil wir das 1vom vorherigen Snippet nehmen und es mit zwei multiplizieren Probieren Sie es online aus!

Snippet 3: +!""Ausgabe 3durch Hinzufügen des Booleschen Werts eines leeren Strings. Dadurch wird implizit die leere Zeichenfolge in umgewandelt $true, die wiederum implizit in umgewandelt 1wird. Wir fügen also eine hinzu. Probieren Sie es online aus!

Snippet 4: -(-1)Ausgänge 4durch einfaches Subtrahieren des Negativen Probieren Sie es online!

Snippet 5: |%{5}Gibt 5aus, indem die vorherige Nummer in eine Schleife aufgenommen und jede Iteration dieser Schleife (nur eine, da es nur eine Eingangsnummer gibt) ausgegeben wird. 5 Probieren Sie es online aus!

Vielen Dank an Jan für eine Alternative 4und eine clevere Art, sich etwas auszudenken 5.

AdmBorkBork
quelle
Wie wäre es mit ' '.count*2+!""-(-1)|%{5}einer Punktzahl von 5?
Jan
@Jan Oh, richtig, haha, du musst es eigentlich nicht $_drinnen benutzen |%{ }. Vielen Dank!
AdmBorkBork
4

C, 10 Schnipsel, 45 Bytes

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

Probieren Sie es online!

Steadybox
quelle
4

MATL , Score 8 15, 64 123 Bytes

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
  • Mit Hilfe von Luis Mendo auf 12 gekommen! Verwenden 11,23ZPwar seine Idee, zusammen 3mit Ifür Snippet 7 ändern .
  • Mit mehr Hilfe von Luis auf 15 gekommen. OO...N&war seine Idee.

Da kommt noch mehr. Ich kenne die MATL-Funktionen nicht auswendig, also musste ich in der Dokumentation hin und her und her gehen ... :)

Probieren Sie es online!

Stewie Griffin
quelle
Oh, 5Yyist schön! Ich benutze bereits Yin 3, um die zweite Primzahl zu erhalten :(
Stewie Griffin
Ich denke, Sie können einen anderen mit bekommen OOOOOOON&. Wenn Sie andere hinzufügen, sollte dies wahrscheinlich der letzte sein, da&
Luis Mendo
Nochmals vielen Dank Luis! Und warum brauchte ich so viele yyyyyyyy...? Ich musste die Zahl yverdoppeln , 24 , um sie 12-mal zu duplizieren ...?
Stewie Griffin
@Stewie Ich denke, es liegt daran, dass die Hälfte der Elemente, die Sie duplizieren, das leere Array ist, das von generiert wird d. Ich bin jetzt auf dem Handy, versuche aber, X#den Stack zu debuggen und auszudrucken
Luis Mendo
3

V , 10 Punkte

é1
<C-a>
r3
DÉ4
ñóä/5ñ
ddá6
xÁ7
C8<esc>
R9<C-c>
ø.<cr>ÎA0

Probieren Sie es online!

DJMcMayhem
quelle
2

Jelly , 253 Bytes, 250 Punkte

L}“L

Nachfolgende 1-Zeichen-Snippets:

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

Hinweis: Kann auch durch ersetzt werden \n, da dies dasselbe Byte in Jellys Codepage ist.

Nachdem Sie alle diese Snippets angehängt haben, können Sie das 2-Zeichen-Snippet anhängen ”‘.

+1 danke an Dennis .

Probieren Sie es online!

Erik der Outgolfer
quelle
2

Sprache , 1 112 064 Schnipsel

Das n- te Snippet besteht aus 2 3n-1- Wiederholungen des n- ten Unicode - Nicht-Ersatzzeichens bis einschließlich des 1 112 064- ten und letzten Nicht-Ersatzzeichens des aktuellen Unicode-Standards.

Die Ausgabe erfolgt der Einfachheit halber unär (mit dem Null-Byte als Ziffer). Dezimalstellen sind möglich, verlängern jedoch die Programmdauer. Mit unary können wir die ersten Programme testen.

Für n = 1 erhalten wir 4 Wiederholungen von U + 0000 . Dies entspricht dem Brainfuck-Programm ., das ein Null-Byte ausgibt.

Für n = 2 erhalten wir 32 Wiederholungen von U + 0001 für insgesamt 36 Zeichen. Dies entspricht dem Programm brainfuck .., das zwei Nullbytes ausgibt.

Für n = 3 erhalten wir 256 Wiederholungen von U + 0002 für insgesamt 292 Zeichen. Dies entspricht dem Programm brainfuck ..., das drei Nullbytes ausgibt.

Und so weiter, bis zu n = 1 112 064 .

Dennis
quelle
Können Sie das Äquivalent in Dezimalschreibweise demonstrieren oder argumentieren? Ich bin mir nicht sicher über den Konsens über die unäre Ausgabe, aber ich glaube, es ist für Sprachen, denen das Konzept der Dezimalzahl fehlt - zumindest habe ich es zuletzt überprüft
Conor O'Brien
Ich glaube, es ist für Sprachen, denen das Konzept der Dezimalzahl fehlt. Ja, und da Lenguage keine Dezimalzahl-E / A hat, habe ich angenommen, dass es in Ordnung ist. Auf '+'*(48 + d) +'.>'jeden Fall würde das Codieren des Brainfuck-Programms für jede Dezimalstelle von n die gleiche Punktzahl erzielen. Es ist nur viel schwieriger zu beschreiben.
Dennis
Aha. Das Gleiche nur länger.
Conor O'Brien
2

BASIC (ZX Spectrum), Punktzahl 244 (neue Punktzahl 247) [Betrügt das?]

Snippet 1:

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

Snippet 2: :

Snippet 3: REM

Snippets 4-244: Einzelzeichen-Snippets, wobei alle Zeichen verwendet werden, die nicht in den Snippets 1, 2 und 3 enthalten sind.

Erläuterung

Zeichen

Bei Spectrum PRINThandelt es sich um ein einzelnes Zeichen (Code 245). Das Snippet 1 verwendet 11 verschiedene Zeichen: 2, 3, 5, 6, +, -, *, (, ), PRINTund PEEKwas Sie sehen , wie Räume ein Teil der Zeichen sind PRINTund PEEK, so dass der Raum selbst nicht benutzt worden ist . Ich habe beschlossen, die Zeilennummer 2356 anzugeben, da dies die einzigen Ziffern im Code sind.

Zeichen 13 und 14 sind nicht erlaubt. Das bedeutet, dass für die Snippets 2-244 noch 243 Zeichen zur Verfügung stehen, beginnend mit :und REMum den Code zu vermeiden, der zu Fehlern führen oder andere Aktionen ausführen würde.

Wie es funktioniert

Aus diesem Grund bin ich mir nicht sicher, ob diese Antwort von dem Buch stammt.

23635 ist der Speicherort für die 16-Bit-Systemvariable PROG, die als LH gespeichert ist. (Der Wert ist normalerweise 23755. Aber abgesehen von einem falschen Ergebnis, wenn dies nicht der Fall ist, würde mich die direkte Verwendung dieser Nummer, auch wenn sie den Code verkürzen würde, zusätzliche Ziffernzeichen kosten.) Der Wert von PROG ist der Speicherort wo das Programm selbst gespeichert ist. Die ersten zwei Bytes sind die als HL gespeicherte Zeilennummer, die folgenden zwei Bytes sind die als LH gespeicherte Zeilenlänge. Auf diese Weise ermittelt das Programm die Länge seiner eigenen Zeile, sodass etwas Passendes abgezogen werden muss

Zeichen speichern

Wenn man bedenkt, wie Zahlen gespeichert werden, hätte die Zeile mit -114 enden können, sodass Snippet 1 1 ergeben würde. Ich wollte jedoch keine zusätzlichen Ziffern verwenden, nahm stattdessen zwei zweistellige Zahlen weg, die sich dann summieren mussten bis 122; 56 und 66 haben sich gut geschlagen.

Der Code ist ein bisschen hässlich, da alle Werte von PROG ( PEEK 23635+256*PEEK 23636) zweimal verschachtelt und berechnet werden . Aber wenn ich es speichere und dann den gespeicherten Wert verwende, würde es zusätzliche Zeichen / Schnipsel kosten - die Zeile könnte wie folgt beginnen

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

die 4 zusätzliche Zeichen verwenden würde: LET, p, =und :.

Vielleicht werde ich das so konstruieren, dass alle Zahlen aus Zahlen berechnet werden, die nur eine Ziffer verwenden und 3 Schnipsel erhalten.

BEARBEITEN:

Hier ist das neue Snippet 1 (so wird eine lange einzelne Zeile im Spektrum umbrochen angezeigt. Wenn Sie also den Code testen möchten, können Sie sehen, dass Sie ihn richtig eingegeben haben):

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

Ich könnte einen weiteren Ausschnitt gewinnen, indem ich das vermeide +und mich nur damit begnüge -. Ich werde es nicht versuchen, das war genug von einer Tortur.

Heimdall
quelle
2

Klein 011 , 9 Schnipsel

Snippet 1

!@1!aaaaaaaaaaaaaaaaaaaaa/a

Probieren Sie es online!

Snippet 2

2((2|bbb0b2bbbb4bbbbbbbb

Probieren Sie es online!

Snippet 3


c\*3ccccccccccccccccccccc\ccccccccc3c6cccc9
c\

Probieren Sie es online!

Snippet 4

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

Probieren Sie es online!

Snippet 5

ee

Probieren Sie es online!

Snippet 6

fff

Probieren Sie es online!

Snippet 7

ggggg

Probieren Sie es online!

Snippet 8

hh

Probieren Sie es online!

Snippet 9

iiiii

Probieren Sie es online!

Erläuterung

Dies war eine wirklich lustige Herausforderung für Klein. Die einzigartige Topologie von Klein ermöglicht viele interessante Aufgaben. Wie Sie vielleicht bemerken, fügen die Antworten 5-9 dem Code nur Füllzeichen hinzu (Buchstaben tun in Klein nichts, deshalb habe ich sie als Füllzeichen verwendet), um den Begrenzungsrahmen zu verlängern. Dies führt dazu, dass die IP-Adresse aufgrund der einzigartigen Topologie von Klein einen anderen Pfad durch frühere Teile des Codes nimmt.

Ich werde später eine vollständige Erklärung abgeben, aber im Moment ist hier eine leicht verständliche Version des Programms, bei der alle Buchstaben durch .s ersetzt sind.

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

Probieren Sie es online!

Weizen-Assistent
quelle
2

> <> , Score: Infinity 1,112,064-6 = 1,112,058

Snippet 1 (6 Bytes)

"l4-n;

Dieses Snippet gibt die Anzahl der Zeichen nach dem; Plus eins. Dies kann erweitert werden unendlich sehr große Menge Schnipsel eines Zeichens jeder. Ein kurzer Blick auf Google sagt mir, dass es 1.112.064 mögliche Unicode-Zeichen gibt, abzüglich der 6, die ich bereits verwendet habe.

Probieren Sie es online

Scherzen
quelle
1

R , Punktzahl: 79

Dank an Seans Perl Antwort für die Inspiration; dies missbraucht einige Macken des R-Interpreters.

Erster Ausschnitt:

nchar(scan(,""))
a

Nachfolgende Ausschnitte sind die Zeichen in:

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

Probieren Sie es online!

Die scanFunktion liest Daten aus der Datei, ""die standardmäßig verwendet wird stdin().

Die Dokumentation für stdin()zeigen , dass:

Wenn R ein Skript aus einer Datei liest, ist die Datei die "Konsole": Dies ist die traditionelle Verwendung, um Inline-Daten zuzulassen (ein Beispiel finden Sie unter "Einführung in R").

Somit werden die nachfolgenden Daten zur Datei. Dies kann einfach erweitert werden und mit mehreren verschiedenen Codierungen arbeiten.

Giuseppe
quelle
1

Pyke , 256 Bytes, 254 Punkte

Bitte beachten Sie, dass dies Hex-Codes der tatsächlichen Bytes sind, die durch Leerzeichen getrennt sind, da dort das Null-Byte ( \x00) enthalten ist.

Snippet starten:

6C 22 00

Nachfolgende 1-Zeichen-Snippets:

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

Probieren Sie es hier aus!

Erik der Outgolfer
quelle
1

Java 8, 7 Schnipsel (19 Bytes)

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

Nur ein Anfang, werde weiter daran arbeiten.

Probieren Sie es hier aus.

Erläuterung:

Die Priorität der Ausführung wird möglicherweise klarer, wenn ich Klammern hinzufüge:

((1*2)-~0)>4?4:4|(5^(37%7))
  • a*b: Multiplizieren amitb
  • ~a: -a-1
  • a>b?x:y: if(a>b){ x }else{ y }
  • a|b: Bitweises ODER amitb
  • a^b: Bitweises XOR amitb
  • a%b: amodulo-b
Kevin Cruijssen
quelle
1

Python 2 , 110 Schnipsel

Hier ist der komplette Ausschnitt:

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

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

Probieren Sie es online!

Der erste Ausschnitt ist

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

Und dann sind die nächsten 109 Snippets die nächsten 109 Bytes.

Das ist ziemlich "betrogen", wie Lynn es ausdrückt. Das erste Snippet öffnet die Datei und subtrahiert 44 von ihrer Länge, dann addiert jedes andere Snippet 1 zur Länge der Datei, ohne die Logik des gesamten Programms zu ändern. Damit wird das Ergebnis der Ausgabe um 1 erhöht.

Weizen-Assistent
quelle
1

Gleichstrom , Punktzahl 13, 58 Bytes

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

Probieren Sie es online! (Beachten Sie, dass die TIO-Version fnach jedem Snippet ein fügt , um den gesamten Stapel zu drucken. Dies zeigt, dass bei jedem Snippet nur ein einziger Wert auf dem Stapel verbleibt. Außerdem habe ich das führende Leerzeichen im letzten Snippet vergessen, was für die Funktionen keine Rolle spielt durch Zeilenumbrüche getrennt, zählt aber zu meiner Zeichenverwendung)

Jede zusätzliche Snippet-Verkettung belässt den gewünschten Wert und nur den gewünschten Wert auf dem Stapel. Nachdem ich 12 geschlagen hatte, hatte ich keine Möglichkeit mehr, den Stapel zu essen. Ich habe schon früh versucht, mathematische Operationen zu verwenden, da sie den Stapel auffressen und es schwieriger wird, auf diese Weise mit größeren Zahlen umzugehen. Wenn alles gesagt und getan ist, habe ich nur noch die Ziffer 0, mit der ich spielen kann, und sehr wenig, was das Stack-Popping angeht, also denke ich, dass 13 ziemlich nahe daran ist, das Maximum zu erreichen. Ich bin mir sicher, dass es viele ähnliche (und wahrscheinlich kürzere) Wege gibt, um dies in DC zu erreichen. Beachten Sie, dass Cygwin AF gemischt mit 0-9 anders handhabt als die meisten DC-Versionen 44C4r/CC 4//. Dies funktioniert für das endgültige Snippet in Cygwin.

brhfl
quelle
0

Pyth , 124 Schnipsel

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

Probieren Sie es online!

Nicht druckbare Zeichen wurden mit drei druckbaren Zeichen ( x..) maskiert . Das erste Snippet ist drei Bytes lang, jedes Snippet danach wird um eins länger.

Jonathan Frech
quelle
0

Beatnik , 22 Bytes, Punktzahl 20

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

Wenn Sie das Wort "Snippet" annehmen, können Sie den Wert auf dem Stapel verschieben.


quelle
0

Oktave, Partitur 86

nnz n

Gefolgt von:

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

Dies nutzt die Tatsache aus, dass Octave alles nach einem Funktionsnamen als Zeichenfolgeeingabe behandelt. So nnz ngibt die Anzahl der Nicht-Null - Elemente in der Zeichenfolge 'n'. Wir kommen zu 86, indem wir die anderen druckbaren ASCII-Zeichen hinzufügen. ',"%#funktioniert nicht

Stewie Griffin
quelle
0

Julia 0,6, 111217

Das folgende Skript erstellt das vollständige Programm:

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

Erläuterung

Das Makro

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

gefolgt von allen eindeutigen Unicode-Zeichen, die in Bezeichnern zulässig sind, berechnet mit isidentifier. Einige diakritische Zeichen zählen nicht mehr, deshalb habe ich sie entfernt.

mschauer
quelle
0

TeX, Score 61 (möglicherweise 190)

Erster Ausschnitt:

\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

Andere 60 Schnipsel: in beliebiger Reihenfolge mit jeweils einem Zeichen aus

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

Erläuterung: \lenWird am Ende aufgerufen und konvertiert eine Steuersequenz in eine Zeichenfolge. Jedes Zeichen (einschließlich \) ist ein Zeichen der Zeichenfolge. Dann \glenverschlingt er einen Token \und \tlenzählt die verbleibenden Token. Es gibt daher die Länge dieser Steuersequenz aus (ohne \).

Zeichen aus anderen Codefragmenten erweitern die anfänglich nur auszuführende Steuersequenz \t. Eine aus mehreren Zeichen bestehende Steuersequenz muss nur aus Buchstaben bestehen, sie werden jedoch alle als Buchstaben gezählt, da ihnen der Kategoriecode 11 zugewiesen wurde (unter Verwendung von ASCII-Codes, damit die Zeichen selbst nicht im ersten Snippet erscheinen).

Ich entschied mich für die Verwendung von Oktalcodes für einige Zeichen, die mich ein Symbol kosteten, 'sparte mir jedoch zwei Ziffern, 8 und 9, und erhielt so einen Ausschnitt. Hätte vielleicht noch ein paar mehr verdienen können, wenn ich nicht gebraucht hätte \expandafter.

Ausgabe

Mögliche Änderung: Wrap \number\count1in, \message{}damit die Ausgabe nicht in die .dviAusgabe geht, sondern in die Konsolenausgabe und .log. Es kostet keine zusätzlichen Briefe.

190

Leider arbeitet TeX mit ASCII und nicht mit Unicode (oder jetzt?), Aber meine Lösung könnte möglicherweise um 129 weitere Einzelzeichen-Snippets erweitert werden, die die Zeichen mit den Codes 127-255 enthalten. Vielleicht haben sogar einige Zeichen vor 32 nicht funktioniert. Das Zeichen 32 (Leerzeichen) hat nicht funktioniert, sonst hätte ich es auch in ein Snippet eingefügt - brauchte es nicht im ersten Snippet. Natürlich müsste jedes dieser zusätzlichen Zeichen \catcodeim ersten Snippet in einen Buchstaben umgewandelt werden.

Heimdall
quelle
0

Pip, 57 Bytes, Score = 16

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

Beachten Sie, dass es sich <tab>um ein literales Tabulatorzeichen handelt (ASCII 9). Probieren Sie es online!

Jedes Snippet ist ein vollständiges Programm, das die gewünschte Nummer ausgibt. Die meisten von ihnen arbeiten nach dem Prinzip, dass der letzte Ausdruck in einem Pip-Programm automatisch gedruckt wird: In Snippet 5 wird beispielsweise der vorherige Code ausgewertet, aber der einzige wichtige Teil ist der 5. Ausnahmen sind:

  • Snippet 3 funktioniert für sich genommen gut als RT9(Quadratwurzel von 9), aber nach Snippet 2 wird es tatsächlich als 2RT9(2. Wurzel von 9) analysiert - was natürlich dasselbe ist.
  • Snippet 6 erhält das 8. Zeichen (0-indiziert) von e ^ 3, was zufällig 6 ist. Es zieht aber auch die Zahl 8 in die yVariable. Snippet 8 gibt dann den Wert von aus y.
  • Snippet 12 übernimmt die 11 aus dem vorherigen Snippet und fügt sie hinzu o(vorinitialisiert zu 1). Snippet 13 nimmt dieses Ergebnis und subtrahiert es v(vorinitialisiert auf -1).
  • Snippet 16 gibt 1ohne eine neue Zeile aus ( Ok=kwobei k=kder Standardwert für die Wahrheit 1 ist) und druckt dann automatisch 6.

Andere interessante Sachen:

  • Snippet 14 verwendet Regex-Operationen, um 14aus dem Wert von pi zu extrahieren .
  • Snippet 15 konvertiert den String "F"von hexadezimal.
DLosc
quelle
0

Zsh , Score> 50 000 (1 112 046?), 16 + + (UTF-8-Codepunktlängen) Bytes

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

Zsh verarbeitet standardmäßig Multibyte-Codierungen. Das Basis-Snippet enthält 18 eindeutige Zeichen, insgesamt 34. Jeder andere Codepunkt (außer dem Null-Byte) kann hinzugefügt werden. Während ich dies schreibe, befindet sich mein Skript, das diese testet, auf einem Codepunkt von ~ 50.000, einer Gesamtdateigröße von 150 KB und einer Geschwindigkeit von ca. 30 Snippets / Sekunde. Führen Sie hier mein vollständiges Testskript aus. Möglicherweise möchten Sie es anpassen, um an späteren Codepunkten zu beginnen.

Probieren Sie die ersten 2000 Snippets online aus!

Weitere Ausschnitte sind mit dieser Technik möglich .

GammaFunktion
quelle