Tantangan
Tugas Anda adalah menulis sepotong kode yang menghasilkan sepotong kode lain. Kode itu pada gilirannya harus mengeluarkan lagi kode lain sampai kode akhir mengeluarkan bilangan bulat 1 . Rantai berakhir saat pertama kali 1 dihasilkan.
Tidak ada program Anda yang dapat membagikan karakter apa pun (ada satu pengecualian di bagian Aturan).
Pengajuan yang menang akan menjadi pengajuan dengan rantai terpanjang. Tie-breaker akan menjadi total panjang kode terpendek.
Aturan:
- Anda dapat menggunakan kedua fungsi, program, dan cuplikan. Anda dapat mengasumsikan lingkungan REPL.
- Semua fungsi harus ditulis dalam bahasa yang sama
- Simbol bahasa independen tidak diizinkan. Ini termasuk sebagian bahasa bebas simbol seperti Headecks.
- Pemformatan output default secara opsional dapat diabaikan dalam output fungsi. Ini termasuk mengikuti baris baru,
ans =
dll. - Anda dapat menggunakan kembali karakter spasi (ASCII code point 32), tetapi perhatikan hal berikut:
- Anda dapat menggunakan karakter spasi sebanyak yang Anda suka di salah satu fungsi, tetapi batasi hingga 5 di semua fungsi lainnya
- Anda tidak boleh menggunakan kembali karakter apa pun jika titik kode 32 bukan spasi dalam bahasa Anda.
Tidak ada program yang dapat mengambil input
Panjang rantai minimal harus dua program.
Contoh:
Kode awal Anda adalah abc+cab+bac
. Output ini:, foofoo*123
yang pada gilirannya menghasilkan disp(~0)
, yang menghasilkan 1
. Ini adalah rangkaian 3 program, dengan panjang gabungan 29 (tie breaker).
code-challenge
code-generation
Stewie Griffin
sumber
sumber
2^3
, yang hanya akan mengevaluasi1
, atau apakah itu harus misalnyalambda:2^3
,print(2^3)
, dll?1
berupa program dan output dari program itu atau apakah rantai berakhir kapan1
outputnya?Jawaban:
05AB1E , 5-rantai: 236 + 29 + 13 + 3 + 1 = 282 byte
Cobalah online!
yang mencetak program
Cobalah online!
yang mencetak program
Cobalah online!
yang mencetak program
Cobalah online!
yang mencetak program
Cobalah online!
yang mencetak
1
sumber
8784>žxB
dan aku mungkin KO. Kurangnya angka untuk konversi basis adalah omong kosong total kecuali Anda menghitungnya. Tujuannya, jika Anda ingin mengalahkan emigna, adalah menggunakan jumlah angka unik paling sedikit per iterasi. Jawabannya memerintah tertinggi karena angka 88 dalam iterasi kedua hingga terakhir. Benar-benar jawaban yang bagus.10
dan membuat sesuatu dalam bentuk biner. Tapi saya tidak tahu apakah kita bisa menghasilkan program pertama dari biner tanpaB
.Java 8, rantai 2 fungsi,
90 + 1037 + 428 + 4 = 32 byteYang setara dengan:
-57 byte terima kasih kepada @ OlivierGrégoire .
Cobalah online.
Yang mengembalikan String:
Cobalah online.
Yang mengembalikan integer:
sumber
\u0076\u002D\u003E\u0022\u0076\u002D\u003E\u0022+(3\u002D2)
(59 byte + 4 byte). Aturan mengatakan "Tak satu pun dari program Anda dapat berbagi karakter", jadiv->1
valid karena final1
bukan program.v->1
mengembalikan 1 adalah valid, tetapi dalam jawaban asli saya\u0031
akan berisi 1, danv->1
kemudian akan berisi 1 juga. Kombinasi yang bagus dari Java unicode dan Java biasa. Dan saya bermain golf 2 lebih banyak dengan mengganti(2/2)
ke2/2
. (PS: Sudah ada jawaban Java rantai-3 oleh Jakob .)"\44\55\76"
bukan"\u0076\u002D\u003E"
R , 3-rantai 198 + 44 + 3 byte
Cobalah online!
Pengembalian:
Cobalah online!
Pengembalian:
Cobalah online!
Kembali
1
Penjelasan:
Program pertama hampir sepenuhnya ditulis dalam representasi oktal, di mana setiap karakter ditulis sebagai di
\xxx
manaxxx
kode ASCII dalam mode oktal. Dalam bentuk yang dapat dibaca manusia adalah:Di sini, untuk menghindari penggunaan kurung bulat kami mendefinisikan ulang operator awalan
+
sama dengancat
fungsi, maka kami menggunakannya untuk mencetak string berikutnya. Bahkan setelah menugaskancat
untuk+
, yang terakhir masih menyimpan awalan operator "Status" dan hanya akan mengambil apa pun yang berikut sebagai parameter pertama.Program kedua, cukup cetak karakter
F^F
mendapatkannya dari desimal ASCII:70,94,70
Karena dalam program pertama kami menggunakan representasi oktal, hanya angka
8
dan9
bebas untuk digunakan; karenanya, kami memperoleh70
dan94
dengan beberapa perbedaan antara angka hanya dengan8's
dan9's
.Akhirnya, program terakhir,
F^F
, memanfaatkan^
fungsi (kekuatan) yang memaksaFALSE
untuk0
dan hitungan0^0
kembali1
Kredit untuk:
+
untuk menghindari tanda kurungVersi sebelumnya :
R , 2-rantai
27 + 324 + 2 byteCobalah online!
Pengembalian:
Cobalah online!
Pengembalian
1
.sumber
cat
wajib?"wri\164e"(function args)
untuk menghindarit
atau pengkodean serupa lainnyacat(intToUtf8(c(49,76)))
akan berfungsi dan sedikit lebih pendek. Tidak memperluas rantai.Python 2 , 2-Chain, 7 + 44 = 51 byte
dan
Cobalah online!
Kode 16 basis diterjemahkan menjadi
print 1
, yang dikembalikan oleh fungsi anonim.sumber
Perl 5, 3-rantai,
151139 karakter (114 + 20 + 5)Keburukan di dalam
&{ }
evaluasi keCORE::syswrite
, dan sehingga string hex-escaped dicetak ke output standar sebagai:Harap dicatat bahwa ^ C dan ^ R di atas mewakili karakter kontrol literal. (Dan jangan bingung dengan literal
^
tanda yang terjadi di antara dua string.)Program ini pada gilirannya menghasilkan:
sumber
Oktaf , 3 program, Panjang 42 byte
Output:
[[63 24]*2 '']
. Cobalah online!Output:
~0
. Cobalah online!Output:
1
. Cobalah online!sumber
Cjam, 4-chain, 28 + 20 + 3 + 1 = 52 byte
Cuplikan 1:
Cuplikan 2:
Cuplikan 3:
Cuplikan 4:
Yang kemudian dicetak 1.
Cobalah online!
catatan:
Karena Cjam tidak memiliki interpretasi untuk karakter melarikan diri, yang ada di cuplikan 1 hanya ada untuk tampilan web yang lebih baik. Anda harus menggunakan karakter aktual yang sesuai untuk menjalankan cuplikan.
Jika saya tidak dapat mengurangi lebih banyak karakter, maka pekerjaan yang baik untuk @Emigna untuk
05AB1E
jawabannya!sumber
1
digunakan dalam cuplikan 1Excel, Rantai 2, 27 + 3 byte
Tidak yakin apakah ini OK ...
sumber
CHAR(61)&
di awal juga ada rantai 2?CHAR
menjadiCAR
, 3 byte disimpan), tidak yakin apakah bahasa lain mengurangi lebih banyak--1
sel dan tekan enter, itu hanya akan ditampilkan1
di layar ...=
secara implisit jika Anda mengetik--1
.=
tanda untuk+1
(tetapi memang untuk--1
), jadi saya tidak akan menganggapnya sebagai ekspresi. Dan saya tidak yakin apakah hanya menulis1
dalam sel dan menyebutnya "output 1" valid. Itu sebabnya--1
digunakan.bytecode x86, Rantai 2, 10 + 4 byte
(Dirakit dengan FASM, format PE)
ÇA.Ï?¿<÷Y.
menghasilkan1À@Ã
alamat di sebelahnya dan menjalankannya, yang mengembalikan1
dalam eax (sesuai panggilan cepat). Dalam kedua kasus yang.
sebenarnya mewakiliA
atau LF.Dalam hex:
C7 41 0A CF 3F BF 3C F7 59 0A
dan31 C0 40 C3
.Dibongkar:
menghasilkan
Ini (ab?) Menggunakan fakta bahwa titik masuk program disimpan dalam ecx, dan kemudian menulis kebalikan dari kode yang akan dieksekusi ke alamat 10 byte lebih dan meniadakannya.
Mungkin atau mungkin tidak pecah jika dirakit dengan apa pun kecuali fasme, untuk apa pun kecuali PE atau dengan titik masuk yang berbeda.
sumber
JavaScript REPL, banyak byte, 4 iterate
Terlalu malas untuk mengoptimalkan kode JSFUCK
JavaScript REPL, 164 bytes, 3 iterate
mungkin bisa berkembang
Cobalah online!
sumber
1
pro lain, jadi yang pertama1
adalah program dan yang ke 2 hasilnya{}
s?CJam, 7-rantai, 92365 + 1819 + 79 + 14 + 9 + 3 + 1 byte
Program 92365-byte ini dicetak
yang mencetak
yang mencetak
yang mencetak
yang mencetak
yang mencetak
yang mencetak
1
.sumber
MATL , 5 program, 404 + 159 + 35 + 4 + 1 = 603 byte
Mendapatkan ke 4 program itu sulit. 5 program sangat sulit!
Cobalah online!
Cobalah online!
Ini mungkin program favorit saya yang saya tulis di PPCG:
Cobalah online!
Cobalah online!
Cobalah online!
Penjelasan:
Setelah menghabiskan berjam-jam di program ini, saya tidak akan menulis seluruh penjelasan sekarang! Saya akan menulisnya nanti!
Ringkasan singkat:
Untuk mengonversinya menjadi string alih-alih kode karakter, kita perlu menyatukannya dengan menggunakan string
h
. Untuk mendapatkan string, tanpa menggunakan tanda kutip, atau pengubah XY, kami melakukan konversi basis dan mengonversi bilangan bulat menjadi spasi.sumber
CJam, 10 program, 5.751.122.990 byte
Saya terlalu malas untuk golf itu ... Tapi ternyata saya tidak perlu golf itu untuk menjadi kompetitif. Tetapi tanpa bermain golf agak sulit untuk memposting solusi dalam sebuah jawaban.
Ini seharusnya bekerja dalam penerjemah JavaScript dalam teori, tetapi program ini terlalu lama untuk diuji di browser. Seharusnya output yang sama di Java interpreter kecuali untuk program terakhir. Tetapi mungkin juga kehabisan memori dalam Java interpreter untuk beberapa program pertama.
Statistik
Byte pertama
\n
adalah baris baru dalam program kedua.Generator
sumber
APL (Dyalog) , 2 rantai, 15 + 2 = 17 byte
Cobalah online!
Output program
Keluaran itu
sumber
JavaScript (ES6), 2 fungsi, 31 + 4 = 35 byte
mengembalikan
_=>1
, yang mengembalikan1
Tampilkan cuplikan kode
sumber
Jelly ,
38 37 3635 byte, Chain of 4Cobalah online! ( 18 byte)
Cobalah online! ( 13 byte)
Cobalah online! ( 3 byte)
Cobalah online! ( 1 byte)
18 + 13 + 3 + 1 = 35 byte
Bagaimana?
sumber
Python 2 , 3 snippet, 68 + 12 + 3 = 83 byte
yang menghasilkan string literal literal:
yang menghasilkan:
Yang akhirnya menghasilkan
1
.Cobalah online!
sumber
Java 8, 3 program, 431 byte
Program 1, 332 byte
Sebuah lambda dari satu (kosong) parameter jenis apa pun ke
String
.Ini hanya lambda dengan karakter panah Unicode-escaped mengembalikan teks dari program kedua yang dikodekan dengan urutan escape oktal.
Cobalah secara Online
Program 2, 93 byte
Cuplikan yang menghasilkan a
String
.Cobalah Online (dengan pengembalian ditambahkan)
Program 3, 6 byte
Sebuah lambda dari satu (kosong) parameter jenis apa pun ke
int
.Cobalah secara Online
sumber
\166
untuk\44
untuk -1 byte, karena$
juga merupakan nama variabel yang valid. Cobalah online , menghasilkan$->9-8
( Coba online. )\uXXXX
di kode pertama untuk menghindari->
. Kemudian Anda perlu baikreturn
(fungsi) atauSystem.out
(potongan atau fungsi), keduanya mengandungu
yang sudah Anda digunakan dalam\uXXXX
. Jadi saya pribadi berpikir entri ini tidak valid dan saya menurunkannya sesuai.System.console().printf
bisa digunakan untuk mencegah penggunaanu
. Hal serupa dilakukan dalam jawaban ini dan saya juga menggunakannya dalam dua jawaban saya ini .x->"\146\157\162\50\143\150\141\162\40\44\72\156\145\167\40\143\150\141\162\133\135\173\47\171\47\54\47\54\47\54\47\75\47\54\47\70\47\54\47\56\47\54\47\70\47\175\51\123\171\163\164\145\155\56\143\157\156\163\157\154\145\50\51\56\160\162\151\156\164\146\50\53\53\44\53\156\145\167\40\123\164\162\151\156\147\50\51\51\73"
(319 byte) berubah menjadifor(char $:new char[]{'y',',','=','8','.','8'})System.out.printf(++$+new String());
(89 byte) berubah menjadiz->9/9
(6 byte). Total: 404 byte.System.console()
untuk program ke-2, yang benar 89 byte (sedangkan yangSystem.out
membuatnya 83 byte).SmileBASIC, rantai 3, 375 byte
Output:
Output:
Output:
sumber
PHP 7.0, 2-chain, 35 + 8 = 43 byte
Saat menulis jawaban awal saya, saya menyadari saya hanya bisa menggunakan base64 encode gema kedua. Ini mencukur 11 byte, jadi ini dia. Anda dapat menemukan ide asli saya di bawah ini juga.
Jalankan menggunakan php -r:
Output ini:
Yang kemudian jelas mencetak:
Keluaran:
Kode saya saat dijalankan di terminal. && echo yang ditambahkan hanya untuk keterbacaan.
Komentar:
Tidak banyak yang benar-benar terjadi. Sangat sederhana setelah Anda tahu tentang "?>" Secara implisit bertindak sebagai ";". Bagian "rumit" adalah untuk mencari tahu apa yang harus dikodekan:
Atau kita juga bisa menggunakan "echo" dan "ECHo" (36 + 7 = 43 byte).
Kami juga dapat mengganti; dan?> sekitar menggunakan itu. Ini bekerja sama baiknya dan semuanya memiliki skor yang sama.
Solusi awal saya:
PHP 7.0, 2-chain, 44 + 10 = 54 byte
Ini adalah yang terbaik yang bisa saya lakukan pada awalnya. Saya mengerti bahwa "karakter unik" berarti "gema" tidak sama dengan "ECHO". Semoga saya benar!
Jalankan menggunakan php -r:
Output ini:
Yang pada gilirannya memberi kita nomor kita:
Keluaran:
Kode saya saat dijalankan di terminal. && echo yang ditambahkan hanya untuk keterbacaan.
Beberapa komentar:
Terima kasih atas tantangannya, saya belajar sesuatu hari ini!
sumber
Lua, 2 rantai, 83 + 8 = 91 byte
Keluaran
Output yang mana
sumber
Arang, 2 program, 10 + 2 = 12 byte
Cobalah online! Keluaran
Cobalah online! Yang menghasilkan 1.
sumber
Braingolf , 2 rantai, 9 + 2 = 11 byte
Cobalah online!
Ini output
Cobalah online!
(Ditambah beberapa output default yang dapat diabaikan per aturan OP)
Ini pada gilirannya menghasilkan
sumber
Raeda , 2 rantai, 31 + 3 = 34 byte
Cuplikan 1:
Cobalah online!
Cuplikan 2:
Cobalah online!
Itu adalah cuplikan, karena setiap program Rda yang valid harus menyertakan
main{...}
mengasapi. Mereka juga program Reda REPL yang valid.sumber
dc , 3 program, 48 byte
Pertama:
Menghasilkan yang kedua:
Menghasilkan yang ketiga:
Hasil
1
.Cobalah online!(memiliki beberapa kode stack-clearing dan newline-printing dilemparkan untuk membuat ketiga bit berjalan dalam sekali jalan).
Mungkin yang terbaik untuk memulai pada program tiga
KZn
,. Hanya ada beberapa cara untuk mencetak sesuatudc
, dan saya menyadari pada tahap ini saya mungkin akan terjebak dengan salah satup
ataun
keduanya, keduanya berada di 100-an dalam ASCII desimal. Ini berarti bahwa saya hampir pasti harus menghasilkan 1 alih-alih hanya menggunakan program1n
.K
mendorong presisi saat ini (default: 0) ke stack, danZ
mendorong jumlah digit top-of-stack, yang memberi kita angka 1 untuk dicetak.Program kedua cukup mudah.
P
mencetak karakter dengan nilai ASCII yang diberikan, jadi kami mencetak75
(K
)90
(Z
) dan akhirnya110
(n
), yang bekerja sangat baik. Ini juga berarti bahwa, selain dari 1 yang disebutkan di atas, saya tidak dapat menggunakan angka 5, 7, 9, atau 0 di tempat lain. Saya juga membutuhkan metode selainP
untuk mengubah angka menjadi karakter.Program pertama, kemudian, harus membuat empat angka tanpa menggunakan angka 1, 5, 7, 9, atau 0. Perlu membuat
80
(nilai ASCIIP
)82 2-
:;75
:AA
(110)I-
(kurangi input radix default, 10)I2/
(jadi, 5)2^
(jadi, 5 ^ 2, 25)-
(75);90
:AA
(110)I2*
(dua kali radix input standar 10, jadi 20)-
(90); dan110
: yah, hanya sajaAA
. Setelah membuat80
, kita gunakana
untuk mengonversi angka menjadi string. Ada beberapa perintah everser
dand
uplicate di sana untuk meletakkanP
s di tempat yang tepat, dan akhirnya kita mencetak seluruh tumpukan denganf
.Aku cukup yakin aku tidak mengacaukan ini, tapi kepalaku memang berputar sedikit ...
sumber
05AB1E , 5 + 3 = 8 byte
Cobalah online!
yang langsung kembali kelelawar
Saya mengambil output 1.0 tidak sama dengan 1, jadi saya menjalankan kode itu:
Cobalah online!
yang kembali
Dan begitulah!
Jumlah program =
2
sumber
h
(konversi ke heksadesimal). Theg
(dapatkan panjang, default 0) dengant
(kuadrat-akar) sudah memberikan desimal0.0
. Dengan<
(berkurang 1) menjadi-1.0
dan kemudiann
(kuadrat) mengubahnya menjadi1.0
. Anda juga bisa mengganti<n
dengan>
(naik 1). ;) Jadi totalnya adalah 3 byte (gt>
). Atau Anda dapat menggunakanXt
(1
dan root-square). PS: Saya tidak yakin apakah1.0
untuk1
adalah bagian yang sah dari rantai. Saya sudah meminta OP untuk memverifikasi. Selamat datang di PPCG dan nikmati masa tinggal Anda.Ruby, 2-chain, 24 + 3 = 27 byte
Output adalah
sumber