Lir*_*una 41 language-agnostic code-golf rosetta-stone
按字符计数的最短代码,用于从输入字符串生成波形.
通过提升(第1行)较高字符并使(第1行)降低较低字符来生成波.相等的字符保持在同一行(没有提升或降级).
输入仅由小写字符和数字组成,字母被认为高于数字.
Input:
1234567890qwertyuiopasdfghjklzxcvbnm
Output:
z
l x v n
k c b m
j
h
g
y p s f
t u o a d
w r i
9 q e
8 0
7
6
5
4
3
2
1
Input:
31415926535897932384626433832795028841971693993751058209749445923078164062862
Output:
9 9 8 6 6
9 6 8 7 3 3 4 2 4 8 9 88
3 4 5 2 5 5 2 33 3 7 5 2 4 9 9 99 7
1 1 3 2 0 1 7 6 3 3 5 8 8 6
1 1 5 2 9 9 3 7 1 4 6 8
0 0 7 9 5 2 0 0 2 6
4 44 2
Run Code Online (Sandbox Code Playgroud)
代码计数包括输入/输出(即完整程序).
Jon*_*lle 77
进制打印:
6800B807BF8007BE8200B40EAC3C0D741338D8740A720481EF400181C7A000AB86C3EBE8C3
Run Code Online (Sandbox Code Playgroud)
在带有50行控制台的MS-DOS中运行,输入来自命令行.
例如
wave.com 1234567890qwertyuiopasdfghjklzxcvbnm
Run Code Online (Sandbox Code Playgroud)
更新:感谢jrandomhacker削减了三个字节
eph*_*ent 40
54个字符,如果让解释器处理输入/输出.
e=:|:@((#&' '@],[)"0[:(-<./)0,[:+/\[:(}:(>-<)}.)a.i.])
Run Code Online (Sandbox Code Playgroud)
65从stdin中明确读取并写入stdout.
(|:((#&' '@],[)"0[:(-<./)0,[:+/\[:(}:(>-<)}.)a.&i.)~1!:1[3)1!:2[4
Run Code Online (Sandbox Code Playgroud)
e '1234567890qwertyuiopasdfghjklzxcvbnm'
z
l x v n
k c b m
j
h
g
y p s f
t u o a d
w r i
9 q e
8 0
7
6
5
4
3
2
1
e '31415926535897932384626433832795028841971693993751058209749445923078164062862'
9 9 8 6 6
9 6 8 7 3 3 4 2 4 8 9 88
3 4 5 2 5 5 2 33 3 7 5 2 4 9 9 99 7
1 1 3 2 0 1 7 6 3 3 5 8 8 6
1 1 5 2 9 9 3 7 1 4 6 8
0 0 7 9 5 2 0 0 2 6
4 44 2
NB. Look up ASCII codes ord =: a. i. ] ord 'p4ssw0rd' 112 52 115 115 119 48 114 100 NB. Going up? up =: }: < }. up ord 'p4ssw0rd' 0 1 0 1 0 1 0 NB. Going down? down =: }: > }. down ord 'p4ssw0rd' 1 0 0 0 1 0 1 NB. Combine to get ±1 updown =: }: (> - <) }. updown ord 'p4ssw0rd' 1 _1 0 _1 1 _1 1 NB. Start with 0, follow up with partial sums sum =: 0 , +/\ sum updown ord 'p4ssw0rd' 0 1 0 0 _1 0 _1 0 NB. Subtract the minimum to get sequence with base at 0 fix =: - <./ fix sum updown ord 'p4ssw0rd' 1 2 1 1 0 1 0 1 NB. For convenience, name this chain of functions d =: [: fix [: sum [: updown ord
NB. Make spaces before the characters
push =: (#&' ' @ ] , [)"0 d
push 'p4ssw0rd'
p
4
s
s
w
0
r
d
NB. Turn it on its side
|: push 'p4ssw0rd'
w r
p ss 0 d
4
NB. Combine into one named function…
e =: |: @ push
NB. …and inline everything
e =: |:@((#&' '@],[)"0[:(-<./)0,[:+/\[:(}:(>-<)}.)a.i.])
cod*_*nix 36
按字符排序的最短代码用于从输入字符串中打印"wave".
Console.WriteLine("来自输入字符串的'a'wave'.");
Bar*_*aba 14
由barnaba创作的144个字符:
chop($_=<>);$l=length;push(@a," "x$l)for(1..$l*2);$l+=(ord $p<=>ord $_),substr($a[$l],$r++,1)=$p=$_ for(split //);/^\s+$/||print "$_\n" for(@a)
Chris Lutz优化的121个字符:
$_=<>;chop;$a[@a]=" "x$l for 1..($l=length)*2;$l+=$p cmp$_,substr($a[$l],$r++,1)=$p=$_ for split//;/\S/&&print"$_\n"for@a
进一步优化的94个字符:
$_=<>;@a=($"x($l=y///c).$/)x(2*$l);s/./substr$a[$l+=$"cmp$&],"@-",1,$"=$&/ge;/\S/&&print for@a
请注意,在传统的Perl高尔夫中,人们通常会增加开关的数量和代码的长度(这将有助于几笔),但在这里我们使用的是没有开关的独立程序.
P D*_*ddy 12
这适用于我对FreeSBIE的测试:
o;main(c){for(;(c=getchar())-10;o=c)printf("\33[1%c%c",c<o?66:c>o?65:71,c);}
Run Code Online (Sandbox Code Playgroud)
但是为了清楚地看到输出,你必须用这样的东西运行它:
clear ; printf "\n\n\n\n\n" ; echo the quick brown fox jumps over the lazy dog | ./a.out ; printf "\n\n\n\n\n"
这算数了吗?
ACo*_*lie 11
v,s="",raw_input()
m=n=len(s)
r=[' ']*n
q=[r[:]for i in range(2*n)]
for j,i in enumerate(s):
m+=(i<v)-(i>v)
q[m][j],v=i,i
for i in q:
if i!=r:print''.join(i)
Run Code Online (Sandbox Code Playgroud)
尽管如此,我还没有做太多的压缩.现在将它移植到宇宙飞船运营商的东西.
Dig*_*oss 10
r,a,q,i=[],"",99,0
gets.chars{|x|t=r[q+=a<=>x]||=""
a=x
r[q]+=" "*(i-t.size)+x
i+=1}
puts r.compact
Run Code Online (Sandbox Code Playgroud)
未压缩:
r,a,q,i = [],"",99,0
gets.chars { |x|
t = r[q+=a<=>x] ||= ""
a = x
r[q] += " "*(i-t.size)+x
i += 1
}
puts r.compact
Run Code Online (Sandbox Code Playgroud)
<?for($lc=$i=$h=0;"\n"!=$c=fgetc(STDIN);$o[$h]=sprintf("%- {$i}s%s",@$o[$h],$lc=$c),$i++)$h+=$c<$lc?-1:$c>$lc;krsort($o);echo join($c,$o);
Run Code Online (Sandbox Code Playgroud)
'可读'版本:
<?
for (
$last_ch = $i = $level = 0;
"\n" != $ch = fgetc(STDIN);
$out[$level] = sprintf("%- {$i}s%s", @$out[$level], $last_ch = $ch), $i++
)
$level += $ch < $last_ch ? -1 : $ch > $last_ch;
krsort($out);
echo join($ch,$out);
Run Code Online (Sandbox Code Playgroud)
Python 2.x,现在低至156个字符:
s=raw_input()
R=range(len(s))
m=[0]
for i in R[1:]:m+=[m[-1]-cmp(s[i],s[i-1])]
for x in range(min(m),max(m)+1):print''.join(m[i]==x and s[i]or' 'for i in R)
Run Code Online (Sandbox Code Playgroud)
l[999][999];p;v=500;r;main(c){for(;(c=getchar())>0;
)l[v+=c>p,v-=c<p][++r]=*l[v]=p=c;for(v=999;v--;)for
(c=0;c++<=r;)*l[v]&&putchar(c<=r?32|l[v][c]:10);}
Run Code Online (Sandbox Code Playgroud)
小智 5
Haskell,215个字符.我发布这个是因为我根本不喜欢Khoth的版本.只是通过写一个合理的功能风格,我最终得到了一个明显更短和IMO更可读的程序.我实际上并没有尝试将变量名称和间距缩小.破坏性地更新数组可能会比复制空格更短.
import Char
import List
main=getLine>>=(putStr.p)
p s=unlines$transpose[z++(y:x)|(m,y)<-zip n s,let(x,z)=splitAt m$replicate(maximum n)' ']
where o=map ord s
n=scanl(+)0$map signum$zipWith(-)(tail o)o
Run Code Online (Sandbox Code Playgroud)