코드 당구 (Levenshtein golf)


24

원하는 순서대로 다음 9 가지 작업을 수행하는 프로그램을 작성하려면 한 언어를 사용해야합니다 .

  • 입력 한 숫자를 밑 10에서 밑 36으로 변환합니다.
    • 샘플 입력 : 1000
    • 샘플 출력 : RS(출력은 대문자 여야 함)
  • 문자열의 각 문자를 기본 10 진수 10 진수 ASCII 코드로 변환하고 함께 연결된 코드를 인쇄하십시오.
    • 샘플 입력 : Scrambled 3GG5
    • 샘플 출력 : 839911497109981081011002051717153
  • 입력 한 숫자를 1738로 나눌 수 있는지 확인하십시오.
    • 정확한 값이면 거짓 값을, 그렇지 않으면 거짓 값을 반환합니다.
  • 문자열에 문자가 있는지 확인 q하십시오.
    • 값이 맞으면 틀린 값을 반환하고 그렇지 않으면 거짓 값을 반환합니다.
  • 입력 한 문자열을 시저 암호 +1로 인코딩합니다.
    • 케이스는 보존해야합니다. 문자가 아닌 문자는 수정없이 인쇄됩니다.
    • 샘플 입력 : Good morning, World!
    • 샘플 출력 : Hppe npsojoh, Xpsme!
  • 숫자의 소인수의 합을 찾아서 인쇄하십시오.
    • 샘플 입력 : 1320
    • 샘플 출력 : 21
  • 인쇄 PPCG.
  • n로 나눌 수 있는 첫 번째 양의 정수를 인쇄하십시오 floor(sqrt(n)).
    • n 입력 된 정수입니다.
  • 모든 교체 oO가진 입력 된 문자열 .
    • 샘플 입력 : Onomatopoeia
    • 샘플 출력 : ಠnಠmatಠpಠeia

당신은이 도전이 Code Billiards아니라는 것을 알게 될 것 Code Golf입니다. 당구와 같이이 도전의 목표는 다음 도전을 위해 약간만 수정할 수 있도록 코드를 설정하는 것입니다. 그렇기 때문에 프로그램이 위의 작업을 순서대로 해결하지 않아도됩니다.

당신의 점수는 다음과 같이 결정됩니다

  • 당신의 점수는 1프로그램의 각 바이트마다 올라갑니다 .
  • floor(n^(1.5))두 개의 연속 프로그램이 Levenshtein 거리가 인 경우 점수가 올라갑니다 n. 첫 번째 프로그램입니다 예를 들어 potato당신의 두 번째 프로그램은 taters, 당신의 점수는 12 바이트 (12)에 의해 상승 11= floor(5^(1.5))5의 Levenshtein의 거리.

이 과제의 목표는 9 개의 프로그램이 모두 작성된 후 가능한 한 낮은 점수를받는 것입니다. 표준 CG 규칙이 적용됩니다.


리더 보드를 보려면 "코드 스 니펫 표시"를 클릭하고 맨 아래로 스크롤 한 다음 "► 코드 스 니펫 실행"을 클릭하십시오. 옵티마이 저가 작성한 스 니펫.


1
우와 .. 어제 말 그대로 도전에 대해 정확히 같은 생각을 했어요. 얼마나 이상한 ...
ETHproductions

@ETHproductions 어제 밤에 아이디어를 얻었고 샌드 박스에 그것에 대해 뭔가를 썼습니다. 거기서 아이디어가 나왔습니까? 그렇지 않다면 우연의 일치는 정말 재밌습니다.
Arcturus

1
아니, 잠자리에 들었을 때 나는 생각을했다. 게시물을 전혀 보지 못했습니다! 나는 이것이 "code-golf minds
like like

의 Levenshtein 거리 무엇 a? 1 (1 자로 계산 ) 또는 2 ( 실제로 2 바이트 이므로 )입니까?
Jakube

1
@Mego 더 빠른 알고리즘이 있습니다. :) 또한, 당신은 이것을 보지 못했을 수도 있지만, 내 대답에는 프로그램을 최적의 순서로 자동 정렬하는 코드 조각이 있으며 초고속 알고리즘도 사용합니다.
ETHproductions

답변:


8

JAPT , 886 866 766 725 688 669

작업 5와 6은 살인자입니다. 아마도 더 짧은 방법이있을 것입니다. 레 벤슈 테인 거리는 여전히 줄어들 수 있다고 생각합니다.

  • 작업 3 (이 분성) : !(U%#ۊ
    7 바이트 (아랍어 문자 정렬 정렬)
  • 작업 4 ( 'q'확인) : U!=Uk'q7 바이트, dist 11
  • 작업 1 (기본 변환) : Us36 u6 바이트, dist 14
  • 작업 2 (ASCII 코드) : UmX=>Xc7 바이트, dist 14
  • 작업 7 (직접 참조) : "PPCG"6 바이트, dist 18
  • 작업 9 (ಠ 교체) : Ur"[Oo]",'ಠ13 바이트, dist 27
  • 작업 8 (floor (sqrt (n))) : X=Uq f;XoU*X+1,X16 바이트, dist 52
  • 작업 6 (prime factor sum) : 2oU fX=>2oX eY=>X%Y &&!(U%X)r(X,Y =>X+Y39 바이트, dist 172
  • 작업 5 (Caesar 암호) : UmX=>128o mY=>Yd)a k'A i#Z,'A k'a i#z,'a gXc44 바이트, dist 216

다음은 프로그램을 구성하는 가장 효율적인 방법 중 하나를 알려주는 스 니펫입니다.

으로 JAPT의 최신 버전 (이 문제에 비 경쟁), 대부분의 작업은 짧아 :

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

최적의 순서는 이제 2,4,3,1,6,7,9,8,5 이며, 원래 점수의 3 분의 1보다 작은 217 점에 도달합니다 !

제안을 환영합니다!


7

파이스, 489 점

기본 전환 : 15

s@L+s`MTrG1jQ36

시저 암호 : 13 + 11 ^ 1.5

u.rGHrBG1z 36

1738로 나눌 수 있음 : 7 + 11 ^ 1.5

!%Q1738

첫 번째 N 양의 정수 : 8 + 8 ^ 1.5

*Rs@Q2SQ

소인수의 합 : 4 + 6 ^ 1.5

s{PQ

문자열에서 q의 모양 : 4 + 4 ^ 1.5

}\qz

모든 ASCII 코드를 결합하십시오 : 5 + 4 ^ 1.5

jkCMz

"PPCG"인쇄 : 5 + 5 ^ 1.5

"PPCG

다음으로 교체 : 9 + 7 ^ 1.5

Xz"oO"\ಠ

3

루비, 1488

아마도 개선의 여지가 많이 있습니다. 점수를 계산하는 데 대부분의 시간을 보냈습니다 ...

소인수의 합 : 64
require'prime';p gets.to_i.prime_division.reduce(0){|s,a|s+a[0]}
베이스 36:30 + 47 1.5 = 352
puts gets.to_i.to_s(36).upcase
1738로 나눌 수 있음 : 22 + 15 1.5 = 80
puts gets.to_i%1738==0
PPCG 인쇄 : 9 + 18 1.5 = 85
puts:PPCG
문자열에 q?가 포함되어 있습니까? : 10 + 8 1.5 = 32
p gets[?q]
교체o : 23 + 16 1.5 = 87
puts gets.gsub(/o/i,?ಠ)
시저 암호 : 32 + 21 1.5 = 128
puts gets.tr 'A-Za-z','B-ZAb-za'
ASCII 코드 : 37 + 26 1.5 = 169
puts gets.chomp.chars.map(&:ord).join
제곱근으로 나눌 수있는 정수 : 72 + 56 1.5 = 491
puts *(1..1/0.0).lazy.select{|i|i%Math.sqrt(i).floor==0}.take(gets.to_i)

프로그램을 람다로 변환하면 개선 될 수 있습니다.
Charles가 아닙니다.

3

자바, 8331 점

그들 levenshtein 거리는 여기 내 점수를 죽이고있다

(이러한 프로그램은 입력을 명령 행 인수로 사용합니다)

프로그램 1 (119) :

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

프로그램 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);}}

프로그램 3 (101 + 49 1.5 = 444) :

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

프로그램 4 (108 + 20 1.5 = 197) :

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

프로그램 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);}}

프로그램 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;}}

프로그램 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;}}

프로그램 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;}}

프로그램 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
자바입니다. 짧은 점수를 기 대해서는 안됩니다 ...;)
kirbyfan64sos

interface l {static void main (String ...
Rohan Jhunjhunwala

1

파이스, 817 점

번호 1:24

Jjk+UTrG1VjKvz36=+k@JN;k

2 번 : (9 + 16 1.5 = 73)

Vz=+kCN;k

3 번 : (5 + 8 1.5 = 27)

/QC"ۊ

4 번 : (5 + 14 1.5 = 57)

hxz\q

5 번 : (39 + 37 1.5 = 264)

J+GrG1VzIhxJNKChCNIhxJKpK)EpC-CK26))EpN

6 번 : (4 + 39 1.5 = 247)

s{PQ

7 번 : (5 + 4 1.5 = 13)

"PPCG

8 번 : (12 + 12 1.5 = 53)

VK/@Q2 1*KhN

숫자 9 (13 + 13 1.5 = 59)

j\ಠcj\ಠcz\o\O

가장 좋은 것은 아닙니다. 저는 오늘 pyth를 배우기 시작했고 시험해 보겠다고 생각했습니다. 5 번은 실제로 내 점수를 죽였습니다. 그중 몇 개를 더 짧게 얻을 수 있다고 생각합니다. 더 숙련 된 pyth 사용자의 모든 팁을 부탁드립니다.


번호 6은 실제로 내 점수를 죽인 것입니다. 음, 5, 6, 9 번.
SuperJedi224

@ SuperJedi224 프로그램 순서를 변경할 수 있습니다. 예를 들어, 여기서 5와 7을 전환하면 점수가 약간 낮아집니다.
Arcturus

@Eridan 잠깐만 요, 그렇게 할 수 있습니까? 오늘 오후에 그렇게 할 것 같아요.
SuperJedi224

@ SuperJedi224 You must use one language to write programs that perform the following nine tasks, in any order.행운을 빈다!
Arcturus

3
5 + 14^1.519시
Jakube

-1

Python 3 (현재 유효하지 않음), 621 바이트

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)

실제로 좋은 코드는 아니지만 다소 작동합니다. : D. 소인수의 합이 작동하지 않습니다. 나는 항상 예제에서 다른 결과를 얻으므로 제거했습니다. 또한 파이썬은 char을 지원하지 않으므로 대신 os를 0s로 바꿉니다.

IO 정보 :

첫 번째 입력 : 기본 10의 int | 출력 : 기본 36의 숫자

두 번째 입력 : 문자열 | 출력 : 문자열의 ASCII 숫자

세 번째 입력 : 정수 | 출력 : 숫자를 1738로 나눌 수 있는지에 따라 True 또는 False

네 번째 입력 : 문자열 | 출력 : 문자열에 "q"가 있는지 여부에 따라 T 또는 F

다섯 번째 입력 : 문자열 | 출력 : 문자열의 Caser Cipher +1

여섯째 : 문자 그대로 "PPCG"를 인쇄합니다.

일곱 번째 입력 : int n | 출력 : 바닥으로 나눌 수있는 첫 번째 n 정수 (sqrt (n))

8 번째 입력 : 문자열 | 출력 : 모든 os를 0으로 바꿨습니다 (파이썬은 해당 문자를 지원하지 않으므로 너무 화 내지 않기 때문에 with이 아님).


오 예. 나는 항상 귀하의 예와 다른 결과를 얻으므로 주요 요소 계산에 대한 기본 설명을 수행 할 수 있습니까?
Ciprum

13
프로그래밍 퍼즐과 코드 골프에 오신 것을 환영합니다! 도전 과제는 각 작업마다 다른 프로그램을 요청하기 때문에 도전 과제의 요구 사항을 충족하지 못합니다. 또한이 도전에 대한 점수 규칙, 특히 레 벤슈 테인 거리 기능에 유의해야합니다.
AdmBorkBork

3
파이썬은 ಠ를 지원합니다. 문자열 앞에 au를 넣으십시오. u "ಠ_ಠ"<-like this
DJgamer98
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.