Baru-baru ini, seseorang mengusulkan batas yang lebih ketat untuk panjang garis default Python:
Jelas, tidak ada program yang boleh menggunakan lebih dari 80 karakter per baris, untuk sejumlah alasan. Pertama dan terutama, untuk keterbacaan dan pemeliharaan, penting untuk memiliki standar yang kuat, sehingga kita dapat menyesuaikan lebar editor teks kita dengan tepat. Sebagai manfaat sekunder, kode dapat dengan mudah ditransfer ke media yang mungkin memiliki batasan, dan di mana menambahkan jeda baris dapat mengganggu, seperti mencetak halaman untuk ditinjau dalam rapat, atau kartu punch.
Tetapi apakah 80 karakter terlalu tinggi? Beberapa menyarankan 79, atau bahkan serendah 75, untuk memungkinkan terminal lebar 80 karakter agar sesuai dengan kode dengan beberapa kolom yang ditujukan untuk nomor baris. Jelas, pada akhirnya, lebih rendah lebih baik, karena batas bawah memungkinkan kode untuk digunakan dalam lebih banyak situasi tanpa memformat ulang.
Tujuan Anda adalah untuk menemukan dan menunjukkan panjang garis minimum yang diperlukan oleh Bahasa Favorit Anda dengan menulis varian FizzBuzz dengan jumlah karakter paling sedikit di setiap baris.
Memasukkan
Integer, n , melalui metode apa pun yang diinginkan.
Keluaran
Cetak angka dari 1 hingga n , ( n ≥ 1, n ∈ ℤ) dipisahkan dengan jeda baris, kecuali:
- untuk kelipatan 3 cetak "Apple"
- untuk kelipatan 5 cetak "Pie"
- untuk kelipatan cetak 3 dan 5 "ApplePie"
Mencetak gol
Panjang garis maksimum dalam byte, tidak termasuk jeda baris (Cr, CrLf, Lf, atau jeda standar sistem lainnya, tentukan, seperti yang diinginkan), dan panjang kode total dalam byte sebagai tiebreak.
Aturan
Semua jeda baris harus bermakna. Jeda baris yang dapat dihapus dan garis yang berdekatan langsung digabungkan tanpa berdampak pada output, harus dihilangkan.
Jawaban:
> <> , 1 byte per baris,
243161135 byte-26 byte terima kasih kepada Jo King!
Bahasa 2D FTW! Meskipun menulis loop dan cabang menggunakan instruksi goto bukannya struktur 2D tidak menyenangkan.
Cobalah online! , atau tonton di taman bermain ikan !
Ikan berenang ke bawah sepanjang kode, menggunakan goto bersyarat untuk melewati sesuatu tergantung pada apa yang membagi akumulator.
Saya percaya ini memenuhi spesifikasi: apa pun baris baru dihapus, ikan selalu mengenai awal
v
(satu-satunya instruksi yang mengubah arah), sehingga ikan selalu berenang ke bawah di kolom pertama. Dengan demikian menghapus baris baru memiliki efek hanya menghapus karakter berikutnya dari jalur ikan, dan saya tidak berpikir Anda dapat menghapus salah satu karakter tanpa mengubah output.sumber
Haskell , 3 byte / baris,
494 471 470 463 453 450461 byteEDIT:
-1+x
menjadix-1
.--
baris tambahan setelahnyax-
.f
Digunakanc 47:[]
sebagai gantinya[c 47&0]
.w
.a="Apple"
danp="Pie"
masuk#
dan gunakan rekursi boneka untuk 15 kasing.w
dalamf
. Hapus berlebihan--
antarax
dan15
.%
fungsi. Akhirnya membuat beberapa pengujian otomatis untuk memastikan tidak ada lagi kejutan.f
mengambilInt
dan mengembalikan aString
.Cobalah online!
Pembatasan sumber tes! (Jalur 70 dikecualikan dari pengujian karena menghapus baris barunya menyebabkan loop tak terbatas tanpa output.)
Versi dengan trik meremas yang paling penting dihapus:
Bagaimana itu bekerja
{}
. Karena saya sebenarnya mendefinisikan fungsi daripada keseluruhan program, saya tidak begitu yakin bagaimana cara menghitung byte; Saya telah memilih untuk membela diri menghitung baik yang{}
s dan tambahan;
pemisah deklarasi (yang terakhir biasanya menjadi baris baru dalam mode Haskell normal.)--
komentar baris, yang membuat baris baru tidak dapat dilepas, dan juga baris baru sebelumnya dalam kasus ketika baris sebelumnya berakhir dengan karakter operator (yang bukan bagian dari komentar baris) .\
garis miring terbalik dalam string literal, yang di-indentasi untuk kelanjutan garis dengan kemungkinan lekukan. Kesenjangan string dengan pembatas dihapus dari string yang diurai."Apple"
dan"Pie"
ini muncul langsung di output. Untuk"8"
dan"9"
pencocokan pola digunakan untuk memberikan kesalahan jika string memiliki lebih dari satu karakter.&
dan%
operator, yang memungkinkan memaksa garis untuk mengakhiri karakter operator untuk trik pertama. Kita memerlukan ini untuk mengakhiri string literal, karena\"
terlalu lebar untuk ditambahkan--
.&
adalah yang umum, didefinisikan sedemikian rupa sehinggax&y=x
.%
didefinisikan sedemikian rupa sehingga[a]%y=a
, memungkinkannya untuk menggantikan!!0
dan sekaligus memaksakan bahwa argumen stringnya harus memiliki panjang 1.\n
tampaknya tidak mungkin masuk dalam string literal dengan hanya 3 byte di telepon.c x=["9"%0,"8"%0..]!!x
digunakan untuk mengkonversi dariInt
karakter ke karakter, menghitung dari digit'9'
ke bawah.show
empat karakter, angka keluaran harus diimplementasikan dengan tangan.d
adalah daftar string digit"1".."9"
.n
adalah daftar jumlah tak terbatas dari representasi yang["1","2","3",...]
didefinisikan secara berulang menggunakand
.#
mengkonversi suatuInt
x
ke bentuk ApplePie yang diberikan argumen pertama ekstra yaitugcd
darix
dengan 15.sumber
Haskell , 7 byte / baris, 339 byte
Persyaratan agar jeda baris menjadi bermakna menjadikan ini tantangan non-sepele di Haskell. Hampir tidak ada cara untuk menyisipkan jeda baris yang tidak dapat dihapus, jadi semuanya harus dilakukan dengan pernyataan kecil yang sah.
Cobalah online!
sumber
Jelly ,
32 byte / baris,1068056 byteBaris dan kolom string literal dialihkan, jadi menghapus baris baru mengacaukan pesanan mereka.
Baris yang tersisa adalah tautan / fungsi yang terpisah dan berisi panggilan fungsi (
¢
), sehingga hanya dapat digabungkan jika panggilan fungsi dihilangkan juga.Cobalah online!
sumber
TI-BASIC, 4 byte per baris
Karena tujuannya hanya untuk meminimalkan panjang garis maksimum, beberapa garis lebih panjang dari yang seharusnya, tetapi yang terkecil yang bisa saya buat adalah garis terpanjang adalah 4 byte. Oleh karena itu saya merasa itu akan membuat kode lebih mudah dibaca jika saya menggabungkan garis yang dapat digabungkan tanpa melebihi 4 byte.
Tidak disatukan
Tentang Bahasa dan Keterbatasan
TI-BASIC adalah bahasa tokenized, dan, dalam hal ini, masing-masing token adalah 1 byte dengan pengecualian dari
StrN
variabel, yaitu 2 byte. Selain itu, Anda dapat meninggalkan kurung tutup sebagian besar waktu. Theremainder(
fungsi 2 byte, sehingga dengan itu akan membutuhkan setidaknya 5 byte (satu untuk fungsi, dua untuk argumen, dan satu untuk koma diremainder(I,3
). Sebagai gantinya, saya menggunakanfPart(
dannot(
fungsinya untuk membuatnya lebih pendek, yang keduanya merupakan token 1 byte. Juga, Anda dapat melihat saya menggunakan variabel bawaanAns
cukup banyak, karena setiap ekspresi yang dievaluasi pada sebuah baris dengan sendirinya akan disimpan secara otomatis ke dalamnya. Jadi, saya dapat menyimpan beberapa byte dengan memisahkan ekspresi dan tugas.Strategi lain adalah untuk meminimalkan penugasan string. Metode saya untuk melakukannya tergantung pada panjang garis maksimum di sisa kode. Setelah saya menentukannya menjadi 4 byte, saya bisa menjejalkan sebanyak mungkin setiap string pada baris yang sama untuk meminimalkan jumlah tugas yang saya butuhkan. Saya melakukan ini demi keterbacaan.
Faktor pembatas dalam kode ini adalah penugasan ke variabel string dan gabungan dengan variabel string. Garis-garis
Ans→Str1
danStr1+Ans
keduanya total 4 byte. Saya harus menemukan cara untuk menghilangkan variabel string sepenuhnya untuk lebih meminimalkan panjang garis maksimum dalam kode saya. Segala sesuatu yang lain dapat dipersingkat menjadi maksimal 3 byte atau kurang per baris.Masalahnya ada pada penugasan ke variabel numerik, seperti
1→I
. Anda tidak dapat bermain golf lebih jauh tanpa menghasilkan solusi tanpa variabel yang panjangnya tidak melebihi 2 byte. Itu tidak mungkin terjadi untuk tantangan ini.Operator biner suka
+
membutuhkan simbol operator dan argumen kiri dan kanan. Jadi tanpa ini, Anda tidak akan bisa menyatukan senar. Tanpa penggabungan string, tidak akan ada cara untuk menampilkan string yang diperlukan untuk program ini untuk menyelesaikan tantangan tanpa melebihi 2 byte dalam panjang garis. Oleh karena itu batas teoritis untuk tantangan ini dalam bahasa ini adalah 3 byte per baris, yang tidak dapat saya capai.sumber
If A and B
Ans
token 1 byte, sedangkan tiga karakter berturut-turutAns
adalah 1, 2, dan 2 byte masing-masing untuk total 5. Ini bukan string ASCII, secara harfiah token ketika Anda mengetik pada kalkulator.C (gcc) , 2 byte per baris,
374368320310262 byteSaya menganggap itu bisa bermain golf sedikit lebih. Garis miring terbalik yang keluar dari baris baru membuatnya agak sepele.
Cobalah online!
sumber
&&
.Python 3 , 4 byte / baris, 113 byte
Cobalah online!
sumber
PHP 7, 2 byte per baris
sumber
Aceto , 1 byte per baris, 230 byte
Yah, itu tidak menyenangkan untuk ditulis. Sebagai fungoid, struktur kontrol Aceto sangat bergantung pada sifat 2D-nya, tetapi kita dapat mengatasinya dengan banyak, banyak lolos bersyarat (
`
). Satu-satunya masalah dengan itu adalah bahwa mereka mempengaruhi perintah berikutnya, terlepas dari keberadaannya (semua program Aceto adalah kuadrat, secara internal), itulah sebabnya kita perlu menyelaraskan program di beberapa tempat dengan memasukkan garis kosong di beberapa titik.String literal tidak dapat digunakan, tetapi literal char dapat (di beberapa tempat; sekali lagi, kita perlu menyelaraskannya).
Dipanggil dengan
20
, ini mencetak:Ini tidak pernah terjadi di sini karena berjalan dari bawah ke atas.
Setidaknya ada satu tempat di mana kita dapat menyimpan 2 byte (dengan mengganti
`X
dengan a|
atau#
), tetapi saya menyimpannya karena biaya runtime yang terkait dengan menjalankan melalui kurva Hilbert yang relatif besar.Saya juga mengabaikan persyaratan implisit untuk menggunakan
\r
atau\r\n
baris baru karena saya pikir ini adalah kesalahan yang tidak disengaja oleh OP. Jika ada pengeditan atau komentar yang memperkuat persyaratan ini, saya dapat mengubahnya tanpa banyak kesulitan untuk menggunakan CR baris baru.Bytecount didasarkan pada pengkodean pengkodean Aceto; Latin-7, di mana
£
satu byte.sumber
Perl 5 , 2 byte per baris, 182 byte
Cobalah online!
Sintaks Perl sangat pemaaf, sehingga banyak celah dapat ditambahkan ke kode dan komentar ditambahkan, yang membuat ide inti cukup mudah. Tujuan utama dari kode ini adalah untuk membangun string yang berisi kode yang ingin kita jalankan, dan
eval
itu. Di Perl, dimungkinkan untuk memanggil fungsi menggunakan string atau variabel dengan&{...}
notasi, sayangnya,eval
tidak bisa dipanggil dalam formulir ini, tetapievalbytes
, selama Anda menyebutnya melaluiCORE::
namespace. Membangun string itu cukup mudah dan program ini diteruskan langsung ke panggilan ini. String dibangun menggunakan baris baru sebagai bagian dari XOR, untuk membangun ini saya menggunakan skrip ini. Agar ini tetap valid, beberapa tempat harus memiliki komentar, sehingga menghapus baris baru akan menghasilkan kode yang tidak berfungsi.Rutinitas FizzBuzz diambil dari jawaban primo yang luar biasa .
Perl 5 , 1 byte per baris, 172 byte
Jadi, saya (sekarang) tahu ini tidak benar , karena banyak baris baru dapat dihapus, tetapi karena ini adalah pendekatan awal saya untuk masalah saya menambahkannya. Sangat menyenangkan melihat seberapa jauh Anda bisa mendorong sintaks Perl! Saya menikmati masalah ini dengan caranya sendiri, meskipun itu tidak valid.
Cobalah online!
sumber
SmileBASIC,
97 byte per baris,159155154152 byteIni adalah tantangan yang sangat menyenangkan. Sayangnya, aturan terhadap jeda baris yang tidak perlu menyebabkan beberapa masalah, (walaupun untungnya tidak mempengaruhi panjang garis maksimum di sini.) Saya harus menambahkan komentar di antara baris seperti
A%=I/3
danA=A%*3
, karenaA%=I/3A=A%*3
diuraikan dengan benar dalam SB. Saya dapat menggunakan trik untuk meninggalkan beberapa komentar, karena menggantiA
denganE
membuat garis itu tidak valid (Ini ada hubungannya dengan angka yang ditulis menggunakanE
notasi, saya pikir.3E
Dianggap sebagai angka yang tidak valid daripada angka dan nama variabel.)Keterbatasan terbesar di sini adalah mendapatkan masukan.
INPUT x
adalah cara paling sederhana yang diizinkan, alternatifnya adalah mendefinisikan suatu fungsi dengan nilai input sepertiDEF F x
tetapi itu masih 7 karakter. Membuat pernyataan bersyarat juga sulit; Saya tidak bisa memikirkan yang lebih pendek dari ituWHILE x
.sumber
A%=I/3A=A%*3
secara sintaksis valid tetapi secara logis rusak, Anda tidak perlu char komentar.A%=I/3
danA=A%*3
, jadi komentar diperlukan.JavaScript (ES6), 3 byte per baris
Menggunakan variabel global
top
untuk mengakseswindow
objek, dari mana kitaeval
mendapatkan kode berikut:Anda harus menjalankannya di konsol karena
top
tidak dapat diakses dari Stack Snippet.sumber
C #, 9 byte per baris,
248 242230 byteKarena C # tidak peduli dengan linebreak, perlu komentar oneline di akhir hampir (terima kasih Ørjan Johansen) setiap baris untuk mematuhi aturan. Program ini mengharapkan n sebagai argumen baris perintah. Berikut ini sebanyak mungkin baris baru yang tidak dapat dihapus:
Tetapi karena garis terpanjang adalah 9 byte, jalur lain juga bisa mencapai itu, memotong beberapa byte:
sumber
//
antara token yang akan menyatu bersama, sepertistatic
danvoid
.var
s="";if//
(i%3==0//
)s+=//
"Apple"//
;if(i%5//
.A
dari baris pertama ke baris kedua.Python 2, 5 byte / baris, 93 byte
Standar max6 sudah usang.
Cobalah online!
Python 2 dan 3, 5 byte / baris, 100 byte
Cobalah online!
sumber
JavaScript, maks 6 byte / baris, 528 byte
Ide merobek dari sini .
Kode robek dari sini .
Terima kasih kepada Anders Kaseorg untuk
g=eval
, menghemat satu byte per baris.Tidak terpelihara:
sumber
a=""+\n"f"+\n"o"+ ...
dan diakhiri denganeval(\na)
sedikit lebih pendekf=eval
danf(a)
.PHP, 4 Bytes / line
Cobalah online!
sumber
APL (Dyalog) , 5 byte per baris
Cobalah online!
sumber
Retina , 4 byte / baris
Cobalah online!
sumber
R , 10 byte per baris, 800 byte
Aturan "linebreaks yang bermakna" membuat ini menantang. Saat ini ini hanya menjabarkan kode fizzbuzz ke dalam string dan kemudian menjalankannya.
Cobalah online!
Berikut ini adalah kode ApplePie yang digabungkan (diadaptasi dari golf MickyT di sini ).
Dan kode parsing versi ungolfed:
Di sini saya gunakan
toString
untuk menggabungkan daftar simbola
menjadi satu string. Namun, perilaku default adalah memisahkan masing-masing simbol dengan,
, jadi kami menelepongsub
untuk menggantinya dengan nol. Lalu kami berikanparse
daneval
untuk melakukan pekerjaan kotor.Mungkin saja ada pendekatan yang tidak menggunakan metode parsing string ini dan hanya menerapkan fizzbuzz, tetapi bagi saya tampaknya menggunakan
for
atauwhile
atau mendefinisikanfunction
garis yang lebih panjang dari pendekatan saat ini.sumber
Ruby,
105 byte / baris,354214 byte-140 byte dari skor mentah dari @NieDzejkob.
Bagaimana itu bekerja
Ruby akan secara otomatis menggabungkan urutan string literal (kecuali untuk literal karakter tunggal seperti
?a
) dalam pernyataan yang sama. Itu berartix = "a" 'b' "c" %q{d}
setara denganx = "abcd"
. Kami menggunakan ini untuk membagi kode seperti FizzBuzz menjadi string yang jauh lebih kecil untuk dipanggileval
, karena+
akan membatalkan program karena aturan menghapus-baris baru, tetapi\
akan menyebabkan kesalahan sintaksis jika baris baru dihapus!sumber
eval
baris awal lebih panjang dari yang lain, kan?Julia 0,6 , 5 byte per baris, total 168 byte
Cobalah online!
Ini
print
membawa ini tak terhindarkan (afaict) ke dalam 5 byte per wilayah baris.Tidak Disatukan:
*
adalah operator rangkaian string, jadia*p*"\n"
membentuk "ApplePie \ n".|>
adalah operator fungsi chaining (/ perpipaan), sehingga string yang dipilih akan dikirim sebagai argumen untukprint
. Tidaksin
digunakan, itu hanya ada karenaprint
perlu dalam array untuk memiliki spasi putih yang signifikan setelah itu (menggunakan#
trik setelah itu akan membawa jumlah byte per baris max ke 6).Jika hanya mengembalikan output sebagai array diperbolehkan, itu dapat dilakukan dengan 4 byte max per baris:
Julia 0,6 , 4 byte per baris, total 152 byte
Cobalah online!
Fungsi yang mengambil n dan mengembalikan array yang berisi output yang diharapkan. Panjang garis maks di sini dibatasi oleh
n->
- Julia perlu bahwa dalam satu baris untuk menguraikannya dengan benar sebagai awal dari lambda.sumber
Pascal (FPC)
-Sew
, 6 byte per baris,348320 byteCobalah online!
Memanfaatkan FPC untuk mendapatkan 6 byte per baris; tanpanya, hasilnya akan jauh lebih buruk. Ini adalah lebar garis sekecil mungkin karena sesudahnya
write
harus salah satu;
atau(
(atau spasi kosong yang tidak perlu), jadi komentar khusus dimasukkan untuk menghindari ini. Fitur-fitur dari FPC yang mempengaruhi jawaban ini adalah://
- Memulai komentar satu baris.{$<something>...}
adalah arahan kompiler. Jika arahan tidak ada, FPC akan mengeluarkan peringatan (dan{$ ...}
juga pada). Dalam program ini,{
dan$
dipisahkan dengan baris baru yang akan mengeluarkan peringatan saat dihapus.-Sew
- Kompiler juga menghentikan peringatan sehingga{
dan$
bergabung menghentikan kompilasi.sumber
Japt , 3 byte per baris
Hampir berhasil menurunkannya menjadi dua byte per baris, tetapi pengembalian dari peta akan pecah jika diikuti oleh baris baru.
Implementasi FizzBuzz sendiri dari thread FizzBuzz kanonik .
Cobalah online!
sumber
LOLCODE ,
188 byte per baris, total 303 byteCobalah online!
-10 byte per baris menggunakan karakter garis-kelanjutan
…
, terima kasih kepada Ørjan Johansen!sumber
Python 2 , 5 byte / baris
Cobalah online!
sumber
'z\"'
berarti hal yang sama dengan'z\
so"'
, jadi aturan baris baru yang berlebihan berarti Anda tidak diizinkan memulai garis kelanjutan di dalam string"
.r'...'
sekarangSyntaxError
.FizzBuzz
ke menggunakanApplePie
.JavaScript (ECMAScript6), 2 byte per baris
Penjelasan panjang
Cara kita membuat garis lebih pendek adalah mentransformasikan kode menjadi string dan keluar dari ujung garis, ini akan memaksakan batas 2bytes per baris.
Jadi
alert(1)
menjadiTetapi sekarang kode Anda adalah sebuah string sehingga kami perlu menjalankan string sebagai kode. Saya tahu setidaknya 4 cara Anda dapat mengeksekusi string sebagai kode:
eval(
onclick=""
atribut, tetapi saya tidak dapat mengatur untuk membuat bagian pembuatan elemen menjadi pendek.Semua kehidupan fungsi asli dalam jendela objek dan di javascript Anda dapat mengakses properti obyek menggunakan notasi dot sehingga
eval()
menjadiwindow.eval()
, atau Anda dapat mengakses properti menggunakan notasi bracketwindow['eval']()
. Anda dapat memanfaatkan ini untuk memecaheval
dalam beberapa baris menggunakan metode yang dijelaskan sebelumnya. Tetapi Anda masih harus mengetikkan jendela , satu triknya adalah jika Anda tidak berada di dalam bingkai, variabel teratas juga adalah jendela, jadi window.eval menjadi top.eval (kurang 3 byte).Jadi ini akan membuat kode minimal 3 byte. Untuk membuat kode 2 byte saya menggunakan
new Function(/*string*/);
konstruktor, tetapi saya harus kreatif untuk mengaksesnya tanpa harus mengetiknya.Pertama, konstruktor Fungsi memungkinkan Anda untuk menyebutnya sebagai fungsi yang menghilangkan kata kunci baru, ini mengurangi 4 byte tetapi juga penting karena alasan lain. Memanggil konstruktor sebagai fungsi masih mengembalikan sebuah instance yang memungkinkan kita beralih
new Function(code)
keFunction(code)
. Hal penting lainnya adalah bahwa konstruktor fungsi memilikicall
metode yang memungkinkan Anda memanggil fungsi apa pun tetapi mengabaikan referensi ini, dan konstruktor fungsi itu sendiri adalah fungsi yang Anda dapat memanggil metode seperti ituFunction.call(null, code)
.Semua fungsi asli adalah turunan dari Function constructor, dan semua objek di javascript memiliki properti constructor . Jadi Anda dapat memiliki akses Function constructor pada fungsi asli seperti apa pun
alert.constructor
, dan menggunakan metode panggilan kita dapat mengeksekusi constructor sebagai sebuah fungsi. Sekarang kita memiliki alert.constructor.call (null, code) mengembalikan fungsi.menggabungkan teknik sebelumnya kita bisa mengubahnya menjadi
alert['constructor']['call'](null, code)
Sekarang kita hanya perlu menemukan fungsi atau metode bernama singkat, jadi saya memilih metode big () di dalam konstruktor String. Jadi saya bisa mengaksesnya langsung dari string kosong
"".big
Kemudian saya memecahkan semua hal dalam 2 byte
Singkat er penjelasan (TLDR)
Saya mengakses konstruktor Function (code) baru untuk mengurai string dan bukannya eval (code) . Konstruktor ini tersedia di setiap fungsi asli dengan melakukan Fungsi apa pun. konstruktor , seperti
alert.constructor===Function
. Saya menggunakan fungsi / metode di dalam String.prototype.bigString.prototype.big.constructor.call(null, /*string*/)
Tetapi mengaksesnya langsung dari string literal"".big
dan mengubahnya ke notasi braket .""['big']['constructor']['call'](0, CODE)
untuk dapat memecahkannya menggunakan\
.sumber
'
dan]
dapat dihapus dan program akan tetap berjalan dengan sukses.Pip , 3 byte per baris, total 72 byte
Cobalah online!
Pip sangat fleksibel tentang spasi putih, jadi satu-satunya strategi yang tampaknya layak adalah membuat string, memodifikasinya dengan cara yang mengharuskan baris baru tidak terganggu, dan evaluasi itu.
Kami membuat string di mana setiap karakter lain adalah baris baru, dan mengambil setiap karakter lain menggunakan
UW
(tidak berombak) dan tidak terarah@
(dapatkan elemen pertama):Hasilnya
@UW
harus berupa kode ApplePie kami, yang diadaptasi dari solusi FizzBuzz di sini . Jika ada baris baru dalam string yang dihapus, ini tidak akan menghasilkan kode lengkap, memberikan kesalahan sintaks atau output yang salah.Masih ada dua baris baru di luar string. Kami membuat ini wajib dengan menggunakan
Y
operator (yank) - yang di sini bertindak sebagai no-op - bersama dengan cara Pip mem-parsing huruf besar:Jadi jika baris baru ini dihapus, program mem-parsing berbeda dan tidak melakukan apa yang seharusnya.
sumber
Java 8, 7 byte per baris, 171 byte
Void lambda mengambil
int
. Saya menduga ini mematuhi persyaratan tentang baris baru, tetapi saya tidak dapat membuktikannya, dan memverifikasi dengan brute force akan memakan waktu sekitar satu bulan di komputer saya. Begitu seterusnya.Cobalah secara Online
Cukup membosankan karena komentar garis. Satu-satunya hal yang menarik di sini adalah penggunaan
System
referensi nol , yang tampaknya diperlukan untuk mencetak standar di bawah 8 byte per baris. Perhatikan juga bahwaprint
pemanggilan metode adalah bottleneck.Tidak disatukan tanpa komentar:
sumber