เติมลงในทะเลสาบ


19

เมื่อพิจารณาภูมิประเทศของที่ดินในรูปแบบภาพ ASCII ให้คิดว่าทะเลสาบจะไปที่ใดและเติมเต็มให้สมมติว่ามีฝนตกไม่ จำกัด

ตัวอย่าง

อินพุต

         #               
         ##              
      # ####             
#    #########           
##  ###########          
## #############   ####  
## ##############  ##### 
################# #######
#########################
#########################

เอาท์พุต

         #               
         ##              
      #@####             
#@@@@#########           
##@@###########          
##@#############@@@####  
##@##############@@##### 
#################@#######
#########################
#########################

อินพุตจะมีช่องว่างและ#เครื่องหมายเท่านั้น แต่ละบรรทัดจะมีความยาวเท่ากัน ผลลัพธ์ควรเป็น#รูปแบบที่เหมือนกันกับช่องว่างที่น้ำจะสะสมด้วย@เครื่องหมาย

แถวล่างสุดจะเป็นเครื่องหมาย # ทั้งหมด จะไม่มีรูหรือสิ่งที่แขวนอยู่ในแผ่นดิน รหัสที่สั้นที่สุดชนะ


ดูเหมือนง่ายนิดเดียว ฉันคิดว่าเราควรจะต้องแสดงจำนวนหน่วยทะเลสาบ@ที่กรอกด้วย
mellamokb

1
@mellamokb: นี่น่าจะเป็น([char[]]"$a"-eq'@').Countที่นี่ ไม่เพิ่มมากเกินไป เห็นด้วยกับเรื่องนี้เป็นเรื่องง่ายเกินไปเล็กน้อย ไม่ตกอยู่ในห้วงแห่งสิ่งที่ฉันทำลงไป
Joey

3
ที่เกี่ยวข้องในกองมากเกิน: รหัสกอล์ฟ: เล่นน้ำ ฉันคิดว่าหนึ่งใน LiraNuna ที่ดีกว่า
dmckee

1
ดังนั้นเราต้องจัดการกับถ้ำใต้ดินซึ่งอาจมีอากาศสูงกว่าระดับน้ำเช่นปริศนาน้ำไหล? นั่นทำให้สิ่งที่ท้าทายยิ่งขึ้นไปอีกเล็กน้อยและฉันคิดว่าควรเป็นตัวอย่างการใช้งานอย่างแน่นอน
mellamokb

@dmckee: นั่นไม่ง่ายอย่างที่คิด
Joey

คำตอบ:


8

sed -r, 27 24 (27 กับ-r)

24 (27):

:;s/(#|@) ( *#)/\1@\2/;t

27 (30):

:e;s/([#@]) ( *#)/\1@\2/;te

แข่งขันกับโซลูชั่น perl ที่ดีกว่า


#|@จะเป็นหนึ่งตัวอักษรที่สั้นลง
คุณ

2
คุณควรเพิ่ม 3 ลงในการนับสำหรับแฟล็ก -r คุณสามารถตัดสองออกจากการลบes และอีกจากคำแนะนำของ S.Mark เพื่อกลับไปที่ 27
Nabb

@Nabb ขอบคุณค้นพบสิ่งที่มีป้ายกำกับว่างเปล่า
asoundmove

ฉันลองมาก่อน แต่ล้มเหลว
Ming-Tang

@ Keith ขอบคุณสำหรับรางวัล
asoundmove

7

Perl, 25

s/# +#/$_=$&;y| |@|;$_/ge

ฉันเพิ่มจำนวนตัวละคร โปรดตรวจสอบว่ามันถูกต้องจริงหรือไม่เนื่องจากอาจต้องมีการแปลล่าม ( -pอาจ?)
Joey

ฉันไม่ทราบว่าภาษา Perl แต่ฉันสามารถรู้สึกถึงพลังของมัน :)
มด

ที่จริงแล้วมันต้องการ `-pe 'เพื่อใช้งานบนกล่องของฉันดังนั้นมันควรจะเป็น 4 ตัวอักษรเพิ่มเติม หรือจะeไม่นับและจะต้องเพิ่มอีก 3 ตัวอักษรเท่านั้น?
asoundmove

ไม่ต้องการ e เช่นที่ฉันพูดถึงที่อื่นด้วยเหตุผลเดียวกัน :)
Robert P

6

Perl (> = v5.9.5), 24 ตัวอักษร

ทำงานด้วยperl -p:

1while s/#.*\K (?=\S)/@/

นี้ต้องใช้ Perl 5.9.5 \Kหรือสูงกว่าที่จะใช้หลบหนีพิเศษ


1
ยกเว้นว่าถ้า Nabb ถูกต้องคุณจะต้องนับ `-p 'เป็น 3 ตัวอักษรนำจำนวนทั้งหมดของคุณไปที่ 27 และจริง ๆ แล้วต้องมีการ. I don't know the full rules about flags, so not sure the นับ -pe
asoundmove

ไม่จำเป็นต้องใช้ e จริงๆถ้าคุณกด Enter แล้วพิมพ์ลงไปในภายหลังหรือใส่รหัสในไฟล์แล้วเรียกใช้ ดังนั้น -e ไม่จำเป็นจริงๆ :)
Robert P


2

เรติน่า 10 ไบต์

จอประสาทตานั้นใหม่กว่าความท้าทายนี้มาก แต่วิธีนี้เรียบร้อยเกินไปที่จะไม่โพสต์:

T` `@`#.*#

ลองออนไลน์

นี่เป็นเพียงขั้นตอนการถอดเสียงซึ่งแทนที่ช่องว่างด้วย@แต่การดำเนินการถูก จำกัด ให้ตรงกับของ#.*#คือตัวละครที่ล้อมรอบด้วยที่ดินทั้งสองด้าน


1

Ruby 1.8, 30 ตัวอักษร

#!ruby -p
gsub(/# +#/){$&.tr" ","@"}

หากใครมีความคิดว่าทำไมสิ่งนี้ถึงใช้งานไม่ได้ใน Ruby 1.9 (ทดสอบด้วย 1.9.2p0 และ 1.9.2p204) ถึงแม้ว่าเอกสารจะบอกว่ามันควรใช้งานได้โปรดแจ้งให้เราทราบ!


นั่นคือแปลกจริงๆเพิ่มใน$_=$_.จุดเริ่มต้นของบรรทัดที่สองที่ทำให้มันทำงานใน 1.9.2 Kernel.gsubเพื่อให้มันเป็นสิ่งที่จะทำอย่างไรกับ Rubinius $_ยังล้มเหลวอย่างชัดเจนโดยไม่ต้องเพิ่ม
Nemo157

ตามบันทึก 1.9.1 NEWS เคอร์เนล # getc, #gsub, #sub จะเลิกใช้แล้ว
คุณ

1
ฉันคิดว่าคุณสามารถนับสิ่งนี้เป็น 30 (27 + 3 สำหรับการ-pตั้งค่าสถานะ) hash-bash และชื่อของล่ามจะไม่นับ
Caleb


1

05AB1E , 17 16 ไบต์

|εγć?D¨ð'@:sθJJ,

ลองออนไลน์

คำอธิบาย:

|            # Take all input-lines as list
 ε           # For each line:
  γ          #  Split the line into chunks of consecutive equal characters
             #   i.e. " ##   # " → [' ','##','   ','#',' ']
   ć         #  Split into head and the rest of the list
             #   i.e. [' ','##','   ','#',' '] → ['##','   ','#',' '] and ' '
    ?        #  Print this head
   D         #  Duplicate the rest of the list
    ¨        #  Remove the last element
             #   i.e. ['##','   ','#',' '] → ['##','   ','#']
     ð'@:    #  Replace every space with a "@"
             #   i.e. ['##','   ','#'] → ['##','@@@','#']
     sθ      #  Swap so the duplicated list is at the top, and take the last item as is
             #   i.e. ['##','   ','#',' '] → ' '
         JJ  #  Join the lists and individual items in the list together to a single string
             #   i.e. ['##','@@@','#'] and ' ' → "##@@@# "
           , #  Print with trailing new-line

0

Javascript, 107 ไบต์

var f=function(x){return x.replace(/# +#/g, function(x){return "#"+new Array(x.length-1).join("@")+"#";})};

Ungolfed:

var f = function(x) {
    return x.replace(/# +#/g, function(x){
        return "#" + new Array(x.length - 1).join("@") + "#";
    })
};

ฉันขอแนะนำให้คุณ (1) โพสต์คำตอบของคุณในรูปแบบปกติดังนั้นจึงง่ายต่อการอ่านและติดตามและ (2) ดูที่ ES6 ... มันสามารถช่วยคุณประหยัดอักขระจำนวนมากด้วยฟังก์ชั่นของคุณ
SirPython

ฉันจะโพสต์เวอร์ชันปกติ แต่ฉันไม่ใช่คนประเภท ES6
BobTheAwesome

@BobTheAwesome ทำไมคุณถึงแนะนำการแก้ไขนี้
ทิม

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

นอกจากสิ่งของ ES6: คุณไม่ต้องการช่องว่างหลังจากเครื่องหมายจุลภาคคุณไม่ต้องการช่องว่างหลังจากวินาทีreturnและคุณสามารถลบเครื่องหมายอัฒภาคสองตัวและมันสามารถเป็นfunction f(x)...หรือf=function(x)...
Zacharý



0

Pip 15 ไบต์

aR:`#.*#`_TRs'@

รับอินพุตเป็นสตริงหลายบรรทัดผ่านอาร์กิวเมนต์บรรทัดคำสั่ง: ลองออนไลน์! (อีกทางหนึ่งระบุการตั้ง-rnค่าสถานะและเปลี่ยนรายการแรกaเป็นgและคุณสามารถป้อนข้อมูลผ่าน stdin: ลองออนไลน์! )

แนวคิดเดียวกับคำตอบที่จอประสาทตา: แทนที่ทุกการแข่งขันของ regex #.*#ด้วยผลลัพธ์ของการทับศัพท์พื้นที่@ในการแข่งขัน Pip ไม่สามารถเทียบเคียงกับ Retina ได้สำหรับปัญหา regex ที่แท้จริง - แต่ไม่ใช่ทุกวันที่คุณสามารถผูกกับ Jelly ได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.