Пара-гольфінг-близнюки та послідовності Коллаца


12

Це новий вид виклику, натхненний проблемою Recover mutited вихідний код .

Ви повинні написати дві програми або функції обома однією мовою. Перший повинен вирішити завдання №1, а другий - розв’язати завдання №2.

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

Завдання №1

Вам дано позитивне ціле число , Nі ви повинні виводити послідовність Коллатц з Nрозділених пробілами або перекладом рядка. Дозвільний роздільник дозволений.

Першим елементом послідовності Колац є N. Решта елементів створюються на основі їх наступника :ai1

ai={ai12 if ai1 is even3ai1+1 if ai1 is odd

Як тільки послідовність 1не досягається, нові елементи не формуються.

Введення => Приклади виводу:

6 => 6 3 10 5 16 8 4 2 1
8 => 8 4 2 1
1 => 1

Завдання №2

Пара близнюків-близнюків - це ціле натуральне число, різниця яких 2, і вони обидва прима.

Вам дано додатне ціле число, Nі вам слід вивести найменшу пару близнюків-близнюків, де обидва прайми перевищують NПерше число має бути меншим, а два прайми повинні бути розділені пробілами або новою лінією. Дозвільний роздільник дозволений.

Введення => Приклади виводу:

6 => 11 13
42 => 59 61
1 => 3 5

Фрагмент для обчислення балу

(Модифікація однієї у проблемі Відновити мутовану вихідний код .)

Редагувати

У заголовку відповідей скористаємося форматом

[Language], [longer length] + [distance] = [final score].

Напр

Python 2, 60 + 32 = 92

Відповіді:





2

Піта, 20 + 14 = 40 34

Колац:

QWtQ=Q@,/Q2h*3QQQ

Основні пари:

~Q1WttP*Q+Q2~Q1;Q+Q2

Обидві - це програми, які беруть дані від STDIN та виводять номери на нових рядках. Просто гольфи обидві відповіді, використовуючи зараз той самий примітивний цикл. Це, мабуть, можна було б трохи покращити.

Редагувати: Додано перевірку кращих умов викраденого з @isaacg. Здається, використання фільтра все ж коротше, ніж використання циклу часу для простих пар.

Спробуйте його онлайн тут.


Це виводить 3 5на вхід 3 для простих пар. Він повинен вивести 5 7.
isaacg

@isaacg Виправлено це, вартість 3 :(
FryAmTheEggman

2

05AB1E , 14 + 13 10 9 = 27 24 23

-4 бали завдяки ASCII

Послідовність Колац (14 байт):

[DÉi3*>ë2÷}Ð,#

Спробуйте в Інтернеті!

Близнюки (14 байт):

[DÅND>>Dp#}s,,

Спробуйте в Інтернеті!


Двомісний прайс-гольф (11 байт):

[ÅNDÌp#]DÌ»

Спробуйте в Інтернеті!


Посилання
лише для ASCII

Спасибі, виправлено!
Віслав

праймери , -3 бал. напевно, варто зберегти версію для гольфу у відповідь як бічну записку, якщо є інший, кращий гольф (що саме робить пара, btw? як, чому я маю робити ,,, і чому працює тільки Ð,там)
тільки для ASCII

Ще 1 (відредагувати: майте на увазі, перше число має бути меншим. Оцінка наразі 24
лише


1

Java 8, 118 + 84 = 202

Колац:

n->{for(System.out.println(n);n>1;System.out.println(n=n%2<1?n/2:3*n+1));}

Близнюки:

n->{t:for(int p,z;;n++){for(z=n;z<n+3;z=z+2)for(p=2;p<z;p++)if(z%p<1)continue t;System.out.print(n+" "+(n+2));break;}}

згадайте про Java 8 ..
Оптимізатор

1

Математика, 53 + 29 = 82

Послідовність колац:

Print/@(NestWhileList[If[OddQ@#,3#+1,#/2]&,#,#>1&]);&

Програма Twin primes:

Print/@(NestWhile[NextPrime,#,!PrimeQ[#+2]&]+{0,2});&

1

> <> , 116 + 86 = 202

Програма Collatz (46):

0i:0(?v$a*$'0'-+!
?v6,>:>~:nao:1=?;3*:2%
 >1+^

Програма Twin primes (116):

0i:0(?v$a*$'0'-+!
v&2+1~<:-2
<v!?%&+1:&:v?=&:&:
 >&~0$2&2+v>&~143.
:&:1+&%?!v>:&:&=?v
0v?*r$0~&< .561~&<.1
:<;noan-2

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

Можна зробити набагато краще, кинувши задню половину близнюків у невикористані місця програми Collatz, але я не впевнений, чи це дозволено.


3
"Гольф, гольф НАО!" - Ноанольд Гольфзенеггер. З цього приводу питання, схоже, не говорить про те, що додавання сміття для зменшення відстані Левенштейна є табу, тому я б пішов на
зріст

0

C ++ Відстань = 114 Більша довжина = 155 Оцінка = 269

Завдання 1

void c(int N){while(N>1){cout<<N<<' ';N=(N%2==0)?N/2:N*3+1;}cout<<N;}

Завдання 2

int p(int x){int z=0;for(int i=2;i<x;i++){if(x%i==0){z=1;break;}}return z;}
void c(int N){N=(N%2==0)?N+1:N+2;int M=N+2;while(p(N)+p(M)>0){N=M;M+=2;}cout<<N<<' '<<M;}

Завдання 2 вдосконалено

int p(int N){int z=0;for(int i=2;i<N;i++){if(N%i==0){z=1;break;}}return z;}
void c(int N){N=(N%2==0)?N+1:N+2;while(p(N)+p(N+2)>0){N+=2;}cout<<N<<' '<<N+2;}

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

@Optimizer Я не знаю іншого способу тестування на праймери? В інших мовах це вбудовано.
bacchusbeale

1
Я навіть не говорив про зміну альго. Наприклад, цей код має лише 102 відстані:int p(int x){int z=0;for(int i=2;1<x;i++){cout<<x<<' ';x=(x%2==0)?x/2:x*3+1;}cout<<x;return z;}
Оптимізатор
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.