차선의 숫자


32

입력:

정수 목록

산출:

-0123456789중복 된 숫자는 무시하고 각 숫자 (및 빼기 부호)를 순서대로 자체 레인에 넣습니다 .

예:

입력: [1,729,4728510,-3832,748129321,89842,-938744,0,11111]

산출:

-0123456789  <- Added as clarification only, it's not part of the output

  1         
   2    7 9
 012 45 78 
-  23    8 
  1234  789
   2 4   89
-   34  789
 0         
  1        

도전 규칙 :

  • 숫자에 중복 된 숫자는 무시됩니다.
  • I / O는 임의의 합리적인 형식 일 수 있습니다. 입력은 문자열의 목록 / 배열 또는 문자 배열 일 수 있습니다. 문자열, 문자, 문자 행렬 등의 목록으로 출력 될 수 있습니다.
  • 후행 공백은 선택 사항입니다.
  • 선행 또는 후행 줄 바꾸기는 선택 사항입니다 (그러나 줄 사이는 아님).
  • 입력은 항상 하나 이상의 정수를 포함합니다
  • 당신은 최소한의 정수 범위를 지원해야 -2,147,483,648하지만 2,147,483,647(32 비트).
  • 입력 목록은 포함하지 않습니다 -0, 00(또는 두 개 이상의 제로), 또는 선행 0 (즉와 정수 012).
  • 언어에서 음수 (예 : upper ¯)에 다른 기호 를 사용하는 경우, 일관성이있는 한 해당 기호를 대신 사용할 수도 있습니다.
  • 당신은 (수 있습니다 5 또는 8없이 그렇게 선 공간 구분 기호 숫자 사이를 가질 수 있습니다 - 0 1 2 3 4 6 7 9대신 -01234 67 9한 것이 일관된로) (따라서도 사이에 공간이 있어야 -하고 0).

일반적인 규칙:

  • 이것은 이므로 바이트 단위의 최단 답변이 이깁니다.
    코드 골프 언어가 코드 골프 언어 이외의 언어로 답변을 게시하지 못하게하십시오. '모든'프로그래밍 언어에 대한 가능한 한 짧은 대답을 생각해보십시오.
  • 표준 규칙이 답변에 적용 되므로 STDIN / STDOUT, 적절한 매개 변수 및 리턴 유형의 전체 프로그램과 함께 함수 / 방법을 사용할 수 있습니다. 당신의 전화.
  • 기본 허점 은 금지되어 있습니다.
  • 가능하면 코드 테스트 링크를 추가하십시오.
  • 또한 필요한 경우 설명을 추가하십시오.

테스트 사례 :

Input: [1,729,4728510,-3832,748129321,89842,-938744,0,11111]
Output:
  1         
   2    7 9
 012 45 78 
-  23    8 
  1234  789
   2 4   89
-   34  789
 0         
  1        

Input: [4,534,4,4,53,26,71,835044,-3559534,-1027849356,-9,-99,-3459,-3459,-94593,-10234567859]
Output:
      4     
     345    
      4     
      4     
     3 5    
    2   6   
   1     7  
  0  345  8 
 -   345   9
 -0123456789
 -         9
 -         9
 -   345   9
 -   345   9
 -   345   9
 -0123456789

Input: [112,379,-3,409817,239087123,-96,0,895127308,-97140,923,-748]
Output:
  12       
   3    7 9
-  3       
 01 4   789
 0123   789
-      6  9
 0         
  123 5 789
-01  4  7 9
   23     9
-    4  78 

Input: [-15,-14,-13,-12,-11,10,-9,-8,-7,-5,-4,-3,-1,0,9,100,101,102,1103,104,105,106,116,-12345690]
Output:
- 1   5    
- 1  4     
- 1 3      
- 12       
- 1        
-01        
-         9
-        8 
-       7  
-     5    
-    4     
-   3      
- 1        
 0         
          9
 01        
 01        
 012       
 01 3      
 01  4     
 01   5    
 01    6   
  1    6   
-0123456  9

Input: [99,88,77,66,55,44,33,22,11,10,0,0,0,-941]
Output:
          9
         8 
        7  
       6   
      5    
     4     
    3      
   2       
  1        
 01        
 0         
 0         
 0         
- 1  4    9

출력에서 숫자 사이의 공백이 허용됩니까?
얽히고 설킨

우리는 ¯대신에 상단 마이너스 를 사용할 수 있습니까 -?
Uriel

누락 된 숫자가 여전히 공백으로 대체 될 것은 그래서, 당신의 예에서, 4 6, 7 & 9 사이의 세 공간이있을 것입니다 : "-0 1 2 3 4 <space> 6 7 <space> 9"(여러 공간이 어떤 이유로, 의견 붕괴 취득)
얽히고 설킨

1
나는 당신의 과거를 몰래 바라고 있었다! : D 잘 발견!
얽히고 설킨

답변:


4

Stax , 8 바이트

║V≡u╝─é╢

실행 및 디버깅

표준 입력에서는 라인 당 하나의 숫자가 필요합니다. 각 문자의 대상 색인을 찾아 결과의 해당 색인에 지정하여 작동합니다. 인덱스가 범위를 벗어나면 배열이 맞을 때까지 0으로 확장됩니다. 출력 중에 0스페이스가됩니다. 나머지는 문자 코드입니다.

포장을 풀고 포장을 풀고 주석을 달았습니다.

m       for each line of input, execute the rest of the program and print the result
 zs     put an empty array under the line of input
 F      for each character code in the line of input, run the rest of the program
  Vd    "0123456789"
  I^    get the index of the character in this string and increment
  _&    assign this character to that index in the original string

이것을 실행


하나는 길이가 하나 인 목록을 어떻게 입력해야합니까? (단지 가치이거나 가치이며 새로운
Jonathan Allan

1
네, 좋은 지적입니다. 단일 값에도 작동하는 대체 입력 형식은입니다 ["7"]. 이 형식은와 같은 여러 값을 처리 할 수도 있습니다 ["34", "43"].
재귀

6

05AB1E , 13 바이트

암호:

v'-žh«DyмSð:,

05AB1E 인코딩을 사용합니다 . 온라인으로 사용해보십시오!

설명:

v               # For each element in the input..
 '-žh«          #   Push -0123456789
      D         #   Duplicate this string
       yм       #   String subtraction with the current element
                    e.g. "-0123456789" "456" м  →  "-0123789"
         Sð:    #   Replace all remaining elements with spaces
                    e.g. "-0123456789" "-0123789" Sð:  →  "     456   "
            ,   #   Pop and print with a newline

1
좋은! 교체 경로는가는 경로보다 짧았습니다 :)
Emigna

2
@Emigna 인서트 루트도 매우 흥미로운 접근 방식입니다. 실제로, 나는 당신이 vðTúyvyÐd+ǝ},;)로 4 바이트를 절약 할 수 있다고 생각합니다 .
Adnan

1
훌륭한! 나는 그런 식으로 ǝ작동한다는 것을 몰랐다 -0. 그러나 이제는 그것을 알아 봤습니다. 처음에 읽었을 때 실제로는 문자열이 아니라 숫자입니다. P
Emigna

Ooooof. 나는 23 바이트에 있었다. 05AB1E (인류에 대한 말).
Magic Octopus Urn


4

자바 스크립트, 59 58 바이트

문자열 배열로 입력 및 출력.

a=>a.map(x=>`-0123456789`.replace(eval(`/[^${x}]/g`),` `))

시도 해봐

o.innerText=(g=s=>(f=
a=>a.map(x=>`-0123456789`.replace(eval(`/[^${x}]/g`),` `))
)(s.split`,`).join`\n`)(i.value="1,729,4728510,-3832,748129321,89842,-938744,0,11111");oninput=_=>o.innerText=g(i.value)
input{width:100%;}
<input id=i><pre id=o></pre>


기발한

입력을 문자열 배열로 가져와 문자 배열 배열을 출력합니다.

a=>a.map(x=>[...`-0123456789`].map(y=>-~x.search(y)?y:` `))


1
그런 우아한 솔루션, 나는 그것을 정말로 좋아합니다.
Brian H.


3

05AB1E , 17 13 바이트

덕분에 4 바이트 절약 Adnan

vðTúyvyÐd+ǝ},

온라인으로 사용해보십시오!

설명

v               # loop over elements y in input
 ðTú            # push a space prepended by 10 spaces
    yv          # for each element y in the outer y
      y         # push y
       Ðd+      # push y+isdigit(y)
          ǝ     # insert y at this position in the space-string
           }    # end inner loop
            ,   # print

3

루비 , 42 바이트

숫자 배열을 처리하는 익명 람다 :

->a{a.map{|n|"-0123456789".tr"^#{n}",?\s}}

온라인으로 사용해보십시오!

또는 완전히 Perl과 같은 전체 프로그램이 훨씬 짧습니다. 내가 말하고 싶지만 -pl스위치는 이러한 맥락에서 확실히 재미 찾습니다

루비 -pl , 29 바이트

$_="-0123456789".tr"^#$_"," "

온라인으로 사용해보십시오!

마지막으로 출력 문자열을 인용 할 수있는 경우 다음이 가능합니다.

루비 -n , 27 바이트

p"-0123456789".tr ?^+$_,?\s

온라인으로 사용해보십시오!


3

자바 스크립트 (Node.js) , 60 바이트

  • 조인을 줄인 @Andrew Taylor에게 감사합니다 (8 자).
  • X.match (8 문자)를위한 @Yair Rand에게 감사합니다.
a=>a.map(X=>"-0123456789".replace(/./g,x=>X.match(x)?x:" "))

온라인으로 사용해보십시오!


오, 그 join트릭은 사랑 스럽지만 질문은 문자열 배열처럼 괜찮습니다. 출력을 제거하여 8 바이트를 면도 할 수 있습니까?
Andrew Taylor

다음으로 대체 (X+"").includes(x)하여 다른 파일을 절약 할 수 있습니다.RegExp(x).test(X)
Andrew Taylor

(X+"").match(x)더 짧을 것입니다. 이 질문은 또한 입력이 문자열의 배열이 될 수 있도록 허용합니다 X.match(x).
Yair Rand

2

Japt , 16 바이트

문자열 배열로 입력 및 출력.

£Ao ¬i- ®iS gXøZ

시도 해봐


설명

£                    :Map over each element X
 Ao                  :  Range [0,10)
    ¬                :  Join to a string
     i-              :  Prepend "-"
        ®            :  Map over each character Z
         iS          :    Prepend a space
            g        :    Get the character at index
             XøZ     :      X contains Z? (true=1, false=0)

2

파이썬 3 , 77 64 바이트

@Rod 덕분에 -12 바이트

lambda x:[[[" ",z][z in str(y)]for z in"-0123456789"]for y in x]

온라인으로 사용해보십시오!

파이썬에서 골프를 치는 첫 시도. 조언 환영합니다!

문자의 2D 배열을 반환합니다.


1
당신이 사용할 수있는 '-0123456789'대신 range(10)첫 번째 블록과 스왑 드롭 str(z)과를 z당신은 또한 python2로 전환하고 사용할 수 있습니다, `y`대신 str(y)( ``- 상당 +입니다 repr)
로드

의 불필요한 공간 in "-.
Jonathan Frech



2

MATL , 13 바이트

"45KY2ht@gm*c

입력은 문자열의 셀형 배열입니다. 온라인으로 사용해보십시오! 또는 모든 테스트 사례를 확인하십시오 .

설명

         % Implicit input: cell array of strings, for example {'1','729',...,'11111'}
"        % For each cell
  45     %   Push 45 (ASCII code of '-')
  KY2    %   Push predefined literal '0123456789'
  h      %   Concatenate horizontally: gives '-0123456789'
  t      %   Duplicate
  @      %   Push current cell, for example {'729'}
  g      %   Convert cell to matrix. This effectively gives the cell's contents, '729'
  m      %   Ismember: gives an array of zeros and ones indicating membership of each
         %   char from '-0123456789' in '729'. The result in the example is
         %   [0 0 0 1 0 0 0 0 1 0 1]
  *      %   Multiply, element-wise. Chars are implicity converted to ASCII 
         %   Gives the array [0 0 0 50 0 0 0 0 55 0 57] 
  c      %   Convert ASCII codes to chars. 0 is displayed as space. Gives the string
         %   '   2    7 9'
         % Implicit end
         % Implicilly display each string on a different line

2

J , 32 27 바이트

FrownyFrog 덕분에 -5 바이트!

10|.":(10<."."0@[)}11$' '"0

온라인으로 사용해보십시오!

독창적 인 솔루션 :

J , 32 바이트

(('_0123456789'i.[)}11$' '"0)@":

설명:

@": 문자로 변환하고

}11$' '"0 11 칸 배열의 내용을 다음 문자로 변경

'_0123456789'i.[ 이 목록의 문자 색인으로 표시된 장소

온라인으로 사용해보십시오!


1
10|.":(10<."."0@[)}11$' '"0
FrownyFrog

@FrownyFrog 멋진 솔루션, 감사합니다!
Galen Ivanov

2

Google 스프레드 시트 , 124 바이트

=Transpose(ArrayFormula(If(IsError(Find(Mid("-0123456789",Row($1:$11),1),Split(A1,",")))," ",Mid("-0123456789",Row($1:$11),1

입력은 셀에서 쉼표로 구분 된 목록입니다 A1 . 출력 범위에 그러나 많은 항목이 입력 된입니다. 원하는 위치에 수식을 넣을 수 있습니다 . 편의를 위해 방금 선택했습니다 . 시트는 수식 끝에 자동으로 4 개의 닫는 괄호를 추가하여 4 바이트를 절약합니다.B1:L??B1

Screenshot

다른 테스트 사례 와 다른 테스트 사례

설명:

  • Mid("-0123456789",Row($1:$11),1) 11 개의 문자를 차례로 선택합니다.
  • Find(Mid(~),Split(A1,","))각 입력 요소에서 해당 문자를 찾습니다. 숫자 값을 찾거나 찾지 못하면 오류를 반환합니다.
  • If(IsError(Find(~)," ",Mid(~))문자를 찾을 수 없으면 공백을 반환하고 문자가 있으면 공백을 반환합니다. (나는 중복을 피할 수있는 방법이 있었으면 좋겠다.Mid(~) 부분을 .)
  • ArrayFormula(If(~)) 다중 셀 참조를 만드는 것입니다 Mid(~) 만들고Find(~) 작동시키는 것입니다. 또한 한 셀의 수식이 여러 셀의 값을 반환하는 이유이기도합니다.
  • Transpose(ArrayFormula(~)) 반환 된 배열은 옆으로 시작하기 때문에 전치하십시오.


1

펄 6 , 35 바이트

{.map:{map {m/$^a/||' '},'-',|^10}}

온라인으로 사용해보십시오!

출력은 정규식 일치 또는 공백 문자를 포함하는 문자 행렬입니다.


'입력이 합당한 형식 일 수 있습니다'가 stdin 인 -pe경우 초기 .map, 괄호 및 스왑 $^a을 생략 할 수 있습니다.$_
Phil H

@PhilH -p-n어떻게 든 적어도 TIO에, 버그를 보인다. 어떤 이유로 $_블록으로 전달되지 않습니다. 예 1 , 예 2를 참조하십시오 .
nwellnhof

1

자바 8, 53 바이트

a->a.map(i->"-0123456789".replaceAll("[^"+i+"]"," "))

내 도전은 내가 생각했던 것보다 쉽다 ..

입력과 출력 모두 java.util.stream.Stream<String> .

설명:

온라인으로 사용해보십시오.

a->                              // Method with String-Stream as both input and return-type
  a.map(i->                      //  For every String in the input:
    "-0123456789"                //   Replace it with "-0123456789",
    .replaceAll("[^"+i+"]"," ")) //   with every character not in `i` replaced with a space


1

R , 96 75 바이트

for(i in scan())cat(paste(gsub(paste0("[^",i,"]")," ","-0123456789"),"\n"))

온라인으로 사용해보십시오!

이 정규식 접근 방식을 제안 해 주신 Kevin Cruijssen에게 감사합니다!

stdin에서 공백으로 구분 된 정수로 입력을 가져오고 ASCII 아트를 stdout에 인쇄합니다.


나는 R을 잘 모른다. 그래서 더 골프를 칠 수 있다고 확신하지만이 다른 접근법은 12 바이트 짧다 function(N)for(i in N)cat(paste(gsub(paste("[^","]",sep=i)," ","-0123456789"),"\n")). (정수 배열 대신 문자열 배열로 입력 하십시오
Kevin Cruijssen

@KevinCruijssen 아, 좋아, 그래, 골프도 할 수있어.
Giuseppe

1

SOGL V0.12 , 14 13 바이트

{ø,{²²⁴WI1ž}P

여기 사용해보십시오!

설명:

{ø,{²²⁴WI1ž}P

{            repeat input times
 ø,            push an empty string and the next input above that
   {       }   for each character in the input
    ²²           push "0123456789"
      ⁴          copy the character on top
       W         and get it's index in that string (1-indexed, 0 for the non-existent "-")
        I        increment that (SOGL is 1-indexed, so this is required)
         1ž      at coordinates (index; 1) in the string pushed earlier, insert that original copy of the character
            P  print the current line

1

SNOBOL4 (CSNOBOL4) , 85 바이트

I	X =INPUT	:F(END)
	S ='-0123456789'
R	S NOTANY(X ' ') =' '	:S(R)
	OUTPUT =S	:(I)
END

온라인으로 사용해보십시오!

I	X =INPUT	:F(END)		;* read input, if none, goto end
	S ='-0123456789'		;* set the string
R	S NOTANY(X ' ') =' '	:S(R)	;* replace characters of S not in X + space with space
	OUTPUT =S	:(I)		;* print S, goto I
END

1

Pyth, 14 바이트

VQm*d}dNs+\-UT

입력을 문자열 목록으로 가져 와서 각 행에 대한 문자열 목록을 출력합니다.
여기 사용해보십시오

설명

VQm*d}dNs+\-UT
VQ                For each string in the input...
  m     s+\-UT    ... and each character in "-0123456789"...
     }dN          ... check if the character is in the string...
   *d             ... and get that character or an empty string.

1

레티 나 , 26 바이트

%"-0123456789"~`.+
[^$&]¶ 

온라인으로 사용해보십시오! 참고 : 후행 공간. 설명 : 각 입력 행에 대해 %하위 스테이지를 ~한 번 실행합니다 . ~첫 번째의 라인을 래핑 하위 단계를 실행 [^하고 ]<CR><SP>프로그램을 제작, 그 대체합니다 문자되지 공백 라인이다. 는 "-0123456789"해당 프로그램의 입력이 주어진 문자열임을 나타냅니다 ( $대체는 가능하지만 필요하지는 않습니다).


1

펄 5 -n , 30 바이트

-첫 번째 위치 이외의 다른 곳에 나타날 수 있으면 작동하지 않습니다

#!/usr/bin/perl -n
say"-0123456789"=~s/[^$_]/ /gr

온라인으로 사용해보십시오!


-첫 번째 위치 이외의 다른 곳에 나타날 수 있다면 작동하지 않을 것입니다. 그렇다면 더 이상 정수가 아니기 때문에이 도전에 대답하지 않습니다. : P
Outgolfer Erik




1

K4 , 30 27 바이트

해결책:

{?[a in$x;a:"-",.Q.n;" "]}'

예:

q)k){?[a in$x;a:"-",.Q.n;" "]}'1 729 4728510 -3832 748129321 89842 -938744 0 11111
"  1        "
"   2    7 9"
" 012 45 78 "
"-  23    8 "
"  1234  789"
"   2 4   89"
"-   34  789"
" 0         "
"  1        "

설명:

입력에 따라 "-0123 ..."또는 ""를 반환하십시오. 오른쪽에서 왼쪽으로 해석됩니다. APL 답변에 대한 경쟁이 없습니다 :(

{?[a in$x;a:"-",.Q.n;" "]}' / the solution
{                        }' / lambda for each
 ?[      ;          ;   ]   / if[cond;true;false]
                .Q.n        / string "0123456789"
            "-",            / join with "-"
          a:                / save as a
       $x                   / convert input to string
   a in                     / return boolean list where each a in x
                     " "    / whitespace (return when false)

0

APL + WIN, 33 바이트

화면 입력을 문자열로 프롬프트

n←11⍴' '⋄n['-0123456789'⍳s]←s←⎕⋄n
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.