Inilah kota ke-3 ABACABA:
_
A|_|
B|__|
A|_|_
C|___|
A|_|
B|__|
A|_|
Itu dibuat dari urutan ABACABA , yang pada dasarnya adalah:
- A (iterasi 1)
- tempat B - AB
- repeat A - ABA (iterasi ke-2)
- Tempat C - ABAC
- Ulangi ABA - ABACABA (iterasi ke-3)
dan Anda mendapatkan idenya.
Bangunan-bangunan memiliki ketinggian (sesuai dengan no. Garis bawah) sama dengan huruf yang dikonversi ke angka sebagai A = 1, B = 2 dll
Memasukkan
Angka iterasi 1 <= n <= 26.
Keluaran
Kota pesanan ABACABA n , termasuk huruf-huruf di awal baris.
Jawaban:
Python 2, 82 byte
Saya perhatikan tidak ada yang memposting metode rekursi biner dan memutuskan untuk mencobanya ... dan sekarang dengan trik yang dipinjam dari Sherlock9, itu adalah jawaban python terpendek! (Juga, terima kasih kepada xnor untuk satu pemendekan lagi.) (Dan kemudian Dennis yang mencukur lebih banyak ...)
Tidak Disatukan:
sumber
s
, dan dengan membuat baris kedua fungsi anon:f=lambda n:n*"?"and f(n-1)+"_"*(n-2)+"\n%c|%s|"%(64+n,"_"*n)+f(n-1);lambda n:" _"+f(n)
f=lambda n,s=1:n*"_"and" _"*s+f(n-1,0)+"_"*(n-2)+"\n%c|%s|"%(64+n,"_"*n)+f(n-1,0)
seharusnya bekerja.Python 2, 99 byte
Untuk menemukan
i
nomor urutan ABACABA, tulisi
dalam biner, hitung jumlah nol yang tertinggal, dan tambahkan satu. Kami menggunakan trik bit klasiki&-i
untuk menemukan kekuatan terbesar dari2
pembagian itui
, lalu menghitung panjang bit. Sebenarnya, kami menghitungi
mundur dari2**n-1
ke0
, yang baik-baik saja karena urutan ABACABA simetris.Kami melacak nomor saat ini dan terakhir dari urutan dengan bantuan variabel "sebelumnya"
b
. Ini memberitahu kita berapa banyak garis bawah untuk dicetak sebagai "overhang". Bangunan akhir digambar dengan benar tanpa overhang karena0
diperlakukan memiliki panjang bit1
.Format string untuk pencetakan diambil dari Sp3000 , seperti trik menggunakan
input
untuk mencetak baris pertama.sumber
MATL , 59 byte
Ini menggunakan rilis saat ini (15.0.0) dari bahasa.
Cobalah online!
(Jika huruf tidak harus dimasukkan dalam output: berikut ini akan berfungsi, 48 byte):
Penjelasan
sumber
CJam,
3735 byteIni adalah implementasi berulang dari algoritma rekursif dari jawaban @ quintopia .
Cobalah online!
Bagaimana itu bekerja
sumber
JavaScript (ES6), 162 byte
Di mana
\n
karakter baris baru literal.sumber
\n
pada akhirnya, kalau ada yang bertanya-tanya.Python 2,
123121 bytetautan ideone (-2 bytes berkat @xsot)
f
menghasilkan urutan ABACABA sebagai daftar angka, misalnyaf(3) = [1, 2, 1, 3, 1, 2, 1]
. Offset input dengan 1 dibandingkan dengan tantangan urutan ABACABA memungkinkan kita bermain golf dalam satu bytef
.Baris pertama dicetak secara terpisah, setelah itu semua baris lainnya dicetak menggunakan ekspresi yang memperhitungkan angka saat ini dan angka berikutnya. Hanya untuk bersenang-senang, baris pertama dicetak menggunakan
input()
.sumber
[0]
denganL
.Pyth -
6462 byteMungkin bisa bermain golf lebih banyak, tetapi cukup bagus untuk saat ini.
Coba di sini!
Penjelasan:
sumber
Python 3.5 -
262236220 byte:-16 byte terima kasih kepada @CatsAreFluffy! Seluruh fungsi saya sekarang akhirnya bisa dalam satu baris! :)
Mungkin agak panjang, dan mungkin mencetak baris baru di antara membangun, tetapi dalam melakukan apa yang dibutuhkan. Anda dapat mengujinya sendiri untuk mengonfirmasi.EDIT:
Kode golf saya sebelumnya tidak mencetak pola yang tepat sama sekali. Namun, sekarang yang ditunjukkan di atas tidak, dan itu baik menurut saya. Anda juga dapat menjalankannya sendiri untuk mengonfirmasi hal itu.
Catatan: Program ini mencetak semua huruf kecil di belakang setiap "bangunan". Saya harap tidak apa-apa.
Versi tidak dikolomisasi dengan Penjelasan:
Pada dasarnya apa yang saya lakukan adalah pertama-tama mengimpor fungsi Kamus Urutan modul koleksi, dan kemudian membuat kamus berurutan, dengan masing-masing huruf kecil dalam daftar "j" ditugaskan ke bangunan yang sesuai, dengan panjang yang sesuai di garis bawah. Kemudian saya menghitung urutan, berdasarkan input pengguna, menggunakan
f=lambda w:"a"[w:]or f(w-1)+j[w]+f(w-1)
fungsi, dan kemudian berdasarkan urutan yang dikembalikan oleh itu, bangunan, dengan huruf yang sesuai masing-masing di belakangnya, dicetak.sumber
OrderedDict
sebagaio
gantinya? Dan mengubahop
kep
danitem
untukj
juga bekerja.if
(semua input adalah 1≤v≤26), ubahrange(26)
kerange(v)
, dan gunakanreturn"\n".join(f(v))
sebagai gantifor
.from collections import*
dano=OrderedDict
bukannyafrom collections import OrderedDict as o
range(26)
kerange(v)
hasil dalamIndex Error
. Juga, melakukanreturn"\n".join(f(v))
HANYA akan mengembalikan urutan, tetapi bukan bangunan itu sendiri. Selain itu, tips Anda cukup bagus. Terima kasih! :)Ruby, 129 byte
Fungsi anonim, mengembalikan string multiline.
sumber
JavaScript (ES6), 143
Ada 2 baris baru di dalam backticks yang signifikan dan dihitung.
... atau 138 jika hurufnya bisa huruf kecil.
Kurang golf
Uji
sumber
Powershell, 67 Bytes
sumber