( Terinspirasi oleh tantangan ini .)
Katakanlah kita punya string ABBCBA
. Kita dapat mengatakan bahwa ada kenaikan antara A
dan B
, untuk B
mengikuti A
; kita dapat mengatakan bahwa ada jalan antara B
dan B
, untuk tidak ada perubahan; dan akhirnya kita bisa mengatakan ada perbedaan antara C
dan B
. Kita dapat menggambar grafik seperti ini:
A B B C B A
Rising: o o
Continuing: o
Falling: o o
Tanpa label, dan meminimalkan spasi putih:
o o
o
oo
Ini adalah output yang diharapkan untuk input ABBCBA
.
Anda dapat menggunakan karakter non-spasi putih untuk menggantikan o
dalam output. Selanjutnya, setiap kolom secara opsional memiliki ruang tambahan di antara mereka, seperti:
o o
o
o o
Input akan terdiri dari setidaknya tiga karakter. String seluruhnya terdiri dari huruf besar, tetapi Anda bisa menggunakan huruf kecil.
Uji kasus
TEST CASE
LINE 1
LINE 2
LINE 3
HELLOWORLD
o oo o
o
o o oo
TESTCASE
oo o
o oo o
EXAMINATION
o o o o o
o o o o o
ZSILENTYOUTH
o ooo o
oo o o oo
ABC
oo
ABCBA
oo
oo
o
, atau apakah output harus kompak?Jawaban:
Jelly , 11 byte
Cobalah online! atau verifikasi semua kasus uji .
Bagaimana itu bekerja
sumber
Mathematica,
93836864 byte(menggunakan
0
, bukanO
)Penjelasan
Mendapat posisi dalam alfabet setiap karakter input.
Mengambil perbedaan antara setiap elemen berturut-turut, dan mengambil tanda (
-1
untuk negatif / jatuh,0
untuk 0 / terus,1
untuk positif / naik)Menyisipkan a
0
dalam daftar duaNull
s, di posisi pertama jika naik, tengah jika terus, dan posisi ketiga jika jatuh.Memformat output.
Jika output bisa terlihat berbeda dari yang ada di pertanyaan, kode di atas dapat disingkat menjadi 41 byte:
... yang menciptakan sesuatu seperti ini (untuk "ABBCBA"):
sumber
MATL ,
15, 14 byteCobalah online!
Penjelasan:
Mereka mengatakan gambar bernilai ribuan kata, jadi di sini ada penerjemah online beta yang menunjukkan kepada Anda nilai di atas tumpukan secara langsung saat diperbarui. Perhatikan bahwa ini masih dalam versi beta, jadi Anda mungkin perlu menjalankan beberapa kali.
Jadi pertama-tama, kita panggil
dZS
.d
memberi kita perbedaan antara setiap elemen berurutan, danZS
memberi kita tanda (-1, 0, atau 1) dari setiap elemen. Jadi dengan 'HELLOWORLD' sebagai input, setelah langkah pertama kita akan memiliki:Sekarang, kita gunakan
q
untuk mengurangi ini dan mendapatkan:Dan kemudian dua kali kita menduplikasi bagian atas tumpukan dan menambah array (
tQ
) Setelah ini kita akan punyaSekarang semua '0 adalah di mana kita ingin menampilkan karakter. Jadi, kami menggabungkan ketiga array ini ke dalam matriks (
v
), dan meniadakannya secara logis (~
). Kemudian kita mengalikan setiap nilai dalam matriks dengan nilai ASCII dari 'O', (79*
) dan menampilkannya sebagai string denganc
.sumber
Haskell, 63 byte
Mengembalikan daftar tiga string, mewakili garis output. Tidak mengandung pesan subliminal.
dianne menyimpan tiga byte dengan menggunakan
do
notasi danmax
bukannya pemahaman daftar danlast
.sumber
['o'|b e y]
..CJam , 19 byte
Gunakan
0
bukano
.Cobalah online!
Penjelasan
sumber
Python 2,
7671 byteTerima kasih kepada @xnor karena memberi tahu saya bahwa mengembalikan daftar string diperbolehkan.
Uji di Ideone .
sumber
lambda
.JavaScript (ES6),
9695898782 byte2 byte disimpan dengan menggunakan
0
bukano
, seperti yang disarankan oleh Conor O'Brien26 byte disimpan berkat ETHproductionssumber
'o'
dengan0
bantuan ada?s=>[1,0,-1].map(k=>[...s].map(c=>(r=p?(c>p)-(c<p)-k&&' ':'',p=c,r),p=0).join``).join`\n`
akan berhasil, menghemat 2 byte.s=>[1,0,-1].map(k=>[...s].map((c,i)=>(p=s[i-1])?(c>p)-(c<p)-k&&' ':'').join``).join`\n`
.s.replace
juga akan menghemat beberapa byte[...s].map().join()
.Perl, 47 byte
Termasuk +1 untuk
-p
Berikan masukan pada STDIN:
bumpy.pl
:sumber
MATL,
1614 BytesCobalah online!
Ini tumbuh dari diskusi tentang jawaban DJMCMahem . Meskipun jawaban ini
2 karakter lebihpanjang dengan panjang yang sama, metode ini agak berbeda sehingga mungkin menjadi minat independen.Terima kasih kepada Luis Mendo untuk saran menghemat 2 byte (lihat komentar)
Penjelasan:
'dZS' mendapatkan vektor di mana setiap entri adalah tanda perbedaan antara karakter sukses, lalu 'qq_' mengurangi setiap entri dengan dua dan membalik tanda, jadi sekarang jika karakter meningkat itu adalah 1, jika tetap sama 2, dan jika berkurang 3. Misalnya,
Selanjutnya, 't' membuat salinan dari vektor sebelumnya pada stack, kemudian 'n:' menempatkan vektor [1,2,3,4, ...] pada stack juga. Kemudian '79' menempatkan nilai 79 di tumpukan. Nilai 79 dipilih karena ini adalah angka untuk karakter unicode 'o', yang akan menjadi output kita nanti. (Terima kasih kepada Luis Mendo untuk gagasan untuk meletakkan nilai 79 di sini daripada nanti)
Pada titik ini kita memiliki indeks baris, indeks kolom, dan nilai bukan nol dari matriks jarang yang memiliki nilai 79 di mana pun kita menginginkan karakter output, dan 0 di mana pun kita ingin menampilkan spasi kosong. Kami mengambil tiga item ini dari tumpukan dan membuat matriks jarang ini dengan perintah matriks jarang MATL 'Z?'. Itu adalah,
Yang tersisa hanyalah mengubah matriks dari angka menjadi karakter unicode, yang dilakukan oleh perintah 'c'. 79 menjadi 'o', dan 0 menjadi spasi:
Matriks karakter yang dihasilkan kemudian ditampilkan secara implisit.
sumber
PHP, 95 Bytes
1. Buat array string dengan indeks -1 hingga 1 alternatif
$b=array_fill(-1,3," ");
2. Isi string yang tergantung oleh operator pesawat ruang angkasa dan posisi input
3.Output bergabung dengan array dengan baris baru
First Way 111 Bytes
Gunakan operator pesawat ruang angkasa operator
<=>
pesawat ruang angkasasumber
~õ
ini adalah jalan pintas yang praktis untuk"\n"
. Tidak, serius!" "
, yang bisa~ß
. Contoh. Anda ingin mengatur penyandian browser Anda ke Latin-1 saat melihatnya.JavaScript (ES6), 81 byte
Ditulis dari awal, meskipun sangat terinspirasi oleh jawaban @ Arnauld . Menggunakan rekursi untuk menghitung konten setiap baris.
sumber
Ruby,
6664 byteLihat di eval.in: https://eval.in/649503
sumber
Java 7,
158156 byte2 byte disimpan berkat @Frozn .
Kasus yang tidak disatukan & uji:
Coba di sini.
Keluaran:
sumber
a,b,c=b=a=""
akan lebih pendek.Clora (20 byte)
<IN?o ;=IN?o ;>IN?o
Penjelasan:
Ada 3 program Clora, satu untuk setiap jalur output.
Program pertama,
<IN?o
Periksa apakah char input saat
I
ini lebih kecil<
dari char berikutnyaN
. Simpan hasilnya dalam bendera global. Periksa hasil flag?
dan jika benar, outputo
, jika tidak ada ruang kosong (ya, ada ruang kosong di sana.Semua program lain, ikuti aturan yang sama dan dipisahkan oleh
;
, setiap program dijalankan dan menerima input sebagai argumen.Anda dapat mengujinya sendiri termasuk clora.js dan mengeksekusi dengan
sumber
Pyth, 21 byte
Program yang mengambil input dari string yang tidak dikutip pada STDIN dan mencetak hasilnya.
Ini menggunakan ide yang mirip dengan jawaban CJam @ MartinEnder .
Cobalah secara online atau Verifikasi semua uji .
Bagaimana itu bekerja
sumber
PHP 7,
818077 byteCatatan: menggunakan pengkodean Windows-1252
Jalankan seperti ini:
Penjelasan
Iterates atas garis (nomor
1
,0
,-1
). Kemudian beralih ke string input untuk setiap baris. Ketika hasil perbandingan pesawat ruang angkasa sama dengan nomor baris, output sebuaho
, jika tidak, output spasi. Setelah setiap baris, cetak baris baru.Tweaks
$x
ini-1
, yang bisa kita temukan dengan negasi biner (hasil0
). Menyimpan byte dibandingkan dengan menambahkan1
(atau 2 dengan pra-kenaikan).$argn
sumber
-d error_reporting=30709
ke jumlah byte Anda.2>/dev/null
, tetapi itu akan menghilangkan SEMUA kesalahan, termasuk fatalIf you get warnings, set the default value with ...
. Maaf permisi saya; Saya tidak memecahkan kode nilai itu.Lua
326303 byte tl = 0 s = io.read () o1, o2, o3 = "", "", "" t = {} untuk i = 1, # s lakukan t [i] = s: sub (i ( , i) tl = tl + 1 untuk v = 1, tl-1 lakukan jika t [v] t [v + 1] maka o1 = o1 .. "" o2 = o2 .. "" o3 = o3 .. " o "akhir cetak (o1 .." \ n ".. o2 .." \ n ".. o3)Versi ungolfed
sumber
t1 = 0
,? untukt1=0
? Dan tempat-tempat serupa.R, 114 byte
Jawaban R yang tidak bersaing.
Penjelasan
#
jika perbedaannya adalah>0
,==0
atau<0
.sumber