สร้างผู้ชายแห่งวัฒนธรรม


24

ความท้าทายนี้เป็นแรงบันดาลใจมส์ผู้ชายวัฒนธรรม

meme เกี่ยวข้องกับการลบส่วนของคำบรรยายต้นฉบับ

ฉันเห็นว่าคุณเป็นคนมีวัฒนธรรมด้วย

เพื่อให้มันดูราวกับว่าตัวละครกำลังพูดอย่างอื่น

ความท้าทายของคุณคือการเขียนโปรแกรมที่ให้อินพุตแสดงให้เห็นว่าประโยคต้นฉบับสามารถถูกทำให้ว่างเปล่าเพื่อให้เกิดสตริงอินพุตได้อย่างไร

กฎ:

  • ใช้-ตัวละครเพื่อแทนตัวอักษรที่ถูกทำให้ว่าง
  • คุณต้องไม่เพิ่มตัวอักษรเพิ่มเติมเพื่อให้ได้สายป้อน
  • คุณอาจทำการเปรียบเทียบสตริงเป็นตัวพิมพ์เล็กและตัวพิมพ์ใหญ่
  • คุณอาจไม่สนใจช่องว่างในการเปรียบเทียบสตริง
  • หากไม่สามารถทำการทดแทนได้ให้ส่งออกค่าเท็จ
  • คุณสามารถทดแทนช่องว่างที่ซ้ำซ้อนด้วย a ได้-เช่นกันแม้ว่าจะไม่จำเป็นก็ตาม
  • หากเป็นไปได้หลายวิธีคุณสามารถส่งออกได้

กรณีทดสอบ:

ขั้นพื้นฐาน:

ตัวอย่าง Meme 1

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

ตัวอย่าง Meme 2

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

กรณีขอบ 1:

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

กรณีขอบ 2 (แก้ไข):

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

กลาง:

ตัวอย่าง Meme 3

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

ตัวอย่าง Meme 4

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

ตัวอย่าง Meme 5

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

Harder:

ตัวอย่าง Meme 6

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

ตัวอย่าง Meme 7

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

TL; DR: กำหนดสตริงอินพุตเอาต์พุตสตริงซึ่งแสดงถึงวิธีที่สตริงต้นฉบับควรถูกปรับเปลี่ยนเพื่อให้พอดีกับสตริงอินพุตโดยใช้ "-" เพื่อแทนอักขระ blanked out หากการทดแทนไม่สามารถทำได้ให้ส่งออกค่าเท็จ

รหัสกอล์ฟรหัสที่สั้นที่สุดเป็นไบต์จึงชนะ

แก้ไข: ชี้แจง

  • ละเว้นช่องว่างในการเปรียบเทียบสตริงหมายความว่าคุณสามารถตัดช่องว่างออกก่อนที่จะเปรียบเทียบสตริง ตัวอย่างเช่นอินพุตAh, a manualและAh , a manualได้รับการปฏิบัติเหมือนกัน เครื่องหมายวรรคตอนอื่น ๆ, ' .จะต้องเก็บรักษาไว้ ในทำนองเดียวกันสำหรับการส่งออกมีค่าเท่ากับAh, a manualAh, amanual

  • แทนที่ช่องว่างที่ซ้ำซ้อนหมายถึงช่องว่างที่มีอยู่ในคำบรรยายภาพเดิม คุณไม่จำเป็นต้องแทนที่พวกเขาด้วย "-" แต่หากแทนที่มุ้งคุณจะได้คะแนนมากขึ้นแล้วไปข้างหน้า


เอาต์พุต "Orwell" ของคุณดูเหมือนผิด: คุณได้เปลี่ยน 'f' เป็น 'r' ในอันแรก
Draconis

2
ผลผลิตใดควร"Ah,<5 SPACES HERE>a manual."ให้ผลผลิต
Lynn

3
หากการทดแทนไม่สามารถทำได้ให้ส่งออกค่าเท็จ ก็ไม่จำเป็นต้องมีการตรวจสอบอินพุต
Erik the Outgolfer

2
คุณอาจทำการเปรียบเทียบสตริงตามตัวพิมพ์เล็กและตัวพิมพ์ใหญ่นั่นหมายความว่าเราต้องปฏิบัติต่ออินพุตเป็นตัวพิมพ์เล็กหรือตัวพิมพ์ใหญ่หรือว่าเราสามารถป้อนข้อมูลในกรณีใดก็ตามที่เราต้องการ นอกจากนี้โดยคุณอาจเพิกเฉยช่องว่างในการเปรียบเทียบสตริงคุณหมายถึงเราต้องละเว้นช่องว่าง และ "ช่องว่างที่ซ้ำซ้อน" คืออะไร?
Erik the Outgolfer

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

เรติน่า 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

Python 2 , 126 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

ลองออนไลน์!


Python 2 , 108 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<' ')(ใช้แท็บอักขระที่พิมพ์ได้ต่ำที่สุด)?
Jonathan Frech

@ JonathanFrech เป็นไปได้ แต่มันทั้ง 7 ไบต์
ovs

คุณมีจุดที่ ...
Jonathan 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):'-')

ลองออนไลน์!

ลดลงยิ่งขึ้นแทนที่ whitespaces ที่อยู่หลังสตริงที่กำหนดด้วย '-' เท่านั้น

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-Flak , 764 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 การส่งของฉันเองสามารถ (ด้วยการแก้ไขสองสาม) รับข้อความลงไป 506 bytes
Jo King

ด้วยการปรับปรุงอื่น ๆ สองสามอย่างฉันได้รับผลรวมทั้งหมดลงไป 604 ไบต์
Jo King



@ โจกิ้งคุณเก่งมากในการพัฒนา Brain-Flak ของฉันดูเหมือนว่า
Kamil Drakari

2

Haskell , 182 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

ลองออนไลน์!

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 ไบต์

[]+[]+[].
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.

ลองออนไลน์!

ตรงตามตัวพิมพ์ใหญ่ - เล็กและช่องว่าง เพรดิเคต-/2เป็นเพรดิเคตหลักที่มีอาร์กิวเมนต์แรกเป็นสตริงอินพุตและอาร์กิวเมนต์ที่สองเป็นสตริงเอาต์พุต



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.