ตัววัดสนามกอล์ฟรหัส© 2019


20

ตัววัดสนามกอล์ฟรหัส© 2019

Hexdumps ใช้กับxxdดูสิ่งนี้:

00000000: 666f 6f20 6261 7220 7370 616d 2065 6767  foo bar spam egg
00000010: 730a                                     s.

งานของคุณคือการแปลง hexdump ในรูปแบบนี้เป็นจำนวนไบต์ที่ใช้

กฎ:

  • ห้ามช่องโหว่ปกติ
  • นี่คือดังนั้นคำตอบที่ถูกต้องสั้นที่สุดในหน่วยไบต์ชนะ
  • คุณสามารถหรือไม่รวมบรรทัดใหม่ในตอนท้ายของข้อความ ( 0a) ซึ่งหมายความว่าหาก hexdump สิ้นสุดใน newline ( 0a) อินพุตนั้นอาจมีเอาต์พุตลดลงทีละหนึ่ง
  • อินพุตว่าง (ไม่มีอะไรแท้จริง: รายการว่าง / สตริง / ฯลฯ ) ต้องเอาท์พุท 0
  • สามารถป้อนข้อมูลในรูปแบบใดก็ได้
  • อินพุตจะเป็น ASCII ที่ถูกต้องโดยไม่มีตัวควบคุม
  • อินพุตต้องมีทั้ง hexdump

กรณีทดสอบ:

00000000: 4865 6c6c 6f2c 2077 6f72 6c64 2120 4865  Hello, world! He
00000010: 6c6c 6f2c 2077 6f72 6c64 210a            llo, world!.

ส่งคืน 28 หรือ 27

00000000: 0a                                       .

ส่งคืน 1 หรือ 0

00000000: 6368 616c 6c65 6e67 650a                 challenge.

ผลตอบแทน 10 หรือ 9

00000000: 4865 6c6c 6f2c 2077 6f72 6c64 21         Hello, world!

ผลตอบแทน 13


ส่งคืน 0 (นี่คือไม่มีอะไรแท้จริง: รายการที่ว่างเปล่า / สตริง / ฯลฯ )

คำอธิบายจะดีสำหรับภาษาที่ไม่ได้มาตรฐาน


เราขอสมมติให้อินพุตเป็น ascii ได้ไหม? มันมีตัวควบคุมได้ไหม? กฎการป้อนข้อมูลคืออะไร บางภาษาไม่สามารถจัดการอินพุตได้หลายบรรทัด เราสามารถรองบรรทัดสุดท้ายเพื่อให้ทุกบรรทัดยาวเท่ากันได้หรือไม่? เหตุใดจึงรวมอินพุตว่าง
Stewie Griffin

@StewieGriffin ใช่; ไม่มี; ใช่; เพราะถ้าxxdถูกป้อนสตริงว่างมันจะส่งผลอะไร
gadzooks02

1
@StewieGriffin คุณแก้ไขความคิดเห็นของคุณในขณะที่ฉันกำลังตอบรับดังนั้นนี่คือการขยายตัว: ใช่; ไม่มี สามารถป้อนข้อมูลได้ตามที่คุณต้องการ ดูคำตอบสุดท้าย ใช่; เพราะถ้า xxd ถูกป้อนด้วยสตริงว่างมันจะไม่ส่งผลอะไรเลย
gadzooks02

1
@JanathanAllan โอ้ใช่เห็นแล้ว
gadzooks02

1
การนับรูปแบบ hexdump ที่ไม่ได้รวมข้อมูล ASCIIfied ทางด้านขวาอาจน่าสนใจ ทุกคนไปด้วยการลอกส่วนฐานสิบหกและนับส่วนที่เหลือ หากความท้าทายคือการทำเช่นนี้ให้เพียงบรรทัดสุดท้ายของ hexdump ที่จะบังคับให้แยกเลขฐานสิบหก (ตำแหน่ง) เช่นเดียวกับการนับจำนวนตัวเลขฐานสิบหกในบรรทัดนั้น (เหมือนที่ฉันทำด้วยมือเมื่อมองไปที่การobjdumpถอดแยกชิ้นส่วนหรือnasmรายการเพื่อหาคำตอบของรหัสเครื่อง) ฉันเดาว่าฉันควรโพสต์สิ่งนั้นในกล่องทราย ...
Peter Cordes

คำตอบ:


12

เรติน่า 0.8.2 , 8 ไบต์

.{51}

.

ลองออนไลน์! คำอธิบาย:

.{51}

ลบตัวอักษร 51 ตัวแรกของแต่ละบรรทัด (บรรทัดสามารถมีได้ระหว่าง 52 ถึง 67 อักขระดังนั้นจึงตรงกับหนึ่งครั้งต่อบรรทัด)

.

นับอักขระที่ไม่ใช่บรรทัดใหม่ที่เหลืออยู่

7 ไบต์ถ้าไม่ต้องป้อนข้อมูลที่ว่างเปล่า:

.{52}


ลองออนไลน์! คำอธิบาย:

.{52}

ลบตัวอักษร 52 ตัวแรกของแต่ละบรรทัด (บรรทัดสามารถมีได้ระหว่าง 52 ถึง 67 อักขระดังนั้นจึงตรงกับหนึ่งครั้งต่อบรรทัด)


นับ 1 เกินจำนวนอักขระที่เหลืออยู่ (รวมถึงบรรทัดใหม่)


7 &`.{52}กับ
Grimmy

@Grimy นั่นเป็นเพียง ... เยี่ยมยอด ... คุณต้องโพสต์สิ่งนั้นเป็นคำตอบของคุณเอง
Neil

ตอนแรกฉันไม่ได้สังเกต แต่จริงๆแล้วมีคำตอบที่เหมือนกันเกือบหมดแล้ว
Grimmy



6

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

นี่จะนับจำนวนทั้งหมดของสตริงความยาวบรรทัดเดียว 52 ความเป็นไปได้ที่จะทำสิ่งที่คล้ายกัน%52,`.แต่ฉันไม่สามารถหาวิธีแก้ไขได้

w`.{52}

ลองออนไลน์!


1
นอกจากนี้: &`.{52}สำหรับ Retina 0.8.2
Grimmy

5

APL (Dyalog Extended) , 18 ไบต์

โปรแกรมเต็มรูปแบบ แจ้งให้สำหรับรายการของสตริง (เช่นรายการของตัวละคร)

2÷⍨≢∊(1↓≠⊆⊢)¨49↑¨⎕

ลองออนไลน์!

 รวดเร็ว

49↑¨ ใช้อักขระ 49 ตัวแรกจากแต่ละอักขระ

(... ใช้ฟังก์ชัน tacit ต่อไปนี้กับแต่ละรายการ:

 อาร์กิวเมนต์

 สับเข้าไปในการทำงานของตัวละครที่มี

 แตกต่างจากอักขระ padding (ช่องว่าง)

1↓ วาง "คำแรก"

ϵ รายการ (แผ่)

 นับ

2÷⍨ หารด้วยสอง


4

เยลลี่ 5 ไบต์

Ẉ_51S

ลิงก์ monadic ยอมรับรายการของบรรทัดที่ให้ผลนับจำนวนเต็ม

ลองออนไลน์!

อย่างไร?

Ẉ_51S - Link: list of lists of characters, H
Ẉ     - length of each (line in H)
  51  - literal fifty-one
 _    - subtract (vectorises)
    S - sum

คุณสามารถยอมรับรายการบรรทัด คุณต้องการเพิ่มคำอธิบายด้วยหรือไม่
gadzooks02

เอ่อเจ๋ง ๆ ดังนั้นการป้อนข้อมูลเปล่าจึงเป็นรายการว่างเปล่าหรือรายการที่มีบรรทัดว่างเปล่าเส้นเดียวหรือไม่? (สิ่งนี้ควรมีความชัดเจนในการโพสต์เนื่องจากเป็นกรณีขอบ)
Jonathan Allan

มันและรายการว่าง / สตริง / ฯลฯ ฉันเพิ่งอธิบายสิ่งนี้
gadzooks02

ขอขอบคุณคำอธิบายที่เพิ่มเข้ามาในตอนนี้เช่นกัน
Jonathan Allan

3

C (gcc) , 64 55 ไบต์

r;s[];f(l){while(*s=0,gets(s),l=strlen(s))r+=l-51;l=r;}

ลองออนไลน์!

9 ไบต์ถูกลบล้างขอบคุณ YSC!

นี่เป็นรุ่นที่บอบบางกว่าซึ่งได้แรงบันดาลใจจากโซลูชัน JavaScript ของ Arnauld ซึ่งอาจล้มเหลวสำหรับอินพุตที่ยาว:

C (gcc) , 50 ไบต์

s[];f(l){l=read(0,s,1<<31);l=l?l/68*16+l%68-51:0;}

ลองออนไลน์!


1
59 ไบต์โดยเปลี่ยนreturn rเป็นl=r
girobuz

2
@JonathanFrech พฤติกรรมที่ไม่ได้กำหนดเป็นสิ่งที่ดีสำหรับการเล่นกอล์ฟ
G. Sliepen

1
@YSC อืม แต่ฉันคิดว่าการสร้างโกลบอลจะเป็นการละเมิดกฎที่ว่าถ้าคุณกำหนดฟังก์ชั่นที่จะทำอะไรบางอย่าง (และไม่ใช่main) มันน่าจะเป็นไปได้ที่จะเรียกมันหลายครั้ง
G. Sliepen

1
ยังไงก็ตามr;s[];f(l){while(*s=0,gets(s),l=strlen(s))r+=l-51;l=r;}: 55 ไบต์ :)
YSC

2
@girobuz while()มีจำนวนไบต์เท่าfor(;;)กัน ดังนั้นจึงเป็นหนึ่งไบต์นานกว่า;while() for(;;)
Jonathan Frech

3

Python 3, 48 46 ไบต์

lambda s:(len(s)or 51)+1-52*len(s.split('\n'))

อินพุตถูกส่งผ่านเป็นสตริงไปยังฟังก์ชัน ฟังก์ชั่นจะเพิ่มความยาวของอินพุต (รวมถึงการขึ้นบรรทัดใหม่) จากนั้นลบ 52 สำหรับแต่ละบรรทัด

ลองออนไลน์


2
จากสิ่งที่ฉันได้เห็นf=สามารถย้ายไปยังส่วนหัวเป็น `f = 'เหลือแลมบ์ดาเป็นรหัสและบันทึกสองไบต์: ลองออนไลน์!
gadzooks02

@ gadzooks02 ขอบคุณจะแก้ไข นี่f=เป็นนิสัยที่ฉันเลือกจากเซิร์ฟเวอร์ความไม่ลงรอยกันของ Python
IFcoltransG



2

05AB1E , 8 6 ไบต์

€g51-O

ลองออนไลน์!

อินพุตเป็นรายการสตริง

€g     get lengths of each line
51-    subtract 51 from each
O      push the sum of the resulting list
       implicitly print

1
ขออภัยข้อมูลที่ป้อนต้องมีทั้ง hexdump (ขอข้ามตัวอักษรที่ส่วนท้ายของแต่ละบรรทัด)
gadzooks02

โอ้ฉันไม่ดี ฉันทำสิ่งนี้บนสมาร์ทโฟนของฉัน ไม่เห็นว่ามีบางอย่างอยู่ด้านหลังรหัสฐานสิบหก ฉันทำการแก้ไข
Dorian

2

ภาษาสูตร IBM / Lotus Notes ขนาด 53 ไบต์

@Sum(@Length(@Explode(@Right(@Left(i;"  ");": ")))/2)

ไม่มี TIO สำหรับสูตรดังนั้นนี่คือภาพหน้าจอของกรณีทดสอบ:

ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่

สูตรอยู่ในฟิลด์ที่คำนวณซึ่งให้ค่าหลังจาก "ส่งคืน"

คำอธิบาย

นี่เป็นการสาธิตที่ดีเกี่ยวกับวิธีที่สูตรจะใช้ฟังก์ชันซ้ำกับรายการโดยไม่จำเป็นต้องวนซ้ำ สูตรอยู่ในเขตข้อมูลที่คำนวณในรูปแบบเดียวกับเขตข้อมูลอินพุตที่สามารถแก้ไขได้ `i '

  1. เริ่มตรงกลาง @Leftและ@Rightอนุญาตให้ใช้ตัวคั่นสตริงหรือจำนวนอักขระ ดังนั้นเราจึงค้นหาทางด้านขวา:แล้วไปทางซ้ายของการเกิดครั้งแรกของสองช่องว่าง เนื่องจากสูตรเห็นบรรทัดใหม่เป็นตัวคั่นรายการมันจะใช้สิ่งนี้กับแต่ละบรรทัดในอินพุต
  2. @Explodeเป็นสูตรของเทียบเท่าของsplitฟังก์ชั่นและค่าเริ่มต้นให้กับพื้นที่หรือ, ;อีกครั้งมันถูกนำไปใช้กับแต่ละบรรทัดในสนาม แต่เวลานี้ผลที่ได้จะรวมกันเป็นรายการเดียว
  3. @Lengthจะถูกนำไปใช้กับสมาชิกแต่ละคนของรายการ ในแต่ละกรณีเราหารมันคือผลตอบแทนตาม 2
  4. @Sum รายการทั้งหมดและผลลัพธ์ที่ได้

1
คุณมีลิงค์ไปยังล่าม (ออนไลน์หรือดาวน์โหลด) หรือไม่?
gadzooks02

แต่น่าเสียดายที่ไม่ได้. สูตรเป็นภาษาที่เป็นกรรมสิทธิ์ซึ่งเชื่อมโยงกับผลิตภัณฑ์ของ IBM (ฉันเคยถาม Meta เมื่อนานมาแล้วว่าสิ่งนี้ได้รับอนุญาตบนเว็บไซต์นี้หรือไม่และคำตอบคือ "ใช่" แต่ไม่ใช่สำหรับความท้าทายของ Cops & Robbers) ครั้งล่าสุดที่ฉันดู Domino Designer (ซึ่งรองรับสูตร) ​​ยังคงมีให้ดาวน์โหลดฟรีจาก IBM น่าเสียดายที่ Windows เท่านั้นและเมื่อฉันรัน Linux ที่บ้านฉันไม่สามารถยืนยัน คำตอบนี้ถูกเขียนขึ้นในช่วงพักเที่ยงเนื่องจากฉันโชคร้ายพอที่จะรองรับแอพ Notes รุ่นเก่าและยังมีโน้ตบนเครื่องที่ทำงาน :-)
ElPedro

1
BTW ถ้าคุณค้นหา Lotus Notes ในเว็บไซต์นี้คุณจะพบว่าฉันเป็นคนเดียวที่โง่พอที่จะลองเล่นกอล์ฟในภาษานี้ :-)
ElPedro

1

JavaScript (ES6), 34 ไบต์

s=>(n=s.length)&&(n/68<<4)+n%68-51

ลองออนไลน์!

แสดงความคิดเห็น

s =>                // s = input string
  (n = s.length) && // n = length of s; return 0 right away if n = 0 (special case)
  (n / 68 << 4) +   // otherwise compute the number of full lines and multiply it by 16
  n % 68 - 51       // add the length of the last line minus 51





0

Zsh , 36 ไบต์

ด้วยค่าเริ่มต้นของ zsh:

for l (${(f)1})((c+=$#l-52))
<<<$[c]

ลองออนไลน์!

${(f)1}แยก$1ขึ้นบรรทัดใหม่และทิ้งบรรทัดว่างไว้ ยามกับกรณีที่ว่างเปล่าเมื่อวงไม่เคยกำหนด$[ arithmetic expansion ]$c

Zsh , 28 ไบต์

ด้วย-o extendedglob:

<<<${#${(F)${(f)1}#?(#c52)}}

ลองออนไลน์!

(f)แยกในการขึ้นบรรทัดใหม่${ #?(#c52)}ลบ 52 ตัวอักษรนำ(F)เข้าร่วมในการขึ้นบรรทัดใหม่เพื่อให้การนับเป็นตัวละครตามตัวอักษรแทนการฟังตามรายการ${# }ตัวละครนับ


0

asm2bf , 135 ไบต์

รุ่น Golfed:

lbl 3
mov r2,51
lbl 1
in_ r1
dec r2
jz_ r1,4
jnz r2,1
lbl 2
in_ r1
jz_ r1,4
sub r1,10
jz_ r1,3
inc r3
jmp 2
lbl 4
out r3

รุ่นที่แสดงความคิดเห็น:

lbl 3               ; Main loop - the kinda entry point

    mov r2, 51      ; Loop 51 times.
    lbl 1           ; Loop start.
        in_ r1      ; Read character
        dec r2      ; Decrement the loop accumulator.
        jz_ r1, 4   ; If zero was read, end.
        jnz r2, 1   ; If we still loop, loop again.

    lbl 2           ; Second loop, accumulating the result.
        in_ r1      ; Read a character.
        jz_ r1, 4   ; If character is zero, end the loop and print result.
        sub r1, 10  ; Decrement r1 by 10 for next check.
        jz_ r1, 3   ; If the character - 10 (the newline) is zero, jump to 3
        inc r3      ; Increment character read amount.
        jmp 2
lbl 4
    out r3          ; Print out the result as an ASCII character.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.