Как стать автором
Обновить

Комментарии 28

НЛО прилетело и опубликовало эту надпись здесь
Поменьше эзотерики и чуть покороче решение не Python.
# -*- coding: utf-8 -*-
src = u"ССС дддннннннёёёёёёмммм ппппппрррррооооооггггггррррра\
ааааамммммммммммммммииииииссссссттттттаааааа!!!!!!"
samp = u"С днём программиста!"

b = samp
step = 0
while (b.strip()):
	b = ''.join([src.count(ch)>step*samp.count(ch)+samp[:i].count(ch) and ch or " " for i, ch in enumerate(samp)])
	step+=1
	print b
И вернем немного эзотерики
a=[samp]
while (a[-1].strip()):
	print a[-1]
	a += [''.join([src.count(ch)>len(a)*samp.count(ch)+samp[:i].count(ch) and ch or " " for i, ch in enumerate(samp)])]
Симпатично :)
Спасибо. Строка с условием разве что получилась немного длинной. Кто сможет совсем избавиться от while и получить решение в одну строку? ) У меня пока идеи иссякли
Не повторять в домашних условиях! Онлайнер, только для python 3.x
[print(i) for i in [''.join([src.count(ch)>(samp*y+samp[:x]).count(ch) and ch \
or " " for x, ch in enumerate(samp)]) for y in range(10)] if i.strip()]
Мда… Это уже совсем непонятно беглым взглядом. Давно программируете на питоне?
Вроде как понятно. Единственная проблема в понимании это условие
src.count(ch)>len(a)*samp.count(ch)+samp[:i].count(ch) and ch or " "

Оно возвращает символ, если в исходной строке таких символов больше чем в уже написанных строках или же пробел.
a[-1] может выглядеть непонятно, но на практике всего лишь возвращает последний элемент массива.
Волшебный код от Волшебного :)
На практике стараюсь не писать волшебных кодов, потому что мне их еще поддерживать. =)
a[-1] — удобно, черт побери! :-) хорошая синтаксическая конструкция, надеюсь, и в других языках внедрят )
В Перл и Руби есть :)
мне еще a[::-1] нравится :)
Прекрасно) Так и думал, что можно все сделать короче и в одну большую строку, но не стал ломать голову, я просто любитель питона.
Для меня эти скобки [] в питоне самые приятные, в них основная магия.
Для brainfuck надо отдельный значок «Осторожно! Он программирует на brainfuck»
бейдж ввести в профиль )
я про него, кэп =)
НЛО прилетело и опубликовало эту надпись здесь
Добавим еще чуть-чуть перловой эзотерики к решению m1el и сократим до 94 символов:
$a=<>;print+(map{$a=~s/$_//?$_:" "}split//,"Congratulations on a programmer`s day!"),$/while$a
а не подскажете как на Перле все таки ввести оригинальную фразу — то есть на русском?
а то я попробовал тут его вспомнить по сабжевому поводу, но уперся как раз в русский. Из консоли русские символы передаются, но вот split // похоже раскладывает каждый символ на 2, то есть почему-то не понимает Unicode похоже. =(
НЛО прилетело и опубликовало эту надпись здесь
не писать где?
я в убунте в консоли ввожу в качестве аргументов к скрипту русский текст
в скрипт он попадает как русский (потому что если его тут же просто вывести — то он и выведется так как был введен)
а split // мне русскую букву расщепляет на 2 непонятных символа
НЛО прилетело и опубликовало эту надпись здесь
use utf8; :)
это я пробовал — не помогает
К сожалению, эта программа уйдет в бесконечный цикл, если в строке будут символы, отличные от [Congratulis pme`dy!]
Очень интересно было увидеть реализации на разных языках, с разными алгоритмами.
Знает ли кто-нибудь подобные задачки?
тынц? (в качестве примера можете посмотреть Sorting/Quicksort)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории