Jimmys สามารถใส่ได้กี่ตัว?


29

ในการท้าทายที่เรียบง่าย แต่สนุกนี้คุณถูกขอให้ตัดสินว่าจิมมี่จะตกจากแพลตฟอร์มของพวกเขาหรือไม่ จิมมี่มีสามส่วนของร่างกาย/, oและ\จัดเช่นนี้

/o\

-แพลตฟอร์มจะแสดงด้วย จิมมี่จะตกลงมาจากแพลตฟอร์มของพวกเขาหากพวกเขามีสองส่วนของร่างกายที่ไม่ได้อยู่เหนือแพลตฟอร์มโดยตรง

ตัวอย่างบางส่วน:

   /o\
- -------

-จิมมี่จะสมดุลเนื่องจากทุกส่วนของร่างกายของพวกเขาดังกล่าวข้างต้น

   /o\
    ------   ---

จิมมี่จะมีความสมดุลตั้งแต่สองส่วนของร่างกายอยู่เหนือ-s

 /o\
-- ----  --

จิมมี่จะทรงตัวแม้ว่าพวกเขาจะแยกระหว่างสองแพลตฟอร์ม

  /o\
   -

จิมมี่จะไม่สมดุลเนื่องจากส่วนของร่างกายสองชิ้นไม่ได้อยู่เหนือแท่น


งานของคุณคือการเขียนโปรแกรมที่ใช้แพลตฟอร์มเป็นภาชนะยาวที่มีเพียง - s และs (เช่นสตริง) และส่งออกจำนวน Jimmys ที่สามารถวางบนแพลตฟอร์มดังกล่าวซึ่งจะไม่มีใครตกอยู่และไม่มีใครจะ คาบเกี่ยวกัน จิมมี่อาจมีส่วนใดส่วนหนึ่งของร่างกายทางด้านซ้ายของจุดเริ่มต้นของสายอักขระหรือด้านขวาของจุดสิ้นสุดของสายอักขระ

นี่คือดังนั้นคำตอบจะได้คะแนนเป็นไบต์โดยมีจำนวนไบต์น้อยกว่าที่เป็นเป้าหมาย

กรณีทดสอบ

ปัจจัยการผลิต

-  -  -

- -
--
-- --
----
- -- --
------- -

ผลลัพธ์ที่เกี่ยวข้อง

0
0
1
1
2
2
2
3

คำตอบ:


15

JavaScript (ES6),  45 41  40 ไบต์

บันทึกแล้ว 4 ไบต์ขอบคุณ @Shaggy

s=>(0+s+0).split(/.--|-.-|--./).length-1

ลองออนไลน์!



7
@Shaggy ขอบคุณ! ผมรู้ว่ามีบางอย่างผิดมี แต่ผมต้องช่วยภรรยาของฉันในบางระดับซูเปอร์มาริโอกาแล็กซี่ในขณะเดียวกัน ... และมันก็ยังมีปัญหาเกี่ยวกับแพลตฟอร์มหัก : p
Arnauld

2
การ---นั่งกับฉันก็ไม่ได้ดีเช่นกันจนกว่าฉันจะทำงานในพอร์ตของฉันและตระหนักว่าพวกเขาไม่จำเป็นต้องใช้ คิดว่าฉันจะเรียกมันว่าวันนี้คว้าถุงกระป๋องแล้วโยนใส่ตัวเองใน SMG - ยังไม่ได้เล่นในยุคนั้น
Shaggy

และตอนนี้คำตอบอื่น ๆ ทั้งหมดใช้ regex เดียวกัน
Cœur

8

Python 2 , 53 ไบต์

lambda s:len(re.findall('.--|-.-|--.',`s`))
import re

ลองออนไลน์!

ขึ้นอยู่กับregex Arnauld ของ การค้นหาสารตั้งต้นความยาว -3 ที่ไม่เหลื่อมซ้อนกันอย่างตะกละตะกลามมีสองอย่างหรือมากกว่า-นั้น กลอุบายคือ`s`การใส่สตริงอินพุตในเครื่องหมายคำพูดเนื่องจากการเว้นช่องว่างไว้สำหรับ Jimmys เพื่อออกไปเที่ยวที่ปลายทั้งสองด้านเช่น

/o\/o\
'----'

Python 2 , 57 ไบต์

f=lambda s:'--'in s[:3]*2and-~f(s[3:])or s>''and f(s[1:])

ลองออนไลน์!

ต้องใช้รูปแบบ I / O ของอินพุตที่อยู่ในเครื่องหมายคำพูด เอาต์พุตFalseสำหรับ 0

ฟังก์ชั่นวนซ้ำที่วาง Jimmy แต่ละตัวไว้ที่ตำแหน่งซ้ายสุดที่อนุญาตโดยวาง Jimmy ไว้เหนืออักขระสามตัวแรกหากพวกเขาสามารถถือ Jimmy ได้หรือลบอักขระตัวแรก เคล็ดลับที่น่ารักคือการตรวจสอบว่าs[:3]มีสองคนหรือมากกว่า-โดยการทำ'--'in s[:3]*2ซึ่งเชื่อมสองฉบับและการตรวจสอบสำหรับสองที่อยู่ติดกันs[:3]-



3

Japt , 16 ไบต์

ขึ้นอยู่กับโซลูชัน JS ดั้งเดิมของ Arnauld ฉันลองใช้วิธีที่ต่างกันสองสามวิธีเพื่อให้ได้ช่องว่างที่จำเป็นด้านใดด้านหนึ่ง แต่ทั้งหมดมาที่ความยาวเท่ากัน - ยังคงค้นหาวิธีที่สั้นกว่า ...

ûUÊÄÄ è".--|-."ê

ทดสอบมัน

ûUÊÄÄ è".--|-."ê     :Implicit input of string U
û                    :Centre pad with spaces to length
 UÊ                  :  Length of U
   ÄÄ                :  Add 1, twice
      è              :Count the occurrences of
       ".--|-."ê     :  ".--|-." palindromised, resulting in the RegEx /.--|-.-|--./g

3

Excel, 96 ไบต์

A1= แพลตฟอร์ม ป้อนเป็นอาร์เรย์ Formula Ctrl+ Shift+Enter

=SUM(IF(LEN(TRIM(MID(IF(MOD(LEN(A1),3)=1," ","")&A1,3*ROW(INDIRECT("A1:A"&LEN(A1)))-2,3)))>1,1))

3

05AB1E , 16 ไบต์

ðì‚ε3ôʒ'-¢2@}g}à

สามารถเล่นกอล์ฟได้อย่างแน่นอน .. บางครั้งมันก็น่ารำคาญที่เห็นคำตอบทั้งหมดของ regex ในความท้าทายเมื่อใช้ 05AB1E ซึ่งขาด regex ทุกชนิด ;)

ลองออนไลน์หรือตรวจสอบกรณีทดสอบทั้งหมดตรวจสอบกรณีทดสอบทั้งหมด

คำอธิบาย:

ðì            # Prepend a space before the (implicit) input
             # Pair it with the unmodified (implicit) input
   ε          # Map both to:
    3ô        #  Split them into parts of size 3
      ʒ       #  Filter these parts by:
       '-¢   '#   Where the amount of "-"
          2@  #   Is larger than or equal to 2
      }g      #  After the filter: take the length to get the amount of items left
            # After the map: get the maximum of the two
              # (which is output implicitly as result)



2

Java 8, 41 ไบต์

s->(0+s+10).split(".--|--.|-.-").length-1

ลองออนไลน์

ท่าเรือ@Arnauldคำตอบ JavaScript 'sยกเว้นว่า+0เป็นกรณีทดสอบการแก้ไขเช่น+10 ----สิ่งนี้มีความจำเป็นเนื่องจากString#splitบิวด์อินใน Java จะลบสตริงสตริงว่างเปล่าตามค่าเริ่มต้น สิ่งนี้สามารถเปลี่ยนแปลงได้โดยการเพิ่มพารามิเตอร์เพิ่มเติมให้กับsplitbuiltin (ซึ่งเป็น0ค่าเริ่มต้นในsplit-builtin ด้วยอาร์กิวเมนต์สตริงเดียว) หากต้องการอ้างอิงการใช้พารามิเตอร์เพิ่มเติมนี้จากเอกสาร:

พารามิเตอร์ จำกัด ควบคุมจำนวนครั้งที่มีการนำรูปแบบมาใช้และส่งผลต่อความยาวของอาร์เรย์ผลลัพธ์
ถ้าขีด จำกัดnเป็นมากกว่าศูนย์แล้วรูปแบบจะถูกนำมาใช้มากที่สุดn-1 คูณความยาวของอาเรย์จะไม่มากกว่า nและรายการสุดท้ายของอาร์เรย์จะมีอินพุตทั้งหมดนอกเหนือจากตัวคั่นที่ตรงกันล่าสุด
ถ้าnไม่เป็นเชิงบวกจากนั้นรูปแบบจะถูกนำไปใช้หลายครั้งมากที่สุดและอาร์เรย์สามารถมีความยาวได้
ถ้าnเป็นศูนย์แล้วรูปแบบจะถูกนำมาใช้หลายครั้งตามที่เป็นไปได้อาร์เรย์สามารถมีความยาวใด ๆและต่อท้ายสตริงที่ว่างเปล่าจะถูกยกเลิก

ด้วยเหตุนี้มัก.split("...",-1)จะใช้เพื่อเก็บสตริงเปล่าทั้งหมดที่ตามมาและฉันอาจใช้มันสำหรับคำตอบนี้เช่นกัน ( ลองออนไลน์ ) ในกรณีนี้การเปลี่ยนแปลง+0ที่จะ+10ช่วยประหยัดไบต์ที่สองมากกว่า,-1แม้ว่า :)



0

ถ่าน 25 ไบต์

Pθ↖Fθ¿›№KM-¹«⊞υωM³→»→⎚ILυ

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด คำอธิบาย:

Pθ↖

พิมพ์แพลตฟอร์มโดยไม่เลื่อนเคอร์เซอร์จากนั้นเลื่อนเคอร์เซอร์ขึ้นและไปทางซ้ายเนื่องจากเป็นตำแหน่งจิมมี่ที่มีศักยภาพอันดับแรก

Fθ

มองหา Jimmies มากเท่าที่มีตำแหน่งแพลตฟอร์ม

¿›№KM-¹

ตรวจสอบเพื่อดูว่ามีตำแหน่งมากกว่าหนึ่งแพลตฟอร์มในตำแหน่งนี้หรือไม่

«⊞υω

ถ้าเป็นเช่นนั้นให้บันทึกตำแหน่งจิมมี่ที่ถูกต้อง ...

M³→»

... และเลื่อนตัวละครสามตัวไปทางขวาเพื่อให้ Jimmies ไม่ทับซ้อนกัน

มิฉะนั้นตำแหน่งจิมมี่ที่มีศักยภาพต่อไปคือตัวละครตัวหนึ่งทางด้านขวา

⎚ILυ

ล้างแพลตฟอร์มและส่งออกจำนวนตำแหน่งที่ค้นพบ



0

Elm 0.19, 108 bytes

import Regex as R
f p=List.length<|R.find(Maybe.withDefault R.never<|R.fromString".--|-.-|--.")(" "++p++" ")

ขึ้นอยู่กับ regex ในArnauld 's JavaScript คำตอบ ตรวจสอบกรณีทดสอบทั้งหมดที่นี่

โซลูชันทางเลือกที่ไม่มี regex อีกต่อไปที่171 ไบต์ :

f p=(String.foldl(\z{x,y,s,c}->let(t,d)=if s<1&&List.length(List.filter((==)'-')[x,y,z])>1 then(2,c+1)else(max 0 s-1,c)in{x=y,y=z,s=t,c=d}){x=' ',y=' ',s=0,c=0}(p++" ")).c

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

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