Penghitungan concatenative

29

Tantangan Anda adalah untuk menulis N potongan kode seperti itu, ketika Anda menggabungkan pertama K ≥ 1 bersama-sama, mereka menghasilkan jumlah K . Semakin tinggi N , semakin baik. Inilah intinya: Anda tidak boleh menggunakan karakter apa pun lebih dari satu kali di cuplikan Anda.

Aturan

  • Anda dapat menggunakan karakter yang sama beberapa kali dalam satu (dan hanya satu) cuplikan.
  • Cuplikan ini harus digabungkan sesuai urutan penyajiannya , tanpa melewatkan apa pun.
  • Anda harus menulis setidaknya dua cuplikan.
  • Semua cuplikan harus dalam bahasa yang sama.
  • Ingat: cuplikan tidak harus berupa program atau fungsi lengkap, juga tidak harus berfungsi sendiri. -1adalah cuplikan yang valid di Jawa, mis
  • Semua gabungan yang dihasilkan harus menampilkan nilai K masing-masing .
  • Pemenangnya adalah orang dengan nilai N tertinggi . Tie-breaker adalah keseluruhan panjang program terpendek dalam byte.

Contoh

Misalkan potongan Anda berada AD, xc, 123, dan ;l. Kemudian:

  • AD harus menghasilkan 1
  • ADxc harus menghasilkan 2
  • ADxc123 harus menghasilkan 3
  • dan ADxc123;lharus menghasilkan 4.

Program ini akan memiliki skor 4 .

Conor O'Brien
sumber
4
Karena mereka harus potongan, dalam bahasa berbasis stack, angka-angka hanya bisa didorong pada stack, kan?
totallyhuman
Untuk menambah pertanyaan yang benar-benar manusiawi, dalam bahasa berbasis stack adalah top-of-stack satu-satunya nilai yang penting? Artinya, bisakah dua cuplikan pertama dalam dc menjadi 1dan `2`?
brhfl
@totallyhuman saya akan mengatakan tidak - dalam lingkungan berbasis stack, jika Anda memiliki beberapa nilai pada stack, Anda "menghasilkan" lebih dari satu nilai, alih-alih yang diminta satu integer.
Conor O'Brien
@ brhfl Lihat di atas.
Conor O'Brien
@ ConorO'Brien Bisakah hanya bagian atas tumpukan yang dianggap keluaran? Karena kalau tidak, secara praktis tidak mungkin dalam bahasa berbasis stack tanpa IO implisit ...
totallyhuman

Jawaban:

10

Python 3 , 1 112 056 cuplikan, 4 383 854 byte

Ini sangat mirip dengan jawaban Python 2 @ WheatWizard . Saya mulai mengerjakan ini sesaat sebelum diposting, tetapi memilah kebiasaan Python tentang karakter non-ASCII dan antrean panjang membutuhkan waktu. Saya menemukan bahwa Python membaca baris 8191 byte pada suatu waktu, dan ketika 8191 byte tersebut hanya berisi bagian dari karakter multi-byte, Python melempar SyntaxError .

Cuplikan pertama menggunakan penyandian dari beberapa karakter (berbeda) untuk Turing Completeness .

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

Monstrositas ini hanya membangun string berikut dan mengeksekusinya.

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

Cuplikan berikut semuanya panjangnya persis satu karakter. Tiga karakter berikutnya adalah \n, \r, dan #. Semua karakter Unicode yang tersisa (kecuali surrogate) mengikuti dalam urutan tertentu, sehingga mereka sejajar dengan batas 8191-byte.

Skrip berikut menghasilkan program yang sesuai untuk input k antara 1 dan 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
sumber
4
Apakah kamu pernah kalah?
Patrick Roberts
Saya bingung bagaimana Anda mencetak lebih dari 256. Apakah karakter unicode yang berbeda karakter yang berbeda? Jika demikian mengapa tidak menggunakan kombinasi diakritik untuk mendapatkan skor yang tak terbatas?
Wheat Wizard
@WheatWizard Apa itu karakter?
Dennis
Tampaknya dengan definisi itu Anda dapat menggunakan mengkombinasikan diakritik untuk mendapatkan skor yang lebih tinggi.
Wheat Wizard
@WheatWizard Tidak, satu huruf plus kombinasi diakritik adalah dua karakter Unicode.
Dennis
13

Perl 5, 50.091 151 cuplikan

Cuplikan pertama:

use utf8; print length A

Cuplikan 2 hingga 26: BmelaluiZ

Cuplikan ke-27 hingga ke-46: amelalui z, tidak termasuk karakter dalam "panjang"

Cuplikan ke 47 sampai 56: 0melalui9

Cuplikan ke-57: _

Cuplikan yang tersisa adalah 50.105 karakter Unicode individual yang oleh Perl dianggap sebagai karakter "kata", tidak termasuk 14 karakter kata yang berbeda dalam cuplikan awal, dalam urutan apa pun.

Yah, itu pemikiran yang bagus, tetapi ternyata setelah beberapa lama Perl memberi Anda kesalahan "pengidentifikasi terlalu panjang". Ini adalah program gabungan terpanjang yang bisa saya dapatkan untuk dicerna Perl:

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

Halaman manual perldiag mengatakan "Versi masa depan Perl kemungkinan akan menghilangkan batasan-batasan yang sewenang-wenang ini" tetapi Perl 5.18 saya belum melakukannya.

Penjelasan:

Dalam mode non-ketat, Perl 5 menafsirkan string karakter kata yang tidak dikutip sebagai "kata kunci," pada dasarnya mengutipnya untuk Anda secara otomatis. Mereka biasanya dihindari, tetapi mereka pasti membantu di sini!

Sean
sumber
4
a-zCuplikan Anda kemungkinan besar akan menggunakan karakter dari cuplikan pertama Anda.
Jonathan Frech
Ya, terima kasih. Tetap.
Sean
Saya sarankan Anda membuat "showcase" -seperti jawaban, karena hampir semua (exo) langs - jelly, pyth, dll - memiliki perilaku ini
Rod
Saya tidak tahu apa artinya "jawaban seperti showcase".
Sean
1
@Sean Plenty dapat ditemukan di esolangs.org, dan karena pendekatan ini tidak memerlukan pemahaman menyeluruh untuk bekerja, Anda dapat mempelajari apa yang Anda butuhkan dari situs. Selain itu, banyak non-esolang menunjukkan perilaku ini; misalnya, cuplikan pertama TI-BASIC adalah length("length(.
Khuldraeseth na'Barya
10

Python 2 , skor 32

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

Dengan potongan berikutnya B, C, D, ... Y, Z, u, v, w, x, y, z.

Dalam ironi yang dramatis, Python 3 mendukung pengidentifikasi Unicode, yang akan membuat kita menjadi sangat konyol dengan trik ini - tetapi tidak bisa printtanpa tanda kurung. Saya bisa menjejalkan angka ke dalam pengidentifikasi juga, tetapi saya tidak berpikir pendekatan ini sangat menyenangkan untuk memeras lebih banyak.

Cobalah online!

Python 2 , skor 18, kurang 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

Cobalah online!

Lynn
sumber
10

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

Lebih jauh di bawah ini adalah Stack Snippet yang menghasilkan program lengkap, mengevaluasinya, dan membuat tautan unduhan untuk file tersebut. Cuplikan itu akan terus menghasilkan jawaban yang lebih baik karena versi terbaru Unicode didukung oleh versi JavaScript yang lebih baru, yang menambahkan pengidentifikasi valid baru ke bahasa.

Hanya menggunakan ASCII

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

Penjelasan

Ini menggunakan teknik metaprogramming Proxyuntuk mengaktifkan get handler trap pada objek dan mengakses nama properti sebagai string, mengembalikan pengenal length / 2sebagai nilainya.

Dengan potongan pertama dimulai sebagai new Proxy({},{get:(n,{length:e})=>e>>(e/e)}).nn, setiap potongan tambahan menambahkan string lengthpengidentifikasi dengan 2dengan memastikan ke .repeat()masing-masing titik kode dua kali untuk 2 byte utf-16 karakter, dan satu kali untuk 4 byte utf-16 karakter.

Pengidentifikasi dalam JavaScript

Dalam Spesifikasi Naskah ECMAS , suatu IdentifierNamedidefinisikan dengan tata bahasa berikut:

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”

Menghasilkan jawabannya

Awalnya menggunakan properti Unicode "ID_Continue", saya menulis skrip Node.js yang menghasilkan jawaban lengkap. Sekarang ini hanya skrip sisi klien yang menggunakan naif eval()untuk menguji karakter yang valid, dan beralih melalui semua poin kode 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>

Menjalankan stat -f%z answer.jsmenghasilkan jumlah byte 612802, tetapi kami mengurangi 13 byte untuk console.log(dan )membungkus pengiriman yang sebenarnya.

Pengkodean

Sumber disimpan sebagai utf-8, yang tercermin dalam jumlah byte jawaban yang sangat besar. Ini dilakukan karena Node.js hanya dapat menjalankan file sumber yang disandikan dalam utf-8.

JavaScript secara internal menyimpan string dengan pengkodean utf-16, sehingga string "karakter length" yang dikembalikan dalam JavaScript sebenarnya hanya setengah dari jumlah byte dari string yang dikodekan dalam utf-16.

Patrick Roberts
sumber
Mengapa tidak menggunakan, katakanlah, xalih-alih $, membebaskannya sebagai karakter pengidentifikasi tambahan?
Neil
@ Neil saya perhatikan itu beberapa waktu yang lalu. Saat ini saya sedang mengerjakan jawaban yang seharusnya skor ~ 119519. Saat ini saya sudah mendapatkannya hanya masalah melintasi pengkodean dengan benar.
Patrick Roberts
Saya mencoba salinan shell JS Spidermonkey yang kebetulan saya tergeletak di sekitar. Itu hanya mendukung 50466 karakter pengidentifikasi yang berbeda. (Karena Anda menggunakan 12 di cuplikan awal Anda, itu memberi Anda skor 50455).
Neil
Nah, tanpa melakukan perombakan besar, sepertinya skor harus 50297. Menulis jawabannya sekarang. Untuk menjadi jelas, sebenarnya ada 128.096 pengidentifikasi yang didukung di ES6 + menggunakan spesifikasi Unicode 10.0.0, tetapi dari mereka, hanya nomor yang Anda sebutkan memiliki panjang string 1. Jika tidak, jauh lebih sulit untuk mendapatkan jumlah karakter string, dan itulah yang saya tutup.
Patrick Roberts
1
@ Patrickrickoberts Maaf, kesalahan saya, saat membaca ini saya mengasumsikan semua teks sampai yang terakhir hanya dicoret teks. Mataku pasti telah melewati bagian itu.
Conor O'Brien
6

Python 2 , skor 6 10

+3 berkat pizzapants184
+1 berkat WheatWizard

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

Cobalah online!

tongkat
sumber
jika Anda berubah print int(True)menjadi hanya 4/4, Anda dapat menambahkan and 7untuk 7, mengingat Anda tidak harus mencetak nomor, cukup 'hasilkan'
pizzapants184
skor 9, 47 byte
pizzapants184
Menambahkan &2akan meningkatkan skor Anda satu per satu karena &memiliki prioritas lebih tinggi daripada ^, tetapi Anda harus membuat nomor 2 entah bagaimana. (Anda dapat menggunakan [[]==[]][[]<[]]<<[[]==[]][[]<[]])
Wheat Wizard
1
@ pizzapants184 Terlepas dari ini bekerja untuk 10.
Wheat Wizard
1
@ pizzapants184 ordbertentangan dengan and, tapi saya memperbaikinya
Rod
6

TI-Basic (83 series, OS versi 1.15 atau lebih tinggi), skor: 17 18 19 24

(Tiebreaker: 53 byte)

Anda bisa mendapatkan skor yang sangat besar dengan menyalahgunakan panjang string seperti biasa: mulai dengan (seperti yang ditunjukkan oleh @Scrooble) dan terus menambahkan potongan token tunggal sampai akhir. TI-Basic memiliki lebih dari 700, sehingga benar-benar berfungsi dengan baik. Tapi inilah pendekatan lain: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

Perhatikan bahwa TI-Dasar tokenized, sehingga (misalnya) e^(perintah tidak menggunakan salah satu karakter e, ^, (.

Bergantung pada fitur tidak berdokumen dari sub(perintah: selain menemukan substring, itu juga dapat digunakan untuk membagi angka dengan 100.

Karya ini jika itu berjalan pada kalkulator segar, yang memungkinkan kita berasumsi bahwa X, Y, Zsemua nol, bahwa variabel jendela diatur ke nilai standar mereka, bahwa kalkulator dalam modus radian, dan bahwa rand's tiga output pertama akan menjadi sekitar 0.943, 0.908, 0.146.

Misha Lavrov
sumber
4

PowerShell , 25 byte, Skor 5

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

Cuplikan 1: ' '.countkeluaran 1. Ini dilakukan dengan mengambil .countstring, yang merupakan satu karena hanya ada satu string. Cobalah online!

Cuplikan 2: *2keluaran 2karena kami mengambil 1dari cuplikan sebelumnya dan mengalikannya dengan dua Cobalah secara online!

Cuplikan 3: +!""keluaran 3dengan menambahkan Boolean-bukan dari string kosong. Ini secara implisit melemparkan string kosong ke $true, yang lagi-lagi secara implisit dilemparkan ke 1, jadi kami menambahkan satu Cobalah online!

Cuplikan 4: -(-1)keluaran 4dengan hanya mengurangi yang negatif Cobalah online!

Cuplikan 5: |%{5}keluaran 5dengan mengambil angka sebelumnya ke dalam satu lingkaran dan setiap iterasi dari loop itu (hanya satu, karena hanya ada satu nomor input) keluaran 5 Cobalah secara online!

Terima kasih kepada Jan untuk cara alternatif untuk membuat 4dan cara licik untuk membuat 5.

AdmBorkBork
sumber
Bagaimana ' '.count*2+!""-(-1)|%{5}dengan skor 5?
Jan
@ Jan Oh, benar, haha, Anda sebenarnya tidak perlu menggunakan $_di dalam |%{ }. Terima kasih!
AdmBorkBork
4

C, 10 cuplikan, 45 byte

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

Cobalah online!

Steadybox
sumber
4

MATL , Skor 8 15, 64 123 byte

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
  • Mendapat 12 dengan bantuan dari Luis Mendo! Menggunakan 11,23ZPadalah idenya, bersama dengan mengganti 3dengan Iuntuk potongan 7.
  • Sampai 15 dengan bantuan lebih banyak dari Luis. OO...N&adalah idenya.

Akan datang lebih banyak lagi. Saya tidak tahu fungsi MATL dengan hati, jadi saya harus bolak-balik dan bolak-balik dalam dokumentasi ... :)

Cobalah online!

Stewie Griffin
sumber
Ooh, 5Yybagus! Saya sudah menggunakan Y3 untuk mendapatkan perdana kedua :(
Stewie Griffin
Saya pikir Anda bisa mendapatkan yang lain OOOOOOON&. Jika Anda menambahkan yang lain, ini mungkin yang terakhir, karena&
Luis Mendo
Terima kasih lagi Luis! Juga, mengapa aku butuh banyak sekali yyyyyyyy...? Saya harus menggandakan nomor, 24 yuntuk mendapatkannya digandakan 12 kali ...?
Stewie Griffin
@Stewie Saya pikir itu karena setengah elemen Anda menduplikasi adalah array kosong yang dihasilkan oleh d. Saya menggunakan ponsel sekarang, tetapi cobalah X#untuk debug-cetak tumpukan
Luis Mendo
3

V , skor 10

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

Cobalah online!

DJMcMayhem
sumber
2

Jelly , 253 byte, skor 250

L}“L

Cuplikan 1-char berikutnya:

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

Catatan: juga dapat diganti dengan \n, byte tersebut sama dalam codepage Jelly.

Setelah Anda menambahkan semua snippet itu, Anda kemudian dapat menambahkan snippet 2-char ”‘.

+1 berkat Dennis .

Cobalah online!

Erik the Outgolfer
sumber
2

Bahasa , 1 112 064 cuplikan

The n th potongan terdiri dari 2 3n-1 pengulangan dari n th karakter Unicode non-pengganti, sampai dengan dan termasuk 1 112 064 th dan terakhir karakter non-pengganti dari standar Unicode saat ini.

Outputnya unary (menggunakan byte nol sebagai digit) untuk kesederhanaan. Desimal dimungkinkan, tetapi itu akan membuat program lebih lama. Dengan unary, kita dapat menguji program pertama.

Untuk n = 1 , kita mendapatkan 4 pengulangan dari U + 0000 . Ini sama dengan program brainfuck ., yang mencetak satu byte nol.

Untuk n = 2 , kami mendapatkan 32 pengulangan U + 0001 , dengan total 36 karakter. Ini setara dengan program brainfuck .., yang mencetak dua byte nol.

Untuk n = 3 , kita mendapatkan 256 pengulangan U + 0002 , dengan total 292 karakter. Ini sama dengan program brainfuck ..., yang mencetak tiga byte nol.

Dan sebagainya, hingga n = 1 112 064 .

Dennis
sumber
Bisakah Anda mendemonstrasikan atau memperdebatkannya dalam desimal? Saya tidak yakin tentang konsensus tentang keluaran unary tapi saya percaya itu untuk bahasa yang kurang konsep desimal - setidaknya, terakhir saya periksa
Conor O'Brien
Saya percaya ini untuk bahasa yang tidak memiliki konsep desimal Ya, dan karena Bahasa tidak memiliki I / O desimal, saya berasumsi itu baik-baik saja. Bagaimanapun, meng-encode program brainfuck '+'*(48 + d) +'.>'untuk setiap angka desimal dari n akan mencapai skor yang sama. Ini jauh lebih sulit untuk dijelaskan.
Dennis
Saya melihat. Hal yang sama lebih lama.
Conor O'Brien
2

BASIC (ZX Spectrum), skor 244 (skor baru 247) [apakah ini curang?]

Cuplikan 1:

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

Cuplikan 2: :

Cuplikan 3: REM

Cuplikan 4-244: Cuplikan karakter tunggal, menggunakan semua karakter yang tidak ada dalam cuplikan 1, 2 dan 3.

Penjelasan

Karakter

Pada Spectrum, PRINTadalah karakter tunggal (kode 245). The snippet 1 kegunaan 11 karakter yang berbeda: 2, 3, 5, 6, +, -, *, (, ), PRINTdan PEEKApa yang Anda lihat sebagai ruang adalah bagian dari karakter PRINTdan PEEK, sehingga ruang itu sendiri belum digunakan. Saya memutuskan untuk memberikan nomor baris 2356 karena ini adalah satu-satunya digit yang ada dalam kode.

Karakter 13 dan 14 tidak diperbolehkan. Itu berarti ada 243 karakter tersisa untuk cuplikan 2-244, dimulai dengan :dan REMuntuk menghindari kode yang akan menghasilkan kesalahan atau melakukan hal lain.

Bagaimana itu bekerja

Inilah sebabnya saya tidak yakin apakah jawaban ini sesuai dengan buku.

23635 adalah lokasi memori untuk PROG variabel sistem 16-bit, disimpan sebagai LH. (Nilainya biasanya 23755. Tetapi terlepas dari hasil yang salah jika kebetulan tidak terjadi, menggunakan nomor ini secara langsung, meskipun akan mempersingkat kode, akan dikenakan biaya karakter digit tambahan.) Nilai PROG adalah lokasi memori di mana program itu sendiri disimpan. Dua byte pertama adalah nomor baris yang disimpan sebagai HL, dua byte berikut adalah panjang baris yang disimpan sebagai LH. Begitulah cara program melihat panjang garisnya sendiri, jadi sesuatu yang sesuai perlu dikurangi

Menyimpan karakter

Mempertimbangkan bagaimana angka disimpan, garis bisa diakhiri dengan -114 sehingga snippet 1 akan menghasilkan 1. Tapi saya tidak ingin menggunakan angka tambahan, jadi saya malah mengambil dua angka 2 digit, yang kemudian harus ditambah ke 122; 56 dan 66 melakukannya dengan baik.

Kode ini sedikit jelek dengan semua nilai penghitungan dan penghitungan PROG ( PEEK 23635+256*PEEK 23636) dua kali. Tetapi jika saya menyimpannya dan kemudian menggunakan nilai yang disimpan, itu akan memerlukan karakter / potongan tambahan - garisnya bisa mulai seperti

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

yang akan menggunakan 4 karakter tambahan: LET, p, =dan :.

Mungkin saya akan merekayasa ini sehingga semua angka dihitung dari angka yang hanya menggunakan 1 digit dan mendapatkan 3 snippet.

EDIT:

Berikut ini cuplikan baru 1 (itulah bagaimana satu baris panjang terbungkus-ditampilkan pada Spectrum, jadi jika Anda ingin menguji kode, itu akan membantu Anda melihat bahwa Anda mengetiknya dengan benar):

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

Saya bisa mendapatkan potongan lain dengan menghindari +dan hanya puas dengan -. Saya tidak akan mencobanya, ini sudah cukup cobaan.

Heimdall
sumber
2

Klein 011 , 9 cuplikan

Cuplikan 1

!@1!aaaaaaaaaaaaaaaaaaaaa/a

Cobalah online!

Cuplikan 2

2((2|bbb0b2bbbb4bbbbbbbb

Cobalah online!

Cuplikan 3


c\*3ccccccccccccccccccccc\ccccccccc3c6cccc9
c\

Cobalah online!

Cuplikan 4

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

Cobalah online!

Cuplikan 5

ee

Cobalah online!

Cuplikan 6

fff

Cobalah online!

Cuplikan 7

ggggg

Cobalah online!

Cuplikan 8

hh

Cobalah online!

Cuplikan 9

iiiii

Cobalah online!

Penjelasan

Ini adalah tantangan yang sangat menyenangkan bagi Klein. Topologi unik Klein memungkinkan banyak hal menarik untuk dilakukan. Seperti Anda mungkin memperhatikan jawaban 5-9 hanya menambahkan filler (huruf tidak melakukan apa pun di Klein jadi saya menggunakannya sebagai filler) ke kode untuk merentangkan kotak pembatas. Hal ini menyebabkan ip untuk mengambil jalur yang berbeda melalui bagian kode sebelumnya karena topologi unik Klein.

Saya akan membuat penjelasan lengkap nanti, tetapi untuk sekarang di sini adalah versi program yang lebih mudah dimengerti dengan semua huruf diganti dengan .s.

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

Cobalah online!

Wisaya Gandum
sumber
2

> <> , Nilai: Infinity 1.112.064-6 = 1.112.058

Cuplikan 1 (6 byte)

"l4-n;

Cuplikan ini menampilkan jumlah karakter setelah; tambah satu. Ini dapat diperpanjang untuk tak terbatas jumlah yang sangat besar potongan satu karakter masing-masing. Google cepat memberi tahu saya ada 1.112.064 kemungkinan karakter Unicode, minus 6 yang sudah saya gunakan.

Coba Ini online

Jo King
sumber
1

R , skor: 79

Kredit untuk Sean jawaban Perl untuk inspirasi; ini menyalahgunakan beberapa kebiasaan penerjemah R.

Cuplikan pertama:

nchar(scan(,""))
a

cuplikan berikutnya adalah karakter di:

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

Cobalah online!

The scanfungsi membaca data dari file ""yang defaultnya stdin().

Dokumen untuk stdin()menunjukkan bahwa:

Ketika R membaca skrip dari file, file tersebut adalah 'konsol': ini adalah penggunaan tradisional untuk memungkinkan data in-line (lihat 'Pengantar R' sebagai contoh).

Oleh karena itu, data selanjutnya menjadi file. Ini dapat diperluas secara sepele, dan dapat bekerja dengan beberapa pengkodean yang berbeda.

Giuseppe
sumber
1

Pyke , 256 byte, skor 254

Harap dicatat bahwa ini adalah kode hex byte aktual, dipisahkan oleh spasi, karena di sana byte nol ( \x00) disertakan.

Memulai cuplikan:

6C 22 00

Cuplikan 1-char berikutnya:

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

Coba di sini!

Erik the Outgolfer
sumber
1

Java 8, 7 snippet (19 byte)

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

Hanya permulaan, akan terus bekerja di sana.

Coba di sini.

Penjelasan:

Diutamakan eksekusi mungkin menjadi lebih jelas ketika saya menambahkan tanda kurung:

((1*2)-~0)>4?4:4|(5^(37%7))
  • a*b: Kalikan adenganb
  • ~a: -a-1
  • a>b?x:y: if(a>b){ x }else{ y }
  • a|b: Bitwise-OR adenganb
  • a^b: Bitwise-XOR adenganb
  • a%b: amodulo-b
Kevin Cruijssen
sumber
1

Python 2 , 110 cuplikan

Berikut ini cuplikan lengkapnya:

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

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

Cobalah online!

Cuplikan pertama adalah

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

Dan kemudian 109 cuplikan berikutnya adalah 109 byte berikutnya.

Ini cukup "curang" seperti yang dikatakan Lynn. Cuplikan pertama membuka file dan mengurangi 44 dari panjangnya, lalu masing-masing cuplikan menambahkan 1 ke panjang file tanpa mengubah logika program secara keseluruhan. dengan demikian meningkatkan hasil output sebesar 1.

Wisaya Gandum
sumber
1

dc , skor 13, 58 byte

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

Cobalah online!(Catatan, versi TIO menambahkan fsetelah setiap potongan untuk mencetak seluruh tumpukan, menunjukkan bahwa setiap potongan hanya meninggalkan nilai tunggal pada tumpukan; juga saya lupa ruang terdepan pada potongan terakhir yang tidak masalah secara fungsional ketika mereka dipecah-pecah oleh jeda baris tetapi tidak dihitung untuk penggunaan karakter saya)

Setiap rangkaian cuplikan tambahan meninggalkan nilai yang diinginkan dan hanya nilai yang diinginkan pada tumpukan. Setelah memukul 12, saya sudah kehabisan cara untuk makan tumpukan. Saya mencoba menggunakan operasi matematika sejak awal karena mereka melahap tumpukan dan ketika kita masuk ke angka yang lebih besar itu menjadi lebih sulit untuk mengelola seperti itu. Ketika semua dikatakan dan dilakukan, saya hanya memiliki angka 0 yang tersisa untuk dimainkan dan sangat sedikit di jalan stack-popping, jadi saya pikir 13 cukup dekat dengan maxed out. Saya yakin ada banyak cara yang serupa (dan mungkin lebih pendek) untuk mencapai ini di dc, ini hanya semacam jatuh ke tempatnya. Perhatikan bahwa cygwin menangani AF yang dicampur dengan 0-9 berbeda dari kebanyakan versi dc, 44C4r/CC 4//berfungsi untuk cuplikan terakhir di cygwin.

brhfl
sumber
0

Pyth , 124 snippet

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

Cobalah online!

Karakter yang tidak dapat dicetak di mana keluar menggunakan tiga karakter yang dapat dicetak ( x..). Cuplikan pertama panjangnya tiga byte, setiap cuplikan setelah itu tumbuh panjangnya satu.

Jonathan Frech
sumber
0

Beatnik , 22 byte, skor 20

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

Dengan asumsi kata "snippet" memungkinkan Anda untuk mendorong nilai pada stack.


sumber
0

Oktaf, Skor 86

nnz n

Diikuti oleh:

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

Ini mengeksploitasi fakta bahwa Oktaf memperlakukan semuanya setelah nama fungsi sebagai input string. Jadi nnz nmengembalikan jumlah elemen non-nol dalam string 'n'. Kita mencapai 86 dengan menambahkan karakter ASCII yang dapat dicetak lainnya. ',"%#tidak bekerja

Stewie Griffin
sumber
0

Julia 0.6, 111217

Script berikut membuat program lengkap:

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

Penjelasan

Makro

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

diikuti oleh semua karakter unicode berbeda yang diizinkan dalam pengidentifikasi, dihitung dengan isidentifier. Beberapa tanda diakritik mengacaukan penghitungan jadi saya menghapusnya.

mschauer
sumber
0

TeX, skor 61 (mungkin 190)

Cuplikan pertama:

\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 cuplikan lainnya: dalam urutan apa pun, masing-masing berisi satu karakter dari

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

Penjelasan:, \lenyang dipanggil pada bagian akhir, mengubah urutan kontrol menjadi string, setiap karakter (termasuk \) adalah satu karakter token string itu; lalu \glentoken gobbles \, lalu \tlenmenghitung token yang tersisa. Karena itu output panjang dari urutan kontrol (tidak termasuk \).

Karakter dari cuplikan lainnya memperpanjang urutan kontrol yang awalnya adil \t. Urutan kontrol multi-karakter harus terdiri dari huruf saja, tetapi semuanya dihitung sebagai huruf karena semuanya telah ditetapkan kode kategori 11 (menggunakan kode ASCII sehingga karakter itu sendiri tidak muncul dalam cuplikan pertama).

Saya memutuskan untuk menggunakan kode oktal untuk beberapa karakter yang harganya satu simbol, 'tetapi menyelamatkan saya dua digit, 8 dan 9, jadi saya mendapatkan satu cuplikan. Mungkin bisa mendapatkan pasangan lagi jika saya tidak perlu\expandafter .

Keluaran

Kemungkinan perubahan: bungkus \number\count1ke dalam \message{}sehingga output tidak masuk ke dalam .dvioutput melainkan untuk konsol keluaran dan .log. Tidak ada biaya surat tambahan.

190

Sayangnya TeX bekerja dengan ASCII dan bukan Unicode (atau tidak sekarang?), Tetapi solusi saya mungkin dapat diperluas untuk memasukkan 129 potongan karakter tunggal yang berisi karakter dengan kode 127-255. Mungkin bahkan beberapa karakter sebelum 32. Karakter 32 (spasi) tidak berfungsi, jika tidak saya akan memasukkannya ke dalam cuplikan juga - tidak memerlukannya di cuplikan pertama. Tentu saja, masing-masing karakter tambahan ini harus \catcoded menjadi huruf dalam cuplikan pertama.

Heimdall
sumber
0

Pip, 57 byte, skor = 16

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

Catatan yang <tab>mewakili karakter tab literal (ASCII 9). Cobalah online!

Setiap cuplikan adalah program lengkap yang menampilkan nomor yang diinginkan. Sebagian besar dari mereka bekerja pada prinsip bahwa ekspresi terakhir dalam program Pip di-autoprinted: misalnya, dalam potongan 5, kode sebelumnya dievaluasi, tetapi satu-satunya bagian yang penting adalah 5. Pengecualian untuk ini adalah:

  • Cuplikan 3 berfungsi dengan baik dalam isolasi sebagai RT9(akar kuadrat dari 9), tetapi setelah cuplikan 2 ia sebenarnya diurai sebagai 2RT9(akar ke-2 dari 9) - yang, tentu saja, sama dengan jumlah yang sama.
  • Snippet 6 mendapatkan karakter ke-8 (0-diindeks) dari e ^ 3, yang merupakan 6. Tapi itu juga menarik angka 8 ke dalam yvariabel. Cuplikan 8 lalu menampilkan nilai y.
  • Cuplikan 12 mengambil 11 dari cuplikan sebelumnya dan menambahkan o(diinisialisasi ke 1). Cuplikan 13 mengambil hasil itu dan mengurangi v(pra-inisialisasi ke -1).
  • Potongan 16 output 1tanpa baris baru ( Ok=k, di mana k=kmengevaluasi ke nilai kebenaran default 1), dan kemudian mencetak secara otomatis 6.

Hal menarik lainnya:

  • Cuplikan 14 menggunakan operasi regex untuk mengekstraksi 14dari nilai pi.
  • Cuplikan 15 mengubah string "F"dari heksadesimal.
DLosc
sumber
0

Zsh , skor> 50 000 (1 112 046?), 16 + Σ (panjang codepoint UTF-8) byte

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

Zsh menangani penyandian multibyte secara default. Cuplikan dasar memiliki 18 karakter unik, total 34. Setiap codepoint lain (simpan untuk byte nol) dapat ditambahkan ke ini. Saat saya menulis ini, skrip saya menguji ini pada codepoint ~ 50 000, ukuran file total 150 ribu, sekitar 30 snippet / detik. Jalankan skrip tes lengkap saya sendiri di sini. Anda mungkin ingin menyesuaikannya untuk mulai pada beberapa codepoint nanti.

Coba 2000 cuplikan pertama secara online!

Lebih banyak cuplikan dimungkinkan dengan menggunakan teknik ini .

Fungsi Gamma
sumber