A: 95 байт
class A{public static int i=2;static void Main(string[]args){System.Console.Write(args[0]);}}//
Спробуйте в Інтернеті!
B: 438 + 18 байт
class A{public static int i=0;}
class B{static void Main(string[]args){if(A.i<1){System.Console.Write(args[0]);return;}var a=@"class A{{public static int i=2;static void Main(string[]args){{System.Console.Write(args[0]);}}}}//class A{{public static int i=0;}}
class B{{static void Main(string[]args){{if(A.i<1){{System.Console.Write(args[0]);return;}}var a=@{0}{1}{0};System.Console.Write(a,'{0}',a);}}}}";System.Console.Write(a,'"',a);}}
Спробуйте в Інтернеті!
A + B: 533 + 18 байт
class A{public static int i=2;static void Main(string[]args){System.Console.Write(args[0]);}}//class A{public static int i=0;}
class B{static void Main(string[]args){if(A.i<1){System.Console.Write(args[0]);return;}var a=@"class A{{public static int i=2;static void Main(string[]args){{System.Console.Write(args[0]);}}}}//class A{{public static int i=0;}}
class B{{static void Main(string[]args){{if(A.i<1){{System.Console.Write(args[0]);return;}}var a=@{0}{1}{0};System.Console.Write(a,'{0}',a);}}}}";System.Console.Write(a,'"',a);}}
Спробуйте в Інтернеті!
A і B приймають дані як аргумент командного рядка. A + B ігнорує будь-які дані. 18 байт на B і A + B додано для /p:StartupObject=B
опції, що надсилається до MSBuild. Це лише суворо необхідно на A + B, але здавалося, що це обман, щоб його також не було у B. Таким чином, прапорці компілятора для A + B є прапорами компілятора для A (none) плюс прапорами компілятора для B.
Пояснення
Програма А є простою. Клас A містить (невикористану) статичну змінну, i
ініціалізовану до 2
та друкує перший аргумент під час запуску. The//
В кінці має важливе значення для коду A + B, але не робить нічого в собі.
Програма B дивна в ізоляції, але по суті однакова. Він створює клас A, що містить статичну змінну, i
ініціалізовану до 0
, а потім запускає основний метод класу B, який робить те саме, що і програма A, оскількиA.i
менше 1, і повертається перед будь-яким із дивних речей. Нові рядки тут не потрібні, але вони важливі для A + B.
У поєднанні //
програма "Програма А" коментує декларацію класу А з програми "Б", але через новий рядок клас "В" є нормальним, що дозволяє A.i
посилатися на 2
значення з програми А натомість. Прапор компілятора змушує програму запускати B.Main (), оскільки також існує A.Main (). Результат полягає в тому, що програма A + B не виводить своїх аргументів, а замість цього переходить до наступного сегмента B.Main (), який в основному є лише стандартним C # quine .