Number
Jump to navigation
Jump to search
Introduction
Number is a joke language.
Command
Any number can be a command. This language is output only.
The output can only contain these characters: [Space]!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~, which is all the characters visible in the ASCII table.
The number means the number-th string in this order.
- If string a is shorter than string b, a is in front of b.
- If a's first char is the same as b's, compare the second char. If a's second char is smaller than b's, a is in front of b.
- If a's first n chars are the same as b's, compare the n+1-th char. If a's n+1-th char is smaller than b's, a is in front of b.
e.g. 1 - [Space], 95 - ~, 96 - [Space][Space]
There is a table for number from 1 to 866495 here.[1]
Output to program
The program under written in C++ can translate the output into the program.
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define N 20100
string n,final = "";
int ans = 0,i = 1,a,b;
struct bigNumber {
int len, x[N];
bigNumber() {
memset(x, 0, sizeof(x));
len = 1;
}
void write() {
for (int i = len; i > 0; --i) {
printf("%d", x[i]);
}
}
};
bigNumber fix(bigNumber a) {
for (int i = 1; i < a.len; ++i) {
if (a.x[i] < 0)
a.x[i] += 10, a.x[i + 1]--;
a.x[i + 1] += a.x[i] / 10;
a.x[i] %= 10;
}
while (a.x[a.len] >= 10) {
a.x[a.len + 1] += a.x[a.len] / 10;
a.x[a.len] %= 10;
a.len++;
}
while (!a.x[a.len] && a.len > 1)
a.len--;
return a;
}
inline bool operator < (bigNumber a, bigNumber b) {
if (a.len != b.len)
return a.len < b.len;
for (int i = a.len; i > 0; --i)
if (a.x[i] != b.x[i])
return a.x[i] < b.x[i];
return 0;
}
inline bool operator <= (bigNumber a, bigNumber b) {
if (a.len != b.len)
return a.len < b.len;
for (int i = a.len; i > 0; --i)
if (a.x[i] < b.x[i])
return 1;
else if (a.x[i] > b.x[i])
return 0;
return 1;
}
inline bigNumber operator + (bigNumber a, int b) {
a.x[1] += b;
return fix(a);
}
inline bigNumber operator + (bigNumber a, bigNumber b) {
bigNumber c;
c.len = max(a.len, b.len);
for (int i = 1; i <= c.len; ++i)
c.x[i] = a.x[i] + b.x[i];
return fix(c);
}
inline bigNumber operator - (bigNumber a, int b) {
a.x[1] -= b;
return fix(a);
}
inline bigNumber operator - (bigNumber a, bigNumber b) {
bigNumber c;
c.len = max(a.len, b.len) + 1;
for (int i = 1; i <= c.len; ++i)
c.x[i] = a.x[i] - b.x[i];
return fix(c);
}
inline bigNumber operator * (bigNumber a, int b) {
for (int i = 1; i <= a.len; ++i)
a.x[i] *= b;
return fix(a);
}
inline bigNumber operator * (bigNumber a, bigNumber b) {
bigNumber c;
c.len = a.len + b.len - 1;
for (int i = 1; i <= a.len; ++i)
for (int j = 1; j <= b.len; ++j)
c.x[i + j - 1] += a.x[i] * b.x[j];
return fix(c);
}
inline bigNumber operator / (bigNumber a, int b) {
int x = 0;
bigNumber c;
c.len = a.len;
for (int i = c.len; i > 0; --i) {
c.x[i] = (x * 10 + a.x[i]) / b;
x = (x * 10 + a.x[i]) % b;
}
return fix(c);
}
inline bigNumber operator / (bigNumber a, bigNumber b) {
bigNumber c ;
int s = 0 ;
while (a.len > b.len)
b = b * 10, s++ ;
while (s >= 0) {
c = c * 10 ;
while (b <= a)
c = c + 1, a = a - b;
b = b / 10, s-- ;
}
return fix(c) ;
}
inline bigNumber operator % (bigNumber a, int b) {
bigNumber c = a / b;
a = a - c * b;
return fix(a);
}
inline bigNumber operator % (bigNumber a, bigNumber b) {
int s = 0;
while (a.len > b.len)
b = b * 10, s++;
while (s >= 0) {
while (b <= a)
a = a - b;
b = b / 10, s--;
}
return fix(a);
}
bigNumber read(){
string S;
bigNumber a;
cin >> S;
for (int i = 1; i <= S.size(); ++i)
a = a * 10 + (int)(S[i - 1] - '0');
return a;
}
bigNumber s_to_i(string s)
{
bigNumber num;
for(int i = 0;s[i];++i)
num = num * 95 + (s[i] - ' ');
return num;
}
signed main(){
getline(cin, n);
s_to_i(n).write();
return 0;
}
Example
Hello, World!
22011474394810164197455861
Interpreter
C++
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define N 20100
string n,final = "";
int ans = 0,i = 1,a,b;
struct bigNumber {
int len, x[N];
bigNumber() {
memset(x, 0, sizeof(x));
len = 1;
}
void write() {
for (int i = len; i > 0; --i) {
printf("%d", x[i]);
}
}
};
bigNumber fix(bigNumber a) {
for (int i = 1; i < a.len; ++i) {
if (a.x[i] < 0)
a.x[i] += 10, a.x[i + 1]--;
a.x[i + 1] += a.x[i] / 10;
a.x[i] %= 10;
}
while (a.x[a.len] >= 10) {
a.x[a.len + 1] += a.x[a.len] / 10;
a.x[a.len] %= 10;
a.len++;
}
while (!a.x[a.len] && a.len > 1)
a.len--;
return a;
}
inline bool operator < (bigNumber a, bigNumber b) {
if (a.len != b.len)
return a.len < b.len;
for (int i = a.len; i > 0; --i)
if (a.x[i] != b.x[i])
return a.x[i] < b.x[i];
return 0;
}
inline bool operator <= (bigNumber a, bigNumber b) {
if (a.len != b.len)
return a.len < b.len;
for (int i = a.len; i > 0; --i)
if (a.x[i] < b.x[i])
return 1;
else if (a.x[i] > b.x[i])
return 0;
return 1;
}
inline bool operator == (bigNumber a, bigNumber b) {
return (a <= b && b <= a);
}
inline bool operator > (bigNumber a, bigNumber b) {
return b < a;
}
inline bool operator >= (bigNumber a, bigNumber b) {
return b <= a;
}
inline bigNumber operator + (bigNumber a, int b) {
a.x[1] += b;
return fix(a);
}
inline bigNumber operator + (bigNumber a, bigNumber b) {
bigNumber c;
c.len = max(a.len, b.len);
for (int i = 1; i <= c.len; ++i)
c.x[i] = a.x[i] + b.x[i];
return fix(c);
}
inline bigNumber operator - (bigNumber a, int b) {
a.x[1] -= b;
return fix(a);
}
inline bigNumber operator - (bigNumber a, bigNumber b) {
bigNumber c;
c.len = max(a.len, b.len) + 1;
for (int i = 1; i <= c.len; ++i)
c.x[i] = a.x[i] - b.x[i];
return fix(c);
}
inline bigNumber operator * (bigNumber a, int b) {
for (int i = 1; i <= a.len; ++i)
a.x[i] *= b;
return fix(a);
}
inline bigNumber operator * (bigNumber a, bigNumber b) {
bigNumber c;
c.len = a.len + b.len - 1;
for (int i = 1; i <= a.len; ++i)
for (int j = 1; j <= b.len; ++j)
c.x[i + j - 1] += a.x[i] * b.x[j];
return fix(c);
}
inline bigNumber operator / (bigNumber a, int b) {
int x = 0;
bigNumber c;
c.len = a.len;
for (int i = c.len; i > 0; --i) {
c.x[i] = (x * 10 + a.x[i]) / b;
x = (x * 10 + a.x[i]) % b;
}
return fix(c);
}
inline bigNumber operator / (bigNumber a, bigNumber b) {
bigNumber c ;
int s = 0 ;
while (a.len > b.len)
b = b * 10, s++ ;
while (s >= 0) {
c = c * 10 ;
while (b <= a)
c = c + 1, a = a - b;
b = b / 10, s-- ;
}
return fix(c) ;
}
inline bigNumber operator % (bigNumber a, int b) {
bigNumber c = a / b;
a = a - c * b;
return fix(a);
}
inline bigNumber operator % (bigNumber a, bigNumber b) {
int s = 0;
while (a.len > b.len)
b = b * 10, s++;
while (s >= 0) {
while (b <= a)
a = a - b;
b = b / 10, s--;
}
return fix(a);
}
bigNumber read(){
string S;
bigNumber a;
cin >> S;
for (int i = 1; i <= S.size(); ++i)
a = a * 10 + (int)(S[i - 1] - '0');
return a;
}
bigNumber s_to_i(string s)
{
bigNumber num;
for(int i = 0;s[i];++i)
num = num * 95 + (s[i] - ' ');
return num;
}
string i_to_s(bigNumber x)
{
const bigNumber zero;
string s = "";
if(x == zero) return " ";
while(zero < x) {
for(int i = 0; i < 95; i++)
if(zero + i == x % 95)
s += ' ' + i;
x = x / 95;
}
reverse(s.begin(),s.end());
return s;
}
bigNumber x;
signed main(){
x = read();
cout << i_to_s(x);
return 0;
}