Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: ABRACADABRA!  (Прочитано 3947 раз)

0 Пользователей и 1 Гость просматривают эту тему.

ywaw

  • Гость
Re: ABRACADABRA!
« Ответ #45 : 15 Июля 2011, 10:48:01 »
Вот к примеру на Питоне
print "ABRACADABRA"
print "ABRACADABR"
print "ABRACADAB"
print "ABRACADA"
print "ABRACAD"
print "ABRACA"
print "ABRAC"
print "ABRA"
print "ABR"
print "AB"
print "A"

Пользователь решил продолжить мысль 15 Июля 2011, 10:50:53:
74 байта, говорите? Заголовки можно не считать, говорите? Вот вам:

: f 0; 2dup type cr 1- f ;
" ABRACADABRA" f

44 байта, заголовки вовсе не нужны, все использованные функции искаропки. Угадайте, что за язык.
Это Forth. Интересно -какой диалект? В стандартном рекурсивный вызов делается словом RECURUSE
« Последнее редактирование: 15 Июля 2011, 10:50:53 от ywaw »

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: ABRACADABRA!
« Ответ #46 : 15 Июля 2011, 11:21:37 »
do i=1 to 11;say left(abracadabra,12-i);end
43 символа. Не рекорд, но по понятности, IMHO, первое место.

Ещё понятнее, но чуть длиннее:

do i=11 to 1 by -1;say left(abracadabra,i);end
Обращайтесь  8)
Делюсь знаниями, но их у меня мало!

Оффлайн Обедающий философ

  • Активист
  • *
  • Сообщений: 286
    • Просмотр профиля
    • Искусственная жизнь по-русски
Re: ABRACADABRA!
« Ответ #47 : 15 Июля 2011, 11:29:40 »
Это Forth. Интересно -какой диалект? В стандартном рекурсивный вызов делается словом RECURUSE

Это ретрофорт, точнее я использовал мой собственный велосипед, слепленный по образу и подобию ретрофорта 2006 года. Но на оригинальном ретрофорте тоже должно пойти. Хотя вроде ретрофорт с тех пор изменился до неузнаваемости, но я не вникал. А слово RECURSE не нужно, ибо словарная запись создаётся в момент исполнения двоеточия.
Боится смерти тот, кто мало сделал за свою жизнь. /Фидель Кастро/

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: ABRACADABRA!
« Ответ #48 : 15 Июля 2011, 11:31:35 »
Суть темы в том, что бы найти самый короткий способ это сделать

Суть крайне сомнительная.
Обычно нужно либо макс. быстродействие, либо мин. используемой памяти.
А на диске что 65, что 51, что 651 байт - все один кластер.
 :(

Разные задачи есть в программировании. Про куайн вы слышали? Тоже смысла вроде никакого нет, а интересно!
(Нажмите, чтобы показать/скрыть)
Делюсь знаниями, но их у меня мало!

Оффлайн spectator

  • Участник
  • *
  • Сообщений: 120
    • Просмотр профиля
Re: ABRACADABRA!
« Ответ #49 : 15 Июля 2011, 20:27:57 »
do i=1 to 11;say left(abracadabra,12-i);end
43 символа. Не рекорд, но по понятности, IMHO, первое место.

Ещё понятнее, но чуть длиннее:

do i=11 to 1 by -1;say left(abracadabra,i);end
Обращайтесь  8)
что за язык?

В общем я не уверен, что это самый правильный вариант, но вот на go
func main(){for i:=11;i>0;i--{println("ABRACADABRA"[:i])}}
58 символов. Без хидеров.

« Последнее редактирование: 15 Июля 2011, 22:56:29 от spectator »

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: ABRACADABRA!
« Ответ #50 : 15 Июля 2011, 22:56:06 »
Это REXX

В теме Калькулятoр на bash скриптe я его тоже использовал.
p4@d12:~$ sudo apt-get install regina-rexx
[sudo] password for p4:
[ ... ]
p4@d12:~$ rexx
do i=1 to 11;say left(abracadabra,12-i);end
[ Тут надо нажать ^D ]
ABRACADABRA
ABRACADABR
ABRACADAB
ABRACADA
ABRACAD
ABRACA
ABRAC
ABRA
ABR
AB
A


Пояснения:
с установкой всё понятно.
rexx — вызов интерпретатора. Он может брать команды как из файла, так и из стандартного ввода. Во втором случае ввод завершается ^D, как обычно.
Когда программа полностью введена, он её исполняет, тут тоже понятно.

В коде использована одна особенность языка: неинициализированные переменные имеют значение, совпадающее с их именем. Таким образом, вместо "ABRACADABRA" можно написать abracadabra без кавычек, сэкономив 2 символа. И да, язык не чувствителен к регистру, можно написать DO, Do, do — как хотите.

Встроенная функция left(string, n), понятное дело, выдаёт n левых символов своего первого аргумента.

Для написания больших проектов язык, я думаю, не очень подходит, но для таких маленьких штук — самое то. В нём есть много очень приятных мелочей, которые реально превращают программирование в удовольствие. :)

(Нажмите, чтобы показать/скрыть)
Делюсь знаниями, но их у меня мало!

Оффлайн фирэфохэ

  • Старожил
  • *
  • Сообщений: 2169
  • straightedge
    • Просмотр профиля
Re: ABRACADABRA!
« Ответ #51 : 16 Июля 2011, 00:28:15 »
Haskell:
f [] = return ()
f x = do print x; f (init x)

*Main> f "ABRACADABRA"
"ABRACADABRA"
"ABRACADABR"
"ABRACADAB"
"ABRACADA"
"ABRACAD"
"ABRACA"
"ABRAC"
"ABRA"
"ABR"
"AB"
"A"
*Main>

Если убрать ненужные пробелы - 37 символов, с переводом строки.
« Последнее редактирование: 16 Июля 2011, 01:09:56 от фирэфохэ »
http://i18.ЗАПРЕЩЁННЫЙ РЕСУРС/big/2011/0325/6d/19eaa72dd24048a6fb0587832c4b096d.gif КДЕ - УГ. Дебиан - недоось.

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: ABRACADABRA!
« Ответ #52 : 16 Июля 2011, 01:09:55 »
Круто.

Но у остальных программа вызывается без аргументов.  ;)



Вообще внушает. Я щас попробовал подобный трюк — всё равно длиннее получилось: 39 символов. :-[
arg a;do i=1 to 11;say left(a,12-i);end
« Последнее редактирование: 16 Июля 2011, 01:24:11 от inkblack »
Делюсь знаниями, но их у меня мало!

Оффлайн фирэфохэ

  • Старожил
  • *
  • Сообщений: 2169
  • straightedge
    • Просмотр профиля
Re: ABRACADABRA!
« Ответ #53 : 16 Июля 2011, 01:15:01 »
Это ж хаскель, тут даже переменных нет :idiot2:. Хз как по-другому сделать.
В варианте arcfi, если не учитывать задание переменной, тоже 37 символов вроде.
И ещё, хаскель не круто, хаскель не нужен :laugh:.
« Последнее редактирование: 16 Июля 2011, 01:17:03 от фирэфохэ »
http://i18.ЗАПРЕЩЁННЫЙ РЕСУРС/big/2011/0325/6d/19eaa72dd24048a6fb0587832c4b096d.gif КДЕ - УГ. Дебиан - недоось.

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: ABRACADABRA!
« Ответ #54 : 16 Июля 2011, 01:25:51 »
Вспомнилась похожая темка о способах выковыривания ip-адреса, на которую наткнулся пару лет назад:
http://www.catonmat.net/blog/golfing-the-extraction-of-ip-addresses-from-ifconfig/
:)

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: ABRACADABRA!
« Ответ #55 : 16 Июля 2011, 01:27:46 »
Цитировать
не нужен
— Ну, я другого и не ждал.  ;D
А круто — это про решение.
Делюсь знаниями, но их у меня мало!

Оффлайн фирэфохэ

  • Старожил
  • *
  • Сообщений: 2169
  • straightedge
    • Просмотр профиля
Re: ABRACADABRA!
« Ответ #56 : 16 Июля 2011, 01:37:41 »
Нет, ну хаскель в самом деле не нужен.

Пользователь решил продолжить мысль 16 Июля 2011, 02:36:50:
На баше, независимо от количества символов в слове:
$ a=ABRACADABRA;while((${#a}));do echo $a;a=${a::$((${#a}-1))};done
ABRACADABRA
ABRACADABR
ABRACADAB
ABRACADA
ABRACAD
ABRACA
ABRAC
ABRA
ABR
AB
A
$ echo -n 'a=ABRACADABRA;while((${#a}));do echo $a;a=${a::$((${#a}-1))};done' |wc -m
65

Пользователь решил продолжить мысль 16 Июля 2011, 02:39:06:
Питон с рекурсией, с циклом уже было :-\:
#! /usr/bin/python
def f(a):
if a:
print a
f(a[:-1])
f("ABRACADABRA")
« Последнее редактирование: 16 Июля 2011, 02:39:06 от фирэфохэ »
http://i18.ЗАПРЕЩЁННЫЙ РЕСУРС/big/2011/0325/6d/19eaa72dd24048a6fb0587832c4b096d.gif КДЕ - УГ. Дебиан - недоось.

Оффлайн Обедающий философ

  • Активист
  • *
  • Сообщений: 286
    • Просмотр профиля
    • Искусственная жизнь по-русски
Re: ABRACADABRA!
« Ответ #57 : 16 Июля 2011, 11:58:58 »
РЕФАЛ ПЛЮС, мать его! :D

$use StdIO;
$use String;
$use Arithm;
$func Main  = e;
$func Abra s0 = e2;
Main = <Abra <String "Red-eyed penguin">>;

Abra
{
"" = ;
s1 = <PrintLN s1>, <Abra <Substring s1 0 <"-" <String-Length s1> 1>>>;
};

Три часа убил на это дело. Идея у языка неплохая, но сделано всё как-то через попу.
Боится смерти тот, кто мало сделал за свою жизнь. /Фидель Кастро/

Оффлайн RazrFalcon

  • Автор темы
  • O_o
  • Старожил
  • *
  • Сообщений: 3129
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: ABRACADABRA!
« Ответ #58 : 16 Июля 2011, 13:18:13 »
Вспомнилась похожая темка о способах выковыривания ip-адреса, на которую наткнулся пару лет назад:
http://www.catonmat.net/blog/golfing-the-extraction-of-ip-addresses-from-ifconfig/
Прикольно. До такого я не додумался.
Меня привлекла идея просто помучать мозг  ;)
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

Оффлайн spectator

  • Участник
  • *
  • Сообщений: 120
    • Просмотр профиля
Re: ABRACADABRA!
« Ответ #59 : 16 Июля 2011, 15:24:13 »
Вспомнилась похожая темка о способах выковыривания ip-адреса, на которую наткнулся пару лет назад:
http://www.catonmat.net/blog/golfing-the-extraction-of-ip-addresses-from-ifconfig/
Прикольно. До такого я не додумался.
Меня привлекла идея просто помучать мозг  ;)

Кому интересно вот сайт о подобных забавах. Правда там используют только перл, питон, пхп и руби.
99 бутылок пива на перле в 161 символ это фантастика, я в 270 уложился.

 

Страница сгенерирована за 1.237 секунд. Запросов: 25.