台球(Levenshtein高尔夫)


24

您必须使用一种语言来编写可以按任意顺序执行以下九项任务的程序。

  • 将输入的数字从10转换为36。
    • 输入样例: 1000
    • 样本输出:(RS输出必须为大写)
  • 将字符串中的每个字符转换为其基数为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,而对于Levenshtein距离为5 ,得分上升11= floor(5^(1.5))

挑战的目的是在编写完所有九个程序之后使分数尽可能低。适用标准CG规则。


要查看排行榜,请单击“显示代码段”,滚动到底部,然后单击“►运行代码段”。优化程序制作的代码段。


1
哇...昨晚我真的对挑战同样有主意。多么奇怪...
ETHproductions 2015年

@ETHproductions昨晚我也有这个主意,并在Sandbox上写了一些有关它的内容。您的想法来自那里吗?如果不是这样,那么巧合真的很有趣。
Arcturus

1
不,我在上床的路上有一个主意。根本没有看到您的帖子!我想这是“代码高尔夫球专家的想法相同”的一个示例;)
ETHproductions 2015年

什么是的莱文斯坦距离a?是1(算作1个字符)还是2(因为实际上是2个字节)?
雅库布2015年

1
@Mego 这是一个更快的算法。:)另外,您可能还没有看到过,但是在我的回答中,是一个片段,该片段以最佳顺序自动排列程序,并且它也使用了超快速算法。
ETHproductions 2015年

Answers:


8

Japt886 866 766 725 688 669

任务5和6是杀手.。也许有完成它们的捷径。我认为Levenshtein距离也可以减少。

  • 任务3(可区分性):!(U%#ۊ
    7个字节(阿拉伯字符弄乱了对齐方式)
  • 任务4(“ q”检查):U!=Uk'q7个字节,分配11
  • 任务1(基本转换):Us36 u6个字节,距离14
  • 任务2(ASCII码):UmX=>Xc7个字节,距离14
  • 任务7(自己动手做):"PPCG"6个字节,距离18
  • 任务9(ಠ替换):Ur"[Oo]",'ಠ13个字节,dist 27
  • 任务8(floor(sqrt(n))):X=Uq f;XoU*X+1,X16个字节,dist 52
  • 任务6(素数和):2oU fX=>2oX eY=>X%Y &&!(U%X)r(X,Y =>X+Y39个字节,距离172
  • 任务5(凯撒密码):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个字节
  • 任务;B±B+C²UrF,@Bg1+BbX5:19个字节
  • 任务6:k â x5个字节
  • 任务7:"PPCG5个字节
  • 任务8:13 B=U¬f)oU*B+1B个字节
  • 任务9:ro'ಠ'i6个字节

现在,最佳顺序为2,4,3,1,6,7,9,8,5,得分高达217,不到原始分数的三分之一!

建议欢迎!


7

Pyth,得分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,?ಠ)
as撒密码: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)

如果您将程序转换为lambda,则可能会有所改善
并不是Charles

3

Java,得分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
是Java。您不应该期望得分
太低

接口l {static void main(String ...
Rohan Jhunjhunwala

1

Pyth,得分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.5不是19
Jakube 2015年

-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。主要因素的总和不起作用。我总是从您的示例中得到不同的结果,因此将其删除。此外,Python不支持char,因此将os 替换为0s

IO信息:

第一个输入:以10为底的整数| 输出:以36为底的数字

第二个输入:字符串| 输出:字符串的ASCII码

第3个输入:整数| 输出:True或False,取决于数字是否可以被1738整除

第4个输入:字符串| 输出:T或F,取决于字符串中是否包含“ q”

第5个输入:字符串| 输出:字符串的Caser Cipher +1

第六:只是按字面意思打印“ PPCG”

第7个输入:int n | 输出:前n个可以被整除的整数(sqrt(n))

第8个输入:字符串| 输出:将所有os 替换为0(不使用ಠ,因为python不支持该字符,不要太生气了:))


哦耶。您能否对计算素因数做一个基本的解释,因为我总是得到与您的示例不同的结果。
Ciprum

13
欢迎来到编程难题和Code Golf!由于挑战为每个任务要求一个不同的程序,因此这不能完全满足挑战的要求。此外,您需要遵循得分规则以应对这一挑战,尤其要注意Levenshtein距离函数。
AdmBorkBork 2015年

3
Python确实支持ಠ,只需将au放在字符串前面。u“ಠ_ಠ” <-像这样
DJgamer98 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.