Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

/prog/ Challenge 9001

Name: Anonymous 2011-05-01 19:51

The correct title of this article is /prog/ Challenge 9001. It appears incorrectly here because of technical restrictions.

The task:

Print numbers from 1 to 1000 without using any loop or conditional statements. Don't just write the printf() or cout statement 1000 times.

inb4 lipthfags and dead dogs using some obscure functionality of their obscure languages.

Name: Anonymous 2011-05-01 20:00

So, the instructions are we can't use loops or some such.  Does this also apply to operations which conceal looping activity?

Name: Anonymous 2011-05-01 20:02

I'll leave it up to your own judgement. But more marks are given for completely loopless and conditionless solutions.

Name: Anonymous 2011-05-01 20:05

print "\n".join(map(str,range(1,1001)))

I bet the Perl version is even shorter.

Name: Anonymous 2011-05-01 20:11


var Progs: array[boolean] of procedure(I: longint);

procedure h(i: longint);
begin
   writeln(i);
   Progs[(i+1) > 1000](i+1);
end;

procedure a(i: longint);
begin
end;

begin
   progs[false] := @h;
   progs[true] := @a;

   h(1);
end.

Name: Anonymous 2011-05-01 20:21

Looping means goto, which means the solution is to unroll the loop.
(macrolet ((code () `(progn ,@(loop for i from 1 to 1000 collect `(print ,i))))) (code))

What this code does is generate the code: (progn (print 1) ... (print 1000))
Looping isn't used in any of the code that runs, hence it should fulfill your requirement (it is however used in the generation code. There is no way to avoid this without writing it by hand, and only an idiot would do that. I could of course, post the macroexpansion without posting the generation code, but it turns out it's too long to fit in a post).

Name: Anonymous 2011-05-01 20:22

>>5
Any jump/call can be used to emulate a loop, which is what you're doing.

Name: Anonymous 2011-05-01 20:35

>>7
what I am doing is your mom

Name: Anonymous 2011-05-01 20:46


#include <iostream>

template<int I>
void print()
{
    std::cout << I << std::endl;
    print<I+1>();
}

template<>
void print<1000>()
{
    std::cout << 1000;
}

int main()
{
    print<1>();
    std::cin.get();
}

Name: Anonymous 2011-05-01 20:48


[1..1000] |> List.iter (fun n -> System.Console.WriteLine(n))

Name: Anonymous 2011-05-01 20:53

>>1
That's trivial in functional languages, just as >>10 has demonstrated.

Name: Anonymous 2011-05-01 21:11

import java.io.*;
public class Loopless {
   public static int x;
   public static int[] ary = new int[1000];
   public static void main(String[] args) {
      counting(1);
   }
  
   public static void counting(int i) {
      System.out.println(""+i);
      try {
         x = ary[i];
      }
      catch(Exception e) {
         System.exit(0);
      }
      counting(++i);
   }
}

Name: Anonymous 2011-05-01 21:12

>>9
Awesome.

>>10
[1..1000] is essentially a for-loop construct

Name: Anonymous 2011-05-01 21:19

>>12
The try...catch is just for output aesthetics.

Name: Anonymous 2011-05-01 21:27

>>13
Only if you consider map to be equivalent to for-loop.

Name: Anonymous 2011-05-01 21:31

>>5,10,12 Make use of jumps/calls which are themselves equivalent to loops.
>>6,9 Generate code which prints it (unrolling the loop).

As OP disallowed loops (I assume in runtime code, it shouldn't matter what you use in generation code), only >>6,9 are valid answers.
If you insist on disallowing loops in generating code, the only way to solve it is to only include the output of the generated code, but that is disallowed in the requirements.
This means that the challenge is only solvable by macros (as in Lisp, >>6), source code generation (any language), templates (as in SEPPLES, >>9) if some form of loops (control-flow) are allowed in the code generator.
If control-flow is not allowed anywhere, the problem is not solvable as per requirements the OP asked.

OP also sucks for being a bastard from the imageboards responsible for spamming our board and trolling (noko (not saging and making threads proclaiming his ignorance), over 9000 meme, corruption of the word lisp, spamming, insulting non-terrible dogs and other infractions).

Name: Anonymous 2011-05-01 21:52

>>16
lulz fuck you fag

Name: Anonymous 2011-05-01 21:59

>>16
I could never wrap my head around C templates.  How is >>6 not just another example of recursion, albeit fancy?

Name: Anonymous 2011-05-01 22:03

C templates

*scratches head*

Name: Anonymous 2011-05-01 22:06

>>18
Where is the recursion? All it does is generate the code (progn (print 1) ... (print 1000)) which itself features no recursion. A smart compiler may be able to unroll a loop like that.

Name: Anonymous 2011-05-01 22:08

>>20
No, sorry, that's me thinking one number and typing another.  I meant to refer to >>9.

Name: Anonymous 2011-05-01 22:11

So far >>9 is the only one that doesn't make use of run-time loops or compile-time loops.

Name: Anonymous 2011-05-01 22:14

>>21
It uses compile-time recursion. Recursion is allowed according to the OP's rules, though.

It works by unwinding the code into this:


print_1();
print_2();
print_3();
...
print_999();
print_1000();



And the compiler likely inlines those functions so in reality it would just be unwound into this:


std::cout << 1 << std::endl;
std::cout << 2 << std::endl;
std::cout << 3 << std::endl;
...
std::cout << 999 << std::endl;
std::cout << 1000 << std::endl;

Name: Anonymous 2011-05-01 22:15


int lol(int num)
{
    num && lol(num-1) && printf("%d\n", num);
    return num;
}

int main()
{
    printf("1\n");
    lol(1000);
    return 0;
}

Name: Anonymous 2011-05-01 22:21

>>24

num && lol(num-1) && printf("%d\n", num);
without using any loop or conditional statements

Name: Anonymous 2011-05-01 22:23

printf("1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n141\n142\n143\n144\n145\n146\n147\n148\n149\n150\n151\n152\n153\n154\n155\n156\n157\n158\n159\n160\n161\n162\n163\n164\n165\n166\n167\n168\n169\n170\n171\n172\n173\n174\n175\n176\n177\n178\n179\n180\n181\n182\n183\n184\n185\n186\n187\n188\n189\n190\n191\n192\n193\n194\n195\n196\n197\n198\n199\n200\n201\n202\n203\n204\n205\n206\n207\n208\n209\n210\n211\n212\n213\n214\n215\n216\n217\n218\n219\n220\n221\n222\n223\n224\n225\n226\n227\n228\n229\n230\n231\n232\n233\n234\n235\n236\n237\n238\n239\n240\n241\n242\n243\n244\n245\n246\n247\n248\n249\n250\n251\n252\n253\n254\n255\n256\n257\n258\n259\n260\n261\n262\n263\n264\n265\n266\n267\n268\n269\n270\n271\n272\n273\n274\n275\n276\n277\n278\n279\n280\n281\n282\n283\n284\n285\n286\n287\n288\n289\n290\n291\n292\n293\n294\n295\n296\n297\n298\n299\n300\n301\n302\n303\n304\n305\n306\n307\n308\n309\n310\n311\n312\n313\n314\n315\n316\n317\n318\n319\n320\n321\n322\n323\n324\n325\n326\n327\n328\n329\n330\n331\n332\n333\n334\n335\n336\n337\n338\n339\n340\n341\n342\n343\n344\n345\n346\n347\n348\n349\n350\n351\n352\n353\n354\n355\n356\n357\n358\n359\n360\n361\n362\n363\n364\n365\n366\n367\n368\n369\n370\n371\n372\n373\n374\n375\n376\n377\n378\n379\n380\n381\n382\n383\n384\n385\n386\n387\n388\n389\n390\n391\n392\n393\n394\n395\n396\n397\n398\n399\n400\n401\n402\n403\n404\n405\n406\n407\n408\n409\n410\n411\n412\n413\n414\n415\n416\n417\n418\n419\n420\n421\n422\n423\n424\n425\n426\n427\n428\n429\n430\n431\n432\n433\n434\n435\n436\n437\n438\n439\n440\n441\n442\n443\n444\n445\n446\n447\n448\n449\n450\n451\n452\n453\n454\n455\n456\n457\n458\n459\n460\n461\n462\n463\n464\n465\n466\n467\n468\n469\n470\n471\n472\n473\n474\n475\n476\n477\n478\n479\n480\n481\n482\n483\n484\n485\n486\n487\n488\n489\n490\n491\n492\n493\n494\n495\n496\n497\n498\n499\n500\n501\n502\n503\n504\n505\n506\n507\n508\n509\n510\n511\n512\n513\n514\n515\n516\n517\n518\n519\n520\n521\n522\n523\n524\n525\n526\n527\n528\n529\n530\n531\n532\n533\n534\n535\n536\n537\n538\n539\n540\n541\n542\n543\n544\n545\n546\n547\n548\n549\n550\n551\n552\n553\n554\n555\n556\n557\n558\n559\n560\n561\n562\n563\n564\n565\n566\n567\n568\n569\n570\n571\n572\n573\n574\n575\n576\n577\n578\n579\n580\n581\n582\n583\n584\n585\n586\n587\n588\n589\n590\n591\n592\n593\n594\n595\n596\n597\n598\n599\n600\n601\n602\n603\n604\n605\n606\n607\n608\n609\n610\n611\n612\n613\n614\n615\n616\n617\n618\n619\n620\n621\n622\n623\n624\n625\n626\n627\n628\n629\n630\n631\n632\n633\n634\n635\n636\n637\n638\n639\n640\n641\n642\n643\n644\n645\n646\n647\n648\n649\n650\n651\n652\n653\n654\n655\n656\n657\n658\n659\n660\n661\n662\n663\n664\n665\n666\n667\n668\n669\n670\n671\n672\n673\n674\n675\n676\n677\n678\n679\n680\n681\n682\n683\n684\n685\n686\n687\n688\n689\n690\n691\n692\n693\n694\n695\n696\n697\n698\n699\n700\n701\n702\n703\n704\n705\n706\n707\n708\n709\n710\n711\n712\n713\n714\n715\n716\n717\n718\n719\n720\n721\n722\n723\n724\n725\n726\n727\n728\n729\n730\n731\n732\n733\n734\n735\n736\n737\n738\n739\n740\n741\n742\n743\n744\n745\n746\n747\n748\n749\n750\n751\n752\n753\n754\n755\n756\n757\n758\n759\n760\n761\n762\n763\n764\n765\n766\n767\n768\n769\n770\n771\n772\n773\n774\n775\n776\n777\n778\n779\n780\n781\n782\n783\n784\n785\n786\n787\n788\n789\n790\n791\n792\n793\n794\n795\n796\n797\n798\n799\n800\n801\n802\n803\n804\n805\n806\n807\n808\n809\n810\n811\n812\n813\n814\n815\n816\n817\n818\n819\n820\n821\n822\n823\n824\n825\n826\n827\n828\n829\n830\n831\n832\n833\n834\n835\n836\n837\n838\n839\n840\n841\n842\n843\n844\n845\n846\n847\n848\n849\n850\n851\n852\n853\n854\n855\n856\n857\n858\n859\n860\n861\n862\n863\n864\n865\n866\n867\n868\n869\n870\n871\n872\n873\n874\n875\n876\n877\n878\n879\n880\n881\n882\n883\n884\n885\n886\n887\n888\n889\n890\n891\n892\n893\n894\n895\n896\n897\n898\n899\n900\n901\n902\n903\n904\n905\n906\n907\n908\n909\n910\n911\n912\n913\n914\n915\n916\n917\n918\n919\n920\n921\n922\n923\n924\n925\n926\n927\n928\n929\n930\n931\n932\n933\n934\n935\n936\n937\n938\n939\n940\n941\n942\n943\n944\n945\n946\n947\n948\n949\n950\n951\n952\n953\n954\n955\n956\n957\n958\n959\n960\n961\n962\n963\n964\n965\n966\n967\n968\n969\n970\n971\n972\n973\n974\n975\n976\n977\n978\n979\n980\n981\n982\n983\n984\n985\n986\n987\n988\n989\n990\n991\n992\n993\n994\n995\n996\n997\n998\n999\n1000\n");

Name: Anonymous 2011-05-01 22:25

>>26

This is in fact fine, according to the OP. It only uses printf() once.

Name: Anonymous 2011-05-01 22:25

>>25
That's not a conditional or loop statement (for, while, if). It's an expression, not a statement.

Name: Anonymous 2011-05-01 22:30

>>28
There would be a conditional in run-time, though. It needs to check whether num is non-zero.

Name: Anonymous 2011-05-01 22:36

class abc
{
    public:
    abc()
    {
        static int n = 1;
        std::cout << n++ << '\n';
    }
};

int main()
{
    delete new abc[1000];
    return 0;
}

Name: Anonymous 2011-05-01 22:42

>>23
Actually, looking at the disassembly it doesn't inline them. Huh.

Name: Anonymous 2011-05-01 22:46

>>30

u mena
delete[] new abc[1000];

Name: Anonymous 2011-05-01 22:54

>>32
Thanks, that's what I mena.

Name: Anonymous 2011-05-01 23:18

main = mapM_ print [1..1000]

>>13
Nope.

Name: Anonymous 2011-05-01 23:24

>>34
Actually, here you go:

main = mapM_ print $ take 10 xs
  where xs = 1 : map (+1) xs

Name: Anonymous 2011-05-01 23:25

>>35
1000*

Name: Anonymous 2011-05-02 0:10

In other news: Osama is dead.

Name: Anonymous 2011-05-02 0:13

>>37
Who gives a shit, there are more important things to worry about, like writing the best program to suit OP's restrictions.

Name: Anonymous 2011-05-02 0:29

>>37
VALID PERL CODE

Name: Anonymous 2011-05-02 2:46

system("/usr/bin/seq 1000");

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List