เป็นฉากที่มีความหลากหลายของจิมมี่


25

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


คำอธิบาย

Jimmys มีสามประเภท: คนแคระกายกรรมและนักเพาะกาย

This is dwarf Jimmy:               o

This is acrobat Jimmy:            /o\

This is bodybuilder Jimmy:       /-o-\

Jimmys เหล่านี้เป็นเพื่อนที่ดีและพวกเขาชอบที่จะยืนอยู่บนบรรทัดเดียวกันกับคนอื่น ๆ งานของคุณคือให้ฉากจิมมี่เป็นเช่น:

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

เอาท์พุทจำนวนของคนแคระกายกรรมและนักเพาะกายในบรรทัดตามลำดับ

ความท้าทาย

  • รับอินพุตในรูปแบบที่สมเหตุสมผลเช่นฉาก Jimmy ดังแสดงในตัวอย่างด้านบน

    1. สตริงอินพุตควรเป็นหนึ่งบรรทัดและมีทางเลือกสามอย่างของ Jimmys และช่องว่างทางเลือก

    2. สตริงไม่จำเป็นต้องมีหลากหลายของ Jimmy หรือ whitespace ทั้งหมด

    3. สตริงจะไม่ได้มีตัวอักษรใด ๆ o/\ -ไม่ได้อยู่ใน

    4. การผสมผสานของพันธุ์จิมมี่เป็นไปได้ ซึ่งหมายความว่า Jimmy ประเภทเดียวกันหรือต่างกันสามารถอยู่ติดกันได้ คุณต้องบัญชีสำหรับสิ่งนั้น

    5. ช่องว่างนำหน้าและต่อท้ายเป็นทางเลือกและไม่จำเป็นต้องใช้โปรแกรมของคุณควรพิจารณาสตริงที่มีหรือไม่มีช่องว่างนำหน้าและ / หรือต่อท้าย

    6. สตริงควรมี Jimmys และ whitespace ที่ถูกต้องเท่านั้น ตัวอย่างเช่น---///---ไม่ได้รับอนุญาตเพราะไม่ใช่ลำดับของ Jimmy ที่ถูกต้อง

  • เอาท์พุทสามตัวเลข: จำนวนของคนแคระกายกรรมและนักเพาะกายในฉาก (ตามลำดับที่เกี่ยวข้อง)

    1. นี่อาจเป็นผลลัพธ์ไปยังคอนโซลเป็นจำนวนเต็มคั่นด้วยช่องว่างหรืออาจเป็นค่าตอบแทนจากฟังก์ชั่นเป็นคอนเทนเนอร์บางประเภท (เช่นชนิดอาร์เรย์)

    2. เอาต์พุตในรูปแบบใดก็ตามจะต้องเรียงตามที่ระบุไว้ในสัญลักษณ์แสดงหัวข้อย่อยด้านบนเหนือกฎนี้

  • ใช้กฎมาตรฐานและช่องโหว่

กรณีทดสอบ

     /-o-\           /-o-\     o/o\  /-o-\       /-o-\                /-o-\
OUTPUT: 1 1 5


      o o               /o\    o o      o                    /o\             /o\
OUTPUT: 5 3 0


 /-o-\     /-o-\            /-o-\/-o-\   o /o\/o\    /-o-\o /-o-\       /o\/-o-\
OUTPUT: 2 3 7


  /-o-\  o                 /-o-\               o/o\
OUTPUT: 2 1 2

หากคุณต้องการกรณีทดสอบเพิ่มเติมให้ใช้เครื่องมือนี้เพื่อสร้างกรณีทดสอบแบบสุ่มเพิ่มเติม

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

นี่คือดังนั้นคะแนนต่ำสุดเป็นไบต์ชนะ

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

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

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

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

<!-- Run the snippet to see the leaderboard. Report any bugs to @xMikee1 on Github. -->    <iframe src="https://ozewski.github.io/ppcg-leaderboard/?id=188391" 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>


เราสามารถสมมติว่าอินพุตทั้งหมดจะมีพื้นที่นำหน้าและส่วนท้ายอย่างน้อยหนึ่งรายการได้หรือไม่
Shaggy

7
@connectyourcharger วิธีที่เป็นมาตรฐานมากขึ้นคือต้องการคำตอบเพื่อระบุคำสั่งซื้อ
ข้อมูลที่หมดอายุ

4
เพื่อที่จะชัดเจน Dwarf Jimmys สามารถยืนด้วยกันได้หรือไม่? ฉันไม่เห็นอะไรเลยที่แนะนำเป็นอย่างอื่น ถ้าเป็นเช่นนั้นกรณีทดสอบoo /o\ o oน่าจะดี
Veskah

1
@Veskah: ooกำเนิดกรณีทดสอบที่มีความสามารถในการสร้างลำดับ
เรียกซ้ำ

8
จะต้องมีแท็กจิมมี่
MilkyWay90

คำตอบ:


8

เยลลี่ (12?) 13 ไบต์

ċⱮ“-/o”H1¦ŻIṚ

Monadic Link ยอมรับรายการของอักขระที่ให้รายการของจำนวนเต็ม[ dwarves, acrobats, and body-builders](บันทึกไบต์ถ้าเราอาจระบุเอาต์พุตของเรา)

ลองออนไลน์!

อย่างไร?

Jimmys ทั้งหมดแสดงo; คนแคระที่ไม่ใช่ทั้งหมดแสดง/; -ทั้งหมดร่างกายสร้างแสดงสอง นับสิ่งเหล่านี้ลดจำนวนครึ่ง-และทำการลบเพื่อค้นหาการนับจิมมี่:

ċⱮ“-/o”H1¦ŻIṚ - Link: list of characters
  “-/o”       - list of characters ['-', '/', 'o']
 Ɱ            - map across right with:
ċ             -   count occurrences   = [n('-'), n('/'), n('o')]
         ¦    - sparse application...
        1     - ...to indices: [1] -- i.e. n('-')
       H      - ...action: halve    = [n('-')/2, n('/'), n('o')]
          Ż   - prepend a zero =   [0, n('-')/2, n('/'), n('o')]
           I  - incremental differences
              -     = [n('-')/2, n('/')-n('-')/2, n('o')-n('/')]
            Ṛ - reverse
              -     = [n('o')-n('/'), n('/')-n('-')/2, n('-')/2]

21

Python 3.8 (เผยแพร่ล่วงหน้า) , 51 ไบต์

lambda s:((c:=s.count)('o')-c('/'),c('/o'),c('/-'))

ลองออนไลน์!


FINALLY python เพิ่มบางอย่างเช่นนี้ ฉันรอ Python รอการมอบหมายเป็นนิพจน์ ความอัปยศมันต้องใช้ไบต์พิเศษ แต่ฉันจะรับมัน: P
HyperNeutrino

@HyperNeutrino นั่นเป็นเหตุผลหนึ่งที่คุณอาจเห็น "Python 3.8 (เผยแพร่ล่วงหน้า)" ลอยไปรอบ ๆ เว็บไซต์ ข้อ จำกัด อีกประการหนึ่งคือยกเว้นว่าเป็นของตนเองและไม่ใช่นิพจน์เดียวในคำสั่ง (ซึ่งในกรณีนี้คุณอาจต้องการกำหนดปกติแทน) ต้องเป็นวงเล็บ (+2 ไบต์)
Erik the Outgolfer

วิธีการคือนับเป็นครั้งแรกใน('o')การได้รับการเรียกโดยไม่มีการc?
Quinn

@Quinn นิพจน์การมอบหมายs.countจะกำหนดcและส่งคืน
Erik the Outgolfer

@ErikTheOutgolfer เจ๋ง TIL
Quinn

12

Python 2 , 50 ไบต์

x,y,z=map(input().count,'o/-')
print x-y,y-z/2,z/2

ลองออนไลน์!

-10 ไบต์โดยการแปลงแลมบ์ดานิพจน์ให้เป็นโปรแกรมแบบเต็มต้องขอบคุณ @xnor (ลบสิ่งซ้อนซ้อนแลมบ์ดาสองครั้งและใช้การมอบหมายแทน)


3
นี่คือวิธีการที่ดีและก็สั้นเป็นโปรแกรม
xnor


5

J , 36 25 ไบต์

-11 ไบต์ขอบคุณที่ cole!

2-/\0,~1 1 2%~1#.'o/-'=/]

ลองออนไลน์!

โซลูชันดั้งเดิม

J , 36 ไบต์

[:(-/@}:,-/@}.,{:)1 1 2%~1#.'o/-'=/]

ลองออนไลน์!

คำอธิบาย:

                            'o/-'=/] compare the input with each one of "o/-" characters
                                     / the result is a 3-row matrix /
                         1#.         add up each row to find the number of occurences
                                     of each character, the result is a vector of 3 items
                  1 1 2%~            divide the last item by 2 to find the number of 
                                     bodybuilder Jimmys
[:(              )                   use the result to construct the following vector:
               {:                    the last item
              ,                      appended to
         -/@}.                       the difference of the second and the third items
        ,                            appended to
   -/@}:                             the difference of the first and the second items

ตัวอย่างเซสชันJ :

a=:'  /-o-\  o                 /-o-\               o/o\'
   'o/-'=/a
0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
   1#.'o/-'=/a
5 3 4  
   1 1 2%~1#.'o/-'=/a
5 3 2
   (-/@}:,-/@}.,{:)1 1 2%~1#.'o/-'=/a
2 1 2


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

1
@ โคลฮัทบ่อยครั้งที่เกิดขึ้นกับฉันฉันไม่เห็นรูปแบบ ขอขอบคุณ!
Galen Ivanov

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

@cole นั่นทำไมฉันจะให้คำอธิบายของฉันมองเห็นความผิดพลาด :)
เลน Ivanov

5

Excel เป็น CSV, 130 ไบต์

,=LEN(A3)-LEN(A4)
=SUBSTITUTE(A1,"-o",""),=(LEN(A2)-LEN(A3))/2
=SUBSTITUTE(A2,"/o",""),=(LEN(A1)-LEN(A2))/2
=SUBSTITUTE(A3,"o","")

แทรกอินพุตในพื้นที่ก่อนก่อน,บันทึกเป็น. csv เปิดใน Excel ขาออกคนแคระทั้งกายกรรมและนักเพาะกายในB1, B2และB3ตามลำดับ


Excel, 244 ไบต์

=LEN(SUBSTITUTE(SUBSTITUTE(A1,"-o",""),"/o",""))-LEN(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"-o",""),"/o",""),"o",""))&" "&(LEN(SUBSTITUTE(A1,"-o",""))-LEN(SUBSTITUTE(SUBSTITUTE(A1,"-o",""),"/o","")))/2&" "&(LEN(A1)-LEN(SUBSTITUTE(A1,"-o","")))/2


4

Kotlin 131 130 129 121 117 97 96 88 ไบต์

fun String.j(b:Int=count{'-'==it}/2,a:Int=count{'/'==it})=listOf(count{'o'==it}-a,a-b,b)

ลองออนไลน์!

แก้ไข - ได้รับต่ำกว่า 100! ฉันสงสัยว่าฉันสามารถหดมันได้มากขึ้น แต่เวลาเท่านั้นที่จะบอก ...

แก้ไข - พูดเร็วเกินไปลดลงอีกหนึ่งไบต์โดยใช้รายการแทนสตริง

แก้ไข - ลบ 8 ไบต์ด้วย AsoLeo ที่แนะนำให้ใช้ฟังก์ชันส่วนขยาย


1
ฉันจะบอกคุณเกี่ยวกับวิธีการขยายเพื่อนของฉัน: fun String.j(b:Int=count{'-'==it}/2,a:Int=count{'/'==it})=listOf(count{'o'==it}-a,a-b,b)88 ไบต์
Aso Leo

@AsoLeo ดีฉันได้เขียนมันเป็นฟังก์ชั่นการขยาย แต่เดิมฉันต้องยุ่งอย่างอื่นเพราะฉันเป็นไบต์มากขึ้น
Quinn

3

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

แก้ไข: -4 ไบต์ขอบคุณ@FryAmTheEggMan

^((o)|(/o.)|(/-o-.)| )*
$#2 $#3 $#4

ลองออนไลน์!

คำอธิบาย:

เวทีแทนที่ง่าย พบการแข่งขันทั้งหมดของ regex^((o)|(/o.)|(/-o-.)| )* (ซึ่งจะส่งผลในการแข่งขันหนึ่ง - สตริงทั้งหมด) และแทนที่ด้วยจำนวนการจับของกลุ่ม 2, 3 และ 4 นี่คือ regex แยกลง:

^((o)|(/o.)|(/-o-.)| )*
^                               start at the beginning of the string
 (                       )*     have any amount of Jimmy / spaces
     |       |         |        select one of:
  (o)                           capturing group 2 - dwarf
      (/o.)                   capturing group 3 - acrobat
              (/-o-.)         capturing group 4 - bodybuilder

เราต้องเริ่มต้นด้วย^หรือจุดสิ้นสุดของอินพุตถือว่าเป็นการจับคู่ด้วย ในไวยากรณ์การแทนที่ของ Retina $nอ้างอิงกลุ่มการจับภาพที่ n และตัวแก้ไข#นับจำนวนการจับคู่ที่ทำ


คุณสามารถบันทึกไบต์จำนวนหนึ่งโดยการหลีกเลี่ยงน้อยกว่าเนื่องจากสตริงรับประกันว่าจะเป็น jimmys เท่านั้น: ลองออนไลน์!
FryAmTheEggman

3

JavaScript ขนาด 55 ไบต์

ค้นหาสตริงโดยใช้รูปแบบการจับคู่ regex o, o-หรือo-\; เพิ่มจำนวนที่สอดคล้องกันในอาร์เรย์โดยใช้ความยาวของแต่ละคู่ที่ตรงกันเพื่อกำหนดดัชนี

s=>s.replace(/o-?\\?/g,m=>a[m.length-1]++,a=[0,0,0])&&a

ลองออนไลน์!


1
@JanathanAllan ฉันเขียนคำตอบของฉันอีกครั้ง
darrylyeo






1

Perl 5 -p , 41 ไบต์

$_=1*s/o(?!\\|-)//g.$".1*s|/o||g.$".y/o//

ลองออนไลน์!

นับจำนวนครั้งที่oปรากฏโดยไม่ต้องติดตาม\หรือ-ค้นหาคนแคระและลบออกจากสตริง จากนั้นนับจำนวนครั้งที่/oปรากฏขึ้นเพื่อค้นหากายกรรมและลบออกจากสตริง จากนั้นนับจำนวนoที่เหลือเพื่อตรวจสอบผู้สร้างร่างกาย แทรกช่องว่างระหว่างตัวเลขและแสดงผลลัพธ์โดยปริยาย



@NahuelFouilleul ไม่ทำงานหากมีดาวแคระอยู่ปลายแถว มันนับว่าเป็นผู้สร้างร่างกาย
Xcali

จริงมิฉะนั้นจะลบเพียง 4 ไบต์1*
Nahuel Fouilleul

@NahuelFouilleul ไม่ทำงานเช่นกัน หากมีตัวอย่างของประเภทที่ไม่มีมันจะออกผลลัพธ์อะไร ( undef) 0แทน
Xcali

ตกลงฉันเพิ่งดูกรณีทดสอบ
Nahuel Fouilleul


1

SNOBOL4 (CSNOBOL4) , 135 ไบต์

	I =INPUT
B	I '-o' =	:F(A)
	B =B + 1	:(B)
A	I '/o' =	:F(D)
	A =A + 1	:(A)
D	I 'o' =	:F(O)
	D =D + 1	:(D)
O	OUTPUT =+D ' ' +A ' ' +B
END

ลองออนไลน์!

ลบ-o, /oและoจากสตริงและเพิ่มทีละเคาน์เตอร์ที่เหมาะสมในแต่ละครั้ง ทิ้งแขนและขาไว้จำนวนมาก (/-\ , \และไม่มีอะไร)


0

มา (gforth) , 118 ไบต์

: c -rot 0 tuck do over i + c@ 3 pick = - loop nip nip ;
: f 2dup '/ c >r 2dup '- c 2/ -rot 'o c i - . r> over - . . ;

ลองออนไลน์!

คำอธิบาย

  • รับจำนวน/,-และoตัวอักษร
  • นักเพาะกายคือจำนวน -อักขระหารด้วย 2
  • Acrobat คือจำนวน /ตัวอักษรลบด้วยจำนวนผู้สร้างร่างกาย
  • ดาวแคระคือจำนวน oตัวอักษรลบด้วยจำนวน Acrobat และ Bodybuilders

รหัสคำอธิบาย

\ c counts the number of occurrences of the given character in a string
\ stack usage is ( c-addr u1 w1 - u )
: c                 \ start a new word definition
  -rot 0 tuck       \ sets up parameters for a counted loop
  do                \ loop from 0 to string-length - 1 (inclusive)
    over i +        \ get the address of the current character in the string
    c@              \ get the ascii value of the current character              
    3 pick =        \ compare it to the character we're counting
    -               \ subtract result from the accumulator (subtract because -1 = true in forth)
  loop              \ end the loop
  nip nip           \ remove extra values from the stack
;                   \ end the word definition

\ Main function 
: f                 \ start a new word definition
  2dup              \ duplicate the string address and length
  '/ c >r           \ count the number of '/' characters and stick the result on the return stack
  2dup '- c 2/      \ count the number of '-' characters and divide by 2
  -rot 'o c         \ move the string to the top of the stack and count the number of 'o characters
  i - .             \ calculate number of dwarf jimmy's and print
  r> over - .       \ calculate number of acrobat jimmy's and print (drop '/' count from return stack)
  .                 \ print number of body-builder jimmy's
;                   \ end word definition

0

05AB1E , 13 ไบต์

…-/oS¢ć;š0š¥R

อันนี้อาจเป็น12 ไบต์โดยการลบRถ้า[bodybuilder, acrobat, dwarf]ได้รับอนุญาตสั่งเอาท์พุทของ

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

ทางเลือกที่เท่าเทียมกันเล็กน้อยไบต์:

…-/oS¢R`;0)üα

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

คำอธิบาย:

…-/o           # Push string "-/o"
    S          # Split to a list of characters: ["-","/","o"]
     ¢         # Count the occurrence of each character in the (implicit) input-string
      ć        # Extract the head; pop and push head and remainder-list
       ;       # Halve this head
        š      # And prepend it back in front of the remainder-list
         0š    # Then also prepend a 0
           ¥   # Get the deltas (forward differences)
            R  # And reverse the list to get the required order of output-counts
               # (after which the result is output implicitly)

…-/oS¢         # Same as above
      R        # Reverse this list
       `       # Pop the list and push its values separately to the stack
        ;      # Halve the top value on the stack
         0     # Push a 0
          )    # Wrap all values on the stack into a list
           ü   # For each overlapping pair of values:
            α  #  Get the absolute difference between the two values
               # (after which the result is output implicitly)

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