Des chiffres dans leurs couloirs


32

Contribution:

Une liste d'entiers

Sortie:

Mettez chaque chiffre (et le signe moins) dans sa propre file, dans l'ordre -0123456789, en ignorant les chiffres en double.

Exemple:

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

Sortie:

-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        

Règles du défi:

  • Tout chiffre dupliqué dans le numéro est ignoré.
  • Les E / S peuvent être dans n'importe quel format raisonnable. L'entrée peut être une liste / un tableau de chaînes ou un tableau de caractères. La sortie peut être une liste de chaînes, caractères, matrice de caractères, etc.
  • Les espaces de fin sont facultatifs.
  • Toute quantité de nouvelles lignes de début ou de fin est facultative (mais pas entre les lignes).
  • L'entrée contiendra toujours au moins un entier
  • Vous devrez supporter une gamme entière d'au moins -2,147,483,648bien 2,147,483,647(32 bits).
  • La liste d'entrée ne contiendra jamais -0, 00(ou plus de deux zéros), ou des entiers avec des zéros non significatifs (c. -à- 012).
  • Si votre langue utilise un symbole différent pour les nombres négatifs (comme une majuscule ¯), vous êtes également autorisé à l'utiliser à la place, tant qu'il est cohérent.
  • Vous êtes autorisé à avoir un délimiteur d'espace entre les chiffres (donc une ligne sans 5 ou 8 peut être à la - 0 1 2 3 4 6 7 9place de -01234 67 9), tant qu'elle est cohérente (et donc il devrait également y avoir un espace entre -et 0).

Règles générales:

  • C'est du , donc la réponse la plus courte en octets est gagnante.
    Ne laissez pas les langues de golf de code vous décourager de publier des réponses avec des langues autres que le golf de code. Essayez de trouver une réponse aussi courte que possible pour «n'importe quel» langage de programmation.
  • Des règles standard s'appliquent à votre réponse, vous êtes donc autorisé à utiliser STDIN / STDOUT, fonctions / méthode avec les paramètres appropriés et des programmes complets de type retour. Ton appel.
  • Les failles par défaut sont interdites.
  • Si possible, veuillez ajouter un lien avec un test pour votre code.
  • Veuillez également ajouter une explication si nécessaire.

Cas de test:

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

Les espaces entre les chiffres seraient-ils autorisés dans la sortie?
Shaggy

Pouvons-nous utiliser le signe moins supérieur ¯au lieu de -?
Uriel

Les chiffres manquants seraient toujours remplacés par des espaces donc, dans votre exemple, il y aurait 3 espaces entre 4 et 6 et 7 et 9: "-0 1 2 3 4 <space> 6 7 <space> 9"(Plusieurs espaces sont réduits dans les commentaires, pour une raison quelconque)
Shaggy

1
J'espérais vous faufiler! : D Bien repéré!
Shaggy

Réponses:


4

Stax , 8 octets

║V≡u╝─é╢

Exécuter et déboguer

Il faut un numéro par ligne sur l'entrée standard. Il fonctionne en trouvant l'index cible de chaque caractère et en l'affectant dans cet index du résultat. Si l'index est hors limites, le tableau est développé avec des zéros jusqu'à ce qu'il tienne. Pendant la sortie, 0devient un espace. Les autres sont des codes de caractères.

Déballé, non golfé et commenté, voici à quoi il ressemble.

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

Exécuter celui-ci


Comment doit-on entrer une liste de longueur un? (Si ce n'est que la valeur ou la valeur et une nouvelle ligne, cela ne fonctionne pas.)
Jonathan Allan

1
Oh oui, bon point. Une autre forme d'entrée qui fonctionne également pour les valeurs uniques est ["7"]. Ce format peut également gérer plusieurs valeurs telles que ["34", "43"].
récursif

6

05AB1E , 13 octets

Code:

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

Utilise le codage 05AB1E . Essayez-le en ligne!

Explication:

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
Agréable! La route de remplacement était plus courte que la route d'insertion que je vois :)
Emigna

2
@Emigna L'insertion-route est également une approche très intéressante. En fait, je pense que vous pouvez économiser 4 octets avec vðTúyvyÐd+ǝ},;).
Adnan

1
Brillant! Je ne savais pas que ǝça fonctionnerait comme ça -0. Mais maintenant que j'en pense, c'est en fait un nombre et non une chaîne comme je l'ai d'abord lu comme: P
Emigna

Ooooof ... J'étais à 23 octets. Le 05AB1E (jeu de mots sur l'humanité).
Urne Magic Octopus


4

JavaScript, 59 58 octets

Entrée et sortie sous forme de tableau de chaînes.

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

L'essayer

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>


Original

Prend l'entrée comme un tableau de chaînes et génère un tableau de tableaux de caractères

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


1
une telle solution élégante, je l'aime vraiment.
Brian H.


3

05AB1E , 17 13 octets

4 octets enregistrés grâce à Adnan

vðTúyvyÐd+ǝ},

Essayez-le en ligne!

Explication

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

Rubis , 42 octets

Lambda anonyme traitant le tableau des nombres:

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

Essayez-le en ligne!

Alternativement, un programme complet complètement semblable à Perl est beaucoup plus court. Je dirais que les -plcommutateurs sont assez drôles dans ce contexte:

Ruby -pl , 29 octets

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

Essayez-le en ligne!

Enfin, ce qui suit est possible s'il est acceptable que les chaînes de sortie soient citées:

Rubis -n , 27 octets

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

Essayez-le en ligne!


3

JavaScript (Node.js) , 60 octets

  • Merci à @Andrew Taylor d'avoir réduit la jointure (8 caractères)
  • Merci à @Yair Rand pour X.match (8 caractères)
a=>a.map(X=>"-0123456789".replace(/./g,x=>X.match(x)?x:" "))

Essayez-le en ligne!


Oh, cette joinastuce est charmante - mais la question se lit comme un tableau de chaînes est une sortie OK, alors peut-être pouvez-vous raser 8 octets en le supprimant?
Andrew Taylor

Je suis sûr que vous pouvez en sauver un autre en remplaçant (X+"").includes(x)parRegExp(x).test(X)
Andrew Taylor

(X+"").match(x)serait encore plus court. La question permet également à l'entrée d'être un tableau de chaînes, ce qui pourrait même être le cas X.match(x).
Yair Rand

2

Japt , 16 octets

Entrée et sortie sous forme de tableau de chaînes.

£Ao ¬i- ®iS gXøZ

L'essayer


Explication

£                    :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

Python 3 , 77 64 octets

-12 octets grâce à @Rod

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

Essayez-le en ligne!

Ma première bonne tentative de golf en Python. Des conseils bienvenus!

Renvoie un tableau 2D de caractères.


1
Vous pouvez utiliser à la '-0123456789'place range(10)et déposer le premier bloc et échanger str(z)avec z, vous pouvez également passer à python2 et utiliser à la `y`place str(y)( ``est + - équivalent à repr)
Rod

Espace superflu dans in "-.
Jonathan Frech


2

Haskell , 47 octets

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

Essayez-le en ligne!

Permet maxd'insérer un espace où aucun élément n'existe, car un espace est plus petit que n'importe quel chiffre ou signe moins.

Si un nombre impie d'espaces de fin est OK, deux octets peuvent être enregistrés:

45 octets

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

Essayez-le en ligne!


2

MATL , 13 octets

"45KY2ht@gm*c

L'entrée est un tableau de cellules de chaînes. Essayez-le en ligne!Ou vérifiez tous les cas de test .

Explication

         % 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 octets

-5 octets grâce à FrownyFrog!

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

Essayez-le en ligne!

Solution originale:

J , 32 octets

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

Explication:

@": convertir en caractères et

}11$' '"0 changer le contenu d'un tableau de 11 espaces en ces caractères

'_0123456789'i.[ aux endroits indiqués par les indices des caractères de cette liste

Essayez-le en ligne!


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

@FrownyFrog Belle solution, merci!
Galen Ivanov

2

Google Sheets , 124 octets

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

L'entrée est une liste séparée par des virgules dans la cellule A1. La sortie se situe dans la plage B1:L??se trouvent cependant de nombreuses entrées. (Vous pouvez placer la formule où vous le souhaitez, je viens de choisir B1pour plus de commodité.) Notez que Sheets ajoutera automatiquement quatre parenthèses fermantes à la fin de la formule, nous économisant ces quatre octets.

Screenshot

Un autre cas de test et un autre cas de test

Explication:

  • Mid("-0123456789",Row($1:$11),1) choisit tour à tour chacun des 11 personnages.
  • Find(Mid(~),Split(A1,","))recherche ces caractères dans chacun des éléments d'entrée. Cela retourne une valeur numérique ou, s'il n'est pas trouvé, une erreur.
  • If(IsError(Find(~)," ",Mid(~))retournera un espace si le personnage n'a pas été trouvé ou le personnage s'il l'a été. (Je souhaite qu'il y ait un moyen d'éviter de dupliquer leMid(~) partie mais je n'en connais pas.)
  • ArrayFormula(If(~)) est ce qui rend les références multicellulaires dans Mid(~) et Find(~)fonctionnent. C'est également ce qui fait qu'une formule dans une cellule renvoie des valeurs dans plusieurs cellules.
  • Transpose(ArrayFormula(~)) transposer le tableau retourné car il démarre latéralement.

2

Gelée , 12 octets

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

Essayez-le en ligne!

-2 merci à Jonathan Allan lisant une règle que je n'ai pas.

Notez que le format d'E / S utilisé dans la liaison TIO n'est pas le format réel, qui est entré sous forme de liste de représentations de chaînes et sorti sous forme de liste de lignes.


1

Perl 6 , 35 octets

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

Essayez-le en ligne!

La sortie est une matrice de caractères contenant soit des correspondances d'expression régulière, soit des caractères d'espacement.


Si `` l'entrée peut être dans n'importe quel format raisonnable '' pourrait être stdin, alors probablement -pevous laisseriez-vous dispenser du .map initial, des accolades et de l'échange $^apour$_
Phil H

@PhilH -pet -nsemblent en quelque sorte bogués , au moins sur TIO. Pour une raison quelconque, il $_n'est pas transmis aux blocs. Voir l' exemple 1 , l' exemple 2 .
nwellnhof

1

Java 8, 53 octets

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

Mon propre défi est plus facile que je ne le pensais quand je le ferais ..

Entrée et sortie à la fois comme un java.util.stream.Stream<String>.

Explication:

Essayez-le en ligne.

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 octets

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

Essayez-le en ligne!

Merci à Kevin Cruijssen d'avoir proposé cette approche regex!

Prend l'entrée de stdin sous forme d'entiers séparés par des espaces et imprime l'ascii-art sur stdout.


Je ne sais pas trop bien R, donc je suis sûr qu'il peut être plus joué au golf, mais cette approche différente est de 12 octets plus courte: function(N)for(i in N)cat(paste(gsub(paste("[^","]",sep=i)," ","-0123456789"),"\n")). (Entrez sous forme de tableau de chaînes au lieu de tableau d'entiers.) Essayez-le en ligne.
Kevin Cruijssen

@KevinCruijssen ah, bien, oui, je peux aussi jouer au golf.
Giuseppe

1

SOGL V0.12 , 14 13 octets

{ø,{²²⁴WI1ž}P

Essayez-le ici!

Explication:

{ø,{²²⁴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 octets

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

Essayez-le en ligne!

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 octets

VQm*d}dNs+\-UT

Prend l'entrée sous forme de liste de chaînes et génère une liste de chaînes pour chaque ligne.
Essayez-le ici

Explication

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

Rétine , 26 octets

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

Essayez-le en ligne! Remarque: Espace de fin. Explication: %exécute son étape enfant ~une fois pour chaque ligne d'entrée. ~exécute d'abord sa phase enfant, qui encapsule la ligne [^et ]<CR><SP>, produisant un programme qui remplace les caractères qui ne sont pas dans la ligne par des espaces. Le "-0123456789"spécifie que l'entrée de ce programme est la chaîne donnée (les $substitutions sont autorisées mais je n'en ai pas besoin).


1

Perl 5 -n , 30 octets

Ne fonctionnerait pas si -pouvait apparaître ailleurs que dans la première position

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

Essayez-le en ligne!


Ne fonctionnerait pas si -pourrait apparaître ailleurs que dans la première position si cela peut être vrai alors vous ne répondez pas à ce défi, car ils ne seraient plus des entiers. : P
Erik the Outgolfer


1

CJam , 20 octets

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

Essayez-le en ligne!

Accepte l'entrée comme une liste d'entiers séparés par des espaces. À peu près la même approche que la réponse de @adnans.


1

C (gcc) , 95 94 octets

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);}

Essayez-le en ligne!

Saisie sous forme de liste de chaînes. Sortie vers STDOUT.


Vous pouvez jouer au golf sur un octet en supprimant le c++et en changeant d=c?c+47:pour d=c++?c+46:.
Kevin Cruijssen

1

K4 , 30 27 octets

Solution:

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

Exemple:

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        "

Explication:

Retournez "-0123 ..." ou "" en fonction de l'entrée. Interprété de droite à gauche. Pas de concurrence pour la réponse 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 octets

Invite à saisir l'écran sous forme de chaîne

n←11⍴' '⋄n['-0123456789'⍳s]←s←⎕⋄n
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.