จิมมี่แขวนเชือกได้หรือไม่


18

อีกความท้าทายของจิมมี่โดยพ่อดั้งเดิมของเขา เห็นเหล่านี้อื่น ๆ ที่น่ารัก ความท้าทาย


อย่างที่คุณรู้เมื่อเร็ว ๆ นี้เราได้เห็นความท้าทายที่เกี่ยวข้องกับจิมมี่บนแพลตฟอร์ม ตอนนี้จิมมี่เป็นนักกายกรรมที่ฉันพูดถึงมาก่อนและเขามีเคล็ดลับอื่น ๆ

หนึ่งในเทคนิคเหล่านี้แขวนด้วยเชือก นี่คือตัวอย่างของเชือกที่ Jimmy สามารถแขวนได้จาก:

            ||
            ||
            ||
            ||
            ||
            ||

เมื่อจิมมี่แขวนเชือกดูเหมือนว่า:

            ||
            ||
           /o\
            ||
            ||
            ||

เขาสามารถแขวนทางด้านซ้ายหรือด้านขวาของเชือกได้ดังนั้นสิ่งนี้:

            ||
            ||
            ||
            /o\
            ||
            ||

ถูกต้องเช่นกัน แต่เขาไม่สามารถแขวนโดยส่วนใดส่วนหนึ่งได้ดังนั้นอะไรเช่นนี้:

            ||
            ||
            ||
          /o\|
            ||
            ||

ไม่ถูกต้อง โปรดสังเกตว่าเมื่อเขาถูกแขวนโดยส่วนหนึ่งของร่างกายเชือกอีกครึ่งหนึ่งจะปรากฏให้เห็นเพราะจิมมี่ไม่ได้ซ่อนไว้

นอกจากนี้จิมมี่ไม่ชอบห้อยอยู่ที่ก้นเชือก - มันทำให้เขากลัว - ดังนั้นสิ่งนี้:

            ||
            ||
            ||
            ||
            ||
            /o\

ไม่ถูกต้อง

ความท้าทาย

รับสถานการณ์ของจิมมี่เหมือนสถานการณ์ข้างต้นและเอาท์พุทว่าจิมมี่จะติดเชือกหรือไม่ผ่านความจริงหรือความเท็จ

โดยเฉพาะ

  • เขียนโปรแกรมที่รับอินพุต สิ่งนี้สามารถผ่านฟังก์ชั่นหรือวิธีการอินพุตอื่น ๆ ที่เหมาะสม

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

  • เกณฑ์สำหรับ Jimmy สามารถแขวนบนเชือกได้:

    1. สองส่วนของร่างกายของเขาอยู่บนเชือก

    2. เขาไม่ได้อยู่ที่ก้นเชือก

    3. เขาไม่ได้ลอยอยู่กลางอากาศ

  • คุณสามารถสมมติว่าเชือกจะตรงสร้างขึ้นจาก||ส่วนและจะมีความยาวมากกว่าหนึ่งตัวอักษร

  • คุณสามารถถือว่าเชือกทั้งหมดหนึ่งตัวและ Jimmy เอกพจน์หนึ่งตัวจะปรากฏในฉากของคุณไม่มากไปกว่านั้น

  • คุณสามารถสรุปได้ว่าจะไม่มีการขึ้นบรรทัดใหม่ที่ด้านล่างของเชือก

  • คุณจะต้องครอบคลุมจำนวนช่องว่างนำหน้าหรือต่อท้ายก่อนและหลังเชือก

กรณีทดสอบ

           ||
           ||
           ||                 TRUTHY
           /o\
           ||
           ||


            ||
            ||
          /o\|                FALSY
            ||
            ||


        ||
       /o\                    TRUTHY
        ||


            ||
           /o\                FALSY


         /o\
          ||                  TRUTHY


            ||
            ||
       /o\  ||                FALSY
            ||
            ||

เกณฑ์การให้คะแนน

นี่คือดังนั้นคะแนนต่ำสุดเป็นไบต์ชนะหลังจากผ่านไปประมาณหนึ่งสัปดาห์

ลีดเดอร์บอร์ด

คุณสามารถดูกระดานแต้มนำสำหรับโพสต์นี้โดยขยายวิดเจ็ต / ตัวอย่างด้านล่าง เพื่อให้โพสต์ของคุณรวมอยู่ในการจัดอันดับคุณต้องมีส่วนหัว ( # header text) พร้อมข้อมูลต่อไปนี้:

  • ชื่อของภาษา (จบด้วยเครื่องหมายจุลภาค,หรือเส้นประ-) ตามด้วย ...

  • จำนวนไบต์เป็นจำนวนสุดท้ายที่จะปรากฏในส่วนหัวของคุณ

ตัวอย่างเช่นJavaScript (ES6), 72 bytesถูกต้อง แต่Fortran, 143 bytes (8-bit)ไม่ถูกต้องเนื่องจากการนับไบต์ไม่ใช่ตัวเลขสุดท้ายในส่วนหัว (คำตอบของคุณจะถูกจดจำเป็น 8 ไบต์ - อย่าใช้ประโยชน์จากสิ่งนี้)

<!-- Run the snippet to see the leaderboard. Report any bugs to @ozewski on Github. -->    <iframe src="https://ozewski.github.io/ppcg-leaderboard/?id=187759" width="100%" height="100%" style="border:none;">Oops, your browser is too old to view this content! Please upgrade to a newer version of your browser that supports HTML5.</iframe><style>html,body{margin:0;padding:0;height:100%;overflow:hidden}</style>


1
เชือกจะมีช่องว่างจำนวนเท่ากันก่อนเสมอหรือแตกต่างกันหรือไม่?
mprogrammer

@ Maxwell ที่สามารถแตกต่างกันไป
connectyourcharger

เราสามารถนำเข้าเป็นสิ่งที่ชอบรายการที่แต่ละบรรทัดเป็นสตริงที่แยกจากกันหรือจะต้องมีหนึ่งสายเดียว?
mprogrammer

19
จิมมี่จริงๆควรจะใช้เวลาวันหยุด
หลุยส์ Mendo

7
@LuisMendo Jimmy ทุ่มเทให้กับสิ่งที่เขาทำ!
connectyourcharger

คำตอบ:


13

Japt , 5 ไบต์

ฉันคิดว่ามันถูกต้อง ฉันทำงานเป็นเวลา 16 ชั่วโมงและแทบจะไม่รู้จักชื่อของตัวเองดังนั้นฉันจะไม่แปลกใจถ้ามันไม่ได้!

Õø|io

ลองมัน

Õø|io     :Implicit input
Õ         :Transpose
 ø        :Contains?
  |io     :  "|" prepended with "o"

2
16 ชั่วโมง ตอนนี้นั่นคือการอุทิศ!
connectyourcharger

2
เดี๋ยวก่อนคุณใช้เวลา 16 ชั่วโมงในการเขียน 5 ไบต์? ;-)
Cullub

ดูเหมือนว่าคุณจะต้องหยุดพัก (คำแนะนำแบบเดียวกันก็คือจิมมี่!)
ihavenoidea

@connectyourcharger ไม่นั่นคือชีวิตของฉัน! การอุทิศตนจะทำโดยไม่หยุดพัก ซึ่งฉันทำ!
Shaggy

1
@ihavenoidea, Pfft! ฉันจะนอนเมื่อฉันตาย!
ขนดก

22

Python 2 หรือ 3 ,  33  30 ไบต์

-3 ขอบคุณMaxwell

lambda l:'o'in map(max,l[:-1])

ฟังก์ชั่นที่ไม่มีชื่อยอมรับรายการของเส้น

ลองออนไลน์!

อย่างไร?

จำเป็นต้องมีส่วนของเชือกที่ถูกบดบังโดยจิมมี่ซึ่งไม่ใช่ส่วนล่าง

lambda l:'o'in map(max,l[:-1])
lambda l:                      # a function taking l (the lines as strings)
                       l[:-1]  # strip off the last line
               map(max,      ) # maximum of each line (where '|'>'o'>'\'>'/'>' ')
         'o'in                 # was 'o' one of them? (hence Jimmy obscured all the rope)

บันทึกสามไบต์:lambda l:'o'in map(max,l[:-1])
mprogrammer

โอ้ฉลาดมาก - ขอบคุณ!
Jonathan Allan

นั่นคือการใช้ค่า ASCII ที่ฉลาดมาก ดี
คดีฟ้องร้องกองทุนโมนิก้า

16

Python 2, 28 ไบต์

lambda x:"o', '|"in`zip(*x)`

ลองออนไลน์!

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

รหัสข้อเขียน:

lambda x: # Creates an anonymous function that takes one argument
  "o', '|" # If this substring is in the zip object, then Jimmy's "o" is above a "|"
    in
    `    # Back quotes change the object into its string representation
    zip(*x)` # Joins the lines together

(คำตอบเดิม) Python 2 หรือ 3, 39 ไบต์

lambda x:1-all("|"in i for i in x[:-1])

ฟังก์ชันที่รับอินพุตเป็นรายการของสตริงแต่ละสตริงเป็นบรรทัดที่แตกต่างกัน

-11 ไบต์ขอบคุณ xnor! -2 ไบต์ขอบคุณ Jonathan Allan!

ลองออนไลน์! (หากคุณต้องการลองกรณีทดสอบเพิ่มเติมให้ใส่ "." หลังชุดบรรทัดแต่ละบรรทัดในกล่องอินพุต)

มันทำงานอย่างไร ทีนี้ถ้าจิมมี่อยู่บนเชือกทั้งหมดแล้วเส้นนั้นจะไม่มี "|" ตัวละคร ดังนั้นเราสามารถตรวจสอบแต่ละบรรทัดและหากพบว่าไม่มี "|" ตัวละครจากนั้นเรารู้ว่าจิมมี่สามารถอยู่บนเชือกได้ อย่างไรก็ตามจิมมี่ไม่สามารถแขวนลงไปที่ด้านล่างของเชือก; ดังนั้นเราจึงไม่รวมบรรทัดสุดท้ายในการตรวจสอบของเรา หากบรรทัดสุดท้ายเป็นเพียงส่วนหนึ่งของเชือกมากกว่าที่มันจะไม่สำคัญเพราะเราจะยังคงพบแถวที่ถูกต้องสูงขึ้น แต่ถ้าบรรทัดสุดท้ายเป็นส่วนหนึ่งของ Jimmy ก็จะไม่พบบรรทัด ไม่มี "|" ทุกที่และจะคืนค่าเท็จ


คุณสามารถทำได้โดยไม่ตรวจสอบว่าบรรทัดมี "/" หรือไม่?
xnor

@xnor Yup! -11 ไบต์
mprogrammer

1
ประหยัดคู่อย่างเช่น:lambda x:1-all("|"in i for i in x[:-1])
Jonathan Allan

1
โอ้คุณเร็วขึ้นแล้ว :)
Daniil Tutubalin

1
@KlaymenDK ฟังก์ชั่นวนซ้ำผ่าน x [: - 1] ไม่ใช่ x x [: - 1] เป็นองค์ประกอบทั้งหมดของรายการยกเว้นองค์ประกอบสุดท้ายเพราะใน Python คุณสามารถใช้ดัชนีลบ ดังนั้นมัน (ถูกต้อง) จะส่งกลับผลลัพธ์ที่ผิดถ้าจิมมี่อยู่ที่ด้านล่างของเชือก
mprogrammer

8

เยลลี่ ,  9 7  6 ไบต์

Ṗ<”|ṀẠ

ลิงก์ monadic ยอมรับรายการของบรรทัด

ลองออนไลน์!

อย่างไร?

จำเป็นต้องมีส่วนของเชือกที่ถูกบดบังโดยจิมมี่ซึ่งไม่ใช่ส่วนล่าง

Ṗ<”|ṀẠ - Main Link: list of lines of characters
Ṗ      - remove last line
  ”|   - pipe character
 <     - less than? (vectorises) - Note that all other characters are
    Ṁ  - maximum
     Ạ - all?

1
ฉันรู้สึกแปลก ๆ ที่เขียนความท้าทายเหล่านี้เกี่ยวกับ Jimmies มันเริ่มที่จะทำให้คุณรู้สึกแปลก ๆ เมื่อคุณจินตนาการว่า Jimmies หลายคนห้อยออกจากเชือกเดียวกัน
connectyourcharger

1
@connectyourcharger การคาดคะเนหรือไม่
ลบเจ็ด

@negativeseven อาจเป็นไปได้ ฉันได้พิจารณาวิกิชุมชนของ meta แล้วเพื่อจัดทำดัชนีโพสต์ของ Jimmy ทั้งหมด
connectyourcharger

1
เก้าไบต์และอีกครั้งเรายังพบว่าใครบางคนสามารถตายได้
IMustBeSomeone

1
" Note that all other characters are [less than '|']"
Erik the Outgolfer


5

brainfuck, 79 64 ไบต์

>>+<<,[----------[<]>>[.-]+<[>-]+[---------<-->]<[<]>>[-]<[>]<,]

ลองออนไลน์!

เอาต์พุต 0x01 ไบต์สำหรับความจริงและไม่มีอะไรผิดพลาด

Z: 0
A: input
B: 0
C: has no | been found on this line?

>>+<<                       initialize C to 1
,[                          loop over each char

  ----------                set A to 0 if input was \n
  [<]>>                     move to C if input was \n; B otherwise
  [                         if input was \n and C is true
    .-                      output 1
  ]

  +                         this will reinitialize C to 1 if input was \n
                            but also clobber B with 1 if it wasn't
                            now we have { 0   0   0  (1)} if input was \n;
                                        { 0   _  (1)  _ } otherwise
  <[>-]                     clear own cell if the one to the left is positive
                            this yields { 0   0  (0)  1 } and
                                        { 0   _  (0)  _ } as desired

  +[---------<-->]          set A to 0 if input was |
  <[<]>>                    move to C if input was |; B otherwise
  [-]                       zero out current cell: clears C if input was |
  <[>]<                     realign pointer onto A

,]                          break on end of input


4

05AB1E , 5 ไบต์

Çü%àθ

ลองออนไลน์!

Ç         # convert the input to a 2D array of codepoints
 ü%       # pairwise modulo (vectorized)
   à      # maximum (*not* vectorized, returns a single number)
    θ     # tail (last digit)

อักขระเท่านั้นที่สามารถปรากฏในอินพุตได้\o/ |โดยมี codepoints ที่เกี่ยวข้อง 92, 111, 47, 32, 124 (ไม่มีบรรทัดใหม่เนื่องจากเราเลือกที่จะป้อนข้อมูลเป็นอาร์เรย์ของบรรทัด) ผลลัพธ์ที่เป็นไปได้โดยการมอดูโลสองตัวเลขเหล่านี้คือ 0, 13, 15, 17, 19, 28, 30, 32, 45, 47, 92, 111, 111 เป็นจำนวนที่ใหญ่ที่สุดของเหล่านั้นและเป็นเพียงคนเดียวที่ลงท้ายด้วย 1 ดังนั้นรหัสจะส่งออกจริงถ้าหาก 111 อยู่ในรายการ (เพียง 1 คือความจริงใน 05AB1E) 111 คือ 111 ( o)% 124 ( |) และจะเกิดขึ้นก็oต่อ|เมื่ออินพุตข้างต้น a


1
เยี่ยมมาก ๆ กับมอดูโลแบบคู่
Kevin Cruijssen

3

APL (Dyalog Unicode) 8 ไบต์SBCS

ฟังก์ชั่นนำหน้าเงียบโดยไม่ระบุชื่อโดยใช้เมทริกซ์อักขระเป็นอาร์กิวเมนต์

1'o|'⍷⍉

ลองออนไลน์!

 transpose

'o|'⍷ หน้ากากสำหรับทุกที่oตามมาทันทีด้วย|

1∊ เป็นหนึ่งในสมาชิกของมัน?



2

JavaScript, 39 33 ไบต์

ขอบคุณ @Daniil Tutubalin สำหรับการเล่นกอล์ฟขนาด 2 ไบต์

x=>!!x.match(/^( *)\/[^|]*\n/m)

ตรงกับบรรทัดใด ๆ ที่ไม่ใช่เส้นที่แขนซ้ายของเขาปรากฏขึ้นและไม่มีเชือกแสดง

ลองออนไลน์!


ดูเหมือนว่าจะล้มเหลวถ้าเขาอยู่ที่ด้านล่างของเชือก
fəˈnɛtɪk

มันควรจะล้มเหลวถ้าเขาอยู่ด้านล่างใช่มั้ย เพราะจิมมี่ตกถ้าเขาอยู่ที่ด้านล่างของเชือก
mprogrammer

ฉันหมายความว่าเมื่อฉันวางเขาไว้ที่ด้านล่างของเชือกฟังก์ชั่นของคุณด้วยเหตุผลบางอย่างกลับมา 1
fəˈnɛtɪk

อืมไม่เป็นไรแล้ว
mprogrammer

1
เกี่ยวกับ/^ *.o. *\n/อะไร
TSH

2

/// , 53 50 ไบต์

/~/\/\~/\/o\\/1~1 /1~ 1/1~|1~/1|~/|~/1.~/ ~/.~/
~.

ลองออนไลน์!

เนื่องจากไม่มีวิธีอื่นในการป้อนข้อมูลใน /// จึงเป็นฮาร์ดโค้ด:

/~/\/\~/\/o\\/1~1 /1~ 1/1~|1~/1|~/|~/1.~/ ~/.~/
~<INPUT HERE>.

คำอธิบาย:

วิธีการทั่วไปคือการแทนที่จิมมี่กับเอก 1 แล้วนำเขาออกจากทุกสถานการณ์ที่เขาตกอยู่ในอันตราย หากเขายังมีชีวิตอยู่เขาจะถูกแสดงให้เห็น ถ้าเขาไม่ทำอย่างนั้นก็ไม่มีอะไร ~ในรหัสเป็นแทน//ซึ่งจะช่วยให้รหัสที่จะสั้นลงโดย 3 ไบต์ที่นี่ พวกเขาจะละเว้นจากคำอธิบาย

/{/\//
/}/\/\//

          {The top two lines allow me to leave comments without disturbing the code.}

/\/o\\/1/ {Replace Jimmy with a 1.}
/1 /1/    {Get rid of any spaces in front of Jimmy. This moves Jimmy towards the rope from the left.}
/ 1/1/    {Get rid of any spaces after Jimmy. This moves Jimmy towards the rope from the right.}

/|1//     {If Jimmy is touching the rope, remove him and the rope.}
/1|//     {This is based on the observation that in all cases where Jimmy is safe, there is no visible rope on his line.}


/|//      {Remove any remaining rope. If Jimmy was touching a rope, it's already too late for him.}
/1.//     {This handles the case where Jimmy is at the bottom of the rope (hence the period at the end).}


/ //      {The remaining lines clean up the output.}
/.//
/
//

           ||
           ||
           ||
           /o\
           ||.

ลองออนไลน์!


2

Ruby 2.5.5, 22 ไบต์

->x{x.pop;!x.all? /\|/}

คาดหวังอาร์เรย์ของเส้น ต้องมีเวอร์ชันต่ำสุด 2.5.5 เพราะนี่เป็นเวลาที่Array#all?(pattern)ถูกเพิ่มเข้ามา

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




1

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

m`^[^|]+^

ลองออนไลน์!

ตอนนี้ฉันไม่เคยตั้งโปรแกรมใน Retina มาก่อน แต่เท่าที่ฉันจะบอกได้ เป็นนิพจน์ทั่วไปที่ค้นหาสตริงที่มี (1) จุดเริ่มต้นของอินพุต (2) ไม่ "|" อักขระและ (3) ขึ้นบรรทัดใหม่

คนที่คุ้นเคยกับการแสดงออกปกติหรือจอประสาทตามากขึ้นจะได้รับการสนับสนุนเพื่อให้คำแนะนำ -2 ไบต์ต้องขอบคุณ Neil!


สองทางเลือก: 1) ลบ\nเนื่องจากบรรทัดใหม่ไม่ใช่|และเพื่อที่จะจับคู่ต่อไปและ^พอเพียงสุดท้ายเพื่อให้แน่ใจว่าคุณตรงกับขึ้นบรรทัดใหม่จริง ๆ 2) ใช้ pilcrow แทน\nและลบส่วนท้าย^(เพราะมันจะเป็นจริงเสมอหลังจากบรรทัดใหม่ในโหมดหลายบรรทัด)
Neil


1

Befunge-98 (PyFunge) , 26 24 ไบต์

]~:a-!#v_' `+
^_-3q#$<
@

ลองออนไลน์!

ออกด้วยรหัสส่งคืน 3 ถ้า \nพบและบรรทัดสุดท้ายมีอักขระที่ไม่ใช่ช่องว่าง 3 ตัวหรือออกจากด้วยรหัสส่งคืน 0 บน EOF ดังนั้นสิ่งนี้จึงขึ้นอยู่กับบรรทัดสุดท้ายที่ไม่ได้ขึ้นบรรทัดใหม่

ชำแหละ

]~                     :a-!#v_                ' `+
 Read character,      Branch downwards if   Increment counter on 
 branch up (and        equal to 10 ('\n')   the stack if greater
 loop around) if                            than 32 (' ') and
 end of stream                              implicitly loop

^_-3q#$<                    <
 Return with code 3
 if counter is equal to 3,
 otherwise reset counter
 and return to beginning

@
 Return with exit
 code 0

1

05AB1E (ดั้งเดิม) , 6ไบต์

ζJ„o|å

พอร์ตของ @Shaggy 's คำตอบ

อินพุตเป็นรายการของบรรทัด

ลองออนไลน์

คำอธิบาย:

ζ       # Zip/transpose the (implicit) strings in the input-list, with space as filler
        # (NOTE: zip/transpose doesn't work on string-list in the new version of 05AB1E,
        #  which is why we use the legacy version)
 J      # Join these zipped/transposed lines together to a single string
  o  # And check if it contains the string "o|"
        # (after which the result is output implicitly)


1

Elm 0.19, 68 bytes

f r=List.any(not<<String.contains"|")(List.take((List.length r)-1)r)

รับอินพุตเป็นรายการของบรรทัด โดยไม่คำนึงถึงบรรทัดสุดท้ายมันจะตรวจสอบว่ามีสิ่งใดที่ไม่มี'|'อยู่ในนั้นหรือไม่ - หมายความว่าเชือกได้รับการคุ้มครองอย่างสมบูรณ์จากจิมมี่

ตรวจสอบกรณีทดสอบทั้งหมดที่นี่


1

PowerShellขนาด 26 ไบต์

ท่าเรือคำตอบของ Maxwell สำหรับ Retina

"$args"-match'(?m)^[^|]+^'

ลองออนไลน์!

คำอธิบาย:

true ถ้า:

  1. มีเส้นหนึ่งในฉากที่ไม่มีตัวอักษร |
  2. และหลังจากบรรทัดนี้มีการเริ่มต้นของบรรทัดใหม่

false มิฉะนั้น.



0

Pyret, 79 ไบต์

{(l):all2({(r,n):string-char-at(n,string-index-of(r,"o") == "|")},l,link(0,l))}

คาดว่าอาร์เรย์ของบรรทัดเป็นสตริง สร้างสำเนาlink(0,l)โดยที่ทุกแถวเลื่อนลงหนึ่งแถว ผ่านแต่ละแถวrและnโดยที่ n คือแถวด้านล่าง r ตรวจสอบว่าถ้าร่างกายของจิมมี่"o"อยู่ในตำแหน่งใดตำแหน่งหนึ่งแถวด้านล่างจะมีท่ออยู่ที่นั่น (เช่นจิมมี่แขวนอยู่บนเชือกและไม่อยู่ด้านล่าง)

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