Digit di jalur mereka

32

Memasukkan:

Daftar bilangan bulat

Keluaran:

Letakkan setiap digit (dan tanda minus) di jalurnya sendiri, dalam urutan -0123456789, abaikan digit yang digandakan.

Contoh:

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

Keluaran:

-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        

Aturan tantangan:

  • Digit digandakan dalam nomor tersebut diabaikan.
  • I / O dapat dalam format apa pun yang masuk akal. Input dapat berupa daftar / larik string atau karakter-larik. Output dapat berupa daftar string, karakter, karakter-matriks, dll.
  • Ruang tambahan adalah opsional.
  • Setiap jumlah baris baru yang mengarah atau tertinggal adalah opsional (tetapi tidak di antara baris).
  • Input akan selalu mengandung setidaknya satu integer
  • Anda harus mendukung berbagai integer setidaknya -2,147,483,648meskipun 2,147,483,647(32-bit).
  • Daftar input tidak akan pernah berisi -0, 00(atau lebih dari dua nol), atau bilangan bulat dengan nol nol terkemuka (yaitu 012).
  • Jika bahasa Anda menggunakan simbol yang berbeda untuk angka negatif (seperti angka atas ¯), Anda juga diperbolehkan menggunakannya, asalkan konsisten.
  • Anda diizinkan untuk memiliki pembatas ruang antara digit (sehingga garis tanpa 5 atau 8 bisa - 0 1 2 3 4 6 7 9bukan -01234 67 9), asalkan konsisten (dan oleh karena itu juga harus ada spasi antara -dan 0).

Aturan umum:

  • Ini adalah , jadi jawaban tersingkat dalam byte menang.
    Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa non-codegolf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa saja'.
  • Aturan standar berlaku untuk jawaban Anda, jadi Anda diperbolehkan menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat dan tipe pengembalian, program lengkap. Panggilanmu.
  • Celah default tidak diperbolehkan.
  • Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda.
  • Juga, silakan tambahkan penjelasan jika perlu.

Kasus uji:

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
Kevin Cruijssen
sumber
Apakah spasi antara digit diizinkan dalam output?
Shaggy
Bisakah kita menggunakan minus atas ¯bukan -?
Uriel
Digit yang hilang masih akan diganti dengan spasi jadi, dalam contoh Anda, akan ada 3 spasi antara 4 & 6 dan 7 & 9: "-0 1 2 3 4 <space> 6 7 <space> 9"(Beberapa spasi menjadi kolaps dalam komentar, karena beberapa alasan)
Shaggy
1
Saya berharap untuk menyelinap yang melewati Anda! : D Terlihat dengan baik!
Shaggy
1
related
streetster

Jawaban:

4

Stax , 8 byte

║V≡u╝─é╢

Jalankan dan debug itu

Dibutuhkan satu nomor per baris pada input standar. Ini bekerja dengan menemukan indeks target setiap karakter dan menugaskannya ke dalam indeks hasil. Jika indeks di luar batas, array diperluas dengan nol sampai cocok. Selama output, 0menjadi spasi. Sisanya adalah kode karakter.

Dibongkar, tidak diserang, dan dikomentari, seperti inilah bentuknya.

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

Jalankan yang ini

rekursif
sumber
Bagaimana cara memasukkan daftar panjang satu? (Jika hanya nilai atau nilai dan baris baru tidak berfungsi.)
Jonathan Allan
1
Oh ya, poin bagus. Bentuk input alternatif yang juga berfungsi untuk nilai tunggal adalah ["7"]. Format ini juga dapat menangani beberapa nilai seperti ["34", "43"].
rekursif
6

05AB1E , 13 byte

Kode:

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

Menggunakan penyandian 05AB1E . Cobalah online!

Penjelasan:

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
Adnan
sumber
1
Bagus! Pergi mengganti rute lebih pendek dari pada insert-rute yang saya lihat :)
Emigna
2
@Emigna Insert-route juga merupakan pendekatan yang sangat menarik. Bahkan, saya pikir Anda dapat menyimpan 4 byte dengan vðTúyvyÐd+ǝ},;).
Adnan
1
Cemerlang! Saya tidak tahu ǝapakah akan berfungsi seperti itu -0. Tapi sekarang setelah saya tihnk, itu sebenarnya angka dan bukan string ketika saya pertama kali membacanya sebagai: P
Emigna
Ooooof ... Saya berada di 23bytes. The 05AB1E (pun pada kemanusiaan).
Magic Octopus Urn
4

Haskell , 51 byte

-1 byte terima kasih kepada Laikoni .

f l=[[last$' ':[n|n`elem`i]|n<-"-0123456789"]|i<-l]

Cobalah online!

Tantangan ini bersifat digital. D:

benar-benar manusiawi
sumber
"-0123456789"byte lebih pendek dari '-':['0'..'9'].
Laikoni
4

JavaScript, 59 58 byte

Input & output sebagai array string.

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

Cobalah

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>


Asli

Mengambil input sebagai larik string dan menghasilkan larik array karakter

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

Shaggy
sumber
1
solusi yang elegan, saya sangat menyukainya.
Brian H.
3

05AB1E , 17 13 byte

Disimpan 4 byte berkat Adnan

vðTúyvyÐd+ǝ},

Cobalah online!

Penjelasan

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
Emigna
sumber
3

Ruby , 42 byte

Lambda Anonim memproses array angka:

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

Cobalah online!

Atau, program lengkap seperti Perl jauh lebih pendek. aku akan mengatakan-pl switch terlihat cukup lucu dalam konteks ini:

Ruby -pl , 29 byte

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

Cobalah online!

Akhirnya, berikut ini adalah mungkin jika dapat diterima untuk dikutip string keluaran:

Ruby -n , 27 byte

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

Cobalah online!

Kirill L.
sumber
3

JavaScript (Node.js) , 60 byte

  • Terima kasih kepada @Andrew Taylor untuk mengurangi bergabung (8 karakter)
  • Terima kasih kepada @Yair Rand untuk X.match (8 karakter)
a=>a.map(X=>"-0123456789".replace(/./g,x=>X.match(x)?x:" "))

Cobalah online!

DanielIndie
sumber
Oh, jointrik itu indah - tetapi pertanyaannya berbunyi seperti array string adalah output OK jadi mungkin Anda bisa mencukur 8 byte dengan menghapusnya?
Andrew Taylor
Cukup yakin Anda dapat menyimpan yang lain dengan menggantinya (X+"").includes(x)denganRegExp(x).test(X)
Andrew Taylor
(X+"").match(x)akan lebih pendek. Pertanyaannya juga memungkinkan input menjadi array string, jadi itu bisa saja X.match(x).
Yair Rand
2

Japt , 16 byte

Input & output sebagai array string.

£Ao ¬i- ®iS gXøZ

Cobalah


Penjelasan

£                    :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)
Shaggy
sumber
2

Python 3 , 77 64 byte

-12 byte terima kasih kepada @Rod

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

Cobalah online!

Upaya pertama saya yang tepat untuk bermain golf di Python. Saran selamat datang!

Mengembalikan array karakter 2D.

Jo King
sumber
1
Anda dapat menggunakan '-0123456789'sebagai gantinya range(10)dan menjatuhkan blok pertama dan bertukar str(z)dengan z, Anda juga dapat beralih ke python2 dan menggunakan `y`sebagai gantinya str(y)( ``adalah + - setara dengan repr)
Rod
Ruang berlebihan di in "-.
Jonathan Frech
2

Haskell , 47 byte

map(\s->do d<-"-0123456789";max" "[d|elem d s])

Cobalah online!

Menggunakan maxuntuk memasukkan spasi di mana tidak ada elemen, karena spasi lebih kecil dari angka atau tanda minus apa pun.

Jika jumlah ruang trailing yang tidak baik adalah OK, dua byte dapat disimpan:

45 byte

map(\s->do d<-'-':['0'..];max" "[d|elem d s])

Cobalah online!

Tidak
sumber
2

MATL , 13 byte

"45KY2ht@gm*c

Input adalah array sel string. Cobalah online! Atau verifikasi semua kasus uji .

Penjelasan

         % 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
Luis Mendo
sumber
2

J , 32 27 byte

-5 byte terima kasih kepada FrownyFrog!

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

Cobalah online!

Solusi asli:

J, 32 bytes

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

Explanation:

@": convert to characters and

}11$' '"0 change the content of an array of 11 spaces to these characters

'_0123456789'i.[ at the places, indicated by the indices of the characters in this list

Try it online!

Galen Ivanov
sumber
1
10|.":(10<."."0@[)}11$' '"0
FrownyFrog
@FrownyFrog Nice solution, thanks!
Galen Ivanov
2

Google Sheets, 124 bytes

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

Input is a comma-separated list in cell A1. Output is in the range B1:L? where ? is however many entries were input. (You can put the formula wherever you want, I just chose B1 for convenience.) Note that Sheets will automatically add four closing parentheses to the end of the formula, saving us those four bytes.

Screenshot

Another test case and another test case

Explanation:

  • Mid("-0123456789",Row($1:$11),1) picks out each of the 11 characters in turn.
  • Find(Mid(~),Split(A1,",")) looks for those characters in each of the input elements. This either returns a numeric value or, if it's not found, an error.
  • If(IsError(Find(~)," ",Mid(~)) will return a space if the character wasn't found or the character if it was. (I wish there was a way to avoid duplicating the Mid(~) portion but I don't know of one.)
  • ArrayFormula(If(~)) is what makes the multi-cell references in Mid(~) and Find(~) work. It's also what makes a formula in one cell return values in multiple cells.
  • Transpose(ArrayFormula(~)) transpose the returned array because it starts off sideways.
Engineer Toast
sumber
2

Jelly, 12 bytes

ØD”-;¹⁶e?€Ʋ€

Try it online!

-2 thanks to Jonathan Allan reading a rule I didn't.

Note that the I/O format used in the TIO link is not the actual one, which is input as a list of string representations and output as a list of lines.

Erik the Outgolfer
sumber
1

Perl 6, 35 bytes

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

Try it online!

Output is a character matrix containing either regex matches or space characters.

nwellnhof
sumber
If 'input can be in any reasonable format' could be stdin, then presumably -pe would let you dispense with the initial .map, braces and swap $^a for $_
Phil H
@PhilH -p and -n somehow seem buggy, at least on TIO. For some reason $_ isn't passed to blocks. See example 1, example 2.
nwellnhof
1

Java 8, 53 bytes

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

My own challenge is easier than I thought it would be when I made it..

Input and output both as a java.util.stream.Stream<String>.

Explanation:

Try it online.

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
Kevin Cruijssen
sumber
1

C (gcc), 159 bytes

f(A,l,j,k,b)long*A,k;{char*s,S[99];for(j=~0;++j<l;puts(""))for(sprintf(S,"%ld",k=A[j]),putchar(k<0?45:32),k=47;++k<58;putchar(b?32:k))for(b=s=S;*s;b*=*s++-k);}

Try it online!

Jonathan Frech
sumber
1

R, 96 75 bytes

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

Try it online!

Thanks to Kevin Cruijssen for suggesting this regex approach!

Takes input from stdin as whitespace separated integers, and prints the ascii-art to stdout.

Giuseppe
sumber
I don't know R too well, so I'm sure it can be golfed further, but this different approach is 12 bytes shorter: function(N)for(i in N)cat(paste(gsub(paste("[^","]",sep=i)," ","-0123456789"),"\n")). (Input as string-array instead of integer-array.) Try it online.
Kevin Cruijssen
@KevinCruijssen ah, nice, yeah, I can golf that down as well.
Giuseppe
1

SOGL V0.12, 14 13 bytes

{ø,{²²⁴WI1ž}P

Try it Here!

Explanation:

{ø,{²²⁴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
dzaima
sumber
1

SNOBOL4 (CSNOBOL4), 85 bytes

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

Try it online!

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
Giuseppe
sumber
1

Pyth, 14 bytes

VQm*d}dNs+\-UT

Takes input as list of strings and outputs a list of strings for each line.
Try it here

Explanation

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.

sumber
1

Retina, 26 bytes

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

Try it online! Note: Trailing space. Explanation: % executes its child stage ~ once for each line of input. ~ first executes its child stage, which wraps the line in [^ and ]<CR><SP>, producing a program that replaces characters not in the line with spaces. The "-0123456789" specifies that the input to that program is the given string ($ substitutions are allowed but I don't need them).

Neil
sumber
1

Perl 5 -n, 30 bytes

Wouldn't work if - could appear anywhere else than in the first position

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

Try it online!

Ton Hospel
sumber
Wouldn't work if - could appear anywhere else than in the first position if that can be true then you are not answering this challenge, since they wouldn't be integers anymore. :P
Erik the Outgolfer
1

Red, 94 bytes

func[b][foreach a b[s: copy"           "foreach c a[s/(index? find"-0123456789"c): c]print s]]

Takes input as a block of strings

Try it online!

Galen Ivanov
sumber
1

CJam, 20 bytes

qS%{'-10,+s_@-SerN}/

Try it online!

Accepts input as space separated list of integers. Pretty much the same approach as @adnans answer.

Marcos
sumber
1

C (gcc), 95 94 bytes

c,d;f(l,n)char**l;{for(;n--;l++)for(c=0;c<12;)putchar(strchr(*l,d=c++?c+46:45)?d:d^58?32:10);}

Try it online!

Input in the form of a list of strings. Output to STDOUT.

gastropner
sumber
You can golf a byte by removing the c++, and changing d=c?c+47: to d=c++?c+46:.
Kevin Cruijssen
1

K4, 30 27 bytes

Solution:

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

Example:

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        "

Explanation:

Return "-0123..." or " " based on the input. Interpreted right-to-left. No competition for the APL answer :(

{?[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)
streetster
sumber
0

APL+WIN, 33 bytes

Prompts for screen input as a string

n←11⍴' '⋄n['-0123456789'⍳s]←s←⎕⋄n
Graham
sumber