打印奥斯卡最佳图片奖得主


49

这项挑战是向2017年奥斯卡最佳影片奖得主La La Land Moonlight致敬


您的挑战是打印文本

啦啦土地
暂停一秒钟,然后将文本更改为显示

啦啦地月光
原始文本(La La Land)必须带有删除线。这可以通过清除屏幕,在原始文本上绘图或通过任何其他巧妙的解决方案来实现。

这是一个因此最低字节获胜。适用标准代码高尔夫球规则。


哇!我的挑战收到了
很高的

我不知道如果任何语言可以使用的事实La La La(nd)格局
12Me21

Answers:


13

果冻,31个字节

“XSøjĠḌ⁻Ça»Œts⁵µṀȮ⁸œS“Æɓ9m“ɓm”ż

用xterm和测试LANG=en_US。由于多种原因,无法在TIO上运行。

十六进制转储

00000000: 58 53 1d 6a c4 ad 8b 0e 61 fb 13 74 73 85 09 c8  XS.j....a..ts...
00000010: ca 88 1e 53 fe 0d 9b 39 6d fe 9b 6d ff f9        ...S...9m..m..

验证

screen capture

背景

该答案利用了控制字符ANSI转义序列

  • 0d<CR>)用于在打印La La Land之后返回到衬纸的开头。

  • 9b 39 6d<CSI> 9 m)用于在第二次打印La La Land之前激活删除线文本。

  • 9b 6d<CSI> m)用于将前景和背景重置为默认模式,从而在打印Moonlight之前禁用删除线。

这个怎么运作

“XSøjĠḌ⁻Ça»Œts⁵µṀȮ⁸œS“Æɓ9m“ɓm”ż Main link. No arguments.

“XSøjĠḌ⁻Ça»                     Index into Jelly's inbuilt dictionary to yield
                                "LA LA Land moonlight".
           Œt                   Convert to title case, yielding the string
                                "La La Land Moonlight".
             s⁵                 Split into chunks of length 10, yielding
                                A =: ["La La Land", " Moonlight"].
               µ                Begin a new chain with argument A.
                Ṁ               Take the maximum, yielding "La La Land".
                 Ȯ              Output; print "La La Land".
                  ⁸œS           Sleep for bool("La La Land") seconds and yield A.
                     “Æɓ9m“ɓm”ż Zip ["\r\x9b9m", "\x9bm"] with A, yielding
                                [["\r\x9b9m","La La Land"],["\x9bm"," Moonlight"]].
                                (implicit) Flatten and print.

26

Vim,37个字节

3iLa <esc>snd<esc>gs:s/./&<C-v>u336/g
A Moonlight

一个相当简单的解决方案。

这是它运行的动画:

enter image description here


但是,没有睡:(
Cruncher

1
@Cruncher是的!gs睡一秒钟。
DJMcMayhem

有趣的是,您通常如何运行它?因为我将其输入到vim中并且可以工作,但是它失去了第二次延迟的光泽(在我缓慢的键入过程中,我什至没有注意到延迟,因为我是从此处复制的)
Cruncher

没关系,我用宏弄清楚了。很酷!
Cruncher

25

HTML, 153 148字节

使用CSS动画。仅在Firefox和Chrome上测试。

<s>La La Land</s> <b>Moonlight<style>@keyframes l{0%{text-decoration:none}}@keyframes m{0%{opacity:0}}b,s{animation:m 0s 1s both}s{animation-name:l}

<s>La La Land</s> <b>Moonlight</b>


您可以将@keyframes声明之一放在最后,然后删除两个右花括号。
darrylyeo

@darrylyeo:如果}缺少任何一项,Firefox将拒绝应用规则,因此很遗憾,此操作无法完成。
kennytm

19

HTML + JavaScript,18 + 59 = 77字节

setTimeout('O.innerHTML="<s>La La Land</s> Moonlight"',1e3)
<p id=O>La La Land

可悲的是,似乎没有一种有效的方法可以重用O.innerHTML...


setTimeout('a=O.innerHTML;a=a.strike()+" Moonlight"',1e3)工作吗?
Kritixi Lithos'2

1
@KritixiLithos我不这么认为;修改a那里不会修改O.innerHTML
ETHproductions'2

18

八度,81 66字节

@Stewie节省了15个字节

text(0,.5,'La La Land');pause(1);text(0,.5,'---------- Moonlight')

在线演示在这里

虽然该演示显示了两个单独的图,但是在MATLAB的桌面版本中运行时,它显示了第一个图,等待1秒钟,然后将第二个字符串添加到同一图。

由于Octave不支持删除线文本,因此,我选择axes在图形中的对象中显示文本,并通过'--------'在初始文本(@Stewie的最初想法)上方显示来显示“删除线” 。以前,我实际上已经绘制了一个line要穿透的对象'La La Land'

enter image description here


1
不错的方法... :)您可以像这样保存15个字节:text(0,.5,'La La Land');pause(1);text(0,.5,'---------- Moonlight')
Stewie Griffin

@StewieGriffin谢谢!已更新
Suever

八度不让您'-'*8+代替破折号吗?
Nic Hartley

@QPaysTaxes不幸的是,事实并非如此。
Suever

1
真是 还有一个问题:为什么不以(0,0)或(1,0)绘制它?似乎其中任何一个都会为您节省一个字节(否.
Nic Hartley

10

Bash,70、69 66字节

-4分,感谢赖利

echo La La Land;sleep 1;echo -e "\r\e[9mLa La Land\e[0m Moonlight"

学分西尔万·皮诺的回答上AskUbuntu为删除线


1
我认为您可以通过使用\r第二个echo而不是来节省一些字节clear。同样,您不需要在第二个之前的空格echo
莱利

删除的文字后不会打印空格。
Loovjo

另外,我认为clear;应该先走。并且您在中有不必要的空间; echo
暴民埃里克(Erik the Outgolfer)'17

2
较短的解决方案是在被删除的文本后添加空格,并使用ANSI代码对打印的文本进行行内修改\e[A,因此clear不需要。有关更多信息,请见s="La La Land";echo $s;sleep 1;echo -e "\e[A\e[9m$s\e[0m Moonlight"
seshoumara

1
echo -n La La Land;sleep 1;echo -e "\r\e[9mLa La Land\e[0mMoonlight"
数字创伤

9

QBasic,61个字节

SCREEN 9
?"La La Land";
SLEEP 1
LINE(0,7)-(80,7)
?" Moonlight

使用图形模式,在文本中绘制一条实际的线。这是QB64中的样子

Moonlight

该代码应该是不言自明的,但是这里是一个非公开的版本:

SCREEN 9             ' One of several graphics modes
PRINT "La La Land";  ' The semicolon suppresses the trailing newline
SLEEP 1
LINE (0,7)-(80,7)
PRINT " Moonlight"

8

MATL,46个字节

'La La Land'tDlY.ttv45HY(`t@Y)' Moonlight'hXxDT

由于MATL不具有控制代码或内容格式的支持,这种解决方案只是交替之间'La La Land',并'-----------'尽可能快地模拟删除线的文本。

enter image description here

说明

'La La Land'   % Push the string literal to the stack
tD             % Duplicate this string and display
tv             % Stack a version of this string on top of another
45HY(          % Replace the second one with '----------'
`              % Do...while loop
  t            % Duplicate the 2D character array
  @Y)          % Grab the row corresponding to the loop index (modular indexing)
  ' Moonlight' % Push the string literal to the stack
  h            % Horizontally concatenate the two
  Xx           % Clear the display
  D            % Display the string
  T            % Push a literal TRUE to the stack to make it an infinite loop

1
有创意!我喜欢
vikarjramun

3
为创造力+1,但不确定是否符合规则。
DBX12

5

Bash + pv,50个字节

printf ♪La\ La\ Land›%b 9m\\0 m\ Moonlight|pv -0L1

这基于@DigitalTrauma的Bash答案

表示回车符(0x0d)和CSI字节(0x9b)。

十六进制转储

0000000: 70 72 69 6e 74 66 20 0d 4c 61 5c 20 4c 61 5c 20  printf .La\ La\
0000010: 4c 61 6e 64 9b 25 62 20 39 6d 5c 5c 30 20 6d 5c  Land.%b 9m\\0 m\
0000020: 20 4d 6f 6f 6e 6c 69 67 68 74 7c 70 76 20 2d 30   Moonlight|pv -0
0000030: 4c 31                                            L1

验证

screen capture

这个怎么运作

printf重复其格式字符串多次以用尽其其他参数。由于发生了一次%b和两个自变量(9m\\0m\ Moonlight),它将产生以下字节流。

\rLa La Land\x9b9m\0\rLa La Land\x9bm Moonlight

这将执行以下操作。

  • \r 将光标移到该行的开头。

  • La La Land 逐字打印。

  • \x9b9m 激活删除线文本。

  • \0为设置行尾标记pv -0

  • \rLa La Land 和以前一样。

  • \x9bm 将前景和背景重置为默认模式,以禁用删除线。

  • Moonlight 逐字打印。

最后,pv -0L1每秒打印一条以零结尾的行,从而引入所需的延迟。


3
它是巧合还是对您的高尔夫运动有所帮助,还是您特别想在La La Land中使用它?我喜欢!
BruceWayne

回车是返回行首的最短方法。有时它被风格化的事实只是一个快乐的巧合。
丹尼斯

使用pv而不是sleep像其他所有人一样很漂亮。
IQAndreas

1
@IQAndreas使用的想法pv是我从链接的Bash答案中得出的,所以我不能为此而真正功劳。
丹尼斯

3

HTML + JavaScript,10 + 63 = 73个字节

setTimeout("document.write('<s>La La Land</s> Moonlight')",1e3)
La La Land


在什么浏览器中可以使用?
泰特斯

2
@Titus我想所有人都可以,但是到目前为止我已经确认它可以在Chrome + Firefox中使用
nderscore

3

PHP(86 75 69字节)

La La Land<?=sleep(1)?:"\rL̶a̶ ̶L̶a̶ ̶L̶a̶n̶d̶ Moonlight";

删除线使用UTF-8字符U + 0336。

编辑:保存17字节的建议@Titus评论


1
sleep总是返回0;因此您可以做到sleep(1)?:" ̶L̶a̶ ̶L̶a̶ ̶L̶a̶n̶d̶ Moonlight"(-3个字节)。\r而不是\033[10D保存6个字节,并将其包含在最后的字符串中可以保存另外4个字节
Titus

哦,哇,我应该能够看到的每一个,我想它都是练习带来的。非常感谢!如果您想自己回答以获取代表,作为其11个字节的改进,我可以删除我的答案并
投票给

无需删除有效答案。打别人的答案时,我不会发布自己的答案-除非操作员没有反应。这是另外三个字节:不需要前导空白,也不需要最后一个空白的删除线。使用UTF-8作为字符集不会作弊;但您可能会提到“使用UTF-8字符U+0336作为删除线”。
泰特斯

哦,La La Land<?=而不是<?="La La Land",节省了另外3个字节。
泰特斯


3

C 87 86字节

f(){char*s="La La Land";puts(s);printf("\e[9m%s\e[0m",s);sleep(1);puts(" Moonlight");}

非高尔夫版本:

void f()
{
  char *s="La La Land";
  puts(s);
  printf("\e[9m%s\e[0m",s);
  sleep(1);
  puts(" Moonlight");

}

2
char和之间不需要空格*
kennytm

您还需要调用f()非高尔夫版本,不是吗?
罗德里戈·哈恩

@kennytm感谢保存1个字节。已更新。
阿贝尔汤姆

1
@RodrigoHahn默认情况下,代码高尔夫球答案可以是函数或程序,所以我们不需要调用f()
kennytm

3

HTML + JavaScript,100字节

La La Land<script>setTimeout(function(){document.write("<s>La La Land</s> Moonlight")},1e3)</script>

setTimeout(function(){document.write("<s>La La Land</s> Moonlight")},1e3);
La La Land


document.write如何覆盖现有文本?
vikarjramun

如果您的文档已完全加载,则说明您正在使用document.write(如附加事件或超时)将删除所有现有的HTML。参考= w3schools.com/jsref/met_doc_write.asp
Sourav

3

GNU sed + sleep,63 58字节

编辑:根据Digital Trauma的评论保存了5个字节

单独使用sed无法完成两个打印语句之间的等待,因此我称之为sleep 1。可以使用e命令(是GNU扩展名)从sed进行系统调用。

s:$:La La Land:p
esleep 1
s:.:&̶:g
s:.*:\c[[A& Moonlight:

要创建删除线文本(第3行),将“组合长笔画叠加层” U + 0336附加到每个字符。之后,我将光标向上移动1行,使用所谓的ANSI Escape Sequences有效地替换了打印新内容时的旧文本。终端将它们解释为特殊格式命令。您可以在此处找到有关它们的更多信息。

gif图像

说明:

s:$:La La Land:p         # add "La La Land" to pattern space and print it
esleep 1                 # run system command 'sleep 1'
s:.:&̶:g                  # append U+0336 after each character (strike-through)
s:.*:\c[[A& Moonlight:   # '\c[[A' is '(escape)[A', ANSI code to move the cursor
                         #up 1 line. Then append ' Moonlight' and print on exit.

1
@DigitalTrauma完全忘记了\c,真好!至于那个特殊的unicode,这是我第一次听说,但是确实有效。在此页上打印时,它与命令s分隔符组合在一起:,因此乍一看有点奇怪。
seshoumara

3

Java 7中,207个 206 171 139字节

void c()throws Exception{System.out.print("La La Land");Thread.sleep(1000);System.out.print("\rL̶a̶ ̶L̶a̶ ̶L̶a̶n̶d̶ Moonlight");}

我对这个第一个答案有点作弊,因为我使用删除线unicode

说明:

void c() throws Exception{         // Method (throws is necessary due to Thread.sleep)
  System.out.print("La La Land");  //  Show initial text
  Thread.sleep(1000);              //  Wait 1 second
  System.out.print("\r             //  Move 'cursor' to the start of the line so we can overwrite the current text
    L̶a̶ ̶L̶a̶ ̶L̶a̶n̶d̶ Moonlight");        //  and print new text
}                                  // End of method

Java 7中(与AWT),444个 429 341字节

划掉444仍是常规444;(

import java.awt.*;import java.text.*;void m(){new Frame(){public void paint(Graphics g){g.drawString("La La Land",9,50);try{Thread.sleep(1000);}catch(Exception e){}AttributedString s=new AttributedString("La La Land Moonlight");s.addAttribute(java.awt.font.TextAttribute.STRIKETHROUGH,1>0,0,10);g.drawString(s.getIterator(),9,50);}}.show();}

由于Java控制台没有像删除线这样的标记,因此您必须使用Java AWT。而且,如果您认为Java Console已经很冗长,那就更糟了(我知道,我知道,大多数人甚至都无法想象Java 7会更糟。)

说明:

import java.awt.*;                                         // import used for Frame and Graphics
import java.text.*;                                        // Import used for all AttributedStrings
void m(){                                                  // method
  new Frame(){                                             //  Frame
    public void paint(Graphics g){                         //   Overridden paint method
      g.drawString("La La Land", 9, 50);                   //    Show the initial text
      try{
        Thread.sleep(1000);                                //    Wait 1 second
      }catch(Exception e){}                                //    Thread.sleep requires a try-catch..
      AttributedString s
          = new AttributedString("La La Land Moonlight");  //    Object to add markup to text
      s.addAttribute(
        java.awt.font.TextAttribute.STRIKETHROUGH,         //    Strike-through attribute
        1>0,//true                                         //    Mandatory parameter before we can specify the length
        0, 10);                                            //    From length 0 to 10 (length of "La La Land")
      g.drawString(s.getIterator(), 9, 50);                //    Show this new text with strike-through part
    }                                                      //   End of paint method
  }.show();                                                //  Show Frame
}                                                          // End of method

输出gif:

在此处输入图片说明


我认为您可以删除其中的空间String[] a1e3代替它使用1000
Kritixi Lithos 17-2-28

@KritixiLithos这个空间确实应该消失了。.可能在打高尔夫球时溜走了。至于1e3,那是一倍,并且Thread.sleep期望很长。1000比短(long)1e3。:)
Kevin Cruijssen

2
你的意思是Swing,不是Spring,不是吗?我差点心脏病发作!在代码高尔夫球中弹奏……此外,要节省字节,您可以使用AWT代替Swing。
OlivierGrégoire'17

@OlivierGrégoire啊,错字了,我的确是Swing。
凯文·克鲁伊森

1
我使用匿名内部类使AWT版本成为(Java 7)函数。我删除了第一个AttributedString废话,并打了更多306个字节。如果您使用Java 8,它仍然是302个字节。void m(){new Frame(){public void paint(Graphics g){g.drawString("La La Land",99,99);try{Thread.sleep(1000);}catch(Exception e){}AttributedString s=new AttributedString("La La Land Moonlight");s.addAttribute(java.awt.font.TextAttribute.STRIKETHROUGH,1>0,0,10);g.drawString(s.getIterator(),99,99);}}.show();}
OlivierGrégoire'3

2

Python 3,90个字节

使用Unicode(U + 0336)删除线,因为macOS终端不支持该\e[9m命令。

import time
s='La La Land '
print(s,end='\r')
time.sleep(1)
print('̶'.join(s),'Moonlight')

L̶a̶̶L̶a̶̶L̶a̶n̶d̶月光


2

的Arduino,332个 331字节

不竞争,只是为了好玩。

#include<LiquidCrystal.h>
LiquidCrystal lcd(7,8,9,10,11,12);String a="La La Land";String b="-- -- ----";void setup(){lcd.begin(16,2);}void loop(){lcd.home();lcd.print(a);delay(1000);lcd.clear();lcd.print(b);lcd.setCursor(0,2);lcd.print("Moonlight");while(1){delay(150);lcd.home();lcd.print(a);delay(150);lcd.home();lcd.print(b);}}

材料清单:

  • 1个Arduino Uno
  • 1 x液晶屏16 x 2
  • 1个10K电位器
  • 1 x 180欧姆电阻

L̶a̶̶L̶a̶̶L̶a̶n̶d̶月光


1
欢迎来到该网站。我不知道Arduino与C有多么相似,但我很确定您可以删除自己的空间#include
Wheat Wizard

根据我的计算,硬件成本为30个字节(电阻器为2个字节,电位计为3个,其设置为1个,LCD的为10个(可更改),电线的为14个(每条电线1个字节))。但是,这仅是一个建议。此外,TIO表示代码仅为331字节。有尾随换行符吗?
CalculatorFeline

@WheatWizard是正确的。修复!
Fluxa

1
@CalculatorFeline很好,但是在这种情况下,我们还应该计算所有其他答案的硬件成本。我的装置可能是最便宜的装置。:D
Fluxa

... D8 遍了 D8
CalculatorFeline

2

Python3,99个字节

import time
l='La La Land'
s='\u0336'
print(l,end="\r")
time.sleep(1)
print(s.join(l)+' Moonlight')

如果设置了l = 'La La Land ,您是否避免使用+s-2个字符?。
walpen

@walpen我必须使用它两次,这就是为什么我将它存储在s中的原因
Miguel

1

Bash + PV,62岁

l="La La Land"
printf "$l\0\r\e[9m$l\e[0m Moonlight"|pv -0qlL1

1

SmileBASIC,45字节

多亏了12Me21的魔术句法,少了一个字节。

据我所知,SB没有删除线字符,所以我GLINE改用了。显然假定显示清晰,ACLS需要时使用。

?"La La Land
WAIT 60GLINE.,4,79,4?" Moonlight

1

AHK,102字节

s=La La Land
Send,%s%
Sleep,1000
Send,^a{Del}
Loop,Parse,s
Send,%A_LoopField%{U+0336}
Send,` Moonlight

我作弊了一点,以结合使用长笔触覆盖的 unicode字符来获得删除线文本。根据您的设置,这可能会产生奇怪的外观。记事本具有良好的外观。

运行中的代码


AutoHotkey显然不是最有效的语言,但这是一个有趣的挑战。请小心在其上运行,因为它不会创建它自己的显示,并且会擦除任何处于活动状态的窗口的所有文本。


1

迅捷,392字节

Swift + UIKit确实不是打高尔夫球的理想选择!在XCode操场上运行它,结果将显示在预览窗格中。

import UIKit
import PlaygroundSupport
let l=UILabel(frame:CGRect(x:0,y:0,width:200,height:20))
l.textColor=UIColor.red
let m="La La Land"
let n=" Moonlight"
l.text=m
DispatchQueue.main.asyncAfter(deadline:.now()+1){
let a=NSMutableAttributedString(string:m+n)
a.addAttribute("NSStrikethrough",value:1,range:NSRange(location:0,length:10))
l.attributedText=a
}
PlaygroundPage.current.liveView=l

预习


l.textColor=UIColor.red必要吗?
艾伯特·伦肖

似乎默认为黑色背景上的黑色文本,否则
Matt

0

果冻,41个字节

“ñ[“m‘Ọj
“¡ṭḊßȥṡoẋ»¹13Ọ;9Ǥ;;0Ǥ;“"dE»œS1

在在线解释器上不起作用。


为什么不?可以便宜地添加兼容性吗?
CalculatorFeline

@CalculatorFeline否,Dennis必须实现控制代码才能使其正常工作,并且当前不是他的优先事项。
Erik the Outgolfer '17

您可以提供输出的屏幕截图/动画gif吗?
ʰᵈˑ

@ʰᵈˑ我可以做,尽管不能保证。在此期间,您可以下载解释器并自己进行测试:)
Erik the Outgolfer

0

Python(137字节)

from turtle import *;import time;write("La La Land");time.sleep(1);clearscreen();write("\u0336".join("La La Land ")+" Moonlight");done()

2
。之后您不需要空格import。我还建议将“ La La Land”保存为变量。
小麦巫师

0

TI-BASIC,57 53字节

:" LA
:Text(3,4,Ans+Ans+Ans+"ND
:Pause "",1
:Line(-9,8,-2,8
:Text(3,41,"MOONLIGHT

请注意,这使用具有最新OS的TI-84 + CE功能来暂停1秒钟。这将在TI-84 +上返回synthax错误。为了进行测试,您可以通过删除该行来忽略1秒的暂停。还请记住先按Zoom(缩放),然后先按6,以便您处于默认窗口设置,否则line命令将不起作用。


0

SpecBAS-58字节

1  ?"La La Land ";
2 WAIT 1e3
3 DRAW 0,4;80,0
4  ?"Moonlight"

每个字符为8x8像素,因此在0,4到相对位置80,4之间画了一条线(80添加到第一个坐标,0添加到第二个坐标,因此它保持在同一行)。

在此处输入图片说明


0

OIL,76个字节

↩︎⎋[9m
La La Land
⎋[0m Moonlight
4
1
10
20
4
14
10
9
20
6
5
4
0
4
1
4
2
89999

转义符和↩︎回车符代替。OIL缺少任何种类的睡眠命令,因此我使用从89999倒数到1的循环来模拟它。这在我的计算机上大约需要一秒钟,但在您的计算机上可能不会。

解释器将忽略前3行,然后打印(4)第二行(第1行;“ La La Land”)。下面的结构是循环,该循环将大数减少到最后等于1。最后,我只打印前三行。


0

PHP,不竞争(64字节)

<?=$s="\rLa La Land",sleep(1)?:wordwrap($s,1,--,1)," Moonlight";

使用UTF-8:--代表U+0336-但我可以肯定,它不能单独使用。

如果不是,请尝试~"1I"~I1选择--(+3或+1个字节)。

没有时间将其存储到文件或弄清楚如何将控制台设置为UTF-8;所以我无法测试其中任何一个;但无论谁可以:请问这是否是完整的BS。


0

Powershell,63个字节

仅在PowerShell ISE中工作。非竞争性,因为删除线仅移动了一个字符,我无法解决。

'La La Land',('̶'*10+' Moonlight')|%{sleep 1;Write-Host $_ -N}

L̶a̶̶L̶a̶̶L̶a̶n̶d̶月光

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.