7
\$\begingroup\$

If I were to pass your program an integer array as input, what format would you prefer?

I understand that this question is primarily opinion-based, but it is also incredibly useful information for those of us who want to write challenges that appeal to the largest number of people.

\$\endgroup\$
  • 5
    \$\begingroup\$ What the point. I won't feel bound by this when writing question. Picking a format can advantage some language and disadvantage others so the site should not have a uniform input style. Diversity is good. \$\endgroup\$ – dmckee Jun 20 '14 at 1:15
  • \$\begingroup\$ @dmckee I'm going to use the results of this question to format the inputs for my future challenges. I'm going to point - I said point, not force it down their throat - people here when they ask how to format their inputs for their future challenges. Anyone who wants to cater to popular opinion now has the ability to do so, but only because I asked this question. Anyone who wants to be creative or original can do that too. \$\endgroup\$ – Rainbolt Jun 20 '14 at 1:53
  • 3
    \$\begingroup\$ @dmckee I agree that the site should not have a uniform input style. I also welcome a list of input styles each with supporting reasons, so anyone who wants to try something different can use these answers for inspiration. I don't think your point invalidates this question. I expect it to be useful both for those aiming for mass appeal and for those aiming to be awkward... I think this site benefits from both. \$\endgroup\$ – trichoplax Jun 20 '14 at 11:06
  • \$\begingroup\$ Why not say you can use any format on this page that has 2 or more votes? \$\endgroup\$ – PyRulez Jun 23 '14 at 13:56
  • \$\begingroup\$ @dmckee It seems to me you have input specification for something like code golf in mind. For KotH's and code challenges that need a controller program which calls the submissions and feeds them input on STDIN, you'd want the pick the format that is most convenient for most people, because you don't want participants to waste time on parsing their input when they want to work on their algorithm. I find this post very useful for cases like that. (And I think this is the context in which Rusher asked the question, too.) \$\endgroup\$ – Martin Ender Jun 27 '14 at 18:40
  • \$\begingroup\$ @PyRulez, because that implies that you can't use one which doesn't, which is excessively restrictive. \$\endgroup\$ – Peter Taylor Jun 28 '14 at 13:48
  • \$\begingroup\$ @Peter Taylor I neither implied nor meant the converse. \$\endgroup\$ – PyRulez Jun 29 '14 at 18:10
12
\$\begingroup\$

Comma, Semicolon separated

1,2,3;4,5,6;7,8,9

The logical separation of comma-delimited lists (in the English language) is semicolons. And this format makes it easy (and roughly equal between languages) to parse, split on ; and ,. Additionally, it is easy to add more dimensions: simply add another delimiter.

\$\endgroup\$
  • 3
    \$\begingroup\$ Similar to .CSV, but the lack of a trailing semicolon makes it easier to split (no empty element at the end), and ; is one char shorter than \n \$\endgroup\$ – Justin Jun 19 '14 at 21:22
  • 1
    \$\begingroup\$ Not in Golfscript. In golfscript, n is two chars shorter than ';'. But then again, golfscript doesn't really need any benefits in this sense. \$\endgroup\$ – John Dvorak Jul 1 '14 at 19:17
11
\$\begingroup\$

.CSV

Terminated with a newline.

1,1,1\n2,2,2\n3,3,3\n

You can see the RFC at http://tools.ietf.org/html/rfc4180, but it looks barbaric. There is no "official" standard.

\$\endgroup\$
  • 2
    \$\begingroup\$ +1 This is the only format listed right now that has only two delimiter characters. \$\endgroup\$ – Geobits Jun 19 '14 at 18:19
  • \$\begingroup\$ @Geobits, the ones using {} or [] in combination with either , or whitespace can also be considered to have two delimiters. You just have to ignore {[. \$\endgroup\$ – Peter Taylor Jun 19 '14 at 18:30
  • 1
    \$\begingroup\$ @PeterTaylor Right, if you strip them out or ignore them, that works. If you want to use a simple split method, that requires more characters either way. I think CSV is the most language-agnostic format listed so far. Others probably are more readily parsed in certain languages, due to being an inbuilt/expected format. \$\endgroup\$ – Geobits Jun 19 '14 at 18:39
  • 1
    \$\begingroup\$ +1 for not privileging a particular language, or in general if parsing via some form of eval is forbidden. \$\endgroup\$ – Martin Ender Jun 19 '14 at 18:48
9
\$\begingroup\$

JSON

For example, this 3 by 3 array of integers:

[[1,2,3],[4,5,6],[7,8,9]]

See format at http://json.org/

\$\endgroup\$
  • 1
    \$\begingroup\$ +1 as a JavaScript user. ;) \$\endgroup\$ – Martin Ender Jun 19 '14 at 18:48
  • 1
    \$\begingroup\$ This can be harder to parse for some languages. For example, Befunge would have problems with this. \$\endgroup\$ – Justin Jun 19 '14 at 22:24
  • 2
    \$\begingroup\$ Some languages have default parsing for this. For example, in haskell, you use read, and in python you use eval. Single functions are nice. \$\endgroup\$ – PyRulez Jun 23 '14 at 13:55
  • \$\begingroup\$ @PyRulez Haskell won't like you for the "object" part of "javascript object notation", though. \$\endgroup\$ – John Dvorak Jul 1 '14 at 19:19
  • \$\begingroup\$ @JanDvorak Oh yeah. I think there are JSON parsing libraries any way though. Besides, on this site you usually don't have different types of objects on standard input together. \$\endgroup\$ – PyRulez Jul 1 '14 at 21:45
6
\$\begingroup\$

Newline-separated

1
2
3
4
5
6
7
8
9

This is the most generic format, and the easiest to parse in any programming language. Not all programming languages can easily split strings on a delimiter, but all of them can easily read a single line of input from stdin. The program just needs to read the number of lines it expects in a loop, and add each number to an array.

This format does not directly support nested arrays. If you want to represent a 2D matrix, add two more lines before the list with the number of rows followed by the number of columns, e.g. 3 and 3.

\$\endgroup\$
  • \$\begingroup\$ +1 for using nothing but newlines. I think that JSON and this answer are basically the two extremes of this spectrum. \$\endgroup\$ – Rainbolt Jun 27 '14 at 15:33
  • \$\begingroup\$ +1 This is the most natural format to read an array/list in sed and other similar languages. \$\endgroup\$ – seshoumara Sep 24 '16 at 9:02
4
\$\begingroup\$

Comma-Separated, Curly-Brace Wrapped

For example, this 3 by 3 array of integers:

{{1,1,1},{2,2,2},{3,3,3}}
\$\endgroup\$
  • \$\begingroup\$ +1 as a Mathematica user :) \$\endgroup\$ – Martin Ender Jun 19 '14 at 18:46
4
\$\begingroup\$

Having the answer dictate how an array is to be entered would be preferable since some have integrated parsers for certain formats while other don't.

Since it isn't here yet I'll add LISP lists and vectors (called proper arrays in other languages):

(1 2 3 4 5)  ; list
#(1 2 3 4 5) ; vector

You can easily nest them:

((1 2 3) (4 5 6))    ; list in list
#(#(1 2 3) #(4 5 6)) ; vector in vector (compatible)
#2A((1 2 3) (4 5 6)) ; 2 dimentional vector in CL
\$\endgroup\$
3
\$\begingroup\$

Space-separated, square-bracket wrapped

[[1 2 3][4 5 6][7 8 9]]

This is the format which GolfScript can evaluate most easily, so naturally GolfScript users will prefer it.

\$\endgroup\$
  • \$\begingroup\$ Per-language preferences aside, I think this is the most readable option. \$\endgroup\$ – Dennis Jun 21 '14 at 18:09
2
\$\begingroup\$

Space separated:

1 2 3 4 5 6 7 8 9

which would give the 3x3

1 4 7
2 5 8
3 6 9

(at least it will if you're a column-major programmer).

\$\endgroup\$
  • \$\begingroup\$ With this you also have to explicitly list dimensions, don't you? \$\endgroup\$ – Geobits Jun 19 '14 at 18:20
  • 1
    \$\begingroup\$ @Geobits: I would presume that you would know what size integer array is being fed in the first place. \$\endgroup\$ – Kyle Kanos Jun 19 '14 at 18:21
  • 1
    \$\begingroup\$ If it's something static like a tic-tac-toe board, you'd know. If it's "evaluate this MxN maze", you wouldn't. \$\endgroup\$ – Geobits Jun 19 '14 at 18:23
  • \$\begingroup\$ @Geobits: Easily taken care of using allocatable... \$\endgroup\$ – Kyle Kanos Jun 19 '14 at 18:23
  • 1
    \$\begingroup\$ I'm not sure how allocatable helps here. My point is that if I am given an MxN maze with 36 values in this format, I don't know up-front whether it's 36x1,18x2,12x3,9x4, or 6x6. Every other format listed makes it clear without having to explicitly give the dimensions. \$\endgroup\$ – Geobits Jun 19 '14 at 18:29
  • \$\begingroup\$ @Geobits: I suppose it would require knowing what the shape of the array should be \$\endgroup\$ – Kyle Kanos Jun 19 '14 at 18:32
  • 2
    \$\begingroup\$ The question says integer array, not array of arrays or integer matrix. This is the only valid answer I can see so far :) \$\endgroup\$ – aditsu Jun 24 '14 at 19:28
  • \$\begingroup\$ For two-dimensional arrays, newlines make pretty natural row delimiters, exactly as in your second example. Or, at least, that's what I initially assumed you were proposing. \$\endgroup\$ – Ilmari Karonen Jun 25 '14 at 23:22

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .