Я натрапив на це питання на SO та подумав, що це зробить приємне завдання для гольфу. Отже ось це:
Виклик:
Напишіть програму, яка зчитує послідовність рядків символів, по одному на рядок, і виводить список усіх позицій, де кожна струна має однаковий символ.
Вхід і вихід:
Вхід складається з одного або декількох рядків друкованих символів ASCII, що не друкуються, для кожного з яких слід новий рядок. Ви можете припустити, що всі вхідні рядки мають однакову довжину. Новий рядок не слід вважати частиною вводу (тобто не слід виводити його як відповідний символ).
Приклад введення (безсоромно викрадений із питання про ПІ):
abcdefg
avcddeg
acbdeeg
Прочитавши дані, ваша програма повинна надрукувати положення кожного відповідного стовпця та символи, які вони містять. (Ваша програма може, але не потрібно, перестати читати подальше введення, якщо вона рано визначить, що немає відповідних стовпців.) Дозволений будь-який розумний формат виводу; зокрема, ви можете використовувати індексацію на основі 0 або 1 на основі позицій.
Приклад виводу для вищевказаного вводу (з використанням 0-індексування):
0: a
3: d
6: g
Оцінка:
Це код гольфу, тому найкоротша відповідь виграє. У разі вирівнювання, дробові вимикачі можуть бути присвоєні за додаткові функції:
- −½ символів для правильної обробки вхідних ліній неоднакової довжини. (Вихідні дані не повинні містити позицій, розташованих в кінці найкоротшого рядка введення.)
- −¼ символи для правильної обробки даних, що складаються з довільних символів Unicode, кодованих UTF-8.
Для натхнення ви можете знайти кілька незворушних рішень у питанні про питання SO (див. Вище).
Роз'яснення:
Просто об'єднання позицій і символів, як і в
0a3d6g, не вважається "розумним результатом". Вам слід надати якийсь роздільник (наприклад, пробіл) між кожним елементом виводу, щоб його можна було однозначно проаналізувати.Введення буде надано у стандартному потоці введення (
stdin) або за допомогою будь-якого механізму введення текстового файлу, який є найбільш природним для вашої мови на вибір. (Якщо вибрана мова не має природного механізму для введення файлів, виконайте все, що здається найближчим за духом.)Введення закінчується, коли більше даних для зчитування немає (тобто, коли виникає стан кінця файлу). Якщо ви хочете, вам може знадобитися, щоб введення було закінчено порожнім рядком (який, очевидно, ви не повинні вважати частиною введення). Якщо ви це зробите, будь ласка, зазначте це у своїй відповіді, щоб інші могли надати правильну інформацію для тестування.
Кожен рядок введення, включаючи останній, закінчується символом нового рядка. Ваша відповідь не повинна повідомляти про цей новий рядок як відповідний стовпець. (Добре, якщо ваше рішення також може обробляти вхід, коли останній рядок не закінчується новим рядком, але це не потрібно.)