Tulis dua program berbentuk segitiga (yaitu piramida).
Yang pertama harus berupa segitiga teks yang mengarah ke atas dengan lebar dasar minimum tiga karakter. Jadi itu akan memiliki struktur seperti
X
XXX
atau
X
XXX
XXXXX
atau
X
XXX
XXXXX
XXXXXXX
atau lebih besar. Masing-masing X
harus diganti dengan karakter kode Anda yang sebenarnya, yang bisa berupa apa saja kecuali terminator garis (sehingga X
bisa jadi spasi). SemuaX
itu harus diganti dan spasi serta baris baru yang membantu bentuk segitiga diperlukan untuk tetap apa adanya.
Program kedua harus memiliki ukuran dan bentuk yang sama dengan yang pertama, kecuali bahwa segitiga akan mengarah ke bawah.
Jadi jika program pertama Anda terlihat seperti
X
XXX
XXXXX
maka program kedua Anda akan terlihat seperti
yyyyy
yyy
y
di mana masing y
- masing adalah karakter yang perlu Anda isi dengan kode Anda yang sebenarnya (mungkin berbeda dari X
kode Anda ). Spasi dan baris baru harus tetap sama di sini juga.
Tugas Anda adalah menulis program-program ini sedemikian rupa sehingga masing-masing menghasilkan (ke stdout atau alternatif terdekat) judul lagu Beatles yang berbeda , tanpa mengambil input apa pun. Artikel Wikipedia ini akan berfungsi sebagai daftar lagu resmi kami untuk The Beatles. Outputnya harus salah satu judul persis seperti yang tercantum, misalnya I Want You (She's So Heavy)
.
Ini sangat mudah, namun, bahkan dengan persyaratan program segitiga aneh. Jadi kita akan membentuk program lain dari dua yang pertama yang harus menampilkan lagi judul lagu.
Dengan menggabungkan tiga salinan dari masing-masing dua program segitiga kita dapat membuat program ketiga berbentuk seperti segi enam.
Jika lebar dasar program pertama Anda adalah tiga, itu akan terlihat seperti ini:
XyyyX
XXXyXXX
yyyXyyy
yXXXy
Jika lebar dasar lima, itu akan terlihat seperti ini:
XyyyyyX
XXXyyyXXX
XXXXXyXXXXX
yyyyyXyyyyy
yyyXXXyyy
yXXXXXy
Program ini (ketika dijalankan dengan spasi dan baris baru seperti yang lain) harus menampilkan judul lagu Beatles lain, sama seperti dua program pertama. Juga:
- Tiga program Anda harus menampilkan judul lagu yang berbeda.
- Hanya judul lagu yang panjangnya delapan karakter atau lebih yang diizinkan.
- Anda hanya dapat memilih salah satunya
Revolution
,Revolution 1
danRevolution 9
karena judulnya sangat mirip. - Anda harus memilih tiga lagu Beatles favorit Anda. (Yah, cobalah .)
Perhatikan bahwa program aktual diperlukan. Fungsi tidak diizinkan. Membaca kode sumber Anda sendiri di program apa pun juga tidak diperbolehkan.
Contoh
Jika program pertama Anda
A
AAA
AAAAA
itu bisa keluar Across the Universe
.
Kemudian program kedua Anda
bbbbb
bbb
b
bisa output Revolution
.
Kemudian digabungkan menjadi program segi enam
AbbbbbA
AAAbbbAAA
AAAAAbAAAAA
bbbbbAbbbbb
bbbAAAbbb
bAAAAAb
mungkin outputnya Get Back
.
Mencetak gol
Pengajuan dengan lebar dasar segitiga terkecil akan menang. Dalam kasus yang berkaitan dengan pengikatan, pengajuan dengan jumlah total terbesar dari tiga judul lagunya menang.
sumber
Jawaban:
GolfScript, lebar = 9 karakter, judul = 33 karakter
Segi enam
Cetakan Let It Be . (9 karakter)
Cobalah online.
Bagaimana itu bekerja
Token
"Let It Be"
pada baris pertama mendorong string Let It Be on the stack.Baris kedua dimulai dengan
}
, "komentar super" tanpa dokumen yang membatalkan eksekusi segera.Sebelum keluar, GolfScript mencetak isi tumpukan.
Segitiga X
Mencetak Twist and Shout . (15 karakter)
Cobalah online.
Bagaimana itu bekerja
Dua baris pertama mendorong string
"\n }"
, yang;
dibuang oleh perintah dari stack.Baris yang tersisa berisi token
"Twi"
,"st an"
dan"d Shout"
, yang mendorong string Twist dan Shout menjadi tiga bagian.Sebelum keluar, GolfScript mencetak isi tumpukan.
Segitiga Y
Cetakan Kemarin . (9 karakter)
Cobalah online.
Bagaimana itu bekerja
Token
Let
,It
danBe
pada baris pertama tidak ditentukan, sehingga mereka tidak melakukan apa pun.Tiga baris berikut berisi token
"Yeste"
,"rda"
dan"y"
, yang mendorong string Kemarin dalam tiga bagian.Baris
}
terakhir tidak melakukan apa-apa; program akan selesai pula.Sekali lagi, GolfScript mencetak isi tumpukan sebelum keluar.
sumber
Befunge -93, lebar = 13
15, judul = 3124karakterPemadaman listrik semalam mencegah saya memperbarui ini ketika saya menemukannya, tapi saya berhasil mengurangi lebar segitiga dan menambah panjang lagu!
Program pengarah: "Dig a Pony", 10 karakter:
Penjelasan
Saya BENAR-BENAR memanfaatkan trik Befunge dan saya memilih "Dig a Pony" secara khusus karena memiliki ruang di posisi ke-6. Ini memungkinkan aliran program untuk berpindah melalui nama lagu. Cobalah di penerjemah online untuk melihat cara kerjanya.
Program menunjuk-down: "If I Fell", 9 karakter:
(Periode tidak termasuk dan hanya dimasukkan untuk membuat garis lain muncul.)
Penjelasan
Satu-satunya baris yang relevan di sini adalah dua yang pertama. Saya menggunakan trik wrap-around (penunjuk instruksi dikirim segera kiri) untuk memeras dalam satu karakter lagi. Baris kedua mencetak nama lagu.
Gabungan: "Drive My Car", 12 karakter:
Ini hal yang sama, tetapi dengan garis yang ditambahkan untuk menunjukkan segi enam dan segitiga.
Penjelasan
Di sinilah garis ketiga dan keempat dari segitiga menunjuk-ikut bermain. Ada beberapa pengalihan di tepi kedua segitiga yang berfungsi untuk memindahkan penunjuk instruksi melalui dua garis dan mendorong "Drive My Car" ke tumpukan. Kemudian dicetak menggunakan
>:#,_@
bit dalam segitiga menunjuk-up. Kebetulan, kedua kiri dan kanan menunjuk-up segitiga digunakan.Ada mungkin menjadi cara untuk menggunakan lebih dari ruang kosong, tapi saya pikir waktu saya lebih baik dihabiskan untuk pertanyaan lain. : P
sumber
Python 2, lebar = 51
Ya, baik ... Python.
Komentar python dimulai dengan
#
, jadi mayoritas baris hanyalah komentar. Untuk segitiga yang menghadap ke atas, satu-satunya hal yang dijalankan adalahyang mencetak
Sgt. Pepper's Lonely Hearts Club Band
.Untuk segitiga menghadap ke bawah, kami jalankan
yang mencetak
Yellow Submarine
, karena fungsinyaid
benar.Namun ketika kami menggabungkan program, yang terjadi hanyalah dua baris di atas secara berurutan. Karena akhir dari set baris pertama
id=0
, yang sekarang palsu, hasil akhirnya adalah bahwa kita memasang a(Reprise)
to the end, mendapatkanSgt. Pepper's Lonely Hearts Club Band (Reprise)
sebagai output kami (Calvin mengatakan ini baik-baik saja ).sumber
Snowman 1.0.2 , width = 13
Akhirnya!Sebuah tantangan di mana Snowman dapat berkembang! :DD
Garis miring sebagian besar untuk tujuan estetika, dan sebagian besar dapat diganti dengan spasi (tapi itu akan membuatnya terlihat jauh lebih membosankan). Beberapa garis miring diperlukan, untuk komentar.
Program A (keluaran:)
Birthday
:Yang ini cukup sederhana. Karakter pertama (
}
) mengatur variabel aktif kami, lalu ada banyak komentar / no-op. Ini kemudian menyimpan string"Sun King\n "
dan segera membuangnya (via*
, menyimpannya di permavar yang tidak pernah kita gunakan). Lalu toko itu"Birthday\n"
.]]
adalah no-op di sini, karena[[ foo ]]
merupakan komentar blok di Snowman, tetapi karena tidak ada yang cocok[[
sebelum ini]]
(dalam program A sendiri), itu tidak melakukan apa-apa. Kemudian8AaL
ambil 8 karakter pertama dari string,sP
cetak, dan[[
komentar sisa program (karena sekali lagi, tidak ada yang cocok]]
.Program B (keluaran:)
Get Back
:Yang ini juga cukup mudah.
?}
setara dengan}
(?
cukup setel semua variabel ke tidak aktif, yang merupakan larangan di sini tapi sekali lagi, penting nanti). Kemudian ia menyimpan string"Get Back"
, melakukan banyak no-ops (//
sampai akhir baris selalu komentar), dan mencetak melaluisP
.Program lengkap
Output adalah, Anda dapat menebaknya,
Sun King
1 .Mari kita lihat baris ini per baris:
Baris 1
Ini mengatur variabel aktif kami, sama seperti program sebelumnya (kita dapat melihat sekarang bahwa
?
diperlukan agar tidak hanya mengaktifkannya dan kemudian mundur dengan}}
). Sisa kalimat dikomentari.Baris 2-4
Komentar ...
Baris 5
Di sini kita menyimpan string
"Sun King//"
, dan kemudian memulai komentar blokir. Ini pada dasarnya melewatkan semuanya sampai yang berikutnya]]
.Baris 6
Masih di dalam blok komentar ...
Jalur 7
Di sini kita keluar dari blok komentar untuk waktu yang singkat, untuk mengeksekusi kode
8AaLsP
. Ini sebenarnya digunakan kembali dari program A. Karena saya memilih semua lagu yang panjangnya 8 huruf, saya cukup menggunakan kode yang sama untuk program gabungan.Maka itu akan sedikit rumit. Lain kali kita muncul dari blok komentar, kita lihat
8AaLsP
lagi. Namun, kali ini, semua variabel tidak ditentukan (kami menyebutnyasp
, mencetak, dalam mode konsumsi, yang menghilangkan variabel). Karenaaal
memerlukan dua argumen, dan kali ini hanya memiliki satu (8
), kesalahan dan membiarkan variabel tidak berubah.Demikian pula,
sp
menemukan8
, menyadari itu jenis yang salah untuk dicetak, dan membiarkan variabel apa adanya.Baris 8-13
Masih terjebak di blok komentar itu ...
Baris 14
Akhirnya, kami mencoba memanggil urutan print-first-8-chars yang sama sekali lagi, dan gagal sekali lagi, menghasilkan dua kesalahan lagi. (
8
Berarti bahwa variabel sekarang8 8
, yang merupakan jumlah variabel yang benar untukaal
saat ini, tetapi masih bukan tipe yang tepat.)1: serta empat kesalahan runtime
SnowmanException
ke STDERR, tetapi sesuai meta itu tidak masalah .sumber
The slashes are mostly for aesthetic purposes, and the majority of them can be replaced with spaces (but that would make it look a whole lot more boring)
Tapi itu membuat sedikit lebih sulit untuk memahami apa yang terjadi ...> <> , width = 11
Bahasa 2D memiliki waktu yang cukup baik dengan tantangan ini.
Panah ke atas
Aliran program dimulai dari kiri atas, bergerak ke kanan. The
/
mencerminkan up, dan karena> <> yaitu toroidal kita muncul kembali dari bawah. Kami kemudian menekan yang lain/
dan memantulkan lagi, dan mendorong karakterklawstaC
satu per satu ke tumpukan dalam""
mode string . Akhirnya, kami memantulkan ke atas dan menekan satu>l?!;o
lingkaran, yang merupakan cara idiomatis untuk mencetak seluruh tumpukan di> <>.Ini mencetak
Catswalk
.Panah bawah
Pada dasarnya hal yang sama, mendorong karakter dari yang pergi dan menggunakan mirror dan panah untuk mengarahkan aliran program. Ini mencetak
Birthday
.Gabungan
Bagian yang relevan ada di atas (saya sudah memotong banyak garis di tengah). Dengan menggunakan
/
dari panah ke atas, kita merefleksikan ke atas dan membungkus, tetapi karena sekarang kita memiliki panah ke bawah di bawahnya, bagian dari kode itu yang dieksekusi sebagai gantinya. Kami kemudian mendorong karakter yang relevan ke tumpukan, dan menggunakan kembali loop output dari panah ke bawah.Ini mencetak
Hey Jude
.sumber
Python 2, ukuran 21
Program ini membutuhkan terminal yang kompatibel dengan ANSI (DOS ANSI.SYS untuk lebih spesifik), karena saya gunakan
\x1b[2J
untuk menghapus konsol DAN memindahkan kursor ke kiri atas. Untuk membuat ini kompatibel dengan terminal ANSI lainnya, cetak\x1b[1J\x1b[H
(ini masih bisa masuk dalam ukuran 21 segi enam). Saya tidak dapat menguji bagian ini, karena saya tidak memiliki terminal yang mencetak kode pelarian ANSI.Saya pikir program ini terlihat sangat keren, mirip dengan simbol radioaktif (meskipun bayangan ASCII menyiratkan warna-warna yang terbalik) atau ikon senjata penembak jitu dari Metroid Prime: Hunters.
Ini memang cocok dalam ukuran 17, tapi aku lupa
id=0
di panah. Saya tidak berpikir saya dapat mengecilkannya kembali, karena itu semua harus pada satu baris ...Selain itu, kredit diberikan ke Sp3000 untuk penggunaan ide
id
.Panah Atas:
Panah Bawah:
"Hey Jude" adalah salah satu lagu Beatles favorit saya, tapi saya benar-benar tidak tahu banyak. Saya belum pernah mendengar dua lagu lainnya yang saya gunakan. Itu bukan genre yang sering saya dengarkan.
sumber
\x1b[2J
bekerja dengan ANSI.SYS; seharusnya tidak melakukan apa pun di terminal lain. Juga, mengharapkan bilangan bulat setelah titik koma. Untuk membuat baris dan kolom menjadi default 1, gunakan . 2. dan harus bekerja pada semua terminal ANSI. 3. Pada terminal Linux, Anda cukup menggunakan untuk mengatur ulang terminal. 4. dapat diganti dengan byte ESC literal, dalam kasus yang membantu meningkatkan skor Anda.\x1b[;H
\x1b[H
\x1b[1J\x1b[H
\x1b[H\x1b[J
\x1bc
\x1b
C (gcc) , lebar alas = 17
Top, "Hei Jude"
Cobalah online!
Bawah, "Kotak korek api"
Cobalah online!
Hexagon, "Michelle"
Cobalah online!
sumber
melongo, panjang pangkal 15
Baru tahu itu tidak bekerja dengan mawk : /
Ini tidak terlalu rumit, tetapi tumbuh di tahun 70-an, dengan The Beatles masih ada di udara, saya harus menjawab ini. Pertama saya pikir awk tidak cocok, tetapi kemudian datang kepada saya.
Karena skrip ini berisi blok BEGIN dan / atau END, mereka perlu diberi tahu bahwa tidak akan ada input untuk menjalankan blok END. Ini dapat dicapai dengan menekan Ctrl-D setelah memulai, atau memulainya seperti ini:
yang menurut saya lebih nyaman.
echo | awk -f script.awk
juga akan berfungsi, tetapi jika saya akan menggunakan baris kosong sebagai input saya akan melakukan ini sama sekali berbeda.Menunjuk ke atas, mencetak Untuk Tidak Ada (tautan Youtube)
Kode penting tanpa komentar adalah ini. Karena
n
tidak didefinisikan, ia mencetak "For No One" jika dipanggil sendiri.Menunjuk ke bawah, mencetak Blackbird
Kode dasarnya adalah ini. Jika
n
ditentukan sebelum tidak mencetak apa pun. Saya menerapkan output yang bagus dengan baris baru setelah setiap nama trek, karena saya punya ruang untuk melakukan itu dan itu terlihat lebih bagus di konsol.n
didefinisikan dalam proses; itu dibutuhkan untuk Hexagon.Hexagon, cetakan aku sangat lelah
Kode penting. Sekarang akhirnya misterius
n
itu digunakan. Karenan
didefinisikan di baris pertama, segitiga menunjuk ke atas mencetak output alternatif, dan segitiga menunjuk ke bawah mencetak kekosongan.sumber