Sıkıştırılmış seyrek satırı (CSR, CRS veya Yale formatı) kullanarak seyrek bir matrisi sıkıştırın .
Bunların hepsi aynı sıkıştırma biçimidir (yeni Yale'yi yoksayın).
Giriş herhangi bir 2d veri yapısı olabilir (listelerin listesi, vb.): Ör.
[[0 0 0 0],
[5 8 0 0],
[0 0 3 0],
[0 6 0 0]]
Ve çıkış çıkışları ifade üç 1d veri yapıları (liste vs.) olmalıdır A
, IA
ve JA
örneğin,
[5, 8, 3, 6]
[0, 0, 2, 3, 4]
[0, 1, 2, 1,]
İşlem wikipedia tarafından açıklanmaktadır:
A dizisi NNZ uzunluğundadır ve M'nin sıfırdan farklı tüm girişlerini soldan sağa yukarıdan aşağıya ("satır-ana") düzende tutar.
IA dizisi m + 1 uzunluğundadır. Bu özyinelemeli tanımla tanımlanır:
IA [0] = 0 IA [i] = IA [i - 1] + (orijinal matristeki (i - 1) satırındaki sıfır olmayan eleman sayısı)
Böylece, IA'nın ilk m elemanları, M'nin her satırındaki ilk sıfır olmayan elemanın A indeksini depolar ve son eleman IA [m], A olarak da düşünülebilen eleman sayısı olan NNZ'yi depolar. Matris M'nin sonunun hemen ötesinde bir hayalet sıranın ilk elemanının A indeksi. Orijinal matrisin i-sıra sırasının değerleri A [IA [i]] ile A [IA [i +) elemanlarından okunur. 1] - 1] (her iki uçta dahil), yani bir satırın başlangıcından sonrakinin başlangıcından hemen önceki son dizine. [5]
Üçüncü dizi, JA, A'nın her elemanının M cinsinden sütun indeksini içerir ve bu nedenle de NNZ uzunluğundadır.
Diliniz gerçek veri yapılarını desteklemiyorsa, giriş ve çıkış metin olabilir.
Test senaryoları
Giriş 1:
[[0 0 0 0],
[5 8 0 0],
[0 0 3 0],
[0 6 0 0]]
Çıkış 1:
[ 5, 8, 3, 6 ]
[ 0, 0, 2, 3, 4 ]
[ 0, 1, 2, 1, ]
Giriş 2
[[10 20 0 0 0 0],
[0 30 0 40 0 0],
[0 0 50 60 70 0],
[0 0 0 0 0 80]]
Çıkış 2:
[ 10 20 30 40 50 60 70 80 ]
[ 0 2 4 7 8 ]
[ 0 1 1 3 2 3 4 5 ]
Giriş 3:
[[0 0 0],
[0 0 0],
[0 0 0]]
Çıkış 3:
[ ]
[ 0 0 0 0 ]
[ ]
Giriş 4:
[[1 1 1],
[1 1 1],
[1 1 1]]
Çıkış 4:
[ 1 1 1 1 1 1 1 1 1 ]
[ 0 3 6 9 ]
[ 0 1 2 0 1 2 0 1 2 ]
Giriş 5:
[[0 0 0 0],
[5 -9 0 0],
[0 0 0.3 0],
[0 -400 0 0]]
Çıktı 5:
[ 5, -9, 0.3, -400 ]
[ 0, 0, 2, 3, 4 ]
[ 0, 1, 2, 1, ]
Girdilerin herhangi bir gerçek sayı içerebileceğini varsayın, matematiksel sembolleri veya üstel gösterimi dikkate almanıza gerek yoktur (örn. 5.000 asla 5e3 olarak girilmez). Sen işlemek gerek kalmayacak inf
, -inf
, NaN
veya herhangi bir başka 'sözde numaralar'. Sen çıkış numarasının farklı bir temsilidir (5.000 edebilir olabilir bunu seçerseniz 5e3 olarak çıktı olun).
puanlama:
Bu bir kod golf , en az bayt kazanır.
Liderler
İşte hem düzenli bir skor tablosu hem de kazananları dile göre gözden geçirmek için bir Yığın Parçacığı.
Yanıtınızın göründüğünden emin olmak için lütfen aşağıdaki Markdown şablonunu kullanarak yanıtınızı bir başlıkla başlatın:
# Language Name, N bytes
N
gönderiminizin büyüklüğü nerede . Puanınızı artırmak varsa, olabilir onları içinden vurarak, başlığa eski hesapları tutmak. Örneğin:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Başlığınıza birden fazla sayı eklemek istiyorsanız (örneğin, puanınız iki dosyanın toplamı olduğu veya yorumlayıcı bayrak cezalarını ayrı olarak listelemek istediğiniz için), gerçek puanın başlıktaki son sayı olduğundan emin olun :
# Perl, 43 + 2 (-p flag) = 45 bytes
Dil adını, daha sonra skor tablosu snippet'inde görünecek bir bağlantı da yapabilirsiniz:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
IA[0] = 0
Tamamen gereksiz değil mi? Sadece tanımlamak gerekir IA[i] = IA[i − 1]...
, ancak i-1 < 0
0'ı kullanırsak, IA [0] her zaman 0'a eşittir, bu nedenle sıkıştırılabilir (evet, bunun algoritmanın bir eleştirisi olduğunu anlıyorum, bu zorluk değil).