Клейка стрічка може виправити будь-що [закрито]


13

Огляд

Цей виклик надихнув цей пост StackOverflow Meta . У ньому @hakre каже:

Я бачив проект, дійсно написаний Stackoverflow (копії noob разом з SO тут і SO там), атрибуція зазвичай ніколи не робиться, що призводить до припинення прав під CC. (sic)

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


Правила

  1. Ви повинні включити посилання на питання / відповіді, які ви використовували у своїй відповіді.
  2. Ви не можете змінювати знайдений код, за винятком наступних випадків:

    а. Ви можете перейменовувати змінні, функції та методи. (Це не означає , що ви можете змінити спосіб виклику , шляхом зміни, скажімо , scanner.nextInt()щоб scanner.nextLine()і стверджуючи , що ви змінюєте ім'я методу. Зміна повинно бути у визначенні або посилання на той же об'єкт.)

    б. Ви можете відповідним чином відрегулювати відступ.

    c. Можна припустити, що належні модулі завантажуються для роботи фрагментів коду. (наприклад, importзаяви для Java та Python, usingоператори для C # та C ++ та їх еквіваленти на всіх мовах) Якщо фрагмент коду включає imports для вас, ви можете перемістити їх у верхню частину коду.

    г. Якщо мова вимагає, щоб код знаходився в якомусь тілі методу для виконання (наприклад, public static void main(String[] args)для Java, static int Main(string[] args)для C # тощо), ви можете перетворити свій код у відповідний метод. Але зміст цього основного методу повинен залишатися незмінним.

  3. Ви повинні надати чіткий список будь-яких виконаних перейменувань змінної / методу / функції / класу.

  4. Ви не можете приймати фрагменти фрагментів (тобто якщо ви берете блок коду з посади, ви берете цілу справу)
  5. Надайте короткий опис того, що робить код для людей, які не переймаються тією мовою, якою ви користуєтесь.
  6. Конкурс популярності, тому виграє найбільше грошей!

Приклад нудної п'ятихвилини (Python 3)

Опис : читає купу файлів журналів із поточного каталогу та рандомізує рядки в них (захоплююче, правда? Це повністю виграє конкурс на популярність)

Джерело

import glob
import random

for file in glob.glob('log-*-*.txt'):
    # Etc.
    with open(file) as f:
        content = f.readlines()
        # shuffle the list in place 
        random.shuffle(content)

        # print it
        print(content)

Юридичні зміни

  • Перейменований fnameна fileпосилання 1
  • Перейменовано bна contentпосилання 2

Атрибути

  1. /programming//a/3277516/1435657
  2. /programming//a/16737991/1435657
  3. /programming//a/4918520/1435657

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

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

1
@ m.buettner Я також не впевнений, що CodeGolf.SE обов'язково виграє безліч питань, як це, з тих же причин, які ви згадуєте: чому "розділили рядок за допомогою коду SO", "отримайте випадкове число від 1- 100, використовуючи код SO "тощо? Але це лише моя думка. Я далеко не про CodeGolf.SE pro. :)
астері

3
Зараз я збираюся видалити випадковий спеціальний тег, тому що потреба в ньому не встановлена ​​(і це, швидше за все, буде непотрібним і не додасть значення).
астері

1
Я погоджуюсь, що нам потрібно бути обережними, затоплюючи PPCG з подібними питаннями, просто тому, що це весело і нове. Але я думаю, що з цього питання може виникнути кілька справді різних питань, як на основі математики, на основі графіки, та, в якій можливо використовується скоринг коду в гольф та виклик поліглоту. Отже, я вважаю за краще обмежити сферу застосування. Що стосується того, що люди просто копіюють виклик без нічого істотного, я думаю, що це обов'язок громади бути трохи суворішим у «закритті як дублікат», коли мова йде про нові типи викликів.
Мартін Ендер

Відповіді:


8

C - один оператор-калькулятор

Давайте для початку це.
Насправді досить складно знайти фрагменти програм C, які не є цілими програмами. У мене було найбільше проблем з деклараціями.

// http://stackoverflow.com/a/2911978 Block #1 (changed i to a)
static int a = 10;
// http://stackoverflow.com/a/2911978 Block #1 (changed i to b)
static int b = 10;
// http://stackoverflow.com/a/442647 Block #1 (changed c to op)
unsigned char op = (unsigned char)-1;
// http://stackoverflow.com/q/3711048 Inline block #1
int main()
// http://stackoverflow.com/a/14902422 Inline block #1
{
// http://stackoverflow.com/q/217074 Inline block #2 (changed i to a)
scanf("%d", &a)
// http://stackoverflow.com/a/23353870 Inline block #2
;
// http://stackoverflow.com/q/217074 Block #2 (changed c to op)
scanf("%c", &op)
// http://stackoverflow.com/a/23353870 Inline block #2
;
// http://stackoverflow.com/q/217074 Inline block #2 (changed i to b)
scanf("%d", &b)
// http://stackoverflow.com/a/23353870 Inline block #2
;
// http://stackoverflow.com/a/4173188 Block #2
int result = 0;
result = (op == '*') ? a * b : result;
result = (op == '/') ? a / b : result;
result = (op == '+') ? a + b : result;
result = (op == '-') ? a - b : result;
printf("%d",result);
// http://stackoverflow.com/a/3245525 Block #2
printf("\n");  /* prints newline */
// http://stackoverflow.com/q/4138649 Inline block #1
return 0;
// http://stackoverflow.com/a/14902422 Inline block #2
}

Здійснює просту цілісну операцію, як 3+151або 41/2на stdin, і виводить результат у stdout.


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