Код для програмування


10

Спробуємо це ще раз.

Завдання цього конкурсу - зробити два фрагменти коду, які є анаграмами один одного (обидва повинні містити однакові байти в іншому порядку), і вони будуть виконувати такі завдання:

  • Потрібно перевірити, чи введене число є задоволеним чи простим , і вивести, чи число або (наприклад, 7повинне вивести happy primeі 4повинне вивести sad non-prime).

  • Інший повинен виводити свій розмір коду в байтах як слово (60-байтна програма виводить sixty, 39-байтна програма виводиться thirty-nine).

Якщо потрібне роз’яснення щодо правил, не соромтеся сказати мені.

Це змагання з кодового гольфу, тому найкоротша програма виграє!


Що заважає робити це, /*program1*/program2а потім program1/*program2*/? Я думаю, вам слід заборонити коментарі.
Вільям Барбоса

@WilliamBarbosa Чому? Це навряд чи буде оптимальним рішенням.
Мартін Ендер

Але ви також можете поділитися деякими частинами, а не ділитися іншими, що робить це набагато простіше
гордий haskeller

1
@proudhaskeller Заборонення коментарів не вирішує цього. Ви завжди можете вставляти символи в рядки, назви змінних або частини коду, які не виконуються з інших причин.
Мартін Ендер

1
FWIW, я не думаю, що ви повинні видаляти власні дані. ОП чи ні, це була цікава відповідь.
Денніс

Відповіді:


6

CJam, 80 49 48 символів

ОНОВЛЕННЯ : Натхненний реалізацією Денніса для обчислення суми квадратів цифр, ось коротка версія

Щасливий / сумний прем'єр / не прем'єр:

ri:T{Ab2f#:+}G*X="happy""sad"?STmp4*"non-prime">

Як це працює:

ri:T                                "Read input as integer and store it in T"
    {       }G*                     "Run this code block 16 times"
     Ab                             "Convert the number into base 10"
       2f#                          "Calculate square of each digit"
          :+                        "Sum all the squared digits and put the sum on stack"
X=                                  "Compare the sum after 16th iteration to 1"
  "happy""sad"?                     "If sum is 1, put `happy` to stack, otherwise `sad`"
               ST                   "Put space on stack then put the value of T on stack"
                 mp4*               "Put 4 to stack if input is prime, otherwise 0"
                     "non-prime">   "Put `non-prime` to stack and slice out first four characters if the input number is prime"

сорок вісім

""A"forTy-eiGhT""ri:{b2#:+}*X=appsadSmp4*nnpm>"?

Як це працює:

""                                  "Push empty string to stack"
  A                                 "Push 10 to stack"
   "forTy-eiGhT"                    "Push `forTy-eiGhT` to stack"
                "ri:....pm>"        "Push this string to stack too"
                            ?       "Keep `forTy-eiGhT` on stack and pop the other string"

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

Перша програма читає число з STDIN


Моє оригінальне рішення з 80 символів

Щасливий / сумний прем'єр / не прем'єр:

r:N{1/~]{i_*T+:T;}/T_s\1=:H!X):XK<&0:T;}g;H"happy""sad"?SNimp"prime"_"non-"\+?:Y

eigHTY

"eigHTY""r:N{1/~]{i_*T+:T}/_s\1=:H!X):XK<&0:T}happysad?SNmp";"prim_";"non-\?:+";

4

CJam, 50 49 байт

Тест на щастя та первинність

li_{Ab2f#:+}30*(T="happy""sad"?S@mp4*"non-prime">

Читає номер від STDIN. Обидва тести працюють лише для 64-бітних цілих чисел.

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

Власна довжина

A"forTy-nine""l_{b2#:+}30*(=happsadS@mp4*pim>"?""

Друк СОРОК дев'ять .


+1 для покращення 31 байта, і "дляTy-9".
Джосія Уінслоу

3

Гольфскрипт - 81

Ця програма перевіряє, чи є номер задоволеним та / або простим.

~.:a;0.{).a\%!@+\}a*;2="""non-"if"prime"@ {`0\{48-.*+}/}9*("sad ""happy "if@@#get

Ця програма, анаграма останнього, виводить "вісімдесят один" (його байт у розмірі слова).

;"eighty-one"#   !""""""""%()***++-..../002489:;=@@@@\\\`aaaaadffiimnppprs{{{}}}~

Це має слугувати прикладом.


2
Так, надання контрольної реалізації для проблеми з гольфовим кодом у GolfScript може бути не найкращою ідеєю. Я вважаю, що цього досить важко перемогти, а отже, злегка зневажливо для учасників.
Мартін Ендер

Я бачу, що люди не помічають, що ви написали запитання і просили вас ... Я повністю згоден з Мартіном.
гордий haskeller

@proudhaskeller З самовідповіддю абсолютно нічого поганого.
Джастін

Я кажу, що нічого поганого у відповіді на себе чи коментованому коді немає.
Джосія Уінслоу

2
@JosiahWinslow У цьому немає нічого поганого. Я просто кажу, що ви можете пропустити кілька цікавих довших відповідей, якщо ви одразу опублікуєте дуже хороше рішення.
Мартін Ендер

1

J - 87 char

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

((sad`happy{~1 e.(,[:+/@:*:,.&.":@{:)^:(1-{:e.}:)^:_);@,' ';'gtv]non-prime'}.~4+4*1&p:)
'((ad`app{~1 .(,[:+/@:*:,.&.":@{:)^:(1-{:.}:)^:_);@, ;onprm}.~4+4*1&p:)']'eighty-seven'
('(ad`app{~1 .(,[:+/@:*:,.&.:@{:)^:(1-{:.}:)^:);@, ;onprm}.~4+4*1&p:']'eighty-seven'"_)

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

Ми втрачаємо більшість знаків, перевіряючи на щастя. (,[:+/@:*:,.&.":@{:)є основним органом, який підсумовує квадрати цифр числа, і (1-{:e.}:)є тестом, чи відбулося це число ще. sad`happy{~1 e.перетворює це на результат слова, і ми додаємо його до передньої частини рядка non-prime, потенційно відриваючи чотири символи, якщо число насправді було простим.

В анаграмі ми просто ховаємо всі біти, які не входять 'eighty-seven'до рядка, який ми ігноруємо. Я міг би зробити краще, якби у Дж було більше листів для повторного використання, але це не так, так добре.


Це хороше рішення.
Джосія Уінслоу
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.