Tantangan:
Diberi string yang hanya berisi huruf besar dan / atau kecil (mana saja yang Anda suka), letakkan tape
secara horizontal untuk memperbaikinya. Kami melakukan ini dengan memeriksa perbedaan dua huruf yang berdekatan dalam alfabet (mengabaikan lilitan dan hanya maju), dan mengisi ruang dengan sebanyak TAPE
/ yang tape
kita butuhkan.
Contoh:
Input: abcmnnnopstzra
Keluaran:abcTAPETAPETmnnnopTAstTAPETzra
Mengapa?
- Antara
c
danm
harusdefghijkl
(panjang 9), jadi kami isi ini denganTAPETAPET
; - Antara
p
dans
harusqr
(panjang 2), jadi kami isi ini denganTA
; - Antara
t
danz
harusuvwxy
(panjang 5), jadi kami isi dengan iniTAPET
.
Aturan tantangan:
- Perbedaannya hanya berlaku ke depan, jadi tidak ada rekaman di antara keduanya
zra
. - Dimungkinkan untuk memiliki lebih dari satu huruf berdekatan yang sama seperti
nnn
. - Anda diizinkan mengambil input dalam format apa pun yang masuk akal. Dapat berupa string tunggal, string-array / daftar, karakter-array / daftar, dll. Output memiliki fleksibilitas yang sama.
- Anda diizinkan menggunakan huruf kecil dan / atau huruf besar dengan cara apa pun yang Anda inginkan. Ini berlaku untuk input, output, dan
TAPE
. - Mungkin tidak
TAPE
diperlukan, dalam hal ini input tetap tidak berubah.
Aturan umum:
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa non-codegolf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa saja'. - Aturan standar berlaku untuk jawaban Anda, jadi Anda diperbolehkan menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat dan tipe pengembalian, program lengkap. Panggilanmu.
- Celah default tidak diperbolehkan.
- Jika memungkinkan, tambahkan tautan ke tes untuk kode Anda.
- Juga, silakan tambahkan penjelasan jika perlu.
Kasus uji:
Input: "abcmnnnopstzra"
Output: "abcTAPETAPETmnnnopTAstTAPETzra"
Input: "aza"
Output: "aTAPETAPETAPETAPETAPETAPEza"
Input: "ghijk"
Output: "ghijk"
Input: "aabbddeeffiiacek"
Output: "aabbTddeeffTAiiaTcTeTAPETk"
Input: "zyxxccba"
Output: "zyxxccba"
Input: "abccxxyz"
Output: "abccTAPETAPETAPETAPETAPExxyz"
Input: "abtapegh"
Output: "abTAPETAPETAPETAPETtaTAPETAPETAPETApeTgh"
Input: "tape"
Output: "taTAPETAPETAPETApe"
ab[TAPETAPETAPETAPET]TA[TAPETAPETAPETA]PE[T]gh
(menambahkan[]
untuk membuatnya lebih mudah dibaca).Jawaban:
05AB1E ,
1412 byteCobalah online!
Penjelasan
sumber
-d
untuk mendapatkan dump operasi mentah dengan operasi apa yang terjadi sebagai pengganti penjelasan, tapi saya mencoba mempostingnya juga tidak langsung terutama pada beberapa LOL milikku.Jelly , 13 byte
Cobalah online!
Penjelasan
sumber
abctapetapetmnnnopapstetapezra
bukanabctapetapetmnnnoptasttapetzra
.Haskell , 58 byte
Cobalah online! Fungsi
f
berulang pada string dan melihat karakter berturut-turutx
dany
.cycle"TAPE"
menghasilkan string tanpa batas"TAPETAPETAPE..."
.[x..y]
mendapatkan rentang karakter darix
hinggay
inklusif, jadi kita perlu mengurangi dua dari panjangnya. Jikax
terjadi kemudian dalam alfabet makay
atau keduanya adalah karakter yang sama, kita mendapatkan angka negatif setelah dikurangi, tetapi untungnyatake
menerima itu juga dan tidak mengambil apa-apa.sumber
Perl 5 ,
-F
46 byteCobalah online!
sumber
P,E,T,A
bukanT,A,P,E
, tapi sekarang saya perhatikan Anda telah menggunakan((P,E,T,A)x7)[2..-$^H+($^H=ord)
alih-alih((T,A,P,E)x7)[0..-$^H+($^H=ord)-2
menyimpan dua byte. Jawaban bagus!^H
(\x08
)!do$0
) tetapi hanya 2 byte di sini, jadi saya tidak repotPython 2 ,
968780 byteCobalah online!
sumber
Haskell , 64 byte
Menangani string huruf besar atau kecil, tetapi tidak keduanya.
Cobalah online!
sumber
C, 84 byte
Cobalah online!
C (dijalankan pada Windows Command Prompt), 81 byte
Keluaran:
sumber
Python 3 , 98 byte
Cobalah online!
-1 byte terima kasih kepada Asone Tuhid
sumber
Scala , 66 byte
Cobalah online!
Penjelasan
sumber
PHP , 85 byte
Cobalah online!
Penjelasan
sumber
Javascript,
131127 Bytes4 Bytes disimpan berkat Rick Hitchcock.
Belum dibuka
Masalah saya di sini adalah bahwa Javascript tidak memiliki cara bersih untuk mendapatkan jarak antara karakter a dan b.
sumber
charCodeAt
ke variabel:z=(a=>[...a].reduce((x,y)=>x+[...Array((f=y[c='charCodeAt']()-x.slice(-1)[c]())>1?f-1:0)].reduce((e,r,t)=>e+"TAPE"[t%4],"")+y))
Python 2/3 ,
7069 byteCobalah online!
sumber
Arang , 20 byte
Cobalah online! Penjelasan:
sumber
Pip , 29 byte
Mengambil input sebagai argumen baris perintah (huruf kecil atau besar, tidak masalah). Cobalah online!
Penjelasan
sumber
JavaScript (ES6),
8078 byteJarak antara dua karakter dapat ditentukan dengan mengubah rangkaiannya menjadi basis 36, mengurangi 370, modulus 37.
Sebagai contoh
(parseInt('cy',36)-370)%37 == 22
,.Kita kemudian dapat menggunakan
padEnd
untuk mengisi celah, dan rekursi untuk menangani loop.Kasus uji:
Tampilkan cuplikan kode
sumber
K4 , 48 byte
Larutan:
Contoh:
Penjelasan:
Solusi yang cukup sederhana, tetapi jumlah byte tinggi ... Temukan delta, ambil dari string
"TAPE"
, gabungkan ke string asli yang memotong di mana delta berada> 1.sumber
Excel VBA, 106 byte
Fungsi jendela langsung VBE anonim yang mengambil input sebagai string huruf besar melalui sel
A1
dan output ke jendela langsung VBE.sumber
Ruby ,
5953 byteCobalah online!
Ini sebenarnya cukup mudah - kami mengambil input sebagai
membagi string kami menjadiarray karakter (terima kasih kepada Asone Tuhid untuk menunjukkan ini) dan menerapkan operasi pengurangan, di mana kami membenarkan setiap char dengan panjang yang dibutuhkan menggunakan "TAPE" sebagai string pengisi.sumber
K (oK) , 33 byte
Cobalah online!
{ }
fungsi anonim dengan argumenx
-':x
kurangi masing-masing sebelumnya (gunakan imajiner 0 sebelum item pertama)1_
jatuhkan item pertama0,
tambahkan sebuah 0-1+
tambahkan -10|
maks (0, ...)(
...)#\:"TAPE"
membentuk kembali string"TAPE"
ke setiap item dari daftar di sebelah kiri(
...),'x
tambahkan karakter yang sesuai darix
ke setiap string yang dibentuk kembali,/
menyatukan semuasumber
Ruby ,
78 77 6462 byte-1 byte terima kasih kepada Kevin Cruijssen
Cobalah online!
sumber
ord-l[-1].ord-1
menjadiord+~l[-1].ord
. Jawaban yang bagus. +1 dari saya.Java (JDK) , 91 byte
Cobalah online!
Penjelasan
Kredit
var
sumber
int p=123
akan menghemat satu karakter. Tidak masalah apa yangp
ada di iterasi pertama, asalkan lebih besar dari atau sama dengan karakter pertama. Nilai terbesar yang dapat dimiliki karakter pertama adalah'z'
== ASCII122
, jadi 123 cukup baik. Juga, jika Anda menggunakan huruf kapital, Anda bisa menggunakan 91 alih-alih 123, menyimpan karakter lain.C # (.NET Core) ,
122111 byteDisimpan 11 byte berkat @KevinCruijssen
Cobalah online!
Penjelasan:
sumber
while
kefor
dan menghapus tanda kurung:for(int i=1,e,d;i<s.Length;r+=s[i++])for(e=d=s[i]-s[i-1];d-->1;r+=t[(e-d)%4]);
. :) Oh, dan karena Anda menggunakant="ETAP"
hanya sekali, Anda dapat menggunakannya secara langsung, dan perubahanstring
untukvar
menyelamatkan 7 byte lagi:s=>{var r=""+s[0];for(int i=1,e,d;i<s.Length;r+=s[i++])for(e=d=s[i]-s[i-1];d-->1;r+="ETAP"[(e-d)%4]);return r;}
.Yabasic , 119 byte
Fungsi anonim yang mengambil input sebagai string huruf besar dan output ke STDOUT.
Cobalah online!
sumber
Python 3, 90 byte
Cobalah secara Online
sumber
**title**
hingga#title
. Juga, maukah Anda menambahkan tautan TryItOnline dengan kode uji?Clojure,
139119 byteFungsi anonim yang mengambil string dan mengembalikan yang direkam. Seperti biasa, Clojure sepertinya tidak terlalu baik. Apa yang saya benar-benar tidak berhasil adalah mengambil arang berikutnya dengan cara singkat. Pada char terakhir saya akan mendapatkan
OutOfBoundsException
, alasannya jelas. Jadi saya menempatkancycle
di sekitarnya. Mungkin ada solusi yang lebih elegan.Tidak disatukan
Memperbarui
Berhasil melepaskan beberapa byte. Singkirkan
if
pernyataan sial dengan mengurangi perbedaan.take
menghasilkan daftar kosong jika angkanya 0 atau kurang yang pada gilirannya menghasilkan string kosong.Tidak disatukan
sumber
APL (Dyalog Classic) , 30 byte
Cobalah online!
{ }
fungsi anonim dengan argumen⍵
⎕a⍳⍵
temukan indeks karakternya dalam alfabet2-/
perbedaan berpasangan (prev minus next)1+
tambahkan 1-
meniadakan0⌈
maks (0, ...)0,
tambahkan sebuah 0⍴∘'TAPE'¨
membentuk kembali secara siklis string'TAPE'
untuk masing-masing⍵,¨⍨
tambahkan setiap char dari argumen ke string yang dibentuk kembali yang sesuai∊
meratakansumber
CJam ,
2725 byteCobalah online!
Jauh, jauh dari bahasa golf lainnya, tapi saya bangga dengan golf ini.
Penjelasan
sumber
Sekam ,
2625 byteCobalah online!
sumber
PowerShell , 72 byte
Cobalah online!
sumber
Java,
213166153 bytecoba online
Tolong bantu saya membuatnya lebih baik.
Terima kasih kepada @cairdcoinheringaahing untuk tip tentang tempat putih. Terima kasih kepada @RM untuk tip tentang pita tali. Terima kasih kepada @KevinCruijssen untuk tips lambda dan ekspresi.
sumber
"TAPETAPETAPETAPETAPETAPET".substring...
.int a=1,l=i.length;a<=l;a++
bisaint a=0,l=i.length;++a<=l;
,char u=i[a-1];o+=u;if(a<l){char n=
bisachar u=i[a-1],n;o+=u;if(a<l){n=
,(n-u)
tidak perlu tanda kurung, dann-u-1
bisan+~u
. Selain itu, jawaban Anda saat ini adalah potongan, bukan fungsi. Untuk membuatnya lambda, Anda harus menambahkani->{
di depan dan}
di akhir. Jadi totalnya: Cobalah online. 153 byte