Уникайте повторення літер між п'ятьма простими програмами


12

Ваша задача полягає в тому, щоб написати 5 різних повних програм для 5 наступних завдань:

  1. Друк Hello, World!

  2. З огляду на вхід з STDIN, виведіть факториал, ви можете припустити, що вхід є цілим числом = = 0

  3. Давши ціле число N, обчисліть суму простих чисел <= N

  4. З огляду на введення STDIN, виведіть букви, використані у введенні. Наприклад: вхід є Hello world, вам потрібно зробити висновок helowrd. Зауважте, що вихідний літер є малі. Можна припустити, що введення завжди буквене значення з пробілами, пробіли проігноровані.

  5. Виведіть такий алмаз саме так:

       *
      ***
     *****
    *******
     *****
      ***
       *
    

Всі ці виклики, мабуть, дуже прості, але є улов. Кожен лист, який ви використовуєте, не може бути використаний знову в інших програмах. Це не заборонено, але ви отримаєте штраф у +8 байт . Наприклад, якщо це ваша програма для першого завдання:

print("Hello, World!");

Тоді ви не можете використовувати наступні літери (у верхньому або нижньому регістрі формі): p, r, i, n, t, h, e, l, o, w, dв інших програмах. Якщо вам доведеться їх використовувати, ви можете "купити" кожну букву по 8 байт. Тож якщо ви хочете знову використовувати лист lв іншій програмі, ви отримуєте штраф у 8 байт. Після сплати неустойки ви можете використовувати кожну букву скільки завгодно в цій програмі. Інші символи не мають значення. Також усі 5 програм повинні бути однією мовою.

Це , тому виграє найменша кількість байтів!


3
Це дещо інший виклик проблем, які ми вже мали, але недостатньо різні, щоб він не був багатодушним в моїх очах.
Мего

3
@Mego Я б проголосував за те, щоб закрити це як повторне копіювання без обмеження, але обмеження робить це абсолютно новою грою.
трихоплакс

1
Якщо ви використовуєте дану букву в трьох програмах, чи сплачуєте 8-байтний штраф удвічі (16 байт)?
трихоплакс

1
@trichoplax, так, ви платите 16 байт
Аднан

1
@trichoplax Навряд чи. Існуючі рішення вирішених проблем все ще будуть конкурентоспроможними. Найпопулярнішими рішеннями тут будуть просто об'єднання роздутих питань, з більш високим балом від пенальті.
Мего

Відповіді:


10

CJam, 73 байти

"Obkkh+'Phukc&"7f^
q~m!
ri){'j3+_3++~},:+
lS-el_&
4{_' *4@-Y*('**+}%_1>W%\+N*

Кожен рядок - це повна програма. Спробуйте їх онлайн: 1 | 2 | 3 | 4 | 5

Лист карта

 bc  f h  k   op    u       18
            m   q            4
        ij       r          17
    e      l      s          7
             n        w y   27

Якщо ви хочете (і кожна з ваших програм вписується в рядок), ви можете використовувати цю програму CJam, щоб створити мапу листів для власного подання.


Доказ того, що osascript для цього не був побудований: ваше ціле подання становить менше 2 моїх програм. XD +1, приємна робота.
Аддісон Кримп

4

Pyth, 90 байт

Перша спроба ...

Завдання 1: 20 байт

+"Hello, "+C87"orld!

Завдання 2, 3 байти

.!Q

Завдання 3, 9 байт

sf}TPTSvz

Завдання 4, 6 + 8 = 14 байт

@G{rw0

Завдання 5, 44 байти

"   *
  ***
 *****
*******
 *****
  ***
   *

3

osascript, 759 байт

Я знав, що цього буде багато, коли я починав. оо

Завдання 1: 15 байт

"Привіт Світ!"

Я знав, що з цього моменту це буде погано.

Завдання 2: 64 + 8 * 4 = 96 байт

на пробіжку a
встановити o на 1
повторити а
встановити o на * o
встановити а-1
кінець
о
кінець

Ой гавд.

Завдання 3: 170 + 8 * 13 = 274 байт

на пробіжку a
встановити o 0
встановити t на хибне
повторити з i від 2 до a
встановити t на істину
повторити з c від 2 до i-1
якщо я mod c = 0, тоді встановіть t на значення false
кінець
якщо t, то встановіть o на o + i
кінець
кінець

Денніс ≠ перевершив.

Завдання 4: 225 + 8 * 13 = 329

на пробіжку a
встановити o на ""
повторити з i в пунктах a
повторити з c в символах i
якщо c не в o, то
якщо число ASCII c <91, то
встановити o на o & (ASCII символ (ASCII число c + 32))
ще
встановити o на & c
кінець
кінець
кінець
кінець
о
кінець

...

Завдання 5: 45 байт

"*
  ***
 *****
*******
 *****
  ***
   * "

Так, так. Я знав, що втрачу з самого початку. Але це було цікаво, мені було б цікаво дізнатися, чи є спосіб зробити це за допомогою меншої кількості символів. Карта символів (надається Деннісом):

   де hlorw 15
a cdef привіт lmnop rstu w 160
a de nop rstu 57
abcdef привіт lmnop rstu w 214
                            39
                             0

Кількість символів вище трохи зменшена - в нових рядках виникли проблеми, оскільки нові рядки були не враховані.

ПРИМІТКА. Причиною не використовувати подібні речі тощо a's charactersє те, що 'символ повинен використовуватися під час виконання командного рядка osascript. Якби я використовував ', я мав би використати \'щось подібне, що б мені зовсім не допомогло. Крім того, він розпізнає лише "захоплювачів струн, тому мене там теж накрутили. Але це було весело.


1

NARS2000 APL, 144 байти (85 символів)

Завдання 1, 21 байт (17 символів)

⎕←"Hello, World!"

Завдання 2, 10 байт (4 символи)

⎕←!⎕

Завдання 3, 22 байти (11 символів)

⎕←+/¯2π⍳2π⎕

Завдання 4, 53 байти (29 символів)

⎕←∪Q[26∣Q⍸⍞∩Q←⎕AV[97+⍳26]∪⎕A]

Завдання 5, 38 байт (24 символи)

⎕←" *"[1+4<∘.+⍨(⍳3),⊖⍳4]

1
Це насправді повноцінні програми? Я не знаю NARS2000 (і він не доступний на моїй платформі), але всі діалекти, які я знаю, вимагають призначити для друку поза REPL.
Денніс

@Dennis Вибачте, забув, що я хитався всередині REPL.
Оберон

Вам не дозволяється виводити пробіли для алмазу.
lirtosiast

1

Желе , 46 байт (неконкурентоспроможний)

“3ḅaė;œ»
Ɠ!
ÆRS
ɠQḲŒl
4Ḷ¤‘+¤ṖṚṭ×”*Fµ4Ḷṭ4ḶṚṖ¤F×⁶+⁸Y

Спробуйте в Інтернеті! (Скопіюйте / вставте кожен фрагмент)

Мабуть, обмеження не обмежувало гольф :) Просто пропозиції щодо останнього, звичайно, будь ласка.

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