Код Бильярд (Левенштейн Гольф)

24

Вы должны использовать один язык для написания программ, которые выполняют следующие девять задач в любом порядке .

  • Преобразовать введенное число из базы 10 в базу 36.
    • Пример ввода: 1000
    • Пример вывода: RS(вывод должен быть в верхнем регистре)
  • Преобразуйте каждый символ в строке в его десятичные десятичные коды ASCII и напечатайте соединенные вместе коды.
    • Пример ввода: Scrambled 3GG5
    • Образец вывода: 839911497109981081011002051717153
  • Определите, делится ли введенное число на 1738.
    • Верните истинное значение, если оно есть, и ложное значение, если это не так.
  • Определите, есть ли в строке буква q.
    • Верните истинное значение, если оно есть, и ложное значение, если нет.
  • Закодируйте введенную строку букв с помощью шифра Цезаря +1.
    • Дело должно быть сохранено. Небуквенные символы будут напечатаны без изменений.
    • Пример ввода: Good morning, World!
    • Образец вывода: Hppe npsojoh, Xpsme!
  • Найдите и выведите сумму простых множителей числа.
    • Пример ввода: 1320
    • Образец вывода: 21
  • Версия для печати PPCG.
  • Выведите первые nнатуральные числа, которые делятся на floor(sqrt(n)).
    • n введенное целое число
  • Замените каждый oи Oво введенной строке на .
    • Пример ввода: Onomatopoeia
    • Образец вывода: ಠnಠmatಠpಠeia

Вы заметите, что это Code Billiardsне так Code Golf. Цель этой задачи, как и в бильярде, состоит в том, чтобы настроить свой код так, чтобы он мог быть слегка изменен для следующей задачи. Вот почему ваши программы не должны решать вышеуказанные задачи по порядку.

Ваша оценка определяется следующим образом

  • Ваша оценка увеличивается на 1каждый байт в ваших программах.
  • Ваша оценка увеличивается, floor(n^(1.5))если две последовательные программы имеют расстояние Левенштейна n. Например, если ваша первая программа potatoи вторая программа taters, ваш счет увеличивается на 12 на 12 байт и на 11= floor(5^(1.5))для расстояния Левенштейна, равного 5.

Цель этой задачи - получить как можно более низкий балл после написания всех девяти программ. Применяются стандартные правила компьютерной графики.


Чтобы увидеть таблицу лидеров, нажмите «Показать фрагмент кода», прокрутите вниз и нажмите «► Выполнить фрагмент кода». Отрывок сделан Оптимизатором.

Арктур
источник
1
Ух ты ... У меня буквально была ТОЧНАЯ та же идея для вызова прошлой ночью. Как странно ...
ETHproductions
@ETHproductions Я тоже получил идею прошлой ночью и написал что-то об этом в Песочнице. Ваша идея пришла оттуда? Если нет, совпадение действительно смешное.
Арктур
1
Нет, у меня была идея, когда я шел в кровать. Не видел ваш пост вообще! Полагаю, это пример того, как «
мыслящие по
Каково расстояние Левенштейна и a? Это 1 ( считается как 1 символ) или 2 (потому что на самом деле это 2 байта)?
Якуб
1
@Mego Вот более быстрый алгоритм. :) Кроме того, вы, возможно, не видели этого, но в моем ответе есть фрагмент кода, который автоматически упорядочивает программы в оптимальном порядке и использует сверхбыстрый алгоритм.
ETHproductions

Ответы:

8

Japt , 886 866 766 725 688 669

Задачи 5 и 6 являются убийцами. Возможно, есть более короткие способы сделать их. Я думаю, что расстояния Левенштейна также могут быть сокращены.

  • Задача 3 (делимость): !(U%#ۊ
    7 байтов (арабский символ портит выравнивание)
  • Задача 4 (проверка «q»): U!=Uk'q 7 байтов, dist 11
  • Задача 1 (базовая конверсия): Us36 u 6 байтов, dist 14
  • Задача 2 (коды ASCII): UmX=>Xc 7 байтов, дистрибутив 14
  • Задача 7 (убедитесь сами): "PPCG"6 байт, дист. 18
  • Задача 9 (ಠ замена): Ur"[Oo]",'ಠ 13 байт, дист. 27
  • Задача 8 (этаж (sqrt (n))): X=Uq f;XoU*X+1,X 16 байт, расст. 52
  • Задача 6 (сумма простых множителей): 2oU fX=>2oX eY=>X%Y &&!(U%X)r(X,Y =>X+Y 39 байтов, 172
  • Задача 5 (Цезарь): UmX=>128o mY=>Yd)a k'A i#Z,'A k'a i#z,'a gXc 44 байта, расст. 216

Вот фрагмент, который расскажет вам (один из) наиболее эффективных способов организации ваших программ:

С последней версией Japt (не участвующей в этом соревновании) большинство задач становятся короче:

  • Задание 1: s36 u 5 байт
  • Задача 2: mc 2 байта
  • Задача 3: v#ۊ
    4 байта
  • Задача 4: oq 2 байта
  • Задача 5: ;B±B+C²UrF,@Bg1+BbX 19 байт
  • Задача 6: k â x 5 байт
  • Задача 7: "PPCG 5 байт
  • Задача 8: B=U¬f)oU*B+1B 13 байт
  • Задача 9: ro'ಠ'i6 байт

Оптимальный заказ теперь 2,4,3,1,6,7,9,8,5, с колоссальным счетом 217 , что составляет менее трети от первоначального!

Предложения приветствуются!

ETHproductions
источник
7

Пиф, оценка 489

Базовая конверсия: 15

s@L+s`MTrG1jQ36

Цезарь Шифр: 13 + 11 ^ 1,5

u.rGHrBG1z 36

Делится на 1738: 7 + 11 ^ 1,5

!%Q1738

Первые N натуральных чисел: 8 + 8 ^ 1,5

*Rs@Q2SQ

Сумма простых факторов: 4 + 6 ^ 1,5

s{PQ

Появление q в строке: 4 + 4 ^ 1,5

}\qz

Присоедините все коды ASCII: 5 + 4 ^ 1.5

jkCMz

Печать "PPCG": 5 + 5 ^ 1,5

"PPCG

Заменить на : 9 + 7 ^ 1,5

Xz"oO"\ಠ
Jakube
источник
3

Руби, 1488

Вероятно, здесь есть много возможностей для улучшения. Большую часть времени потратил на подсчет очков ...

Сумма простых факторов : 64
require'prime';p gets.to_i.prime_division.reduce(0){|s,a|s+a[0]}
База 36 : 30 + 47 1,5 = 352
puts gets.to_i.to_s(36).upcase
Делится на 1738 : 22 + 15 1,5 = 80
puts gets.to_i%1738==0
Печать PPCG : 9 + 18 1,5 = 85
puts:PPCG
Содержит ли строка q? : 10 + 8 1,5 = 32
p gets[?q]
Заменитьo : 23 + 16 1,5 = 87
puts gets.gsub(/o/i,?ಠ)
Ceasar шифр : 32 + 21 1,5 = 128
puts gets.tr 'A-Za-z','B-ZAb-za'
Коды ASCII : 37 + 26 1,5 = 169
puts gets.chomp.chars.map(&:ord).join
Целые числа, делимые на квадратный корень : 72 + 56 1,5 = 491
puts *(1..1/0.0).lazy.select{|i|i%Math.sqrt(i).floor==0}.take(gets.to_i)
daniero
источник
Вы могли бы получить улучшение, если бы вы преобразовали свои программы в лямбды
не то, что Чарльз
3

Ява, оценка 8331

Эти левенштейновские расстояния убивают мой счет здесь.

(Эти программы принимают ввод в качестве аргументов командной строки)

Программа 1 (119):

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

Программа 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);}}

Программа 3 (101 + 49 1,5 = 444):

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

Программа 4 (108 + 20 1,5 = 197):

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

Программа 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);}}

Программа 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;}}

Программа 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;}}

Программа 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;}}

Программа 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
источник
3
Это Java. Вы не должны ожидать короткий счет ...;)
kirbyfan64sos
interface l {static void main (Строка ...
Рохан
1

Pyth, оценка 817

номер 1: 24

Jjk+UTrG1VjKvz36=+k@JN;k

номер 2: (9 + 16 1,5 = 73)

Vz=+kCN;k

номер 3: (5 + 8 1,5 = 27)

/QC"ۊ

номер 4: (5 + 14 1,5 = 57)

hxz\q

номер 5: (39 + 37 1,5 = 264)

J+GrG1VzIhxJNKChCNIhxJKpK)EpC-CK26))EpN

номер 6: (4 + 39 1,5 = 247)

s{PQ

номер 7: (5 + 4 1,5 = 13)

"PPCG

номер 8: (12 + 12 1,5 = 53)

VK/@Q2 1*KhN

номер 9 (13 + 13 1,5 = 59)

j\ಠcj\ಠcz\o\O

Не самое лучшее, я только начал изучать pyth сегодня и думал, что попробую, номер 5 действительно убил мой счет, я думаю, что я могу сократить некоторые из них, но это только повредит мне больше на дистанциях. Любые советы от более опытных пользователей Pyth приветствуются.

Phyxie
источник
Номер 6 - это то, что действительно убило мой счет. Ну, номера 5, 6 и 9.
SuperJedi224
@ SuperJedi224 Вы можете изменить порядок программ. Например, переключение 5 и 7 здесь немного снизит оценку.
Арктур
@ Эридан Подожди, ты можешь это сделать? Я думаю, я сделаю это сегодня днем.
SuperJedi224
@ SuperJedi224 You must use one language to write programs that perform the following nine tasks, in any order.Удачи!
Арктур
3
5 + 14^1.5не 19
Якуб
-1

Python 3 (в настоящее время недействителен), 621 байт

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)

Не очень хороший код, но в некоторой степени работает: D. Сумма простых факторов не работает. Я всегда получаю другой результат из вашего примера, поэтому я удалил его. Также Python не поддерживает символ, поэтому он заменяетo s на0 s

IO INFO:

1-й вход: int в базе 10 | Вывод: это число в базе 36

2-й вход: строка | Вывод: Ascii номера строки

3-й вход: целое число | Вывод: True или False в зависимости от того, можно ли делить число на 1738

4-й вход: строка | Вывод: T или F в зависимости от того, есть ли в строке «q»

5-й вход: строка | Вывод: Caser Cipher +1 из строки

6-е: буквально печатает «PPCG» буквально

7-й вход: int n | Вывод: первые n целых, кратные полу (sqrt (n))

8-й вход: строка | Вывод: все os заменены на 0 (не на ಠ, потому что python не поддерживает этот символ, не сердитесь :))

Ciprum
источник
О да. Не могли бы вы дать базовое объяснение расчета простых факторов, потому что я всегда получаю результат, отличный от того, что в вашем примере.
Ciprum
13
Добро пожаловать в программирование головоломок и Code Golf! Это не совсем соответствует требованиям задачи, так как задача запрашивает разные программы для каждой задачи. Кроме того, вы должны будете следовать правилам оценки для этой задачи, особенно отмечая функцию расстояния Левенштейна.
AdmBorkBork
3
Python поддерживает ಠ, просто поместите au перед строкой. u "ಠ_ಠ" <- как это
DJgamer98