Code Billiards (Levenshtein golf)


24

È necessario utilizzare una lingua per scrivere programmi che eseguono le seguenti nove attività, nell'ordine desiderato .

  • Convertire un numero immesso dalla base 10 alla base 36.
    • Input di esempio: 1000
    • Esempio di output: RS(l'output deve essere in maiuscolo)
  • Converti ogni carattere in una stringa nei suoi 10 codici ASCII decimali di base e stampa i codici concatenati insieme.
    • Input di esempio: Scrambled 3GG5
    • Uscita campione: 839911497109981081011002051717153
  • Determina se un numero immesso è divisibile per 1738.
    • Restituisce un valore vero se lo è e un valore falso se non lo è.
  • Determina se una stringa contiene la lettera q.
    • Restituisce un valore vero se lo fa e un valore falso se non lo fa.
  • Codifica una stringa di lettere immessa con un codice Cesare di +1.
    • Il caso deve essere conservato. I caratteri non lettera verranno stampati senza modifiche.
    • Input di esempio: Good morning, World!
    • Uscita campione: Hppe npsojoh, Xpsme!
  • Trova e stampa la somma dei fattori primi di un numero.
    • Input di esempio: 1320
    • Uscita campione: 21
  • Stampa PPCG.
  • Stampa i primi nnumeri interi positivi che sono divisibili per floor(sqrt(n)).
    • n è un numero intero immesso.
  • Sostituisci ogni oe Oin una stringa immessa con .
    • Input di esempio: Onomatopoeia
    • Uscita campione: ಠnಠmatಠpಠeia

Avrai notato che questa sfida Code Billiardsnon lo è Code Golf. L'obiettivo di questa sfida, come nel biliardo, è impostare il codice in modo che possa essere modificato solo leggermente per la sfida successiva. Questo è il motivo per cui i tuoi programmi non devono risolvere i compiti sopra elencati in ordine.

Il tuo punteggio è determinato come segue

  • Il tuo punteggio aumenta di 1ogni byte nei tuoi programmi.
  • Il tuo punteggio aumenta floor(n^(1.5))se due programmi consecutivi hanno una distanza di Levenshtein di n. Ad esempio, se il tuo primo programma è potatoe il secondo programma lo è taters, il tuo punteggio aumenta di 12 per 12 byte e di 11= floor(5^(1.5))per una distanza di Levenshtein di 5.

L'obiettivo di questa sfida è di avere il punteggio più basso possibile dopo che tutti e nove i programmi sono stati scritti. Si applicano le regole CG standard.


Per visualizzare la classifica, fai clic su "Mostra snippet di codice", scorri verso il basso e fai clic su "► Esegui snippet di codice". Snippet realizzato da Optimizer.


1
Whoa ... Ho avuto letteralmente la stessa idea ESATTA di una sfida ieri sera. Che strano ...
ETHproductions

@ETHproductions Ho avuto l'idea anche ieri sera e ne ho scritto qualcosa sulla Sandbox. La tua idea è nata da lì? Altrimenti, la coincidenza è davvero divertente.
Arcturus,

1
No, ho avuto l'idea mentre stavo andando a letto. Non ho visto il tuo post! Immagino che questo sia un esempio di "menti del code-golf che pensano allo stesso modo";)
ETHproductions

Qual è la distanza di Levenshtein di e a? È 1 (contando come 1 carattere) o 2 (perché in realtà è 2 byte)?
Jakube,

1
@Mego Ecco un algoritmo più veloce. :) Inoltre, potresti non averlo visto, ma nella mia risposta c'è uno snippet che organizza automaticamente i programmi nell'ordine ottimale e utilizza anche l'algoritmo superveloce.
ETHproductions

Risposte:


8

Japt , 886 866 766 725 688 669

I compiti 5 e 6 sono assassini. Forse ci sono modi più brevi per farlo. Penso che anche le distanze di Levenshtein potrebbero essere ridotte.

  • Operazione 3 (divisibilità): !(U%#ۊ
    7 byte (allineamento errato del carattere arabo)
  • Attività 4 (controllo 'q'): U!=Uk'q7 byte, dist 11
  • Attività 1 (conversione di base): Us36 u6 byte, dist 14
  • Attività 2 (codici ASCII): UmX=>Xc7 byte, dist 14
  • Attività 7 (vedere di persona): "PPCG"6 byte, dist 18
  • Attività 9 (ಠ sostituzione): Ur"[Oo]",'ಠ13 byte, dist 27
  • Attività 8 (piano (sqrt (n))): X=Uq f;XoU*X+1,X16 byte, dist 52
  • Task 6 (somma dei fattori primi): 2oU fX=>2oX eY=>X%Y &&!(U%X)r(X,Y =>X+Y39 byte, dist 172
  • Compito 5 (cifra di Cesare): UmX=>128o mY=>Yd)a k'A i#Z,'A k'a i#z,'a gXc44 byte, dist 216

Ecco uno snippet che ti dirà (uno dei) modi più efficienti per organizzare i tuoi programmi:

Con l' ultima versione di Japt (non competitiva in questa sfida), la maggior parte delle attività si riduce:

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

L'ordine ottimale ora è 2,4,3,1,6,7,9,8,5, arrivando a un punteggio enorme di 217 , meno di un terzo dell'originale!

Suggerimenti benvenuti!


7

Pyth, punteggio 489

Conversione base: 15

s@L+s`MTrG1jQ36

Caesar Cipher: 13 + 11 ^ 1.5

u.rGHrBG1z 36

Divisibile per 1738: 7 + 11 ^ 1.5

!%Q1738

Primi N positivi interi: 8 + 8 ^ 1,5

*Rs@Q2SQ

Somma dei fattori primi: 4 + 6 ^ 1.5

s{PQ

Aspetto di q nella stringa: 4 + 4 ^ 1.5

}\qz

Unisci tutti i codici ASCII: 5 + 4 ^ 1.5

jkCMz

Stampa "PPCG": 5 + 5 ^ 1.5

"PPCG

Sostituire con : 9 + 7 ^ 1.5

Xz"oO"\ಠ

3

Ruby, 1488

Probabilmente qui c'è molto margine di miglioramento. Ho trascorso la maggior parte del tempo a calcolare il punteggio ...

Somma dei fattori primi : 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
Divisibile per 1738 : 22 + 15 1.5 = 80
puts gets.to_i%1738==0
Stampa PPCG : 9 + 18 1,5 = 85
puts:PPCG
La stringa contiene q? : 10 + 8 1,5 = 32
p gets[?q]
Sostituiscio : 23 + 16 1,5 = 87
puts gets.gsub(/o/i,?ಠ)
Ceasar cipher : 32 + 21 1.5 = 128
puts gets.tr 'A-Za-z','B-ZAb-za'
Codici ASCII : 37 + 26 1.5 = 169
puts gets.chomp.chars.map(&:ord).join
Numeri interi divisibili per radice quadrata : 72 + 56 1.5 = 491
puts *(1..1/0.0).lazy.select{|i|i%Math.sqrt(i).floor==0}.take(gets.to_i)

Potresti ottenere un miglioramento se hai convertito i tuoi programmi in lambdas
Non che Charles

3

Java, punteggio 8331

Le distanze di Levenshtein stanno uccidendo il mio punteggio qui.

(Questi programmi accettano input come argomenti della riga di comando)

Programma 1 (119):

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

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

Programma 3 (101 + 49 1.5 = 444):

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

Programma 4 (108 + 20 1.5 = 197):

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

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

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

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

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

Programma 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. Non dovresti aspettarti un punteggio breve ...;)
kirbyfan64sos

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

1

Pyth, punteggio 817

numero 1: 24

Jjk+UTrG1VjKvz36=+k@JN;k

numero 2: (9 + 16 1.5 = 73)

Vz=+kCN;k

numero 3: (5 + 8 1.5 = 27)

/QC"ۊ

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

hxz\q

numero 5: (39 + 37 1.5 = 264)

J+GrG1VzIhxJNKChCNIhxJKpK)EpC-CK26))EpN

numero 6: (4 + 39 1.5 = 247)

s{PQ

numero 7: (5 + 4 1.5 = 13)

"PPCG

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

VK/@Q2 1*KhN

numero 9 (13 + 13 1.5 = 59)

j\ಠcj\ಠcz\o\O

Non il migliore, ho appena iniziato a studiare Pyth oggi e ho pensato di provarlo, il numero 5 ha davvero ucciso il mio punteggio, penso di poterne accorciare alcuni, ma questo mi farà solo più male sulle distanze. Sono apprezzati tutti i suggerimenti degli utenti Pyth più esperti.


Il numero 6 è ciò che ha davvero ucciso il mio punteggio. Bene, numeri 5, 6 e 9.
SuperJedi224,

@ SuperJedi224 È possibile modificare l'ordine dei programmi. Ad esempio, passare da 5 a 7 qui ridurrebbe un po 'il punteggio.
Arturo

@Eridan Aspetta, puoi farlo? Immagino che lo farò questo pomeriggio.
SuperJedi224,

@ SuperJedi224 You must use one language to write programs that perform the following nine tasks, in any order.Buona fortuna!
Arturo

3
5 + 14^1.5non ha 19 anni
Jakube,

-1

Python 3 (attualmente non valido), 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)

Non proprio quel buon codice ma in qualche modo funziona: D. La somma dei fattori primi non funziona. Ottengo sempre un risultato diverso dal tuo esempio, quindi l'ho rimosso. Inoltre Python non supporta il carattere, quindi sostituisce la os con 0s

IO INFO:

1o input: int in base 10 | Output: quel numero nella base 36

2o input: una stringa | Output: numeri Ascii della stringa

3o input: intero | Output: vero o falso a seconda che il numero sia divisibile per 1738

4o input: stringa | Output: T o F a seconda che la stringa contenga "q"

5o input: stringa | Output: Caser Cipher +1 della stringa

6 °: stampa letteralmente "PPCG"

7o input: int n | Output: primi nts divisibili per piano (sqrt (n))

8o input: stringa | Output: ha sostituito tutte le os con 0 (non con ಠ perché Python non supporta quel personaggio, non arrabbiarti troppo :))


O si. Potresti per favore fare una spiegazione di base del calcolo dei fattori primi perché ottengo sempre un risultato diverso da quello del tuo esempio.
Ciprum,

13
Benvenuti in Puzzle di programmazione e Code Golf! Questo non soddisfa completamente i requisiti della sfida poiché la sfida richiede un programma diverso per ogni attività. Inoltre, dovrai seguire le regole del punteggio per questa sfida, in particolare notando la funzione di distanza di Levenshtein.
AdmBorkBork,

3
Python supporta ಠ, basta metterlo davanti alla stringa. u "ಠ_ಠ" <- come questo
DJgamer98
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.