문자열 조합 찾기..

매그넘의 이미지

char A[][][] = {   { "a" , "b" , "c" }  ,  {"1", "2", "3" } , { "A" , "B" , "C" } ... }
 
a1A
a1B
a1C
a2A
a2B
a2C
a3A
a3B
a3C
b1A
b1B
b1C
b2A
b2B
b2C
b3A
b3B
b3C
c1A
c1B
c1C
c2A
c2B
c2C
c3A
c3B
c3C

위와 같은 배열이 있습니다.

{ "a" , "b" , "c" } 이런 문자열이 2개가 있을수도, 3개가 있을수도.. 4개가 있을수도 있습니다.

이러한 문자열을 조합해서.. 아래의 결과를 뿌려주고 싶습니다.

대략 리커시브를 돌리면 될듯한데..

어떻게 해야할지...머리에서 쥐가 나네요. ㅠㅠ.

도움 부탁드려요~

alfalf의 이미지

Python 버젼입니다.

print '\n'.join((''.join((x, y, z)) for x in ['a', 'b', 'c'] for y in ['1', '2', '3'] for z in ['A', 'B', 'C']))
aero의 이미지

Perl codegolf 버젼

map{$a=$_;map{$b=$_;map{print"$a$b$_\n"}qw/A B C/}qw/1 2 3/}qw/a b c/;

for$a(qw/a b c/){for$b(qw/1 2 3/){for(qw/A B C/){print"$a$b$_\n"}}}

확장성 있는 Recursive 버젼

my @a = ([qw/a b c/],[qw/1 2 3/],[qw/A B C/]);
print join('',@$_),"\n" for permute(@a);
 
sub permute {
    my $last = pop @_;
    return map [$_], @$last unless @_;
    return map { my $left = $_; map [@$left, $_], @$last } permute(@_);
}

Perl 모듈을 사용한 확장성 있는 버젼

use Iterator::Array::Jagged;
 
my @a = ([qw/a b c/],[qw/1 2 3/],[qw/A B C/]);
my $iterator = Iterator::Array::Jagged->new( data=>\@a );
while ( my @set = $iterator->next ) {
    print join('',@set),"\n";
}

bootmeta의 이미지

%w/a b c/.each { |i|
  %w/1 2 3/.each { |j|
    %w/A B C/.each { |k|
      puts "#{i}#{j}#{k}"
    }
  }
}

sub array 갯수 제한 없는 recursive 버전

x =[ %w/a b c/, %w/1 2 3/, %w/A B C/]
 
def rec(arr, n, str)
  if ( n < (arr.length - 1))
    arr[n].each { |c| rec(arr,n+1, "#{str}#{c}")}
  else
    arr[n].each { |c| puts " #{str}#{c} "}        
  end
end
 
rec(x, 0, "")
bootmeta의 이미지

#include <stdio.h>
#include <string.h> 
 
char arr[][3][2] = {{ "a", "b", "c" },
                    { "1", "2", "3" },
                    { "A", "B", "C" }};
 
int arr_size[] = {3, 3, 2}; /* arr[3][3][2]   */ 
 
 
void rec(int n, char* str) 
{
    char temp_str[100] =  "";    
 
    strncpy(temp_str, str, strlen(str));
 
    int i = 0;
    if ( n < (arr_size[0] - 1))
    {
        for (i = 0; i < arr_size[n]; i++ )
        {
            strncpy(temp_str + strlen(str), arr[n][i], strlen(arr[n][i]));
            rec(n + 1, temp_str);
        }
 
    } else
    {
        for (i = 0; i < arr_size[n]; i++ )
        {
            strncpy(temp_str + strlen(str), arr[n][i], strlen(arr[n][i]));
            printf("%s\n", temp_str);
        }
    }
}
 
int main()
{
    rec(0, "");
 
    return 0;
}

역시 script 언어가 최고심...
select99의 이미지

안돌려봤지만..

서너 줄이면 될거 같은데..

char a[][][]= {........};
 
for( i = 0; a[i] < a + sizeof(a); i++, printf( "\n" ))
	for( j = 0; a[i][j] < a[i] + sizeof(a[0]); j++ )
		printf( "%c", a[i][j][0] );
kucuny의 이미지

매그넘님께서

char A[][][] = {   { "a" , "b" , "c" }  ,  {"1", "2", "3" } , { "A" , "B" , "C" } ... }

이러한 배열안에 {"a", "b", "c"} 또는 {"1", "2", "3"}과 같은
중복되는 문자배열이 여러개 있다고 가정하고

a1A
a1B
a1C
a2A
a2B
a2C
a3A
a3B
a3C
b1A
b1B
b1C
b2A
b2B

이 형태로의 결과값만 나오게 하려면 중복되는 것을 제거해야 하는 로직이 들어가야 할거 같네요..

**********************
세상의 중심 kucuny.com
**********************

**********************
세상의 중심 kucuny.com
**********************

redneval의 이미지

Haskell 버전입니다.

module Main where
combine [ ] = [ [ ] ]
combine (list_x:list_xs) = [a:b | a <- list_x , b <- combine list_xs]
main = mapM_ putStrLn $ combine [ ['a','b','c'], ['1','2','3'], ['A','b','C'] ]

--------------------Signature--------------------
Light a candle before cursing the darkness.
M.W.Park의 이미지

튜플만 만들어준다는... 출력은 알아서... ㅋㅋㅋ

[{X, Y, Z} || X <- [a, b, c], Y <- [1, 2, 3], Z <- ['A', 'B', 'C']].

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

blueiur의 이미지


단순 코드로만 보면 erlang보다 더 간단한 코드가 나올수 없을듯 합니다!

aero의 이미지

redneval의 이미지

Haskell 로 따라해봤습니다.

x y z = [a++b | a<-y, b<-z]
["a","b","c"] `x` ["1","2","3"] `x` ["A","B","C"]

--------------------Signature--------------------
Light a candle before cursing the darkness.

kyoseon의 이미지

recursion이라 무제한은 아니겠네요.

per([H|T]) -> per(H, T, []).
 
per([], _, []) -> ok;
per([], _, [_|Result]) -> Result;
per([Vh|Vt], [], Result) ->
    io:format("~w~n", [ lists:reverse([Vh|Result])]),
    per(Vt, [], Result);
per([Vh|Vt], [Rh|Rt]=Rest, Result) ->
    per(Vt, Rest, per(Rh, Rt, [Vh | Result])).
amorette의 이미지

$ for a in {a..c}{1..3}{A..C}; do echo $a; done
a1A
a1B
a1C
a2A
a2B
a2C
a3A
a3B
a3C
b1A
b1B
b1C
b2A
b2B
b2C
b3A
b3B
b3C
c1A
c1B
c1C
c2A
c2B
c2C
c3A
c3B
c3C

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.