首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将支架转换为右手支撑(悲伤支撑)

将支架转换为右手支撑(悲伤支撑)
EN

Code Golf用户
提问于 2017-02-14 01:17:57
回答 1查看 1.8K关注 0票数 26

右大括号是代码括号的一种样式,在这种风格中,大括号和分号都对齐到文件右侧的一个点。

通常,这被认为是不好的做法,有几个原因。

挑战

通过任何方法获取一个多行字符串,并将它的大括号风格转换为右支撑。

对于这一挑战,您只需要使用它来处理Java代码,但是,理论上,它应该适用于任何使用Braces和分号的代码。

您必须在一行中获取所有{};字符,在它们之间有任意数量的空格。例如。}}; } }\n\t\t},并通过使用空格将它们排列在文件的右侧。

例如:

代码语言:javascript
复制
a {
b;
{c

应该变成

代码语言:javascript
复制
a {
b ;{
c

或者,更抽象地说,将所有{};字符的左边的任意空格和所有空格推到右边。

以其他方式应保留线条的缩进。在{};字符移动后只包含空格的行可以选择删除。

例如:

代码语言:javascript
复制
a{
    b{
        c;
    }
}
d;

可能会变成

代码语言:javascript
复制
a        {
    b    {
        c;}}
d        ;

代码语言:javascript
复制
a        {
    b    {
        c;}}
    

d        ;

向右推是指所有{};字符都对齐到一个不短于最长行的点。在那之后的任何空间都是可以接受的。

因此,以下各点是可以接受的:

代码语言:javascript
复制
a {
bc;

a  {
bc ;

a   {
bc  ;

等等。

任何代码中的行都可能在其他非空白字符之间包含{};字符,对这种情况的处理是不必要的,不过如果您愿意,则应该将它们保留在适当的位置。行也可能根本不包含任何{};字符,这应该得到正确的处理。如下所示。

代码语言:javascript
复制
a {
b ;
c
d }

因为我们不希望代码评审看到我们正在做的可怕的事情,所以您需要使代码尽可能小。

示例/测试案例

泛型

代码语言:javascript
复制
public class HelloWorld{
       public static void main(String[] args){
           System.out.println("Hello, World!");
       }
}

变成..。

代码语言:javascript
复制
public class HelloWorld                        {
    public static void main(String[] args)     {
        System.out.println("Hello, World!")    ;}}

图像本身

代码语言:javascript
复制
public class Permuter{
    private static void permute(int n, char[] a){
        if (n == 0){
            System.out.println(String.valueOf(a));
        }else{
            for (int i=0; i<= n; i++){
                permute(n-1, a);
                swap(a, n % 2 == 0 ? i : 0, n);
            }
        }
    }
    private static void swap(char[] a, int i, int j){
        char saved = a[i];
        a[i] = a[j];
        a[j] = saved;
    }
}

变成..。

代码语言:javascript
复制
public class Permuter                                {
    private static void permute(int n, char[] a)     {
        if (n == 0)                                  {
            System.out.println(String.valueOf(a))    ;}
        else                                         {
            for (int i=0; i<= n; i++)                {
                permute(n-1, a)                      ;
                swap(a, n % 2 == 0 ? i : 0, n)       ;}}}
    private static void swap(char[] a, int i, int j) {
        char saved = a[i]                            ;
        a[i] = a[j]                                  ;
        a[j] = saved                                 ;}}

不是那么完美的泛型Python

反差

代码语言:javascript
复制
def Main():
    print("Hello, World!");

Main();

变成..。

代码语言:javascript
复制
def Main():
    print("Hello, World!")    ;
Main()                        ;

Notes

  • 标准漏洞应用
  • 标准IO应用
  • 这是密码-高尔夫,所以最短的程序以字节为单位获胜!
  • 我不承担与用右手Brace风格编程相关的损害赔偿责任。
  • 玩得开心!

编辑备注

我重新定义了挑战的细节,希望我没有违反任何人对规则的看法,我向你保证这是无意的。这应该是一个更清晰和更少的自我冲突的规范。

EN

回答 1

Code Golf用户

发布于 2017-02-14 12:06:22

Python 2: 228 Bytes

代码语言:javascript
复制
import re
g=re.search
def b(a):
    s,l="",a.split('\n')
    r=max([len(k)for k in l]) 
    for k in l:
        n,m=g('[;}{]',k),g('[\w]',k)
        if n:n=n.start()
        if m:m=m.start()
        if n>m and m!=None:s+="\n"+k[:n]+" "*(r-n)
        s+=k[n:]
    print s
票数 1
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/109995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档