รหัสใกล้กับความท้าทาย: การลงทะเบียน


15

นี่คือภาคต่อของความท้าทายนี้: รหัสใกล้กับความท้าทาย: ผลรวมของจำนวนเต็ม

ความท้าทายในเกมนี้ยากขึ้นเล็กน้อยและสร้างชื่อที่ยอดเยี่ยม (ซึ่งเป็นเหตุผลที่ฉันเลือกมัน):

คำนวณระยะทาง Levenshtein ระหว่างสองสาย

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

ดังนั้นตอนนี้สำหรับรายละเอียด!

โปรแกรมของคุณจะรับอินพุต 2 ตัวทั้งสองสตริงโดยไม่มีช่องว่างต่อท้ายหรือขึ้นบรรทัดใหม่และจะส่งออกระยะห่างระหว่าง Levenshtein ระยะทางของ Levenshtien ถูกกำหนดเป็นจำนวนของการเพิ่มการลบและการแทนที่ที่จำเป็นในการแปลงสตริงหนึ่งเป็นอีกสตริงหนึ่ง สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการคำนวณดูหน้า Wikipedia ที่ลิงก์ด้านบน เพื่อทดสอบว่าโปรแกรมของคุณใช้งานได้หรือไม่ให้ใช้เครื่องคิดเลขนี้ โปรแกรมของคุณต้องไม่แสดงผลอะไรนอกจากระยะทางของ Levenshtein ระหว่างสองสาย มันจะถูกตัดสิทธิ์หากมีสิ่งใดแสดงผล ตัวอย่าง I / O:

Inputs:
test
test2
Output:
1

Inputs:
222
515
Output:
3

Inputs:
Test
test
Output:
1

รหัสของคุณอาจไม่มีตัวเลือกหรือความคิดเห็น

คำตอบ:


9

Frinkระยะทาง 24

Calculate[the,Levenshtein]:=editDistance[the,Levenshtein]

print[]ใช้นี้คุณจะเรียกคำนวณกับสองสายและตั้งแต่นี้จะกลับมาคุณยังจำเป็นที่จะล้อมรอบด้วยการโทร หากไม่ได้รับอนุญาตคะแนนของฉันคือ 30

ตัวอย่าง:

Calculate["kitten","spork"]        -> returns 6
print[Calculate["kitten","spork"]] -> prints 6.

คุณต้องดาวน์โหลด Frink เนื่องจากเว็บล่ามไม่อนุญาตให้กำหนดฟังก์ชั่น ควรทำงานกับทุกระบบโดยพิจารณาว่าเป็นแอปเพล็ต Java ดาวน์โหลดคำแนะนำได้ที่นี่ .


Psst เฮ้! นี่คือการดำเนินการใน Levenshtein k=λ:Δ(ί,ί)สัญลักษณ์อะไรบางอย่างที่ผมทำงานเกี่ยวกับ:


3
ภาษาที่น่าสนใจทำให้ฉันนึกถึง Mathematica
Alex A.

สิ่งนี้นับว่าเป็นการใช้ฟังก์ชั่นในตัวเพื่อแก้ปัญหาความท้าทายซึ่งอาจถือได้ว่าเป็นช่องโหว่มาตรฐาน (แต่ดูเหมือนว่า90℅ของคำตอบทั้งหมดต่อความท้าทายนี้)
John Dvorak

1
@JanDvorak Built-ins เป็นพื้นที่สีเทาเนื่องจากการแบ่งคะแนนเสียงในรายชื่อ meta คำตอบในตัวเนื่องจากช่องโหว่มาตรฐานอยู่ใกล้ครึ่งครึ่ง
Alex A.

5

R, ระยะทาง 35

Calculate=function(the,Levenshtein)adist(between<-the,two<-Levenshtein)

นี้จะสร้างฟังก์ชั่นCalculateที่มีพารามิเตอร์และthe Levenshteinมันใช้ฟังก์ชั่น R ในadistการคำนวณระยะทาง พารามิเตอร์สตริงในadistเป็นหลักtheและLevenshteinเปลี่ยนชื่อและbetweentwo


5

PHP4.1, ระยะทาง 32 22 15 14

ธรรมดามากไม่มีอะไรน่าตื่นเต้น

<?=$Calculate_the=Levenshtein($distance,$between_two_strings);

หรือรุ่นที่สั้นกว่า:

<?=$ulatethe=Levenshtein($istance,$etweentwostrin);

เพื่อให้ใช้งานได้คุณต้องส่ง / ตั้งค่าตัวแปร POST / GET / COOKIE / เซสชันด้วยปุ่มต่างๆ:

  • distance( istanceสำหรับอันที่สั้นกว่า)
  • between_two_strings( etweentwostrinสำหรับอันที่สั้นกว่า)

อาร์กิวเมนต์อยู่ในลำดับที่

ทดสอบคะแนนในhttp://ideone.com/QzNZ8T

ตัวอย่าง:

http://localhost/distance.php?distance=string1&between_two_strings=string2

@AboveFire ขออภัย แต่ฉันไม่สามารถยอมรับการแก้ไขของคุณ การอ้างอิง OP: "Your code may not have no-ops or comments."และการแก้ไขของคุณเพียงเพิ่มความคิดเห็น HTML
Ismael Miguel

2

PHP, ระยะทาง 44

function Calculate($two,$strings){echo levenshtein($two,$strings);}

ใช้levenshteinฟังก์ชันในตัวจากไลบรารีมาตรฐานของ PHP และตั้งชื่ออาร์กิวเมนต์เพื่อพยายามลดระยะห่าง


1
มันไม่ควรจะเป็น$two,$strings?
Ismael Miguel

แน่นอนมันควร
永劫回帰

1
นอกจากนี้คุณจะพลาด;
อิสมาเอลมิเกล

ฉันเสนอวิธีแก้ปัญหาด้วยระยะทาง 28:echo$Calculate_the=levenshtein($_GET[distance_between_two],$_GET[strings]);
Ismael Miguel

2

พิพระยะทาง 50

ไม่ใช้ฟังก์ชัน Levenshtein ในตัว!

xINg?#JgMN[1+(fac:b@>1)1+(fe:a@>1b)(a@0NEb@0)+(fec)]

รหัสนี้ดำเนินrecursive Levenshtein อัลกอริทึม ; เช่นนี้ช้ามากใช้เวลาสองสามวินาทีแม้จะมีสายยาว 5 ฉันไม่แนะนำให้รันโปรแกรมด้วยตัวเองเพื่อตรวจสอบ!

นี่คือรหัสฐานของฉันพร้อมช่องว่างและความคิดเห็น:

; Note: a Pip program is an implicit function f, which is called with the command-line
; arguments. The args are stored in the list g, as well as being assigned to the local
; variables a-e.

; Is one of the args the empty string? (NB x is initialized to "")
x IN g ?
 ; If so, join args together and take the length (i.e., length of the non-empty string).
 # J g
 ; If not, take the min of the following:
 MN [
  ; Recursively call f with the first character of a removed; add 1 to the result
  (f a@>1 b) + 1
  ; Recursively call f with the first character of b removed; add 1 to the result
  (f a b@>1) + 1
  ; Recursively call f with the first characters of both removed; iff the two characters
  ; were not equal, add 1 to the result
  (f a@>1 b@>1) + (a@0 NE b@0)
 ]

การเปลี่ยนแปลงที่สำคัญในรุ่นสุดท้ายคือการกำหนดค่าบางอย่างให้กับตัวแปรชั่วคราวcและeซึ่งปรากฏในสตริงความท้าทายและทำให้ลดระยะทาง Levenshtein เล็กน้อย

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