Tulis program yang menampilkan
Do not repeat yourself!
Kode program Anda harus menghormati batasan-batasan berikut:
- panjangnya harus bilangan genap
- setiap karakter yang ada di posisi
2n
(di manan
bilangan bulat> 0) harus sama dengan karakter di posisi2n-1
. Karakter kedua dari program ini sama dengan yang pertama, yang keempat sama dengan yang ketiga, dll.
Baris baru dihitung sebagai karakter!
Ini adalah kode-golf, jadi kode terpendek menang!
Contohnya
HHeellllooWWoorrlldd
adalah program yang valid
123
atau AAABBB
atau HHeello
salah
Verifikasi
Anda dapat menggunakan skrip CJam ini untuk memverifikasi bahwa kode sumber Anda valid. Cukup tempel kode Anda ke dalam kotak "Input" dan jalankan skrip.
DDDooo nnnooottt rrreeepppeeeaaattt yyyooouuurrrssseeelllfff!!!
akan menjadi jawaban yang valid di TriggerJawaban:
Hexagony ,
166126124 byteMenyisipkan no-ops dan spasi kosong implisit, ini terkait dengan kode sumber berikut:
Saya yakin mungkin untuk mempersingkat ini lebih lama lagi, dan mungkin bahkan menyelesaikannya dengan panjang sisi 6, tapi semakin rumit ...
Bagaimana itu bekerja
Diagram dihasilkan dengan Hexagony Colorer Timwi .
Kode ini sepenuhnya linier. The
\
tepat di awal pengalihan IP ke dalam diagonal, sehingga kita tidak perlu khawatir tentang karakter dua kali lipat sama sekali. Jalur berwarna dieksekusi dalam urutan oranye / merah, biru / abu-abu, hijau, ungu (ketika ada dua jalur dengan warna yang sama, jalur kiri dieksekusi terlebih dahulu, sebelum membungkus sekitar ke kanan).Jika kita mengabaikan no-ops, mirror, dan perintah yang ditimpa oleh orang lain, kode linearnya adalah sebagai berikut:
Letters in Hexagony hanya mengatur nilai tepi memori saat ini ke kode karakter huruf.
;
mencetak tepi memori saat ini sebagai karakter. Kami menggunakan&
untuk mengatur ulang tepi memori ke0
dan mencetak spasi dengan32;
.}
bergerak ke tepi yang berbeda, sehingga kita dapat mengingat32
untuk ruang selanjutnya. Sisa kode hanya mencetak huruf di tepi yang baru, dan sesekali bergerak bolak-balik';}
untuk mencetak spasi. Pada akhirnya kami pindah ke tepi ruang lagi dengan'
, menambah nilai menjadi 33 dengan)
dan mencetak tanda seru.@
mengakhiri program.sumber
;
, sama sekali tidak ada penggunaan kembali antara pasangan karakter dalam kode. Kode saat ini cukup banyak hal pertama yang terlintas di pikiran saya, jadi saya berpikir jika seseorang berusaha cukup keras, seharusnya mungkin untuk menemukan solusi yang jauh lebih rumit yang menggunakan kembali titik koma dan bahkan mungkin beberapa huruf, untuk menyesuaikan ini ke dalam panjang sisi 6.;
hanya sekali saja karena Anda tidak dapat melintasi mereka secara horizontal. Hanya ada 23;
detik dalam kode Anda, dan hanya 6 pengulangan karakter (2 × o, 1 × t, 1 × r, 2 × e), hanya memberikan 29. Secara pribadi, ini lebih dari meyakinkan saya bahwa ukuran 6 tidak mungkin .. .GolfScript,
1308476 byteCobalah online di Web GolfScript .
Bagaimana itu bekerja
Penerjemah GolfScript dimulai dengan menempatkan string kosong pada tumpukan.
Menggabungkan array dengan string mendatar, sehingga hasilnya adalah output yang diinginkan.
sumber
Unary , ~ 1,86 × 10 222
Brainfuck sederhana -> jawaban unary. Sangat sub-optimal;).
Program ini terdiri dari angka genap 0's; secara khusus:
dari mereka.
Kode brainfuck asli:
sumber
1
s dalam program Unary yang menghasilkan string yang diminta. Blok kode kedua adalah program BF yang digunakan untuk memproduksinya. Karena program Unary sepenuhnya terbuat dari1
s, program itu sepele memenuhi persyaratan pengulangan.Ruby -
210014281032820670 byteIni mengasumsikan output dapat berupa nilai balik dari suatu fungsi (tidak ditentukan bahwa output harus ke STDOUT)
Kode:
Caranya adalah dengan membangun string dari string kosong
""
menggunakan operasi append<<
dan kode ASCII dari karakter.Untuk mendapatkan angka untuk kode ASCII saya mencoba menguraikan angka menjadi nilai yang saya dapat dengan mudah menghasilkan. Misalnya ASCII
90
saja88+1+1
, yaitu:88
tidak apa-apa pada itu sendiri11**00
adalah11^0
, yang sederhana1
Untungnya keduanya
++
dan--
berartiadd
ruby, jadi saya bisa menulis90
sebagai88++11**00++11**00
Ada beberapa trik untuk mencapai beberapa angka lebih mudah daripada hanya menambahkan 1, berikut adalah kode yang saya gunakan untuk menghasilkan di atas (yang mencakup semua pemetaan yang saya gunakan):
Saya masih memikirkan trik lain untuk mengurangi karakter yang diperlukan untuk mendapatkan nomor.
Perhatikan bahwa jika Anda menggunakan
-rpp
flag, dan tambahkanpp
ke awal kode seperti:kemudian untuk tambahan 2 + 4 byte ini dapat berfungsi sebagai program yang sepenuhnya lengkap, tetapi itu akan mencetak tambahan
"
sebelum dan sesudah string yang diperlukan:Contoh:
sumber
pp
permata itu adalah huruf ganda ..."
karakter tambahan dalam output dan 2. kebutuhan-rpp
bendera (yang tidak seperti--rrpp
)> <> , 174 byte
Untungnya, batasannya tidak berlaku secara vertikal. Namun, masalah terbesar adalah kita perlu menggandakan setiap baris baru.
Kode yang berjalan kira-kira seperti ini:
Perhatikan bahwa program tidak memiliki spasi ganda - saat dalam mode string,> <> mendorong spasi untuk sel kosong. Sebaliknya, ini berarti bahwa solusi menggunakan
g
(membaca sel tunggal dari kode sumber) akan lebih rumit, karena ruang apa yang ada dalam program menjadi NUL saat dibaca.(Catatan: Ini bisa lebih pendek 50 byte jika diakhiri dengan kesalahan , tapi saya suka cara ini.)
sumber
Sclipting ,
186146 byteSupaya jelas, ada tiga baris kode, yang tengahnya kosong, karena baris baru perlu diduplikasi. Hitungan byte didasarkan pada pengkodean UTF-16.
Penjelasan
Blok karakter Korea pada awalnya mendorong string
"DDDof� \"\u0002nf�of�twG \"\u0002rw'efVpw\aefVaf\u0016twG \"\u0002yw�of�uwWrw'sw7efVlf�fff!\"\u0012"
. Anda akan melihat bahwa setiap karakter ketiga adalah karakter yang kita inginkan; sisanya omong kosong. Inilah alasannya:Dalam Sclipting, dua karakter Korea mengkodekan tiga byte. Dengan demikian, setiap karakter Korea secara efektif mengkodekan 12 bit. Untuk mendapatkan string yang dimulai dengan
D
, 8 bit pertama harus0x44
; sisanya tidak masalah, tetapi karena kita harus mengulang setiap karakter, bit ke 12 sampai 20 juga akan menjadi0x44
. Jadi, kita akan memiliki nilai form0x44n44n
untuk beberapa n , yang terurai menjadi tiga byte0x44 0xn4 0x4n
.Untuk
o
, yang0x6F
, kita dapatkan byte0x6F 0xn6 0xFn
.Karena saya malas, saya mulai dengan penyandian
"DDDooo nnnooottt (etc.)"
dan kemudian mengganti setiap karakter lain dengan yang sebelumnya, itulah sebabnya saya mendapatkan0x444444
="DDD"
untukD
dan0x6F66F6
="of�"
untuko
. Itu�
ada karena0xF6
dengan sendirinya tidak valid pengkodean UTF-8.Sekarang, kembali ke program. Sisa dari program dilanjutkan sebagai berikut:
Sekarang, apa yang ingin saya lakukan selanjutnya adalah menggunakan
"..."
sebagai ekspresi reguler sehingga saya dapat mencocokkan tiga karakter dari string asli sekaligus, menggunakan konstruksi loop 終 ... 終. Namun, karena setiap instruksi diduplikasi, saya perlu memiliki dua loop ekspresi reguler seperti itu bersarang di dalam satu sama lain, dan jika stack underruns saya mendapatkan kesalahan runtime. Karena itu,dan kemudian mulai loop. Dengan cara ini, loop luar iterasi hanya sekali karena itu cocok dengan ekspresi reguler
""
terhadap string""
, yang menghasilkan kecocokan tunggal. Loop dalam berjalan sekali untuk setiap pertandingan"..."
melawan string besar. Tubuh loop adalah:Lingkaran dalam berakhir di sini, sehingga setiap kecocokan dari ekspresi reguler diganti dengan karakter pertama dari kecocokan itu. Ini meninggalkan string yang diinginkan pada stack.
Kemudian loop luar berakhir, pada titik mana string yang diinginkan diambil dari tumpukan dan satu-satunya kecocokan
""
dalam string""
diganti dengan itu, meninggalkan string yang diinginkan sekali lagi pada tumpukan.sumber
Labirin , 528 byte
Baris ganda ganda sakit, tapi setidaknya ini membuktikan bahwa itu bisa dilakukan!
Setiap karakter dicetak satu per satu, pertama dengan membentuk titik kode kemudian mencetak karakter tunggal. Poin kode dibentuk oleh:
dimana
Perilaku yang tidak biasa dari angka-angka Labyrinth dieksploitasi
33::00&&
, yang sebenarnyaSetiap karakter dicetak dengan mekanisme
Yang
xx
ada hanya untuk pad grid sehingga 5 tinggi. Pertama__
tekan dua nol, lalu kita tekan operator rotasi gridv
. Kami menghasilkan nol dan memutar:dan lagi:
Kami kemudian bergerak ke kanan ke
.
pada baris ketiga, sehingga menjalankan perintah cetak hanya sekali.sumber
CJam -
176136 byteTerima kasih kepada Sp3000 untuk membagi ukuran program saya menjadi dua :-)
Penjelasan
HH77++
,,GG00++
... menghitung kode ascii integer dari karakter dengan menambahkan angka (misalnya: `HH77 ++ 'mendorong 17, 17 dan 77 pada stack, lalu tambahkan 3 angka ini)]]{{cc}}//
loop melalui kode ascii dan mengkonversinya menjadi karakter.Coba di sini
sumber
33cc
, tapi saya yakin ada cara yang lebih baik untuk yang laincc
mana - mana, lakukan]]{{cc}}//
di akhirBrainf *** yang dimodifikasi sendiri , 72 byte
Catatan yang
\x00
mewakiliNUL
byte heks literal (sel kosong). Kode sumber ditempatkan pada kaset, di sebelah kiri sel awal.Penjelasan
Juga, sebelum membuat program ini, saya membuat satu hanya menggunakan karakter BF di sumbernya. Itu mungkin! Ini juga jauh lebih lama, karena untuk nilai ASCII yang aneh, saya akan membuat nilai dua kali lipat, kemudian membaginya menjadi dua. Agak lebih pendek akan memodifikasi seluruh sumber untuk menghasilkan nilai aneh untuk memulai.
sumber
DDoo nnoott rreeppeeaatt yyoouurrsseellff!!
(spasi ganda)? Saya melihat dua.
s.Change first '.' to '0'
. Saya mengubah penjelasan untuk menunjukkan (lagi) bahwa yang pertama.
diubah menjadi nol.Jelly , 66 byte (tidak bersaing)
Cobalah online!
Faktoid
Program masih berfungsi jika Anda menghapus setiap karakter kedua.
Cobalah online!
Bagaimana itu bekerja
mengembalikan array string. Literal dimulai dengan a
“
, diakhiri dengan a”
, dan string dibatasi secara internal oleh“
. Hasilnya adalahArgumen tautan dan nilai pengembalian diatur ke array string ini, kemudian sisa kode sumber dieksekusi.
sumber
Gammaplex , 66 byte
Gammaplex adalah bahasa 2D yang menggunakan posisi baris baru pertama sebagai panjang baris, dan mengabaikan semua baris baru lainnya.
sumber
MSM ,
270160 byteProgram MSM pertama saya!
Output string dalam MSM dilakukan dengan mendorong masing-masing karakter ke stack dan bergabung dengan mereka menjadi satu string melalui
.
, misalnyaJumlahnya
.
kurang dari jumlah karakter. UntukDo not repeat yourself!
kita butuh 22.
detik. Untungnya ini adalah angka genap, jadi kami memiliki 11 gandaMenempatkan huruf di depannya memerlukan upaya lebih banyak. Pola
melakukan trik untuk setiap karakter
c
. Ini mengevaluasi sebagai berikutKita membutuhkan 23 pola seperti itu dimulai dengan
!!'',,
dan diakhiri denganDD'',,
diikuti oleh 22 perintah bergabung.
.sumber
Menembus 98, 70 66 byte
Cobalah online!
Setelah jawaban saya yang tidak valid, inilah yang lebih baik yang benar-benar sesuai dengan tantangan!
(Terima kasih kepada Martin Ender karena menyarankan penggunaan
��
, karakter 0x17, bukan88ff++
)Penjelasan:
sumber
8f+
: tio.run/nexus/…DC ,
348346342306290278 byteFile
dnr6.short.dc
(tanpa mengikuti baris baru):Lari:
sumber
BotEngine , 6x49 = 294
sumber
Backhand , 54 byte
Cobalah online!
Karena penunjuk Backhand sudah bergerak pada tiga sel kutu, yang perlu kita lakukan adalah menguranginya menjadi 2 menggunakan
v
sumber
reticular, noncompeting, 62 byte
Cobalah online!
Penjelasan dalam bagian-bagian:
U
mengatur arah penunjuk(2, 0)
, yaitu, memindahkan2
unit x dan unit0
y, sehingga melompati setiap karakter lainnya, dimulai dengan yang berikutnyaU
dilewati. Kemudian, setiap karakter lain direkam, dan itu setara dengan:yang merupakan program keluaran sederhana.
Lain
Ini bersaing untuk hadiah JavaScript WallyWest:
Saya bisa membuktikan bahwa, sementara angka dapat dibangun di bawah batasan ini, string tidak bisa. Karena tidak ada literal yang dapat digunakan, penempatan karakter membangun literal apa pun akan membuat string kosong:
Kemudian, hanya beberapa operator yang dapat digunakan; satu-satunya operator "berpasangan" yang digunakan adalah:
Dan tidak ada yang bisa memberikan angka / orang lain ke string. Jadi tidak ada string yang bisa dihasilkan.
sumber
Alice , 74 byte
Cobalah online!
Penjelasan
Tangkapan pertama adalah bahwa kita harus dapat memasukkan string, jadi kami hanya ingin melewati yang pertama
"
. Kami melakukan ini dengan melompat ke yang pertama"
karena kemudian IP akan memindahkan satu sel sebelum melihat sel yang sekarang lagi, sehingga yang kedua"
yang memasuki mode string. Tetapi untuk dapat melompat ke sana, kita perlu10, 0
di atas tumpukan, dalam urutan itu (kedua, atas). Ini dilakukan denganaa00tt,,
:Fungsi rotasi ini memunculkan argumen. Jika argumen itu negatif, itu mendorong nilai di atas tumpukan ke bawah oleh banyak posisi. Jika argumennya positif, ia akan mencari elemen yang banyak posisi di bawah atas dan menariknya ke atas. Perhatikan bahwa dalam kasus ini
Rotate(10)
, tidak ada cukup elemen pada tumpukan, tetapi ada jumlah nol tak terbatas yang tersirat di bagian bawah, itulah sebabnya nol berakhir di atas.Sekarang kita dapat
J
menambahkan"
argumen pertama menggunakan kedua argumen ini. Yang kedua"
memasuki mode string dan mencatat semua ituDDoo nnoott...
. Ketika menyentuh/
, IP dialihkan ke tenggara dan kita memasuki mode Ordinal. Untuk saat ini, IP memantul ke atas dan ke bawah melintasi tiga baris (dua di antaranya kosong), jadi ia pertama-tama merekam tiga spasi lagi di baris dua dan tiga dan kemudian kami meninggalkan mode string ketika menyentuh"
. Karena kita berada dalam mode Ordinal saat ini, semua karakter yang direkam didorong sebagai string tunggal ke stack (meskipun kami mencatat sebagian besar dari mereka dalam mode Kardinal), jadi kami berakhir dengan string ini (perhatikan spasi tambahan) :Sekarang IP terus memantul ke atas dan ke bawah yang berarti bahwa itu mengeksekusi satu perintah dari setiap pasangan lainnya, yaitu
Y
dant
. Kemudian IP akan mengenai ujung grid pada baris kedua dan mulai memantul ke belakang melalui grid. Ini juga beralih di mana pasangan karakter IP hits baris pertama, jadi ketika kembali sekarang dijalankan;
,o
dan@
. Jadi mengabaikan semua ruang dan pengalihan IP implisit, kode yang dieksekusiYt;o@
dalam mode Ordinal.Ini
Y
adalah perintah "unzip" yang memisahkan string ke dalam karakter di posisi bergantian. Karena setiap karakter diulang, itu benar-benar hanya memberi kita dua salinan dari string yang kita buat, meskipun salinan pertama memiliki dua spasi tambahan dan yang kedua memiliki satu spasi tambahan.t
memisahkan ruang trailing itu dan;
membuangnya. Akhirnya,o
mencetak string dan@
mengakhiri program.sumber
05AB1E ,
1005852 byte-6 byte terima kasih kepada Kevin Cruijssen
Cobalah online!
Aturan idempotensi.
sumber
á
tidak membuat vektor pada string bagian dalam, jika tidak dapat digunakan setelah))
.. Menghapus semuaá
dan menggunakanεεáá}}
setelah))
karya sebagai alternatif, tapi sayangnya itu tidak menyimpan byte (tapi mungkin Anda dapat menemukan inspirasi darinya? ) .. Dan„„!!
bukannya……!!
bekerja juga, karena!
builtin meninggalkan string yang sama. Ah, saya sudah mencoba. xD##θθáá
untuk sementara waktu, dan untuk beberapa alasan saya tidak mempertimbangkanεε}}
... Saya mencoba€€
, yang tidak berhasil ... Ini sekarang adalah jawaban terpendek, terima kasih!Stax , 70 byte
Jalankan dan debug di staxlang.xyz!
Stax sangat beruntung memiliki builtin
::
untuk setiap tanggal. Yang saya butuhkan adalah mendorong string menjadi dua kali lipat, mendorong 2, dan lari::
. Mudah kan?Salah.
Mendorong string itu rumit. Tanda kutip pertama dapat digandakan dengan
..""
, yang merupakan panjang-2 literal."
diikuti oleh tanda kutip yang bermakna. Masalahnya adalah, saya tidak melihat cara untuk mengakhiri string (yang diperlukan, atau versi dua kali lipat akan dicetak) tanpa memulai yang baru.Akhir program mengakhiri string literal. Jika saya dapat menempatkan literal berganda ini di sana, mungkin akan ada solusi yang bagus. Untuk melompat ke suatu tempat dari akhir program, bagaimanapun, memerlukan
G}
, jadi minimal, saya melihat ini:Ini tidak ... tidak ada apa-apa.
G
tidak memulai blok, jadi tidak akan melompat ke yang kedua}
. Sekali lagi, saya harus mengabaikan satu karakter:..}}
. Eksekusi melompat dari yang pertamaG
ke yang kedua}
, berlanjut ke akhir, melompat kembali ke yang keduaG
dan dari sana ke yang kedua}
, dan berlanjut sekali lagi ke akhir sebelum dilanjutkan pada awal[deduplicate]
bagian dengan string ganda di atas tumpukan.Deduplikasi sederhana.
11hh
mendorong sebelas dan membagi dua dua kali, membulatkan kedua kali dan menghasilkan dua, dan::
kemudian akan memberi kita output yang kita butuhkan.Uh oh. Ini tidak mencetak apa pun. Ada dua masalah di sini: pertama, itu
..}
berarti string.}
akan berada di atas tumpukan di akhir program, dan kedua, output implisit biasa Stax sekarang dinonaktifkan!Masalah yang lebih buruk adalah output. Ketika program Stax berakhir dengan anggun tanpa mencetak apa pun, bagian atas tumpukan akan dicetak secara implisit. Tapi kami belum mencetak apa-apa ...? Ah, tapi sudah. String literal yang dicetak dicetak daripada didorong, dan bahkan dua string kosong (dari yang tidak tertandingi
"
di akhir), meskipun kosong, sudah cukup untuk membuat trip ini tersandung. Pencetakan apa pun harus dilakukan dengan tangan.Kita memerlukan salah satu
pp
atauPP
, dan dalam hal ini, mengabaikan through pertama..pp
tidak dapat diterima, karena akan mencetak string.p
. Itu berarti kita membutuhkan output yang diinginkan baik di stack atau di dua teratas bersama dengan string kosong. Yang terakhir ini dilakukan dengan mendorong dua string kosong (zz
) dan memutar tiga item teratas dua kali (aa
) sebelum mencetak.Setelah selesai, kami memiliki tumpukan empat senar tinggi. Yang kelima,,
.}
kemudian didorong sebelum program keluar dengan anggun; pada titik ini, kurangnya output tersirat menjadi berkah sekaligus kutukan, karena tidak ada tambahan yang sekarang akan dicetak!sumber