ক্রেজি 8 এস কোড গল্ফ


34

এমন একটি প্রোগ্রাম তৈরি করুন যা অন্তরালের মধ্যে সমস্ত সংখ্যার সমন্বিতভাবে মুদ্রণ (a, b)করে এবং 8 ধারাবাহিকের সাথে এলোমেলোভাবে (অভিন্নভাবে বিতরণ করা হয়, অন্যান্য অক্ষরের তুলনায় স্বতন্ত্র), অ-সংখ্যাসূচক, অ-হোয়াইটস্পেস, মুদ্রণযোগ্য এএসসিআইআই অক্ষরগুলি প্রতিস্থাপন করে।

সমস্ত ক্ষেত্রে 0 <a <b ধরে নিন।

যদি সংখ্যাটিতে 1 এর বেশি সংখ্যা থাকে তবে প্রতিস্থাপনের ম্যাচগুলিতে অক্ষরের পরিমাণ নিশ্চিত করুন!

উদাহরণ:

(1, 16) -> 1 2 3 4 5 6 7 $ 9 10 11 12 13 14 15 n@

(115, 123) -> 115, 116, 117, 118, 119, :F<, 121, 122, 123

(1, 3) -> 1 2 3

অ উদাহরণ:

(1, 16) -> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

(115, 123) -> 115 116 117 118 119 $ 121 122 123

এটি কোড গল্ফ, তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী!

বর্তমান বিজয়ী:

পাইক (21 বাইট) মডিফিশ দ্বারা

সবচেয়ে জনপ্রিয়:

ডেনিসের পাইথন 2 (119 বাইট)


11
আমার গল্ফ ভাষাতে বাস্তবের জন্য সমস্ত দীর্ঘ দীর্ঘ জিনিসকে একত্রিত করে এমন একটি চ্যালেঞ্জ তৈরির জন্য অভিনন্দন
ব্লু

1
@muddyfish আমি এটা বুঝাতে হয় একটি চ্যালেঞ্জ;)
GracefulLemming

আমি নিশ্চিত না যে আমি কিছু মিস করছি কিনা, তবে এলোমেলো চরিত্রগুলি অনন্য হওয়া উচিত কি না? উদাহরণস্বরূপ যদি ইনপুটটি 16, 16 হত তবে আউটপুটটি এএ হতে পারে ? যদি এটি না হয় তবে এই সংখ্যার 85 টিরও বেশি সংখ্যার (আমি সঠিকভাবে গণনা করেছি) ধরে রাখলে কী হবে?
FryAmTheEggman

@ ফ্রাইআমএইজিগম্যান প্রতিটি চরিত্রটি বেশিরভাগ ক্ষেত্রেই অনন্য হওয়া উচিত তবে "এ" এবং "ক" যদি এলোমেলোভাবে ক্রমাগতভাবে নির্বাচিত হয় তবে তা ঠিক, তবে সম্ভাব্যতা খুব কম হওয়ায় সব ক্ষেত্রেই এটি হওয়া উচিত নয়
গ্রেসফুললিমিং

@ ফ্রাইআম দ্য এজিগম্যান এবং অন্য উদাহরণে 16, 16 কেস 0 বা 2 এলোমেলো চরিত্রের প্রত্যাবর্তন করেছে তবে এই ক্ষেত্রে সম্পর্কে সবসময় কঠোরভাবে খ
গ্রেসফুললিমিং

উত্তর:


4

পাইকে, 22 21 বাইট

h1:Fi8%!I`lV~Kl7T>Hs0

এখানে চেষ্টা করুন!

আকারে ইনপুট লাগে: higher,lower

h1:                   -  range(lower, higher+1, 1)
   F                  - for i in ^:
    i8%               -    i % 8 
       !              -   not ^
        I             -  if ^:
         `l           -    len(str(i))
           V          -   repeat V ^ times
            ~K        -        printable_ascii
              l7      -       ^.strip()
                T>    -      ^[10:]
                  H   -     random.choice(^)
                   s0 -    sum(^)

তালিকা সব ভাল!
গ্রেসফুললেমিং

এই আকর্ষণীয় হয়, প্রথম ক্ষেত্রে দেখা Ive যেখানে 8n, 8n একটি ত্রুটি ঘটায়
GracefulLemming

আমার খারাপ আমি আউটপুটটি ভুলভাবে পড়েছি
গ্রেসফুললেমিং

11

পাইথন 2, 126 বাইট

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

import random,string
def f(a,b):
 while b/a:print[a,eval('random.choice(string.printable[10:-6])+'*len(`a`)+"''")][a%8<1];a+=1

তাদের সমস্ত সহায়তার জন্য Flp.Tkc এবং ইস্টারলিআইআরকে অনেক ধন্যবাদ!


2
এর b/aপরিবর্তে আপনি ব্যবহার করতে পারেন a<=bএবং ;শেষে আপনার প্রয়োজন নেই । এছাড়াও import random,stringকয়েক বাইট পরিমাণ সঞ্চয় হয়। tio.run/nexus/…
ডেনিস

@ ডেনিস, আপনাকে ধন্যবাদ, যে এটি 7 বাইট বন্ধ করেছে!
হিদার


6

zsh, 100 98 বাইট

for i in {$1..$2};{((i%8))&&<<<$i||<<<`yes 'shuf -e {!..~}|grep "[^0-9]"|head -c1'|head -$#i|zsh`}

দুটি ইনপুট আর্গুমেন্ট কমান্ড লাইন আর্গুমেন্ট হিসাবে পাস করা হয়, এবং সংখ্যা পৃথক লাইনে আউটপুট হয়।

for i in {$1..$2};{   # loop through the range
((i%8))&&             # if the number is not divisible by 8 (i % 8 != 0),
<<<$i||               # output it
<<<`                  # otherwise, output the following:
yes '                 # using `yes' as a golfy loop
shuf -e {\!..\~}      # shuffle the range of printable ASCII (minus space)
|grep "[^0-9]"        # get rid of numbers
|head -c1'            # take the first character
|head -$#i            # obtain a string with that code repeated len(i) times... 
|zsh                  # ... and eval it
`}

আমি জিজ্ঞেস করতে পারি তুমি কেন সংখ্যার যে outputting হয় হয় 8 বিভাজ্য?
গ্রেসফুললেমিং

1
@ কালেব ওফস, এটি টাইপো ছিল। এটি " 8 দ্বারা বিভাজ্য নয় " পড়ার অর্থ ছিল
ডোরকনবব

5

গণিত, 96 বাইট

Range@##/.a_?(8∣#&):>Join[33~(c=CharacterRange)~47,58~c~127]~RandomChoice~⌊Log10@a+1⌋<>""&

ব্যাখ্যা

ইনপুট mএবং n:

Range@##

জেনারেট করুন {m, m + 1, m + 2, ... , n}

/.a_?(8∣#&):>

8 দ্বারা বিভাজ্য সমস্ত সংখ্যার জন্য (এটি কল করুন a), এই প্রতিস্থাপনের নিয়মটি প্রয়োগ করুন:

Join[33~(c=CharacterRange)~47,58~c~127]

অঙ্কগুলি বাদে সমস্ত মুদ্রণযোগ্য ASCII অক্ষরের একটি তালিকা পান।

... ~RandomChoice~⌊Log10@a+1⌋

সিউডো-এলোমেলোভাবে Floor[Log10[a] + 1]তালিকা থেকে অক্ষর চয়ন করুন , নকলকে অনুমতি দিন।

<>""

চরিত্রগুলিতে যোগদান করুন।


96 বাইট ব্যবহারের জন্য আরেকটি পদ্ধতিFromCharacterCode (r=Range)@##/.a_?(8∣#&):>FromCharacterCode[Join[33~r~47,58~r~127]~RandomChoice~⌊Log10@a+1⌋]<>""&
জায়েং

5

আর, 73 বাইট

i=scan();x=i[1]:i[2];x[!x%%8]=sample(sapply(c(32:46,58:126),intToUtf8));x

স্টিডিনের কাছ থেকে ইনপুট পড়ে এবং 8বিস্তৃত সংখ্যাগুলির পরিবর্তে পরিসরের ascii অক্ষরের সমানভাবে নির্বাচিত নমুনা দ্বারা প্রতিস্থাপন করে 32...47, 58...126। এলোমেলো নমুনা আঁকতে আমাদের অক্ষরের একটি ভেক্টর দরকার, দুর্ভাগ্যক্রমে intToUtf8()ভেক্টরের পরিবর্তে একটি স্ট্রিং ফেরত দেয় তাই আমাদের ব্যবহার করেও এটির পরিসর ধরে ভেক্টরাইজ করতে হবে sapply


5

পাইথন 2, 126 বাইট

(ডেনিস কেবল আউটগল্ফ হয় না)

আমি হিদারের উত্তর নিয়ে প্রচুর কাজ করার পরে, আমি ভেবেছিলাম আমার নিজের সমাধানগুলিও পোস্ট করব।

import random,string
def f(a,b):
 while b/a:print[a,eval('random.choice(string.printable[10:-6])+'*len(`a`)+"''")][a%8<1];a+=1

এটি এমন একটি ফাংশন যা দুটি আর্গুমেন্ট গ্রহণ করে এবং সরাসরি মুদ্রণ করে STDOUT

127 বাইট

import random,string
lambda a,b:[[x,eval('random.choice(string.printable[10:-6])+'*len(`x`)+`''`)][x%8<1]for x in range(a,b+1)]

এই একটি নামহীন বেনামী ফাংশন - ব্যবহার, (যেমন একটি পরিবর্তনশীল নির্ধারিত f), এবং তারপর কল f(a, b)। এটি একটি তালিকা হিসাবে আউটপুট ফেরত দেয়।


এটি ভুল। এলোমেলোভাবে নির্বাচিত অক্ষরগুলিতে অঙ্কগুলি নাও থাকতে পারে।
ডেনিস

@ ডেনিস ঠিক আছে, আমার বিভক্ত ধারণাটি ফিরে আসুন: পি মাথা আপ করার জন্য ধন্যবাদ
ফ্লিপট্যাক

পাইথন 2 জনপ্রিয় প্রতিযোগী বলে মনে হচ্ছে, আমি এটি পছন্দ করি!
গ্রেসফুললেমিং

4

পিপ , 28 বাইট

Fia,b+1Pi%8?i{RC@>PA@`\D`}Mi

কমান্ড-লাইন আর্গুমেন্ট হিসাবে নম্বর নেয় এবং ফলাফলের একটি নতুন লাইন-বিচ্ছিন্ন তালিকা মুদ্রণ করে। এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা:

                              a,b are cmdline args; PA is string of all printable ASCII
Fia,b+1                       For i in range(a, b+1):
       P                       Print this:
        i%8?i                  If i%8 is truthy (nonzero), i; otherwise:
             {           }Mi   Map this function to the digits of i:
                @>PA           All but the first character of PA (removes space)
                    @`\D`      Find all regex matches of \D (nondigits)
              RC               Random choice from that list of characters
                               The map operation returns a list, which is concatenated
                               before printing

4

জাভাস্ক্রিপ্ট (ES6), 114 বাইট

f=(x,y)=>(x+"").replace(/./g,d=>x%8?d:String.fromCharCode((q=Math.random()*84)+(q>15?43:33)))+(x<y?[,f(x+1,y)]:"")

O.textContent = f(1,200)
<pre id=O>

23-বাইট নাম সহ সেই রঙের বিল্ট-ইনগুলি ....


1
প্রতিস্থাপনের
অক্ষরগুলি

@ লার্সডব্লু কোনওভাবে এটি মিস করেছেন, ধন্যবাদ
ETH প্রোডাকশনগুলি

3

এমএটিএল , 26 বাইট

&:"@8\?@}6Y24Y2X-Xz@VnT&Zr

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

ব্যাখ্যা

&:        % Input a and b (implicit). Push range [a a+1 ... b]
"         % For each k in that range
  @       %   Push k
  8\      %   Modulo 8
  ?       %   If non-zero
    @     %     Push k
  }       %   Else
    6Y2   %     Push string of all printable ASCII chars
    4Y2   %     Push string '0123456789'
    X-    %     Set difference
    Xz    %     Remove space. Gives string of possible random chars
    @Vn   %     Push number of digits of k
    T&Zr  %     Random sample with replacement of that many chars from the string
          % End if, end for each, display (implicit)

বাহ চমৎকার! চমৎকার উত্তর. +1 টি
হিদার

@ উগ্র ধন্যবাদ! আমার মনে হচ্ছে এটি আরও খাটো করা যায় ...
লুইস মেন্ডো

3

পাইথ , 24 বাইট

jm?%d8dsmO-r\~\ jkUT`d}F

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

ব্যাখ্যা:

jm?%d8dsmO-r\~\ jkUT`d}FQ  # Auto-fill variables
                      }FQ  # Splat inclusive range on the input
 m?%d8d                    # Map over each number, if it isn't divisible by 8 return it
       smO          `d     # for each other number, select a character at random for
                             each of it's digits and then flatten into one string
           r\~\            # Printable ASCII excluding space
          -     jkUT       # Setwise difference with numeric values (remove numbers)
j                          # Join with newlines

3

বাশ + এপিজি ,64, 76 বাইট

সম্পাদনাগুলি:

  • "8 8" ইস্যুটি স্থির করে এলোমেলো অক্ষর, +12 বাইটের সেট থেকে সংখ্যাযুক্ত অক্ষরগুলি বাদ দিন

Golfed

seq $1 $2|sed "$[(7&(8-$1%8))+1]~8s/.*/a=&;apg -a1 -n1 -Mcsl -m\${#a} -x0/e"

পরীক্ষা

>./crazy8 8 8
$

>./crazy8 115 123
115
116
117
118
119
As_
121
122
123

>./crazy8 1 16
1
2
3
4
5
6
7
"
9
10
11
12
13
14
15
x!

আপনি কি দিতে পারেন একটি সংক্ষিপ্ত পদব্রজে ভ্রমণ? এছাড়াও কি crazy8 8 8ফল হবে তা দেখার জন্য আমি আগ্রহী
গ্রেসফুল লাইমিং

@Caleb, আসলে এটা করবে শুধু আউটপুট একটি হিসাবে জন্য, 8 8, দেখে মনে হচ্ছে আমি এটি একটি বিট ওভার golfed করেছি, একটি ফিক্স এখন কাজ। এটি এলোমেলো স্ট্রিং অক্ষর সেট থেকে অঙ্কগুলিও ফিল্টার করে না (আমি এটিও মিস করেছি)।
Zeppelin

2

পার্ল 6 , 60 বাইট

{map {$_%8??$_!!S:g/./{grep(/\D/,"!".."~").pick}/},$^a..$^b}

ব্যাখ্যা:

  • { map { }, $^a .. $^b }: একটি ল্যাম্বডা দুটি আর্গুমেন্ট গ্রহণ করে, সেই ব্যাপ্তির মধ্যে পূর্ণসংখ্যার তালিকা তৈরি করে এবং প্রতিটি উপাদানের সাথে প্রয়োগ করা নিম্নলিখিত রূপান্তরের সাথে এটি প্রদান করে:
  • $_ % 8 ?? $_ !!: উপাদানটি 8 দ্বারা বিভাজ্য না হলে এটি অপরিবর্তিতভাবে পাস করুন। তা না হলে ...
  • S:g/./{ }/: ... তার স্ট্রিং প্রতিনিধিত্ব প্রতিটি অক্ষর এই অভিব্যক্তি দ্বারা উত্পাদিত মান সঙ্গে প্রতিস্থাপন:
  • grep(/\D/, "!" .. "~").pick: এর মধ্যে !এবং ~(ইউনিকোড ক্রমে) অক্ষরের পরিসর তৈরি করুন , অঙ্কগুলি ফিল্টার আউট করুন এবং এলোমেলোভাবে বাকী একটি অক্ষর বেছে নিন pick

1

পিএইচপি, 163 বাইট

$n=range(48,57);$c=array_diff(range(32,126),$n);
foreach(range($a,$b) as $v){if($v%8!=0){echo $v;}
else{for($i=0;$i<strlen($v);$i++){echo chr($c[array_rand($c)]);}}}

ব্যাখ্যা:

  • $n = range(48,57) এগুলি সংখ্যার জন্য ASCII কোডগুলি, যা বিশেষ অক্ষরের (32-47) এবং অন্যান্য অক্ষরের (58-126) মাঝখানে থাকে।
  • $c = array_diff(range(32,126), $n)$nঅ্যারে ব্যবহার করে , সংখ্যাযুক্ত অক্ষরগুলি বাদ দিন এবং গ্রহণযোগ্য ASCII অক্ষরগুলির একটি অ্যারে তৈরি করুন।
  • foreach(range($a,$b) as $v)থেকে মানগুলির সীমায় লুপ $aথেকে $b(সহ), লুপ ভিতরে $ বনাম হিসাবে।
  • if($v % 8 != 0) { echo $v; }টেস্ট $ V ব্যবহার সমানভাবে বিভাজ্য mod অপারেটর ব্যবহার 8 হচ্ছে %
  • else { for($i = 0; $i < strlen($v); $i++) { ... }} 8 দ্বারা সমানভাবে বিভাজ্য না হলে, সংখ্যার অঙ্কের জন্য পর্যাপ্ত সময় লুপ করুন এবং অক্ষরগুলি মুদ্রণ করুন (পরবর্তী ধাপে)।
  • echo chr($c[array_rand($c)])ASCII মানগুলির গ্রহণযোগ্য অ্যারে থেকে একটি একক অক্ষর মুদ্রণ করুন $carray_randঅ্যারেতে একটি সূচক ফেরত দেয়, তাই আমাদের ব্যবহার করে সেই সূচীতে আসল মান পেতে হবে $c[random_key]

আমি সম্ভবত অন্যরকমভাবে তৈরি করে এটিকে আরও ছোট করে তুলতে পারি $c, এবং ASCII অক্ষরগুলি মুদ্রণের জন্য লুপটি অনুভূত হয় তাই আমি কীভাবে এটি সংক্ষিপ্ত করব তা ভাবতে থাকব।


1
ধন্যবাদ জ্যাক! আপনার কাছ থেকে শুনে খুশী হলাম! আমার নতুন চ্যালেঞ্জটি একবার দেখুন র্যান্ডম পিক্সেল পুকিং যদি আপনার কাছে সময়ও থাকে!
গ্রেসফুললেমিং

1

postgresql9.6 251 অক্ষর

খুব লম্বা কোড তবে পোস্টগ্র্যাস্কেলও এটি করে।

do language plpgsql $$ begin for n in a..bloop raise info'%',case when 0=n%8then(select array_to_string(array(select*from(select chr(generate_series(33,126)))t where chr!~'\d'order by random()limit floor(log(n))+1),''))else n::text end;end loop;end;$$

ফর্ম্যাট করা এসকিএল এখানে:

do language plpgsql $$
begin
for n in a..b loop
    raise info '%',
    case when 0 = n % 8 then (
        select array_to_string(array(select * from (
            select chr(generate_series(33, 126))
        ) t where chr !~ '\d' order by random() limit floor(log(n)) + 1), '')
    ) else n::text
    end;
end loop;
end;
$$

1

পার্ল, 66 বাইট

map{$_%8||s%.%do{$_=chr rand 126}until/[!-\/:-~]/;$_%ge;say}<>..<>

-Eপতাকা সহ চালান :

perl -E 'map{$_%8||s%.%do{$_=chr rand 126}until/[!-\/:-~]/;$_%ge;say}<>..<>' <<< "8
16"

এটি বেশ সোজা এগিয়ে:
- <>..<>2 ইনপুট সংখ্যার মধ্যে সংখ্যার একটি তালিকা তৈরি করে। এবং তারপরে mapএটি পুনরাবৃত্তি করে:
- $_%8||...: 8 এর একাধিক ...হলেই সম্পাদন করা $_হয়
- s%.%xxx%ge: প্রতিটি অক্ষরকে প্রতিস্থাপন করুন xxx
- do{$_=chr rand 126}until/[!-\/:-~]/যতক্ষণ না আমরা সন্তুষ্ট হওয়া কোনও পেয়েছি, ততক্ষণ একটি এলোমেলো অক্ষর বাছুন (কোড থেকে শুরু করে 126 পর্যন্ত) /[!-\/:-~]/ie মুদ্রণযোগ্য এবং একটি অঙ্ক নয় one
- say: এটি মুদ্রণ।


1

সি (জিসিসি) , 129 119 বাইট

s(a,r){a&&s(!isdigit(r=rand()%94+33)?putchar(r),a/10:a,0);}f(a,b){b>a&&f(a,b-1);b%8?printf("%d",b):s(b,0);printf(" ");}

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

129 → 119 %94+33থেকে ট্রিকটি ব্যবহার করুন ওওবালেন্স কৌশলটি

Ungolfed:

s(a,r){
    a&&                                  // Loop recursively on a!=0
    s(!isdigit(r=rand()%94+33)           // Test random selection
      ?putchar(r),a/10                   // Print and reduce a
      :a                                 // Retry random selection
      ,0);                               // Second arg, recurse
}
f(a,b){
    b>a&&                                // Loop recursively on b>a
    f(a,b-1);                            // Reduce b, recurse
    b%8?printf("%d",b)                   // Print non 8's
       :s(b,0);                          // Call s() for 8's
    printf(" ");                         // Space separator
}

আপনি যদি নতুন লাইন বিভাজক ( putsপরিবর্তে printf) পরিবর্তন করেন তবে আপনি 3 বাইট সংরক্ষণ করতে পারেন ।
ওব্লান্স

আপনার সমাধানটি খেলতে আরও মজাদার :-)
jxh

1

সি, 157 115 বাইট

f(a,b){b-a&&f(a,b-1);if(b%8)printf("%d",b);else for(;b;b/=10){while(isdigit(a=rand()%94+33));putchar(a);}puts("");}

এটি এখানে অনলাইনে চেষ্টা করুন । 42 বাইট গল্ফ করার জন্য jxh ধন্যবাদ ।

অবরুদ্ধ সংস্করণ:

f(a, b) { // recursive function, parameters are implicitly int
    b-a && f(a, b-1); // recurse until a = b
    if(b % 8)            // if the number is a multiple of 8
        printf("%d", b); // simply print it
    else for(; b; b /= 10) { // while b > 0, lop off the last digit
        while(isdigit(a = rand() % 94 + 33)); // generate random characters in ASCII range [33, 127] until one is non-numeric
        putchar(a); // print the character
    }
    puts(""); // print a newline
}

এই কথোপকথন চ্যাট অবিরত করা যেতে পারে ।
ডিজেএমসিএমহেম

1

জাভা 10, 149 147 বাইট (ল্যাম্বদা ফাংশন)

b->a->{var r="";for(;a<=b;r+=" ",a++)for(var c:(a+"").split("")){char t=0;for(;t<33|t>126|t>47&t<59;t*=Math.random())t=127;r+=a%8<1?t:c;}return r;}

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

জাভা 10, 227 225 বাইট (সম্পূর্ণ প্রোগ্রাম)

interface M{static void main(String[]A){var r="";for(var a=new Long(A[0]);a<=new Long(A[1]);r+=" ",a++)for(var c:(a+"").split("")){char t=0;for(;t<33|t>126|t>47&t<59;t*=Math.random())t=127;r+=a%8<1?t:c;}System.out.print(r);}}

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

ব্যাখ্যা:

b->a->{          // Method with two integer parameters and String return-type
  var r="";      //  Result-String, starting empty
  for(;a<=b      //  Loop as long as `a` is smaller than or equal to `b`
      ;          //    After every iteration:
       r+=" ",   //     Append a space to the result-String
       a++)      //     And increase `a` by 1
    for(var c:(a+"").split("")){
                 //   Inner loop over the characters of the current number
      char t=0;  //    Random-char, starting at 0
      for(;t<33|t>126|t>47&t<59;
                 //    Loop until `t` is a non-digit printable ASCII char
          t*=Math.random())t=127;
                 //     Set `t` to a random character with a unicode in the range [0,127)
      r+=a%8<1?  //   If the current `a` is divisible by 8:
          t      //    Append the random character
         :       //   Else:
          c;}    //    Append the digit instead
  return r;}     //  Return the result

পরিসীমা [0,127] অনুমান অনুসারে নয়: "অ-সংখ্যাসূচক, অ-
শ্বেত

@ ওউবালেন্স সম্ভবত আমার মন্তব্যটি খুব ভালভাবে ব্যাখ্যা করা হয়নি, তবে t<33|(t>47&t<59)|t>126;এটিই যেখানে এটির উপরে রয়েছে। এটি মূলত পরিসরে একটি এলোমেলো সংখ্যা তৈরি করেছে [0,127), তারপরে এটি বৈধ কিনা তা পরীক্ষা করে (সুতরাং পরিসরে [33..47,59..126], সমস্ত মুদ্রণযোগ্য অ-অঙ্কিত ASCII অক্ষর)। যদি এটি হয়: ভাল, এটি যুক্ত করুন। যদি তা না হয়: [0,127)আবার পরিসরে একটি এলোমেলো সংখ্যা তৈরি করুন এবং আমরা কোনও বৈধ অক্ষর না পাওয়া পর্যন্ত এটিকে আবার বৈধতা দিন।
কেভিন ক্রুইজসেন

না, আপনার মন্তব্যটি ঠিক আছে বলে আমি মনে করি। আমার খারাপ :)
ওব্লান্স

1

এপিএল (ডায়ালগ প্রসারিত) , 32 বাইট

{(?84¨⍕⍵)⊇⎕D~⍨'!''~'}¨@{0=8|⍵}…

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

তাদের সহায়তার জন্য অ্যাডাম এবং জাজিমাকে প্রচুর ধন্যবাদ । ডায়ালগ ব্যবহার করে প্রথমবার বাড়ানো হয়েছে!

ব্যাখ্যা:

{(?84¨⍕⍵)⊇⎕D~⍨'!''~'}¨@{0=8|⍵}…   Dyadic 2-train

                                  Tacit range: list of numbers from left arg 
                                   to right arg inclusive
{(?84¨⍕⍵)⊇⎕D~⍨'!''~'}¨@{0=8|⍵}    Monadic function applied to above          
                        {     }    Function definition
                           8|⍵     8 modulo every item in our range
                         0=        Transform list into a boolean vector, with
                                   1 where item was equal to zero, 0 otherwise
                      ¨@           Applies left function to each item selected
                                   by above
{                    }             Function definition
              '!''~'              Range of all printable ASCII chars
          D~⍨                     Remove numeric characters from above
 (    ⍕⍵)                          Convert function argument to string
                                   (e.g., 123 -> "123")
   84¨                             For each character, replace with number 84
                                   (number of non-numeric printable ASCII chars)
  ?                                Generate random number from 1-84 for each
                                   84 in list
                                  Index the ASCII char list with above random
                                   numbers

1

স্কালা , 198 বাইট

অপরিবর্তনীয় রাষ্ট্র (03-04-2018) সহ একটি উন্নত ক্রিয়ামূলক সংস্করণ

  def S(a: Int, b: Int)={
    val c=(33 to 47)++(58 to 126)
    val r = (a to b).toStream.map {case x if x%8==0=>c(Random.nextInt(c.length)).toChar.toString
      case x => String.valueOf(x)}
    r}

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

এর মজাদার জন্য স্কালায় একটি কার্যকরী শৈলী সমাধান (350 বাইট)।

def r(a:Int, b:Int)={
    var l=(33 to 47).toList:::(58 to 126).toList
    l=Random.shuffle(l)
    var x=ListBuffer[String]()
    var k=0
    (a to b).toList.foreach{e=>{
         if(k==l.length){k=0
         l=Random.shuffle(l)}
         if (e.toInt%8==0){x+=l(k).toChar.toString
           k+=1}
         else{x+=e.toString
             k+=1}}}
    x}

উন্নতির জন্য পরামর্শ স্বাগত জানানো হয়।


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

@ মুডিফিশ ঠিক আছে আমি আমার কোডটি গল্ফ করেছি, অ্যান্ড্রয়েড কীভাবে বাইট গণনা যুক্ত করছে?
ফায়ারফিল 15

এখনই আমার কাছে এটি ঠিক মনে হয়েছে
ব্লু

0

পাইথন 2, 180 বাইট

from random import*
def f(a,b):
 for i in range(a,b+1):
  if i%8<1:
   k,i=str(i),''
   for _ in k:i+=choice([chr(j)for j in range(33,48)]+[chr(j)for j in range(57,126)])
  print i

সম্পাদনা করুন:

আমি টাস্কটি সঠিকভাবে পড়িনি বলে বুঝতে পেরে @ Flp.Tkc ধন্যবাদ।

বাইট গণনা হ্রাস করতে আমি কয়েকটি ব্যবহার করতে পারার জন্য @ কালেবকে ধন্যবাদ জানাই।

সংখ্যাগুলি অন্তর্ভুক্ত করা যাবে না এই বিষয়টি নির্দেশ করার জন্য @ ডেনিসকে ধন্যবাদ।

সম্পাদনা 2:

বর্তমান সংস্করণটি সম্ভবত এর চেয়ে আরও সরলীকৃত হতে পারে।


0

পাওয়ারশেল , 82 89 বাইট

$a,$b=$args;$a..$b|%{($_,(-join[char[]](33..47+58..127|random -c "$_".Length)))[!($_%8)]}

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


1
58..127 নীচের পরিসর 33 (!) থেকে 47 (/) এ মুদ্রণযোগ্য ASCII প্রতীকগুলি অন্তর্ভুক্ত করে না।
Zeppelin

@ জেপেলিন সত্য, আমি এটি একটি প্রয়োজন বলে মনে করি নি, তবে এটি পুনরায় পড়তে হবে, আমি মনে করি এটি অবশ্যই অভিন্ন বিতরণ হতে পারে be আপডেট করা হয়েছে!
ব্রিটিশবাদী

0

কিউবিআইসি , 79 বাইট

::[a,b|~c%8=0|[_l!c$||_R33,116|~e>47 and e<58|e=e+z]Z=Z+chr$(e)]\Z=Z+!c$]Z=Z+@ 

নম্বরগুলি এড়ানো ব্যয়বহুল ব্যাপার, এখানে এমন একটি সংস্করণ যা এলোমেলোভাবে 0-920 বাইট কম জন্য বেছে নিতে পারে :

::[a,b|~c%8=0|[len(!c$)|Z=Z+chr$(_r33,126|)]\Z=Z+!c$]Z=Z+@ 

জন্য নমুনা আউটপুট 1, 89

1 2 3 4 5 6 7 U 9 10 11 12 13 14 15 M9 17 18 19 20 21 22 23 ^L 25 26 27 28 29 30 
31 <U 33 34 35 36 37 38 39 gH 41 42 43 44 45 46 47 aJ 49 50 51 52 53 54 55 1b 57 58 59 60 
61 62 63 ,C 65 66 67 68 69 70 71 ]; 73 74 75 76 77 78 79 [B 81 82 83 84 85 86 87 Ix 89 

ব্যাখ্যা:

::        Get inputs 'a' and 'b' from the command line
[a,b|     FOR(c=a; c<=b; c++)
~c%8=0|   IF c is cleanly divisible by 8 THEN
 _l!c$|   Take the length (_l) of the string representation (! ... $) of c 
[      |  FOR (d = 1; d<= length(c); d++)
_R33,116| Set e to a random value in the range 33 - 116 (all the printable ascii's - 10)
~e>47     IF e falls between 47
and e<58| and 58 (ASCII code for 0-9) THEN 
e=e+z     e = e + 10 (z == 10 in QBIC)
]         END IF
Z=Z+      Add to Z$
chr$(e)]  ASCII character e
\         ELSE if c is not cleanly divisible by 8
Z=Z+!c$   Add to Z the string representation of c
]         NEXT
Z=Z+@     Add a space to Z$ (@ is an implicitly delimited string literal with 1 significant space)

( Z$ is implicitly printed at end of program )

0

05 এ বি 1 ই , 17 বাইট

ŸεD8ÖižQžhK¦.rsg£

হিসাবে ইনপুট নেয় highest\nlowestএবং একটি তালিকা আউটপুট দেয়।

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা:

Ÿ                  # Create a list in the range [low (implicit) input, high (implicit) input]
 ε                 # Map each value to:
  D                #  Duplicate the value
   8Öi             #  If it's divisible by 8:
      žQ           #   Push all printable ASCII characters (" " through "~")
        žhK        #   Remove all digits
           ¦       #   Remove the first character (the space)
            .r     #   Randomly shuffle the remaining characters
              s    #   Swap to take the map value again
               g   #   Get its length
                £  #   And leave that many characters from the string
                   # (and implicitly output the resulting list after we're done mapping)

0

জাপট , 20 বাইট

;òV ®%8?Z:EÅk9ò)öZìl

চেষ্টা করে দেখুন

;òV ®%8?Z:EÅk9ò)öZìl     :Implicit input of integers U & V
 òV                      :Range [U,V]
    ®                    :Map each Z
     %8                  :  Modulo 8
       ?Z:               :  If truthy, return Z, else
;         E              :  Printable ASCII
           Å             :  Slice off first character
            k            :  Remove
             9ò          :    Range [0,9]
               )         :  End remove
                 Zì      :  Digit array of Z
                   l     :  Length
               ö         :  Get that many random characters from the string

0

ফোর্থ (গফোর) , 128 বাইট

include random.fs
: f 1+ swap do i 8 mod if i . else i 0 <# #s #> 0 do 83 random 33 + dup 47 > 10 * - emit loop ."  "then loop ;

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

ব্যাখ্যা

শুরু থেকে শেষ পর্যন্ত লুপ করুন, 8 টির একাধিক না হলে নম্বর মুদ্রণ করুন, অন্যথায় সংখ্যায় অঙ্কের সংখ্যা পান এবং অনেক এলোমেলো অক্ষর একটি স্পেস অনুসারে মুদ্রণ করুন

কোড ব্যাখ্যা

include random.fs          \ include/import the random module
: f                        \ start new word definition
  1+ swap                  \ add 1 to end number, because forth loops are [start, end), and swap order
  do                       \ start counted loop form start to end
    i 8 mod                \ get the remainder of dividing i (loop index) by 8
    if                     \ if true (not 0, therefore not multiple of 8)
      i .                  \ print the index
    else                   \ otherwise
      i 0                  \ convert index to double-length number
      <# #s #>             \ use formatted numeric output to convert number to a string
      0 do                 \ loop from 0 to (string-length - 1)
        84 random          \ get random number between 0 and 83
        33 +               \ add 33
        dup 47 >           \ check if result is larger than 47
        10 * -             \ if it is add 10 to result (results in number in range: 33-47,58-126)
        emit               \ output ascii char corresponding with number
      loop                 \ end inner loop
    ."  "then            \ output a space and then close the if/else
  loop                   \ end the outer loop
;                        \ end the word definition

UnGolfed

আমি সাধারণত আমার সমাধানগুলি অলগল্ফ করি না, তবে এটি দীর্ঘ / জটিল যেটি আমার মনে হয় এটির প্রয়োজন

include random.fs

\ get the length (in digits) of a number
: num-length 0 <# #s #> nip ;

\ check if a number is a multiple of another
: is-multiple mod 0= ;               

\ get a random printable non-digit ascii char           
: random-char 84 random 33 + dup 47 > 10 * - ;  

\ get a "random" string of printable ascii chars the same length as a number
: rand-str num-length 0 do random-char emit loop space ;

\ print numbers from a to b, replacing multiple of 8 with a random ascii string of the same length
: crazy-eights 1+ swap do i 8 is-multiple if i rand-str else i . then loop ;

0

পিএইচপি , 130 বাইট

function($a,$b){for(;$a<=$b;$a++)echo$a%8?$a:(function($l){while($l--)echo chr(($x=rand(44,128))-($x>58?:11));})(strlen($a))," ";}

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

Ungolfed:

function c8( $a, $b ) { 
    for( ; $a<=$b; $a++ ) {                // loop between a -> b
        echo $a % 8 ? $a :                 // every 8, call anon func instead of value
            (function($l) {
                while( $l-- ) {            // repeat length of value
                    $x = rand( 44, 128 );  // range size is printable chars [33,47][58,127]
                    $x-= $x > 58 ?: 11;    // Subtract one from x. If x was less than or 
                                           // equal to 58, subtract a further ten from it
                                           // so that it now falls within the 33-47 range
                    echo chr( $x );        // echo ASCII value
                }
            })( strlen( $a ) )," ";
    }
}

হ্যাঁ, আমার ভুল সম্পর্কিত $x-= $x > 58 ?: 11; // subtract 11, if x is less than 58- আপনি বিস্তারিত বলতে পারেন?
জোনাথন ফ্রেচ

@ জোনাথনফ্রেচ অন্য কথায় আমরা একটি সংখ্যা চাই যা -4৩-৪7 বা ৫৮-১২7 এর মধ্যে রয়েছে। সুতরাং আমরা এমন একটি সংখ্যা বাছাই করব যা নিম্ন রেঞ্জের আকারের থেকে 58 বিয়োগফল। যদি সংখ্যাটি 58 ​​এর নীচে থাকে তবে এটি কেবলমাত্র তফাতটি বিয়োগ করে নিম্ন সীমার মধ্যে অনুবাদ করা হয়েছে। কারণ অবশ্যই আমরা সংখ্যাগুলি প্রদর্শন করতে পারি না (ASCII চর 48-57)
640

টেনারিটি এটি করার জন্য একটি শর্টকাট। মূলত $ x> 58 1 টিতে মূল্যায়ন করে এবং তাই আমরা হয় সেটিকে বা 11 কে x থেকে বিয়োগ করে। এটি উচ্চতর ক্ষেত্রে, এটি র্যান্ড () বিবৃতিতে উচ্চতর হিসাবে ASCII মান দ্বারা অফসেট হয়। আপনি দেখতে পাচ্ছেন যে এটি একটি অভিন্ন র্যান্ডম উত্পন্ন করে (পিএইচপি এর র‌্যান্ডের মতো ইউনিফর্ম হিসাবে সক্ষম) বিতরণ: tio.run/…
640

আমি মনে করি এলভিস অপারেটর কী করে আমি মোটামুটিভাবে জানি, আপনার মন্তব্যটি বিভ্রান্তিকর বলে আমি মনে করি।
জোনাথন ফ্রেচ

আমি মনে করি এটি কাজ করে Subtract one from x. If x was less than or equal to 58, subtract a further ten from it., না?
জোনাথন ফ্রেচ

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