Script för att skapa listor

Permalänk

Script för att skapa listor

Tja jag skulle vilja ha ett script som skapar en lista av bokstav- och sifferkombinationer. Script språk kvittar.

Output ska se ut så här:
aa
aA
ab
aB
ac
aC
.
.
.






a0
a1
a2
a3
.
.
a9
Aa
AA
.
.
och så vidare

Efter Ö9 så ska den fortsätta med aaa
Tack på förhand

Permalänk
Avstängd

Väldigt enkelt att skriva i PHP.

Om man gör;
$letter = "a";
sen gör;
$letter++;
Då blir det "b", har jag för mig.

Visa signatur

Världsmästare i elakhet!

Permalänk
Medlem

Gjorde en snabb grej i haskell till dig!

import Char list = map (\x -> [x]) $ (concat $ map (\x -> (x : [toUpper x])) ['a'..'z']) ++ map intToDigit [1..9] makeList :: [String] makeList = makeList' list list where makeList' xs ys = (makeList'' xs ys ys) ++ makeList' xs (makeList'' xs ys ys) makeList'' [] _ _ = [] makeList'' (x:xs) [] rs = makeList'' xs rs rs makeList'' (x:xs) (y:ys) rs = [x ++ y] ++ makeList'' (x:xs) ys rs

Den gör en oändlig lista.. Inte jättefin kod, kan göras mycket effektivare och kortare.

Visa signatur

+++++++[>++++++++++>+++++++++++++++<<-]>-.---------[>>++<<-]>>----.<-.---.>++++.

Permalänk
Medlem

Försökte hitta en rekursivlösning i Perl men det failade rätt hårt så jag löste det dynamiskt.

#!/usr/bin/perl sub printchar { my $c = shift; printf("%c", $c < 26 ? 65 + $c : $c < 26 * 2 ? $c - 25 + 96 : $c - 26 * 2 + 48) unless ($c == -1); } sub printlastchar { my $c = shift; printf("%c", $c < 26 ? 65 + $c : $c < 26 * 2 ? $c - 25 + 96 : $c - 26 * 2 + 48); print "\n"; } $iterate = $ARGV[0]-2; $ev .= "for \$i$_ (-1..61) {" for (0..$iterate); $ev .= "for \$i".++$iterate." (0..61) {"; $ev .= "printchar(\$i$_); " for (0..--$iterate); $ev .= "printlastchar(\$i".++$iterate.");"; $ev .= "}" x ++$iterate; eval $ev;

Permalänk
Inaktiv

Gjorde också ett script åt dig, det kortaste hittills. Språket är Miranda, men borde gå att göra något liknande i Haskell.

#!/usr/bin/mira -exp lay list list :: [[char]] list = [a++[b] | a<-[[c] | c<-x]++list ; b<-x] where x = "aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ0123456789"

Emellertid börjar interpretatorn gnälla över för lite minne efter ett tag, dessutom stöds inte svenska tecken.

Edit: Varför radbryts min sträng, och varför hamnar det ett mellanslag i början av den?

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Alveb
[B]Gjorde också ett script åt dig, det kortaste hittills. Språket är Miranda, men borde gå att göra något liknande i Haskell.

#!/usr/bin/mira -exp lay list list :: [[char]] list = [a++[b] | a<-[[c] | c<-x]++list ; b<-x] where x = "aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ0123456789"

Emellertid börjar interpretatorn gnälla över för lite minne efter ett tag, dessutom stöds inte svenska tecken.

Edit: Varför radbryts min sträng, och varför hamnar det ett mellanslag i början av den? [/B]

Oh shit, mötte min överman.

Nu kommer jag inte kunna sova förns jag skriver bättre kod :/

Visa signatur

+++++++[>++++++++++>+++++++++++++++<<-]>-.---------[>>++<<-]>>----.<-.---.>++++.

Permalänk

Tack så mycket. Finns det en möjlighet att få scripten att de slutar efter det att outputen har 10 tecken?
efter:
ÖÖÖÖÖÖÖÖÖ9

Permalänk
Medlem

I haskell/mira versionen så borde man kunna göra något i stil med, list10 = take 10^28 list
Eller hur många element det nu blir.
I min version så ger man bara som inargument hur många tecken man vill ha.
Ex, perl gen.pl 10

Permalänk

Tack acura! Men kan du få scriptet så den lägger till åäö också?

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av TheCableMan
Tack acura! Men kan du få scriptet så den lägger till åäö också?

Okej, tog och snyggade upp fulkoden lite.

#!/usr/bin/perl @list = qw/a b c d e f g h i j k l m n o p q r s t u v w x y z å ä ö A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Å Ä Ö 0 1 2 3 4 5 6 7 8 9/; sub printchar { $c = shift; print $list[$c]; } sub printlastchar { $c = shift; print "$list[$c]\n"; } $iterate = $ARGV[0]-2; $ev .= "for \$i$_ (-1..67) {" for (0..$iterate); $ev .= "for \$i".++$iterate." (0..67) {"; $ev .= "printchar(\$i$_); " for (0..--$iterate); $ev .= "printlastchar(\$i".++$iterate.");"; $ev .= "}" x ++$iterate; print "$ev\n"; eval $ev;

Permalänk