Code Billard (Levenshtein Golf)


24

Sie müssen eine Sprache verwenden, um Programme zu schreiben, die die folgenden neun Aufgaben in beliebiger Reihenfolge ausführen .

  • Wandle eine eingegebene Zahl von Basis 10 in Basis 36 um.
    • Beispieleingabe: 1000
    • Beispielausgabe: RS(Ausgabe muss in Großbuchstaben erfolgen)
  • Konvertieren Sie jedes Zeichen in einer Zeichenfolge in die 10 dezimalen ASCII-Basiscodes und drucken Sie die zusammengesetzten Codes aus.
    • Beispieleingabe: Scrambled 3GG5
    • Beispielausgabe: 839911497109981081011002051717153
  • Bestimmen Sie, ob eine eingegebene Zahl durch 1738 teilbar ist.
    • Geben Sie einen Wahrheitswert zurück, wenn dies der Fall ist, und einen falschen Wert, wenn dies nicht der Fall ist.
  • Bestimmen Sie, ob eine Zeichenfolge den Buchstaben enthält q.
    • Gibt einen Wahrheitswert zurück, wenn dies der Fall ist, und einen falschen Wert, wenn dies nicht der Fall ist.
  • Kodieren Sie eine eingegebene Buchstabenfolge mit einer Caesar-Chiffre von +1.
    • Koffer muss aufbewahrt werden. Nichtbuchstaben werden ohne Änderung gedruckt.
    • Beispieleingabe: Good morning, World!
    • Beispielausgabe: Hppe npsojoh, Xpsme!
  • Finde und drucke die Summe der Primfaktoren einer Zahl.
    • Beispieleingabe: 1320
    • Beispielausgabe: 21
  • Drucken PPCG.
  • Geben Sie die ersten npositiven Ganzzahlen aus, die durch teilbar sind floor(sqrt(n)).
    • n ist eine eingegebene Ganzzahl.
  • Ersetzen Sie alle ound Oin einer eingegebenen Zeichenfolge durch .
    • Beispieleingabe: Onomatopoeia
    • Beispielausgabe: ಠnಠmatಠpಠeia

Sie werden bemerkt haben, dass diese Herausforderung Code Billiardsnicht ist Code Golf. Das Ziel dieser Herausforderung ist, wie beim Billard, Ihren Code so einzurichten, dass er für die nächste Herausforderung nur geringfügig geändert werden kann. Aus diesem Grund müssen Ihre Programme die oben genannten Aufgaben nicht in der richtigen Reihenfolge lösen.

Ihre Punktzahl wird wie folgt bestimmt

  • Ihre Punktzahl steigt um 1jedes Byte in Ihren Programmen.
  • Ihre Punktzahl steigt, floor(n^(1.5))wenn zwei aufeinanderfolgende Programme eine Levenshtein-Distanz von haben n. Wenn zum Beispiel Ihr erstes Programm potatound Ihr zweites Programm ist taters, erhöht sich Ihre Punktzahl um 12 für 12 Bytes und um 11= floor(5^(1.5))für einen Levenshtein-Abstand von 5.

Das Ziel dieser Herausforderung ist es, nach dem Schreiben aller neun Programme eine möglichst niedrige Punktzahl zu erzielen. Es gelten die Standard-CG-Regeln.


Um die Bestenliste anzuzeigen, klicken Sie auf "Code-Snippet anzeigen", scrollen Sie nach unten und klicken Sie auf "► Code-Snippet ausführen". Snippet erstellt von Optimizer.


1
Whoa ... Ich hatte letzte Nacht buchstäblich die gleiche Idee für eine Herausforderung. Wie seltsam ...
ETHproductions

@ETHproductions Ich hatte gestern Abend auch die Idee und schrieb etwas darüber in die Sandbox. Kam deine Idee von dort? Wenn nicht, ist der Zufall wirklich lustig.
Arcturus

1
Nein, ich hatte die Idee , als ich auf dem Weg ins Bett war. Haben Sie Ihre Post nicht! Ich denke, dies ist ein Beispiel für "Code-Golf-Köpfe denken gleich";)
ETHproductions

Was ist die Levenshtein-Distanz von und a? Ist es 1 (Zählen als 1 char) oder 2 (weil tatsächlich 2 Bytes)?
Jakube

1
@Mego Hier ist ein schnellerer Algorithmus. :) Auch das haben Sie vielleicht nicht gesehen, aber in meiner Antwort ist ein Ausschnitt, der die Programme automatisch in der optimalen Reihenfolge anordnet, und er verwendet auch den superschnellen Algorithmus.
ETHproductions

Antworten:


8

Japt , 886 866 766 725 688 669

Aufgabe 5 und 6 sind Killer. Vielleicht gibt es kürzere Wege, um sie zu erledigen. Ich denke, die Levenshtein-Distanzen könnten auch noch reduziert werden.

  • Aufgabe 3 (Teilbarkeit): !(U%#ۊ
    7 Bytes (arabisches Zeichen bringt die Ausrichtung durcheinander)
  • Aufgabe 4 ('q' Prüfung): U!=Uk'q7 Bytes, dist 11
  • Aufgabe 1 (Basisumwandlung): Us36 u6 Bytes, dist 14
  • Aufgabe 2 (ASCII-Codes): UmX=>Xc7 Bytes, Abstand 14
  • Aufgabe 7 (sehen Sie selbst): "PPCG"6 Bytes, dist 18
  • Aufgabe 9 (ಠ Ersetzung): Ur"[Oo]",'ಠ13 Bytes, dist 27
  • Aufgabe 8 (Etage (sqrt (n))): X=Uq f;XoU*X+1,X16 Bytes, dist 52
  • Aufgabe 6 (Primfaktorsumme): 2oU fX=>2oX eY=>X%Y &&!(U%X)r(X,Y =>X+Y39 Bytes, dist 172
  • Aufgabe 5 (Caesar-Chiffre): UmX=>128o mY=>Yd)a k'A i#Z,'A k'a i#z,'a gXc44 Bytes, Abstand 216

Hier ist ein Ausschnitt, der Ihnen (einen) der effizientesten Wege zeigt, Ihre Programme zu arrangieren:

Mit der neuesten Version von Japt (die in dieser Herausforderung nicht konkurriert) werden die meisten Aufgaben kürzer:

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

Die optimale Reihenfolge ist jetzt 2,4,3,1,6,7,9,8,5, in den kommenden auf eine satte Punktzahl von 217 , weniger als ein Drittel des ursprünglichen!

Vorschläge willkommen!


7

Pyth, Score 489

Basis-Konvertierung: 15

s@L+s`MTrG1jQ36

Caesar Cipher: 13 + 11 ^ 1.5

u.rGHrBG1z 36

Teilbar durch 1738: 7 + 11 ^ 1.5

!%Q1738

Erste N positive ganze Zahlen: 8 + 8 ^ 1.5

*Rs@Q2SQ

Summe der Primfaktoren: 4 + 6 ^ 1.5

s{PQ

Auftreten von q in string: 4 + 4 ^ 1,5

}\qz

Verbinden Sie alle ASCII-Codes: 5 + 4 ^ 1.5

jkCMz

"PPCG" drucken: 5 + 5 ^ 1.5

"PPCG

Ersetzen durch : 9 + 7 ^ 1.5

Xz"oO"\ಠ

3

Rubin, 1488

Wahrscheinlich viel Raum für Verbesserungen. Verbrachte die meiste Zeit damit, die Punktzahl zu berechnen ...

Summe der Primfaktoren : 64
require'prime';p gets.to_i.prime_division.reduce(0){|s,a|s+a[0]}
36 Base : 30 + 47 1,5 = 352
puts gets.to_i.to_s(36).upcase
Teilbar durch 1738 : 22 + 15 1.5 = 80
puts gets.to_i%1738==0
PPCG drucken : 9 + 18 1,5 = 85
puts:PPCG
Enthält String q? : 10 + 8 1,5 = 32
p gets[?q]
Replaceo : 23 + 16 1,5 = 87
puts gets.gsub(/o/i,?ಠ)
Caesar-Chiffre : 32 + 21 1,5 = 128
puts gets.tr 'A-Za-z','B-ZAb-za'
ASCII-Codes : 37 + 26 1,5 = 169
puts gets.chomp.chars.map(&:ord).join
Ganze Zahlen teilbar durch Quadratwurzel : 72 + 56 1,5 = 491
puts *(1..1/0.0).lazy.select{|i|i%Math.sqrt(i).floor==0}.take(gets.to_i)

Sie könnten eine Verbesserung erhalten , wenn Sie Ihre Programme lambdas umgewandelt
Nicht ,

3

Java, Punktzahl 8331

Diese Höhenunterschiede bringen meine Punktzahl hier um.

(Diese Programme nehmen Eingaben als Befehlszeilenargumente entgegen.)

Programm 1 (119):

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

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

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

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

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

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

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

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

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

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

Programm 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
Es ist Java. Sie sollten keine Parti erwarten ...;)
kirbyfan64sos

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

1

Pyth, Punktzahl 817

Nummer 1: 24

Jjk+UTrG1VjKvz36=+k@JN;k

Nummer 2: (9 + 16 1,5 = 73)

Vz=+kCN;k

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

/QC"ۊ

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

hxz\q

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

J+GrG1VzIhxJNKChCNIhxJKpK)EpC-CK26))EpN

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

s{PQ

Nummer 7: (5 + 4 1,5 = 13)

"PPCG

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

VK/@Q2 1*KhN

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

j\ಠcj\ಠcz\o\O

Nicht das Beste, ich habe gerade angefangen, Pyth zu lernen und dachte, ich würde es versuchen, Nummer 5 hat meine Punktzahl wirklich zunichte gemacht. Ich denke, ich kann ein paar davon kürzer machen, aber das wird mich auf der Strecke mehr verletzen. Alle Tipps von erfahrenen Pyth-Benutzern sind willkommen.


Nummer 6 ist , was wirklich meine Punktzahl getötet. Nun, Nummern 5, 6 und 9.
SuperJedi224

@ SuperJedi224 können Sie die Reihenfolge der Programme ändern. Zum Beispiel würde das Umschalten von 5 und 7 die Punktzahl ein wenig senken.
Arcturus

@Eridan Warten Sie, können Sie das tun? Ich glaube , ich , dass heute Nachmittag tun werde.
SuperJedi224

@ SuperJedi224 You must use one language to write programs that perform the following nine tasks, in any order.Viel Glück!
Arcturus

3
5 + 14^1.5ist nicht 19
Jakube

-1

Python 3 (derzeit ungültig), 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)

Nicht wirklich so guter Code, aber irgendwie funktioniert: D. Die Summe der Primfaktoren funktioniert nicht. Ich erhalte immer ein anderes Ergebnis als Ihr Beispiel, also habe ich es entfernt. Python unterstützt das Zeichen auch nicht. Stattdessen wird os durch 0s ersetzt

IO INFO:

1. Eingabe: int in Basis 10 | Ausgabe: diese Zahl in Basis 36

2. Eingabe: eine Zeichenkette | Ausgabe: ASCII-Nummern des Strings

3. Eingabe: Ganzzahl | Ausgabe: Richtig oder falsch, abhängig davon, ob die Zahl durch 1738 teilbar ist

4. Eingabe: String | Ausgabe: T oder F, je nachdem, ob der String "q" enthält

5. Eingabe: String | Ausgabe: Caser Cipher +1 des Strings

6. druckt nur "PPCG" wörtlich

7. Eingabe: int n | Ausgabe: erste n Ints durch Etage teilbar (sqrt (n))

8. Eingabe: String | Ausgabe: Ersetzte alle os durch 0 (nicht durch ಠ, da Python dieses Zeichen nicht unterstützt, werde nicht zu wütend :))


Oh ja. Könnten Sie bitte eine grundlegende Erklärung zur Berechnung der Primfaktoren geben, da ich immer ein anderes Ergebnis erhalte als in Ihrem Beispiel.
Ciprum,

13
Willkommen bei Programming Puzzles und Code Golf! Dies entspricht nicht ganz den Anforderungen der Herausforderung, da für jede Aufgabe ein anderes Programm angefordert wird. Außerdem müssen Sie die Bewertungsregeln für diese Herausforderung befolgen, insbesondere die Levenshtein-Distanzfunktion.
AdmBorkBork

3
Python unterstützt ಠ, stellen Sie einfach au vor den String. u "ಠ_ಠ" <- wie
folgt
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.