Kültür Adamlarını Yarat


24

Bu zorluk Meme Kültür Adamları'ndan esinlenmiştir .

Meme, orijinal başlığın bölümlerini boşaltmayı içerir.

Ah, görüyorum ki sen de bir kültür adamı.

karakter başka bir şey söylüyormuş gibi görünmesini sağlamak için.

Buradaki zorluk, bir giriş verildiğinde , giriş dizesini elde etmek için asıl cümlenin nasıl boşaltılabileceğini gösteren bir program yazmaktır .

Kurallar:

  • -Boşluk karakterini temsil etmek için bir karakter kullanın .
  • Giriş dizesini elde etmek için ek harfler eklememelisiniz
  • Dize karşılaştırmalarını büyük / küçük harf duyarlı olarak kabul edebilirsiniz.
  • Dize karşılaştırmalarında boşlukları yok sayabilirsiniz.
  • Eğer oyuncu değişikliği mümkün değilse, sahte bir değer verin.
  • Gereksiz -olmasına rağmen fazlalık boşlukların yerine bir de kullanabilirsiniz.
  • Birden fazla çözümün mümkün olduğu yerlerde, bunlardan herhangi birini çıkarabilirsiniz.

Test durumları:

Temel:

Örnek Meme 1

Ah, I see you're a well.
> Ah, I see you're a --- -- ------- -- well.

Örnek Meme 2

Ah, I see well.
> Ah, I see ------ - --- -- ------- -- well.

Kenar durumda 1:

What did you just say about me, you little
> false

Kenar durumu 2 (düzenlenmiş):

*no input*
> --- - --- ------ - --- -- ------- -- -----

Orta düzey:

Örnek Meme 3

Ah, I see you're Orwell.
> Ah, I see you're - --- o- -----r- -- well.

Örnek Meme 4

Ah, ymca.
> Ah, - --- y----- - m-- -- c------ a- ----.

Örnek Meme 5

Ah, a manual.
> Ah, - --- ------ a man -- -u----- a- --l-.
OR: > Ah, - --- ------ a man -- -u----- a- ---l.

Daha güçlü:

Örnek Meme 6

tea.
> --- - --- ------ - --- -- ---t--e a- ----.

Örnek Meme 7

eeeee
> --- - -ee -----e - --- -- ------e -- -e---

TL; DR: Bir giriş dizesi verildiğinde, boşluk karakterini temsil etmek için bir "-" kullanarak, giriş dizgesine uyması için orijinal dizenin nasıl değiştirilmesi gerektiğini gösteren bir dizge verin. Bir oyuncu değişikliği mümkün değilse, sahte bir değer verin.

Kod golf, bayt cinsinden en kısa kod kazanır.

Düzenleme: Açıklamalar

  • Dize karşılaştırmalarındaki boşlukları yoksay, dizeleri karşılaştırmadan önce boşlukları kesebileceğiniz anlamına gelir. Örneğin, girdiler Ah, a manualve Ah , a manualeşit olarak kabul edilir. Diğer noktalama işaretleri , ' .korunmalıdır. Benzer şekilde çıktı Ah, a manualiçin eşittir Ah, amanual.

  • boşluk yerine yedek orijinal başlık boşluk karşılık gelir. Bunları "-" ile değiştirmeniz gerekmez, ancak ağları değiştirmek size daha fazla puan kazandırırsa devam edin.


"Orwell" çıktınız yanlış görünüyor: 'f' harfini birincisinde 'r' olarak değiştirdiniz.
Draconis

2
Hangi çıktı verilmelidir "Ah,<5 SPACES HERE>a manual."?
Lynn,

3
Bir oyuncu değişikliği mümkün değilse, sahte bir değer verin. Eh, giriş doğrulama gerektiren son derece tavsiye edilir.
Outgolfer Erik,

2
Dize karşılaştırmalarını büyük / küçük harf duyarlı olarak kabul edebilirsiniz , bu, girişi büyük / küçük harf duyarlı olarak değerlendirmemiz gerektiği veya istediğimiz durumda girdi alabileceğimiz anlamına mı gelir? Ayrıca, dize karşılaştırmalarındaki boşlukları yok sayabilirsiniz, yani boşlukları yok saymamız gerektiğini mi kastediyorsunuz? Ve "gereksiz boşluk" nedir?
Outgolfer Erik,

1
Bence "giriş doğrulama" diyebilirsin, burada mantıklı geliyor @EriktheOutgolfer
Conor O'Brien,

Yanıtlar:


6

> <> , 94 bayt

"vAh, I see you're a Man of Culture as well.
0/i~ <r
!\:?!^:}=0={:@*:@"-"$?$~}$:@?
<>~i+0)?;>o

Çevrimiçi deneyin!

Büyük / küçük harfe duyarlı, boşluk veya noktalama işaretini yok saymaz ve giriş geçersizse boş bir dize çıkar. Diğer dizeleri denemek istiyorsanız, sadece "vbir "veya null bayt içermediği sürece , ilk satırdan sonra değiştirebilirsiniz .


5

Retina 0.8.2 , 117 bayt

^.
¶Ah, I see you're a Man of Culture as well.¶$&
{+i`¶(\W|(\w))(.*¶)(?(2)\W*\2)
$1¶$3
}1`¶\w
-¶
.*¶.*¶.*\w.*|¶.*¶.*

Çevrimiçi deneyin! Büyük / küçük harfe duyarlılık gerektiren 1 bayt tasarruf edilebilir. --, - --- ---'-- - --- -- ------- -- ----.Boş girişi geri getirerek 3 bayt tasarruf edilebilir . Açıklama:

^.
¶Ah, I see you're a Man of Culture as well.¶$&

İstediğiniz metni girişe bağlayın.

{+i`¶(\W|(\w))(.*¶)(?(2)\W*\2)
$1¶$3

İstediğiniz metinden mümkün olduğunca çok sayıda karakterin sonucunu taşıyın. Karakter bir harf ise, girilen bir sonraki harfle eşleşmesi gerekir; bu daha sonra silinir.

}1`¶\w
-¶

Girişte eşleşen bir harf yoksa, onu a olarak değiştirin -ve tekrar deneyin.

.*¶.*¶.*\w.*|¶.*¶.*

Girişte hala harfler kaldıysa, her şeyi silin, aksi halde girişin kalanını silin.


5

Jöle , 58 55 48 45 bayt

“¬²Ẉ,ȷCIbƝɼeỴƤ/ɓIŒ;ṫṚS⁶_ŀỤ ṂB⁾÷ƈ»Ḣ”-1ị⁼ɗ?@€xṆ

Çevrimiçi deneyin!


Daha okunabilir sürüm:

“Ah, I see you're a man of culture as well.”Ḣ”-1ị⁼ɗ?@€xṆ

Dize sıkıştırma dağılımı:

Ah, I{short: see}{short: you}'re a{short: man} of{long: culture} as{short: we}ll.

3

Python 2 , 126 114 bayt

i=input()
r=''
for c in"Ah, I see you're a man of culture as well.":x=c==i[:1];r+=c*x or'-';i=i[x:]
print(i=='')*r

Çevrimiçi deneyin!


Python 2 , 108 106 bayt

Giriş bir karakter listesidir.

lambda i:''.join(c==`i`[2:3]and i.pop(0)or'-'for c in"Ah, I see you're a man of culture as well.")*(i==[])

Çevrimiçi deneyin!


Could (i=='')olamaz (i<' ')(bir sekmeyi, en düşük yazdırılabilir karakter kullanarak)?
Jonathan Frech

@JonathanFrech bu mümkün, ancak her ikisi de 7 bayt
ovs

Şey, orada bir noktaya değindin ...
Jonathan Frech

2

JavaScript (Node.js) , 122 120 bayt

x=>"Ah, I see you're a Man of Culture as well.".replace(/./g,c=>c>' '?/^(.)\1/i.test(c+x)?(x=x.slice(1).trim``,c):'-':c)

Çevrimiçi deneyin!

Açıklama:

x =>                 // It takes in 'x' as parameter for function a string
    "Ah, I see you're a Man of Culture as well.". // What the actual is 
            .replace(                             // Now we are gonna replace 
                    /./g,     // selects everything 
                    c =>      // lambda function with param c
                        c > ' ' ?                 
                        /^(.)\1/i.test(           // does it all
                            c + x ) ?            // checks if there is a match
                            (x=x.slice(1). // returns everything from 1 to end in an array
                                trim`` ,   // removes whitespaces
                            c : '-' : c)   // and done

Daha da azaltılabilir ancak boşlukları '-' ile değiştirir. Eğer bu kabul edilebilirse

JavaScript (Node.js) , 112 bayt

x=>"Ah, I see you're a Man of Culture as well.".replace(/./g,c=>/^(.)\1/i.test(c+x)?(x=x.slice(1).trim``,c):'-')

Çevrimiçi deneyin!

Daha da küçültüldüğünde, yalnızca verilen dizgeden sonra gelen boşlukları '-' ile değiştirir.

JavaScript (Node.js) , 105 bayt

x=>"Ah, I see you're a Man of Culture as well.".replace(/./g,c=>/^(.)\1/i.test(c+x)?(x=x.slice(1),c):'-')

Çevrimiçi deneyin!


1
Geçmek yokWhat did you just say about me, you little
l4m2

What did you just say about me, you littleTest senaryosu kodunuz için doğru çıktı alamıyorum . Programınız --- - --- ------ - --- -- ------- -- w----, meydan okuma özelliğinin gerektirdiği gibi bir çıktı üretmiyor.
0


2

Brain-Flak , 764 600 bayt

(((<>)))([]((((((([][][]()){}[]){})[][]){}))[[]()])[][]())([[]](([][](([][]){})[]){}())[[]])(([()()][]([[]]([()]([[]](((([()][][][])[]){}[]())[])[]))()()()))[[]])((([[][][]]((([](([()()()][]){})){})(()()()()){}())[[]])[]){})((((()((([][]){}())((()()()){}){})[[][][]]))){}{}())((()(((([]()()()())())){}{}()())[[][]]){}[])(([(()()()){}](((((()()()()){}[]))){}{}))((()()){}()){})(([()][][]([()()()][])))(((([][][]())[([]()()){}()])[]())[[]])([[]]((([]()())(()()()()){}){})()()()){([{}]<>({})){(<{}(((((()()()()())){}{})){}{})>)}{}(<({}<(<()>)<>{({}<>)<>}>{})>)<>{({}<>)<>}{}<>}{}<>{{{}}<>}<>{({}<>)<>}<>

Çevrimiçi deneyin!

Jo King sayesinde özellikle sicim konstrüksiyonunda büyük gelişmeler ve aynı zamanda ana gövdede birkaç mantık ayarlaması sayesinde. Ondan açıklama

It adlı küçük harfe duyarlı (şimdiye "Ah, sen Orwell bkz." Eşleşmesi değil, "Ah, sana ediyoruz Orwell bkz." Etmez), girişteki boşluk olduğu değil ihmal ve orijinal dizede eşsiz boşluk olduğunu dönüştürüldü -. Anladığım kadarıyla, bunların hepsi geçerli seçeneklerdir.

Açıklama:

(476 bytes of much improved stack manipulation) #Push string

{ #While string
  ([{}]<>({})) #Check whether the top characters are equal
  {(<{}(((((()()()()())){}{})){}{})>)}{}  #If characters are not equal, push - on top of input
  (<({}<(<()>)<>{({}<>)<>}>{})>)<>{({}<>)<>}{}<>  #Take top of input (either - or matched char) and add to output
}{}
<>{{{}}<>} #Pop both stacks if input is left over
<>{({}<>)<>}<> #Reverse output

Biliyorsunuz, Brain-Flak için keyfi test üretmeyi otomatikleştirmeye yardımcı olacak bir soru vardı . Kendi gönderim (birkaç değişiklikle), metni 506 bayta kadar
Jo King

Diğer birkaç iyileştirme ile toplamı 604 bayta
Jo King



@JoKing Brain-Flak'ımı geliştirmede çok iyisin, öyle görünüyor
Kamil Drakari

2

Haskell , 182 174 172 171 170 169 bayt

import Data.Char
t=toLower
a!b=(b:)<$>a
""%l=Just$'-'<$l
l@(a:b)%(c:d)|t a==t c=b%d!c|1>0=l%d!'-'
_%_=mempty
(%"Ah, I see you're a man of culture as well.").concat.words

Çevrimiçi deneyin!

Ungolfed:

import Data.Char

template = "Ah, I see you're a man of culture as well."

-- strip spaces
preprocess :: String -> String
preprocess = filter (/=' ')

-- case-insensitive character comparison
a#b = (toLower a) == (toLower b)

strike' :: String -> String -> Maybe String
strike' "" "" = Just ""  -- base case
strike' _ "" = Nothing   -- chars are exhausted, impossible to convert
strike' "" rem = Just $ '-' <$ rem  -- full match, strike rest of chars
strike' cur@(x:xs) (r:rs)
    | x # r     =   (r:) <$> strike' xs rs  -- character matches; pop a char
    | otherwise = ('-':) <$> strike' cur rs -- no match; strike char, don't pop

strike :: String -> Maybe String
strike xs = strike' (preprocess xs) template

1

Prolog (SWI) , 109 bayt

[]+[]+[].
I+[B|X]+[C|O]:-(I=[B|J],B=C;I=J,C=45),J+X+O.
I-O:-I+`Ah, I see you're a man of culture as well.`+O.

Çevrimiçi deneyin!

Büyük / küçük harfe duyarlı ve boşlukla hassas. -/2Yüklem ilk bağımsız değişken giriş dizesi ve çıkış dizge olan ikinci bağımsız olarak ana yüklem.


0

JavaScript (Node.js), 103 bayt

s=>!s[i=0,r="Ah, I see you're a man of culture as well.".replace(/./g,c=>c==s[i]&&++i||c-1?c:'-'),i]&&r

Çevrimiçi deneyin!

Harfe duyarlı.


0

Pyth , 78 bayt SBCS

V." y°äz µÿéiSs¾ýØC[ócõ!ó5§n"=b.x@zZkIqbN=+kN=hZ.?=+k\-))I<Zlz!z.?k

Test paketi
Kodda bulunan yazdırılamayan karakterler, doğru sürüm için bağlantıya bakın.
Büyük küçük harfe duyarlı, boşluk bırakmaz.


0

Perl 5 -F , 192 bayt

@q="Ah, I see you're a man of culture as well."=~/./g;while($x=shift@F){$x=~/\w/||next;while($_=shift@q){push@r,/\W/?$_:/\Q$x/i?$_:'-';$r[-1]=~/\w/i&&last}@q||last}say!$x&&@r,map/\w/?'-':$_,@q

Çevrimiçi deneyin!

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.