Lua、147バイト
これ以上ゴルフをすることはできないと思うし、それをするための多くの方法を試してきたが、ここで最短になる。非推奨の関数を含む古いコンパイラを使用しても、table.foreach(table,function)
一部のバイトは削られません。
このプログラムは引数として文字列を取り、スペースで区切られたテーブル値の連結を出力します。
t={}for _,i in pairs({8,10,16})do x=tonumber(arg[1],i)x=x and x or 0 t[#t+1]=127>x and 19<x and string.char(x)or nil end print(table.concat(t," "))
非ゴルフと説明
t={} -- Initalise the array containing the chars to print
for _,i in pairs({8,10,16}) -- Iterate over the array {8,10,16}
do
x=tonumber(arg[1],i) -- convert the input in base i to a number in base 10
x=x and x or 0 -- if the input wasn't a number, x is nil
-- use a ternary operator to set x in this case
t[#t+1]=127>x and 19<x -- if x is the bytecode of a printable character
and string.char(x)or nil-- insert this character into t
end
print(table.concat(t," ")) -- concatenate the values in t with " " as separator
-- and print it
変数セットがあるのにゴルフ用コードでは使用されない理由(_
forループ内の変数)をさまよう場合、その理由は次のとおりです。
forスタイルのいずれかで、Luaの配列を反復処理する2つの方法があります。
for i=1,#table do --[[code here, use table[i] ]] end
またはforeachスタイル:
for key,value do pairs(table) do --[[code here]] end
テーブルに含まれる値{8,10,16}
は、繰り返し処理する必要があるさまざまなベースであるため、必要でした。ただし、複数の戻り値を持つ関数では、実際に返すものを選択することはできません。それらは順序に従います。変数をvalue
設定するには、の値key
もキャッチする必要があり_
ます。これをダミーと呼びます。