Kode Biliar (golf Levenshtein)

24

Anda harus menggunakan satu bahasa untuk menulis program yang melakukan sembilan tugas berikut, dalam urutan apa pun yang Anda inginkan .

  • Ubah nomor yang dimasukkan dari basis 10 ke basis 36.
    • Input sampel: 1000
    • Output sampel: RS(output harus huruf besar)
  • Konversikan setiap karakter dalam string menjadi basisnya 10 kode ASCII desimal dan cetak kode yang digabungkan menjadi satu.
    • Input sampel: Scrambled 3GG5
    • Output sampel: 839911497109981081011002051717153
  • Tentukan apakah nomor yang dimasukkan dapat dibagi dengan 1738.
    • Kembalikan nilai kebenaran jika itu dan nilai palsu jika tidak.
  • Tentukan apakah string memiliki huruf qdi dalamnya.
    • Kembalikan nilai kebenaran jika benar dan nilai palsu jika tidak.
  • Menyandikan string surat yang dimasukkan dengan cipher Caesar +1.
    • Kasing harus dilestarikan. Karakter non-huruf akan dicetak tanpa modifikasi.
    • Input sampel: Good morning, World!
    • Output sampel: Hppe npsojoh, Xpsme!
  • Temukan dan cetak jumlah faktor prima suatu angka.
    • Input sampel: 1320
    • Output sampel: 21
  • Cetak PPCG.
  • Cetak nbilangan bulat positif pertama yang habis dibagi floor(sqrt(n)).
    • n adalah integer yang dimasukkan.
  • Ganti setiap odan Odalam string yang dimasukkan dengan .
    • Input sampel: Onomatopoeia
    • Output sampel: ಠnಠmatಠpಠeia

Anda akan memperhatikan bahwa tantangan ini Code Billiardsbukan Code Golf. Tujuan dari tantangan ini, seperti dalam biliar, adalah untuk mengatur kode Anda sehingga hanya dapat dimodifikasi sedikit untuk tantangan berikutnya. Inilah sebabnya mengapa program Anda tidak harus menyelesaikan tugas-tugas di atas secara berurutan.

Skor Anda ditentukan sebagai berikut

  • Skor Anda naik 1setiap byte dalam program Anda.
  • Skor Anda naik floor(n^(1.5))jika dua program berturut-turut memiliki jarak Levenshtein n. Misalnya jika program pertama Anda potatodan program kedua adalah taters, skor Anda naik 12 untuk 12 byte dan dengan 11= floor(5^(1.5))untuk jarak Levenshtein 5.

Tujuan dari tantangan ini adalah mendapatkan skor serendah mungkin setelah kesembilan program ditulis. Aturan CG standar berlaku.


Untuk melihat leaderboard, klik "Tampilkan cuplikan kode", gulir ke bawah dan klik "► Jalankan cuplikan kode". Cuplikan yang dibuat oleh Pengoptimal.

Arcturus
sumber
1
Whoa ... Saya benar-benar memiliki ide yang sama persis untuk tantangan tadi malam. Aneh ...
ETHproduksi
@ ETHproductions Saya mendapat ide tadi malam juga, dan menulis sesuatu tentang itu di Sandbox. Apakah ide Anda berasal dari sana? Jika tidak, kebetulan itu benar-benar lucu.
Arcturus
1
Tidak, saya punya ide karena sedang dalam perjalanan ke tempat tidur. Tidak melihat pos Anda sama sekali! Saya kira ini adalah contoh dari "kode-pikiran golf berpikir sama";)
ETHproduk
Berapa jarak Levenshtein dan a? Apakah 1 (dihitung sebagai 1 char) atau 2 (karena sebenarnya 2 byte)?
Jakube
1
@Mego Ini algoritma yang lebih cepat. :) Juga, Anda mungkin tidak melihat ini, tetapi dalam jawaban saya adalah potongan yang secara otomatis mengatur program dalam urutan optimal, dan ia menggunakan algoritma super cepat juga.
ETHproduk

Jawaban:

8

Japt , 886 866 766 725 688 669

Tugas 5 dan 6 adalah pembunuh. Mungkin ada cara yang lebih pendek untuk menyelesaikannya. Saya pikir jarak Levenshtein masih bisa dikurangi juga.

  • Tugas 3 (dibagi-pakai): !(U%#ۊ
    7 byte (arang arab mengacaukan keselarasan)
  • Tugas 4 (periksa 'q'): U!=Uk'q7 byte, dist 11
  • Tugas 1 (konversi basis): Us36 u6 byte, dist 14
  • Tugas 2 (kode ASCII): UmX=>Xc7 byte, dist 14
  • Tugas 7 (lihat sendiri): "PPCG"6 byte, dist 18
  • Tugas 9 (penggantian)): Ur"[Oo]",'ಠ13 byte, dist 27
  • Tugas 8 (lantai (sqrt (n))): X=Uq f;XoU*X+1,X16 byte, dist 52
  • Tugas 6 (jumlah faktor prima): 2oU fX=>2oX eY=>X%Y &&!(U%X)r(X,Y =>X+Y39 byte, dist 172
  • Tugas 5 (Caesar cipher): UmX=>128o mY=>Yd)a k'A i#Z,'A k'a i#z,'a gXc44 byte, dist 216

Berikut cuplikan yang akan memberi tahu Anda (salah satu) cara paling efisien untuk mengatur program Anda:

Dengan versi terbaru Japt (tidak bersaing dalam tantangan ini), sebagian besar tugas menjadi lebih singkat:

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

Urutan optimal sekarang 2,4,3,1,6,7,9,8,5, masuk pada skor kekalahan 217 , kurang dari sepertiga dari aslinya!

Saran diterima!

Produksi ETH
sumber
7

Pyth, skor 489

Konversi basis: 15

s@L+s`MTrG1jQ36

Caesar Cipher: 13 + 11 ^ 1.5

u.rGHrBG1z 36

Dibagi oleh 1738: 7 + 11 ^ 1.5

!%Q1738

Bilangan bulat positif N pertama: 8 + 8 ^ 1,5

*Rs@Q2SQ

Jumlah faktor prima: 4 + 6 ^ 1.5

s{PQ

Penampilan q dalam string: 4 + 4 ^ 1.5

}\qz

Bergabung dengan semua kode ASCII: 5 + 4 ^ 1.5

jkCMz

Cetak "PPCG": 5 + 5 ^ 1.5

"PPCG

Ganti dengan : 9 + 7 ^ 1.5

Xz"oO"\ಠ
Jakube
sumber
3

Ruby, 1488

Mungkin banyak ruang untuk perbaikan di sini. Menghabiskan sebagian besar waktu menghitung skor ...

Jumlah faktor prima : 64
require'prime';p gets.to_i.prime_division.reduce(0){|s,a|s+a[0]}
Basis 36 : 30 + 47 1.5 = 352
puts gets.to_i.to_s(36).upcase
Dibagi oleh 1738 : 22 + 15 1,5 = 80
puts gets.to_i%1738==0
Cetak PPCG : 9 + 18 1.5 = 85
puts:PPCG
Apakah string berisi q? : 10 + 8 1,5 = 32
p gets[?q]
Gantio : 23 + 16 1.5 = 87
puts gets.gsub(/o/i,?ಠ)
Cipher Ceasar : 32 + 21 1,5 = 128
puts gets.tr 'A-Za-z','B-ZAb-za'
Kode ASCII : 37 + 26 1.5 = 169
puts gets.chomp.chars.map(&:ord).join
Bilangan bulat dapat dibagi dengan akar kuadrat : 72 + 56 1,5 = 491
puts *(1..1/0.0).lazy.select{|i|i%Math.sqrt(i).floor==0}.take(gets.to_i)
daniero
sumber
Anda mungkin mendapatkan peningkatan jika Anda mengonversi program Anda ke lambdas
Bukan berarti Charles
3

Java, skor 8331

Jarak levenshtein mereka membunuh skor saya di sini.

(Program-program ini mengambil input sebagai argumen baris perintah)

Program 1 (119):

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

Program 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);}}

Program 3 (101 + 49 1.5 = 444):

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

Program 4 (108 + 20 1,5 = 197):

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

Program 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);}}

Program 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;}}

Program 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;}}

Program 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;}}

Program 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;}}
SuperJedi224
sumber
3
Itu Jawa. Anda seharusnya tidak mengharapkan skor pendek ...;)
kirbyfan64sos
antarmuka l {static void main (String ...
Rohan Jhunjhunwala
1

Pyth, skor 817

nomor 1: 24

Jjk+UTrG1VjKvz36=+k@JN;k

nomor 2: (9 + 16 1.5 = 73)

Vz=+kCN;k

angka 3: (5 + 8 1,5 = 27)

/QC"ۊ

angka 4: (5 + 14 1,5 = 57)

hxz\q

angka 5: (39 + 37 1,5 = 264)

J+GrG1VzIhxJNKChCNIhxJKpK)EpC-CK26))EpN

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

s{PQ

angka 7: (5 + 4 1.5 = 13)

"PPCG

angka 8: (12 + 12 1,5 = 53)

VK/@Q2 1*KhN

angka 9 (13 + 13 1,5 = 59)

j\ಠcj\ಠcz\o\O

Bukan yang terbaik, saya baru mulai belajar pyth hari ini dan berpikir saya akan mencobanya, nomor 5 benar-benar membunuh skor saya, saya pikir saya bisa mendapatkan beberapa dari mereka lebih pendek tapi itu hanya akan menyakiti saya lebih jauh pada jarak. Setiap tips dari pengguna pyth yang lebih berpengalaman dihargai.

Phyxie
sumber
Nomor 6 adalah yang benar-benar membunuh nilaiku. Nah, angka 5, 6, dan 9.
SuperJedi224
@ SuperJedi224 Anda dapat mengubah urutan program. Misalnya, beralih 5 dan 7 di sini akan menurunkan skor sedikit.
Arcturus
@ Eropa Tunggu, Anda bisa melakukan itu? Saya kira saya akan melakukannya sore ini.
SuperJedi224
@ SuperJedi224 You must use one language to write programs that perform the following nine tasks, in any order.Semoga Sukses!
Arcturus
3
5 + 14^1.5bukan 19
Jakube
-1

Python 3 (saat ini tidak valid), 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)

Tidak benar-benar kode yang baik tetapi agak berfungsi: D. Jumlah faktor utama tidak berfungsi. Saya selalu mendapatkan hasil yang berbeda dari contoh Anda, jadi saya menghapusnya. Juga Python tidak mendukung char jadi ia menggantikan os dengan 0s

INFO IO:

Input 1: int di basis 10 | Output: angka itu di base 36

Input 2: sebuah string | Output: Angka-angka Ascii dari string

Input ke-3: integer | Output: Benar atau Salah tergantung apakah angka dapat dibagi dengan 1738

Input 4: string | Output: T atau F tergantung apakah string memiliki "q" di dalamnya

Input 5: string | Output: Caser Cipher +1 dari string

6: hanya mencetak "PPCG" secara harfiah

Input 7: int n | Output: n ints pertama dibagi oleh lantai (sqrt (n))

Input 8: string | Output: Mengganti semua os dengan 0 (bukan dengan ಠ karena python tidak mendukung karakter itu, jangan terlalu marah :))

Ciprum
sumber
Oh ya. Bisakah Anda melakukan penjelasan dasar tentang menghitung faktor prima karena saya selalu mendapatkan hasil yang berbeda dari yang ada dalam contoh Anda.
Ciprum
13
Selamat Datang di Programming Puzzles dan Code Golf! Ini tidak cukup memenuhi persyaratan tantangan karena tantangan tersebut meminta program yang berbeda untuk setiap tugas. Selain itu, Anda harus mengikuti aturan penilaian untuk tantangan ini, terutama mencatat fungsi jarak Levenshtein.
AdmBorkBork
3
Python mendukung ಠ, taruh saja au di depan string. u "ಠ_ಠ" <- seperti ini
DJgamer98