Farklı bir mektup bulun


10

Bunun gibi bulmacalar görmüş olabilirsiniz:

Şunu bulun 0:
OOOOOOOOOOOOOOOOOOOO0OOOOOOOOOOOOOOOOOO

Zor olan, bir görüntü verilen farklı harfin dizinini bulan bir program yazmaktır.

Giriş

Giriş bir olacaktır Image. Görüntü oluşacaktır bir satır arasında siyah metnin Helvetica 24 punto. yazı tipi beyaz zemin üzerinde. Metin iki karakterden oluşacaktır: bir tekrarlanan karakter ve sadece bir kez görünen bir karakter. Örneğin:

Örnek Giriş

Çıktı

Çıktı bir Integer, farklı karakterin indeksi olacaktır . Yukarıdaki örnekte, çıktı olacaktır 4. (Bir dizenin indekslerinin başlayacağını unutmayın 0)

Program Özellikleri

Kod golf için her zamanki gibi, en kısa program kazanır.


Test Durumları

 => 10
 => 11
 => 5
 => 16
 => 10
 => 21
 => 20
 => 13
 => 11
 => 4
 => 7


2
Bilgiçlik taslağı: gerçek dünyadaki örneğiniz aslında bir bulmaca değildir. Daha eğlenceli bir göz oyunu.
Zach Gates

Bu nasıl puanlanır?
intboolstring

Bu bir kod golf, bu yüzden her bir örnek cevap başarıyla çıktı en kısa program.
AMACB

2
Bazı diller için en kısa cevabın aslında sonuçları kodlaması zor olabilir ve giriş görüntüsünün boyutu gibi bir şeye dayanarak birini seçebileceğini unutmayın (ki buna izin verilmez).
user81655

1
@AMACB "hiçbiri örneklere dahil edilmese de", bunu değiştirmek iyi bir fikir olabilir;). Ayrıca ele almamız gereken minimum karakter sayısı nedir? (En az 3 sanırım, ya da bundan daha fazlasını varsayabilir miyiz?) Bu minimum için bir test vakası da olmalı.
Martin Ender

Yanıtlar:


6

Dyalog APL , 31 32 bayt

{1⍳⍨+⌿∘.≡⍨{⍵/⍨~∧⌿⍵}¨⍵⊂⍨2>/∧⌿1,⍵}

⎕IO←0 0'dan başlayarak (OP başına) ve birçok APL sisteminde varsayılan olan dizinleri almak için.

1,⍵her karakterin sol kenarındaki (
∧⌿beyazdan dikey-küçültme) her bir DOĞRU'dan başlayarak bloklara bölünmüş olarak boole ise, her sütun için boolean beyaz piksel sütunu (kenar boşluğu sağlamak için ) ekleyin . ... , her bir blok için , her sütun için boolean, tüm tam beyaz olmayan (dikey ve indirgeme) [Tüm beyaz] olmayan sütunlar tüm elemanlar için her öğe eşleşen her bloğa aynı blok sayısı (dikey artı azalma) birinci indeks (yani benzersiz öğe)
2>/
⍵⊂⍨
{
∧⌿⍵
⍵/⍨~
∘.≡⍨
+⌿
1⍳⍨

Görüntünün matristeki siyah (0) ve beyaz (1) piksel Iolduğunu ve karakterler arasında en az bir tamamen beyaz piksel sütunu olduğunu varsayar .

      f←{1⍳⍨+⌿∘.≡⍨{⍵/⍨~∧⌿⍵}¨⍵⊂⍨2>/∧⌿1,⍵}

"!BEN!!":

      ⊢I←6 12⍴(13/1),(22⍴0 1 1),(5/1),0,(8/1),(10⍴0 1 1),13/1
1 1 1 1 1 1 1 1 1 1 1 1
1 0 1 1 0 1 1 0 1 1 0 1
1 0 1 1 0 1 1 0 1 1 0 1
1 1 1 1 0 1 1 1 1 1 1 1
1 0 1 1 0 1 1 0 1 1 0 1
1 1 1 1 1 1 1 1 1 1 1 1
      f I
1

"Mmnmm":

      ⊢I←7 31⍴(94/1),0 0,(∊0 1⌽¨2/⊂12⍴6↑1 0 1 1),0 1,(62⍴1 1 1,(⊢,⌽)(14⍴0 1)),33/1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 1
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1     
      f I
2

Tamamen kaldırmak olamaz {⍵/⍨~∧⌿⍵}¨ve sadece kalır {1⍳⍨+⌿∘.≡⍨⍵⊂⍨2>/∧⌿1,⍵}?
lstefano

@lstefano O zaman değişen miktarda beyaz boşluk olsaydı çalışmayı durdururdu.
Adám

Ne demek istediğini anlıyorum.
lstefano

3

Mathematica, 125 bayt

StringCases[#,x:Except[StringCases[#~StringTake~3,x_~~___~~x_:>x][[1]]]:>Position[Characters@#,x]][[1,1,1]]-1&@*TextRecognize

Ahh, Mathemeatica yerleşti. Çok şaşırtıcı. (Ve çok uzun ...) Patlıyor | /! : /; , /. / / ve m / n'de farklı şekilde patlar.


Bu kaç girdi için çalışır? Kopyam, örneğin ilk örnekteki hiçbir metni (borular ve ünlem işareti) tanımayacak. Eşit performansım olan bir şeyi Length[Split[Characters@TextRecognize@#][[1]]] &
A Simmons

Ayy, Split'i unuttum .... Ve Mathematica'nın yerleşik metin tanıyıcısına güveniyor ... Ve asla güvenemezsin.
CalculatorFeline

O zaman benimkini ayrı bir çözüm olarak ilan edeceğim.
Simmons

3

Mathematica, 46 bayt

Length@First@Split@Characters@TextRecognize@#& 

Aynı TextRecognizeişlevi kullanan diğer matematiksel çözümlerle aynı hatalar .


Bytesave:Length@First@Split@Characters@TextRecognize@#&
CalculatorFeline

@CatsAreFluffy Şerefe
A Simmons

Çok kötü @*, tasarruf etmeyecek kadar uzun .
CalculatorFeline
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.