Код більярд (Левенштейнський гольф)


24

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

  • Перетворити введене число з бази 10 в базу 36.
    • Зразок введення: 1000
    • Вибірка зразка: RS(вихід повинен мати верхній регістр)
  • Перетворіть кожен символ у рядок до його основної 10 десяткових кодів 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.

Завдання цього завдання - отримати якомога менше балів після написання всіх дев'яти програм. Діють стандартні правила CG.


Щоб побачити таблицю лідерів, натисніть «Показати фрагмент коду», прокрутіть донизу та натисніть «► Запустити фрагмент коду». Знімок зроблений оптимізатором.


1
Ого, я буквально мав точну таку саму ідею для виклику минулої ночі. Як дивно ...
ETHproductions

@ETHproductions Я отримав цю ідею і вчора ввечері, і щось написав про неї на пісочниці. Ваша ідея виникла звідти? Якщо ні, то збіг справді смішний.
Арктур

1
Ні, у мене була ідея, коли я був на шляху до ліжка. Ви не бачили своєї публікації взагалі! Я припускаю, що це приклад "розуму коду-гольфу думають однаково";)
ETHproductions

Яка відстань і Левенштайн a? Це 1 (рахується як 1 char) або 2 (тому що насправді 2 байти)?
Якубе

1
@Mego Ось більш швидкий алгоритм. :) Також, можливо, ви цього не бачили, але в моїй відповіді - фрагмент, який автоматично упорядковує програми в оптимальному порядку, і він також використовує надшвидкий алгоритм.
ETHproductions

Відповіді:


8

Japt , 886 866 766 725 688 669

Завдання 5 та 6 - це вбивці. Можливо, є більш короткі способи їх виконання. Я думаю, що відстань Левенштейна все ще можна зменшити.

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

Ось фрагмент, який розповість вам про один із найефективніших способів організації програм:

З останньою версією Japt (яка не змагається в цьому виклику) більшість завдань стає коротшою:

  • Завдання 1: s36 u5 байт
  • Завдання 2: mc2 байти
  • Завдання 3: v#ۊ
    4 байти
  • Завдання 4: oq2 байти
  • Завдання 5: ;B±B+C²UrF,@Bg1+BbX19 байт
  • Завдання 6: k â x5 байт
  • Завдання 7: "PPCG5 байт
  • Завдання 8: B=U¬f)oU*B+1B13 байт
  • Завдання 9: ro'ಠ'i6 байт

Оптимальне замовлення зараз 2,4,3,1,6,7,9,8,5, прибуваючи з колосальним балом 217 , що менше третини від оригіналу!

Пропозиції Ласкаво просимо!


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"\ಠ

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,?ಠ)
Цезаровий шифр : 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)

Ви можете отримати покращення, якщо перетворили свої програми на лямбда
Не те, що Чарльз

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

3
Це Java. Не варто сподіватися на короткий рахунок ...;)
kirbyfan64sos

інтерфейс l {static void main (String ...
Rohan Jhunjhunwala

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

Не найкраще, я щойно почав вивчати піт сьогодні і подумав, що спробую, номер 5 справді вбив мій бал, я думаю, що можу отримати кілька з них коротше, але це просто зашкодить мені більше на відстані. Вдячні будь-які поради більш досвідчених користувачів pyth.


Число 6 - це те, що насправді вбило мою оцінку. Ну, цифри 5, 6 і 9.
SuperJedi224

@ SuperJedi224 Ви можете змінити порядок програм. Наприклад, перемикання 5 і 7 тут трохи знизить бал.
Арктур

@Eridan Зачекайте, ви можете це зробити? Я думаю, я зроблю це сьогодні вдень.
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 не підтримує char, замість цього він замінює os на 0s

IO INFO:

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

2-й вхід: рядок | Вихід: номери Ascii рядка

3-й вхід: ціле | Вихід: Вірно чи Невірно, залежно від того, чи число можна розділити на 1738 рік

4-й вхід: рядок | Вихід: T або F залежно від того, чи в рядку є "q"

5-й вхід: рядок | Вихід: Caser Cipher +1 рядка

6-е: просто друкує "PPCG" буквально

7-й вхід: int n | Вихід: перші n ints, що ділиться на підлогу (sqrt (n))

8-й вхід: рядок | Вихід: Замінено всі os на 0 (не з ಠ, тому що python не підтримує цього символу, не зліть :))


О так. Не могли б ви пояснити основне пояснення обчислення простих факторів, тому що я завжди отримую інший результат, ніж той, який є у вашому прикладі.
Ciprum

13
Ласкаво просимо до головоломки програмування та коду для гольфу! Це не зовсім відповідає вимогам завдання, оскільки завдання вимагає різної програми для кожного завдання. Крім того, вам потрібно буде дотримуватися правил підрахунку цього виклику, особливо відзначаючи функцію дистанції Левенштейна.
AdmBorkBork

3
Python підтримує ಠ, просто поставте au перед рядком. u "ಠ_ಠ" <- ось так
DJgamer98
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.