ইতিবাচক পূর্ণসংখ্যার বিপরীত সর্বাধিক সৃজনশীল উপায় [বন্ধ]


40

স্বাক্ষরবিহীন পূর্ণসংখ্যা হিসাবে একটি ইনপুট সরবরাহ করেছেন:

13457

আপনার ফাংশন / সাবরুটিন ফিরে আসা উচিত:

75431

যেহেতু এটি জনপ্রিয়তার প্রতিযোগিতা, তাই সৃজনশীল হন। সৃজনশীল সমাধান প্রদত্ত কাজটি সম্পাদন করতে অস্বাভাবিক বা চতুর কৌশলগুলি ব্যবহার করে।

সীমাবদ্ধতাসমূহ:

  • আপনি অ্যারে ব্যবহার করতে পারবেন না।
  • আপনি স্ট্রিং ব্যবহার করতে পারবেন না।
  • কোনও আরটিএল ওভাররাইড নেই ( &#8238)

সৃজনশীল পাটিগণিত ব্যবহারের জন্য ব্রাউন পয়েন্টগুলি।

যেহেতু এটি একটি জনপ্রিয়তা প্রতিযোগিতা, তাই আমি আপনাকে %নিজের কোডে মডুলো ( ) অপারেটরটি ব্যবহার না করার পরামর্শ দিই ।

শীর্ষস্থানীয় জিরো সম্পর্কে:

যদি ইনপুটটি হয়:

12340

তারপরে আউটপুট:

4321

গ্রহণযোগ্য হবে।



3
@ মাইক্রোবিয়ান না, সে ছিল কোড-গল্ফ। এটি জনপ্রিয়তা-প্রতিযোগিতা।
ভিক্টর স্টাফুসা

2
আপনি যদি এখনই নিয়ম পরিবর্তন করতে শুরু করেন তবে লোকেদের টিক দেওয়া হবে। আমার কাছে এটি ঠিকঠাক বলে মনে হচ্ছে, কেবল আপনার পরবর্তী চ্যালেঞ্জটি প্রথমে স্যান্ডবক্সের মাধ্যমে চালান: meta.codegolf.stackexchange.com/questions/1117/…
হোস্ট 250

2
1230ইনপুট যদি হয়? আমাদের কি আউটপুট দেওয়ার অনুমতি দেওয়া হচ্ছে 321? (অন্যথায়, স্ট্রিংগুলি প্রয়োজনীয়)।
জাস্টিন

2
আমি এটিকে অফ-টপিক হিসাবে বন্ধ করতে ভোট দিচ্ছি কারণ এটির একটি উদ্দেশ্য বৈধতার মানদণ্ড নেই - "সৃজনশীল হোন" বিষয়গত।
ঐ মেগো

উত্তর:


49

গণিত, কোনও মডুলো নেই!

n = 14627;
length = Ceiling[Log[10, n]];
img = Rasterize[n, RasterSize -> 400, ImageSize -> 400];
box = Rasterize[n, "BoundingBox", RasterSize -> 400, ImageSize -> 400];
width = box[[1]]; height = box[[3]];
ToExpression[
 TextRecognize[
  ImageAssemble[
   ImageTake[img, {1, height}, #] & /@ 
    NestList[# - width/length &, {width - width/length, width}, 
     length - 1]]]]

আসুন এটি ভেঙে দিন।

সংখ্যায় কয়টি সংখ্যা রয়েছে তা জানতে প্রথমে আমরা কিছু "ক্রিয়েটিভ পাটিগণিত" ব্যবহার করি: length = Ceiling[Log[10, n]];

এরপরে, আমরা একটি দুর্দান্ত বড় ছবিতে নম্বরটি রাস্টারাইজ করব:

বড় জালিয়াতি সংখ্যা সম্মান

এখন আমরা সেই চিত্রটির বাউন্ডিং বাক্সটির জন্য অনুসন্ধান করি এবং প্রস্থ এবং উচ্চতা (চিত্রটি উচ্চতার পরিবর্তে বেসলাইন অফসেটটি ব্যবহার করি কারণ এমএম চিত্রের বেসলাইনের নীচে কিছু সাদা অংশ যোগ করে) ites

এর পরে, নেস্টলিস্ট চিত্রটির প্রান্ত থেকে অক্ষরগুলি একের পর এক আঁকতে সক্ষম করার জন্য স্ট্রিংয়ের দৈর্ঘ্য দ্বারা বিভক্ত চিত্রটির প্রস্থকে পুনরাবৃত্তভাবে বিয়োগ করে এবং সেগুলি এই চিত্রটিতে পুনরায় জমা দেওয়া হয়:

বড় বিপরীত সংখ্যা সম্মান

তারপরে আমরা এটি অপটিক্যাল চরিত্রের স্বীকৃতির জন্য পাঠ্য সনাক্তকরণ ফাংশনে পৌঁছে দেব যা এই চিত্রের আকার এবং রাস্টারাইজেশন মানের অনবদ্যভাবে চূড়ান্ত আউটপুট সনাক্ত করতে এবং আমাদের পূর্ণসংখ্যা দিতে সক্ষম:

72641

লোগারিদম এবং ওসিআর - এটি চকোলেট এবং চিনাবাদাম মাখনের মতো!

নতুন এবং উন্নত

এই সংস্করণটি অল্প সংখ্যার সাথে পাঠ্য সনাক্তকরণের বাধা আচরণের সাথে সংখ্যার প্যাড আউট করে এবং এরপরে প্যাডটি বিয়োগ করে। এটি একক-সংখ্যা সংখ্যার জন্যও কাজ করে!

তবে, আপনি কেন একটি সংখ্যায় বিপরীত রুটিন চালাবেন তা আমার কাছে রহস্য। তবে কেবল সম্পূর্ণতার খাতিরে, আমি এমনকি এটি শূন্য এবং একের ইনপুটগুলির জন্যও কাজ করেছি, যা সাধারণত ভেঙে যায় কারণ মেঝে লগ তাদের জন্য 1 ফেরত না।

n = 1;
pad = 94949;
length = If[n == 1 || n == 0, 1, Ceiling[Log[10, n]]];
img = Rasterize[n + (pad*10^length), RasterSize -> 400, 
   ImageSize -> 400];
padlength = length + 5;
box = ImageDimensions[img];
width = box[[1]]; height = box[[2]];
reversed = 
  ImageResize[
   ImageAssemble[
    ImageTake[img, {1, height}, #] & /@ 
     NestList[# - width/padlength &, {width + 1 - width/padlength, 
       width}, padlength - 1]], 200];
recognized = ToExpression[TextRecognize[reversed]];
(recognized - pad)/10^5

2
আমাকে এটি মারধর। আপনি আমার ভোট পেয়েছেন !! [তবে আমি সি # ব্যবহার করতে যাচ্ছিলাম]
এইচএল-এসডিকে

1
TextRegognizeঅল্প সংখ্যক জন্য কাজ করছে না। এবং আপনি টাইপ করা আছে height = b[[3]];। আমার উত্তরটিও পরীক্ষা করে দেখুন, দয়া করে! :)
ফিটফাট

এর সাথে আর একটি সমস্যা TextRecognizeহ'ল এটি একটি স্ট্রিং দেয়, যা অনুমোদিত নয় এবং আপনাকে এটি আবার সংখ্যায় রূপান্তর করতে হবে।
ফিটফাট

টাইপগুলি চিহ্নিত করার জন্য ধন্যবাদ ... আমি জমা দেওয়ার আগে ভেরিয়েবলের নামগুলিকে আরও পাঠক উপযোগী করে তুলছিলাম এবং একটি মিস করছি। অনুপস্থিত ToExpression এ ছুঁড়ে ফেলেছে। এবং আমি একটি সংশোধন পোস্ট করেছি যা সংখ্যার সংখ্যার সমস্যাটিকে একক অঙ্কগুলিতে ডলার করে।
জোনাথন ভ্যান মাত্রে

বাহ ... বিস্তারিত!
duci9y

39

পার্ল / LuaTeX / টেসেরাক্ত

নিম্নলিখিত পার্ল স্ক্রিপ্টটি কমান্ড লাইন আর্গুমেন্ট হিসাবে নম্বরটি পড়ে, যেমন:

    1234567890

নিম্নলিখিত পার্ল স্ক্রিপ্টটি লুয়াটেক্সের মাধ্যমে নম্বরটি মুদ্রণ করে। ফ্লাইতে একটি ভার্চুয়াল ফন্ট তৈরি করা হয়েছে যা অঙ্কগুলি অনুভূমিকভাবে মিরর করে।

temp0.png

তারপরে পুরো সংখ্যাটি আবার অনুভূমিকভাবে মিরর করা হবে:

temp1.png

চূড়ান্ত চিত্রটি ওসিআর (পরীক্ষামূলক) এর মাধ্যমে পুনরায় পড়া হবে:

    0987654321

#!/usr/bin/env perl
use strict;
$^W=1;

# Get the number as program argument or use a fixed number with all digits.
$_ = shift // 1234567890;

$\="\n"; # append EOL, when printing

# Catch negative number
exit print "NaUI (Not an Unsigned Integer)" if $_ < 0;

# Catch number with one digit.
exit ! print if ($_ = $= = $_) < 10;

undef $\;

# Write TeX file for LuaTeX
open(OUT, '>', 'temp.tex') or die "!!! Error: Cannot write: $!\n";
print OUT<<"END_PRINT";
% Catcode setting for iniTeX (a TeX format is not needed)
\\catcode`\{=1
\\catcode`\}=2
\\def\\mynumber{$_}
END_PRINT
print OUT<<'END_PRINT';
\directlua{tex.enableprimitives('',tex.extraprimitives())}
\pdfoutput=1 % PDF output
% move origin to (0,0)
\pdfhorigin=0bp
\pdfvorigin=0bp
% magnify the result by 5
\mag=5000

% Create virtual font, where the digits are mirrored
\directlua{
  callback.register('define_font',
    function (name,size)
      if name == 'cmtt10-digits' then
        f = font.read_tfm('cmtt10',size)
        f.name = 'cmtt10-digits'
        f.type = 'virtual'
        f.fonts = {{ name = 'cmtt10', size = size }}
        for i,v in pairs(f.characters) do
          if (string.char(i)):find('[1234567890]') then
            v.commands = {
               {'right',f.characters[i].width},
               {'special','pdf: q -1 0 0 1 0 0 cm'},
               {'char',i},
               {'right',-f.characters[i].width},
               {'special','pdf: Q'},
            }
          else
            v.commands = {{'char',i}}
          end
        end
      else
        f = font.read_tfm(name,size)
      end
      return f
    end
  )
}

% Activate the new font
\font\myfont=cmtt10-digits\relax
\myfont

% Put the number in a box and add a margin (for tesseract)
\dimen0=5bp % margin
\setbox0=\hbox{\kern\dimen0 \mynumber\kern\dimen0}
\ht0=\dimexpr\ht0+\dimen0\relax
\dp0=\dimexpr\dp0+\dimen0\relax
\pdfpagewidth=\wd0
\pdfpageheight=\dimexpr\ht0+\dp0\relax

% For illustration only: Print the number with the reflected digits:
\shipout\copy0 % print the number with the reflected digits

% Final version on page 2: Print the box with the number, again mirrored
\shipout\hbox{%
  \kern\wd0
  \pdfliteral{q -1 0 0 1 0 0 cm}%
  \copy0
  \pdfliteral{Q}%
}

% End job, no matter, whether iniTeX, plain TeX or LaTeX
\csname @@end\endcsname\end
END_PRINT

system "luatex --ini temp.tex >/dev/null";
system qw[convert temp.pdf temp%d.png];
system "tesseract temp1.png temp >/dev/null 2>&1";

# debug versions with output on console
#system "luatex --ini temp.tex";
#system qw[convert temp.pdf temp%d.png];
#system "tesseract temp1.png temp";

# Output the result, remove empty lines
open(IN, '<', 'temp.txt') or die "!!! Error: Cannot open: $!\n";
chomp, print while <IN>;
print "\n";
close(IN);

__END__

6
টেক্সের জন্য +1। আমাদের আরও টেক্স উত্তর দরকার!
জোনাথন ভ্যান মাত্রে

25

Brainfuck

মূলত, এটি কেবল একটি ইনপুট-বিপরীত প্রোগ্রাম।

,[>,]<[.<]

ইউপিডি: যেহেতু সিলেস্টার মন্তব্যগুলিতে ইঙ্গিত করেছিলেন, ক্লাসিকাল ব্রেইনফাক অনুবাদকারী / সংকলকগুলিতে (মেমরি অ্যারে শূন্য পয়েন্ট থেকে বামে যাওয়ার সম্ভাবনা ছাড়াই) এই প্রোগ্রামটি শুরুতে '>' এর অভাবে কাজ করবে না, তাই আরও স্থিতিশীল সংস্করণটি হ'ল:

>,[>,]<[.<]

4
সবচেয়ে ছোট Bf প্রোগ্রাম আমি কখনও দেখেছি। এছাড়াও, সত্যিই ঝরঝরে।
নিত

2
ছাড়া একটি >প্রারম্ভে তথ্য পাওয়ার আগে একটি শূন্য সেল করতে এই অনেক দোভাষী / কম্পাইলার কাজ করবে না।
সিলেস্টার

1
@ ড্যানেক সত্য, সমস্ত কক্ষ শূন্যে আরম্ভ করা হয় এবং আপনি যে কাজটি করেন তা হ'ল প্রথম অঙ্কটি প্রথম কোষে পড়তে হয়। [.<]যার কারণে থামতে কোনও শূন্য সেল নেই এবং এটি ব্যর্থ হবে। থেকে ত্রুটি bf -n rev1.bfহয় Error: Out of range! Youwanted to '<' below the first cell.। আপনি সংকলন যদি আপনি একটি segfaultসম্ভবত পেতে ।
সিলেস্টার

3
+1 এমনকি বিএফ যদি অ্যারে সম্পর্কে থাকে তবে আমি নিশ্চিত নই যে এটি নিয়মে ফিট করে অ্যারে ব্যবহার করবেন না
মাইকেল এম

1
@ নিট প্রতিধ্বনি অনেক খাটো:,[.,]
ক্রুঙ্কার

20

Haskell,

reverseNumber :: Integer -> Integer
reverseNumber x = reverseNumberR x e 0
    where e = 10 ^ (floor . logBase 10 $ fromIntegral x)

reverseNumberR :: Integer -> Integer -> Integer -> Integer
reverseNumberR 0 _ _ = 0
reverseNumberR x e n = d * 10 ^ n + reverseNumberR (x - d * e) (e `div` 10) (n + 1)
    where d = x `div` e

কোনও অ্যারে, স্ট্রিং বা মডিউল নেই।

এছাড়াও, আমি জানি আমাদের তালিকাগুলি বা স্ট্রিংগুলি ব্যবহার করার কথা নয়, তবে আমি পছন্দ করি আপনি যখন এটি করেন তখন এটি কতটা সংক্ষিপ্ত:

reverseNumber :: Integer -> Integer
reverseNumber = read . reverse . show

2
বেশ কয়েকটি সাইট নিয়ামকরা তাদের ভোটদানের দিনটি সর্বাধিক পেরিয়ে গিয়েছিল, তাই ধৈর্য ধরুন। :)
জোনাথন ভ্যান মাত্রে

19

সি ++

/* 
A one-liner RECUrsive reveRSE function. Observe that the reverse of a 32-bit unsigned int
can overflow the type (eg recurse (4294967295) = 5927694924 > UINT_MAX), thus the 
return type of the function should be a 64-bit int. 

Usage: recurse(n)
*/

int64_t recurse(uint32_t n, int64_t reverse=0L)
{
    return n ? recurse(n/10, n - (n/10)*10 + reverse * 10) : reverse;
}

1
শীতল হতে হবে?:
এমনিআইপ

@ এমনিপ ভাল ধারণা
আলী আলাভি

+ 1 উজ্জ্বল। আশা করি আরও উর্ধ্বগামী হত।
duci9y

ওভারফ্লো কেস ধরার জন্য কুডোস।
জোনাথন ভ্যান মাত্রে

18

আমি মনে করি যে কাউকে অংশগ্রহী হতে হবে।

সজোরে আঘাত

$ rev<<<[Input]

 

$ rev<<<321
123
$ rev<<<1234567890
0987654321

আকারের সীমাবদ্ধতাগুলি আপনার শেলের উপর নির্ভর করে, তবে আপনি কারণের মধ্যেই ঠিক থাকবেন।


2
স্যার ভাল খেলেছে। ভাল খেলেছে
ব্যবহারকারী 21

4
কিভাবে এটি একটি স্ট্রিং না?
চার্লস

1
এটি একটি স্ট্রিং হতে পারে। আপনি কি নিশ্চিত যে বাশ যখন সম্ভব হয় তখন পূর্ণসংখ্যা হিসাবে ইনপুট নেয়?
duci9y

3
উদাহরণস্বরূপ ব্যবহার না করে সমস্ত কিছু বাশ-এ স্ট্রিং declare -i। তুলনা করুন foo=089এবং declare -i foo=089(অবৈধ অষ্টাল সংখ্যা)।
l0b0

3
@ L0b0 এর মন্তব্য অনুসারে এই উত্তরটি অবৈধ।
duci9y

15

জাভাস্ক্রিপ্ট

সম্পাদনা : যেহেতু %অপারেটরটি ব্যবহার না করার পরামর্শ রয়েছে তাই আমি এখন একটু কৌশল ব্যবহার করি।

আমি জানি এটি কোনও কোড-গল্ফ নয়, তবে এটি আরও দীর্ঘ করার কোনও কারণ নেই।

function r(n){v=0;while(n)v=n+10*(v-(n=~~(n/10)));return v}

r(13457) আয় 75431

তদুপরি, এটি স্ট্রিং পদ্ধতির চেয়ে অনেক দ্রুত ( n.toString().split('').reverse().join('')):

এখানে চিত্র বর্ণনা লিখুন

==> জেএসপিফার রিপোর্ট <==


2
~~পরিবর্তে ব্যবহার সম্পর্কে কি Math.floor?
ভিক্টর স্টাফুসা

হ্যাঁ এটি সংক্ষিপ্ত হবে, তবে কম বোধগম্য।
মাইকেল এম।

2
এটি কি পাঠ্যপুস্তকের পূর্ণসংখ্যা-বিপরীত পদ্ধতি নয়? আমি মনে করি হোমওয়ার্কের জন্য আমি এই অ্যালগরিদম লিখেছি।
ব্যবহারকারী 2357112

উপরের মন্তব্যের মতো এটি কেবল স্ট্যান্ডার্ড ইন্টিজার রিভার্সাল অ্যালগরিদম। যতদূর আমি দেখতে পাচ্ছি সৃজনশীল অংশটি হ'ল ~~পরিবর্তে Math.floor(@ ভিক্টরের প্রস্তাবিত পরিবর্তন) এর ব্যবহার
বার্টি হুইন

পারফরম্যান্স পরীক্ষার জন্য +1। সমস্ত দুর্দান্ত ক্রিয়েটিভ মাইন্ডস প্রাথমিক এবং প্রায়শই পারফরম্যান্স টেস্ট করে। : ডি
জোনাথন ভান মাত্রে

10

পাইথন

এই বাস্তবায়ন সৃজনশীল গণিতের জন্য যোগ্য কিনা নিশ্চিত না

এছাড়াও% অপারেটর প্রতি সে ব্যবহার করা হয়নি, যদিও কেউ তর্ক করতে পারে যে ডিভোমড একই কাজ করে, তবে তারপরে প্রশ্নটির পুনঃব্যবস্থাপনা করা দরকার :-)

বাস্তবায়ন

r=lambda n:divmod(n,10)[-1]*10**int(__import__("math").log10(n))+r(n /10)if n else 0

ডেমো

>>> r(12345)
54321
>>> r(1)
1

এটা কিভাবে কাজ করে?

এটি একটি পুনরাবৃত্ত ডিভোমড সমাধান * এই সমাধানটি সর্বনিম্ন উল্লেখযোগ্য সংখ্যা নির্ধারণ করে এবং তারপরে এটি সংখ্যার শেষে ধাক্কা দেয় * *

তবুও আরেকটি পাইথন বাস্তবায়ন

def reverse(n):
    def mod(n, m):
        return n - n / m * m
    _len = int(log10(n))
    return n/10**_len + mod(n, 10)*10**_len + reverse(mod(n, 10**_len)/10)*10 if n and _len else n

এটা কিভাবে কাজ করে?

এটি একটি পুনরাবৃত্ত সমাধান যা সংখ্যার থেকে চূড়ান্ত অঙ্কগুলি অদলবদল করে

Reverse(n) = Swap_extreme(n) + Reverse(n % 10**int(log10(n)) / 10) 
             ; n % 10**log10(n) / n is the number without the extreme digits
             ; int(log10(n)) is the number of digits - 1
             ; n % 10**int(log10(n)) drops the most significant digit
             ; n / 10 drops the least significant digit

Swap_extreme(n) = n/10**int(log10(n)) + n%10*10**int(log10(n))
             ; n%10 is the least significant digit
             ; n/10**int(log10(n)) is the most significant digit

উদাহরণ রান

reverse(123456) = 123456/10^5 + 123456 % 10 * 10^5 + reverse(123456 % 10 ^ 5 / 10)
                = 1           + 6 * 10 ^ 5 + reverse(23456/10)
                = 1           + 600000     + reverse(2345)
                = 600001 + reverse(2345)
reverse(2345)   = 2345/10^3 + 2345 % 10 * 10^3 + reverse(2345 % 10 ^ 3 / 10)
                = 2         + 5 * 10^3 + reverse(345 / 10)
                = 2         + 5000     + reverse(34)
                = 5002                 + reverse(34)
reverse(34)     = 34/10^1 + 34 % 10 * 10^1 + reverse(34 % 10 ^ 1 / 10)
                = 3       + 40             + reverse(0)
                = 43 + reverse(0)
reverse(0)      = 0

Thus

reverse(123456) = 600001 + reverse(2345)
                = 600001 + 5002 + reverse(34)
                = 600001 + 5002 + 43 + reverse(0)
                = 600001 + 5002 + 43 + 0
                = 654321

এটা করে. মানের +5 ক্ষুদ্রকায় সুশীলা পরীবিশেষ পয়েন্ট
duci9y

@ ডাউনভোটার: আপনি কি এই উত্তরটির সাথে ভুল বলতে পারেন?
অভিজিৎ

আপনি, স্যার, আমার থাম্বস আপ প্রাপ্য ...
kmonsoor

9

কেবল বিপরীতে, মডুলো অপারেটরের একটি অতিরিক্ত ব্যবহার:

unsigned int reverse(unsigned int n)
    {return n*110000%1099999999%109999990%10999900%1099000%100000;}

নোট করুন যে এটি সর্বদা 5 ডিজিটের বিপরীত হয় এবং 32 বিট সংখ্যার 39045 এর বেশি ইনপুট মানগুলির জন্য উপচে পড়বে।


8

সি শার্প

এটি মডুলাস ( %) অপারেটর এবং সহজ সরল পাটিগণিত ছাড়াই এটি করার একটি উপায় ।

int x = 12356;
int inv = 0;
while (x > 0)
{
    inv = inv * 10 + (x - (x / 10) * 10);
    x = x / 10;
}
return inv;

আপনার কাছে মডুলাস রয়েছে, আপনি কেবল নিজেরাই এটি সংজ্ঞায়িত করেছেন।
বেনিয়ামিন গ্রুইনবাউম

হ্যাঁ আমি জানি. আমাদের কেবল %অপারেটরটি ব্যবহার করার কথা নয় । :) আমি আপনাকে বোঝাতে চাইছি যদিও, আমার পাঠ্যটি কিছুটা বিভ্রান্তিকর ছিল।
ডেভিডসপ্রো


6

সি

#include <stdio.h>

int main(void) {
    int r = 0, x;
    scanf("%d", &x);
    while (x > 0) {
        int y = x;
        x = 0;
        while (y >= 10) { y -= 10; ++x; }
        r = r*10 + y;
    }
    printf("%d\n", r);
}

কোনও স্ট্রিং, অ্যারে, মডিউলাস বা বিভাগ নেই। পরিবর্তে, বারবার বিয়োগ দ্বারা বিভাজন।


6

ম্যাথামেটিকাল

সংখ্যার বাইরে একটি চিত্র তৈরি করা, এটি প্রতিবিম্বিত করে, অঙ্কগুলিতে ভাগ করে। তারপরে দুটি বিকল্প রয়েছে:

  1. প্রতিবিম্বিত অঙ্কের প্রতিটি চিত্রের পূর্ববর্তী চিত্রগুলির সাথে তুলনা করুন, এটি সংশ্লিষ্ট অঙ্কের সাথে প্রতিস্থাপন করুন এবং এর মধ্যে সংখ্যাটি তৈরি করুন।

  2. প্রতিটি অঙ্ক পৃথকভাবে প্রতিফলিত করুন, একটি নতুন চিত্র নির্মাণ করুন এবং এটি চিত্র স্বীকৃতি ফাংশনে প্রেরণ করুন।

দুটোই করেছি

reflectNumber[n_?IntegerQ] := 
 ImageCrop[
  ImageReflect[
   Image@Graphics[
     Style[Text@NumberForm[n, NumberSeparator -> {".", ""}], 
      FontFamily -> "Monospace", FontSize -> 72]], 
   Left -> Right], {Max[44 Floor[Log10[n] + 1], 44], 60}]
reflectedDigits = reflectNumber /@ Range[0, 9];
reverse[0] := 0
reverse[n_?IntegerQ /; n > 0] := 
 Module[{digits}, 
  digits = ImagePartition[reflectNumber[1000 n], {44, 60}];
  {FromDigits[
    digits[[1]] /. (d_ :> # /; d == reflectedDigits[[# + 1]] & /@ 
       Range[0, 9])],
   ToExpression@
    TextRecognize[
     ImageAssemble[
      Map[ImageReflect[#, Left -> Right] &, digits, {2}]]]}]
reverse[14257893]
> {39875241, 39875241}

সম্পাদনা : তিনটি শূন্যের প্যাডিং যুক্ত হয়েছে, কারণ TextRecogniseকেবলমাত্র পূর্ণসংখ্যা> 999 দিয়ে সঠিকভাবে কাজ করে।


ডাবল প্রতিবিম্ব জন্য কুডোস। প্রতিটি ভাল প্রোগ্রামারকে যখনই সম্ভব প্রতিচ্ছবি ব্যবহার করা উচিত। ;-) তবে, আপনার প্রথম পদ্ধতিটি এমএম 9-এ আমার সিস্টেমে আপনার উদাহরণের জন্য কাজ করে না।
জোনাথন ভ্যান মাত্রে

এখন এটি সৃজনশীল।
ডেভিড স্যান্ডার্স

আমার প্যাডে 9 এবং 4 পর্যায়ক্রমে আমি সেরা ফলাফল পেয়েছি (সমস্ত 9s বা সমস্ত 1s মাঝেমধ্যে ওসিআর গ্ল্যাচ দেয়) তবে এটি সম্ভবত ফন্টের পার্থক্যের চেয়ে কম।
জোনাথন ভ্যান মাত্রে

5

অ্যাপ্লিকেশন Lua

function assemble(n,...)
    if ... then
        return 10*assemble(...)+n
    end
    return 0
end
function disassemble(n,...)
    if n>0 then
        return disassemble(math.floor(n/10),n%10,...)
    end
    return ...
end
function reverse(n)
    return assemble(disassemble(n))
end

কোনও অ্যারে বা স্ট্রিং ব্যবহার করা হয়নি। সংখ্যাটি অঙ্কগুলিতে বিভক্ত হয়ে যুক্তি তালিকাটি ব্যবহার করে পুনরায় সংযুক্ত করা হয়।


লুয়ার আর যাই হোক না কেন। সারণী রয়েছে: পি অন্যথায়
ভারারাগুলি

@ নোয়ায়েজে এটিতে টেবিল রয়েছে যা অ্যারের সাথে সাদৃশ্যপূর্ণ হতে পারে। যে কারণে আমাকে সেগুলি ব্যবহার করার অনুমতি নেই। এবং
ভারারাগগুলি

তবে আপনি ব্যবহার করছেন %! : পি
ntoskrnl

5

Python2

ধরে নেই "স্বাক্ষরবিহীন পূর্ণসংখ্যা" 32-বিট

import math
import sys
a=input()
p=int(math.log(a, 10))
b=a
while b%10==0:
    sys.stdout.write('0') # if 1-char string is not allowed, use chr(48) instead
    b=b/10

if p==0:
    print a
elif p==1:
    print a%10*10+a/10
elif p==2:
    print a%10*100+a%100/10*10+a/100
elif p==3:
    print a%10*1000+a%100/10*100+a%1000/100*10+a/1000
elif p==4:
    print a%10*10000+a%100/10*1000+a%1000/100*100+a%10000/1000*10+a/10000
elif p==5:
    print a%10*100000+a%100/10*10000+a%1000/100*1000+a%10000/1000*100+a%100000/10000*10+a/100000
elif p==6:
    print a%10*1000000+a%100/10*100000+a%1000/100*10000+a%10000/1000*1000+a%100000/10000*100+a%1000000/100000*10+a/1000000
elif p==7:
    print a%10*10000000+a%100/10*1000000+a%1000/100*100000+a%10000/1000*10000+a%100000/10000*1000+a%1000000/100000*100+a%10000000/1000000*10+a/10000000
elif p==8:
    print a%10*100000000+a%100/10*10000000+a%1000/100*1000000+a%10000/1000*100000+a%100000/10000*10000+a%1000000/100000*1000+a%10000000/1000000*100+a%100000000/10000000*10+a/100000000
elif p==9:
    print a%10*1000000000+a%100/10*100000000+a%1000/100*10000000+a%10000/1000*1000000+a%100000/10000*100000+a%1000000/100000*10000+a%10000000/1000000*1000+a%100000000/10000000*100+a%1000000000/100000000*10+a/1000000000

ইনপুট দেওয়া হলে 1230, এটি আউটপুট করে 0321


আমি কেবল মডুলাস অপারেটরের সম্পাদনা দেখেছি ... আমার কি এই পোস্টটি মুছতে হবে?
#HongKongInd dependence

7
আমার মনে হয় না আপনি এটি মুছে ফেলা উচিত, কারণ এটি ব্যবহার না করার পরামর্শ, কোনও নিয়ম নয়:"Since this is a popularity contest, I suggest not using the modulus (%) operator in your code."
প্রোগ্রামফক্স

প্লাস যে বিশাল যদি বিবৃতি কার্যত ASCII শিল্প হয়।
জোনাথন ভ্যান মাত্রে

4

পুনশ্চ

/rev{0 exch{dup 10 mod 3 -1 roll 10 mul add exch 10 idiv dup 0 eq{pop exit}if}loop}def

কোনও অ্যারে, কোনও স্ট্রিং, কোনও ভেরিয়েবল নেই।

gs -q -dBATCH -c '/rev{0 exch{dup 10 mod 3 -1 roll 10 mul add exch 10 idiv dup 0 eq{pop exit}if}loop}def 897251 rev ='
152798

এটি ছাড়া একই mod(যা কেবল একটি শর্টকাট, সুতরাং কোনও বড় পার্থক্য নেই):

/rev {
    0 exch {
        dup
        10 idiv dup
        3 1 roll 10 mul sub
        3 -1 roll 10 mul add exch 
        dup 0 eq {pop exit} if
    } loop
} def

4

সি শার্প

এটি কোনও স্ট্রিং বা অ্যারে ব্যবহার করে না, তবে। এনইটি Stack<T>টাইপ ব্যবহার করে (EDIT: মূলত ব্যবহৃত মডুলাস অপারেটর; এখন সরানো হয়েছে)

public class IntegerReverser
{
    public int Reverse(int input)
    {
        var digits = new System.Collections.Generic.Stack<int>();
        int working = input;
        while (working / 10 > 0)
        {
            digits.Push(working - ((working / 10) * 10));
            working = working / 10;
        }
        digits.Push(working);
        int result = 0;
        int mult = 1;
        while (digits.Count > 0)
        {
            result += digits.Pop() * mult;
            mult *= 10;
        }
        return result;
    }
}

4

সি

এতে সুস্পষ্ট সমাধানটি বেশ কয়েকটি অন্যান্য ভাষায় উপস্থাপিত হয়, এটি সি তে পোস্টও করতে পারে might

Golfed:

r;main(n){scanf("%d",&n);for(;n;n/=10)r=r*10+n%10;printf("%d",r);}

Ungolfed:

#include <stdio.h>

int main()
{
     int n, r = 0;
     scanf("%d", &n);
     for(;n;n/=10)
     { 
          r = r * 10 + n % 10;
     }
     printf("%d", r);
}

সম্পাদনা: সবেমাত্র মডুলাস সম্পাদনা দেখেছি।

গল্ফড (কোনও মডুলাস নেই):

r;main(n){scanf("%d",&n);for(;n;n/=10)r=r*10+(n-10*(n/10));printf("%d",r);}

অবহেলিত (কোনও মডুলাস নেই):

#include <stdio.h>

int main()
{
     int n, r, m = 0;
     scanf("%d", &n);
     for(;n;n/=10)
     { 
          r=r*10+(n-10*(n/10));
     }
     printf("%d", r);
}

4

জাভা

এটি এটাই আমি নিয়ে এসেছি, কোন স্ট্রিং নেই, অ্যারে নেই ... এমনকি ভেরিয়েবলও নেই (জাভাতে আমি আপনাকে মনে করি):

public static int reverse(int n) {
    return n/10>0?(int)(modulo(n,10)*Math.pow(10, count(n)))+reverse(n/10):(int)(modulo(n,10)*Math.pow(10,count(n)));
}

public static int count(int i) {
    return (i = i/10)>0?count(i)+1:0;
}

public static int modulo(int i,int j) {
    return (i-j)>=0?modulo(i-j, j):i;
}

সম্পাদনা করুন আরও পাঠযোগ্য সংস্করণ

/** Method to reverse an integer, without the use of String, Array (List), and %-operator */
public static int reverse(int n) {
    // Find first int to display
    int newInt = modulo(n,10);
    // Find it's position
    int intPos = (int) Math.pow(10, count(n));
    // The actual value
    newInt = newInt*intPos;
    // Either add newInt to the recursive call (next integer), or return the found
    return (n/10>0) ? newInt+reverse(n/10) : newInt;
}

/** Use the stack, with a recursive call, to count the integer position */
public static int count(int i) {
    return (i = i/10)>0?count(i)+1:0;
}

/** A replacement for the modulo operator */
public static int modulo(int i,int j) {
    return (i-j)>=0?modulo(i-j, j):i;
}

আপনার কোডটি আরও পঠনযোগ্য করে তুলুন, এটি কোড গল্ফ নয়। ধন্যবাদ.
duci9y

1
এটি এটিই আমার প্রথম প্রচেষ্টা, আমি আশা করি আপডেট হওয়া সংস্করণটি আরও ভাল হবে :-)
oiZo

হ্যাঁ তাই হয়। ধন্যবাদ. কোড গল্ফ স্বাগতম। আমিও নতুন। :)
duci9y

3

শক্তির উৎস

পাওয়ারশেলের একটি দ্রুত সমাধান। সুস্পষ্ট বা স্পষ্টভাবে কোনও অ্যারে বা স্ট্রিং ব্যবহার করা হয়নি।

function rev([int]$n) {
    $x = 0
    while ($n -gt 0) {
        $x = $x * 10
        $x += $n % 10
        $n = [int][math]::Floor($n / 10)
    }
    $x
}

পরীক্ষামূলক:

PS > rev(13457)
75431

PS > rev(rev(13457))
13457

3

অজগর (সহজে সমাবেশে সম্পন্ন)

বাইটের বিটগুলি বিপরীত করে। ঠিক সবাই একই কাজটি না করার জন্য পয়েন্টস?

x = int(input("byte: "), 2)
x = ((x * 8623620610) & 1136090292240) % 1023
print("{0:b}".format(x).zfill(8))

উদাহরণ

byte: 10101010
01010101

1
এটি কি নমুনা ইনপুটটির জন্য নমুনা আউটপুট উত্পাদন করে?
duci9y

3

সি ++

#include<iostream>
#include<conio.h>
#include<fstream>
using namespace std;
int main()
{
    int i,size;
    float num;
    char ch;
    cout<<"enter the number \t: ";
    cin>>num;
    ofstream outf("tmp.tmp");
    outf<<num;
    outf.close();
    ifstream inf("tmp.tmp");
    inf.seekg(0,ios::end);
    size=inf.tellg();
    inf.seekg(-1,ios::cur);
    cout<<"Reverse of it\t\t: ";
    for(i=0;i<size;i++)
    {
        inf>>ch;
        if(ch!='0'||i!=0)
        cout<<ch;
        inf.seekg(-2,ios::cur);
    }
    inf.close();
            remove("tmp.tmp");
    getch();
    return 0;
}  

আউটপুট

তিনটি নমুনা রান
এখানে চিত্র বর্ণনা লিখুন

জিরো দিয়ে পরীক্ষা করুন

এখানে চিত্র বর্ণনা লিখুন

এটি খুব ভাসমান সংখ্যার বিপরীত !!!

এখানে চিত্র বর্ণনা লিখুন

আপনি যদি এই কোডটি চালাতে চান তবে এটি আপনার কম্পিউটারে চালান কারণ এটি তার রান-টাইমের সময় একটি অস্থায়ী ফাইল তৈরি করে এবং আমি নিশ্চিত নই যে অনলাইন কম্পাইলাররা আপনার কম্পিউটারে একটি অস্থায়ী ফাইল তৈরি করবে কিনা I


কোনও ফাইলকে স্ট্রিং বানাচ্ছে না?
duci9y

স্ট্রিংটি শেষে শূন্য চরিত্রের সাথে চরিত্রের সংমিশ্রণ, সুতরাং এটি স্ট্রিং নয় বরং কেবল অক্ষরের সংমিশ্রণ
মুকুল কুমার

একটি স্ট্রিং অক্ষরের ক্রম। দুঃখিত, তবে এই উত্তরটি সীমাবদ্ধতাগুলি পূরণ করে না।
duci9y

আপনার স্ট্রিংয়ের সংজ্ঞাটি ভুল, দয়া করে এই ওয়েবসাইটে যান ( cs.stmarys.ca/~porter/csc/ref/c_cpp_strings.html ) এবং সাবধানে শেষ অনুচ্ছেদটি পড়ুন ring স্ট্রিং এ '\ 0' এর সাথে সমাপ্ত
মুকুল কুমার

1
আমি দুঃখিত, আপনি সি স্ট্রিংয়ের কথা বলছেন। আমি সাধারণভাবে স্ট্রিং সম্পর্কে কথা বলছি। আপনার উত্তরটি যোগ্যতা অর্জন করে না।
duci9y

2

ইসমাস্ক্রিপ্ট।

reverse=x=>{
    var k=-(l=(Math.log10(x)|0)),
        p=x=>Math.pow(10,x),
        s=x*p(l);
    for(;k;k++) s-=99*(x*p(k)|0)*p(l+k);
    return s
}

তারপর:

  • reverse(12345) আউটপুট 54321
  • reverse(3240) আউটপুট 423
  • reverse(6342975) আউটপুট 5792436

2

বিদারণ

$SX/
\S?L
K\O

এই প্রোগ্রামটি ইনপুট বিপরীত।

$ echo -n '12345' | fsn tac.fsn
54321

1
আপনি কেবল "প্রশ্ন জিজ্ঞাসার আগে প্রোগ্রামিং ভাষা উপস্থিত ছিল কি?" এই এক পরীক্ষা। বিভাজনটি এশোলাং বিশ্বে শীতল প্রবেশের মতো দেখায় - ধরণের "কণা পদার্থবিজ্ঞানের বইয়ে পূর্ণ শেল্ফ সহ অ্যাসিডের উপর বেফঞ্জ" of নিস!
জনাথন ভ্যান মাত্রে

2

বের

আমি মনে করি এটি জনপ্রিয়ের বিপরীত ... তবে ফোর্থ ব্যবহার করা সর্বদা সৃজনশীল ...

আসুন একটি নতুন শব্দ তৈরি করুন

: REV 
  BEGIN
    S->D 10 U/
    SWAP 1 .R
  DUP 0= UNTIL 
CR ;

এখানে, এটি ইউ / শব্দের ব্যবহার করে যা বাকী এবং ভাগফল প্রত্যাবর্তন করে, বাকিগুলি লম্বা 1 ক্ষেত্রের মধ্যে লম্বা হিসাবে আউটপুটে প্রেরণ করা হয়, যতক্ষণ না লভ্যাংশ শূন্য হয়। কোনও স্ট্রিং ব্যবহৃত হয় না, যতক্ষণ না কোনও ভিডিওতে না পাঠানো হয়। আমি কোনও মডুলো অপারেটর ব্যবহার করি না, পরিবর্তে আমি বাকী এবং ভাগফলের সাথে পূর্ণসংখ্যা বিভাগ ব্যবহার করি। চেষ্টা করা যাক

12345 REV 54321
ok

জেডএক্স স্পেকট্রাম এমুলেটর


আমি কোথায় এই এমুলেটর পেতে পারি?
বিড়াল

স্পেকট্রাম ওয়ার্ল্ড emulators প্রচুর এখানে তালিকাভুক্ত হয়েছে worldofspectrum.org/emulators.html
Mattsteel

2

টুরিং মেশিন কোড

এখান থেকে বাক্য গঠন ব্যবহার করছি।

0 * * l 0
0 _ # r 2
2 # # r 2
2 0 # l A
2 1 # l B
2 2 # l C
2 3 # l D
2 4 # l E
2 5 # l F
2 6 # l G
2 7 # l H
2 8 # l I
2 9 # l J
2 _ _ l Z
A * * l A
A _ 0 l Q 
B * * l B
B _ 1 l Q 
C * * l C
C _ 2 l Q
D * * l D
D _ 3 l Q
E * * l E
E _ 4 l Q
F * * l F
F _ 5 l Q
G * * l G
G _ 6 l Q
H * * l H
H _ 7 l Q
I * * l I
I _ 8 l Q
J * * l J
J _ 9 l Q
Q # # r 2
Q * * r Q
Z # _ l Z
Z * * l ZZ
ZZ _ * r ZZZ
ZZ * * l ZZ
ZZZ 0 _ r ZZZ
ZZZ * * * halt

এটি অনলাইন চেষ্টা করুন!


1

পাইথন

import itertools

def rev(n):
    l = next(m for m in itertools.count() if n/10**m == 0)
    return sum((n-n/10**(i+1)*10**(i+1))/10**i*10**(l-i-1) for i in range(l))

rev(1230)দেয় 321। আমি মনে করি এটি আসলে দেওয়া উচিত 0321?
#_HongKongInd dependence

এটা কি ভুল? যদি আমরা কেবল সংখ্যার সাথে কাজ করে থাকি, স্ট্রিং নয়, তবে 0321 এবং 321 সমান অধিকার?
জয়ন্ত কাউশিক

এটি আমার বোঝার 321 হওয়া উচিত। প্রশ্নটি স্ট্রিংগুলির ব্যবহার নিষিদ্ধ। সুতরাং এটি 321 হওয়া উচিত
মাইক্রোবিয়ান

আমি জানি না ... ওপি'র জবাবের জন্য অপেক্ষা করছি। আমি এটি দেখিয়ে দিচ্ছি, ভুল বলছি না wrong বিভ্রান্তির জন্য দুঃখিত.
#HongKongInd dependence

আমি প্রশ্ন আপডেট।
duci9y

1

সি

#include <stdio.h>

int c(int n) {
    return !n ? 0 : 1+c(n/10);
}

int p(int n) {
    return !n ? 1 : 10*p(n-1);
}

int r(int n) {
    return !n ? 0 : n%10*p(c(n/10))+r(n/10);
}

int main() {
    printf("%d\n", r(13457));

    return 0;
}

1

দল

স্ট্রিং ব্যবহার না করার অংশটি মিস করেছেন - ওহ ভাল।

@echo off
setLocal enableDelayedExpansion enableExtensions
for /f %%a in ('copy /Z "%~dpf0" nul') do set "ASCII_13=%%a"
set num=%~1
set cnum=%num%
set len=0
:c
if defined num set num=%num:~1%&set /a len+=1&goto :c
set /a len-=1
for /L %%a in (%len%,-1,0) do set /p "=!ASCII_13!!cnum:~%%a,1!"<nul

1

পাইথন 2

import math

def reverseNumber(num):
    length = int(math.ceil(math.log10(num)))
    reversed = 0

    for i in range(0, length):
        temp = num // math.pow(10, length - i - 1)
        num -= temp * math.pow(10, length - i - 1)
        reversed += int(temp * math.pow(10, i))

    return reversed

print reverseNumber(12345)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.