Kod Bilardo (Levenshtein golf)


24

Sen, şu dokuz görevleri yerine programlar yazmak için bir dil kullanmak gerekir istediğiniz herhangi bir sırada .

  • Girilen bir sayıyı taban 10'dan taban 36'ya dönüştürün.
    • Örnek giriş: 1000
    • Örnek çıktı: RS(çıktı büyük harf olmalıdır)
  • Bir dizgideki her karakteri, 10 ondalık basamak ASCII koduna dönüştür ve birlikte birleştirilmiş kodları yazdır.
    • Örnek giriş: Scrambled 3GG5
    • Örnek çıktı: 839911497109981081011002051717153
  • Girilen bir sayının 1738'e bölünebilir olup olmadığını belirleyin.
    • Öyleyse gerçek bir değer, değilse öyleyse sahte bir değer döndürün.
  • Bir dizgenin içinde harf qolup olmadığını belirleyin.
    • Varsa gerçek bir değer, eğer değilse sahte bir değer döndürün.
  • Girilen harf dizesini +1 Sezar şifresiyle kodlayın.
    • Dava korunmalı. Harf olmayan karakterler değişiklik yapılmadan yazdırılacaktır.
    • Örnek giriş: Good morning, World!
    • Örnek çıktı: Hppe npsojoh, Xpsme!
  • Bir sayının asal çarpanlarının toplamını bulun ve yazdırın.
    • Örnek giriş: 1320
    • Örnek çıktı: 21
  • Baskı PPCG.
  • nBölünebilen ilk pozitif tamsayıları yazdırın floor(sqrt(n)).
    • n girilen bir tamsayıdır.
  • Girilen bir dizgideki her birini ove Oyerine .
    • Örnek giriş: Onomatopoeia
    • Örnek çıktı: ಠnಠmatಠpಠeia

Bu zorluğun Code Billiardsolmadığını fark etmiş olacaksınız Code Golf. Bu mücadelenin amacı, bilardolarda olduğu gibi, kodunuzu ayarlamaktır, böylece bir sonraki mücadele için sadece biraz değiştirilebilir. Bu nedenle programlarınızın yukarıdaki görevleri sırayla çözmesi gerekmez.

Puanınız aşağıdaki gibi belirlenir

  • Puanınız 1programlarınızdaki her byte kadar artar .
  • floor(n^(1.5))Eğer iki ardışık program Levenshtein mesafesine sahipse puanınız artar n. Örneğin, ilk programınız potatove ikinci programınız ise taters, puanınız 12 bayt için 12 artar ve 11= floor(5^(1.5))5 Levenshtein mesafesi için = artar .

Bu zorluğun amacı, dokuz program da yazıldıktan sonra mümkün olduğunca düşük bir puan elde etmektir. Standart CG kuralları geçerlidir.


Büyük afişi görmek için, "Kod pasajını göster" i tıklayın, aşağıya doğru kaydırın ve "► Kod pasajını çalıştır" ı tıklayın. Doktor tarafından yapılan snippet.


1
Vay ... Tam anlamıyla dün gece bir meydan okuma için aynı fikir vardı. Ne kadar garip ...
ETHproductions 12:15

@ETHproductions Dün gece fikrimi de aldım ve Sandbox'a bunun hakkında bir şeyler yazdım. Fikriniz oradan mı geldi? Olmazsa, tesadüf gerçekten çok komik.
Arcturus

1
Hayır, yatağa giderken olduğu gibi bir fikrim vardı. Yazınızı hiç görmediniz! Sanırım bu "kod-golf akıllarının aynı olduğunu düşünüyorum";)
ETHproductions 12:15

Levenshtein mesafesi ve anedir? 1 ( 1 karakter olarak sayılıyor ) veya 2 ( 2 aslında bayt olduğu için) mi?
Jakube

1
@Mego İşte daha hızlı bir algoritma. :) Ayrıca, bunu görmemiş olabilirsiniz, ancak benim cevabımda programları otomatik olarak en uygun sıraya göre düzenleyen bir snippet ve süper hızlı algoritmayı da kullanıyor.
ETHProductions,

Yanıtlar:


8

Japt , 886 866 766 725 688 669

Görev 5 ve 6 katildir. Belki de onları yaptırmanın daha kısa yolları var. Levenshtein mesafelerinin hala azaltılabileceğini düşünüyorum.

  • Görev 3 (bölünebilirlik): !(U%#ۊ
    7 bayt (arapça karakter uyuşmazlığı)
  • Görev 4 ('q' kontrolü): U!=Uk'q7 bayt, dağıtım 11
  • Görev 1 (temel dönüştürme): Us36 u6 bayt, 14
  • Görev 2 (ASCII kodları): UmX=>Xc7 bayt, 14
  • Görev 7 (kendin gör): "PPCG"6 bayt, dağ 18
  • Görev 9 (ಠ değiştirme): Ur"[Oo]",'ಠ13 bayt, dağıtım 27
  • Görev 8 (kat (metrekare)): X=Uq f;XoU*X+1,X16 bayt, dağıtım 52
  • Görev 6 (ana faktör toplamı): 2oU fX=>2oX eY=>X%Y &&!(U%X)r(X,Y =>X+Y39 bayt, dist 172
  • Görev 5 (Sezar şifresi): UmX=>128o mY=>Yd)a k'A i#Z,'A k'a i#z,'a gXc44 bayt, dist 216

İşte size programlarınızı düzenlemenin en etkili yollarından birini (birini) anlatan bir pasajı:

Japt’in en son sürümüyle (bu mücadelede rekabet etmeyen), görevlerin çoğu kısalıyor:

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

En uygun sipariş, orijinalin üçte birinden az olan 217 puanlık puanıyla gelen 2,4,3,1,6,7,9,8,5 !

Önerilerinizi bekliyoruz!


7

Pyth, skor 489

Temel dönüşüm: 15

s@L+s`MTrG1jQ36

Sezar Şifresi: 13 + 11 ^ 1.5

u.rGHrBG1z 36

1738 ile bölünebilir: 7 + 11 ^ 1.5

!%Q1738

İlk N pozitif tamsayılar: 8 + 8 ^ 1.5

*Rs@Q2SQ

Asal faktörlerin toplamı: 4 + 6 ^ 1.5

s{PQ

Dizgede q ifadesi: 4 + 4 ^ 1.5

}\qz

Tüm ASCII kodlarına katılın: 5 + 4 ^ 1.5

jkCMz

"PPCG" yazdır: 5 + 5 ^ 1,5

"PPCG

Şununla değiştir : 9 + 7 ^ 1.5

Xz"oO"\ಠ

3

Ruby, 1488

Muhtemelen burada geliştirme için çok fazla yer var. Skoru hesaplarken çoğu zaman harcadı ...

Asal faktörlerin toplamı : 64
require'prime';p gets.to_i.prime_division.reduce(0){|s,a|s+a[0]}
Taban 36 : 30 + 47 1,5 = 352
puts gets.to_i.to_s(36).upcase
1738 ile bölünebilir : 22 + 15 1,5 = 80
puts gets.to_i%1738==0
PPCG'yi Yazdır : 9 + 18 1,5 = 85
puts:PPCG
Dize içeriyor qmu? : 10 + 8 1,5 = 32
p gets[?q]
Değiştiro : 23 + 16 1,5 = 87
puts gets.gsub(/o/i,?ಠ)
Sezar şifresi : 32 + 21 1,5 = 128
puts gets.tr 'A-Za-z','B-ZAb-za'
ASCII kodları : 37 + 26 1.5 = 169
puts gets.chomp.chars.map(&:ord).join
Karekök ile bölünebilen tamsayılar : 72 + 56 1.5 = 491
puts *(1..1/0.0).lazy.select{|i|i%Math.sqrt(i).floor==0}.take(gets.to_i)

Programlarınızı lambdas'a dönüştürdüğünüzde bir iyileşme elde edebilirsiniz
Charles Charles'ın

3

Java, skor 8331

Levenshtein mesafeleri burada puanımı öldürüyor.

(Bu programlar girişi komut satırı argümanları olarak alır)

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

3
Java. Kısa bir puan beklememelisiniz ...;)
kirbyfan64sos

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

1

Pyth, 817 puan

1: 24 numara

Jjk+UTrG1VjKvz36=+k@JN;k

2 sayısı: (9 + 16 1,5 = 73)

Vz=+kCN;k

sayı 3: (5 + 8 1,5 = 27)

/QC"ۊ

4 sayısı: (5 + 14 1,5 = 57)

hxz\q

sayı 5: (39 + 37 1,5 = 264)

J+GrG1VzIhxJNKChCNIhxJKpK)EpC-CK26))EpN

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

s{PQ

sayı 7: (5 + 4 1,5 = 13)

"PPCG

sayı 8: (12 + 12 1,5 = 53)

VK/@Q2 1*KhN

9 (13 + 13 1,5 = 59)

j\ಠcj\ಠcz\o\O

En iyisi değil, bugün sadece pyth öğrenmeye başladım ve bir deneyeyim dedim, sayı 5 gerçekten puanımı öldürdü, sanırım birkaç tanesini daha kısa tutabilirim ama bu sadece bana daha fazla acı verecek. Daha deneyimli pyth kullanıcılarının herhangi bir ipucuları takdir edilmektedir.


Sayı 6 gerçekten skorumu öldürdü. Peki, 5, 6 ve 9 numaralar.
SuperJedi224

@ SuperJedi224 Programların sırasını değiştirebilirsiniz. Örneğin, burada 5 ve 7'yi değiştirmek puanı biraz düşürür.
Arcturus,

@Eridan Bekle, bunu yapabilir misin? Sanırım bunu öğleden sonra yapacağım.
SuperJedi224

@ SuperJedi224 You must use one language to write programs that perform the following nine tasks, in any order.İyi şanslar!
Arcturus,

3
5 + 14^1.5değil 19
Jakube

-1

Python 3 (şu anda geçersiz), 621 bayt

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)

Gerçekten bu iyi kod değil ama biraz işe yarıyor: D. Asal faktörlerin toplamı çalışmıyor. Örneğinizden daima farklı bir sonuç alıyorum, bu yüzden onu kaldırdım. Ayrıca Python kömürü desteklemiyor bu yüzden bunun yerine değiştirir oile s 0s

IO BİLGİ:

1. giriş: 10 tabanındaki int | Çıktı: üs 36'daki sayı

2. giriş: bir dize | Çıktı: Dizenin Ascii sayıları

3. giriş: tamsayı | Çıktı: Sayının 1738'e bölünebilir olmasına bağlı olarak Doğru veya Yanlış

4. giriş: string | Çıktı: Dizgede "q" bulunup bulunmadığına bağlı olarak T veya F

5. giriş: string | Çıktı: Dizenin Caser Şifresi +1

6: kelimenin tam anlamıyla "PPCG" yazdırır

7. giriş: int n | Çıktı: zemine bölünebilen ilk n giriş (sqrt (n))

8. giriş: string | Çıktı: Tüm os'leri 0 ile değiştirdi (with ile değil çünkü python bu karakteri desteklemiyor, fazla kızma :))


Ah evet. Asal faktörlerin hesaplanmasında temel bir açıklama yapabilir misiniz, çünkü her zaman sizin örneğinizden farklı bir sonuç alıyorum.
Ciprum

13
Programlama Bulmacaları ve Code Golf'a Hoş Geldiniz! Bu, mücadelenin gerekliliklerini tam olarak karşılamıyor çünkü zorluk her görev için farklı bir program talep ediyor. Ek olarak, özellikle Levenshtein uzaklık fonksiyonunu dikkate alarak, bu zorluk için puanlama kurallarına uymanız gerekecektir.
AdmBorkBork,

3
Python support destekliyor, sadece dizenin önüne au koy. u "ಠ_ಠ" <- bunun gibi
DJgamer98
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.