Загадочный случай Стива Баллмера


46

Стив Баллмер является бывшим генеральным директором Microsoft, и в недавней статье заявил, что он «до сих пор не знает, что он сделал с мобильным телефоном».

Как отмечается в бюллетене CodeProject , «заголовок этой статьи может заканчиваться во многих местах и ​​при этом быть точным».

Если нет ввода, выведите следующее:

Steve Ballmer still does not know.
Steve Ballmer still does not know what he did.
Steve Ballmer still does not know what he did wrong.
Steve Ballmer still does not know what he did wrong with mobile.

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

Это поэтому побеждает меньше байтов на каждом языке


59
Когда я увидел заголовок / теги, я подумал, что результат будетdevelopers developers ...
Род

15
tcl, 25 - while 1 {puts developers}- демоверсия
sergiol

8
braingolf, 23 - 1"developers "[!@11 1>]: P
Скидсдев

16
И я подумал о пике Балмера
ojdo

5
да, 14 -yes developers
sergiol

Ответы:


26

Python 3 , 100 99 99 97 байт

-1 байт благодаря ovs
-1 байт благодаря Джонатану Аллану
-1 байт благодаря Деннису

for i in b'!-3?':print('Steve Ballmer still does not know what he did wrong with mobile'[:i]+'.')

Попробуйте онлайн!


17

Haskell, 96 байт

(++".\n")=<<scanl(++)"Steve Ballmer still does not know"[" what he did"," wrong"," with mobile"]

Попробуйте онлайн!

scanlаналогичен foldl(или сокращен, как его называют на других языках), за исключением того, что он возвращает список всех промежуточных результатов, а не только конечный. К каждому промежуточному результату добавляется ".\n"и все они объединяются в одну строку.


17

05AB1E , 50 49 45 44 байта

4 байта сохранены с вдохновением от Java-ответа Кевина

„€Ž†©'–Ñ…€À€½ƒ§“mer„â‚à€–ƒ€“”™¸ïß”[Žì'.«=¨ð«

Попробуйте онлайн!

объяснение

„€Ž†©                                         # push "with mobile"
     '–Ñ                                      # push "wrong"
        …€À€½ƒ§                               # push "what he did"
               “mer„â‚à€–ƒ€“                  # push "mer still does not know"
                            ”™¸ïß”            # push "Steve Ball"
                                  [Ž          # loop until stack is empty
                                    ì         # prepend the top string to the 2nd top string
                                     '.«      # append a dot
                                        =     # print without popping
                                         ¨    # remove the dot
                                          ð«  # append a space

О, хорошо, удалось использовать сжатие словаря для всего, но Ballmer?
Скидсдев

@Mayube: Да. Я получил это частично сейчас (мяч), чтобы сохранить байт путем реструктуризации исходной строки :)
Emigna

теперь выглядит намного лучше, если бы вы могли это сжатьmer
Skidsdev

@Mayube: я мог бы скрыть это, сжимая, meно, к сожалению, это не спасло бы ни одного байта: /
Emigna

2
@StigHemmer: это 44 байта в кодовой странице
05AB1E

15

Сетчатка , 82 75 байт

Спасибо Нейлу за сохранение 7 байтов.

Число байтов предполагает кодировку ISO 8859-1.


Steve Ballmer still does not know what he did wrong with mobile.
 w
.¶$`$&

Попробуйте онлайн!

объяснение


Steve Ballmer still does not know what he did wrong with mobile.

Инициализируйте рабочую строку с полным заголовком.

 w
.¶$`$&

Как указал Нейл, все три усечения сделаны перед словом, начинающимся с w, и нет других слов, начинающихся с w. Таким образом, мы подбираем пробел, за которым следует wточка усечения. В эти моменты мы вставляем следующее:

  • , точка и перевод строки, чтобы обрезать предложение и начать новое.
  • $`, вся строка перед совпадением, так что следующее предложение начинается с начала.
  • $&, пробел и еще wраз, так что они также являются частью следующего предложения.

Нам не нужно совпадать mobileявно, потому что это будет просто то, что осталось в третьем матче.


3
Вам нужно только найти в <space> w и заменить на .¶$`$&.
Нил

@ Нил О, это действительно здорово, спасибо. :)
Мартин Эндер


8

/// , 88 байт

8 байтов сохранено @MartinEnder!

/1/Steve Ballmer still does not know//2/1 what he did//3/2 wrong/1.
2.
3.
3 with mobile.

Попробуйте онлайн!


1
Вы можете сэкономить немного больше, переместив предыдущий префикс в каждую замену: tio.run/…
Martin Ender

@MartinEnder Это особенно умно. Спасибо!
Steenbergh

1
Да, и еще 5, сбросив в 4целом: tio.run/##DcLRDcMgDAXA/…
Мартин Эндер

5
@MartinEnder "Да, у меня будет номер 3 с мобильным телефоном, пожалуйста."
Steenbergh

7

05AB1E , 46 байтов

”™¸ïßme”“r„â‚à€–ƒ€“«…€À€½ƒ§'–Ñ„€Ž†©).pvyðý'.«»

Попробуйте онлайн!


По моим подсчетам это 98 байт.
Стиг Хеммер

@StigHemmer 05AB1E использует свою собственную кодовую страницу с 256 байтами, которая кодирует каждый символ в один байт. Следовательно, 46 байтов, хотя в базовой кодировке UTF-8 это намного больше байтов.
Кевин Круйссен

7

Java 8, 127 126 байтов

()->{String t="Steve Ballmer still does not know",d=".\n";return t+d+(t+=" what he did")+d+(t+=" wrong")+d+t+" with mobile.";}

-1 байт благодаря @KonstantinCh .

Попробуй это здесь.


1
Надеюсь, вы не возражаете, что я украл вашу идею, это намного лучше, чем мой циклический подход.
TheLethalCoder

@TheLethalCoder Никаких проблем, так как я вижу, что вы зачислили меня. :) Кстати, stringне может быть varв вашей C # лямбда?
Кевин Круйссен,

Нет, потому что я объявляю несколько одновременно.
TheLethalCoder

@TheLethalCoder Ну, конечно, плохо ... И ()=>{var t="Steve Ballmer still does not know";return t+".\n"+(t+=" what he did")+".\n"+(t+=" wrong")+".\n"+t+" with mobile"+".";};, к сожалению, на три байта длиннее.
Кевин Круйссен,

1
Константин Ч предлагает изменить "+dв конце, чтобы ."сохранить байт, так как заключительный перевод строки не является обязательным.
Мартин Эндер


6

Желе , 52 46 байт

“ṬċḌ)⁹œḃṣ⁷Ṅḋ%W3Œƭ;ḷẓ“£Ṿ⁴'Þḣ~ẉ“¥Ị)“Ṡ8gÐ/»;\p”.Y

Кредиты для ṬċḌ)⁹œḃṣ⁷Ṅḋ%W3Œƭ;ḷẓидут к @EriktheOutgolfer, который использовал его в своем ответе .

Попробуйте онлайн!

Как это устроено

Львиная доля работы сделана сжатием словаря Jelly здесь.

ṬċḌ)⁹œḃṣ⁷Ṅḋ%W3Œƭ;ḷẓ

кодирует

Steve| Ball|mer| still| do|es| no|t| know

есть |указывает границы между словами , что когда выбирается из словаря и строки , которые были зашифрованы посимвольно ( mer, esи t).

Аналогичным образом , £Ṿ⁴'Þḣ~ẉкодирует  what| he| did(удивительно, heвовсе не приходят из словаря), ¥Ị)кодирует  wrongи Ṡ8gÐ/кодирует  with| mobile.

“ṬċḌ)⁹œḃṣ⁷Ṅḋ%W3Œƭ;ḷẓ“£Ṿ⁴'Þḣ~ẉ“¥Ị)“Ṡ8gÐ/»

таким образом, дает массив строк

“Steve Ballmer still does not know“ what he did“ wrong“ with mobile”

;\ кумулятивно уменьшается путем конкатенации, построения фраз в каждой строке.

Наконец, p”.вычисляется декартово произведение этих фраз и символ точки, и Yразделяет полученные предложения с помощью перевода строки.


По моим подсчетам это 97 байтов.
Стиг Хеммер

@StigHemmer В UTF-8 это было бы. Тем не менее, Jelly также поддерживает этот однобайтовый набор символов .
Деннис

6

JavaScript (ES6), 102 байта

_=>(s="Steve Ballmer still does not know")+`.
${s+=" what he did"}.
${s+=" wrong"}.
${s} with mobile.`

Попробуй

o.innerText=(
_=>(s="Steve Ballmer still does not know")+`.
${s+=" what he did"}.
${s+=" wrong"}.
${s} with mobile.`
)()
<pre id=o>


Хороший подход - я «позаимствовал» его для своего ответа на C #.
TheLethalCoder

1
Может быть, я не понимаю правила игры, но эта функция работает правильно, только если вы находитесь в браузере и используете предварительный тег innertext, как вы это сделали. Так не больше ли это 102 байта, поскольку это зависит от o.innerText = и <pre id = "o"> и фактического получения элемента?
Пол

@Paul Я знаю, что это старый, но анонимная функция является приемлемой формой ввода / вывода в качестве записи, поэтому, пока она возвращает ожидаемые данные, ей не нужно отображать ее напрямую.
Дом Гастингс


4

Retina , 95 86 байт

:`
Steve Ballmer still does not know.
:`.$
 what he did.
:`.$
 wrong.
.$
 with mobile.

Попробуйте онлайн! Редактировать: Сохранение 9 байтов путем переключения с вывода части всей строки на сборку строки по частям. :`Необходимо на первых трех этапах , чтобы сделать их вывод.


о, это умно, удаляя все между wи e, затем удаляя все между wrи e, затем wiи e. Не супер-гольф из-за новшества Retina, но определенно круто
Skidsdev

@Mayube Оказалось, не совсем гольф, поэтому я поменял методы. (Тем не менее, не так круто, как ответ Мартина Эндера.)
Нил

3

C #, 158 128 120 114 байтов

()=>{var s="Steve Ballmer still does not know";return s+$@".
{s+=" what he did"}.
{s+=" wrong"}.
 with mobile.";};

Сохранено 30 байтов благодаря @KevinCruijssen.
Сохранено 6 байт благодаря @Shaggy.


Версия с использованием подстроки для 120 байтов:

s=n=>"Steve Ballmer still does not know what he did wrong with mobile".Substring(0,n)+".\n";()=>s(33)+s(45)+s(51)+s(63);

Версия позаимствована у @KevinCruijssen за 128 байт:

()=>{string t="Steve Ballmer still does not know",d=".\n";return t+d+(t+=" what he did")+d+(t+=" wrong")+d+t+" with mobile"+d;};

Версия с использованием зацикливания на 158 байт:

()=>{var r="";for(int i=0;++i<5;)r+=$"Steve Ballmer still does not know{(i>1?$" what he did{(i>2?$" wrong{(i>3?" with mobile":"")}":"")}":"")}.\n";return r;};

Простой подход с использованием троичных операторов в цикле для добавления новых частей в строку каждый раз.


Кроме того, стоит отметить, что это работает только потому, C# >= 6что более ранние версии не имеют интерполированных строк
Skidsdev

@Mayube Правда, но я играю в гольф, чтобы использовать подход Кевина на данный момент, так как он намного лучше моего хаха
TheLethalCoder


@Mayube Ответы Java обычно бьют C #, потому что они не включают конечную точку с запятой. Всегда раздражает!
TheLethalCoder

@Mayube Сделал это, пока, по крайней мере ...
TheLethalCoder


3

Vim, 79 нажатий клавиш

iSteve Ballmer still does not know.<CR><C-x><C-l><Backspace> what he did.<CR><C-x><C-l><Backspace> wrong.<CR><C-x><C-l><Left> with mobile

<C-x><C-l>автоматически завершается с предыдущей строкой. В качестве альтернативы вы можете заменить каждое вхождение <CR><C-x><C-l>с<Esc>o<C-a>



3

Рубин, 94 байта

"!-3Z".bytes{|i|puts"Steve Ballmer still does not know what he did wrong with mobile"[0,i]+?.}

Выполняет итерацию по 4 символам в первой строке, каждый из которых преобразуется в значение ascii nи nкаждый раз выводит первые символы второй строки. На самом деле не имеет значения, какой последний символ первой строки, если его значение ascii равно или больше длины второй строки.


3

Деление, 299 291 269 ​​байт

MN"."                             ]              ]        ]
                                  W$]            W$$]     W$$$]
R"Steve Ballmer still does not know"%[" what he did"%[" wrong"%[" with mobile.";
                                    [W              [W        [W

Попробуйте онлайн!

Наконец-то двумерный язык я понимаю!

объяснение

Программа порождает атом с 1 массой и 0 энергией ( 1:0атом) в Rстроке 3 и начинает двигаться вправо.

"Steve Ballmer still does not know" печатает каждый символ.

% перемещает атом вверх, если он имеет нулевую энергию, или уменьшает его энергию и понижает его.

]перемещает атом влево, $увеличивает энергию атома, Wперемещает атом вверх.

Как только атом находится в верхнем ряду, он перемещается влево, пока не достигнет ".", что печатает точку, Nкоторая печатает новую строку, и, наконец M, которая перемещает атом вниз R, что впоследствии перемещает атом вправо ,

Каждый цикл энергии атома на один выше, что означает, что он пройдет еще один %. После 4-го цикла он достигает ;конца третьей строки, которая уничтожает атом. Программа завершается, когда все атомы уничтожены.


Не могли бы вы добавить объяснение?
Лохматый

@Shaggy сделает
Skidsdev

Вы можете сжать верх еще больше: 209 байтов .
KSmarts

3

Japt , 70 68 65 61 60 59 байт

Содержит несколько символов, которые не будут отображаться здесь; перейдите по ссылке ниже, чтобы увидеть полный код.

`Sve Ba¥´r Ð]l º not know
 Ø  ¹d
 Ùg
 ØP ¶ßè`£'.iP±X}R

Попробуйте онлайн

  • 3 4 байта сохранены благодаря ETH , плюс еще 4 с некоторыми подсказками.

объяснение

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

Steve Ballmer still does not know
 what he did
 wrong
 with mobile
`...`             :Decompress the string.
     £       }R   :Map over the each line X in the string
         P±X      :   Append X to P (initially the empty string)
      '.i         :   Prepend that to the string "."

1
Приятно. Вы можете сохранить несколько байтов, выполнив [`Sve Ba¥´r Ð]l º not know`` Ø ¹d`` Ùg`` ØP ¶ßè.`]m@P+=X}, затем еще пару байтов, которые включают удаление [и ](я позволю вам выяснить это).
ETHproductions

Хороший, @ETHproductions. Мне понадобилось пару минут, чтобы понять, что между сжатием и символами SE не отображается, но я попал туда, и теперь я думаю, что вижу другое сохранение, на которое вы намекаете.
Лохматый

1
Возможно, вам будет лучше, если вы удалите разделение и соединение, и вместо этого сделаете это £P±X +'.}Rв конце
ETHproductions

@ETHproductions, он все еще входит в 61 байт, но это определенно аккуратнее; избавляется от необходимости в конце новой строки. РЕДАКТИРОВАТЬ: О, подождите, нет, я могу сэкономить 1 байт с таким подходом :)
Shaggy



2

СОГЛ , 42 байта

⁹⁴<>‘υG‘Γω/w¹‘O‛Æw▓½0H(æ█◄K∆2Ξgh‘4{Tļ.@+;+

Объяснение:

..‘                    push "with mobile"
   ..‘                 push "wrong"
      ..‘              push "what he did"
         ..‘           push "Steve Ballmer still does not know"
            4{         4 times do
              T          output, not popping the top of stack
               ļ.        output "."
                 @+      append a space to the top thing in stack
                   ;+    reverse add (adding the next part to the top thing in stack)

Как вы используете SOGL? Я установил Processing и все версии, хотя я не могу понять, как вы запустите его.
Эрик Outgolfer

откройте «P5Parser» без меток версий и в его папке data/p.soglвставьте код. Затем запустив код обработки, запустите его, и вывод должен быть в консоли
dzaima

Пытался запустить ваш код, но у него нет вывода ..../processing-java --sketch=../SOGL/P5Parser --run p.sogl ""
Эрик Игрок в гольф

Меня устраивает. Попробуйте дать ему полный путь вместо p.sogl. если нет ничего в STDOUT или P5Parser/output.txt, я не знаю.
Дзайма

Это вывод для меня, разделенный на STDOUT и STDERR.
Эрик Outgolfer



2

Ним , 100 байт

for i in " ,2>":echo "Steve Ballmer still does not know what he did wrong with mobile"[0..i.int],"."

здесь то же самое в более читабельном коде:

const str = "Steve Ballmer still does not know what he did wrong with mobile"

for i in [32, 44, 50, 62]:
  echo(str[0..i], ".")

Язык имеет нарезку строк и включительно верхние границы. Остальные должны объяснить, если вы знаете программирование.


1

Древесный уголь , 71 69 байт

A⟦⟧βF⪪”↓/‘ZQ≔'Wε}÷&’/↗∧μ~⎇²~ηρπ‖¢β\`σuσI⌀δ#″:§▶¬QγγQZ–” w⁺⪫⊞Oβι w¦.¶

Попробуйте онлайн! Ссылка на подробную версию кода, некоторые разделители опущены, потому что deverbosifier не может сделать это автоматически. Это в основном порт ответа @ KevinCruijssen.


1

> <> , 135 байт

".wonk ton seod llits remllaB evetS"\
l?!\o99+2*1./"h tahw  "32p10pao     \
52p\".did e"/"   "53p33p
  /\".gnorw"/
1p/\".elibom htiw;"3

Это в основном проходит через строку, выводит на печать, затем заменяет точку полного цикла и условные выражения пробелами, чтобы продолжать двигаться по коду.

Лучше всего визуализировать это, используя ссылку ниже> <> pond;

> <> Пруд!

Попробуйте онлайн!


1
Мне никогда не приходило в голову, что knowпишется задом наперед wonk.
Цифровая травма

8
@DigitalTrauma Ну, теперь вы победили
ETHproductions


1

> <> , 126 байт

 \"elibom htiw \"10p";"15p
  "gnorw  "10p
  "did eh tahw \"11p
 \"wonk ton seod llits remllaB evetS\"12p04.
  l?!vo
oo00.>a"."
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.