Billard Code (Levenshtein golf)

24

Vous devez utiliser une seule langue pour écrire des programmes qui effectuent les neuf tâches suivantes, dans l'ordre que vous souhaitez .

  • Convertissez un nombre entré de base 10 en base 36.
    • Exemple d'entrée: 1000
    • Exemple de sortie: RS(la sortie doit être en majuscules)
  • Convertissez chaque caractère d'une chaîne en ses codes ASCII décimaux de base 10 et imprimez les codes concaténés ensemble.
    • Exemple d'entrée: Scrambled 3GG5
    • Exemple de sortie: 839911497109981081011002051717153
  • Déterminez si un nombre entré est divisible par 1738.
    • Retourne une valeur véridique si elle l'est et une valeur fausse si elle ne l'est pas.
  • Déterminez si une chaîne contient la lettre q.
    • Retourne une valeur véridique si c'est le cas et une valeur fausse si ce n'est pas le cas.
  • Encodez une chaîne de lettres entrée avec un chiffre César de +1.
    • Le boîtier doit être conservé. Les caractères autres que des lettres seront imprimés sans modification.
    • Exemple d'entrée: Good morning, World!
    • Exemple de sortie: Hppe npsojoh, Xpsme!
  • Trouvez et imprimez la somme des facteurs premiers d'un nombre.
    • Exemple d'entrée: 1320
    • Exemple de sortie: 21
  • Imprimer PPCG.
  • Affiche les premiers nentiers positifs divisibles par floor(sqrt(n)).
    • n est un entier entré.
  • Remplacez chaque oet Odans une chaîne entrée par .
    • Exemple d'entrée: Onomatopoeia
    • Exemple de sortie: ಠnಠmatಠpಠeia

Vous aurez remarqué que ce défi ne l'est Code Billiardspas Code Golf. L'objectif de ce challenge, comme au billard, est de paramétrer votre code afin qu'il ne puisse être modifié que légèrement pour le prochain challenge. C'est pourquoi vos programmes n'ont pas à résoudre les tâches ci-dessus dans l'ordre.

Votre score est déterminé comme suit

  • Votre score augmente de 1chaque octet dans vos programmes.
  • Votre score augmente floor(n^(1.5))si deux programmes consécutifs ont une distance Levenshtein de n. Par exemple, si votre premier programme est potatoet votre deuxième programme taters, votre score augmente de 12 pour 12 octets et de 11= floor(5^(1.5))pour une distance Levenshtein de 5.

L'objectif de ce défi est d'obtenir un score aussi bas que possible une fois les neuf programmes écrits. Les règles CG standard s'appliquent.


Pour voir le classement, cliquez sur "Afficher l'extrait de code", faites défiler vers le bas et cliquez sur "► Exécuter l'extrait de code". Extrait créé par Optimizer.

Arcturus
la source
1
Whoa ... J'ai eu la même idée EXACTE pour un défi hier soir. C'est bizarre ...
ETHproductions
@ETHproductions J'ai eu l'idée hier soir également, et j'ai écrit quelque chose à ce sujet sur le Sandbox. Votre idée est venue de là? Sinon, la coïncidence est vraiment drôle.
Arcturus
1
Non, j'ai eu l'idée en allant me coucher. Vous n'avez pas vu votre message du tout! Je suppose que c'est un exemple de "l'esprit des golfeurs de code pense de la même façon";)
ETHproductions
Quelle est la distance Levenshtein de et a? Est-ce 1 (comptant pour 1 caractère) ou 2 (car il s'agit en fait de 2 octets)?
Jakube
1
@Mego Voici un algorithme plus rapide. :) De plus, vous ne l'avez peut-être pas vu, mais dans ma réponse est un extrait qui organise automatiquement les programmes dans l'ordre optimal, et il utilise également l'algorithme ultra-rapide.
ETHproductions

Réponses:

8

Japt , 886 866 766 725 688 669

Les tâches 5 et 6 sont des tueurs. Il existe peut-être des moyens plus courts de les réaliser. Je pense que les distances de Levenshtein pourraient également être réduites.

  • Tâche 3 (divisibilité): !(U%#ۊ
    7 octets (le caractère arabe gâche l'alignement)
  • Tâche 4 (vérification «q»): U!=Uk'q7 octets, dist 11
  • Tâche 1 (conversion de base): Us36 u6 octets, dist 14
  • Tâche 2 (codes ASCII): UmX=>Xc7 octets, dist 14
  • Tâche 7 (voyez par vous-même): "PPCG"6 octets, dist 18
  • Tâche 9 (remplacement ಠ): Ur"[Oo]",'ಠ13 octets, dist 27
  • Tâche 8 (étage (sqrt (n))): X=Uq f;XoU*X+1,X16 octets, dist 52
  • Tâche 6 (somme des facteurs premiers): 2oU fX=>2oX eY=>X%Y &&!(U%X)r(X,Y =>X+Y39 octets, dist 172
  • Tâche 5 (chiffre César): UmX=>128o mY=>Yd)a k'A i#Z,'A k'a i#z,'a gXc44 octets, dist 216

Voici un extrait qui vous indiquera (l'une des) façons les plus efficaces d'organiser vos programmes:

Avec la dernière version de Japt (non compétitive dans ce défi), la plupart des tâches raccourcissent:

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

L'ordre optimal est maintenant de 2,4,3,1,6,7,9,8,5, avec un score énorme de 217 , soit moins du tiers de l'original!

Bienvenue suggestions!

ETHproductions
la source
7

Pyth, score 489

Conversion de base: 15

s@L+s`MTrG1jQ36

Chiffre César: 13 + 11 ^ 1,5

u.rGHrBG1z 36

Divisible par 1738: 7 + 11 ^ 1,5

!%Q1738

N premiers entiers positifs: 8 + 8 ^ 1,5

*Rs@Q2SQ

Somme des facteurs premiers: 4 + 6 ^ 1,5

s{PQ

Apparence de q dans la chaîne: 4 + 4 ^ 1,5

}\qz

Joignez tous les codes ASCII: 5 + 4 ^ 1,5

jkCMz

Imprimer "PPCG": 5 + 5 ^ 1,5

"PPCG

Remplacer par : 9 + 7 ^ 1,5

Xz"oO"\ಠ
Jakube
la source
3

Rubis, 1488

Il y a probablement beaucoup de place à l'amélioration ici. A passé la plupart du temps à calculer le score ...

Somme des facteurs premiers : 64
require'prime';p gets.to_i.prime_division.reduce(0){|s,a|s+a[0]}
Base 36 : 30 + 47 1,5 = 352
puts gets.to_i.to_s(36).upcase
Divisible par 1738 : 22 + 15 1,5 = 80
puts gets.to_i%1738==0
Impression PPCG : 9 + 18 1,5 = 85
puts:PPCG
La chaîne contient-elle q? : 10 + 8 1,5 = 32
p gets[?q]
Remplacero : 23 + 16 1,5 = 87
puts gets.gsub(/o/i,?ಠ)
Chiffre César : 32 + 21 1,5 = 128
puts gets.tr 'A-Za-z','B-ZAb-za'
Codes ASCII : 37 + 26 1,5 = 169
puts gets.chomp.chars.map(&:ord).join
Entiers divisibles par la racine carrée : 72 + 56 1,5 = 491
puts *(1..1/0.0).lazy.select{|i|i%Math.sqrt(i).floor==0}.take(gets.to_i)
daniero
la source
Vous pourriez obtenir une amélioration si vous convertissez vos programmes en lambdas
pas que Charles
3

Java, score 8331

Les distances de levenshtein tuent mon score ici.

(Ces programmes prennent l'entrée comme arguments de ligne de commande)

Programme 1 (119):

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

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

Programme 3 (101 + 49 1,5 = 444):

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

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

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

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

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

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

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

Programme 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
la source
3
C'est Java. Vous ne devriez pas vous attendre à un score court ...;)
kirbyfan64sos
interface l {static void main (String ...
Rohan Jhunjhunwala
1

Pyth, score 817

numéro 1:24

Jjk+UTrG1VjKvz36=+k@JN;k

numéro 2: (9 + 16 1,5 = 73)

Vz=+kCN;k

numéro 3: (5 + 8 1,5 = 27)

/QC"ۊ

numéro 4: (5 + 14 1,5 = 57)

hxz\q

numéro 5: (39 + 37 1,5 = 264)

J+GrG1VzIhxJNKChCNIhxJKpK)EpC-CK26))EpN

numéro 6: (4 + 39 1,5 = 247)

s{PQ

numéro 7: (5 + 4 1,5 = 13)

"PPCG

numéro 8: (12 + 12 1,5 = 53)

VK/@Q2 1*KhN

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

j\ಠcj\ಠcz\o\O

Pas le meilleur, j'ai juste commencé à apprendre le pyth aujourd'hui et j'ai pensé essayer, le numéro 5 a vraiment tué mon score, je pense que je peux en raccourcir quelques-uns mais cela me fera plus mal sur les distances. Tous les conseils d'utilisateurs plus expérimentés de Pyth sont appréciés.

Phyxie
la source
Le numéro 6 est ce qui a vraiment tué mon score. Eh bien, les numéros 5, 6 et 9.
SuperJedi224
@ SuperJedi224 Vous pouvez changer l'ordre des programmes. Par exemple, la commutation de 5 et 7 ici réduirait un peu le score.
Arcturus
@Eridan Attendez, vous pouvez faire ça? Je suppose que je le ferai cet après-midi.
SuperJedi224
@ SuperJedi224 You must use one language to write programs that perform the following nine tasks, in any order.Bonne chance!
Arcturus
3
5 + 14^1.5n'a pas 19 ans
Jakube
-1

Python 3 (actuellement non valide), 621 octets

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)

Pas vraiment ce bon code mais fonctionne un peu: D. La somme des facteurs premiers ne fonctionne pas. J'obtiens toujours un résultat différent de votre exemple, donc je l'ai supprimé. De plus, Python ne prend pas en charge le caractère , il remplace donc le os par 0s

INFO IO:

1ère entrée: int en base 10 | Sortie: ce nombre en base 36

2ème entrée: une chaîne | Sortie: numéros Ascii de la chaîne

3e entrée: entier | Sortie: vrai ou faux selon que le nombre est divisible d'ici 1738

4ème entrée: chaîne | Sortie: T ou F selon que la chaîne contient "q"

5e entrée: chaîne | Sortie: Chiffre Caser +1 de la chaîne

6ème: imprime littéralement "PPCG"

7e entrée: int n | Sortie: n premiers entiers divisibles par étage (sqrt (n))

8ème entrée: chaîne | Sortie: Remplacé tous les os par 0 (pas par ಠ car python ne prend pas en charge ce caractère, ne soyez pas trop fou :))

Ciprum
la source
Oh oui. Pourriez-vous s'il vous plaît faire une explication de base du calcul des facteurs premiers, car j'obtiens toujours un résultat différent de celui de votre exemple.
Ciprum
13
Bienvenue dans Programmation d'énigmes et Code Golf! Cela ne répond pas tout à fait aux exigences du défi, car le défi demande un programme différent pour chaque tâche. De plus, vous devrez suivre les règles de notation pour ce défi, en particulier en notant la fonction de distance Levenshtein.
AdmBorkBork du
3
Python prend en charge ಠ, mettez juste au devant de la chaîne. u "ಠ_ಠ" <- comme ça
DJgamer98