コードビリヤード(レーベンシュタインゴルフ)


24

次の9つのタスクを任意の順序で実行するプログラムを作成するには、1つの言語を使用する必要があります。

  • 入力された数値を基数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))2つの連続したプログラムのレーベンシュタイン距離がの場合、スコアは上がりnます。たとえば、最初のプログラムがpotatoで、2番目のプログラムがであるtaters場合、スコアは12バイトで12 、レベンシュタイン距離5で11= floor(5^(1.5))ずつ上がります。

この課題の目的は、9つのプログラムすべてを作成した後、できるだけ低いスコアにすることです。標準のCGルールが適用されます。


リーダーボードを表示するには、[コードスニペットを表示]をクリックし、一番下までスクロールして[►コードスニペットを実行]をクリックします。オプティマイザーによって作成されたスニペット。


1
おっと...私は昨夜の挑戦のために文字通り正確に同じ考えを持っていました。どのように奇妙な...
ETHproductions

@ETHproductions昨夜もアイデアを得て、サンドボックスにそれについて何か書いた。あなたのアイデアはそこから来ましたか?そうでない場合、偶然は本当に面白いです。
アークトゥルス

1
いいえ、私は寝る途中であるという考えを持っていました。投稿がまったく表示されませんでした!これは「コードゴルフマインドが同じように考える」という例だと思います;)
ETHproductions

レーベンシュタイン距離何とはa?1(1文字としてカウント)または2(実際は2バイトであるため)ですか?
ジャクベ

1
@Megoこれは、より高速なアルゴリズムです。:)また、これを見たことがないかもしれませんが、私の答えでは、最適な順序でプログラムを自動的に配置するスニペットであり、超高速アルゴリズムも使用しています。
-ETHproductions

回答:


8

JAPT886 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(素因数合計):2oU fX=>2oX eY=>X%Y &&!(U%X)r(X,Y =>X+Y39バイト、dist 172
  • タスク5(シーザー暗号):UmX=>128o mY=>Yd)a k'A i#Z,'A k'a i#z,'a gXc44バイト、dist 216

以下に、プログラムを配置する最も効率的な方法(の1つ)を示すスニペットを示します。

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 で、元の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)

あなたがラムダにあなたのプログラムを変換する場合は、改善を得るかもしれない
未チャールズことを

3

Java、スコア8331

それらのレベンシュタイン距離は、ここで私のスコアを殺しています。

(これらのプログラムは入力をコマンドライン引数として受け取ります)

プログラム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です。短いスコアを期待しないでください...;)
kirbyfan64sos

インターフェイス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

最高ではありません。今日、ピスを学び始めたので、試してみようと思いました。5番は本当にスコアを殺しました。経験豊富なpythユーザーからのヒントを歓迎します。


数字の6は、本当に私のスコアを殺したものです。さて、数字
5、6、9。

@ SuperJedi224プログラムの順序を変更できます。たとえば、ここで5と7を切り替えると、スコアが少し下がります。
アルクトゥルス

@エリダン待って、あなたはそれを行うことができますか?私は今日の午後にそれを行うと思います。
SuperJedi224

@ SuperJedi224 You must use one language to write programs that perform the following nine tasks, in any order.頑張ってください!
アークトゥルス

3
5 + 14^1.5は19ではない
ジャクベ

-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を0 sに

IO情報:

1番目の入力:10を基数とするint | 出力:基数36の数値

2番目の入力:文字列| 出力:文字列のアスキー番号

3番目の入力:整数| 出力:数値が1738で割り切れるかどうかに応じて、TrueまたはFalse

4番目の入力:文字列| 出力:文字列に "q"が含まれるかどうかに応じてTまたはF

5番目の入力:文字列| 出力:文字列のCaser Cipher +1

6番目:文字通り「PPCG」を印刷する

7番目の入力:int n | 出力:floor(sqrt(n))で割り切れる最初のn個の整数

8番目の入力:文字列| 出力:すべてoのsを0に置き換えました(Pythonはその文字をサポートしていないため、ಠではなく、気が狂わないでください:))


そうそう。素因数の計算の基本的な説明をお願いします。例の結果とは常に異なる結果が得られるからです。
キプロム

13
プログラミングパズルとコードゴルフへようこそ!チャレンジはタスクごとに異なるプログラムを要求しているため、これはチャレンジの要件を完全には満たしていません。さらに、この課題のスコアリングルールに従う必要があります。特に、レーベンシュタイン距離関数に注意する必要があります。
AdmBorkBork

3
Pythonはsupportをサポートし、文字列の前にauを置きます。u "ಠ_ಠ" <-このように
-DJgamer98
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.