Inilah yang akan kita sebut semangkuk sup alfabet - bentuk ascii-art melingkar kira-kira dengan 26 huruf Inggris (AZ) diatur searah jarum jam untuk membentuk perimeter:
XYZABC
VW DE
U F
T G
S H
RQ JI
PONMLK
Tulis sebuah program yang menggunakan karakter huruf tunggal, AZ, dan output semangkuk sup alfabet yang sama "diputar", sehingga untuk berbicara, sehingga huruf input muncul di mana A
tidak dalam contoh di atas dan sisa siklus alfabet sepenuhnya di sekitar searah jarum jam.
Jadi output untuk input A
adalah semangkuk sup alfabet yang sama.
Dan output untuk input B
adalah yang ini:
YZABCD
WX EF
V G
U H
T I
SR KJ
QPONML
Demikian juga output untuk H
:
EFGHIJ
CD KL
B M
A N
Z O
YX QP
WVUTSR
Atau untuk Z
:
WXYZAB
UV CD
T E
S F
R G
QP IH
ONMLKJ
Ini harus bekerja untuk semua 26 huruf, A hingga Z.
Detail:
- Anda dapat mengasumsikan bahwa satu-satunya input adalah satu huruf, A hingga Z.
- Jika nyaman Anda dapat menggunakan huruf kecil az untuk input dan / atau output, Anda bahkan dapat mencampur dan mencocokkan huruf kecil dan huruf besar.
- Urutan alfabet harus berputar searah jarum jam, bukan berlawanan arah jarum jam.
- Anda harus menggunakan spasi, bukan yang lain, untuk membuat indentasi dan mengisi mangkuk sup.
- Mungkin ada yang memimpin atau mengikuti garis baru atau ruang dalam output selama mangkuk sup diatur dengan benar.
- Perhatikan bahwa bentuk mangkuk adalah 12 karakter dengan lebar 7 untuk membuatnya tampak melingkar seperti teks. Mangkuk Anda harus memiliki bentuk yang sama.
Ini kode golf sehingga kode terpendek menang!
Jawaban:
05AB1E , 21 byte
Menentukan programf: AlphabeticChar → String
Kode:
Cobalah online!
Kerusakan:
Penjelasan:
The kanvas (
Λ
) dalam konteks khusus ini bekerja sebagai fungsi dengan tanda tangan berikut:Thepola parameter dalam situasi ini sejumlah mendefinisikan arah. Dalam kode, angka ini direpresentasikan sebagai 2232344565666667670012122 . Arah ditunjukkan dengan cara berikut:
•1못*Ć,ãiDΣ•
, yang merupakan versi terkompresi dari angka besarIni berarti bahwa angka besar mewakili pola arah berikut:
Dengan konteks tanda tangan ini, kanvas beralih melalui daftarpola dan menulis karakter panjangnya dari pengisi ke arah saat ini.
Thepanjangnya ditentukan dalam kode sebagai 2 (pada awal kode). Untuk pengisi , kita memerlukan versi alfabet yang diputar sedemikian rupa sehingga dimulai dengan input yang diberikan. Itu dilakukan dengan kode berikut ( coba di sini ):
Dalam pseudocode, ini akan dieksekusi oleh fungsi kanvas:
Terakhir, Anda dapat melihat bahwa argumen fillerpanjang -1 'diputar' - 1 kali ke kanan, yang berarti bahwa kanvas akan beralih melalui daftar berikut (bersepeda dan karena itu tidak terbatas):
Yang menghasilkan sup alfabet yang diinginkan bentuk ascii-art.
sumber
AA¹k._
alternatifnya bisaA¹¡RJ«
, tetapi itu adalah byte-count yang sama.•1못*Ć,ãiDΣ•
alternatifnya bisa•õÕ₆qηµñ–†f•·
, tetapi itu adalah byte-count yang sama. Baiklah Jawaban bagus!Perl 6 , 100 byte
Cobalah online!
Ganti semua huruf dalam string dengan rekan yang bergeser, sambil mengganti angka dengan jumlah spasi yang diwakilinya ditambah satu.
Penjelasan
sumber
Ruby , 107 byte
Cobalah online!
Sintaks yang ditingkatkan
"i".to_c
->1i
(Disarankan oleh Jordan)Sistem koordinat diubah sehingga 0 derajat berada di kanan dan bukan di atas. Ini memungkinkan
0.5
->6
Pengganda yang disesuaikan
j
dank
untuk kependekanDaripada mencetak hasil
puts a
, gabungkan elemen array dan kembalikan stringa*$/
Ruby , 119 byte
Menggunakan bilangan kompleks yang dinaikkan ke daya untuk memetakan ke elips. Pergantian total adalah 26, sehingga setiap kuadran adalah 6,5.
Pendekatan ini bergantung pada output yang diperlukan menyerupai elips cukup bahwa pemetaan yang valid dapat dicapai.
Cobalah online!
sumber
Arang , 33 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Lacak sebuah jalan.
Garis besar mangkuk. Masing-masing
7
mengembang ke↙←
.Pindahkan satu karakter pada satu waktu (API ini tumpang tindih dengan ujung setiap baris dengan yang berikutnya).
Gambar menggunakan alfabet dua kali lipat, tetapi mulai dari posisi karakter input.
sumber
MATL , 49 byte
Berantakan sekali. Tapi itu menyenangkan menulis. Bahkan ada arctangent yang terlibat.
Cobalah online!
Penjelasan
Kode
menciptakan array angka dan mengubahnya menjadi biner. Ini menghasilkan matriks zero-one
yang merupakan kuadran kiri atas dari sebuah matriks yang menentukan posisi huruf.
mencerminkan kuadran itu secara vertikal tanpa mengulangi baris terakhir, dan secara horizontal mengulang kolom terakhir untuk menghasilkan matriks penuh:
Kami sekarang memiliki topeng dengan posisi. Kode
mengubahnya menjadi char, karena hasil akhirnya akan menjadi matriks char. Karakter 0 ditampilkan sebagai spasi, dan entri bukan nol akan ditulis dengan huruf yang sesuai.
mendorong string
'abc···xyz'
, yang berisi 26 huruf. String ini harus digeser secara melingkar sesuai input. Untuk melakukannya,membaca surat masukan, menambahkan 7 ke kode ASCII-nya, dan meniadakan hasilnya. Untuk input,
'a'
ini memberi −104, yang merupakan kelipatan dari 26, jadi menggeser secara melingkar dengan jumlah ini tidak akan menghasilkan apa-apa. Jika inputnya adalahb
ini memberi −105, yang menggeser string 1 langkah ke kiri untuk menghasilkan'bcd···yza'
; dll.Langkah selanjutnya adalah menentukan urutan string yang digeser akan ditulis ke dalam entri matriks yang tidak nol. Untuk akhir ini,
membuat salinan matriks dan mendorong dua vektor yang berisi posisi baris dan kolom berbasis 1 dari nonzeros. Kemudian
kurangi 7 dari yang terakhir, bawa yang pertama ke atas, kurangi 4 dari itu, dan negasikan. Angka 7 dan 4 menentukan asal koordinat, sehingga sudut-sudut vektor posisi dari entri bukan nol sehubungan dengan asal koordinat menentukan urutan yang diinginkan.
menghitung argumen argumen dua modulo 2 * pi untuk menghasilkan sudut tersebut. Sekarang sudut terkecil, yaitu 0, sesuai dengan entri di mana huruf pertama harus pergi, dan sisanya maju berlawanan arah jarum jam.
menata ulang huruf-huruf dalam string sesuai dengan sudut-sudut itu, sehingga ketika huruf-huruf tersebut ditulis ke dalam entri-entri matriks yang tidak nol dalam urutan kolom-utama (turun, lalu lintas) hasilnya akan benar. Ini dilakukan oleh
Misalnya, jika inputnya adalah
'a'
string tidak digeser secara melingkar:Pengaturan ulang sesuai sudut mengubah ini menjadi
sehingga
'u'
akan masuk dengan benar ke entri bukan nol pertama (dalam urutan kolom-utama), yaitu (3,1) dalam notasi matriks;'t'
akan ke (4,1),'s'
ke (5,1);'v'
ke (2,2) dll:sumber
Python 2 , 129 byte
Cobalah online!
sumber
R ,
139122 byte-17 byte terima kasih kepada Giuseppe
Penjelasan:
Membangun kotak ruang kosong
adalah seperangkat indeks untuk posisi surat yang sesuai dengan:
TIO
sumber
intToUtf8
sehingga mereka adalah byte asing, tetapi jika Anda menggunakan*
di tempatrep
, Anda bisa mendapatkan Hemat 2 byte dan mendapatkan 125 byte-32
, untuk 122 byte . Anda dapat membuatnya sendiri dengan menggunakancat(intToUtf8(bytes))
.intToUtf8
, terlalu banyak versi dari fungsi terbuka sekaligus kurasa. Nice menyimpan semua pemikiran bulat, terima kasihJavaScript (Node.js) ,
121119 byteDisimpan 2 byte berkat @tsh
Cobalah online!
Bagaimana?
Kode ini disalahgunakanx c
Buffer
"H"
"B"
sumber
APL + WIN, 72 byte
Anjuran untuk karakter
Cobalah online! Coutesy of Dyalog Classic
sumber
R ,
218197 byte-21 byte terima kasih kepada Giuseppe
Cobalah online!
Tidak Disatukan:
Membuat vektor huruf yang diputar dan digunakan
cat
untuk mengisi pinggiran mangkuk dengan vektor itu.sumber
which
dan menggunakanl>=t
sebagai indeks secara langsung, yang bernilai 12 byte.[
dengan~
. Ini jawaban yang bagus; Saya menghabiskan sekitar 250 byte dalam beberapa upaya pertama saya dengan pendekatan yang jauh lebih kompleks.Java 11, 134 byte
Cobalah online.
Versi 136 byte dengan potensi untuk golf?
Cobalah online.
Penjelasan (dari jawaban pertama)
sumber
i-47
\n
). Jadi apakah saya menggunakan unsintables dan 3x\n
withi
atau digit-1 withi-47
, keduanya adalah 134 byte-count yang sama. Dan sayangnya saya tidak dapat memiliki yang tidak patut0
, kalau tidak saya bisa menggunakan 2,0,5,9 sebagai gantinya, dan gunakani+1
untuk menyimpan 1 byte secara total.Bahasa Wolfram (Mathematica) , 258 byte
Cobalah online!
sumber
Haskell, 127 byte
Cobalah online!
Setiap karakter dalam string yang dikodekan didekodekan oleh fungsi
?
menjadi string:sumber
Kotlin ,
148146145 byteMenghapus kurung tambahan untuk -2
String mentah yang diganti untuk -1
Cobalah online!
sumber
C # (Visual C # Interactive Compiler) ,
126118 byteDisimpan 8 byte berkat @someone. Ya, itu sebenarnya username-nya.
Cobalah online!
sumber
Permintaan TSQL, 238 byte
Tautan uji untuk jawaban ini memecahkan jeda baris dan mengecualikan spasi. Saya telah mengganti spasi dengan titik dan mengganti char (13) dengan char (13) + char (10) untuk menunjukkan hasil yang dapat dibaca.
Cobalah online
Tidak Disatukan:
sumber
PHP ,
236229226 byteCobalah online!
Pra-golf:
Penjelasan:
Menggunakan
ord
kami mengonversi ke integer antara 0 dan 255. A adalah 65 dan Z adalah 90.Dengan menggunakan pengetahuan ini, kami mengambil input dan menguranginya hingga 65 sehingga kami memiliki nilai penyesuaian.
Kami kemudian beralih ke semua karakter, memanggil
ord
mereka, menguranginya hingga 65, meningkatkannya dengan nilai penyesuaian kami. Dengan menggunakan modulo, kami kembali ke 0 jika melebihi 26.Kami kemudian menambahnya lagi menjadi 65 dan mengubahnya kembali menjadi huruf
chr
.Sedihnya php: // stdin hanya dapat diinterogasi sekali, jadi kita perlu meneruskan input ke fungsi di loop kita, mencegah kita dari menyimpan byte
use($a)
dan harus mendeklarasikan variabel di luar fungsi menghentikan kita dari bersih menggunakan<?=
metode gema - kita harus membungkus semuanya dalam terner raksasa.sumber
C (GCC) 286 byte
Bukan golf terpendek, tapi ini bekerja
Cobalah online
sumber
Merah , 139 byte
Cobalah online!
Solusi yang sangat naif.
sumber
Perl 5
-p
, 110 byteCobalah online!
sumber
Javascript (V8), 316 byte
Cobalah online
Pertama kali mencoba kode golf. Hargai setiap tips / umpan balik.
Kode asli sebelum dipotong:
sumber
APL (Dyalog Classic) , 50 byte
Cobalah online!
sumber
C (gcc) ,
200198197 byte-3 bytes berkat ceilingcat.
Cobalah online!
sumber
PHP , 131 byte
Cobalah online!
sumber