文化の男性を生成する


24

この挑戦は文化のミームメンに触発されます。

ミームには、元のキャプションの一部を空白にすること、

ああ、私もあなたは文化の人だと思います。

キャラクターが他のことを言っているように見せるため。

あなたの挑戦は、入力を与えられて、入力文字列を達成するために元の文を空白にする方法を示すプログラムを書くことです。

ルール:

  • -文字を使用して、空白文字を表します。
  • 入力文字列を実現するために追加の文字を追加しないでください
  • 文字列比較は大文字と小文字を区別しないものとして扱うことができます
  • 文字列の比較では空白を無視できます
  • 置換が不可能な場合は、偽の値を出力します。
  • -必須ではありませんが、冗長な空白も同様に使用できます。
  • 複数のソリューションが可能な場合、それらのいずれかを出力できます。

テストケース:

基本:

ミーム例1

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

ミーム例2

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

エッジケース1:

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

エッジケース2(編集済み):

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

中級:

ミーム例3

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

ミーム例4

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

ミーム例5

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

もっと強く:

ミーム例6

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

ミーム例7

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

TL; DR:入力文字列を指定し、「-」を使用して空白文字を表すことにより、元の文字列を入力文字列に合わせて変更する方法を表す文字列を出力します。置換が不可能な場合、偽の値を出力します。

ゴルフをコーディングするので、バイト単位の最短コードが勝ちます。

編集:明確化

  • 文字列比較の空白を無視すると、文字列を比較する前に空白を削除できます。たとえば、入力Ah, a manualAh , a manualは等しいものとして扱われます。その他の句読点, ' .は保存する必要があります。出力についてAh, a manualも同様に、はに等しくなりAh, amanualます。

  • 代替冗長ホワイトスペースは、元のキャプションに存在するスペースを指します。それらを「-」で置き換える必要はありませんが、ネットを置き換える場合はさらにポイントを増やしてください。


「Orwell」の出力が間違っているようです。最初の「f」を「r」に変更しました。
ドラコニス

2
どのような出力が"Ah,<5 SPACES HERE>a manual."得られますか?
リン

3
置換が不可能な場合、偽の値を出力します。さて、入力検証を要求することは非常に推奨されません。
エリックアウトゴルファー

2
文字列比較を大文字と小文字を区別しないものとして扱うことができます。つまり、入力を大文字と小文字を区別しないものとして扱わなければならない、または必要な場合に入力を受け取ることができます。また、文字列比較の空白を無視てもよいので、スペースを無視する必要があるということですか?そして、「冗長な空白」とは何ですか?
エリックアウトゴルファー

1
「入力検証」と呼ぶことができれば、ここで意味があると思います@EriktheOutgolfer
Conor O'Brien

回答:


6

> <>、94バイト

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

オンラインでお試しください!

大文字と小文字を区別し、空白や句読点を無視せず、入力が無効な場合は空の文字列を出力します。他の文字列を試してみたい場合"vは、"またはバイトが含まれていない限り、の後の最初の行を変更するだけです。


5

Retina 0.8.2、117バイト

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

オンラインでお試しください!大文字と小文字を区別することで1バイトを節約できます。--, - --- ---'-- - --- -- ------- -- ----.空の入力を返すことで3バイトを節約できました。説明:

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

目的のテキストを入力に追加します。

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

必要なテキストからできるだけ多くの文字を結果に移動します。文字が文字の場合は、入力内の次の文字と一致する必要もあり、その文字は削除されます。

}1`¶\w
-¶

入力に一致する文字がない場合は、aに変更して-再試行してください。

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

入力にまだ文字が残っている場合はすべてを削除し、そうでない場合は入力の残りを削除します。


5

ゼリー58 55 48 45バイト

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

オンラインでお試しください!


より読みやすいバージョン:

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

文字列圧縮の内訳:

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

3

パイソン2126の 114バイト

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

オンラインでお試しください!


パイソン2108の 106バイト

入力は文字のリストです。

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==[])

オンラインでお試しください!


(タブを使用して、印刷可能な最も低い文字を)でき(i=='')ませんでした(i<' ')か?
ジョナサンフレッチ

@JonathanFrechこれは可能であるが、それは、両方の7バイトである
OVS

さて、あなたは...そこにポイントを持っている
ジョナサンFRECH

2

JavaScript(Node.js)122 120バイト

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)

オンラインでお試しください!

説明 :

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

さらに減らすことができますが、空白も「-」に置き換えます。これが受け入れられる場合

JavaScript(Node.js)、112バイト

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):'-')

オンラインでお試しください!

さらに縮小すると、指定された文字列の後の空白のみが「-」に置き換えられます。

JavaScript(Node.js)、105バイト

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):'-')

オンラインでお試しください!


1
合格しないWhat did you just say about me, you little
-l4m2

What did you just say about me, you littleテストケースのコードの正しい出力が得られません。プログラムは--- - --- ------ - --- -- ------- -- w----、チャレンジ仕様が要求するものではない出力として生成します。
0

2

JavaScript(Node.js)、135バイト

x=>!!x&&(t="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),!x&&t)

オンラインでお試しください!

「可能」が「する」または「しない」のどちらでもよいことを意味する場合、

JavaScript(Node.js)、106バイト

x=>x&&(t="Ah, I see you're a Man of Culture as well.".replace(/./g,c=>c==x[0]?(x=x.slice(1),c):'-'),!x&&t)

オンラインでお試しください!


2

Brain-Flak764 600バイト

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

オンラインでお試しください!

Jo Kingのおかげで、特に文字列の構築が大幅に改善されましたが、本体のいくつかの論理的な調整も行われました。彼からの説明

大文字と小文字が区別されるため(「ああ、私はあなたがオーウェルだ」と一致しませんが、「ああ、あなたはオーウェルです」と一致します)、入力の空白無視され、元の文字列の一致しない空白はに変換-ます。私の理解では、これらはすべて有効なオプションです。

説明:

(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

ご存知のとおり、Brain-Flakの任意のテストの生成を自動化するのに役立つ質問が以前にありました。私自身の提出は(2、3の修正を加えて)506バイト
ジョーキング

その他のいくつかの改善により、合計で604バイトになりました
ジョーキング



それはそう私の脳高射砲を向上させることをあなたにしている非常に良いを@JoKing
カミルDrakari

2

Haskell182 174 172 171 170 169バイト

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

オンラインでお試しください!

ゴルフをしていない:

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



0

Pyth、78バイトSBCS

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

テストスイート
コードに存在する印刷できない文字。正しいバージョンについてはリンクを参照してください。
大文字と小文字が区別され、空白は無視されません。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.