Печать строк без разделения символов

15

Изменить: разрешено повторное использование пробелов.

Ваша задача - написать n программ (или функций, или наборов функций без использования параметров или имен функций) на одном языке. Программа k должна вывести (кардинальное) число k на стандартном английском языке в нижнем регистре (с дополнительным завершающим переводом строки). Поэтому первая программа должна выводить one, вторая должна выводить twoи т. Д. Для числа, состоящего из двух частей, они должны быть разделены дефисом twenty-one.

Но никакие две программы в вашем представлении не могут совместно использовать непробельные символы или пробельные символы, выполняющие полезные работы. Например, если ваша первая программа просто "one", то ни один из " o nи eне может быть снова использован в других ваших программах.

Вы можете использовать пробельные символы (пробелы, символы новой строки и табуляции) в двух или более программах, если они служат только в качестве разделителей или отступов и ничего не делают сами. Таким образом, вы не можете использовать их повторно на языке Whitespace и не можете использовать их в строках более чем в одной программе.

Вы можете использовать только печатные символы ASCII, вкладки и символы новой строки (включая CR и LF). Каждая программа должна содержать как минимум 1 символ.

Ваша оценка равна сумме 1 / размер программы ^ 1,5. Самый высокий балл выигрывает. Вы можете использовать этот фрагмент стека ( или этот код CJam ) для подсчета очков:

function updatescore(a){var l=a.value.split("\n"),s=0;for(var i=0;i<l.length;i++){var t=l[i].length;t-=t&&l[i][t-1]=="\r";if(t)s+=Math.pow(t,-1.5);}document.getElementById('result').textContent=s;}
<textarea id="input" placeholder="Put your code here, one per line." style="width:100%;height:150px;box-sizing:border-box" oninput="updatescore(this)" onpropertychange="updatescore(this)"></textarea><div>Your score: <span id="result">0</span></div>

jimmy23013
источник
Одним из лучших правил оценки может быть сумма 1 / (размер программы + c) ^ 1.5, где c - константа. Но я думаю, что уже слишком поздно, чтобы изменить это.
jimmy23013
Можем ли мы добавить множитель для получения более высокого кардинального числа, так как это кажется целью? Я попал в двенадцать, выше всех остальных, но все равно проигрываю.
mbomb007
@ mbomb007 Извините, что намеренно сделал Headsecks более низким баллом. Но если у Headsecks такой же результат, как у других, я думаю, что Glypho выиграет слишком много (не говоря о Lenguage).
jimmy23013
Я хочу сделать это в
пропусках
1
@ mbomb007 Если я снова задам похожий вопрос, я, вероятно, добавлю небольшую константу к размерам программы в счете. Но это слишком произвольно, чтобы изменить в этом вопросе.
jimmy23013

Ответы:

6

gs2 , 0,38669200758867045

Удалите пробелы из всех этих программ, кроме трех , это только для (кашляет) читабельности. один и шесть - это программы gs2, которые аварийно завершают работу (из-за недостаточного заполнения стека), что делает их удобными .

один (3 байта)

one

два (1384 байта)

A?"A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0
A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0
A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0
A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0
A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0
A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0000000000000
000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000A?"A"0A"0A"0A"0A
"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A
"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A
"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A
"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A
"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A
"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"00000000000000000000
000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000A?"A"0A"0A"0A"0A"0A"
0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"
0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"
0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"
0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"
0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"
0A"0A"0A"0A"000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
0000

три (92 байта)

0a 21 2c 21 20 21 20 21 20 21 20 21 20 21 20 21
20 21 20 21 20 21 20 21 20 21 20 21 20 21 20 21
20 21 20 2f 20 0a 21 28 3c 0a 21 2c 21 20 21 20
21 20 21 20 2f 20 0a 21 28 3c 45 21 20 21 20 21
2f 20 0a 21 28 3c 0a 21 2c 21 20 2f 20 0a 21 28
3c 0a 21 2c 21 20 2f 20 0a 21 28 3c

Много значительных пробелов, так что это шестнадцатеричный дамп. В начале он имеет символ перевода строки:


!,! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! / 
!(<
!,! ! ! ! / 
!(<E! ! !/ 
!(<
!,! / 
!(<
!,! / 
!(<

четыре (276 байт)

f$f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$
31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$
31Mf$f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f
$f$31f$f$31Mf$f$f$31f$f$31f$f$31f$f$31f$f$31Mf$f$f$31f$f$31f
$f$31f$f$31f$f$31f$f$31f$f$31f$f$31M

пять (178 байт)

hd+++&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Khd+++&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Khd+++&&&&&&&&&&&&&&&&&&&&
&&&&&&&Khd+++&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&K

шесть (3 байта)

six
Линн
источник
Я не видел этого требования - я пройду и исправлю промежуточные решения.
Линн
Я получаю использовать 20через 7E, 09(вкладка), 0A(LF), и 0D(CR), не так ли?
Линн
Да. Отредактировано, чтобы разрешить CR явно.
jimmy23013
1В пяти была опечатка; Я пошел и удалил это. Я сейчас исправлю три .
Линн
2
Программы 1 и 6 по сути являются синтаксическими ошибками, которые выводят исходный код в STDOUT и показывают ошибку в STDERR. Похоже, все согласны с тем, что это нормально (так что слава), но вы должны упомянуть об этом в своем ответе.
Денис
13

CJam, 0,24075

программы

BA1]100cf|
"two"
{hree}`W<7a.-
N)92+_9+_6+_2~+
S(84^I^U$F^X$G^Y$(
's'i'x

Спасибо @ user23013 за его предложение использовать 'для шести .

Вывод, длина, оценка, используемые символы

one    10  0.03162          01       AB         ]    c f         |  
two     5  0.08944  "                                     o  tw     
three  13  0.02133        -.     7  <        W     `a e h  r    { } 
four   15  0.01721      )+    2 6  9      N       _                ~
five   18  0.01309   $ (       4  8    FGI SU XY ^                  
six     6  0.06804    '                                  i  s  x

Проверьте результаты самостоятельно в интерпретаторе CJam .

Деннис
источник
6

Бессонница , 0.100688383057110116

Просто для начала. Маловероятно, что это победит. В соответствии с текущей схемой подсчета любой язык, который может печатать не более one5 символов, имеет огромное преимущество.

один (8 байтов, 0,04419417382415922)

uuyp>~p~

два (9 байтов, 0,037037037037037035)

oeoojdoLj

три (21 байт, 0,010391328106475828)

*FFFFF
=
=z"
n=nnFzzB

четыре (23 байта, 0,009065844089438033)

)HGGGkGGGtGkGk<GGh$HGGt
n̴̖̋h̷͉a̷̭̿h̸̡̅ẗ̵̨d̷̰ĥ̷̳
источник
4

Наушники , 0.044623631135793776

Сгенерировано здесь

Этот язык представляет собой простую замену BF, где единственное, что имеет значение, это значение символа по модулю 8.

К сожалению, более длинные программы дают худший результат, несмотря на то, что они могут достичь двенадцати ! (Я мог бы подняться выше, если бы мог использовать непечатаемые ASCII и Unicode.)

один

##%%%%%%%&##$%&#&%&%%%%%%%%%&

два

--------+--.+++,-..+++.--------.

три

5555555535563334566555555555555633333333336555555555555566

четыре

==;=====>;<=>>;;;;;;;;;>;;;;;;>===>

5

EECEEEEEFCDEFFCCCFCEFCCCCCCDEFFCCEFCCCDEFF

шесть

KKMMMMMMMMMNKKLMNKNMMMMMMMMMMNMKMMMNKLMNN

Семь

SSUUUUUUUUUVSSTUVSVSSSSSUVSSSTUVVSUUUVSTUVUVSSUVSSSTUVVSSSSSSSSSV

восемь

]][]]]]]^[\]^]^[[[[^]]^[^[[[[[[[[[[[[^

9

cceeeeeeefccdeffeeeeefcccccfeeeeeeeeef

10

mmmmmmmmkmmnkkklmnnkkkkmnkkklmnnkkkkkkkkkn

11

uusuuuuuvstuvuvsssssssvuuuuuuuvsuuuvstuvuvssuvssstuvvsssssssssv

двенадцать

}}}}}}}}{}}~{{{|}~~{{{~{}~{{{|}~~{{{{{{{~{{{{{{{{{{~{{}~{{{|}~~
mbomb007
источник
Вы можете использовать только печатные символы ASCII, вкладки и переводы строк.
jimmy23013
@ user23013 Я сделал столько, сколько мог, и добрался до 12.
mbomb007
2

/// , 0.19245008972987526

one

Этот ответ вдохновлен ответом @ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳, в котором он сказал

В соответствии с текущей схемой подсчета любой язык, который может печатать не более one5 символов, имеет огромное преимущество.

user12205
источник
ОК, алгоритм подсчета очков имеет лазейку. Отлично сработано.
Денис
Ну, этот вопрос так долго стоит в песочнице, чтобы получить лучший метод оценки. И это все еще не работает хорошо ... Это также работает в PHP, ASP и т. Д.
jimmy23013
0

SmileBASIC, .10062

"один"

?"one

"два"

PRINT MID$(@two,1,3)

Мой другой ответ более интересен, но этот получает более высокий балл.

Важной стратегией для получения самой длинной цепочки является использование БОЛЕЕ символов для сохранения УНИКАЛЬНЫХ символов (например, использование x - -xв программе 2 для сохранения y + yв программе 3)

Проблема с системой подсчета очков состоит в том, что она оценивает 2 короткие программы лучше, чем 3 длинные программы, поэтому нет смысла сохранять символы для более поздних программ, если она делает текущую программу длиннее.

Кроме того, он оценивает отдельные короткие программы выше, чем меньший ВСЕГО размер. Если я поменяюсь? и PRINTв своем ответе я смогу сохранить 1 символ, но мой результат будет ПОЛОВИННЫМ.

Я думаю, что было бы лучше основывать его только на количестве программ, с общим размером в качестве тай-брейка.

12Me21
источник
3
Я думаю, что обе программы разделяют o...
JayCe