El yazısı rakamları tanımak


22

Senin görevin elle yazılmış bir rakam içeren bir görüntü okumak, rakamı tanımak ve basmaktır.

Giriş: 0'dan 255'e kadar olan ve 784 düz metin sayılar dizisi olarak verilen, boşlukla ayrılmış, 28 * 28 gri tonlamalı bir görüntü. 0 beyaz, 255 siyah anlamına gelir.

Çıktı: Tanınan basamak.

Puanlama: Programınızı, MNIST veri tabanı eğitim setinden (ASCII formuna dönüştürülmüş) 1000 resim ile test edeceğim . Görüntüleri zaten (rastgele) seçtim, ancak listeyi yayınlamayacağım. Test 1 saat içinde bitmelidir ve n- doğru cevapların sayısını belirleyecektir .
nProgramınızın kalifiye olması için en az 200 olması gerekir. Kaynak kodunuzun boyutu ise s, puanınız olarak hesaplanır s * (1200 - n) / 1000. En düşük puan kazanır.

Kurallar:

  • Programınız görüntüyü standart girdiden okumalı ve rakamı standart çıktıya yazmalıdır.
  • Dahili OCR işlevi yok
  • Üçüncü taraf kütüphanesi yok
  • Dış kaynak yok (dosyalar, programlar, web siteleri)
  • Programınız, özgürce kullanılabilen bir yazılım kullanarak Linux'ta çalıştırılabilir olmalıdır (Gerekirse Şarap kabul edilebilir)
  • Kaynak kod yalnızca ASCII karakterlerini kullanmalıdır
  • Lütfen cevabınızı her değiştirdiğinizde tahmini puanınızı ve benzersiz bir sürüm numarası girin

Örnek giriş:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 18 18 18 126 136 175 26 166 255 247 127 0 0 0 0 0 0 0 0 0 0 0 0 30 36 94 154 170 253 253 253 253 253 225 172 253 242 195 64 0 0 0 0 0 0 0 0 0 0 0 49 238 253 253 253 253 253 253 253 253 251 93 82 82 56 39 0 0 0 0 0 0 0 0 0 0 0 0 18 219 253 253 253 253 253 198 182 247 241 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 80 156 107 253 253 205 11 0 43 154 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 1 154 253 90 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 139 253 190 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 190 253 70 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 35 241 225 160 108 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 81 240 253 253 119 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 45 186 253 253 150 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 93 252 253 187 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 249 253 249 64 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 46 130 183 253 253 207 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 39 148 229 253 253 253 250 182 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 114 221 253 253 253 253 201 78 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 66 213 253 253 253 253 198 81 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 171 219 253 253 253 253 195 80 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 55 172 226 253 253 253 253 244 133 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 136 253 253 253 212 135 132 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Bu arada, eğer bu satırı girdiye hazırlarsanız:

P2 28 28 255

ters / olumsuz renklerle, pgm biçiminde geçerli bir resim elde edersiniz.

Doğru renklerle göründüğü gibi: hane

Örnek çıktı:

5

Puan Durumu:

No.| Name         | Language   | Alg | Ver | n   | s   |  Score
----------------------------------------------------------------
 1 | Peter Taylor | GolfScript | 6D  | v2  | 567 | 101 |  63.933
 2 | Peter Taylor | GolfScript | 3x3 | v1  | 414 | 207 | 162.702

İlgili, ancak tamamen aynı değil (zorluk değil, ancak lateks kodlarını bulmak için çok yararlı): detexify.kirelabs.org/classify.html . Aynı zamanda sayıları tanır.
Justin

1
Yalnızca siyah pikselleri göz önünde bulundurmamız gerektiğini güvenle alabilir miyiz? > 127 piksel? Ne varsayabiliriz?
Justin,

2
Özellikle bu bir kod golf sorusuysa, lütfen siyah beyaz girişle sınırlandırın. İnsanlar tüm kariyerlerini kodlarında karakterleri saymak zorunda kalmadan bu sorunu çözmekten atarlar. Seçtiğin karakterleri yayınlamamak, hile yapmayı bırakmanın bir yolu ve onu bir çeşit kumar haline getiriyor ... ve insanların burada AI yazması mantıksız olduğu düşünüldüğünde, eğlence biraz garip bir buluşma yapıyor ve sonra ne kadar iyi olduğunu görüyor. Bu turnuvada rekabet vs yapar.
Dr. Rebmu

3
@aditsu Evet, herkes kötü yapabilir. Ancak bunun kötü yapılmasını istemiyorsunuz, karakter sayısının ölçüldüğü bir yarışmada birisinin “kazanmasını” istiyorsunuz. Sanırım sorunu biraz çözmek, hobi bulmaca çözenleri için daha gerçekçi. Girdiyi sınırlamak, makul hale getirmek için iyi bir başlangıç ​​gibi görünüyor. Siyah ve beyaz olduğunu söylemek için girişten bir ön geçiş öneririm.
Dr. Rebmu

2
@ Dr.Rmu ve siyah-beyaz giriş isteyen başka biri: girişi 128 gibi bir eşik kullanarak dönüştürmekten çekinmeyin. Kontrol ettim ve rakamlar hâlâ tanınabilir (beynim tarafından). Başka eşikleri de deneyebilirsiniz, daha iyi sonuçlar verebilirler.
aditsu

Yanıtlar:


6

GolfScript 6D (v2: tahmini puan 101 * 0,63 ~ = 64)

Bu benim önceki GolfScript cevabım için çok farklı bir yaklaşım, bu yüzden diğer cevabı düzenlemek ve bunu v2 yapmaktan daha v1 'de ayrı bir cevap olarak göndermek daha mantıklı geliyor.

~]:B;569'!EM,R.==|%NL2+^=1'{{32-}%95{base}:^~\^}:&~2/{~B=<}%2^10'#]8Y,;KiZfnnRsDzPsvQ!%4C&..z,g,$m'&=

Ungolfed

~]:B;
[30 183 21 378 31 381 7 461 113 543 15 568]
2/{~B=<}%2base
7060456576664262556515119565486100005262700292623582181233639882 10base
=

açıklama

Ham problem 784 boyutlu uzayda bulunan noktaların sınıflandırılmasıdır. Standart bir yaklaşım boyut küçültmedir: sınıflandırmayı yapmak için yeterli ayırt edici güç sağlayan küçük bir boyut alt kümesinin belirlenmesi. Her boyut ve her olası eşiği, ümit verici görünen 18 çiftin (boyut, eşik aralığı) tanımlamak için değerlendirdim. Daha sonra her eşik aralığının merkezini seçtim ve 18 çiftin 6 elementli alt kümelerini değerlendirdim. Sonunda, en iyi 6-B projeksiyonun her boyutu için eşiği optimize ettim, doğruluğunu% 56.3'ten% 56.6'ya yükselttim.

Projeksiyon 6 boyutta olduğundan ve her boyut için basit bir eşik uyguladığım için son arama tablosunun sadece 64 elemente ihtiyacı var. Özellikle sıkıştırılabilir gibi görünmüyor, bu nedenle ana golf, hem arama tablolarını taban boyutuna dönüştürmek (boyut ve eşiklerin listesi; hem de yarım boşluk vektörünü rakam haritasına dönüştürmek) ve temel dönüşüm kodunu paylaşmak.


7
"784-boyutlu uzayda" beni kaybettin ;-)
Dijital Travma

Korkarım bir yerde bir yanlışlık var, sadece 37 doğru cevap alıyorum. Ayrıca, işleri biraz belirsiz hale getiriyorsunuz, lütfen (1) ve (2) (yaptığım gibi) veya başlıklarınıza benzer bir şey ekler misiniz?
aditsu

@ aditsu, basit mantık hatası. Şimdi düzeltildi.
Peter Taylor

Yani temelde, her biri farklı bir eşiğe sahip 6 adet "alakalı" piksel örnekliyorsunuz, 6 bit alıyorsunuz?
aditsu

Tam olarak @aditsu.
Peter Taylor

5

GolfScript 3x3 (v1: tahmini puan 207 * 0.8 ~ = 166)

~]28/10:?/{zip?/{[]*0-!!}/}%2{base}:^~'"yN(YZ5B 7k{&w,M`f>wMb>}F2A#.{E6T9kNP_s 3Q?V`;Z\'C-z*kA5M@?l=^3ASH/@*@HeI@A<^)YN_bDI^hgD>jI"OUWiGct%7/U($*;h*<"r@xdTz6x~,/M:gT|\\:#cII8[lBr<%0r&y4'{32-}%95^?^2/{))*~}%=

Veya genel olarak,

~]28/10:?/{zip?/{[]*0-!!}/}%2{base}:^~'MAGIC STRING'{32-}%95^?^2/{))*~}%=

açıklama

Benim yaklaşımım yüksek düzeyde:

  1. Pikselleri eşikleyin: eğer piksel yukarıda ise t1o zaman 1; aksi takdirde 0.
  2. Pikselleri gruplandırın. Başlangıçta 28x28 ızgarayı 4x4 ızgaraya böldüm (her alt ızgara 7x7 piksel); ancak 3x3 ızgaraya bölünmesi (10x10, 10x8 veya 8x8 piksel olan alt ızgaralar), arama tablası boyutunda büyük bir azalma sağlarken, doğruluk oranını% 56'dan% 40'a düşürür.
  3. Her gruptaki pikselleri toplayın ve tekrar eşiklendirin: ayarlanan piksel sayısı yukarıda ise t2o zaman grubu 1; Aksi gibi 0.
  4. Grup puanlarının vektörü ile bir tablo araması yapın. (Tablo sayı-uzunluk şifreleme ve standart baz dönüştürme bir numara kullanarak sıkıştırılır. En seçimler t1ve t2% 50 ve Tablo 63 ila% izin artış bitişik değerleri ile kombine edilebilir, bu değerler "önemli değil" çalışma uzunlukları; v1 tablomdaki ortalama çalışma uzunluğu 3.6'dır.

En t1=t2=0uygun olmasa da , ayarın doğruluk açısından t1ve en iyi değerlerden çok uzak olmadığı ortaya çıkıyor t2; tabla sıkıştırılabilirliği açısından oldukça iyidir; ve iki eşikleme işlemini bir araya getirmeme izin veriyor []*0-!!(2D dizisini 1D'ye düzleştir; 1d'yi kaldır 0; boş mu kontrol et).

Arama tablosu, verilen grup puanları vektörü için en muhtemel adayı verir. Tablonun geliştirilmiş sıkıştırılabilirliğinin azaltılmış hassasiyetten daha ağır basacağı şekilde değiştirilebilecek tablo girişlerini tanımlayarak skoru iyileştirmek mümkün olabilir.


Müthiş, benzer bir fikrim vardı ama çok iyi sıkıştırılabileceğini düşünmedim. Şimdi doğruluk üzerinde daha fazla durmaya ihtiyacım olduğunu düşünüyorum: p ama değiştirmeyi planlamıyorum.
aditsu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.