Kita tampaknya tidak pernah mendapatkan lelah tantangan terkait alfabet-...
Resep
Diberikan
- serangkaian huruf
S
, dan - dua bilangan bulat positif
M
,N
,
menghasilkan sup alfabet dengan huruf-huruf yang S
menempati posisi acak dalam mangkuk berukuran persegiM
× N
, dibingkai oleh karakter non-alfabet, non-spasi untuk mewakili tepi mangkuk.
Posisi yang tidak digunakan huruf harus ditampilkan sebagai spasi. Lihat contoh di bawah ini .
Aturan tambahan
- Ukuran
M
×N
mengacu pada interior mangkuk. Ukuran termasuk pelek adalahM+2
×N+2
. - Setiap karakter dari
S
harus muncul sekali dalam mangkuk, di posisi yang berbeda ; yaitu, satu karakter tidak dapat menimpa yang lain. S
mungkin mengandung duplikat . Sebagai contoh, jikaS
string'abcc'
, sup harus berisi satua
, satub
, dan duac
(semua dalam posisi berbeda).- Input akan memenuhi pembatasan
M >= 1
,N >= 1
,1 <= length(S) <= M*N
. - Tepi mangkuk dapat berupa karakter non-alfabet, non-spasi , konsisten di seluruh program yang dijalankan dan nilai input.
- Posisi huruf dalam mangkuk adalah acak, sehingga hasilnya dapat berbeda setiap kali program dijalankan dengan input yang sama.
- Diberikan input, setiap set posisi surat yang mungkin harus memiliki probabilitas tidak nol . Karena ini tidak dapat diperiksa dari beberapa realisasi program, tolong jelaskan bagaimana kode Anda memenuhi ini.
- Memimpin atau mengeklik spasi putih di sekitar tepi diizinkan.
S
akan berisi hanya huruf besar . Jika diinginkan, Anda dapat memilih untuk hanya mengambil huruf kecil .- Input dan output fleksibel seperti biasa. Misalnya, output dapat berupa string dengan baris baru, array karakter 2D, atau daftar garis.
- Program atau fungsi diizinkan, dalam bahasa pemrograman apa pun . Celah standar dilarang.
- Kode terpendek dalam byte menang.
Contohnya
Input ditampilkan sebagai S, [M N]
, di mana M
jumlah baris dan N
jumlah kolom. Karakter #
digunakan untuk pelek.
'O', [1 1]:
###
#O#
###
'HEY', [1 3]:
#####
#YHE#
#####
'HELLO', [4 11]:
#############
# O #
# H #
# LE #
# L #
#############
'ADVNJSGHETILMVXERTYIOJKCVNCSF', [8 12]:
##############
#K V L S #
# A V X H #
#T M C #
# I O N#
# YC #
# G I R SE#
# J F #
#JT D V EN #
##############
'OOOOOOOOOOXXXXX', [13 31]:
#################################
# X #
# O #
# #
# X #
# O #
# X O #
# O #
# X #
# O #
# X #
# O #
# O O O #
# O #
#################################
'ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ', [11 41]
###########################################
# JU#
# Q C M G R T U Y H #
# KI E H M YO #
# V BW I JC #
# SV D P B U #
# A F RF J KP E #
# E N TH Z #
# N BM O Q I AS N WX #
# S O K G L P Q #
#Z L T R L A F DD#
# V Y WX C G XZ #
###########################################
|+-
?Jawaban:
05AB1E ,
2018161514 byteMengambil tiga input secara berurutan: tinggi, lebar, string. Output sebagai daftar karakter 2D.
Digunakan
8
sebagai batas, tetapi bisa berupa angka apa saja.-1 byte terima kasih kepada @Grimy .
Cobalah secara online atau verifikasi semua kasus uji . (TIO berisi
}}J»
di footer untuk mencetak hasilnya dengan cantik; silakan menghapusnya untuk melihat daftar karakter 2D keluaran aktual sebagai gantinya.)Penjelasan:
sumber
*j
! Ini 13 untuk legacy , atau 14 jelek untuk modern (menampilkan array karakter 2D).1,1,"O"
, jadi saya pikir itu harus menjadi 14-byter untuk warisan juga. Terima kasih untuk -1.APL (Dyalog Unicode) , 25 byte SBCS
Cobalah online!
-22 Terima kasih kepada @ngn, -7 terima kasih kepada @ngn dan @ Adám
Penjelasan:
APL (Dyalog Extended) , 21 byte SBCSSudut pelek adalah karakter yang berbeda
Cobalah online!
Menggunakan dfn untuk menampilkan kotak.
sumber
'#',∘⌽∘⍉⍣4⊢⍴∘(?⍨∘≢⊃¨⊂)↑⍨∘(×/)
Coba online!{'#',∘⌽∘⍉⍣4⊢⍵⍴⍺\⍨(≢⍺)>?⍨×/⍵}
(atau≥
bukannya>
jika⎕io=1
)'#',∘⌽∘⍉⍣4{⍵⍴⍺\⍨(≢⍺)>?⍨×/⍵}
'#',∘⌽∘⍉⍣4{⍵⍴⊃¨↓∘⍺¨?⍨×/⍵}
Python 3 , 110 byte
Cobalah online!
Mengacak dengan menggunakan
set
pemahaman dan mengembalikan array karakter 2D.sumber
f'{s:{m*n}}'
bagian itu? Karena itu adalah sintaks untuk string yang diformat, yang kebetulan juga dimulai denganf
.Bash + coreutils,
139125 karakterContoh dijalankan:
Cobalah online!
Bash + coreutils + kotak, 97 karakter
Contoh dijalankan:
Cobalah online! (Sebagian, karena
boxes
tidak diinstal pada TIO.)sumber
J ,
3029 byte-1 byte terima kasih kepada Jonah
Cobalah online!
sumber
9!:1]6!:9''
memperbaikinya{.
. Tweak sedikit untuk 29'#'|.@|:@,^:4[$*/@[(?~@[{{.)]
: Cobalah online!PowerShell ,
16311193 byteCobalah online!
Mengambil input sebagai
$w
idth,$h
delapan,$s
tring.Membangun string dari idth yang
#
sesuai$w
, string-gabung yang dengan beberapa perhitungan, dan kemudian#
string yang sama lagi. Perhitungan dimulai dengan mengambil$s
tring input , dan melakukan .padRight
hingga delapan$w
dengan$h
panjang (yaitu, membuat string cukup lama untuk benar-benar mengambil ruang persegi panjang. Kami kemudian mengonversi string itut
oCharArray
, dansort
ituRandom
. Itu memberi kita bagian tengah yang tercampur aduk. Akhirnya, kita-replace
menjadi potongan-potongan dengan nilai yang sama$w
, dan mengelilingi potongan itu dengan#
s.-52 Berkat inspirasi dari AZTECCO
-18 bytes berkat mazzy
sumber
-replace
bukannya membelah dan bergabung.JavaScript (ES7), 125 byte
Mengembalikan string. Digunakan
0
sebagai karakter bingkai.Cobalah online!
Berkomentar
sumber
APL (Dyalog Extended) , 23 byte SBCS
Fungsi infiks diam-diam anonim. Dibawa
[M,N]
sebagai argumen kiri danS
sebagai argumen kanan.Cobalah online!
×/⍛(
...)
terapkan fungsi berikut di antara argumen, ganti argumen kiri dengan produknya:↑
ambilM
×N
karakter dariS
, padding dengan spasi di sebelah kanan⊇
atur ulang itu dengan urutan berikut:?⍨⍤
indeks acak 1 sampai…⊣
argumen kiri (M
×N
)⍴
r bentuk itu menjadi bentuk berikut:⊣
argumen kiri (yaituM
baris danN
kolom)'#'
...⍣4
menerapkan fungsi berikut empat kali, setiap kali dengan karakter hash sebagai argumen kiri:∘⍉
transpos argumen kanan∘⌽
mencerminkan argumen kanan,
menggabungkan kolom hash ke sisi kiri itusumber
PHP 7.4,
1079994 karakterTerimakasih untuk:
join()
(-8 karakter)chunk_split()
's$end
parameter (-5 karakter)Cobalah online!
PHP 7.3,
117112108 karakterTerimakasih untuk:
join()
(-5 karakter) secara efisienchunk_split()
's$end
parameter (-4 karakter)Contoh dijalankan:
Cobalah online!
sumber
fn($s,$r,$c)=>($b=str_repeat(9,$c+2))."\n9".join("9\n9".str_split(str_shuffle(str_pad($s,$r*$c)),$c))."9\n$b";
harus bekerja di PHP 7.4 ( wiki.php.net/rfc/arrow_functions_v2 ), dan rilis kandidat telah dirilis ( wiki.php.net/todo/php74 ), jadi, itu adalah "kompiler" yang tersedia yang datang sebelum tantangan ini, dan siapa pun dapat menggunakannya.join()
, tetapi gagal mengurangi ukurannya. ☹chunk_split
: 94 byte Saya juga menghapus titik koma terakhir karena saya percaya itu tidak diperlukan, Anda telah menulis fungsi, jadi kode yang akan menetapkannya ke variabel tidak boleh dihitung.MATL ,
2219 byteCobalah online!
Terima kasih @LuisMendo untuk menyimpan 3 byte, jadi sekarang ia memiliki bytecount sama @ flawr ini jawabannya , tetapi cukup berbeda untuk mengirim pula. Ikhtisar agoritme tingkat tinggi:
sumber
Z}&O
denganZ"
, dan itu juga memungkinkan Anda untuk menghapus finalc
1$O
.Ruby , 121 byte
Buat mangkuk, kueri indeks semua ruang di dalam mangkuk, sampel sejumlah ruang yang sama dengan ukuran string, dan isi mereka.
sample
Tidak mengembalikan daftar yang diurutkan, sehingga tidak perlu mengocok. Mencari indeks hingga9*m*n
(yang hampir pasti keluar dari jangkauan) masih akan mendapatkan semua spasi dan 1 byte lebih pendek darir.size
.Cobalah online!
sumber
Merah ,
120116114112 byte-2 byte terima kasih kepada @Kevin Cruijssen!
Cobalah online!
sumber
+ 1
dan menggunakanto"""00"0 n
sebagai gantinya.copy
, untuk jumlah byte yang sama.t
garis sebagai item utama / tertinggal sebelum perulangan untuk menghemat dua longgarprint t
menjadi lebih pendek? Saya meragukannya, tetapi karena saya tidak tahu cara menambahkan item ke daftar, saya tidak yakin.Perl 6 ,
7467 byte-5 byte terima kasih kepada Jo King
Cobalah online!
Penjelasan
sumber
Perl 5
-lF
,9997 byte-2 byte milik @NahuelFouilleul
Cobalah online!
sumber
($i++%$n==0)
dapat diubah oleh!($i++%$n)
k4,
3228 bytesunting: -4 terima kasih kepada Galen Ivanov!
disebut suka
penjelasan:
sumber
#
pada akhir setiap baris dan transpos / balikkan 4 kali, kira-kira seperti ini .Java (JDK) ,
180178 bytesTidak ada impor tambahan tunggal:
Cobalah online!
Itu adalah perjuangan yang cukup untuk menurunkan golf ini. Secara khusus, impor yang terlibat dengan metode Collections.shuffle () / Array terlalu banyak untuk diterima, jadi saya harus membuat algoritma String shuffling saya sendiri (mungkin tidak efisien atau tidak terdistribusi secara merata). Terima kasih banyak kepada Steven karena telah membuktikan set posisi apa pun dapat dihasilkan dari algoritma.
Diformat (dengan penjelasan):
sumber
.replaceAll("(.{"+n+"})","\n#$1#")
bisa menjadi.replaceAll(".{"+n+"}","\n#$0#")
Arang , 27 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Mengambil input dalam urutan lebar, tinggi, string. Penjelasan:
Masukkan lebar dan tinggi.
Bingkai mangkuk.
Ulangi karakter dalam string.
Lompat ke posisi acak dalam mangkuk hingga ditemukan titik kosong.
Cetak karakter saat ini tanpa menggerakkan kursor.
sumber
Move(:UpLeft)
perlu? Ini berfungsi dengan baik tanpa itu, tapi mungkin Anda menambahkannya karena alasan yang tidak saya pikirkan?Japt
-R
,2118 byteCobalah
sumber
MATL ,
29 2719 byteCobalah online!
Terima kasih @LuisMendo untuk -8 byte!
Penjelasan:
p
menghitung jumlah sup-piksel. KemudianZ@
menghasilkan permutasi acak ukuran jumlah piksel sup. Kami akan menggunakan ini sebagai indeksiy~h
yang merupakan string input dengan spasi yang cukup ditambahkan.w)
menukar keduanya dan mengindeks satu dengan yang lainnya. Kami kemudian membentuk kembali1Ge
bentuk menjadi persegi panjang yang diinginkan dan#
-padanya menggunakanTT35&Ya
.sumber
T-SQL 2017, 232 byte
Menguji online ini adalah versi lama dari sql-server dengan biaya karakter lain. Saya memposting versi yang lebih pendek.
Golf:
Cobalah online
Tidak Disatukan:
sumber
C (dentang) ,
169164162160 byteCobalah online!
-2 menempatkan = o dalam waktu () panggilan // untuk (srand (waktu (a = o)); ...
Menyimpan 7 saran @ceilingcat untuk menggunakan - ~ penyimpanan variabel dan otomatis untuk string o plus banyak peningkatan.
Degolf:
sumber
*a=--i;)*a++=i%m?-~i%m<3|i<m|i>m*n?35:32:10;for(;
alih-alih--i;)*a++=i%m?-~i%m<3|i<m|i>m*n?35:32:10;for(*a=0;
Ikon ,
136133131118 byteCobalah online!
sumber
Jelly , 16 byte
Sebuah dyadic Link yang menerima daftar bilangan bulat
[M, N]
,, di sebelah kiri dan daftar karakter,S
, di sebelah kanan yang menghasilkan daftar daftar karakter, garis. Menggunakan karakter tilde~
,, sebagai perbatasan.Cobalah online!
Semua kemungkinan output memiliki peluang nol untuk dihasilkan sejak kami mengacak (
Ẋ
) daftar karakterS
beserta jumlah ruang yang sesuai.Kode
Ṿ€«”~ZƊ⁺
menyimpan byte yang saya bayangkan akan diperlukan untuk bergabung dengan baris baru yang program penuh menggunakan bilangan bulat seperti nol perlu menggunakan (misalnyaP⁶ẋaẊs⁸Ṫ;€0ZUƊ4¡Y
atauP⁶ẋaẊs⁸Ṫj@€Ø0Z$⁺Y
). Mungkin ada cara untuk menghemat lebih banyak ...?sumber