Posting kotak pasir di sini .
Buat fungsi atau program yang "Springify" string.
- Input akan berupa String di Stdin, atau alternatif terdekat
- Input hanya akan berisi ASCII dan / atau spasi yang dapat dicetak
- Output akan ke Stdout, atau alternatif terdekat
- Newline dan spasi tambahan dapat diterima
Bagaimana cara membuat String
- Memformat String menjadi gulungan pegas ASCII sebanyak yang diperlukan
- Pad kumparan dengan spasi, hingga kumparan terdekat
- Bacakan karakter, mengikuti pegas di sekitar gulungan
Ini adalah pegas ASCII:
#
# ####
# #
# ####
#
Di mana #
s adalah karakter dari String
Berikut ini sebuah contoh:
abcdefghijklmnopqrstuvwxyz
menjadi
a
b cdef
g h
i jklm
n
o
p qrst
u v
w xyz.
.
Di mana .
s mengganti ruang untuk visibilitas.
Kemudian, string dibaca kembali, mengikuti pegas ASCII ke bawah, di sekitar loop, memukul g
dan u
dua kali:
1| a <-3
V b cdef
g h
4| i jklm
V n 2->
...
...memberi:
abgjklmhfedcginopuxyz vtsrquw
(dengan ruang tambahan)
Uji Kasus
(kutipan ditambahkan untuk menyoroti spasi tambahan - harap diabaikan dalam hal IO)
I: "abcdefghijklmnopqrstuvwxyz"
O: "abgjklmhfedcginopuxyz vtsrquw "
I: "!@#"
O: "!@ # "
I: ""
O: ""
I: "12345 67890"
O: "12690 7 54368 "
I: " "
O: " "
Perhatikan bahwa panjang output selalu kelipatan 15, panjang pegas
Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Jawaban:
Jelly , 26 byte
TryItOnline!
Bagaimana?
sumber
Python 2,
10410298 BytesTerima kasih atas bantuan komentarnya!
https://tio.run/#2VDVy
Asli:
sumber
input()
dan mengambil input dalam format"<stuff>"
.lambda
untuk memberikan fungsi anonim daripada program - ini seringkali lebih pendek .+13
ke+14
dan+1
ke+(len(t)%14>0)
akan melakukannya, tetapi harus ada cara yang lebih pendek.JavaScript (ES6), 79 byte
String heksadesimal tanpa malu-malu dicuri dari @ETHproduksi.
sumber
Retina , 71 byte
Cobalah online!
Membubuhkan string tidak persis ringkas di Retina ...
sumber
JavaScript (ES7),
144143141114104103 byteBerkat ETHProduk untuk menghemat 10B!
Contoh
Keluaran
sumber
+('0x'+whatever)
untuk mengubahnya menjadi angka:(_,c)=>b[(c/15|0)*14+ +('0x'+'0169abc7543268d'[c%15])]
'0x'+'...'[c%15]-0+(c/15|0)*14
untuk menyelamatkan diri Anda dari sepasang tanda kurung :-)Perl 6 , 61 byte
Bagaimana itu bekerja
Struktur dasarnya adalah ini:
Ekspresi yang digunakan untuk mengindeks ke dalam setiap segmen 14 karakter adalah
"abgjklmhfedcgin".ords X- 97
, yang berfungsi sebagai berikut:abgjklmhfedcgin
.97 98 103 106 107 108 109 104 102 101 100 99 103 105 110
.0 1 6 9 10 11 12 7 5 4 3 2 6 8 13
.Perl 6 , 64 byte
Cobalah online!
Bagaimana itu bekerja
Struktur dasarnya adalah ini:
Indeks yang sama seperti di atas, tapi karena kita panggil
.flat
pula, kita bisa menggunakan bersarang ekspresi (tapi 1 byte lebih pendek) untuk mereka:0,1,6,9..12,7,5...2,6,8,13
.(Terlihat sepele, tetapi sebenarnya mengandalkan kekhasan parsing dari Rakudo Perl 6 yang mungkin merupakan bug . Untuk menulisnya tanpa mengeksploitasi bug itu, orang harus menambahkan parens di sekitar
5...2
.)sumber
Befunge-93, 97 byte
Cobalah online!
Ini adalah rincian kode sumber dengan berbagai bagian komponen disorot.
Loop utama dimulai dari mengeksekusi kanan ke kiri, membungkus di sebelah kanan playfield. Di sinilah kita membaca karakter pertama dari stdin, dan mengakhiri jika itu EOF.
Bagian selanjutnya memastikan setiap karakter EOF dikonversi ke spasi menggunakan rumus
c = c + 31*!(c+1)
. Meskipun ini tidak akan berlaku pada iterasi pertama, itu bisa terjadi pada lintasan berikutnya.Salinan karakter disimpan ke memori sementara, dan kemudian pencarian indeks saat ini dilakukan pada tabel di baris empat ( ) untuk menentukan apakah karakter tersebut akan dihasilkan atau tidak.
Jika karakter perlu di-output, kita ambil cabang kiri. Swap dilakukan di sini untuk membatalkan swap yang akan terjadi selanjutnya, dan kemudian nol didorong untuk memaksa cabang kanan.
Jika karakter tidak dihasilkan, kami menukarnya dengan tumpukan di bawah penghitung indeks (ini adalah swap yang dibatalkan di cabang kiri). Dan dalam kedua kasus kami menyimpan karakter ke memori pada offset indeks saat ini, menambah indeks, dan memeriksa apakah itu lebih besar dari 13.
Jika tidak, kami membaca karakter berikutnya dari stdin dan ulangi loop dalam.
Jika ya, kita akan menyelesaikan set 14 karakter, 7 telah menjadi output (
abgjklm
), dan 7 tersisa di stack (cdefhin
). Kami menjatuhkan dua yang terakhir, mengeluarkan 5 sisanya (hfedc
), dan kemudian mengambil dan mengeluarkan kasing khususg
, dari memori. Dan itu membawa kita kembali ke awal dari loop utama, di mana kita mengulangi proses itu lagi untuk 14 karakter berikutnya.i
dann
sumber
Mathematica,
7772 byteTerima kasih kepada JungHwan Min karena telah menghemat 5 byte!
Fungsi yang tidak disebutkan namanya mengambil daftar karakter sebagai input dan mengembalikan daftar karakter.
Partition[#,14,14,{1,1}," "]
pisahkan input menjadi daftar panjang 14, padding dengan spasi jika perlu.LetterNumber@"abgjklmhfedcgin"
mengevaluasi ke{1,2,7,10,11,12,13,8,6,5,4,3,7,9,14}
, yang menunjukkan urutan untuk mengambil setiap panjang-14 sublist (mengulangi elemen ke-7 dengan tepat). Kemudian[[;;,...]]
ambil elemen-elemen dari semua panjang-14 sublists dalam urutan itu, danJoin@@
gabungkan jawaban bersama-sama.Pengajuan sebelumnya:
sumber
LetterNumber@"abgjklmhfedcgin"
adalah cara yang lebih singkat untuk mengompres daftar. Juga;;
bukannyaAll
menyimpan byte.Python 3 , 86 byte
Cobalah online!
Sebagai bonus, string
Tq>]zQ|1/X;:L$o
adalah program CJam yang valid yang mencetak karakter unik pada input standar, diurutkan. Cobalah online! (+ penjelasan)sumber
PHP, 94 byte
Membagi argumen baris perintah menjadi 14-byte potongan dan loop melalui string terjemahan sebagai indeks untuk sub-string. Jalankan dengan
php -nr '<code>' <string>
.Saya senang mengetahui bahwa itu
??
juga menerima string kosong (untuk indeks "tidak valid") sebagai nol.sumber
Ruby, 83 byte
Ide pertama menggunakan nomor hex, tetapi ord-48 menyimpan byte lain (dicuri dari jawaban throx).
sumber