Noktaları birleştir


13

oNoktaları temsil eden bir dizi s verildiğinde , bunları dikey veya yatay olarak bağlayın

Örnekler

Giriş:

o   o

o

Çıktı:

o---o
|
|
o

Giriş:

o   o    o

    o

Çıktı:

o---o----o
    |
    o

spec

  • Boşluklarla doldurulmuş girdinin bir dikdörtgen oluşturmasını istiyorsanız, lütfen cevabınızda bunu belirtin

  • oGirdide yalnızca boşluklar ve yeni satırlar olacak

  • Bağlanmak için her zaman bir çift nokta olacak
  • Hiçbir iki os doğrudan bitişik olmayacak
  • Noktalar ile bağlanmalıdır |ve -sırasıyla dikey ve yatay bağlantı,
  • Hiçbir nokta bağlantısı çakışmayacak

Her yasal çifti veya noktaları 1 bileşene bağlamak zorunda mısınız? Noktalar her zaman 1 bileşene bağlanabilir mi? Eğer doğru anlarsam , “ her zaman bağlanmak için en az iki nokta olacak” daha anlamlı olur. Birkaç test vakası da bunları temizleyebilir.
randomra

@randomra Her yasal çifti bağlamak zorunda değilsiniz, her zaman 1 bileşen olmayacaklar
Downgoat

@Downgoat Tek bir bileşen içindeki bağlantısız bileşenleri ve döngüleri kapsayan bazı test durumlarına ne dersiniz? ;)
Martin Ender

Yanıtlar:


2

Japt, 33 29 bayt

Uy eV="o +o"_rS'|} y eV,_rS'-

Çevrimiçi test edin!

Nasıl çalışır

Uy         // Transpose rows with columns in the input.
eV="o +o"  // Set V to the regex-string "o +o", and recursively replace each match Z with:
_rS'|}     //  Z with spaces replaced with "|"s.
y          // Transpose again.
eV,        // Recursively replace matches Z of V with:
_rS'-      //  Z with spaces replaced with "-"s.

2

Yakut, 137 133 bayt

->s{eval"s.split($/).map(&:chars)#{".map{|x|x.join.gsub(/o +(?=o)/){|x|x.tr' ',?|}.chars}.transpose"*2}.map(&:join)*$/".sub'?|','?-'}

Bu kesinlikle korkunç. Hala golf oynamaya çalışıyor.

Yastıklı bir dikdörtgen olarak girin, lütfen.

"Okunabilirlik" için yeni satır:

eval"s.split($/).map(&:chars)#{".map{|x|x.join.gsub(/o +(?=o)/){|x|x.tr' ',?|}
.chars}.transpose"*2}.map(&:join)*$/".sub'?|','?-'

4
Tamam, yastıklı bir dikdörtgen olarak gireceğim, ama sadece çok iyi sorduğun için.
Alex A.

\bBunun yerine kullanabilir misin (?=o)?
Justin

@Justin Çalışmıyor gibi görünüyor. : /
Kapı tokmağı

2

Retina , 80 bayt

T` `-`o.+o
Tm` `|`(?<=(?(1)!)^(?<-1>.)*o\D*¶(.)*) (?=(.)*¶\D*o(?<-2>.)*$(?(2)!))

Girişin doldurulması gerekir.

Çevrimiçi deneyin!

açıklama

İlk aşama oldukça basit, tüm boşlukları oaynı satırda iki s arasında bulunan kısa çizgilere dönüştürüyor .

İkinci aşama |s'yi kapsar . Bu biraz daha karmaşıktır ve dengeleme grupları gerektirir . Bakış

(?<=(?(1)!)^(?<-1>.)*o\D*¶(.)*)

oaynı sütunda daha önce olup olmadığını kontrol eder . Gözlerin sağdan sola okunması gerektiğini unutmayın. (.)*eşleşmenin yatay konumunu \D*¶kaydeder, önceki satırlardaki herhangi bir karaktere atlamayı denetler, otam anlamıyla eşleşir. Ardından (?(1)!)^(?<-1>.)*bunun yatay konumunun oaynı olmasını sağlar .

İleri

(?=(.)*¶\D*o(?<-2>.)*$(?(2)!))

Tam tersi aynı şeyi yapar.

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.