Code Billiards (Levenshtein golf)


24

Bạn phải sử dụng một ngôn ngữ để viết các chương trình thực hiện chín nhiệm vụ sau, theo bất kỳ thứ tự nào bạn muốn .

  • Chuyển đổi một số được nhập từ cơ sở 10 sang cơ sở 36.
    • Đầu vào mẫu: 1000
    • Đầu ra mẫu: RS(đầu ra phải là chữ hoa)
  • Chuyển đổi từng ký tự trong một chuỗi thành 10 mã ASCII thập phân cơ sở của nó và in các mã được nối với nhau.
    • Đầu vào mẫu: Scrambled 3GG5
    • Đầu ra mẫu: 839911497109981081011002051717153
  • Xác định xem một số nhập vào có chia hết cho 1738 không.
    • Trả về giá trị trung thực nếu có và giá trị giả nếu không.
  • Xác định nếu một chuỗi có chữ cái qtrong đó.
    • Trả về giá trị trung thực nếu có và giá trị giả nếu không.
  • Mã hóa một chuỗi các chữ cái được nhập với mật mã Caesar là +1.
    • Trường hợp phải được bảo quản. Các ký tự không phải chữ cái sẽ được in mà không sửa đổi.
    • Đầu vào mẫu: Good morning, World!
    • Đầu ra mẫu: Hppe npsojoh, Xpsme!
  • Tìm và in tổng các thừa số nguyên tố của một số.
    • Đầu vào mẫu: 1320
    • Đầu ra mẫu: 21
  • In PPCG.
  • In các nsố nguyên dương đầu tiên chia hết cho floor(sqrt(n)).
    • n là một số nguyên được nhập.
  • Thay thế mọi oOtrong một chuỗi nhập bằng .
    • Đầu vào mẫu: Onomatopoeia
    • Đầu ra mẫu: ಠnಠmatಠpಠeia

Bạn sẽ nhận thấy rằng thách thức này là Code Billiards, không Code Golf. Mục tiêu của thử thách này, giống như trong bi-a, là thiết lập mã của bạn để nó chỉ có thể được sửa đổi một chút cho thử thách tiếp theo. Đây là lý do tại sao các chương trình của bạn không phải giải quyết các nhiệm vụ trên theo thứ tự.

Điểm của bạn được xác định như sau

  • Điểm của bạn tăng lên theo 1từng byte trong các chương trình của bạn.
  • Điểm của bạn tăng lên floor(n^(1.5))nếu hai chương trình liên tiếp có khoảng cách Levenshtein là n. Ví dụ: nếu chương trình đầu tiên của bạn là potatovà chương trình thứ hai của bạn là taters, điểm của bạn tăng 12 cho 12 byte và by 11= floor(5^(1.5))cho khoảng cách Levenshtein là 5.

Mục tiêu của thử thách này là có điểm càng thấp càng tốt sau khi tất cả chín chương trình đã được viết. Quy tắc CG tiêu chuẩn được áp dụng.


Để xem bảng xếp hạng, nhấp vào "Hiển thị đoạn mã", cuộn xuống dưới cùng và nhấp vào "► Chạy đoạn mã". Đoạn trích được thực hiện bởi Trình tối ưu hóa.


1
Whoa ... tôi thực sự có ý tưởng CHÍNH XÁC cho một thử thách tối qua. Thật kỳ lạ ...
ETHproductions

@ETHproductions Tôi cũng có ý tưởng tối qua, và đã viết một cái gì đó về nó trên Sandbox. Ý tưởng của bạn đến từ đó? Nếu không, sự trùng hợp thực sự buồn cười.
Arcturus

1
Không, tôi có ý tưởng khi tôi đang trên đường đi ngủ. Không thấy bài viết của bạn cả! Tôi đoán đây là một ví dụ về "những người chơi golf có suy nghĩ giống nhau";)
ETHproductions

Khoảng cách Levenshtein của và là agì? Là 1 (tính là 1 char) hay 2 (vì thực tế là 2 byte)?
Jakube

1
@Mego Đây là một thuật toán nhanh hơn. :) Ngoài ra, bạn có thể chưa thấy điều này, nhưng trong câu trả lời của tôi là một đoạn mã tự động sắp xếp các chương trình theo thứ tự tối ưu và nó cũng sử dụng thuật toán siêu nhanh.
Sản xuất ETH

Câu trả lời:


8

Japt , 886 866 766 725 688 669

Nhiệm vụ 5 và 6 là kẻ giết người. Có lẽ có những cách ngắn hơn để hoàn thành chúng. Tôi nghĩ rằng khoảng cách Levenshtein vẫn có thể được giảm là tốt.

  • Nhiệm vụ 3 (divisiblity): !(U%#ۊ
    7 byte (arabic char làm rối loạn căn chỉnh)
  • Nhiệm vụ 4 (kiểm tra 'q'): U!=Uk'q7 byte, dist 11
  • Nhiệm vụ 1 (chuyển đổi cơ sở): Us36 u6 byte, dist 14
  • Nhiệm vụ 2 (mã ASCII): UmX=>Xc7 byte, dist 14
  • Nhiệm vụ 7 (tự mình xem): "PPCG"6 byte, dist 18
  • Nhiệm vụ 9 (thay thế): Ur"[Oo]",'ಠ13 byte, dist 27
  • Nhiệm vụ 8 (tầng (sqrt (n))): X=Uq f;XoU*X+1,X16 byte, dist 52
  • Nhiệm vụ 6 (tổng thừa số nguyên tố): 2oU fX=>2oX eY=>X%Y &&!(U%X)r(X,Y =>X+Y39 byte, dist 172
  • Nhiệm vụ 5 (Mật mã Caesar): UmX=>128o mY=>Yd)a k'A i#Z,'A k'a i#z,'a gXc44 byte, dist 216

Đây là một đoạn sẽ cho bạn biết (một trong) những cách hiệu quả nhất để sắp xếp các chương trình của bạn:

Với phiên bản mới nhất của Japt (không cạnh tranh trong thử thách này), hầu hết các nhiệm vụ đều ngắn hơn:

  • Nhiệm vụ 1: s36 u5 byte
  • Nhiệm vụ 2: mc2 byte
  • Nhiệm vụ 3: v#ۊ
    4 byte
  • Nhiệm vụ 4: oq2 byte
  • Nhiệm vụ 5: ;B±B+C²UrF,@Bg1+BbX19 byte
  • Nhiệm vụ 6: k â x5 byte
  • Nhiệm vụ 7: "PPCG5 byte
  • Nhiệm vụ 8: B=U¬f)oU*B+1B13 byte
  • Nhiệm vụ 9: ro'ಠ'i6 byte

Thứ tự tối ưu bây giờ là 2,4,3,1,6,7,9,8,5, đến với số điểm khổng lồ là 217 , ít hơn một phần ba so với ban đầu!

Đề nghị chào mừng!


7

Pyth, điểm 489

Chuyển đổi cơ sở: 15

s@L+s`MTrG1jQ36

Mật mã Caesar: 13 + 11 ^ 1.5

u.rGHrBG1z 36

Chia hết cho 1738: 7 + 11 ^ 1.5

!%Q1738

Số nguyên dương N đầu tiên: 8 + 8 ^ 1,5

*Rs@Q2SQ

Tổng các thừa số nguyên tố: 4 + 6 ^ 1,5

s{PQ

Xuất hiện của q trong chuỗi: 4 + 4 ^ 1.5

}\qz

Tham gia tất cả các mã ASCII: 5 + 4 ^ 1.5

jkCMz

In "PPCG": 5 + 5 ^ 1.5

"PPCG

Thay thế bằng : 9 + 7 ^ 1.5

Xz"oO"\ಠ

3

Ruby, 1488

Có lẽ rất nhiều phòng để cải thiện ở đây. Dành phần lớn thời gian để tính điểm ...

Tổng các thừa số nguyên tố : 64
require'prime';p gets.to_i.prime_division.reduce(0){|s,a|s+a[0]}
Cơ sở 36 : 30 + 47 1,5 = 352
puts gets.to_i.to_s(36).upcase
Chia hết cho 1738 : 22 + 15 1.5 = 80
puts gets.to_i%1738==0
In PPCG : 9 + 18 1.5 = 85
puts:PPCG
Chuỗi có chứa q? : 10 + 8 1,5 = 32
p gets[?q]
Thay thếo : 23 + 16 1.5 = 87
puts gets.gsub(/o/i,?ಠ)
Mật mã Ceasar : 32 + 21 1.5 = 128
puts gets.tr 'A-Za-z','B-ZAb-za'
Mã ASCII : 37 + 26 1.5 = 169
puts gets.chomp.chars.map(&:ord).join
Số nguyên chia hết cho căn bậc hai : 72 + 56 1.5 = 491
puts *(1..1/0.0).lazy.select{|i|i%Math.sqrt(i).floor==0}.take(gets.to_i)

Bạn có thể nhận được một sự cải thiện nếu bạn chuyển đổi các chương trình của mình sang lambdas
Không phải Charles

3

Java, điểm 831

Khoảng cách levenshtein đang giết chết điểm số của tôi ở đây.

(Các chương trình này lấy đầu vào làm đối số dòng lệnh)

Chương trình 1 (119):

class L{public static void main(String[]a){System.out.print(Integer.toString(Integer.parseInt(a[0]),36).toUpperCase());}}

Chương trình 2 (120 + 56 1.5 = 539):

class L{public static void main(String[]a){/*System.out.print*/for(char b:a[0].toCharArray())System.out.print((int)b);}}

Chương trình 3 (101 + 49 1.5 = 444):

class L{public static void main(String[]a){System.out.print/*for*/(Integer.parseInt(a[0])%1738==0);}}

Chương trình 4 (108 + 20 1.5 = 197):

class L{public static void main(String[]a){System.out.print(/*forInteger.parseInt(*/a[0].indexOf('q')>=0);}}

Chương trình 5 (186 + 107 1.5 = 1293):

class L{public static void main(String[]a){for(char b:a[0].toCharArray())System.out.print(Character.isLetter(b)?Character.isUpperCase(b)?b>'Y'?'A':(char)(b+1):b>'y'?'a':(char)(b+1):b);}}

Chương trình 6 (327 + 228 1.5 = 3747):

class L{public static void main(String[]a){int i,k=0,j=i=Integer.parseInt(a[0]);for(;i>0;i--)if(p(i)&&j%i==0)k+=i;System.out.print(k);}static boolean p(int n){if(n<2)return 0>0;if(n==2||n==3)return 1>0;if(n%2==0||n%3==0)return 0>0;int i,k=(int)Math.sqrt(n)+1;for(i=6;i<=k;i+=6)if(n%(i-1)==0||n%(i+1)==0)return 0>0;return 1>0;}}

Chương trình 7 (336 + 10 1.5 = 368)

class L{public static void main(String[]a){/*int i,k=0,j=i=Integer.parseInt(a[0]);for(;i>0;i--)if(p(i)&&j%i==0)k+=i;*/System.out.print("PPCG");}static boolean p(int n){if(n<2)return 0>0;if(n==2||n==3)return 1>0;if(n%2==0||n%3==0)return 0>0;int i,k=(int)Math.sqrt(n)+1;for(i=6;i<=k;i+=6)if(n%(i-1)==0||n%(i+1)==0)return 0>0;return 1>0;}}

Chương trình 8 (351 + 34 1.5 = 549):

class L{public static void main(String[]a){int i,k=1,j=(int)Math.sqrt(i=Integer.parseInt(a[0]));for(;k<i;k++)/*if(p(i)&&j%i==0)k+=i;*/System.out.println(j*k);}static boolean p(int n){if(n<2)return 0>0;if(n==2||n==3)return 1>0;if(n%2==0||n%3==0)return 0>0;int i,k=(int)Math.sqrt(n)+1;for(i=6;i<=k;i+=6)if(n%(i-1)==0||n%(i+1)==0)return 0>0;return 1>0;}}

Chương trình 9 (305 + 84 1.5 = 1075):

class L{public static void main(String[]a){int i,k=1,j=0;System.out.print(a[0].replaceAll("o|O",""+(char)3232));}static boolean p(int n){if(n<2)return 0>0;if(n==2||n==3)return 1>0;if(n%2==0||n%3==0)return 0>0;int i,k=(int)Math.sqrt(n)+1;for(i=6;i<=k;i+=6)if(n%(i-1)==0||n%(i+1)==0)return 0>0;return 1>0;}}

3
Đó là Java. Bạn không nên mong đợi một số điểm ngắn ...;)
kirbyfan64sos

giao diện l {static void main (Chuỗi ...
Rohan Jhunjhunwala

1

Pyth, điểm 817

số 1: 24

Jjk+UTrG1VjKvz36=+k@JN;k

số 2: (9 + 16 1.5 = 73)

Vz=+kCN;k

số 3: (5 + 8 1,5 = 27)

/QC"ۊ

số 4: (5 + 14 1.5 = 57)

hxz\q

số 5: (39 + 37 1,5 = 264)

J+GrG1VzIhxJNKChCNIhxJKpK)EpC-CK26))EpN

số 6: (4 + 39 1,5 = 247)

s{PQ

số 7: (5 + 4 1,5 = 13)

"PPCG

số 8: (12 + 12 1,5 = 53)

VK/@Q2 1*KhN

số 9 (13 + 13 1.5 = 59)

j\ಠcj\ಠcz\o\O

Không phải là tốt nhất, tôi mới bắt đầu học pyth ngày hôm nay và nghĩ rằng tôi sẽ thử, số 5 thực sự đã giết chết điểm số của tôi, tôi nghĩ rằng tôi có thể rút ngắn một vài trong số chúng nhưng điều đó sẽ làm tôi đau hơn về khoảng cách. Bất kỳ lời khuyên từ người dùng pyth có kinh nghiệm hơn được đánh giá cao.


Số 6 là thứ thực sự giết chết điểm số của tôi. Chà, số 5, 6 và 9.
SuperJedi224

@ SuperJedi224 Bạn có thể thay đổi thứ tự của các chương trình. Ví dụ, chuyển đổi 5 và 7 ở đây sẽ giảm điểm một chút.
Arcturus

@Eridan Chờ đã, bạn có thể làm điều đó? Tôi đoán tôi sẽ làm điều đó chiều nay.
SuperJedi224

@ SuperJedi224 You must use one language to write programs that perform the following nine tasks, in any order.Chúc may mắn!
Arcturus

3
5 + 14^1.5không phải là 19
Jakube

-1

Python 3 (hiện không hợp lệ), 621 byte

from numpy import base_repr
import math
print(base_repr(int(input()),36))
print("".join([str(ord(c)) for c in input()]))
if int(input())%1738 == 0:print(True)
else:print(False)
if "q" in input().lower():print(True)
else:print(False)
t=bytes.maketrans(b"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",b"bcdefghijklmnopqrstuvwxyzaBCDEFGHIJKLMNOPQRSTUVWXYZA")
print(input().encode("utf-8").translate(t).decode("utf-8"))
print("PPCG")
n=int(input())
for i in range(1,n):
    if i%math.floor(i**0.5)==0:print(i,end=" ")
print("")
y=input()
z=""
for i in y:
    if i.lower()=="o":z+="0"
    else:z+=i
print(z)

Không thực sự là mã tốt nhưng phần nào hoạt động: D. Tổng các yếu tố chính không hoạt động. Tôi luôn nhận được một kết quả khác với ví dụ của bạn vì vậy tôi đã xóa nó. Ngoài ra Python không hỗ trợ char nên thay vào đó, nó thay thế os bằng 0s

THÔNG TIN IO:

Đầu vào thứ 1: int trong cơ sở 10 | Đầu ra: số đó trong cơ sở 36

Đầu vào thứ 2: một chuỗi | Đầu ra: số ascii của chuỗi

Đầu vào thứ 3: số nguyên | Đầu ra: Đúng hay Sai tùy theo số có thể chia cho 1738 không

Đầu vào thứ 4: chuỗi | Đầu ra: T hoặc F tùy thuộc vào việc chuỗi có "q" trong đó không

Đầu vào thứ 5: chuỗi | Đầu ra: Mật mã Caser +1 của chuỗi

Thứ 6: chỉ in "PPCG" theo nghĩa đen

Đầu vào thứ 7: int n | Đầu ra: n đầu tiên chia hết cho sàn (sqrt (n))

Đầu vào thứ 8: chuỗi | Đầu ra: Đã thay thế tất cả os bằng 0 (không phải bằng vì python không hỗ trợ ký tự đó, đừng quá tức giận :))


Ồ, vâng. Bạn có thể vui lòng giải thích cơ bản về tính toán các thừa số nguyên tố không vì tôi luôn nhận được kết quả khác với kết quả trong ví dụ của bạn.
Ciprum

13
Chào mừng bạn đến với Câu đố lập trình và Code Golf! Điều này không hoàn toàn đáp ứng các yêu cầu của thử thách vì thử thách đang yêu cầu một chương trình khác nhau cho mỗi nhiệm vụ. Ngoài ra, bạn sẽ cần tuân theo các quy tắc tính điểm cho thử thách này, đặc biệt lưu ý chức năng khoảng cách Levenshtein.
admBorkBork

3
Python không hỗ trợ, chỉ cần đặt au trước chuỗi. u "ಠ_ಠ" <- như thế này
DJgamer98
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.